statping-ng/dev/COVERAGE.html

1886 lines
1.5 MiB
Raw Permalink Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<html>
<head>
<title>Coverage Report</title>
<style type="text/css">
body { background-color: #fff; }
table {
margin-left: 10px;
border-collapse: collapse;
}
td {
background-color: #fff;
padding: 2px;
}
table.overview td {
padding-right: 20px;
}
td.percent, td.linecount { text-align: right; }
div.package, #totalcov {
color: #fff;
background-color: #375eab;
font-size: 16px;
font-weight: bold;
padding: 10px;
border-radius: 5px 5px 5px 5px;
}
div.package, #totalcov {
float: right;
right: 10px;
}
#totalcov {
top: 10px;
position: relative;
background-color: #fff;
color: #000;
border: 1px solid #375eab;
clear: both;
}
#summaryWrapper {
position: fixed;
top: 10px;
float: right;
right: 10px;
}
span.packageTotal {
float: right;
color: #000;
}
#doctitle {
background-color: #fff;
font-size: 24px;
margin-top: 20px;
margin-left: 10px;
color: #375eab;
font-weight: bold;
}
#about {
margin-left: 18px;
font-size: 10px;
}
table tr:last-child td {
font-weight: bold;
}
.functitle, .funcname {
text-align: center;
font-size: 20px;
font-weight: bold;
color: 375eab;
}
.funcname {
text-align: left;
margin-top: 20px;
margin-left: 10px;
margin-bottom: 20px;
padding: 2px 5px 5px;
background-color: #e0ebf5;
}
table.listing {
margin-left: 10px;
}
table.listing td {
padding: 0px;
font-size: 12px;
background-color: #eee;
vertical-align: top;
padding-left: 10px;
border-bottom: 1px solid #fff;
}
table.listing td:first-child {
text-align: right;
font-weight: bold;
vertical-align: center;
}
table.listing tr.miss td {
background-color: #FFBBB8;
}
table.listing tr:last-child td {
font-weight: normal;
color: #000;
}
table.listing tr:last-child td:first-child {
font-weight: bold;
}
.info {
margin-left: 10px;
}
.info code {
}
pre { margin: 1px; }
pre.cmd {
background-color: #e9e9e9;
border-radius: 5px 5px 5px 5px;
padding: 10px;
margin: 20px;
line-height: 18px;
font-size; 14px;
}
a {
text-decoration: none;
color: #375eab;
}
a:hover { text-decoration: underline; }
p { margin-left: 10px; }
</style>
</head>
<body>
<div id="doctitle">Coverage Report</div>
<div id="about">Generated on 15 Oct 18 15:22 -0700 with <a href="https://github.com/matm/gocov-html">gocov-html</a></div><div class="funcname">Report Overview</div><table class="overview">
<tr id="s_pkg_github.com/hunterlong/statup/cmd"><td><code><a href="#pkg_github.com/hunterlong/statup/cmd">github.com/hunterlong/statup/cmd</a></code></td><td class="percent"><code>31.08%</code></td><td class="linecount"><code>46/148</code></td></tr>
<tr id="s_pkg_github.com/hunterlong/statup/core"><td><code><a href="#pkg_github.com/hunterlong/statup/core">github.com/hunterlong/statup/core</a></code></td><td class="percent"><code>52.58%</code></td><td class="linecount"><code>510/970</code></td></tr>
<tr id="s_pkg_github.com/hunterlong/statup/core/notifier"><td><code><a href="#pkg_github.com/hunterlong/statup/core/notifier">github.com/hunterlong/statup/core/notifier</a></code></td><td class="percent"><code>72.73%</code></td><td class="linecount"><code>152/209</code></td></tr>
<tr id="s_pkg_github.com/hunterlong/statup/handlers"><td><code><a href="#pkg_github.com/hunterlong/statup/handlers">github.com/hunterlong/statup/handlers</a></code></td><td class="percent"><code>67.41%</code></td><td class="linecount"><code>635/942</code></td></tr>
<tr id="s_pkg_github.com/hunterlong/statup/notifiers"><td><code><a href="#pkg_github.com/hunterlong/statup/notifiers">github.com/hunterlong/statup/notifiers</a></code></td><td class="percent"><code>7.00%</code></td><td class="linecount"><code>18/257</code></td></tr>
<tr id="s_pkg_github.com/hunterlong/statup/plugin"><td><code><a href="#pkg_github.com/hunterlong/statup/plugin">github.com/hunterlong/statup/plugin</a></code></td><td class="percent"><code>4.08%</code></td><td class="linecount"><code>2/49</code></td></tr>
<tr id="s_pkg_github.com/hunterlong/statup/source"><td><code><a href="#pkg_github.com/hunterlong/statup/source">github.com/hunterlong/statup/source</a></code></td><td class="percent"><code>77.71%</code></td><td class="linecount"><code>136/175</code></td></tr>
<tr id="s_pkg_github.com/hunterlong/statup/utils"><td><code><a href="#pkg_github.com/hunterlong/statup/utils">github.com/hunterlong/statup/utils</a></code></td><td class="percent"><code>54.76%</code></td><td class="linecount"><code>115/210</code></td></tr>
<tr><td><code>Report Total</code></td><td class="percent"><code>54.53%</code></td><td class="linecount"><code>1614/2960</code></td></tr>
</table>
<div id="pkg_github.com/hunterlong/statup/cmd" class="funcname">Package Overview: github.com/hunterlong/statup/cmd <span class="packageTotal">31.08%</span></div><p>This is a coverage report created after analysis of the <code>github.com/hunterlong/statup/cmd</code> package. It
has been generated with the following command:</p><pre class="cmd">gocov test github.com/hunterlong/statup/cmd | gocov-html</pre> <p>Here are the stats. Please select a function name to view its implementation and see what's left for testing.</p><table class="overview">
<tr id="s_fn_HelpEcho"><td><code><a href="#fn_HelpEcho">HelpEcho(...)</a></code></td><td><code>github.com/hunterlong/statup/cmd/cli.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>17/17</code></td></tr>
<tr id="s_fn_init"><td><code><a href="#fn_init">init(...)</a></code></td><td><code>github.com/hunterlong/statup/cmd/main.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_loadDotEnvs"><td><code><a href="#fn_loadDotEnvs">loadDotEnvs(...)</a></code></td><td><code>github.com/hunterlong/statup/cmd/main.go</code></td><td class="percent"><code>60.00%</code></td><td class="linecount"><code>3/5</code></td></tr>
<tr id="s_fn_catchCLI"><td><code><a href="#fn_catchCLI">catchCLI(...)</a></code></td><td><code>github.com/hunterlong/statup/cmd/cli.go</code></td><td class="percent"><code>42.37%</code></td><td class="linecount"><code>25/59</code></td></tr>
<tr id="s_fn_main"><td><code><a href="#fn_main">main(...)</a></code></td><td><code>github.com/hunterlong/statup/cmd/main.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/22</code></td></tr>
<tr id="s_fn_RunOnce"><td><code><a href="#fn_RunOnce">RunOnce(...)</a></code></td><td><code>github.com/hunterlong/statup/cmd/cli.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/17</code></td></tr>
<tr id="s_fn_mainProcess"><td><code><a href="#fn_mainProcess">mainProcess(...)</a></code></td><td><code>github.com/hunterlong/statup/cmd/main.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/11</code></td></tr>
<tr id="s_fn_checkGithubUpdates"><td><code><a href="#fn_checkGithubUpdates">checkGithubUpdates(...)</a></code></td><td><code>github.com/hunterlong/statup/cmd/cli.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/10</code></td></tr>
<tr id="s_fn_parseFlags"><td><code><a href="#fn_parseFlags">parseFlags(...)</a></code></td><td><code>github.com/hunterlong/statup/cmd/main.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/5</code></td></tr>
<tr id="s_fn_ForEachPlugin"><td><code><a href="#fn_ForEachPlugin">ForEachPlugin(...)</a></code></td><td><code>github.com/hunterlong/statup/cmd/main.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
<tr><td colspan="2"><code>github.com/hunterlong/statup/cmd</code></td><td class="percent"><code>31.08%</code></td><td class="linecount"><code>46/148</code></td></tr>
</table>
<div class="funcname" id="fn_HelpEcho">func HelpEcho</div><div class="info"><a href="#s_fn_HelpEcho">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/cmd/cli.go</code>:</p></div><table class="listing">
<tr><td>151</td><td><code><pre>func HelpEcho() {</pre></code></td></tr><tr><td>152</td><td><code><pre> fmt.Printf(&#34;Statup v%v - Statup.io\n&#34;, VERSION)</pre></code></td></tr><tr><td>153</td><td><code><pre> fmt.Printf(&#34;A simple Application Status Monitor that is opensource and lightweight.\n&#34;)</pre></code></td></tr><tr><td>154</td><td><code><pre> fmt.Printf(&#34;Commands:\n&#34;)</pre></code></td></tr><tr><td>155</td><td><code><pre> fmt.Println(&#34; statup - Main command to run Statup server&#34;)</pre></code></td></tr><tr><td>156</td><td><code><pre> fmt.Println(&#34; statup version - Returns the current version of Statup&#34;)</pre></code></td></tr><tr><td>157</td><td><code><pre> fmt.Println(&#34; statup run - Check all services 1 time and then quit&#34;)</pre></code></td></tr><tr><td>158</td><td><code><pre> fmt.Println(&#34; statup test plugins - Test all plugins for required information&#34;)</pre></code></td></tr><tr><td>159</td><td><code><pre> fmt.Println(&#34; statup assets - Dump all assets used locally to be edited.&#34;)</pre></code></td></tr><tr><td>160</td><td><code><pre> fmt.Println(&#34; statup sass - Compile .scss files into the css directory&#34;)</pre></code></td></tr><tr><td>161</td><td><code><pre> fmt.Println(&#34; statup env - Show all environment variables being used for Statup&#34;)</pre></code></td></tr><tr><td>162</td><td><code><pre> fmt.Println(&#34; statup export - Exports the index page as a static HTML for pushing&#34;)</pre></code></td></tr><tr><td>163</td><td><code><pre> fmt.Println(&#34; statup update - Attempts to update to the latest version&#34;)</pre></code></td></tr><tr><td>164</td><td><code><pre> fmt.Println(&#34; statup help - Shows the user basic information about Statup&#34;)</pre></code></td></tr><tr><td>165</td><td><code><pre> fmt.Printf(&#34;Flags:\n&#34;)</pre></code></td></tr><tr><td>166</td><td><code><pre> fmt.Println(&#34; -ip 127.0.0.1 - Run HTTP server on specific IP address (default: localhost)&#34;)</pre></code></td></tr><tr><td>167</td><td><code><pre> fmt.Println(&#34; -port 8080 - Run HTTP server on Port (default: 8080)&#34;)</pre></code></td></tr><tr><td>168</td><td><code><pre> fmt.Println(&#34;Give Statup a Star at https://github.com/hunterlong/statup&#34;)</pre></code></td></tr><tr><td>169</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_init">func init</div><div class="info"><a href="#s_fn_init">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/cmd/main.go</code>:</p></div><table class="listing">
<tr><td>41</td><td><code><pre>func init() {</pre></code></td></tr><tr><td>42</td><td><code><pre> core.VERSION = VERSION</pre></code></td></tr><tr><td>43</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_loadDotEnvs">func loadDotEnvs</div><div class="info"><a href="#s_fn_loadDotEnvs">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/cmd/main.go</code>:</p></div><table class="listing">
<tr><td>88</td><td><code><pre>func loadDotEnvs() error {</pre></code></td></tr><tr><td>89</td><td><code><pre> err := godotenv.Load()</pre></code></td></tr><tr><td>90</td><td><code><pre> if err == nil {</pre></code></td></tr><tr class="miss"><td>91</td><td><code><pre> utils.Log(1, &#34;Environment file &#39;.env&#39; Loaded&#34;)</pre></code></td></tr><tr class="miss"><td>92</td><td><code><pre> UsingDotEnv = true</pre></code></td></tr><tr><td>93</td><td><code><pre> }</pre></code></td></tr><tr><td>94</td><td><code><pre> return err</pre></code></td></tr><tr><td>95</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_catchCLI">func catchCLI</div><div class="info"><a href="#s_fn_catchCLI">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/cmd/cli.go</code>:</p></div><table class="listing">
<tr><td>34</td><td><code><pre>func catchCLI(args []string) error {</pre></code></td></tr><tr><td>35</td><td><code><pre> dir := utils.Directory</pre></code></td></tr><tr><td>36</td><td><code><pre> utils.InitLogs()</pre></code></td></tr><tr><td>37</td><td><code><pre> source.Assets()</pre></code></td></tr><tr><td>38</td><td><code><pre> loadDotEnvs()</pre></code></td></tr><tr><td>39</td><td><code><pre></pre></code></td></tr><tr><td>40</td><td><code><pre> switch args[0] {</pre></code></td></tr><tr><td>41</td><td><code><pre> case &#34;app&#34;:</pre></code></td></tr><tr class="miss"><td>42</td><td><code><pre> handlers.DesktopInit(ipAddress, port)</pre></code></td></tr><tr><td>43</td><td><code><pre> case &#34;version&#34;:</pre></code></td></tr><tr><td>44</td><td><code><pre> if COMMIT != &#34;&#34; {</pre></code></td></tr><tr class="miss"><td>45</td><td><code><pre> fmt.Printf(&#34;Statup v%v (%v)\n&#34;, VERSION, COMMIT)</pre></code></td></tr><tr><td>46</td><td><code><pre> } else {</pre></code></td></tr><tr><td>47</td><td><code><pre> fmt.Printf(&#34;Statup v%v\n&#34;, VERSION)</pre></code></td></tr><tr><td>48</td><td><code><pre> }</pre></code></td></tr><tr><td>49</td><td><code><pre> return errors.New(&#34;end&#34;)</pre></code></td></tr><tr><td>50</td><td><code><pre> case &#34;assets&#34;:</pre></code></td></tr><tr><td>51</td><td><code><pre> err := source.CreateAllAssets(dir)</pre></code></td></tr><tr><td>52</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>53</td><td><code><pre> return err</pre></code></td></tr><tr><td>54</td><td><code><pre> } else {</pre></code></td></tr><tr><td>55</td><td><code><pre> return errors.New(&#34;end&#34;)</pre></code></td></tr><tr><td>56</td><td><code><pre> }</pre></code></td></tr><tr><td>57</td><td><code><pre> case &#34;sass&#34;:</pre></code></td></tr><tr><td>58</td><td><code><pre> err := source.CompileSASS(dir)</pre></code></td></tr><tr><td>59</td><td><code><pre> if err == nil {</pre></code></td></tr><tr><td>60</td><td><code><pre> return errors.New(&#34;end&#34;)</pre></code></td></tr><tr><td>61</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>62</td><td><code><pre> return err</pre></code></td></tr><tr><td>63</td><td><code><pre> case &#34;update&#34;:</pre></code></td></tr><tr class="miss"><td>64</td><td><code><pre> gitCurrent, err := checkGithubUpdates()</pre></code></td></tr><tr class="miss"><td>65</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>66</td><td><code><pre> return nil</pre></code></td></tr><tr><td>67</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>68</td><td><code><pre> fmt.Printf(&#34;Statup Version: v%v\nLatest Version: %v\n&#34;, VERSION, gitCurrent.TagName)</pre></code></td></tr><tr class="miss"><td>69</td><td><code><pre> if VERSION != gitCurrent.TagName[1:] {</pre></code></td></tr><tr class="miss"><td>70</td><td><code><pre> fmt.Printf(&#34;You don&#39;t have the latest version v%v!\nDownload the latest release at: https://github.com/hunterlong/statup\n&#34;, gitCurrent.TagName[1:])</pre></code></td></tr><tr><td>71</td><td><code><pre> } else {</pre></code></td></tr><tr class="miss"><td>72</td><td><code><pre> fmt.Printf(&#34;You have the latest version of Statup!\n&#34;)</pre></code></td></tr><tr><td>73</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>74</td><td><code><pre> if err == nil {</pre></code></td></tr><tr class="miss"><td>75</td><td><code><pre> return errors.New(&#34;end&#34;)</pre></code></td></tr><tr><td>76</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>77</td><td><code><pre> return nil</pre></code></td></tr><tr><td>78</td><td><code><pre> case &#34;test&#34;:</pre></code></td></tr><tr><td>79</td><td><code><pre> cmd := args[1]</pre></code></td></tr><tr><td>80</td><td><code><pre> switch cmd {</pre></code></td></tr><tr><td>81</td><td><code><pre> case &#34;plugins&#34;:</pre></code></td></tr><tr><td>82</td><td><code><pre> plugin.LoadPlugins()</pre></code></td></tr><tr><td>83</td><td><code><pre> }</pre></code></td></tr><tr><td>84</td><td><code><pre> return errors.New(&#34;end&#34;)</pre></code></td></tr><tr><td>85</td><td><code><pre> case &#34;export&#34;:</pre></code></td></tr><tr class="miss"><td>86</td><td><code><pre> var err error</pre></code></td></tr><tr class="miss"><td>87</td><td><code><pre> fmt.Printf(&#34;Statup v%v Exporting Static &#39;index.html&#39; page...\n&#34;, VERSION)</pre></code></td></tr><tr class="miss"><td>88</td><td><code><pre> core.Configs, err = core.LoadConfigFile(dir)</pre></code></td></tr><tr class="miss"><td>89</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>90</td><td><code><pre> utils.Log(4, &#34;config.yml file not found&#34;)</pre></code></td></tr><tr class="miss"><td>91</td><td><code><pre> return err</pre></code></td></tr><tr><td>92</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>93</td><td><code><pre> indexSource := core.ExportIndexHTML()</pre></code></td></tr><tr class="miss"><td>94</td><td><code><pre> err = utils.SaveFile(&#34;./index.html&#34;, []byte(indexSource))</pre></code></td></tr><tr class="miss"><td>95</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>96</td><td><code><pre> utils.Log(4, err)</pre></code></td></tr><tr class="miss"><td>97</td><td><code><pre> return err</pre></code></td></tr><tr><td>98</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>99</td><td><code><pre> utils.Log(1, &#34;Exported Statup index page: &#39;index.html&#39;&#34;)</pre></code></td></tr><tr><td>100</td><td><code><pre> case &#34;help&#34;:</pre></code></td></tr><tr><td>101</td><td><code><pre> HelpEcho()</pre></code></td></tr><tr><td>102</td><td><code><pre> return errors.New(&#34;end&#34;)</pre></code></td></tr><tr><td>103</td><td><code><pre> case &#34;run&#34;:</pre></code></td></tr><tr class="miss"><td>104</td><td><code><pre> utils.Log(1, &#34;Running 1 time and saving to database...&#34;)</pre></code></td></tr><tr class="miss"><td>105</td><td><code><pre> RunOnce()</pre></code></td></tr><tr class="miss"><td>106</td><td><code><pre> fmt.Println(&#34;Check is complete.&#34;)</pre></code></td></tr><tr class="miss"><td>107</td><td><code><pre> return errors.New(&#34;end&#34;)</pre></code></td></tr><tr><td>108</td><td><code><pre> case &#34;env&#34;:</pre></code></td></tr><tr><td>109</td><td><code><pre> fmt.Println(&#34;Statup Environment Variable&#34;)</pre></code></td></tr><tr><td>110</td><td><code><pre> envs, err := godotenv.Read(&#34;.env&#34;)</pre></code></td></tr><tr><td>111</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>112</td><td><code><pre> utils.Log(4, &#34;No .env file found in current directory.&#34;)</pre></code></td></tr><tr><td>113</td><td><code><pre> return err</pre></code></td></tr><tr><td>114</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>115</td><td><code><pre> for k, e := range envs {</pre></code></td></tr><tr class="miss"><td>116</td><td><code><pre> fmt.Printf(&#34;%v=%v\n&#34;, k, e)</pre></code></td></tr><tr><td>117</td><td><code><pre> }</pre></code></td></tr><tr><td>118</td><td><code><pre> default:</pre></code></td></tr><tr class="miss"><td>119</td><td><code><pre> return nil</pre></code></td></tr><tr><td>120</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>121</td><td><code><pre> return errors.New(&#34;end&#34;)</pre></code></td></tr><tr><td>122</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_main">func main</div><div class="info"><a href="#s_fn_main">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/cmd/main.go</code>:</p></div><table class="listing">
<tr><td>57</td><td><code><pre>func main() {</pre></code></td></tr><tr class="miss"><td>58</td><td><code><pre> var err error</pre></code></td></tr><tr class="miss"><td>59</td><td><code><pre> parseFlags()</pre></code></td></tr><tr class="miss"><td>60</td><td><code><pre> loadDotEnvs()</pre></code></td></tr><tr class="miss"><td>61</td><td><code><pre> source.Assets()</pre></code></td></tr><tr class="miss"><td>62</td><td><code><pre> utils.InitLogs()</pre></code></td></tr><tr class="miss"><td>63</td><td><code><pre> args := flag.Args()</pre></code></td></tr><tr><td>64</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>65</td><td><code><pre> if len(args) &gt;= 1 {</pre></code></td></tr><tr class="miss"><td>66</td><td><code><pre> err := catchCLI(args)</pre></code></td></tr><tr class="miss"><td>67</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>68</td><td><code><pre> if err.Error() == &#34;end&#34; {</pre></code></td></tr><tr class="miss"><td>69</td><td><code><pre> os.Exit(0)</pre></code></td></tr><tr><td>70</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>71</td><td><code><pre> fmt.Println(err)</pre></code></td></tr><tr class="miss"><td>72</td><td><code><pre> os.Exit(1)</pre></code></td></tr><tr><td>73</td><td><code><pre> }</pre></code></td></tr><tr><td>74</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>75</td><td><code><pre> utils.Log(1, fmt.Sprintf(&#34;Starting Statup v%v&#34;, VERSION))</pre></code></td></tr><tr class="miss"><td>76</td><td><code><pre> core.Configs, err = core.LoadConfigFile(utils.Directory)</pre></code></td></tr><tr class="miss"><td>77</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>78</td><td><code><pre> utils.Log(3, err)</pre></code></td></tr><tr class="miss"><td>79</td><td><code><pre> core.SetupMode = true</pre></code></td></tr><tr class="miss"><td>80</td><td><code><pre> fmt.Println(handlers.RunHTTPServer(ipAddress, port))</pre></code></td></tr><tr class="miss"><td>81</td><td><code><pre> os.Exit(1)</pre></code></td></tr><tr><td>82</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>83</td><td><code><pre> defer core.CloseDB()</pre></code></td></tr><tr class="miss"><td>84</td><td><code><pre> mainProcess()</pre></code></td></tr><tr><td>85</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_RunOnce">func RunOnce</div><div class="info"><a href="#s_fn_RunOnce">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/cmd/cli.go</code>:</p></div><table class="listing">
<tr><td>125</td><td><code><pre>func RunOnce() {</pre></code></td></tr><tr class="miss"><td>126</td><td><code><pre> var err error</pre></code></td></tr><tr class="miss"><td>127</td><td><code><pre> core.Configs, err = core.LoadConfigFile(utils.Directory)</pre></code></td></tr><tr class="miss"><td>128</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>129</td><td><code><pre> utils.Log(4, &#34;config.yml file not found&#34;)</pre></code></td></tr><tr><td>130</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>131</td><td><code><pre> err = core.Configs.Connect(false, utils.Directory)</pre></code></td></tr><tr class="miss"><td>132</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>133</td><td><code><pre> utils.Log(4, err)</pre></code></td></tr><tr><td>134</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>135</td><td><code><pre> core.CoreApp, err = core.SelectCore()</pre></code></td></tr><tr class="miss"><td>136</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>137</td><td><code><pre> fmt.Println(&#34;Core database was not found, Statup is not setup yet.&#34;)</pre></code></td></tr><tr><td>138</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>139</td><td><code><pre> _, err = core.CoreApp.SelectAllServices(true)</pre></code></td></tr><tr class="miss"><td>140</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>141</td><td><code><pre> utils.Log(4, err)</pre></code></td></tr><tr><td>142</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>143</td><td><code><pre> for _, out := range core.CoreApp.Services {</pre></code></td></tr><tr class="miss"><td>144</td><td><code><pre> service := out.Select()</pre></code></td></tr><tr class="miss"><td>145</td><td><code><pre> out.Check(true)</pre></code></td></tr><tr class="miss"><td>146</td><td><code><pre> fmt.Printf(&#34; Service %v | URL: %v | Latency: %0.0fms | Online: %v\n&#34;, service.Name, service.Domain, (service.Latency * 1000), service.Online)</pre></code></td></tr><tr><td>147</td><td><code><pre> }</pre></code></td></tr><tr><td>148</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_mainProcess">func mainProcess</div><div class="info"><a href="#s_fn_mainProcess">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/cmd/main.go</code>:</p></div><table class="listing">
<tr><td>98</td><td><code><pre>func mainProcess() {</pre></code></td></tr><tr class="miss"><td>99</td><td><code><pre> dir := utils.Directory</pre></code></td></tr><tr class="miss"><td>100</td><td><code><pre> var err error</pre></code></td></tr><tr class="miss"><td>101</td><td><code><pre> err = core.Configs.Connect(false, dir)</pre></code></td></tr><tr class="miss"><td>102</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>103</td><td><code><pre> utils.Log(4, fmt.Sprintf(&#34;could not connect to database: %v&#34;, err))</pre></code></td></tr><tr><td>104</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>105</td><td><code><pre> core.Configs.MigrateDatabase()</pre></code></td></tr><tr class="miss"><td>106</td><td><code><pre> core.InitApp()</pre></code></td></tr><tr class="miss"><td>107</td><td><code><pre> if !core.SetupMode {</pre></code></td></tr><tr class="miss"><td>108</td><td><code><pre> plugin.LoadPlugins()</pre></code></td></tr><tr class="miss"><td>109</td><td><code><pre> fmt.Println(handlers.RunHTTPServer(ipAddress, port))</pre></code></td></tr><tr class="miss"><td>110</td><td><code><pre> os.Exit(1)</pre></code></td></tr><tr><td>111</td><td><code><pre> }</pre></code></td></tr><tr><td>112</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_checkGithubUpdates">func checkGithubUpdates</div><div class="info"><a href="#s_fn_checkGithubUpdates">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/cmd/cli.go</code>:</p></div><table class="listing">
<tr><td>171</td><td><code><pre>func checkGithubUpdates() (githubResponse, error) {</pre></code></td></tr><tr class="miss"><td>172</td><td><code><pre> var gitResp githubResponse</pre></code></td></tr><tr class="miss"><td>173</td><td><code><pre> response, err := http.Get(&#34;https://api.github.com/repos/hunterlong/statup/releases/latest&#34;)</pre></code></td></tr><tr class="miss"><td>174</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>175</td><td><code><pre> return githubResponse{}, err</pre></code></td></tr><tr><td>176</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>177</td><td><code><pre> defer response.Body.Close()</pre></code></td></tr><tr class="miss"><td>178</td><td><code><pre> contents, err := ioutil.ReadAll(response.Body)</pre></code></td></tr><tr class="miss"><td>179</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>180</td><td><code><pre> return githubResponse{}, err</pre></code></td></tr><tr><td>181</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>182</td><td><code><pre> err = json.Unmarshal(contents, &amp;gitResp)</pre></code></td></tr><tr class="miss"><td>183</td><td><code><pre> return gitResp, err</pre></code></td></tr><tr><td>184</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_parseFlags">func parseFlags</div><div class="info"><a href="#s_fn_parseFlags">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/cmd/main.go</code>:</p></div><table class="listing">
<tr><td>48</td><td><code><pre>func parseFlags() {</pre></code></td></tr><tr class="miss"><td>49</td><td><code><pre> ip := flag.String(&#34;ip&#34;, &#34;0.0.0.0&#34;, &#34;IP address to run the Statup HTTP server&#34;)</pre></code></td></tr><tr class="miss"><td>50</td><td><code><pre> p := flag.Int(&#34;port&#34;, 8080, &#34;Port to run the HTTP server&#34;)</pre></code></td></tr><tr class="miss"><td>51</td><td><code><pre> flag.Parse()</pre></code></td></tr><tr class="miss"><td>52</td><td><code><pre> ipAddress = *ip</pre></code></td></tr><tr class="miss"><td>53</td><td><code><pre> port = *p</pre></code></td></tr><tr><td>54</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_ForEachPlugin">func ForEachPlugin</div><div class="info"><a href="#s_fn_ForEachPlugin">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/cmd/main.go</code>:</p></div><table class="listing">
<tr><td>114</td><td><code><pre>func ForEachPlugin() {</pre></code></td></tr><tr class="miss"><td>115</td><td><code><pre> if len(core.CoreApp.Plugins) &gt; 0 {</pre></code></td></tr><tr><td>116</td><td><code><pre> //for _, p := range core.Plugins {</pre></code></td></tr><tr><td>117</td><td><code><pre> // p.OnShutdown()</pre></code></td></tr><tr><td>118</td><td><code><pre> //}</pre></code></td></tr><tr><td>119</td><td><code><pre> }</pre></code></td></tr><tr><td>120</td><td><code><pre>}</pre></code></td></tr></table>
<!-- Can be parsed by external script
PACKAGE:github.com/hunterlong/statup/cmd DONE:31.08
-->
<div id="pkg_github.com/hunterlong/statup/core" class="funcname">Package Overview: github.com/hunterlong/statup/core <span class="packageTotal">52.58%</span></div><p>This is a coverage report created after analysis of the <code>github.com/hunterlong/statup/core</code> package. It
has been generated with the following command:</p><pre class="cmd">gocov test github.com/hunterlong/statup/core | gocov-html</pre> <p>Here are the stats. Please select a function name to view its implementation and see what's left for testing.</p><table class="overview">
<tr id="s_fn_InsertLargeSampleData"><td><code><a href="#fn_InsertLargeSampleData">InsertLargeSampleData(...)</a></code></td><td><code>github.com/hunterlong/statup/core/sample.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>28/28</code></td></tr>
<tr id="s_fn_InsertSampleData"><td><code><a href="#fn_InsertSampleData">InsertSampleData(...)</a></code></td><td><code>github.com/hunterlong/statup/core/sample.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>13/13</code></td></tr>
<tr id="s_fn_Service.CheckQueue"><td><code><a href="#fn_Service.CheckQueue">Service.CheckQueue(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checker.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>13/13</code></td></tr>
<tr id="s_fn_insertSampleCheckins"><td><code><a href="#fn_insertSampleCheckins">insertSampleCheckins(...)</a></code></td><td><code>github.com/hunterlong/statup/core/sample.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>12/12</code></td></tr>
<tr id="s_fn_DbConfig.CreateDatabase"><td><code><a href="#fn_DbConfig.CreateDatabase">DbConfig.CreateDatabase(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>11/11</code></td></tr>
<tr id="s_fn_insertHitRecords"><td><code><a href="#fn_insertHitRecords">insertHitRecords(...)</a></code></td><td><code>github.com/hunterlong/statup/core/sample.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>10/10</code></td></tr>
<tr id="s_fn_DbConfig.DropDatabase"><td><code><a href="#fn_DbConfig.DropDatabase">DbConfig.DropDatabase(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>10/10</code></td></tr>
<tr id="s_fn_insertFailureRecords"><td><code><a href="#fn_insertFailureRecords">insertFailureRecords(...)</a></code></td><td><code>github.com/hunterlong/statup/core/sample.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>8/8</code></td></tr>
<tr id="s_fn_recordSuccess"><td><code><a href="#fn_recordSuccess">recordSuccess(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checker.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>6/6</code></td></tr>
<tr id="s_fn_Core.CountOnline"><td><code><a href="#fn_Core.CountOnline">Core.CountOnline(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>5/5</code></td></tr>
<tr id="s_fn_Checkin.Expected"><td><code><a href="#fn_Checkin.Expected">Checkin.Expected(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checkin.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>5/5</code></td></tr>
<tr id="s_fn_SelectUsername"><td><code><a href="#fn_SelectUsername">SelectUsername(...)</a></code></td><td><code>github.com/hunterlong/statup/core/users.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>4/4</code></td></tr>
<tr id="s_fn_Service.Hits"><td><code><a href="#fn_Service.Hits">Service.Hits(...)</a></code></td><td><code>github.com/hunterlong/statup/core/hits.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>4/4</code></td></tr>
<tr id="s_fn_insertSampleUsers"><td><code><a href="#fn_insertSampleUsers">insertSampleUsers(...)</a></code></td><td><code>github.com/hunterlong/statup/core/sample.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>4/4</code></td></tr>
<tr id="s_fn_NewCore"><td><code><a href="#fn_NewCore">NewCore(...)</a></code></td><td><code>github.com/hunterlong/statup/core/core.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>4/4</code></td></tr>
<tr id="s_fn_Checkin.CreateFailure"><td><code><a href="#fn_Checkin.CreateFailure">Checkin.CreateFailure(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checkin.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>4/4</code></td></tr>
<tr id="s_fn_Service.LimitedHits"><td><code><a href="#fn_Service.LimitedHits">Service.LimitedHits(...)</a></code></td><td><code>github.com/hunterlong/statup/core/hits.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>4/4</code></td></tr>
<tr id="s_fn_user.Update"><td><code><a href="#fn_user.Update">user.Update(...)</a></code></td><td><code>github.com/hunterlong/statup/core/users.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>4/4</code></td></tr>
<tr id="s_fn_Service.LimitedFailures"><td><code><a href="#fn_Service.LimitedFailures">Service.LimitedFailures(...)</a></code></td><td><code>github.com/hunterlong/statup/core/failures.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>4/4</code></td></tr>
<tr id="s_fn_Service.TotalHits"><td><code><a href="#fn_Service.TotalHits">Service.TotalHits(...)</a></code></td><td><code>github.com/hunterlong/statup/core/hits.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>4/4</code></td></tr>
<tr id="s_fn_Service.TotalFailuresSince"><td><code><a href="#fn_Service.TotalFailuresSince">Service.TotalFailuresSince(...)</a></code></td><td><code>github.com/hunterlong/statup/core/failures.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>4/4</code></td></tr>
<tr id="s_fn_Service.TotalHitsSince"><td><code><a href="#fn_Service.TotalHitsSince">Service.TotalHitsSince(...)</a></code></td><td><code>github.com/hunterlong/statup/core/hits.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>4/4</code></td></tr>
<tr id="s_fn_reverseHits"><td><code><a href="#fn_reverseHits">reverseHits(...)</a></code></td><td><code>github.com/hunterlong/statup/core/hits.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
<tr id="s_fn_Checkin.Hits"><td><code><a href="#fn_Checkin.Hits">Checkin.Hits(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checkin.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
<tr id="s_fn_Checkin.Last"><td><code><a href="#fn_Checkin.Last">Checkin.Last(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checkin.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
<tr id="s_fn_Service.Checkins"><td><code><a href="#fn_Service.Checkins">Service.Checkins(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
<tr id="s_fn_insertSampleCore"><td><code><a href="#fn_insertSampleCore">insertSampleCore(...)</a></code></td><td><code>github.com/hunterlong/statup/core/sample.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
<tr id="s_fn_Service.Check"><td><code><a href="#fn_Service.Check">Service.Check(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checker.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
<tr id="s_fn_Checkin.BeforeCreate"><td><code><a href="#fn_Checkin.BeforeCreate">Checkin.BeforeCreate(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
<tr id="s_fn_SelectUser"><td><code><a href="#fn_SelectUser">SelectUser(...)</a></code></td><td><code>github.com/hunterlong/statup/core/users.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
<tr id="s_fn_Service.AfterFind"><td><code><a href="#fn_Service.AfterFind">Service.AfterFind(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
<tr id="s_fn_checkinHit.Ago"><td><code><a href="#fn_checkinHit.Ago">checkinHit.Ago(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checkin.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
<tr id="s_fn_user.AfterFind"><td><code><a href="#fn_user.AfterFind">user.AfterFind(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
<tr id="s_fn_failure.AfterFind"><td><code><a href="#fn_failure.AfterFind">failure.AfterFind(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
<tr id="s_fn_Checkin.AfterFind"><td><code><a href="#fn_Checkin.AfterFind">Checkin.AfterFind(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
<tr id="s_fn_Checkin.Grace"><td><code><a href="#fn_Checkin.Grace">Checkin.Grace(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checkin.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
<tr id="s_fn_Checkin.Period"><td><code><a href="#fn_Checkin.Period">Checkin.Period(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checkin.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
<tr id="s_fn_Checkin.Service"><td><code><a href="#fn_Checkin.Service">Checkin.Service(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checkin.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
<tr id="s_fn_updateService"><td><code><a href="#fn_updateService">updateService(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
<tr id="s_fn_CheckHash"><td><code><a href="#fn_CheckHash">CheckHash(...)</a></code></td><td><code>github.com/hunterlong/statup/core/users.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
<tr id="s_fn_checkinHit.AfterFind"><td><code><a href="#fn_checkinHit.AfterFind">checkinHit.AfterFind(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
<tr id="s_fn_checkinHitsDB"><td><code><a href="#fn_checkinHitsDB">checkinHitsDB(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_user.Delete"><td><code><a href="#fn_user.Delete">user.Delete(...)</a></code></td><td><code>github.com/hunterlong/statup/core/users.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_init"><td><code><a href="#fn_init">init(...)</a></code></td><td><code>github.com/hunterlong/statup/core/core.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_ReturnCheckin"><td><code><a href="#fn_ReturnCheckin">ReturnCheckin(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checkin.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_reorderServices"><td><code><a href="#fn_reorderServices">reorderServices(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_ReturnService"><td><code><a href="#fn_ReturnService">ReturnService(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_checkinDB"><td><code><a href="#fn_checkinDB">checkinDB(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_ReturnCheckinHit"><td><code><a href="#fn_ReturnCheckinHit">ReturnCheckinHit(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checkin.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_ServiceOrder.Len"><td><code><a href="#fn_ServiceOrder.Len">ServiceOrder.Len(...)</a></code></td><td><code>github.com/hunterlong/statup/core/core.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_ServiceOrder.Swap"><td><code><a href="#fn_ServiceOrder.Swap">ServiceOrder.Swap(...)</a></code></td><td><code>github.com/hunterlong/statup/core/core.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_ServiceOrder.Less"><td><code><a href="#fn_ServiceOrder.Less">ServiceOrder.Less(...)</a></code></td><td><code>github.com/hunterlong/statup/core/core.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_failuresDB"><td><code><a href="#fn_failuresDB">failuresDB(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_hitsDB"><td><code><a href="#fn_hitsDB">hitsDB(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_servicesDB"><td><code><a href="#fn_servicesDB">servicesDB(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_coreDB"><td><code><a href="#fn_coreDB">coreDB(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_usersDB"><td><code><a href="#fn_usersDB">usersDB(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_ReturnUser"><td><code><a href="#fn_ReturnUser">ReturnUser(...)</a></code></td><td><code>github.com/hunterlong/statup/core/users.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_Service.Select"><td><code><a href="#fn_Service.Select">Service.Select(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_Service.parseHost"><td><code><a href="#fn_Service.parseHost">Service.parseHost(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checker.go</code></td><td class="percent"><code>90.91%</code></td><td class="linecount"><code>10/11</code></td></tr>
<tr id="s_fn_Service.dnsCheck"><td><code><a href="#fn_Service.dnsCheck">Service.dnsCheck(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checker.go</code></td><td class="percent"><code>90.91%</code></td><td class="linecount"><code>10/11</code></td></tr>
<tr id="s_fn_Service.Sum"><td><code><a href="#fn_Service.Sum">Service.Sum(...)</a></code></td><td><code>github.com/hunterlong/statup/core/hits.go</code></td><td class="percent"><code>85.71%</code></td><td class="linecount"><code>6/7</code></td></tr>
<tr id="s_fn_Service.Update"><td><code><a href="#fn_Service.Update">Service.Update(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>84.62%</code></td><td class="linecount"><code>11/13</code></td></tr>
<tr id="s_fn_Service.Delete"><td><code><a href="#fn_Service.Delete">Service.Delete(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>81.82%</code></td><td class="linecount"><code>9/11</code></td></tr>
<tr id="s_fn_Service.Create"><td><code><a href="#fn_Service.Create">Service.Create(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>81.82%</code></td><td class="linecount"><code>9/11</code></td></tr>
<tr id="s_fn_Checkin.Routine"><td><code><a href="#fn_Checkin.Routine">Checkin.Routine(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checkin.go</code></td><td class="percent"><code>80.00%</code></td><td class="linecount"><code>12/15</code></td></tr>
<tr id="s_fn_Service.OnlineSince"><td><code><a href="#fn_Service.OnlineSince">Service.OnlineSince(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>80.00%</code></td><td class="linecount"><code>12/15</code></td></tr>
<tr id="s_fn_Service.duration"><td><code><a href="#fn_Service.duration">Service.duration(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checker.go</code></td><td class="percent"><code>80.00%</code></td><td class="linecount"><code>4/5</code></td></tr>
<tr id="s_fn_SelectAllUsers"><td><code><a href="#fn_SelectAllUsers">SelectAllUsers(...)</a></code></td><td><code>github.com/hunterlong/statup/core/users.go</code></td><td class="percent"><code>80.00%</code></td><td class="linecount"><code>4/5</code></td></tr>
<tr id="s_fn_Service.AvgUptime"><td><code><a href="#fn_Service.AvgUptime">Service.AvgUptime(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>78.57%</code></td><td class="linecount"><code>11/14</code></td></tr>
<tr id="s_fn_Service.AllFailures"><td><code><a href="#fn_Service.AllFailures">Service.AllFailures(...)</a></code></td><td><code>github.com/hunterlong/statup/core/failures.go</code></td><td class="percent"><code>77.78%</code></td><td class="linecount"><code>7/9</code></td></tr>
<tr id="s_fn_Service.Downtime"><td><code><a href="#fn_Service.Downtime">Service.Downtime(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>75.00%</code></td><td class="linecount"><code>6/8</code></td></tr>
<tr id="s_fn_Checkin.Create"><td><code><a href="#fn_Checkin.Create">Checkin.Create(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checkin.go</code></td><td class="percent"><code>75.00%</code></td><td class="linecount"><code>6/8</code></td></tr>
<tr id="s_fn_Service.index"><td><code><a href="#fn_Service.index">Service.index(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>75.00%</code></td><td class="linecount"><code>3/4</code></td></tr>
<tr id="s_fn_SelectService"><td><code><a href="#fn_SelectService">SelectService(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>75.00%</code></td><td class="linecount"><code>3/4</code></td></tr>
<tr id="s_fn_user.Create"><td><code><a href="#fn_user.Create">user.Create(...)</a></code></td><td><code>github.com/hunterlong/statup/core/users.go</code></td><td class="percent"><code>72.73%</code></td><td class="linecount"><code>8/11</code></td></tr>
<tr id="s_fn_Service.checkTcp"><td><code><a href="#fn_Service.checkTcp">Service.checkTcp(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checker.go</code></td><td class="percent"><code>72.00%</code></td><td class="linecount"><code>18/25</code></td></tr>
<tr id="s_fn_Core.SelectAllServices"><td><code><a href="#fn_Core.SelectAllServices">Core.SelectAllServices(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>71.43%</code></td><td class="linecount"><code>10/14</code></td></tr>
<tr id="s_fn_DbConfig.Save"><td><code><a href="#fn_DbConfig.Save">DbConfig.Save(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>71.43%</code></td><td class="linecount"><code>10/14</code></td></tr>
<tr id="s_fn_AuthUser"><td><code><a href="#fn_AuthUser">AuthUser(...)</a></code></td><td><code>github.com/hunterlong/statup/core/users.go</code></td><td class="percent"><code>71.43%</code></td><td class="linecount"><code>5/7</code></td></tr>
<tr id="s_fn_Service.CreateFailure"><td><code><a href="#fn_Service.CreateFailure">Service.CreateFailure(...)</a></code></td><td><code>github.com/hunterlong/statup/core/failures.go</code></td><td class="percent"><code>71.43%</code></td><td class="linecount"><code>5/7</code></td></tr>
<tr id="s_fn_SelectCore"><td><code><a href="#fn_SelectCore">SelectCore(...)</a></code></td><td><code>github.com/hunterlong/statup/core/core.go</code></td><td class="percent"><code>69.23%</code></td><td class="linecount"><code>9/13</code></td></tr>
<tr id="s_fn_Service.checkHttp"><td><code><a href="#fn_Service.checkHttp">Service.checkHttp(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checker.go</code></td><td class="percent"><code>68.09%</code></td><td class="linecount"><code>32/47</code></td></tr>
<tr id="s_fn_DbConfig.MigrateDatabase"><td><code><a href="#fn_DbConfig.MigrateDatabase">DbConfig.MigrateDatabase(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>66.67%</code></td><td class="linecount"><code>8/12</code></td></tr>
<tr id="s_fn_LoadConfigFile"><td><code><a href="#fn_LoadConfigFile">LoadConfigFile(...)</a></code></td><td><code>github.com/hunterlong/statup/core/configs.go</code></td><td class="percent"><code>66.67%</code></td><td class="linecount"><code>8/12</code></td></tr>
<tr id="s_fn_user.BeforeCreate"><td><code><a href="#fn_user.BeforeCreate">user.BeforeCreate(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>66.67%</code></td><td class="linecount"><code>2/3</code></td></tr>
<tr id="s_fn_Service.BeforeCreate"><td><code><a href="#fn_Service.BeforeCreate">Service.BeforeCreate(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>66.67%</code></td><td class="linecount"><code>2/3</code></td></tr>
<tr id="s_fn_checkinHit.BeforeCreate"><td><code><a href="#fn_checkinHit.BeforeCreate">checkinHit.BeforeCreate(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>66.67%</code></td><td class="linecount"><code>2/3</code></td></tr>
<tr id="s_fn_DbConfig.Connect"><td><code><a href="#fn_DbConfig.Connect">DbConfig.Connect(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>65.38%</code></td><td class="linecount"><code>17/26</code></td></tr>
<tr id="s_fn_Service.CreateHit"><td><code><a href="#fn_Service.CreateHit">Service.CreateHit(...)</a></code></td><td><code>github.com/hunterlong/statup/core/hits.go</code></td><td class="percent"><code>60.00%</code></td><td class="linecount"><code>3/5</code></td></tr>
<tr id="s_fn_Checkin.Update"><td><code><a href="#fn_Checkin.Update">Checkin.Update(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checkin.go</code></td><td class="percent"><code>60.00%</code></td><td class="linecount"><code>3/5</code></td></tr>
<tr id="s_fn_checkinHit.Create"><td><code><a href="#fn_checkinHit.Create">checkinHit.Create(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checkin.go</code></td><td class="percent"><code>57.14%</code></td><td class="linecount"><code>4/7</code></td></tr>
<tr id="s_fn_Service.SmallText"><td><code><a href="#fn_Service.SmallText">Service.SmallText(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>50.00%</code></td><td class="linecount"><code>6/12</code></td></tr>
<tr id="s_fn_InsertNotifierDB"><td><code><a href="#fn_InsertNotifierDB">InsertNotifierDB(...)</a></code></td><td><code>github.com/hunterlong/statup/core/core.go</code></td><td class="percent"><code>50.00%</code></td><td class="linecount"><code>3/6</code></td></tr>
<tr id="s_fn_@356:8"><td><code><a href="#fn_@356:8">@356:8(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>50.00%</code></td><td class="linecount"><code>1/2</code></td></tr>
<tr id="s_fn_DefaultPort"><td><code><a href="#fn_DefaultPort">DefaultPort(...)</a></code></td><td><code>github.com/hunterlong/statup/core/configs.go</code></td><td class="percent"><code>40.00%</code></td><td class="linecount"><code>2/5</code></td></tr>
<tr id="s_fn_LoadUsingEnv"><td><code><a href="#fn_LoadUsingEnv">LoadUsingEnv(...)</a></code></td><td><code>github.com/hunterlong/statup/core/configs.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/35</code></td></tr>
<tr id="s_fn_failure.ParseError"><td><code><a href="#fn_failure.ParseError">failure.ParseError(...)</a></code></td><td><code>github.com/hunterlong/statup/core/failures.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/30</code></td></tr>
<tr id="s_fn_ExportIndexHTML"><td><code><a href="#fn_ExportIndexHTML">ExportIndexHTML(...)</a></code></td><td><code>github.com/hunterlong/statup/core/export.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/23</code></td></tr>
<tr id="s_fn_GraphDataRaw"><td><code><a href="#fn_GraphDataRaw">GraphDataRaw(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/16</code></td></tr>
<tr id="s_fn_InsertSampleHits"><td><code><a href="#fn_InsertSampleHits">InsertSampleHits(...)</a></code></td><td><code>github.com/hunterlong/statup/core/sample.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/14</code></td></tr>
<tr id="s_fn_DbConfig.Update"><td><code><a href="#fn_DbConfig.Update">DbConfig.Update(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/12</code></td></tr>
<tr id="s_fn_Dbtimestamp"><td><code><a href="#fn_Dbtimestamp">Dbtimestamp(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/12</code></td></tr>
<tr id="s_fn_ExportChartsJs"><td><code><a href="#fn_ExportChartsJs">ExportChartsJs(...)</a></code></td><td><code>github.com/hunterlong/statup/core/export.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/11</code></td></tr>
<tr id="s_fn_Service.TotalUptime"><td><code><a href="#fn_Service.TotalUptime">Service.TotalUptime(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/10</code></td></tr>
<tr id="s_fn_EnvToConfig"><td><code><a href="#fn_EnvToConfig">EnvToConfig(...)</a></code></td><td><code>github.com/hunterlong/statup/core/configs.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/9</code></td></tr>
<tr id="s_fn_Checkin.RecheckCheckinFailure"><td><code><a href="#fn_Checkin.RecheckCheckinFailure">Checkin.RecheckCheckinFailure(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checkin.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/8</code></td></tr>
<tr id="s_fn_DbConfig.CreateCore"><td><code><a href="#fn_DbConfig.CreateCore">DbConfig.CreateCore(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/8</code></td></tr>
<tr id="s_fn_Service.AvgTime"><td><code><a href="#fn_Service.AvgTime">Service.AvgTime(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/8</code></td></tr>
<tr id="s_fn_Service.GraphData"><td><code><a href="#fn_Service.GraphData">Service.GraphData(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/8</code></td></tr>
<tr id="s_fn_CountFailures"><td><code><a href="#fn_CountFailures">CountFailures(...)</a></code></td><td><code>github.com/hunterlong/statup/core/failures.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/6</code></td></tr>
<tr id="s_fn_InitApp"><td><code><a href="#fn_InitApp">InitApp(...)</a></code></td><td><code>github.com/hunterlong/statup/core/core.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/6</code></td></tr>
<tr id="s_fn_Core.Count24HFailures"><td><code><a href="#fn_Core.Count24HFailures">Core.Count24HFailures(...)</a></code></td><td><code>github.com/hunterlong/statup/core/failures.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/6</code></td></tr>
<tr id="s_fn_SampleData"><td><code><a href="#fn_SampleData">SampleData(...)</a></code></td><td><code>github.com/hunterlong/statup/core/configs.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/5</code></td></tr>
<tr id="s_fn_recordFailure"><td><code><a href="#fn_recordFailure">recordFailure(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checker.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/5</code></td></tr>
<tr id="s_fn_Service.lastFailure"><td><code><a href="#fn_Service.lastFailure">Service.lastFailure(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/5</code></td></tr>
<tr id="s_fn_DatabaseMaintence"><td><code><a href="#fn_DatabaseMaintence">DatabaseMaintence(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/5</code></td></tr>
<tr id="s_fn_DateScanObj.ToString"><td><code><a href="#fn_DateScanObj.ToString">DateScanObj.ToString(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/5</code></td></tr>
<tr id="s_fn_DeleteConfig"><td><code><a href="#fn_DeleteConfig">DeleteConfig(...)</a></code></td><td><code>github.com/hunterlong/statup/core/configs.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/5</code></td></tr>
<tr id="s_fn_Core.CurrentTime"><td><code><a href="#fn_Core.CurrentTime">Core.CurrentTime(...)</a></code></td><td><code>github.com/hunterlong/statup/core/core.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/4</code></td></tr>
<tr id="s_fn_Service.TotalFailures"><td><code><a href="#fn_Service.TotalFailures">Service.TotalFailures(...)</a></code></td><td><code>github.com/hunterlong/statup/core/failures.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/4</code></td></tr>
<tr id="s_fn_Service.DeleteFailures"><td><code><a href="#fn_Service.DeleteFailures">Service.DeleteFailures(...)</a></code></td><td><code>github.com/hunterlong/statup/core/failures.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/4</code></td></tr>
<tr id="s_fn_DbConfig.InsertCore"><td><code><a href="#fn_DbConfig.InsertCore">DbConfig.InsertCore(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/4</code></td></tr>
<tr id="s_fn_Core.AllOnline"><td><code><a href="#fn_Core.AllOnline">Core.AllOnline(...)</a></code></td><td><code>github.com/hunterlong/statup/core/core.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/4</code></td></tr>
<tr id="s_fn_DeleteAllSince"><td><code><a href="#fn_DeleteAllSince">DeleteAllSince(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/4</code></td></tr>
<tr id="s_fn_Service.CheckinProcess"><td><code><a href="#fn_Service.CheckinProcess">Service.CheckinProcess(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/4</code></td></tr>
<tr id="s_fn_SelectCheckinId"><td><code><a href="#fn_SelectCheckinId">SelectCheckinId(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checkin.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/3</code></td></tr>
<tr id="s_fn_SelectCheckin"><td><code><a href="#fn_SelectCheckin">SelectCheckin(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checkin.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/3</code></td></tr>
<tr id="s_fn_Hit.BeforeCreate"><td><code><a href="#fn_Hit.BeforeCreate">Hit.BeforeCreate(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/3</code></td></tr>
<tr id="s_fn_failure.BeforeCreate"><td><code><a href="#fn_failure.BeforeCreate">failure.BeforeCreate(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/3</code></td></tr>
<tr id="s_fn_Checkin.Delete"><td><code><a href="#fn_Checkin.Delete">Checkin.Delete(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checkin.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/3</code></td></tr>
<tr id="s_fn_Service.LimitedCheckins"><td><code><a href="#fn_Service.LimitedCheckins">Service.LimitedCheckins(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/3</code></td></tr>
<tr id="s_fn_Core.MobileSASS"><td><code><a href="#fn_Core.MobileSASS">Core.MobileSASS(...)</a></code></td><td><code>github.com/hunterlong/statup/core/core.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/3</code></td></tr>
<tr id="s_fn_Core.BaseSASS"><td><code><a href="#fn_Core.BaseSASS">Core.BaseSASS(...)</a></code></td><td><code>github.com/hunterlong/statup/core/core.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/3</code></td></tr>
<tr id="s_fn_Core.SassVars"><td><code><a href="#fn_Core.SassVars">Core.SassVars(...)</a></code></td><td><code>github.com/hunterlong/statup/core/core.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/3</code></td></tr>
<tr id="s_fn_checkServices"><td><code><a href="#fn_checkServices">checkServices(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checker.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/3</code></td></tr>
<tr id="s_fn_Service.AvgUptime24"><td><code><a href="#fn_Service.AvgUptime24">Service.AvgUptime24(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/2</code></td></tr>
<tr id="s_fn_Service.ToJSON"><td><code><a href="#fn_Service.ToJSON">Service.ToJSON(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/2</code></td></tr>
<tr id="s_fn_Service.HitsBetween"><td><code><a href="#fn_Service.HitsBetween">Service.HitsBetween(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/2</code></td></tr>
<tr id="s_fn_failure.Ago"><td><code><a href="#fn_failure.Ago">failure.Ago(...)</a></code></td><td><code>github.com/hunterlong/statup/core/failures.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/2</code></td></tr>
<tr id="s_fn_Service.TotalFailures24"><td><code><a href="#fn_Service.TotalFailures24">Service.TotalFailures24(...)</a></code></td><td><code>github.com/hunterlong/statup/core/failures.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/2</code></td></tr>
<tr id="s_fn_Service.Online24"><td><code><a href="#fn_Service.Online24">Service.Online24(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/2</code></td></tr>
<tr id="s_fn_CloseDB"><td><code><a href="#fn_CloseDB">CloseDB(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/2</code></td></tr>
<tr id="s_fn_Hit.AfterFind"><td><code><a href="#fn_Hit.AfterFind">Hit.AfterFind(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/2</code></td></tr>
<tr id="s_fn_DbConfig.waitForDb"><td><code><a href="#fn_DbConfig.waitForDb">DbConfig.waitForDb(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/2</code></td></tr>
<tr id="s_fn_UpdateCore"><td><code><a href="#fn_UpdateCore">UpdateCore(...)</a></code></td><td><code>github.com/hunterlong/statup/core/core.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/2</code></td></tr>
<tr id="s_fn_failure.Delete"><td><code><a href="#fn_failure.Delete">failure.Delete(...)</a></code></td><td><code>github.com/hunterlong/statup/core/failures.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/2</code></td></tr>
<tr id="s_fn_DbConfig.Close"><td><code><a href="#fn_DbConfig.Close">DbConfig.Close(...)</a></code></td><td><code>github.com/hunterlong/statup/core/database.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
<tr id="s_fn_injectDatabase"><td><code><a href="#fn_injectDatabase">injectDatabase(...)</a></code></td><td><code>github.com/hunterlong/statup/core/export.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
<tr id="s_fn_@68:10"><td><code><a href="#fn_@68:10">@68:10(...)</a></code></td><td><code>github.com/hunterlong/statup/core/export.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
<tr id="s_fn_Core.ToCore"><td><code><a href="#fn_Core.ToCore">Core.ToCore(...)</a></code></td><td><code>github.com/hunterlong/statup/core/core.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
<tr id="s_fn_Services"><td><code><a href="#fn_Services">Services(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
<tr id="s_fn_Service.UpdateSingle"><td><code><a href="#fn_Service.UpdateSingle">Service.UpdateSingle(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
<tr id="s_fn_@53:11"><td><code><a href="#fn_@53:11">@53:11(...)</a></code></td><td><code>github.com/hunterlong/statup/core/export.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
<tr id="s_fn_@56:14"><td><code><a href="#fn_@56:14">@56:14(...)</a></code></td><td><code>github.com/hunterlong/statup/core/export.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
<tr id="s_fn_Core.ServicesCount"><td><code><a href="#fn_Core.ServicesCount">Core.ServicesCount(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
<tr id="s_fn_Service.DowntimeText"><td><code><a href="#fn_Service.DowntimeText">Service.DowntimeText(...)</a></code></td><td><code>github.com/hunterlong/statup/core/services.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
<tr id="s_fn_Core.UsingAssets"><td><code><a href="#fn_Core.UsingAssets">Core.UsingAssets(...)</a></code></td><td><code>github.com/hunterlong/statup/core/core.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
<tr id="s_fn_@59:14"><td><code><a href="#fn_@59:14">@59:14(...)</a></code></td><td><code>github.com/hunterlong/statup/core/export.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
<tr id="s_fn_@62:14"><td><code><a href="#fn_@62:14">@62:14(...)</a></code></td><td><code>github.com/hunterlong/statup/core/export.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
<tr id="s_fn_Checkin.Link"><td><code><a href="#fn_Checkin.Link">Checkin.Link(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checkin.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
<tr id="s_fn_@65:17"><td><code><a href="#fn_@65:17">@65:17(...)</a></code></td><td><code>github.com/hunterlong/statup/core/export.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
<tr id="s_fn_@94:11"><td><code><a href="#fn_@94:11">@94:11(...)</a></code></td><td><code>github.com/hunterlong/statup/core/export.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
<tr id="s_fn_Checkin.String"><td><code><a href="#fn_Checkin.String">Checkin.String(...)</a></code></td><td><code>github.com/hunterlong/statup/core/checkin.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
<tr id="s_fn_@71:17"><td><code><a href="#fn_@71:17">@71:17(...)</a></code></td><td><code>github.com/hunterlong/statup/core/export.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
<tr id="s_fn_@50:9"><td><code><a href="#fn_@50:9">@50:9(...)</a></code></td><td><code>github.com/hunterlong/statup/core/export.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
<tr><td colspan="2"><code>github.com/hunterlong/statup/core</code></td><td class="percent"><code>52.58%</code></td><td class="linecount"><code>510/970</code></td></tr>
</table>
<div class="funcname" id="fn_InsertLargeSampleData">func InsertLargeSampleData</div><div class="info"><a href="#s_fn_InsertLargeSampleData">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/sample.go</code>:</p></div><table class="listing">
<tr><td>185</td><td><code><pre>func InsertLargeSampleData() error {</pre></code></td></tr><tr><td>186</td><td><code><pre> insertSampleCore()</pre></code></td></tr><tr><td>187</td><td><code><pre> InsertSampleData()</pre></code></td></tr><tr><td>188</td><td><code><pre> insertSampleUsers()</pre></code></td></tr><tr><td>189</td><td><code><pre> insertSampleCheckins()</pre></code></td></tr><tr><td>190</td><td><code><pre> s6 := ReturnService(&amp;types.Service{</pre></code></td></tr><tr><td>191</td><td><code><pre> Name: &#34;JSON Lint&#34;,</pre></code></td></tr><tr><td>192</td><td><code><pre> Domain: &#34;https://jsonlint.com&#34;,</pre></code></td></tr><tr><td>193</td><td><code><pre> ExpectedStatus: 200,</pre></code></td></tr><tr><td>194</td><td><code><pre> Interval: 15,</pre></code></td></tr><tr><td>195</td><td><code><pre> Type: &#34;http&#34;,</pre></code></td></tr><tr><td>196</td><td><code><pre> Method: &#34;GET&#34;,</pre></code></td></tr><tr><td>197</td><td><code><pre> Timeout: 10,</pre></code></td></tr><tr><td>198</td><td><code><pre> Order: 6,</pre></code></td></tr><tr><td>199</td><td><code><pre> })</pre></code></td></tr><tr><td>200</td><td><code><pre></pre></code></td></tr><tr><td>201</td><td><code><pre> s7 := ReturnService(&amp;types.Service{</pre></code></td></tr><tr><td>202</td><td><code><pre> Name: &#34;Demo Page&#34;,</pre></code></td></tr><tr><td>203</td><td><code><pre> Domain: &#34;https://demo.statup.io&#34;,</pre></code></td></tr><tr><td>204</td><td><code><pre> ExpectedStatus: 200,</pre></code></td></tr><tr><td>205</td><td><code><pre> Interval: 30,</pre></code></td></tr><tr><td>206</td><td><code><pre> Type: &#34;http&#34;,</pre></code></td></tr><tr><td>207</td><td><code><pre> Method: &#34;GET&#34;,</pre></code></td></tr><tr><td>208</td><td><code><pre> Timeout: 15,</pre></code></td></tr><tr><td>209</td><td><code><pre> Order: 7,</pre></code></td></tr><tr><td>210</td><td><code><pre> })</pre></code></td></tr><tr><td>211</td><td><code><pre></pre></code></td></tr><tr><td>212</td><td><code><pre> s8 := ReturnService(&amp;types.Service{</pre></code></td></tr><tr><td>213</td><td><code><pre> Name: &#34;Golang&#34;,</pre></code></td></tr><tr><td>214</td><td><code><pre> Domain: &#34;https://golang.org&#34;,</pre></code></td></tr><tr><td>215</td><td><code><pre> ExpectedStatus: 200,</pre></code></td></tr><tr><td>216</td><td><code><pre> Interval: 15,</pre></code></td></tr><tr><td>217</td><td><code><pre> Type: &#34;http&#34;,</pre></code></td></tr><tr><td>218</td><td><code><pre> Method: &#34;GET&#34;,</pre></code></td></tr><tr><td>219</td><td><code><pre> Timeout: 10,</pre></code></td></tr><tr><td>220</td><td><code><pre> Order: 8,</pre></code></td></tr><tr><td>221</td><td><code><pre> })</pre></code></td></tr><tr><td>222</td><td><code><pre></pre></code></td></tr><tr><td>223</td><td><code><pre> s9 := ReturnService(&amp;types.Service{</pre></code></td></tr><tr><td>224</td><td><code><pre> Name: &#34;Santa Monica&#34;,</pre></code></td></tr><tr><td>225</td><td><code><pre> Domain: &#34;https://www.santamonica.com&#34;,</pre></code></td></tr><tr><td>226</td><td><code><pre> ExpectedStatus: 200,</pre></code></td></tr><tr><td>227</td><td><code><pre> Interval: 15,</pre></code></td></tr><tr><td>228</td><td><code><pre> Type: &#34;http&#34;,</pre></code></td></tr><tr><td>229</td><td><code><pre> Method: &#34;GET&#34;,</pre></code></td></tr><tr><td>230</td><td><code><pre> Timeout: 10,</pre></code></td></tr><tr><td>231</td><td><code><pre> Order: 9,</pre></code></td></tr><tr><td>232</td><td><code><pre> })</pre></code></td></tr><tr><td>233</td><td><code><pre></pre></code></td></tr><tr><td>234</td><td><code><pre> s10 := ReturnService(&amp;types.Service{</pre></code></td></tr><tr><td>235</td><td><code><pre> Name: &#34;Oeschs Die Dritten&#34;,</pre></code></td></tr><tr><td>236</td><td><code><pre> Domain: &#34;https://www.oeschs-die-dritten.ch/en/&#34;,</pre></code></td></tr><tr><td>237</td><td><code><pre> ExpectedStatus: 200,</pre></code></td></tr><tr><td>238</td><td><code><pre> Interval: 15,</pre></code></td></tr><tr><td>239</td><td><code><pre> Type: &#34;http&#34;,</pre></code></td></tr><tr><td>240</td><td><code><pre> Method: &#34;GET&#34;,</pre></code></td></tr><tr><td>241</td><td><code><pre> Timeout: 10,</pre></code></td></tr><tr><td>242</td><td><code><pre> Order: 10,</pre></code></td></tr><tr><td>243</td><td><code><pre> })</pre></code></td></tr><tr><td>244</td><td><code><pre></pre></code></td></tr><tr><td>245</td><td><code><pre> s11 := ReturnService(&amp;types.Service{</pre></code></td></tr><tr><td>246</td><td><code><pre> Name: &#34;XS Project - Bochka, Bass, Kolbaser&#34;,</pre></code></td></tr><tr><td>247</td><td><code><pre> Domain: &#34;https://www.youtube.com/watch?v=VLW1ieY4Izw&#34;,</pre></code></td></tr><tr><td>248</td><td><code><pre> ExpectedStatus: 200,</pre></code></td></tr><tr><td>249</td><td><code><pre> Interval: 60,</pre></code></td></tr><tr><td>250</td><td><code><pre> Type: &#34;http&#34;,</pre></code></td></tr><tr><td>251</td><td><code><pre> Method: &#34;GET&#34;,</pre></code></td></tr><tr><td>252</td><td><code><pre> Timeout: 20,</pre></code></td></tr><tr><td>253</td><td><code><pre> Order: 11,</pre></code></td></tr><tr><td>254</td><td><code><pre> })</pre></code></td></tr><tr><td>255</td><td><code><pre></pre></code></td></tr><tr><td>256</td><td><code><pre> s12 := ReturnService(&amp;types.Service{</pre></code></td></tr><tr><td>257</td><td><code><pre> Name: &#34;Github&#34;,</pre></code></td></tr><tr><td>258</td><td><code><pre> Domain: &#34;https://github.com/hunterlong&#34;,</pre></code></td></tr><tr><td>259</td><td><code><pre> ExpectedStatus: 200,</pre></code></td></tr><tr><td>260</td><td><code><pre> Interval: 60,</pre></code></td></tr><tr><td>261</td><td><code><pre> Type: &#34;http&#34;,</pre></code></td></tr><tr><td>262</td><td><code><pre> Method: &#34;GET&#34;,</pre></code></td></tr><tr><td>263</td><td><code><pre> Timeout: 20,</pre></code></td></tr><tr><td>264</td><td><code><pre> Order: 12,</pre></code></td></tr><tr><td>265</td><td><code><pre> })</pre></code></td></tr><tr><td>266</td><td><code><pre></pre></code></td></tr><tr><td>267</td><td><code><pre> s13 := ReturnService(&amp;types.Service{</pre></code></td></tr><tr><td>268</td><td><code><pre> Name: &#34;Failing URL&#34;,</pre></code></td></tr><tr><td>269</td><td><code><pre> Domain: &#34;http://thisdomainisfakeanditsgoingtofail.com&#34;,</pre></code></td></tr><tr><td>270</td><td><code><pre> ExpectedStatus: 200,</pre></code></td></tr><tr><td>271</td><td><code><pre> Interval: 45,</pre></code></td></tr><tr><td>272</td><td><code><pre> Type: &#34;http&#34;,</pre></code></td></tr><tr><td>273</td><td><code><pre> Method: &#34;GET&#34;,</pre></code></td></tr><tr><td>274</td><td><code><pre> Timeout: 10,</pre></code></td></tr><tr><td>275</td><td><code><pre> Order: 13,</pre></code></td></tr><tr><td>276</td><td><code><pre> })</pre></code></td></tr><tr><td>277</td><td><code><pre></pre></code></td></tr><tr><td>278</td><td><code><pre> s14 := ReturnService(&amp;types.Service{</pre></code></td></tr><tr><td>279</td><td><code><pre> Name: &#34;Oesch&#39;s die Dritten - Die Jodelsprache&#34;,</pre></code></td></tr><tr><td>280</td><td><code><pre> Domain: &#34;https://www.youtube.com/watch?v=k3GTxRt4iao&#34;,</pre></code></td></tr><tr><td>281</td><td><code><pre> ExpectedStatus: 200,</pre></code></td></tr><tr><td>282</td><td><code><pre> Interval: 60,</pre></code></td></tr><tr><td>283</td><td><code><pre> Type: &#34;http&#34;,</pre></code></td></tr><tr><td>284</td><td><code><pre> Method: &#34;GET&#34;,</pre></code></td></tr><tr><td>285</td><td><code><pre> Timeout: 12,</pre></code></td></tr><tr><td>286</td><td><code><pre> Order: 14,</pre></code></td></tr><tr><td>287</td><td><code><pre> })</pre></code></td></tr><tr><td>288</td><td><code><pre></pre></code></td></tr><tr><td>289</td><td><code><pre> s15 := ReturnService(&amp;types.Service{</pre></code></td></tr><tr><td>290</td><td><code><pre> Name: &#34;Gorm&#34;,</pre></code></td></tr><tr><td>291</td><td><code><pre> Domain: &#34;http://gorm.io/&#34;,</pre></code></td></tr><tr><td>292</td><td><code><pre> ExpectedStatus: 200,</pre></code></td></tr><tr><td>293</td><td><code><pre> Interval: 30,</pre></code></td></tr><tr><td>294</td><td><code><pre> Type: &#34;http&#34;,</pre></code></td></tr><tr><td>295</td><td><code><pre> Method: &#34;GET&#34;,</pre></code></td></tr><tr><td>296</td><td><code><pre> Timeout: 12,</pre></code></td></tr><tr><td>297</td><td><code><pre> Order: 15,</pre></code></td></tr><tr><td>298</td><td><code><pre> })</pre></code></td></tr><tr><td>299</td><td><code><pre></pre></code></td></tr><tr><td>300</td><td><code><pre> s6.Create(false)</pre></code></td></tr><tr><td>301</td><td><code><pre> s7.Create(false)</pre></code></td></tr><tr><td>302</td><td><code><pre> s8.Create(false)</pre></code></td></tr><tr><td>303</td><td><code><pre> s9.Create(false)</pre></code></td></tr><tr><td>304</td><td><code><pre> s10.Create(false)</pre></code></td></tr><tr><td>305</td><td><code><pre> s11.Create(false)</pre></code></td></tr><tr><td>306</td><td><code><pre> s12.Create(false)</pre></code></td></tr><tr><td>307</td><td><code><pre> s13.Create(false)</pre></code></td></tr><tr><td>308</td><td><code><pre> s14.Create(false)</pre></code></td></tr><tr><td>309</td><td><code><pre> s15.Create(false)</pre></code></td></tr><tr><td>310</td><td><code><pre></pre></code></td></tr><tr><td>311</td><td><code><pre> var dayAgo = time.Now().Add(-24 * time.Hour).Add(-10 * time.Minute)</pre></code></td></tr><tr><td>312</td><td><code><pre></pre></code></td></tr><tr><td>313</td><td><code><pre> insertHitRecords(dayAgo, 1450)</pre></code></td></tr><tr><td>314</td><td><code><pre></pre></code></td></tr><tr><td>315</td><td><code><pre> insertFailureRecords(dayAgo, 730)</pre></code></td></tr><tr><td>316</td><td><code><pre></pre></code></td></tr><tr><td>317</td><td><code><pre> return nil</pre></code></td></tr><tr><td>318</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_InsertSampleData">func InsertSampleData</div><div class="info"><a href="#s_fn_InsertSampleData">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/sample.go</code>:</p></div><table class="listing">
<tr><td>27</td><td><code><pre>func InsertSampleData() error {</pre></code></td></tr><tr><td>28</td><td><code><pre> utils.Log(1, &#34;Inserting Sample Data...&#34;)</pre></code></td></tr><tr><td>29</td><td><code><pre> s1 := ReturnService(&amp;types.Service{</pre></code></td></tr><tr><td>30</td><td><code><pre> Name: &#34;Google&#34;,</pre></code></td></tr><tr><td>31</td><td><code><pre> Domain: &#34;https://google.com&#34;,</pre></code></td></tr><tr><td>32</td><td><code><pre> ExpectedStatus: 200,</pre></code></td></tr><tr><td>33</td><td><code><pre> Interval: 10,</pre></code></td></tr><tr><td>34</td><td><code><pre> Type: &#34;http&#34;,</pre></code></td></tr><tr><td>35</td><td><code><pre> Method: &#34;GET&#34;,</pre></code></td></tr><tr><td>36</td><td><code><pre> Timeout: 10,</pre></code></td></tr><tr><td>37</td><td><code><pre> Order: 1,</pre></code></td></tr><tr><td>38</td><td><code><pre> })</pre></code></td></tr><tr><td>39</td><td><code><pre> s2 := ReturnService(&amp;types.Service{</pre></code></td></tr><tr><td>40</td><td><code><pre> Name: &#34;Statup Github&#34;,</pre></code></td></tr><tr><td>41</td><td><code><pre> Domain: &#34;https://github.com/hunterlong/statup&#34;,</pre></code></td></tr><tr><td>42</td><td><code><pre> ExpectedStatus: 200,</pre></code></td></tr><tr><td>43</td><td><code><pre> Interval: 30,</pre></code></td></tr><tr><td>44</td><td><code><pre> Type: &#34;http&#34;,</pre></code></td></tr><tr><td>45</td><td><code><pre> Method: &#34;GET&#34;,</pre></code></td></tr><tr><td>46</td><td><code><pre> Timeout: 20,</pre></code></td></tr><tr><td>47</td><td><code><pre> Order: 2,</pre></code></td></tr><tr><td>48</td><td><code><pre> })</pre></code></td></tr><tr><td>49</td><td><code><pre> s3 := ReturnService(&amp;types.Service{</pre></code></td></tr><tr><td>50</td><td><code><pre> Name: &#34;JSON Users Test&#34;,</pre></code></td></tr><tr><td>51</td><td><code><pre> Domain: &#34;https://jsonplaceholder.typicode.com/users&#34;,</pre></code></td></tr><tr><td>52</td><td><code><pre> ExpectedStatus: 200,</pre></code></td></tr><tr><td>53</td><td><code><pre> Interval: 60,</pre></code></td></tr><tr><td>54</td><td><code><pre> Type: &#34;http&#34;,</pre></code></td></tr><tr><td>55</td><td><code><pre> Method: &#34;GET&#34;,</pre></code></td></tr><tr><td>56</td><td><code><pre> Timeout: 30,</pre></code></td></tr><tr><td>57</td><td><code><pre> Order: 3,</pre></code></td></tr><tr><td>58</td><td><code><pre> })</pre></code></td></tr><tr><td>59</td><td><code><pre> s4 := ReturnService(&amp;types.Service{</pre></code></td></tr><tr><td>60</td><td><code><pre> Name: &#34;JSON API Tester&#34;,</pre></code></td></tr><tr><td>61</td><td><code><pre> Domain: &#34;https://jsonplaceholder.typicode.com/posts&#34;,</pre></code></td></tr><tr><td>62</td><td><code><pre> ExpectedStatus: 201,</pre></code></td></tr><tr><td>63</td><td><code><pre> Expected: `(title)&#34;: &#34;((\\&#34;|[statup])*)&#34;`,</pre></code></td></tr><tr><td>64</td><td><code><pre> Interval: 30,</pre></code></td></tr><tr><td>65</td><td><code><pre> Type: &#34;http&#34;,</pre></code></td></tr><tr><td>66</td><td><code><pre> Method: &#34;POST&#34;,</pre></code></td></tr><tr><td>67</td><td><code><pre> PostData: `{ &#34;title&#34;: &#34;statup&#34;, &#34;body&#34;: &#34;bar&#34;, &#34;userId&#34;: 19999 }`,</pre></code></td></tr><tr><td>68</td><td><code><pre> Timeout: 30,</pre></code></td></tr><tr><td>69</td><td><code><pre> Order: 4,</pre></code></td></tr><tr><td>70</td><td><code><pre> })</pre></code></td></tr><tr><td>71</td><td><code><pre> s5 := ReturnService(&amp;types.Service{</pre></code></td></tr><tr><td>72</td><td><code><pre> Name: &#34;Google DNS&#34;,</pre></code></td></tr><tr><td>73</td><td><code><pre> Domain: &#34;8.8.8.8&#34;,</pre></code></td></tr><tr><td>74</td><td><code><pre> Interval: 20,</pre></code></td></tr><tr><td>75</td><td><code><pre> Type: &#34;tcp&#34;,</pre></code></td></tr><tr><td>76</td><td><code><pre> Port: 53,</pre></code></td></tr><tr><td>77</td><td><code><pre> Timeout: 120,</pre></code></td></tr><tr><td>78</td><td><code><pre> Order: 5,</pre></code></td></tr><tr><td>79</td><td><code><pre> })</pre></code></td></tr><tr><td>80</td><td><code><pre></pre></code></td></tr><tr><td>81</td><td><code><pre> s1.Create(false)</pre></code></td></tr><tr><td>82</td><td><code><pre> s2.Create(false)</pre></code></td></tr><tr><td>83</td><td><code><pre> s3.Create(false)</pre></code></td></tr><tr><td>84</td><td><code><pre> s4.Create(false)</pre></code></td></tr><tr><td>85</td><td><code><pre> s5.Create(false)</pre></code></td></tr><tr><td>86</td><td><code><pre></pre></code></td></tr><tr><td>87</td><td><code><pre> utils.Log(1, &#34;Sample data has finished importing&#34;)</pre></code></td></tr><tr><td>88</td><td><code><pre></pre></code></td></tr><tr><td>89</td><td><code><pre> return nil</pre></code></td></tr><tr><td>90</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Service.CheckQueue">func Service.CheckQueue</div><div class="info"><a href="#s_fn_Service.CheckQueue">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checker.go</code>:</p></div><table class="listing">
<tr><td>43</td><td><code><pre>func (s *Service) CheckQueue(record bool) {</pre></code></td></tr><tr><td>44</td><td><code><pre> s.Checkpoint = time.Now()</pre></code></td></tr><tr><td>45</td><td><code><pre> s.SleepDuration = time.Duration((time.Duration(s.Id) * 100) * time.Millisecond)</pre></code></td></tr><tr><td>46</td><td><code><pre>CheckLoop:</pre></code></td></tr><tr><td>47</td><td><code><pre> for {</pre></code></td></tr><tr><td>48</td><td><code><pre> select {</pre></code></td></tr><tr><td>49</td><td><code><pre> case &lt;-s.Running:</pre></code></td></tr><tr><td>50</td><td><code><pre> utils.Log(1, fmt.Sprintf(&#34;Stopping service: %v&#34;, s.Name))</pre></code></td></tr><tr><td>51</td><td><code><pre> break CheckLoop</pre></code></td></tr><tr><td>52</td><td><code><pre> case &lt;-time.After(s.SleepDuration):</pre></code></td></tr><tr><td>53</td><td><code><pre> s.Check(record)</pre></code></td></tr><tr><td>54</td><td><code><pre> s.Checkpoint = s.Checkpoint.Add(s.duration())</pre></code></td></tr><tr><td>55</td><td><code><pre> sleep := s.Checkpoint.Sub(time.Now())</pre></code></td></tr><tr><td>56</td><td><code><pre> if !s.Online {</pre></code></td></tr><tr><td>57</td><td><code><pre> s.SleepDuration = s.duration()</pre></code></td></tr><tr><td>58</td><td><code><pre> } else {</pre></code></td></tr><tr><td>59</td><td><code><pre> s.SleepDuration = sleep</pre></code></td></tr><tr><td>60</td><td><code><pre> }</pre></code></td></tr><tr><td>61</td><td><code><pre> }</pre></code></td></tr><tr><td>62</td><td><code><pre> continue</pre></code></td></tr><tr><td>63</td><td><code><pre> }</pre></code></td></tr><tr><td>64</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_insertSampleCheckins">func insertSampleCheckins</div><div class="info"><a href="#s_fn_insertSampleCheckins">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/sample.go</code>:</p></div><table class="listing">
<tr><td>93</td><td><code><pre>func insertSampleCheckins() error {</pre></code></td></tr><tr><td>94</td><td><code><pre> s1 := SelectService(1)</pre></code></td></tr><tr><td>95</td><td><code><pre> checkin1 := ReturnCheckin(&amp;types.Checkin{</pre></code></td></tr><tr><td>96</td><td><code><pre> ServiceId: s1.Id,</pre></code></td></tr><tr><td>97</td><td><code><pre> Interval: 300,</pre></code></td></tr><tr><td>98</td><td><code><pre> GracePeriod: 300,</pre></code></td></tr><tr><td>99</td><td><code><pre> })</pre></code></td></tr><tr><td>100</td><td><code><pre> checkin1.Update()</pre></code></td></tr><tr><td>101</td><td><code><pre></pre></code></td></tr><tr><td>102</td><td><code><pre> s2 := SelectService(1)</pre></code></td></tr><tr><td>103</td><td><code><pre> checkin2 := ReturnCheckin(&amp;types.Checkin{</pre></code></td></tr><tr><td>104</td><td><code><pre> ServiceId: s2.Id,</pre></code></td></tr><tr><td>105</td><td><code><pre> Interval: 900,</pre></code></td></tr><tr><td>106</td><td><code><pre> GracePeriod: 300,</pre></code></td></tr><tr><td>107</td><td><code><pre> })</pre></code></td></tr><tr><td>108</td><td><code><pre> checkin2.Update()</pre></code></td></tr><tr><td>109</td><td><code><pre></pre></code></td></tr><tr><td>110</td><td><code><pre> checkTime := time.Now().Add(-24 * time.Hour)</pre></code></td></tr><tr><td>111</td><td><code><pre> for i := 0; i &lt;= 60; i++ {</pre></code></td></tr><tr><td>112</td><td><code><pre> checkHit := ReturnCheckinHit(&amp;types.CheckinHit{</pre></code></td></tr><tr><td>113</td><td><code><pre> Checkin: checkin1.Id,</pre></code></td></tr><tr><td>114</td><td><code><pre> From: &#34;192.168.0.1&#34;,</pre></code></td></tr><tr><td>115</td><td><code><pre> CreatedAt: checkTime.UTC(),</pre></code></td></tr><tr><td>116</td><td><code><pre> })</pre></code></td></tr><tr><td>117</td><td><code><pre> checkHit.Create()</pre></code></td></tr><tr><td>118</td><td><code><pre> checkTime = checkTime.Add(10 * time.Minute)</pre></code></td></tr><tr><td>119</td><td><code><pre> }</pre></code></td></tr><tr><td>120</td><td><code><pre> return nil</pre></code></td></tr><tr><td>121</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_DbConfig.CreateDatabase">func DbConfig.CreateDatabase</div><div class="info"><a href="#s_fn_DbConfig.CreateDatabase">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
<tr><td>336</td><td><code><pre>func (db *DbConfig) CreateDatabase() error {</pre></code></td></tr><tr><td>337</td><td><code><pre> utils.Log(1, &#34;Creating Database Tables...&#34;)</pre></code></td></tr><tr><td>338</td><td><code><pre> err := DbSession.CreateTable(&amp;types.Checkin{})</pre></code></td></tr><tr><td>339</td><td><code><pre> err = DbSession.CreateTable(&amp;types.CheckinHit{})</pre></code></td></tr><tr><td>340</td><td><code><pre> err = DbSession.CreateTable(&amp;notifier.Notification{})</pre></code></td></tr><tr><td>341</td><td><code><pre> err = DbSession.Table(&#34;core&#34;).CreateTable(&amp;types.Core{})</pre></code></td></tr><tr><td>342</td><td><code><pre> err = DbSession.CreateTable(&amp;types.Failure{})</pre></code></td></tr><tr><td>343</td><td><code><pre> err = DbSession.CreateTable(&amp;types.Hit{})</pre></code></td></tr><tr><td>344</td><td><code><pre> err = DbSession.CreateTable(&amp;types.Service{})</pre></code></td></tr><tr><td>345</td><td><code><pre> err = DbSession.CreateTable(&amp;types.User{})</pre></code></td></tr><tr><td>346</td><td><code><pre> utils.Log(1, &#34;Statup Database Created&#34;)</pre></code></td></tr><tr><td>347</td><td><code><pre> return err.Error</pre></code></td></tr><tr><td>348</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_insertHitRecords">func insertHitRecords</div><div class="info"><a href="#s_fn_insertHitRecords">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/sample.go</code>:</p></div><table class="listing">
<tr><td>342</td><td><code><pre>func insertHitRecords(since time.Time, amount int64) {</pre></code></td></tr><tr><td>343</td><td><code><pre> for i := int64(1); i &lt;= 15; i++ {</pre></code></td></tr><tr><td>344</td><td><code><pre> service := SelectService(i)</pre></code></td></tr><tr><td>345</td><td><code><pre> utils.Log(1, fmt.Sprintf(&#34;Adding %v hit records to service %v&#34;, amount, service.Name))</pre></code></td></tr><tr><td>346</td><td><code><pre> createdAt := since</pre></code></td></tr><tr><td>347</td><td><code><pre></pre></code></td></tr><tr><td>348</td><td><code><pre> for hi := int64(1); hi &lt;= amount; hi++ {</pre></code></td></tr><tr><td>349</td><td><code><pre> rand.Seed(time.Now().UnixNano())</pre></code></td></tr><tr><td>350</td><td><code><pre> latency := rand.Float64()</pre></code></td></tr><tr><td>351</td><td><code><pre> createdAt = createdAt.Add(1 * time.Minute)</pre></code></td></tr><tr><td>352</td><td><code><pre> hit := &amp;types.Hit{</pre></code></td></tr><tr><td>353</td><td><code><pre> Service: service.Id,</pre></code></td></tr><tr><td>354</td><td><code><pre> CreatedAt: createdAt,</pre></code></td></tr><tr><td>355</td><td><code><pre> Latency: latency,</pre></code></td></tr><tr><td>356</td><td><code><pre> }</pre></code></td></tr><tr><td>357</td><td><code><pre> service.CreateHit(hit)</pre></code></td></tr><tr><td>358</td><td><code><pre> }</pre></code></td></tr><tr><td>359</td><td><code><pre></pre></code></td></tr><tr><td>360</td><td><code><pre> }</pre></code></td></tr><tr><td>361</td><td><code><pre></pre></code></td></tr><tr><td>362</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_DbConfig.DropDatabase">func DbConfig.DropDatabase</div><div class="info"><a href="#s_fn_DbConfig.DropDatabase">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
<tr><td>322</td><td><code><pre>func (db *DbConfig) DropDatabase() error {</pre></code></td></tr><tr><td>323</td><td><code><pre> utils.Log(1, &#34;Dropping Database Tables...&#34;)</pre></code></td></tr><tr><td>324</td><td><code><pre> err := DbSession.DropTableIfExists(&#34;checkins&#34;)</pre></code></td></tr><tr><td>325</td><td><code><pre> err = DbSession.DropTableIfExists(&#34;checkin_hits&#34;)</pre></code></td></tr><tr><td>326</td><td><code><pre> err = DbSession.DropTableIfExists(&#34;notifications&#34;)</pre></code></td></tr><tr><td>327</td><td><code><pre> err = DbSession.DropTableIfExists(&#34;core&#34;)</pre></code></td></tr><tr><td>328</td><td><code><pre> err = DbSession.DropTableIfExists(&#34;failures&#34;)</pre></code></td></tr><tr><td>329</td><td><code><pre> err = DbSession.DropTableIfExists(&#34;hits&#34;)</pre></code></td></tr><tr><td>330</td><td><code><pre> err = DbSession.DropTableIfExists(&#34;services&#34;)</pre></code></td></tr><tr><td>331</td><td><code><pre> err = DbSession.DropTableIfExists(&#34;users&#34;)</pre></code></td></tr><tr><td>332</td><td><code><pre> return err.Error</pre></code></td></tr><tr><td>333</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_insertFailureRecords">func insertFailureRecords</div><div class="info"><a href="#s_fn_insertFailureRecords">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/sample.go</code>:</p></div><table class="listing">
<tr><td>321</td><td><code><pre>func insertFailureRecords(since time.Time, amount int64) {</pre></code></td></tr><tr><td>322</td><td><code><pre> for i := int64(14); i &lt;= 15; i++ {</pre></code></td></tr><tr><td>323</td><td><code><pre> service := SelectService(i)</pre></code></td></tr><tr><td>324</td><td><code><pre> utils.Log(1, fmt.Sprintf(&#34;Adding %v failure records to service %v&#34;, amount, service.Name))</pre></code></td></tr><tr><td>325</td><td><code><pre> createdAt := since</pre></code></td></tr><tr><td>326</td><td><code><pre></pre></code></td></tr><tr><td>327</td><td><code><pre> for fi := int64(1); fi &lt;= amount; fi++ {</pre></code></td></tr><tr><td>328</td><td><code><pre> createdAt = createdAt.Add(2 * time.Minute)</pre></code></td></tr><tr><td>329</td><td><code><pre></pre></code></td></tr><tr><td>330</td><td><code><pre> failure := &amp;types.Failure{</pre></code></td></tr><tr><td>331</td><td><code><pre> Service: service.Id,</pre></code></td></tr><tr><td>332</td><td><code><pre> Issue: &#34;testing right here&#34;,</pre></code></td></tr><tr><td>333</td><td><code><pre> CreatedAt: createdAt,</pre></code></td></tr><tr><td>334</td><td><code><pre> }</pre></code></td></tr><tr><td>335</td><td><code><pre></pre></code></td></tr><tr><td>336</td><td><code><pre> service.CreateFailure(failure)</pre></code></td></tr><tr><td>337</td><td><code><pre> }</pre></code></td></tr><tr><td>338</td><td><code><pre> }</pre></code></td></tr><tr><td>339</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_recordSuccess">func recordSuccess</div><div class="info"><a href="#s_fn_recordSuccess">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checker.go</code>:</p></div><table class="listing">
<tr><td>232</td><td><code><pre>func recordSuccess(s *Service) {</pre></code></td></tr><tr><td>233</td><td><code><pre> s.Online = true</pre></code></td></tr><tr><td>234</td><td><code><pre> s.LastOnline = time.Now()</pre></code></td></tr><tr><td>235</td><td><code><pre> hit := &amp;types.Hit{</pre></code></td></tr><tr><td>236</td><td><code><pre> Service: s.Id,</pre></code></td></tr><tr><td>237</td><td><code><pre> Latency: s.Latency,</pre></code></td></tr><tr><td>238</td><td><code><pre> PingTime: s.PingTime,</pre></code></td></tr><tr><td>239</td><td><code><pre> CreatedAt: time.Now(),</pre></code></td></tr><tr><td>240</td><td><code><pre> }</pre></code></td></tr><tr><td>241</td><td><code><pre> utils.Log(1, fmt.Sprintf(&#34;Service %v Successful Response: %0.2f ms | Lookup in: %0.2f ms&#34;, s.Name, hit.Latency*1000, hit.PingTime*1000))</pre></code></td></tr><tr><td>242</td><td><code><pre> s.CreateHit(hit)</pre></code></td></tr><tr><td>243</td><td><code><pre> notifier.OnSuccess(s.Service)</pre></code></td></tr><tr><td>244</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Core.CountOnline">func Core.CountOnline</div><div class="info"><a href="#s_fn_Core.CountOnline">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
<tr><td>408</td><td><code><pre>func (c *Core) CountOnline() int {</pre></code></td></tr><tr><td>409</td><td><code><pre> amount := 0</pre></code></td></tr><tr><td>410</td><td><code><pre> for _, s := range CoreApp.Services {</pre></code></td></tr><tr><td>411</td><td><code><pre> if s.Select().Online {</pre></code></td></tr><tr><td>412</td><td><code><pre> amount++</pre></code></td></tr><tr><td>413</td><td><code><pre> }</pre></code></td></tr><tr><td>414</td><td><code><pre> }</pre></code></td></tr><tr><td>415</td><td><code><pre> return amount</pre></code></td></tr><tr><td>416</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Checkin.Expected">func Checkin.Expected</div><div class="info"><a href="#s_fn_Checkin.Expected">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checkin.go</code>:</p></div><table class="listing">
<tr><td>120</td><td><code><pre>func (c *Checkin) Expected() time.Duration {</pre></code></td></tr><tr><td>121</td><td><code><pre> last := c.Last().CreatedAt</pre></code></td></tr><tr><td>122</td><td><code><pre> now := time.Now()</pre></code></td></tr><tr><td>123</td><td><code><pre> lastDir := now.Sub(last)</pre></code></td></tr><tr><td>124</td><td><code><pre> sub := time.Duration(c.Period() - lastDir)</pre></code></td></tr><tr><td>125</td><td><code><pre> return sub</pre></code></td></tr><tr><td>126</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_SelectUsername">func SelectUsername</div><div class="info"><a href="#s_fn_SelectUsername">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/users.go</code>:</p></div><table class="listing">
<tr><td>43</td><td><code><pre>func SelectUsername(username string) (*user, error) {</pre></code></td></tr><tr><td>44</td><td><code><pre> var user user</pre></code></td></tr><tr><td>45</td><td><code><pre> res := usersDB().Where(&#34;username = ?&#34;, username)</pre></code></td></tr><tr><td>46</td><td><code><pre> err := res.First(&amp;user)</pre></code></td></tr><tr><td>47</td><td><code><pre> return &amp;user, err.Error</pre></code></td></tr><tr><td>48</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Service.Hits">func Service.Hits</div><div class="info"><a href="#s_fn_Service.Hits">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/hits.go</code>:</p></div><table class="listing">
<tr><td>39</td><td><code><pre>func (s *Service) Hits() ([]*types.Hit, error) {</pre></code></td></tr><tr><td>40</td><td><code><pre> var hits []*types.Hit</pre></code></td></tr><tr><td>41</td><td><code><pre> col := hitsDB().Where(&#34;service = ?&#34;, s.Id).Order(&#34;id desc&#34;)</pre></code></td></tr><tr><td>42</td><td><code><pre> err := col.Find(&amp;hits)</pre></code></td></tr><tr><td>43</td><td><code><pre> return hits, err.Error</pre></code></td></tr><tr><td>44</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_insertSampleUsers">func insertSampleUsers</div><div class="info"><a href="#s_fn_insertSampleUsers">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/sample.go</code>:</p></div><table class="listing">
<tr><td>165</td><td><code><pre>func insertSampleUsers() {</pre></code></td></tr><tr><td>166</td><td><code><pre> u2 := ReturnUser(&amp;types.User{</pre></code></td></tr><tr><td>167</td><td><code><pre> Username: &#34;testadmin&#34;,</pre></code></td></tr><tr><td>168</td><td><code><pre> Password: &#34;password123&#34;,</pre></code></td></tr><tr><td>169</td><td><code><pre> Email: &#34;info@betatude.com&#34;,</pre></code></td></tr><tr><td>170</td><td><code><pre> Admin: true,</pre></code></td></tr><tr><td>171</td><td><code><pre> })</pre></code></td></tr><tr><td>172</td><td><code><pre></pre></code></td></tr><tr><td>173</td><td><code><pre> u3 := ReturnUser(&amp;types.User{</pre></code></td></tr><tr><td>174</td><td><code><pre> Username: &#34;testadmin2&#34;,</pre></code></td></tr><tr><td>175</td><td><code><pre> Password: &#34;password123&#34;,</pre></code></td></tr><tr><td>176</td><td><code><pre> Email: &#34;info@adminhere.com&#34;,</pre></code></td></tr><tr><td>177</td><td><code><pre> Admin: true,</pre></code></td></tr><tr><td>178</td><td><code><pre> })</pre></code></td></tr><tr><td>179</td><td><code><pre></pre></code></td></tr><tr><td>180</td><td><code><pre> u2.Create()</pre></code></td></tr><tr><td>181</td><td><code><pre> u3.Create()</pre></code></td></tr><tr><td>182</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_NewCore">func NewCore</div><div class="info"><a href="#s_fn_NewCore">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/core.go</code>:</p></div><table class="listing">
<tr><td>47</td><td><code><pre>func NewCore() *Core {</pre></code></td></tr><tr><td>48</td><td><code><pre> CoreApp = new(Core)</pre></code></td></tr><tr><td>49</td><td><code><pre> CoreApp.Core = new(types.Core)</pre></code></td></tr><tr><td>50</td><td><code><pre> CoreApp.Started = time.Now()</pre></code></td></tr><tr><td>51</td><td><code><pre> return CoreApp</pre></code></td></tr><tr><td>52</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Checkin.CreateFailure">func Checkin.CreateFailure</div><div class="info"><a href="#s_fn_Checkin.CreateFailure">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checkin.go</code>:</p></div><table class="listing">
<tr><td>80</td><td><code><pre>func (c *Checkin) CreateFailure() (int64, error) {</pre></code></td></tr><tr><td>81</td><td><code><pre> service := c.Service()</pre></code></td></tr><tr><td>82</td><td><code><pre> fail := &amp;types.Failure{</pre></code></td></tr><tr><td>83</td><td><code><pre> Issue: fmt.Sprintf(&#34;Checkin %v was not reported %v ago, it expects a request every %v&#34;, c.Name, utils.FormatDuration(c.Expected()), utils.FormatDuration(c.Period())),</pre></code></td></tr><tr><td>84</td><td><code><pre> Method: &#34;checkin&#34;,</pre></code></td></tr><tr><td>85</td><td><code><pre> MethodId: c.Id,</pre></code></td></tr><tr><td>86</td><td><code><pre> Service: service.Id,</pre></code></td></tr><tr><td>87</td><td><code><pre> PingTime: c.Expected().Seconds() * 0.001,</pre></code></td></tr><tr><td>88</td><td><code><pre> }</pre></code></td></tr><tr><td>89</td><td><code><pre> row := failuresDB().Create(&amp;fail)</pre></code></td></tr><tr><td>90</td><td><code><pre> return fail.Id, row.Error</pre></code></td></tr><tr><td>91</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Service.LimitedHits">func Service.LimitedHits</div><div class="info"><a href="#s_fn_Service.LimitedHits">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/hits.go</code>:</p></div><table class="listing">
<tr><td>47</td><td><code><pre>func (s *Service) LimitedHits() ([]*types.Hit, error) {</pre></code></td></tr><tr><td>48</td><td><code><pre> var hits []*types.Hit</pre></code></td></tr><tr><td>49</td><td><code><pre> col := hitsDB().Where(&#34;service = ?&#34;, s.Id).Order(&#34;id desc&#34;).Limit(1024)</pre></code></td></tr><tr><td>50</td><td><code><pre> err := col.Find(&amp;hits)</pre></code></td></tr><tr><td>51</td><td><code><pre> return reverseHits(hits), err.Error</pre></code></td></tr><tr><td>52</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_user.Update">func user.Update</div><div class="info"><a href="#s_fn_user.Update">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/users.go</code>:</p></div><table class="listing">
<tr><td>56</td><td><code><pre>func (u *user) Update() error {</pre></code></td></tr><tr><td>57</td><td><code><pre> u.Password = utils.HashPassword(u.Password)</pre></code></td></tr><tr><td>58</td><td><code><pre> u.ApiKey = utils.NewSHA1Hash(5)</pre></code></td></tr><tr><td>59</td><td><code><pre> u.ApiSecret = utils.NewSHA1Hash(10)</pre></code></td></tr><tr><td>60</td><td><code><pre> return usersDB().Update(u).Error</pre></code></td></tr><tr><td>61</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Service.LimitedFailures">func Service.LimitedFailures</div><div class="info"><a href="#s_fn_Service.LimitedFailures">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/failures.go</code>:</p></div><table class="listing">
<tr><td>68</td><td><code><pre>func (s *Service) LimitedFailures() []*failure {</pre></code></td></tr><tr><td>69</td><td><code><pre> var failArr []*failure</pre></code></td></tr><tr><td>70</td><td><code><pre> col := failuresDB().Where(&#34;service = ?&#34;, s.Id).Order(&#34;id desc&#34;).Limit(10)</pre></code></td></tr><tr><td>71</td><td><code><pre> col.Find(&amp;failArr)</pre></code></td></tr><tr><td>72</td><td><code><pre> return failArr</pre></code></td></tr><tr><td>73</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Service.TotalHits">func Service.TotalHits</div><div class="info"><a href="#s_fn_Service.TotalHits">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/hits.go</code>:</p></div><table class="listing">
<tr><td>63</td><td><code><pre>func (s *Service) TotalHits() (uint64, error) {</pre></code></td></tr><tr><td>64</td><td><code><pre> var count uint64</pre></code></td></tr><tr><td>65</td><td><code><pre> col := hitsDB().Where(&#34;service = ?&#34;, s.Id)</pre></code></td></tr><tr><td>66</td><td><code><pre> err := col.Count(&amp;count)</pre></code></td></tr><tr><td>67</td><td><code><pre> return count, err.Error</pre></code></td></tr><tr><td>68</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Service.TotalFailuresSince">func Service.TotalFailuresSince</div><div class="info"><a href="#s_fn_Service.TotalFailuresSince">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/failures.go</code>:</p></div><table class="listing">
<tr><td>124</td><td><code><pre>func (s *Service) TotalFailuresSince(ago time.Time) (uint64, error) {</pre></code></td></tr><tr><td>125</td><td><code><pre> var count uint64</pre></code></td></tr><tr><td>126</td><td><code><pre> rows := failuresDB().Where(&#34;service = ? AND created_at &gt; ?&#34;, s.Id, ago.UTC().Format(&#34;2006-01-02 15:04:05&#34;)).Not(&#34;method = &#39;checkin&#39;&#34;)</pre></code></td></tr><tr><td>127</td><td><code><pre> err := rows.Count(&amp;count)</pre></code></td></tr><tr><td>128</td><td><code><pre> return count, err.Error</pre></code></td></tr><tr><td>129</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Service.TotalHitsSince">func Service.TotalHitsSince</div><div class="info"><a href="#s_fn_Service.TotalHitsSince">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/hits.go</code>:</p></div><table class="listing">
<tr><td>71</td><td><code><pre>func (s *Service) TotalHitsSince(ago time.Time) (uint64, error) {</pre></code></td></tr><tr><td>72</td><td><code><pre> var count uint64</pre></code></td></tr><tr><td>73</td><td><code><pre> rows := hitsDB().Where(&#34;service = ? AND created_at &gt; ?&#34;, s.Id, ago.UTC().Format(&#34;2006-01-02 15:04:05&#34;))</pre></code></td></tr><tr><td>74</td><td><code><pre> err := rows.Count(&amp;count)</pre></code></td></tr><tr><td>75</td><td><code><pre> return count, err.Error</pre></code></td></tr><tr><td>76</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_reverseHits">func reverseHits</div><div class="info"><a href="#s_fn_reverseHits">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/hits.go</code>:</p></div><table class="listing">
<tr><td>55</td><td><code><pre>func reverseHits(input []*types.Hit) []*types.Hit {</pre></code></td></tr><tr><td>56</td><td><code><pre> if len(input) == 0 {</pre></code></td></tr><tr><td>57</td><td><code><pre> return input</pre></code></td></tr><tr><td>58</td><td><code><pre> }</pre></code></td></tr><tr><td>59</td><td><code><pre> return append(reverseHits(input[1:]), input[0])</pre></code></td></tr><tr><td>60</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Checkin.Hits">func Checkin.Hits</div><div class="info"><a href="#s_fn_Checkin.Hits">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checkin.go</code>:</p></div><table class="listing">
<tr><td>140</td><td><code><pre>func (c *Checkin) Hits() []*checkinHit {</pre></code></td></tr><tr><td>141</td><td><code><pre> var checkins []*checkinHit</pre></code></td></tr><tr><td>142</td><td><code><pre> checkinHitsDB().Where(&#34;checkin = ?&#34;, c.Id).Order(&#34;id DESC&#34;).Find(&amp;checkins)</pre></code></td></tr><tr><td>143</td><td><code><pre> return checkins</pre></code></td></tr><tr><td>144</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Checkin.Last">func Checkin.Last</div><div class="info"><a href="#s_fn_Checkin.Last">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checkin.go</code>:</p></div><table class="listing">
<tr><td>129</td><td><code><pre>func (c *Checkin) Last() *checkinHit {</pre></code></td></tr><tr><td>130</td><td><code><pre> var hit checkinHit</pre></code></td></tr><tr><td>131</td><td><code><pre> checkinHitsDB().Where(&#34;checkin = ?&#34;, c.Id).Last(&amp;hit)</pre></code></td></tr><tr><td>132</td><td><code><pre> return &amp;hit</pre></code></td></tr><tr><td>133</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Service.Checkins">func Service.Checkins</div><div class="info"><a href="#s_fn_Service.Checkins">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
<tr><td>68</td><td><code><pre>func (s *Service) Checkins() []*Checkin {</pre></code></td></tr><tr><td>69</td><td><code><pre> var checkin []*Checkin</pre></code></td></tr><tr><td>70</td><td><code><pre> checkinDB().Where(&#34;service = ?&#34;, s.Id).Find(&amp;checkin)</pre></code></td></tr><tr><td>71</td><td><code><pre> return checkin</pre></code></td></tr><tr><td>72</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_insertSampleCore">func insertSampleCore</div><div class="info"><a href="#s_fn_insertSampleCore">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/sample.go</code>:</p></div><table class="listing">
<tr><td>149</td><td><code><pre>func insertSampleCore() error {</pre></code></td></tr><tr><td>150</td><td><code><pre> core := &amp;types.Core{</pre></code></td></tr><tr><td>151</td><td><code><pre> Name: &#34;Statup Sample Data&#34;,</pre></code></td></tr><tr><td>152</td><td><code><pre> Description: &#34;This data is only used to testing&#34;,</pre></code></td></tr><tr><td>153</td><td><code><pre> ApiKey: &#34;sample&#34;,</pre></code></td></tr><tr><td>154</td><td><code><pre> ApiSecret: &#34;samplesecret&#34;,</pre></code></td></tr><tr><td>155</td><td><code><pre> Domain: &#34;http://localhost:8080&#34;,</pre></code></td></tr><tr><td>156</td><td><code><pre> Version: &#34;test&#34;,</pre></code></td></tr><tr><td>157</td><td><code><pre> CreatedAt: time.Now(),</pre></code></td></tr><tr><td>158</td><td><code><pre> UseCdn: false,</pre></code></td></tr><tr><td>159</td><td><code><pre> }</pre></code></td></tr><tr><td>160</td><td><code><pre> query := coreDB().Create(core)</pre></code></td></tr><tr><td>161</td><td><code><pre> return query.Error</pre></code></td></tr><tr><td>162</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Service.Check">func Service.Check</div><div class="info"><a href="#s_fn_Service.Check">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checker.go</code>:</p></div><table class="listing">
<tr><td>222</td><td><code><pre>func (s *Service) Check(record bool) {</pre></code></td></tr><tr><td>223</td><td><code><pre> switch s.Type {</pre></code></td></tr><tr><td>224</td><td><code><pre> case &#34;http&#34;:</pre></code></td></tr><tr><td>225</td><td><code><pre> s.checkHttp(record)</pre></code></td></tr><tr><td>226</td><td><code><pre> case &#34;tcp&#34;, &#34;udp&#34;:</pre></code></td></tr><tr><td>227</td><td><code><pre> s.checkTcp(record)</pre></code></td></tr><tr><td>228</td><td><code><pre> }</pre></code></td></tr><tr><td>229</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Checkin.BeforeCreate">func Checkin.BeforeCreate</div><div class="info"><a href="#s_fn_Checkin.BeforeCreate">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
<tr><td>163</td><td><code><pre>func (c *Checkin) BeforeCreate() (err error) {</pre></code></td></tr><tr><td>164</td><td><code><pre> if c.CreatedAt.IsZero() {</pre></code></td></tr><tr><td>165</td><td><code><pre> c.CreatedAt = time.Now().UTC()</pre></code></td></tr><tr><td>166</td><td><code><pre> }</pre></code></td></tr><tr><td>167</td><td><code><pre> return</pre></code></td></tr><tr><td>168</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_SelectUser">func SelectUser</div><div class="info"><a href="#s_fn_SelectUser">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/users.go</code>:</p></div><table class="listing">
<tr><td>36</td><td><code><pre>func SelectUser(id int64) (*user, error) {</pre></code></td></tr><tr><td>37</td><td><code><pre> var user user</pre></code></td></tr><tr><td>38</td><td><code><pre> err := usersDB().First(&amp;user, id)</pre></code></td></tr><tr><td>39</td><td><code><pre> return &amp;user, err.Error</pre></code></td></tr><tr><td>40</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Service.AfterFind">func Service.AfterFind</div><div class="info"><a href="#s_fn_Service.AfterFind">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
<tr><td>95</td><td><code><pre>func (s *Service) AfterFind() (err error) {</pre></code></td></tr><tr><td>96</td><td><code><pre> s.CreatedAt = utils.Timezoner(s.CreatedAt, CoreApp.Timezone)</pre></code></td></tr><tr><td>97</td><td><code><pre> return</pre></code></td></tr><tr><td>98</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_checkinHit.Ago">func checkinHit.Ago</div><div class="info"><a href="#s_fn_checkinHit.Ago">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checkin.go</code>:</p></div><table class="listing">
<tr><td>190</td><td><code><pre>func (c *checkinHit) Ago() string {</pre></code></td></tr><tr><td>191</td><td><code><pre> got, _ := timeago.TimeAgoWithTime(time.Now(), c.CreatedAt)</pre></code></td></tr><tr><td>192</td><td><code><pre> return got</pre></code></td></tr><tr><td>193</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_user.AfterFind">func user.AfterFind</div><div class="info"><a href="#s_fn_user.AfterFind">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
<tr><td>113</td><td><code><pre>func (u *user) AfterFind() (err error) {</pre></code></td></tr><tr><td>114</td><td><code><pre> u.CreatedAt = utils.Timezoner(u.CreatedAt, CoreApp.Timezone)</pre></code></td></tr><tr><td>115</td><td><code><pre> return</pre></code></td></tr><tr><td>116</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_failure.AfterFind">func failure.AfterFind</div><div class="info"><a href="#s_fn_failure.AfterFind">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
<tr><td>107</td><td><code><pre>func (f *failure) AfterFind() (err error) {</pre></code></td></tr><tr><td>108</td><td><code><pre> f.CreatedAt = utils.Timezoner(f.CreatedAt, CoreApp.Timezone)</pre></code></td></tr><tr><td>109</td><td><code><pre> return</pre></code></td></tr><tr><td>110</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Checkin.AfterFind">func Checkin.AfterFind</div><div class="info"><a href="#s_fn_Checkin.AfterFind">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
<tr><td>119</td><td><code><pre>func (c *Checkin) AfterFind() (err error) {</pre></code></td></tr><tr><td>120</td><td><code><pre> c.CreatedAt = utils.Timezoner(c.CreatedAt, CoreApp.Timezone)</pre></code></td></tr><tr><td>121</td><td><code><pre> return</pre></code></td></tr><tr><td>122</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Checkin.Grace">func Checkin.Grace</div><div class="info"><a href="#s_fn_Checkin.Grace">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checkin.go</code>:</p></div><table class="listing">
<tr><td>114</td><td><code><pre>func (c *Checkin) Grace() time.Duration {</pre></code></td></tr><tr><td>115</td><td><code><pre> duration, _ := time.ParseDuration(fmt.Sprintf(&#34;%vs&#34;, c.GracePeriod))</pre></code></td></tr><tr><td>116</td><td><code><pre> return duration</pre></code></td></tr><tr><td>117</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Checkin.Period">func Checkin.Period</div><div class="info"><a href="#s_fn_Checkin.Period">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checkin.go</code>:</p></div><table class="listing">
<tr><td>108</td><td><code><pre>func (c *Checkin) Period() time.Duration {</pre></code></td></tr><tr><td>109</td><td><code><pre> duration, _ := time.ParseDuration(fmt.Sprintf(&#34;%vs&#34;, c.Interval))</pre></code></td></tr><tr><td>110</td><td><code><pre> return duration</pre></code></td></tr><tr><td>111</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Checkin.Service">func Checkin.Service</div><div class="info"><a href="#s_fn_Checkin.Service">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checkin.go</code>:</p></div><table class="listing">
<tr><td>75</td><td><code><pre>func (c *Checkin) Service() *Service {</pre></code></td></tr><tr><td>76</td><td><code><pre> service := SelectService(c.ServiceId)</pre></code></td></tr><tr><td>77</td><td><code><pre> return service</pre></code></td></tr><tr><td>78</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_updateService">func updateService</div><div class="info"><a href="#s_fn_updateService">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
<tr><td>341</td><td><code><pre>func updateService(service *Service) {</pre></code></td></tr><tr><td>342</td><td><code><pre> index := service.index()</pre></code></td></tr><tr><td>343</td><td><code><pre> CoreApp.Services[index] = service</pre></code></td></tr><tr><td>344</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_CheckHash">func CheckHash</div><div class="info"><a href="#s_fn_CheckHash">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/users.go</code>:</p></div><table class="listing">
<tr><td>105</td><td><code><pre>func CheckHash(password, hash string) bool {</pre></code></td></tr><tr><td>106</td><td><code><pre> err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password))</pre></code></td></tr><tr><td>107</td><td><code><pre> return err == nil</pre></code></td></tr><tr><td>108</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_checkinHit.AfterFind">func checkinHit.AfterFind</div><div class="info"><a href="#s_fn_checkinHit.AfterFind">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
<tr><td>125</td><td><code><pre>func (c *checkinHit) AfterFind() (err error) {</pre></code></td></tr><tr><td>126</td><td><code><pre> c.CreatedAt = utils.Timezoner(c.CreatedAt, CoreApp.Timezone)</pre></code></td></tr><tr><td>127</td><td><code><pre> return</pre></code></td></tr><tr><td>128</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_checkinHitsDB">func checkinHitsDB</div><div class="info"><a href="#s_fn_checkinHitsDB">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
<tr><td>72</td><td><code><pre>func checkinHitsDB() *gorm.DB {</pre></code></td></tr><tr><td>73</td><td><code><pre> return DbSession.Model(&amp;types.CheckinHit{})</pre></code></td></tr><tr><td>74</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_user.Delete">func user.Delete</div><div class="info"><a href="#s_fn_user.Delete">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/users.go</code>:</p></div><table class="listing">
<tr><td>51</td><td><code><pre>func (u *user) Delete() error {</pre></code></td></tr><tr><td>52</td><td><code><pre> return usersDB().Delete(u).Error</pre></code></td></tr><tr><td>53</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_init">func init</div><div class="info"><a href="#s_fn_init">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/core.go</code>:</p></div><table class="listing">
<tr><td>42</td><td><code><pre>func init() {</pre></code></td></tr><tr><td>43</td><td><code><pre> CoreApp = NewCore()</pre></code></td></tr><tr><td>44</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_ReturnCheckin">func ReturnCheckin</div><div class="info"><a href="#s_fn_ReturnCheckin">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checkin.go</code>:</p></div><table class="listing">
<tr><td>66</td><td><code><pre>func ReturnCheckin(c *types.Checkin) *Checkin {</pre></code></td></tr><tr><td>67</td><td><code><pre> return &amp;Checkin{Checkin: c}</pre></code></td></tr><tr><td>68</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_reorderServices">func reorderServices</div><div class="info"><a href="#s_fn_reorderServices">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
<tr><td>103</td><td><code><pre>func reorderServices() {</pre></code></td></tr><tr><td>104</td><td><code><pre> sort.Sort(ServiceOrder(CoreApp.Services))</pre></code></td></tr><tr><td>105</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_ReturnService">func ReturnService</div><div class="info"><a href="#s_fn_ReturnService">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
<tr><td>40</td><td><code><pre>func ReturnService(s *types.Service) *Service {</pre></code></td></tr><tr><td>41</td><td><code><pre> return &amp;Service{s}</pre></code></td></tr><tr><td>42</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_checkinDB">func checkinDB</div><div class="info"><a href="#s_fn_checkinDB">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
<tr><td>67</td><td><code><pre>func checkinDB() *gorm.DB {</pre></code></td></tr><tr><td>68</td><td><code><pre> return DbSession.Model(&amp;types.Checkin{})</pre></code></td></tr><tr><td>69</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_ReturnCheckinHit">func ReturnCheckinHit</div><div class="info"><a href="#s_fn_ReturnCheckinHit">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checkin.go</code>:</p></div><table class="listing">
<tr><td>71</td><td><code><pre>func ReturnCheckinHit(c *types.CheckinHit) *checkinHit {</pre></code></td></tr><tr><td>72</td><td><code><pre> return &amp;checkinHit{CheckinHit: c}</pre></code></td></tr><tr><td>73</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_ServiceOrder.Len">func ServiceOrder.Len</div><div class="info"><a href="#s_fn_ServiceOrder.Len">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/core.go</code>:</p></div><table class="listing">
<tr><td>160</td><td><code><pre>func (c ServiceOrder) Len() int { return len(c) }</pre></code></td></tr></table>
<div class="funcname" id="fn_ServiceOrder.Swap">func ServiceOrder.Swap</div><div class="info"><a href="#s_fn_ServiceOrder.Swap">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/core.go</code>:</p></div><table class="listing">
<tr><td>161</td><td><code><pre>func (c ServiceOrder) Swap(i, j int) { c[i], c[j] = c[j], c[i] }</pre></code></td></tr></table>
<div class="funcname" id="fn_ServiceOrder.Less">func ServiceOrder.Less</div><div class="info"><a href="#s_fn_ServiceOrder.Less">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/core.go</code>:</p></div><table class="listing">
<tr><td>162</td><td><code><pre>func (c ServiceOrder) Less(i, j int) bool { return c[i].(*Service).Order &lt; c[j].(*Service).Order }</pre></code></td></tr></table>
<div class="funcname" id="fn_failuresDB">func failuresDB</div><div class="info"><a href="#s_fn_failuresDB">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
<tr><td>42</td><td><code><pre>func failuresDB() *gorm.DB {</pre></code></td></tr><tr><td>43</td><td><code><pre> return DbSession.Model(&amp;types.Failure{})</pre></code></td></tr><tr><td>44</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_hitsDB">func hitsDB</div><div class="info"><a href="#s_fn_hitsDB">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
<tr><td>47</td><td><code><pre>func hitsDB() *gorm.DB {</pre></code></td></tr><tr><td>48</td><td><code><pre> return DbSession.Model(&amp;types.Hit{})</pre></code></td></tr><tr><td>49</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_servicesDB">func servicesDB</div><div class="info"><a href="#s_fn_servicesDB">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
<tr><td>52</td><td><code><pre>func servicesDB() *gorm.DB {</pre></code></td></tr><tr><td>53</td><td><code><pre> return DbSession.Model(&amp;types.Service{})</pre></code></td></tr><tr><td>54</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_coreDB">func coreDB</div><div class="info"><a href="#s_fn_coreDB">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
<tr><td>57</td><td><code><pre>func coreDB() *gorm.DB {</pre></code></td></tr><tr><td>58</td><td><code><pre> return DbSession.Table(&#34;core&#34;).Model(&amp;CoreApp)</pre></code></td></tr><tr><td>59</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_usersDB">func usersDB</div><div class="info"><a href="#s_fn_usersDB">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
<tr><td>62</td><td><code><pre>func usersDB() *gorm.DB {</pre></code></td></tr><tr><td>63</td><td><code><pre> return DbSession.Model(&amp;types.User{})</pre></code></td></tr><tr><td>64</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_ReturnUser">func ReturnUser</div><div class="info"><a href="#s_fn_ReturnUser">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/users.go</code>:</p></div><table class="listing">
<tr><td>31</td><td><code><pre>func ReturnUser(u *types.User) *user {</pre></code></td></tr><tr><td>32</td><td><code><pre> return &amp;user{u}</pre></code></td></tr><tr><td>33</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Service.Select">func Service.Select</div><div class="info"><a href="#s_fn_Service.Select">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
<tr><td>35</td><td><code><pre>func (s *Service) Select() *types.Service {</pre></code></td></tr><tr><td>36</td><td><code><pre> return s.Service</pre></code></td></tr><tr><td>37</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Service.parseHost">func Service.parseHost</div><div class="info"><a href="#s_fn_Service.parseHost">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checker.go</code>:</p></div><table class="listing">
<tr><td>77</td><td><code><pre>func (s *Service) parseHost() string {</pre></code></td></tr><tr><td>78</td><td><code><pre> if s.Type == &#34;tcp&#34; || s.Type == &#34;udp&#34; {</pre></code></td></tr><tr><td>79</td><td><code><pre> return s.Domain</pre></code></td></tr><tr><td>80</td><td><code><pre> } else {</pre></code></td></tr><tr><td>81</td><td><code><pre> domain := s.Domain</pre></code></td></tr><tr><td>82</td><td><code><pre> hasPort, _ := regexp.MatchString(`\:([0-9]+)`, domain)</pre></code></td></tr><tr><td>83</td><td><code><pre> if hasPort {</pre></code></td></tr><tr><td>84</td><td><code><pre> splitDomain := strings.Split(s.Domain, &#34;:&#34;)</pre></code></td></tr><tr><td>85</td><td><code><pre> domain = splitDomain[len(splitDomain)-2]</pre></code></td></tr><tr><td>86</td><td><code><pre> }</pre></code></td></tr><tr><td>87</td><td><code><pre> host, err := url.Parse(domain)</pre></code></td></tr><tr><td>88</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>89</td><td><code><pre> return s.Domain</pre></code></td></tr><tr><td>90</td><td><code><pre> }</pre></code></td></tr><tr><td>91</td><td><code><pre> return host.Host</pre></code></td></tr><tr><td>92</td><td><code><pre> }</pre></code></td></tr><tr><td>93</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Service.dnsCheck">func Service.dnsCheck</div><div class="info"><a href="#s_fn_Service.dnsCheck">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checker.go</code>:</p></div><table class="listing">
<tr><td>96</td><td><code><pre>func (s *Service) dnsCheck() (float64, error) {</pre></code></td></tr><tr><td>97</td><td><code><pre> var err error</pre></code></td></tr><tr><td>98</td><td><code><pre> t1 := time.Now()</pre></code></td></tr><tr><td>99</td><td><code><pre> host := s.parseHost()</pre></code></td></tr><tr><td>100</td><td><code><pre> if s.Type == &#34;tcp&#34; {</pre></code></td></tr><tr><td>101</td><td><code><pre> _, err = net.LookupHost(host)</pre></code></td></tr><tr><td>102</td><td><code><pre> } else {</pre></code></td></tr><tr><td>103</td><td><code><pre> _, err = net.LookupIP(host)</pre></code></td></tr><tr><td>104</td><td><code><pre> }</pre></code></td></tr><tr><td>105</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>106</td><td><code><pre> return 0, err</pre></code></td></tr><tr><td>107</td><td><code><pre> }</pre></code></td></tr><tr><td>108</td><td><code><pre> t2 := time.Now()</pre></code></td></tr><tr><td>109</td><td><code><pre> subTime := t2.Sub(t1).Seconds()</pre></code></td></tr><tr><td>110</td><td><code><pre> return subTime, err</pre></code></td></tr><tr><td>111</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Service.Sum">func Service.Sum</div><div class="info"><a href="#s_fn_Service.Sum">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/hits.go</code>:</p></div><table class="listing">
<tr><td>79</td><td><code><pre>func (s *Service) Sum() (float64, error) {</pre></code></td></tr><tr><td>80</td><td><code><pre> var amount float64</pre></code></td></tr><tr><td>81</td><td><code><pre> hits, err := s.Hits()</pre></code></td></tr><tr><td>82</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>83</td><td><code><pre> utils.Log(2, err)</pre></code></td></tr><tr><td>84</td><td><code><pre> }</pre></code></td></tr><tr><td>85</td><td><code><pre> for _, h := range hits {</pre></code></td></tr><tr><td>86</td><td><code><pre> amount += h.Latency</pre></code></td></tr><tr><td>87</td><td><code><pre> }</pre></code></td></tr><tr><td>88</td><td><code><pre> return amount, err</pre></code></td></tr><tr><td>89</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Service.Update">func Service.Update</div><div class="info"><a href="#s_fn_Service.Update">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
<tr><td>368</td><td><code><pre>func (s *Service) Update(restart bool) error {</pre></code></td></tr><tr><td>369</td><td><code><pre> err := servicesDB().Update(s)</pre></code></td></tr><tr><td>370</td><td><code><pre> if err.Error != nil {</pre></code></td></tr><tr class="miss"><td>371</td><td><code><pre> utils.Log(3, fmt.Sprintf(&#34;Failed to update service %v. %v&#34;, s.Name, err))</pre></code></td></tr><tr class="miss"><td>372</td><td><code><pre> return err.Error</pre></code></td></tr><tr><td>373</td><td><code><pre> }</pre></code></td></tr><tr><td>374</td><td><code><pre> if restart {</pre></code></td></tr><tr><td>375</td><td><code><pre> s.Close()</pre></code></td></tr><tr><td>376</td><td><code><pre> s.Start()</pre></code></td></tr><tr><td>377</td><td><code><pre> s.SleepDuration = time.Duration(s.Interval) * time.Second</pre></code></td></tr><tr><td>378</td><td><code><pre> go s.CheckQueue(true)</pre></code></td></tr><tr><td>379</td><td><code><pre> }</pre></code></td></tr><tr><td>380</td><td><code><pre> reorderServices()</pre></code></td></tr><tr><td>381</td><td><code><pre> updateService(s)</pre></code></td></tr><tr><td>382</td><td><code><pre> notifier.OnUpdatedService(s.Service)</pre></code></td></tr><tr><td>383</td><td><code><pre> return err.Error</pre></code></td></tr><tr><td>384</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Service.Delete">func Service.Delete</div><div class="info"><a href="#s_fn_Service.Delete">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
<tr><td>347</td><td><code><pre>func (s *Service) Delete() error {</pre></code></td></tr><tr><td>348</td><td><code><pre> i := s.index()</pre></code></td></tr><tr><td>349</td><td><code><pre> err := servicesDB().Delete(s)</pre></code></td></tr><tr><td>350</td><td><code><pre> if err.Error != nil {</pre></code></td></tr><tr class="miss"><td>351</td><td><code><pre> utils.Log(3, fmt.Sprintf(&#34;Failed to delete service %v. %v&#34;, s.Name, err.Error))</pre></code></td></tr><tr class="miss"><td>352</td><td><code><pre> return err.Error</pre></code></td></tr><tr><td>353</td><td><code><pre> }</pre></code></td></tr><tr><td>354</td><td><code><pre> s.Close()</pre></code></td></tr><tr><td>355</td><td><code><pre> slice := CoreApp.Services</pre></code></td></tr><tr><td>356</td><td><code><pre> CoreApp.Services = append(slice[:i], slice[i+1:]...)</pre></code></td></tr><tr><td>357</td><td><code><pre> reorderServices()</pre></code></td></tr><tr><td>358</td><td><code><pre> notifier.OnDeletedService(s.Service)</pre></code></td></tr><tr><td>359</td><td><code><pre> return err.Error</pre></code></td></tr><tr><td>360</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Service.Create">func Service.Create</div><div class="info"><a href="#s_fn_Service.Create">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
<tr><td>387</td><td><code><pre>func (s *Service) Create(check bool) (int64, error) {</pre></code></td></tr><tr><td>388</td><td><code><pre> s.CreatedAt = time.Now()</pre></code></td></tr><tr><td>389</td><td><code><pre> db := servicesDB().Create(s)</pre></code></td></tr><tr><td>390</td><td><code><pre> if db.Error != nil {</pre></code></td></tr><tr class="miss"><td>391</td><td><code><pre> utils.Log(3, fmt.Sprintf(&#34;Failed to create service %v #%v: %v&#34;, s.Name, s.Id, db.Error))</pre></code></td></tr><tr class="miss"><td>392</td><td><code><pre> return 0, db.Error</pre></code></td></tr><tr><td>393</td><td><code><pre> }</pre></code></td></tr><tr><td>394</td><td><code><pre> s.Start()</pre></code></td></tr><tr><td>395</td><td><code><pre> go s.CheckQueue(check)</pre></code></td></tr><tr><td>396</td><td><code><pre> CoreApp.Services = append(CoreApp.Services, s)</pre></code></td></tr><tr><td>397</td><td><code><pre> reorderServices()</pre></code></td></tr><tr><td>398</td><td><code><pre> notifier.OnNewService(s.Service)</pre></code></td></tr><tr><td>399</td><td><code><pre> return s.Id, nil</pre></code></td></tr><tr><td>400</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Checkin.Routine">func Checkin.Routine</div><div class="info"><a href="#s_fn_Checkin.Routine">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checkin.go</code>:</p></div><table class="listing">
<tr><td>35</td><td><code><pre>func (c *Checkin) Routine() {</pre></code></td></tr><tr><td>36</td><td><code><pre> if c.Last() == nil {</pre></code></td></tr><tr class="miss"><td>37</td><td><code><pre> return</pre></code></td></tr><tr><td>38</td><td><code><pre> }</pre></code></td></tr><tr><td>39</td><td><code><pre> reCheck := c.Period()</pre></code></td></tr><tr><td>40</td><td><code><pre>CheckinLoop:</pre></code></td></tr><tr><td>41</td><td><code><pre> for {</pre></code></td></tr><tr><td>42</td><td><code><pre> select {</pre></code></td></tr><tr><td>43</td><td><code><pre> case &lt;-c.Running:</pre></code></td></tr><tr class="miss"><td>44</td><td><code><pre> utils.Log(1, fmt.Sprintf(&#34;Stopping checkin routine: %v&#34;, c.Name))</pre></code></td></tr><tr class="miss"><td>45</td><td><code><pre> break CheckinLoop</pre></code></td></tr><tr><td>46</td><td><code><pre> case &lt;-time.After(reCheck):</pre></code></td></tr><tr><td>47</td><td><code><pre> utils.Log(1, fmt.Sprintf(&#34;Checkin %v is expected at %v, checking every %v&#34;, c.Name, utils.FormatDuration(c.Expected()), utils.FormatDuration(c.Period())))</pre></code></td></tr><tr><td>48</td><td><code><pre> if c.Expected().Seconds() &lt;= 0 {</pre></code></td></tr><tr><td>49</td><td><code><pre> issue := fmt.Sprintf(&#34;Checkin %v is failing, no request since %v&#34;, c.Name, c.Last().CreatedAt)</pre></code></td></tr><tr><td>50</td><td><code><pre> utils.Log(3, issue)</pre></code></td></tr><tr><td>51</td><td><code><pre> c.Service()</pre></code></td></tr><tr><td>52</td><td><code><pre> c.CreateFailure()</pre></code></td></tr><tr><td>53</td><td><code><pre> }</pre></code></td></tr><tr><td>54</td><td><code><pre> reCheck = c.Period()</pre></code></td></tr><tr><td>55</td><td><code><pre> }</pre></code></td></tr><tr><td>56</td><td><code><pre> continue</pre></code></td></tr><tr><td>57</td><td><code><pre> }</pre></code></td></tr><tr><td>58</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Service.OnlineSince">func Service.OnlineSince</div><div class="info"><a href="#s_fn_Service.OnlineSince">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
<tr><td>133</td><td><code><pre>func (s *Service) OnlineSince(ago time.Time) float32 {</pre></code></td></tr><tr><td>134</td><td><code><pre> failed, _ := s.TotalFailuresSince(ago)</pre></code></td></tr><tr><td>135</td><td><code><pre> if failed == 0 {</pre></code></td></tr><tr><td>136</td><td><code><pre> s.Online24Hours = 100.00</pre></code></td></tr><tr><td>137</td><td><code><pre> return s.Online24Hours</pre></code></td></tr><tr><td>138</td><td><code><pre> }</pre></code></td></tr><tr><td>139</td><td><code><pre> total, _ := s.TotalHitsSince(ago)</pre></code></td></tr><tr><td>140</td><td><code><pre> if total == 0 {</pre></code></td></tr><tr class="miss"><td>141</td><td><code><pre> s.Online24Hours = 0</pre></code></td></tr><tr class="miss"><td>142</td><td><code><pre> return s.Online24Hours</pre></code></td></tr><tr><td>143</td><td><code><pre> }</pre></code></td></tr><tr><td>144</td><td><code><pre> avg := float64(failed) / float64(total) * 100</pre></code></td></tr><tr><td>145</td><td><code><pre> avg = 100 - avg</pre></code></td></tr><tr><td>146</td><td><code><pre> if avg &lt; 0 {</pre></code></td></tr><tr class="miss"><td>147</td><td><code><pre> avg = 0</pre></code></td></tr><tr><td>148</td><td><code><pre> }</pre></code></td></tr><tr><td>149</td><td><code><pre> amount, _ := strconv.ParseFloat(fmt.Sprintf(&#34;%0.2f&#34;, avg), 10)</pre></code></td></tr><tr><td>150</td><td><code><pre> s.Online24Hours = float32(amount)</pre></code></td></tr><tr><td>151</td><td><code><pre> return s.Online24Hours</pre></code></td></tr><tr><td>152</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Service.duration">func Service.duration</div><div class="info"><a href="#s_fn_Service.duration">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checker.go</code>:</p></div><table class="listing">
<tr><td>67</td><td><code><pre>func (s *Service) duration() time.Duration {</pre></code></td></tr><tr><td>68</td><td><code><pre> var amount time.Duration</pre></code></td></tr><tr><td>69</td><td><code><pre> if s.Interval &gt;= 10000 {</pre></code></td></tr><tr class="miss"><td>70</td><td><code><pre> amount = time.Duration(s.Interval) * time.Microsecond</pre></code></td></tr><tr><td>71</td><td><code><pre> } else {</pre></code></td></tr><tr><td>72</td><td><code><pre> amount = time.Duration(s.Interval) * time.Second</pre></code></td></tr><tr><td>73</td><td><code><pre> }</pre></code></td></tr><tr><td>74</td><td><code><pre> return amount</pre></code></td></tr><tr><td>75</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_SelectAllUsers">func SelectAllUsers</div><div class="info"><a href="#s_fn_SelectAllUsers">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/users.go</code>:</p></div><table class="listing">
<tr><td>81</td><td><code><pre>func SelectAllUsers() ([]*user, error) {</pre></code></td></tr><tr><td>82</td><td><code><pre> var users []*user</pre></code></td></tr><tr><td>83</td><td><code><pre> db := usersDB().Find(&amp;users)</pre></code></td></tr><tr><td>84</td><td><code><pre> if db.Error != nil {</pre></code></td></tr><tr class="miss"><td>85</td><td><code><pre> utils.Log(3, fmt.Sprintf(&#34;Failed to load all users. %v&#34;, db.Error))</pre></code></td></tr><tr><td>86</td><td><code><pre> }</pre></code></td></tr><tr><td>87</td><td><code><pre> return users, db.Error</pre></code></td></tr><tr><td>88</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Service.AvgUptime">func Service.AvgUptime</div><div class="info"><a href="#s_fn_Service.AvgUptime">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
<tr><td>293</td><td><code><pre>func (s *Service) AvgUptime(ago time.Time) string {</pre></code></td></tr><tr><td>294</td><td><code><pre> failed, _ := s.TotalFailuresSince(ago)</pre></code></td></tr><tr><td>295</td><td><code><pre> if failed == 0 {</pre></code></td></tr><tr><td>296</td><td><code><pre> return &#34;100&#34;</pre></code></td></tr><tr><td>297</td><td><code><pre> }</pre></code></td></tr><tr><td>298</td><td><code><pre> total, _ := s.TotalHitsSince(ago)</pre></code></td></tr><tr><td>299</td><td><code><pre> if total == 0 {</pre></code></td></tr><tr class="miss"><td>300</td><td><code><pre> return &#34;0.00&#34;</pre></code></td></tr><tr><td>301</td><td><code><pre> }</pre></code></td></tr><tr><td>302</td><td><code><pre> percent := float64(failed) / float64(total) * 100</pre></code></td></tr><tr><td>303</td><td><code><pre> percent = 100 - percent</pre></code></td></tr><tr><td>304</td><td><code><pre> if percent &lt; 0 {</pre></code></td></tr><tr class="miss"><td>305</td><td><code><pre> percent = 0</pre></code></td></tr><tr><td>306</td><td><code><pre> }</pre></code></td></tr><tr><td>307</td><td><code><pre> amount := fmt.Sprintf(&#34;%0.2f&#34;, percent)</pre></code></td></tr><tr><td>308</td><td><code><pre> if amount == &#34;100.00&#34; {</pre></code></td></tr><tr class="miss"><td>309</td><td><code><pre> amount = &#34;100&#34;</pre></code></td></tr><tr><td>310</td><td><code><pre> }</pre></code></td></tr><tr><td>311</td><td><code><pre> return amount</pre></code></td></tr><tr><td>312</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Service.AllFailures">func Service.AllFailures</div><div class="info"><a href="#s_fn_Service.AllFailures">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/failures.go</code>:</p></div><table class="listing">
<tr><td>44</td><td><code><pre>func (s *Service) AllFailures() []*failure {</pre></code></td></tr><tr><td>45</td><td><code><pre> var fails []*failure</pre></code></td></tr><tr><td>46</td><td><code><pre> col := failuresDB().Where(&#34;service = ?&#34;, s.Id).Not(&#34;method = &#39;checkin&#39;&#34;).Order(&#34;id desc&#34;)</pre></code></td></tr><tr><td>47</td><td><code><pre> err := col.Find(&amp;fails)</pre></code></td></tr><tr><td>48</td><td><code><pre> if err.Error != nil {</pre></code></td></tr><tr class="miss"><td>49</td><td><code><pre> utils.Log(3, fmt.Sprintf(&#34;Issue getting failures for service %v, %v&#34;, s.Name, err))</pre></code></td></tr><tr class="miss"><td>50</td><td><code><pre> return nil</pre></code></td></tr><tr><td>51</td><td><code><pre> }</pre></code></td></tr><tr><td>52</td><td><code><pre> for _, f := range fails {</pre></code></td></tr><tr><td>53</td><td><code><pre> s.Failures = append(s.Failures, f)</pre></code></td></tr><tr><td>54</td><td><code><pre> }</pre></code></td></tr><tr><td>55</td><td><code><pre> return fails</pre></code></td></tr><tr><td>56</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Service.Downtime">func Service.Downtime</div><div class="info"><a href="#s_fn_Service.Downtime">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
<tr><td>228</td><td><code><pre>func (s *Service) Downtime() time.Duration {</pre></code></td></tr><tr><td>229</td><td><code><pre> hits, _ := s.Hits()</pre></code></td></tr><tr><td>230</td><td><code><pre> fails := s.LimitedFailures()</pre></code></td></tr><tr><td>231</td><td><code><pre> if len(fails) == 0 {</pre></code></td></tr><tr class="miss"><td>232</td><td><code><pre> return time.Duration(0)</pre></code></td></tr><tr><td>233</td><td><code><pre> }</pre></code></td></tr><tr><td>234</td><td><code><pre> if len(hits) == 0 {</pre></code></td></tr><tr class="miss"><td>235</td><td><code><pre> return time.Now().UTC().Sub(fails[len(fails)-1].CreatedAt.UTC())</pre></code></td></tr><tr><td>236</td><td><code><pre> }</pre></code></td></tr><tr><td>237</td><td><code><pre> since := fails[0].CreatedAt.UTC().Sub(hits[0].CreatedAt.UTC())</pre></code></td></tr><tr><td>238</td><td><code><pre> return since</pre></code></td></tr><tr><td>239</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Checkin.Create">func Checkin.Create</div><div class="info"><a href="#s_fn_Checkin.Create">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checkin.go</code>:</p></div><table class="listing">
<tr><td>154</td><td><code><pre>func (c *Checkin) Create() (int64, error) {</pre></code></td></tr><tr><td>155</td><td><code><pre> c.ApiKey = utils.RandomString(7)</pre></code></td></tr><tr><td>156</td><td><code><pre> row := checkinDB().Create(&amp;c)</pre></code></td></tr><tr><td>157</td><td><code><pre> c.Start()</pre></code></td></tr><tr><td>158</td><td><code><pre> go c.Routine()</pre></code></td></tr><tr><td>159</td><td><code><pre> if row.Error != nil {</pre></code></td></tr><tr class="miss"><td>160</td><td><code><pre> utils.Log(2, row.Error)</pre></code></td></tr><tr class="miss"><td>161</td><td><code><pre> return 0, row.Error</pre></code></td></tr><tr><td>162</td><td><code><pre> }</pre></code></td></tr><tr><td>163</td><td><code><pre> return c.Id, row.Error</pre></code></td></tr><tr><td>164</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Service.index">func Service.index</div><div class="info"><a href="#s_fn_Service.index">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
<tr><td>331</td><td><code><pre>func (s *Service) index() int {</pre></code></td></tr><tr><td>332</td><td><code><pre> for k, service := range CoreApp.Services {</pre></code></td></tr><tr><td>333</td><td><code><pre> if s.Id == service.(*Service).Id {</pre></code></td></tr><tr><td>334</td><td><code><pre> return k</pre></code></td></tr><tr><td>335</td><td><code><pre> }</pre></code></td></tr><tr><td>336</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>337</td><td><code><pre> return 0</pre></code></td></tr><tr><td>338</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_SelectService">func SelectService</div><div class="info"><a href="#s_fn_SelectService">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
<tr><td>49</td><td><code><pre>func SelectService(id int64) *Service {</pre></code></td></tr><tr><td>50</td><td><code><pre> for _, s := range CoreApp.Services {</pre></code></td></tr><tr><td>51</td><td><code><pre> if s.Select().Id == id {</pre></code></td></tr><tr><td>52</td><td><code><pre> return s.(*Service)</pre></code></td></tr><tr><td>53</td><td><code><pre> }</pre></code></td></tr><tr><td>54</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>55</td><td><code><pre> return nil</pre></code></td></tr><tr><td>56</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_user.Create">func user.Create</div><div class="info"><a href="#s_fn_user.Create">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/users.go</code>:</p></div><table class="listing">
<tr><td>64</td><td><code><pre>func (u *user) Create() (int64, error) {</pre></code></td></tr><tr><td>65</td><td><code><pre> u.CreatedAt = time.Now()</pre></code></td></tr><tr><td>66</td><td><code><pre> u.Password = utils.HashPassword(u.Password)</pre></code></td></tr><tr><td>67</td><td><code><pre> u.ApiKey = utils.NewSHA1Hash(5)</pre></code></td></tr><tr><td>68</td><td><code><pre> u.ApiSecret = utils.NewSHA1Hash(10)</pre></code></td></tr><tr><td>69</td><td><code><pre> db := usersDB().Create(u)</pre></code></td></tr><tr><td>70</td><td><code><pre> if db.Error != nil {</pre></code></td></tr><tr class="miss"><td>71</td><td><code><pre> return 0, db.Error</pre></code></td></tr><tr><td>72</td><td><code><pre> }</pre></code></td></tr><tr><td>73</td><td><code><pre> if u.Id == 0 {</pre></code></td></tr><tr class="miss"><td>74</td><td><code><pre> utils.Log(3, fmt.Sprintf(&#34;Failed to create user %v. %v&#34;, u.Username, db.Error))</pre></code></td></tr><tr class="miss"><td>75</td><td><code><pre> return 0, db.Error</pre></code></td></tr><tr><td>76</td><td><code><pre> }</pre></code></td></tr><tr><td>77</td><td><code><pre> return u.Id, db.Error</pre></code></td></tr><tr><td>78</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Service.checkTcp">func Service.checkTcp</div><div class="info"><a href="#s_fn_Service.checkTcp">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checker.go</code>:</p></div><table class="listing">
<tr><td>114</td><td><code><pre>func (s *Service) checkTcp(record bool) *Service {</pre></code></td></tr><tr><td>115</td><td><code><pre> dnsLookup, err := s.dnsCheck()</pre></code></td></tr><tr><td>116</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>117</td><td><code><pre> if record {</pre></code></td></tr><tr class="miss"><td>118</td><td><code><pre> recordFailure(s, fmt.Sprintf(&#34;Could not get IP address for TCP service %v, %v&#34;, s.Domain, err))</pre></code></td></tr><tr><td>119</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>120</td><td><code><pre> return s</pre></code></td></tr><tr><td>121</td><td><code><pre> }</pre></code></td></tr><tr><td>122</td><td><code><pre> s.PingTime = dnsLookup</pre></code></td></tr><tr><td>123</td><td><code><pre> t1 := time.Now()</pre></code></td></tr><tr><td>124</td><td><code><pre> domain := fmt.Sprintf(&#34;%v&#34;, s.Domain)</pre></code></td></tr><tr><td>125</td><td><code><pre> if s.Port != 0 {</pre></code></td></tr><tr><td>126</td><td><code><pre> domain = fmt.Sprintf(&#34;%v:%v&#34;, s.Domain, s.Port)</pre></code></td></tr><tr><td>127</td><td><code><pre> }</pre></code></td></tr><tr><td>128</td><td><code><pre> conn, err := net.DialTimeout(s.Type, domain, time.Duration(s.Timeout)*time.Second)</pre></code></td></tr><tr><td>129</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>130</td><td><code><pre> if record {</pre></code></td></tr><tr class="miss"><td>131</td><td><code><pre> recordFailure(s, fmt.Sprintf(&#34;%v Dial Error %v&#34;, s.Type, err))</pre></code></td></tr><tr><td>132</td><td><code><pre> }</pre></code></td></tr><tr><td>133</td><td><code><pre> return s</pre></code></td></tr><tr><td>134</td><td><code><pre> }</pre></code></td></tr><tr><td>135</td><td><code><pre> if err := conn.Close(); err != nil {</pre></code></td></tr><tr class="miss"><td>136</td><td><code><pre> if record {</pre></code></td></tr><tr class="miss"><td>137</td><td><code><pre> recordFailure(s, fmt.Sprintf(&#34;TCP Socket Close Error %v&#34;, err))</pre></code></td></tr><tr><td>138</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>139</td><td><code><pre> return s</pre></code></td></tr><tr><td>140</td><td><code><pre> }</pre></code></td></tr><tr><td>141</td><td><code><pre> t2 := time.Now()</pre></code></td></tr><tr><td>142</td><td><code><pre> s.Latency = t2.Sub(t1).Seconds()</pre></code></td></tr><tr><td>143</td><td><code><pre> s.LastResponse = &#34;&#34;</pre></code></td></tr><tr><td>144</td><td><code><pre> if record {</pre></code></td></tr><tr><td>145</td><td><code><pre> recordSuccess(s)</pre></code></td></tr><tr><td>146</td><td><code><pre> }</pre></code></td></tr><tr><td>147</td><td><code><pre> return s</pre></code></td></tr><tr><td>148</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Core.SelectAllServices">func Core.SelectAllServices</div><div class="info"><a href="#s_fn_Core.SelectAllServices">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
<tr><td>82</td><td><code><pre>func (c *Core) SelectAllServices(start bool) ([]*Service, error) {</pre></code></td></tr><tr><td>83</td><td><code><pre> var services []*Service</pre></code></td></tr><tr><td>84</td><td><code><pre> db := servicesDB().Find(&amp;services).Order(&#34;order_id desc&#34;)</pre></code></td></tr><tr><td>85</td><td><code><pre> if db.Error != nil {</pre></code></td></tr><tr class="miss"><td>86</td><td><code><pre> utils.Log(3, fmt.Sprintf(&#34;service error: %v&#34;, db.Error))</pre></code></td></tr><tr class="miss"><td>87</td><td><code><pre> return nil, db.Error</pre></code></td></tr><tr><td>88</td><td><code><pre> }</pre></code></td></tr><tr><td>89</td><td><code><pre> CoreApp.Services = nil</pre></code></td></tr><tr><td>90</td><td><code><pre> for _, service := range services {</pre></code></td></tr><tr><td>91</td><td><code><pre> if start {</pre></code></td></tr><tr class="miss"><td>92</td><td><code><pre> service.Start()</pre></code></td></tr><tr class="miss"><td>93</td><td><code><pre> service.CheckinProcess()</pre></code></td></tr><tr><td>94</td><td><code><pre> }</pre></code></td></tr><tr><td>95</td><td><code><pre> service.AllFailures()</pre></code></td></tr><tr><td>96</td><td><code><pre> CoreApp.Services = append(CoreApp.Services, service)</pre></code></td></tr><tr><td>97</td><td><code><pre> }</pre></code></td></tr><tr><td>98</td><td><code><pre> sort.Sort(ServiceOrder(CoreApp.Services))</pre></code></td></tr><tr><td>99</td><td><code><pre> return services, db.Error</pre></code></td></tr><tr><td>100</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_DbConfig.Save">func DbConfig.Save</div><div class="info"><a href="#s_fn_DbConfig.Save">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
<tr><td>280</td><td><code><pre>func (db *DbConfig) Save() (*DbConfig, error) {</pre></code></td></tr><tr><td>281</td><td><code><pre> var err error</pre></code></td></tr><tr><td>282</td><td><code><pre> config, err := os.Create(utils.Directory + &#34;/config.yml&#34;)</pre></code></td></tr><tr><td>283</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>284</td><td><code><pre> utils.Log(4, err)</pre></code></td></tr><tr class="miss"><td>285</td><td><code><pre> return nil, err</pre></code></td></tr><tr><td>286</td><td><code><pre> }</pre></code></td></tr><tr><td>287</td><td><code><pre> db.ApiKey = utils.NewSHA1Hash(16)</pre></code></td></tr><tr><td>288</td><td><code><pre> db.ApiSecret = utils.NewSHA1Hash(16)</pre></code></td></tr><tr><td>289</td><td><code><pre> data, err := yaml.Marshal(db)</pre></code></td></tr><tr><td>290</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>291</td><td><code><pre> utils.Log(3, err)</pre></code></td></tr><tr class="miss"><td>292</td><td><code><pre> return nil, err</pre></code></td></tr><tr><td>293</td><td><code><pre> }</pre></code></td></tr><tr><td>294</td><td><code><pre> config.WriteString(string(data))</pre></code></td></tr><tr><td>295</td><td><code><pre> defer config.Close()</pre></code></td></tr><tr><td>296</td><td><code><pre> return db, err</pre></code></td></tr><tr><td>297</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_AuthUser">func AuthUser</div><div class="info"><a href="#s_fn_AuthUser">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/users.go</code>:</p></div><table class="listing">
<tr><td>92</td><td><code><pre>func AuthUser(username, password string) (*user, bool) {</pre></code></td></tr><tr><td>93</td><td><code><pre> user, err := SelectUsername(username)</pre></code></td></tr><tr><td>94</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>95</td><td><code><pre> utils.Log(2, err)</pre></code></td></tr><tr class="miss"><td>96</td><td><code><pre> return nil, false</pre></code></td></tr><tr><td>97</td><td><code><pre> }</pre></code></td></tr><tr><td>98</td><td><code><pre> if CheckHash(password, user.Password) {</pre></code></td></tr><tr><td>99</td><td><code><pre> return user, true</pre></code></td></tr><tr><td>100</td><td><code><pre> }</pre></code></td></tr><tr><td>101</td><td><code><pre> return nil, false</pre></code></td></tr><tr><td>102</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Service.CreateFailure">func Service.CreateFailure</div><div class="info"><a href="#s_fn_Service.CreateFailure">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/failures.go</code>:</p></div><table class="listing">
<tr><td>32</td><td><code><pre>func (s *Service) CreateFailure(f *types.Failure) (int64, error) {</pre></code></td></tr><tr><td>33</td><td><code><pre> f.Service = s.Id</pre></code></td></tr><tr><td>34</td><td><code><pre> s.Failures = append(s.Failures, f)</pre></code></td></tr><tr><td>35</td><td><code><pre> row := failuresDB().Create(f)</pre></code></td></tr><tr><td>36</td><td><code><pre> if row.Error != nil {</pre></code></td></tr><tr class="miss"><td>37</td><td><code><pre> utils.Log(3, row.Error)</pre></code></td></tr><tr class="miss"><td>38</td><td><code><pre> return 0, row.Error</pre></code></td></tr><tr><td>39</td><td><code><pre> }</pre></code></td></tr><tr><td>40</td><td><code><pre> return f.Id, row.Error</pre></code></td></tr><tr><td>41</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_SelectCore">func SelectCore</div><div class="info"><a href="#s_fn_SelectCore">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/core.go</code>:</p></div><table class="listing">
<tr><td>136</td><td><code><pre>func SelectCore() (*Core, error) {</pre></code></td></tr><tr><td>137</td><td><code><pre> if DbSession == nil {</pre></code></td></tr><tr class="miss"><td>138</td><td><code><pre> return nil, errors.New(&#34;database has not been initiated yet.&#34;)</pre></code></td></tr><tr><td>139</td><td><code><pre> }</pre></code></td></tr><tr><td>140</td><td><code><pre> exists := DbSession.HasTable(&#34;core&#34;)</pre></code></td></tr><tr><td>141</td><td><code><pre> if !exists {</pre></code></td></tr><tr class="miss"><td>142</td><td><code><pre> return nil, errors.New(&#34;core database has not been setup yet.&#34;)</pre></code></td></tr><tr><td>143</td><td><code><pre> }</pre></code></td></tr><tr><td>144</td><td><code><pre> db := coreDB().First(&amp;CoreApp)</pre></code></td></tr><tr><td>145</td><td><code><pre> if db.Error != nil {</pre></code></td></tr><tr class="miss"><td>146</td><td><code><pre> return nil, db.Error</pre></code></td></tr><tr><td>147</td><td><code><pre> }</pre></code></td></tr><tr><td>148</td><td><code><pre> CoreApp.DbConnection = Configs.DbConn</pre></code></td></tr><tr><td>149</td><td><code><pre> CoreApp.Version = VERSION</pre></code></td></tr><tr><td>150</td><td><code><pre> if os.Getenv(&#34;USE_CDN&#34;) == &#34;true&#34; {</pre></code></td></tr><tr class="miss"><td>151</td><td><code><pre> CoreApp.UseCdn = true</pre></code></td></tr><tr><td>152</td><td><code><pre> }</pre></code></td></tr><tr><td>153</td><td><code><pre> return CoreApp, db.Error</pre></code></td></tr><tr><td>154</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Service.checkHttp">func Service.checkHttp</div><div class="info"><a href="#s_fn_Service.checkHttp">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checker.go</code>:</p></div><table class="listing">
<tr><td>151</td><td><code><pre>func (s *Service) checkHttp(record bool) *Service {</pre></code></td></tr><tr><td>152</td><td><code><pre> dnsLookup, err := s.dnsCheck()</pre></code></td></tr><tr><td>153</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>154</td><td><code><pre> if record {</pre></code></td></tr><tr class="miss"><td>155</td><td><code><pre> recordFailure(s, fmt.Sprintf(&#34;Could not get IP address for domain %v, %v&#34;, s.Domain, err))</pre></code></td></tr><tr><td>156</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>157</td><td><code><pre> return s</pre></code></td></tr><tr><td>158</td><td><code><pre> }</pre></code></td></tr><tr><td>159</td><td><code><pre> s.PingTime = dnsLookup</pre></code></td></tr><tr><td>160</td><td><code><pre> t1 := time.Now()</pre></code></td></tr><tr><td>161</td><td><code><pre> timeout := time.Duration(s.Timeout)</pre></code></td></tr><tr><td>162</td><td><code><pre> client := http.Client{</pre></code></td></tr><tr><td>163</td><td><code><pre> Timeout: timeout * time.Second,</pre></code></td></tr><tr><td>164</td><td><code><pre> }</pre></code></td></tr><tr><td>165</td><td><code><pre></pre></code></td></tr><tr><td>166</td><td><code><pre> var response *http.Response</pre></code></td></tr><tr><td>167</td><td><code><pre> if s.Method == &#34;POST&#34; {</pre></code></td></tr><tr><td>168</td><td><code><pre> response, err = client.Post(s.Domain, &#34;application/json&#34;, bytes.NewBuffer([]byte(s.PostData)))</pre></code></td></tr><tr><td>169</td><td><code><pre> } else {</pre></code></td></tr><tr><td>170</td><td><code><pre> response, err = client.Get(s.Domain)</pre></code></td></tr><tr><td>171</td><td><code><pre> }</pre></code></td></tr><tr><td>172</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>173</td><td><code><pre> if record {</pre></code></td></tr><tr class="miss"><td>174</td><td><code><pre> recordFailure(s, fmt.Sprintf(&#34;HTTP Error %v&#34;, err))</pre></code></td></tr><tr><td>175</td><td><code><pre> }</pre></code></td></tr><tr><td>176</td><td><code><pre> return s</pre></code></td></tr><tr><td>177</td><td><code><pre> }</pre></code></td></tr><tr><td>178</td><td><code><pre> response.Header.Set(&#34;Connection&#34;, &#34;close&#34;)</pre></code></td></tr><tr><td>179</td><td><code><pre> response.Header.Set(&#34;user-Agent&#34;, &#34;StatupMonitor&#34;)</pre></code></td></tr><tr><td>180</td><td><code><pre> t2 := time.Now()</pre></code></td></tr><tr><td>181</td><td><code><pre> s.Latency = t2.Sub(t1).Seconds()</pre></code></td></tr><tr><td>182</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>183</td><td><code><pre> if record {</pre></code></td></tr><tr class="miss"><td>184</td><td><code><pre> recordFailure(s, fmt.Sprintf(&#34;HTTP Error %v&#34;, err))</pre></code></td></tr><tr><td>185</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>186</td><td><code><pre> return s</pre></code></td></tr><tr><td>187</td><td><code><pre> }</pre></code></td></tr><tr><td>188</td><td><code><pre> defer response.Body.Close()</pre></code></td></tr><tr><td>189</td><td><code><pre> contents, err := ioutil.ReadAll(response.Body)</pre></code></td></tr><tr><td>190</td><td><code><pre> s.LastResponse = string(contents)</pre></code></td></tr><tr><td>191</td><td><code><pre> s.LastStatusCode = response.StatusCode</pre></code></td></tr><tr><td>192</td><td><code><pre></pre></code></td></tr><tr><td>193</td><td><code><pre> if s.Expected != &#34;&#34; {</pre></code></td></tr><tr><td>194</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>195</td><td><code><pre> utils.Log(2, err)</pre></code></td></tr><tr><td>196</td><td><code><pre> }</pre></code></td></tr><tr><td>197</td><td><code><pre> match, err := regexp.MatchString(s.Expected, string(contents))</pre></code></td></tr><tr><td>198</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>199</td><td><code><pre> utils.Log(2, err)</pre></code></td></tr><tr><td>200</td><td><code><pre> }</pre></code></td></tr><tr><td>201</td><td><code><pre> if !match {</pre></code></td></tr><tr class="miss"><td>202</td><td><code><pre> if record {</pre></code></td></tr><tr class="miss"><td>203</td><td><code><pre> recordFailure(s, fmt.Sprintf(&#34;HTTP Response Body did not match &#39;%v&#39;&#34;, s.Expected))</pre></code></td></tr><tr><td>204</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>205</td><td><code><pre> return s</pre></code></td></tr><tr><td>206</td><td><code><pre> }</pre></code></td></tr><tr><td>207</td><td><code><pre> }</pre></code></td></tr><tr><td>208</td><td><code><pre> if s.ExpectedStatus != response.StatusCode {</pre></code></td></tr><tr class="miss"><td>209</td><td><code><pre> if record {</pre></code></td></tr><tr class="miss"><td>210</td><td><code><pre> recordFailure(s, fmt.Sprintf(&#34;HTTP Status Code %v did not match %v&#34;, response.StatusCode, s.ExpectedStatus))</pre></code></td></tr><tr><td>211</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>212</td><td><code><pre> return s</pre></code></td></tr><tr><td>213</td><td><code><pre> }</pre></code></td></tr><tr><td>214</td><td><code><pre> s.Online = true</pre></code></td></tr><tr><td>215</td><td><code><pre> if record {</pre></code></td></tr><tr><td>216</td><td><code><pre> recordSuccess(s)</pre></code></td></tr><tr><td>217</td><td><code><pre> }</pre></code></td></tr><tr><td>218</td><td><code><pre> return s</pre></code></td></tr><tr><td>219</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_DbConfig.MigrateDatabase">func DbConfig.MigrateDatabase</div><div class="info"><a href="#s_fn_DbConfig.MigrateDatabase">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
<tr><td>353</td><td><code><pre>func (db *DbConfig) MigrateDatabase() error {</pre></code></td></tr><tr><td>354</td><td><code><pre> utils.Log(1, &#34;Migrating Database Tables...&#34;)</pre></code></td></tr><tr><td>355</td><td><code><pre> tx := DbSession.Begin()</pre></code></td></tr><tr><td>356</td><td><code><pre> defer func() {</pre></code></td></tr><tr><td>357</td><td><code><pre> if r := recover(); r != nil {</pre></code></td></tr><tr><td>358</td><td><code><pre> tx.Rollback()</pre></code></td></tr><tr><td>359</td><td><code><pre> }</pre></code></td></tr><tr><td>360</td><td><code><pre> }()</pre></code></td></tr><tr><td>361</td><td><code><pre> if tx.Error != nil {</pre></code></td></tr><tr class="miss"><td>362</td><td><code><pre> return tx.Error</pre></code></td></tr><tr><td>363</td><td><code><pre> }</pre></code></td></tr><tr><td>364</td><td><code><pre> tx = tx.AutoMigrate(&amp;types.Service{}, &amp;types.User{}, &amp;types.Hit{}, &amp;types.Failure{}, &amp;types.Checkin{}, &amp;types.CheckinHit{}, &amp;notifier.Notification{}).Table(&#34;core&#34;).AutoMigrate(&amp;types.Core{})</pre></code></td></tr><tr><td>365</td><td><code><pre> if tx.Error != nil {</pre></code></td></tr><tr class="miss"><td>366</td><td><code><pre> tx.Rollback()</pre></code></td></tr><tr class="miss"><td>367</td><td><code><pre> utils.Log(3, fmt.Sprintf(&#34;Statup Database could not be migrated: %v&#34;, tx.Error))</pre></code></td></tr><tr class="miss"><td>368</td><td><code><pre> return tx.Error</pre></code></td></tr><tr><td>369</td><td><code><pre> }</pre></code></td></tr><tr><td>370</td><td><code><pre> utils.Log(1, &#34;Statup Database Migrated&#34;)</pre></code></td></tr><tr><td>371</td><td><code><pre> return tx.Commit().Error</pre></code></td></tr><tr><td>372</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_LoadConfigFile">func LoadConfigFile</div><div class="info"><a href="#s_fn_LoadConfigFile">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/configs.go</code>:</p></div><table class="listing">
<tr><td>34</td><td><code><pre>func LoadConfigFile(directory string) (*DbConfig, error) {</pre></code></td></tr><tr><td>35</td><td><code><pre> var configs *DbConfig</pre></code></td></tr><tr><td>36</td><td><code><pre> if os.Getenv(&#34;DB_CONN&#34;) != &#34;&#34; {</pre></code></td></tr><tr class="miss"><td>37</td><td><code><pre> utils.Log(1, &#34;DB_CONN environment variable was found, waiting for database...&#34;)</pre></code></td></tr><tr class="miss"><td>38</td><td><code><pre> return LoadUsingEnv()</pre></code></td></tr><tr><td>39</td><td><code><pre> }</pre></code></td></tr><tr><td>40</td><td><code><pre> file, err := ioutil.ReadFile(directory + &#34;/config.yml&#34;)</pre></code></td></tr><tr><td>41</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>42</td><td><code><pre> return nil, errors.New(&#34;config.yml file not found at &#34; + directory + &#34;/config.yml - starting in setup mode&#34;)</pre></code></td></tr><tr><td>43</td><td><code><pre> }</pre></code></td></tr><tr><td>44</td><td><code><pre> err = yaml.Unmarshal(file, &amp;configs)</pre></code></td></tr><tr><td>45</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>46</td><td><code><pre> return nil, err</pre></code></td></tr><tr><td>47</td><td><code><pre> }</pre></code></td></tr><tr><td>48</td><td><code><pre> Configs = configs</pre></code></td></tr><tr><td>49</td><td><code><pre> return Configs, err</pre></code></td></tr><tr><td>50</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_user.BeforeCreate">func user.BeforeCreate</div><div class="info"><a href="#s_fn_user.BeforeCreate">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
<tr><td>147</td><td><code><pre>func (u *user) BeforeCreate() (err error) {</pre></code></td></tr><tr><td>148</td><td><code><pre> if u.CreatedAt.IsZero() {</pre></code></td></tr><tr class="miss"><td>149</td><td><code><pre> u.CreatedAt = time.Now().UTC()</pre></code></td></tr><tr><td>150</td><td><code><pre> }</pre></code></td></tr><tr><td>151</td><td><code><pre> return</pre></code></td></tr><tr><td>152</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Service.BeforeCreate">func Service.BeforeCreate</div><div class="info"><a href="#s_fn_Service.BeforeCreate">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
<tr><td>155</td><td><code><pre>func (s *Service) BeforeCreate() (err error) {</pre></code></td></tr><tr><td>156</td><td><code><pre> if s.CreatedAt.IsZero() {</pre></code></td></tr><tr class="miss"><td>157</td><td><code><pre> s.CreatedAt = time.Now().UTC()</pre></code></td></tr><tr><td>158</td><td><code><pre> }</pre></code></td></tr><tr><td>159</td><td><code><pre> return</pre></code></td></tr><tr><td>160</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_checkinHit.BeforeCreate">func checkinHit.BeforeCreate</div><div class="info"><a href="#s_fn_checkinHit.BeforeCreate">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
<tr><td>171</td><td><code><pre>func (c *checkinHit) BeforeCreate() (err error) {</pre></code></td></tr><tr><td>172</td><td><code><pre> if c.CreatedAt.IsZero() {</pre></code></td></tr><tr class="miss"><td>173</td><td><code><pre> c.CreatedAt = time.Now().UTC()</pre></code></td></tr><tr><td>174</td><td><code><pre> }</pre></code></td></tr><tr><td>175</td><td><code><pre> return</pre></code></td></tr><tr><td>176</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_DbConfig.Connect">func DbConfig.Connect</div><div class="info"><a href="#s_fn_DbConfig.Connect">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
<tr><td>195</td><td><code><pre>func (db *DbConfig) Connect(retry bool, location string) error {</pre></code></td></tr><tr><td>196</td><td><code><pre> if DbSession != nil {</pre></code></td></tr><tr><td>197</td><td><code><pre> return nil</pre></code></td></tr><tr><td>198</td><td><code><pre> }</pre></code></td></tr><tr><td>199</td><td><code><pre> var conn, dbType string</pre></code></td></tr><tr><td>200</td><td><code><pre> var err error</pre></code></td></tr><tr><td>201</td><td><code><pre> dbType = Configs.DbConn</pre></code></td></tr><tr><td>202</td><td><code><pre> if Configs.DbPort == 0 {</pre></code></td></tr><tr><td>203</td><td><code><pre> Configs.DbPort = DefaultPort(dbType)</pre></code></td></tr><tr><td>204</td><td><code><pre> }</pre></code></td></tr><tr><td>205</td><td><code><pre> switch dbType {</pre></code></td></tr><tr><td>206</td><td><code><pre> case &#34;sqlite&#34;:</pre></code></td></tr><tr><td>207</td><td><code><pre> conn = location + &#34;/statup.db&#34;</pre></code></td></tr><tr><td>208</td><td><code><pre> dbType = &#34;sqlite3&#34;</pre></code></td></tr><tr><td>209</td><td><code><pre> case &#34;mysql&#34;:</pre></code></td></tr><tr class="miss"><td>210</td><td><code><pre> host := fmt.Sprintf(&#34;%v:%v&#34;, Configs.DbHost, Configs.DbPort)</pre></code></td></tr><tr class="miss"><td>211</td><td><code><pre> conn = fmt.Sprintf(&#34;%v:%v@tcp(%v)/%v?charset=utf8&amp;parseTime=True&amp;loc=UTC&#34;, Configs.DbUser, Configs.DbPass, host, Configs.DbData)</pre></code></td></tr><tr><td>212</td><td><code><pre> case &#34;postgres&#34;:</pre></code></td></tr><tr class="miss"><td>213</td><td><code><pre> conn = fmt.Sprintf(&#34;host=%v port=%v user=%v dbname=%v password=%v sslmode=disable&#34;, Configs.DbHost, Configs.DbPort, Configs.DbUser, Configs.DbData, Configs.DbPass)</pre></code></td></tr><tr><td>214</td><td><code><pre> case &#34;mssql&#34;:</pre></code></td></tr><tr class="miss"><td>215</td><td><code><pre> host := fmt.Sprintf(&#34;%v:%v&#34;, Configs.DbHost, Configs.DbPort)</pre></code></td></tr><tr class="miss"><td>216</td><td><code><pre> conn = fmt.Sprintf(&#34;sqlserver://%v:%v@%v?database=%v&#34;, Configs.DbUser, Configs.DbPass, host, Configs.DbData)</pre></code></td></tr><tr><td>217</td><td><code><pre> }</pre></code></td></tr><tr><td>218</td><td><code><pre> dbSession, err := gorm.Open(dbType, conn)</pre></code></td></tr><tr><td>219</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>220</td><td><code><pre> if retry {</pre></code></td></tr><tr class="miss"><td>221</td><td><code><pre> utils.Log(1, fmt.Sprintf(&#34;Database connection to &#39;%v&#39; is not available, trying again in 5 seconds...&#34;, conn))</pre></code></td></tr><tr class="miss"><td>222</td><td><code><pre> return db.waitForDb()</pre></code></td></tr><tr><td>223</td><td><code><pre> } else {</pre></code></td></tr><tr class="miss"><td>224</td><td><code><pre> return err</pre></code></td></tr><tr><td>225</td><td><code><pre> }</pre></code></td></tr><tr><td>226</td><td><code><pre> }</pre></code></td></tr><tr><td>227</td><td><code><pre> err = dbSession.DB().Ping()</pre></code></td></tr><tr><td>228</td><td><code><pre> if err == nil {</pre></code></td></tr><tr><td>229</td><td><code><pre> DbSession = dbSession</pre></code></td></tr><tr><td>230</td><td><code><pre> utils.Log(1, fmt.Sprintf(&#34;Database %v connection &#39;%v@%v&#39; at %v was successful.&#34;, dbType, Configs.DbUser, Configs.DbHost, Configs.DbData))</pre></code></td></tr><tr><td>231</td><td><code><pre> }</pre></code></td></tr><tr><td>232</td><td><code><pre> return err</pre></code></td></tr><tr><td>233</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Service.CreateHit">func Service.CreateHit</div><div class="info"><a href="#s_fn_Service.CreateHit">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/hits.go</code>:</p></div><table class="listing">
<tr><td>29</td><td><code><pre>func (s *Service) CreateHit(h *types.Hit) (int64, error) {</pre></code></td></tr><tr><td>30</td><td><code><pre> db := hitsDB().Create(&amp;h)</pre></code></td></tr><tr><td>31</td><td><code><pre> if db.Error != nil {</pre></code></td></tr><tr class="miss"><td>32</td><td><code><pre> utils.Log(2, db.Error)</pre></code></td></tr><tr class="miss"><td>33</td><td><code><pre> return 0, db.Error</pre></code></td></tr><tr><td>34</td><td><code><pre> }</pre></code></td></tr><tr><td>35</td><td><code><pre> return h.Id, db.Error</pre></code></td></tr><tr><td>36</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Checkin.Update">func Checkin.Update</div><div class="info"><a href="#s_fn_Checkin.Update">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checkin.go</code>:</p></div><table class="listing">
<tr><td>167</td><td><code><pre>func (c *Checkin) Update() (int64, error) {</pre></code></td></tr><tr><td>168</td><td><code><pre> row := checkinDB().Update(c)</pre></code></td></tr><tr><td>169</td><td><code><pre> if row.Error != nil {</pre></code></td></tr><tr class="miss"><td>170</td><td><code><pre> utils.Log(2, row.Error)</pre></code></td></tr><tr class="miss"><td>171</td><td><code><pre> return 0, row.Error</pre></code></td></tr><tr><td>172</td><td><code><pre> }</pre></code></td></tr><tr><td>173</td><td><code><pre> return c.Id, row.Error</pre></code></td></tr><tr><td>174</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_checkinHit.Create">func checkinHit.Create</div><div class="info"><a href="#s_fn_checkinHit.Create">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checkin.go</code>:</p></div><table class="listing">
<tr><td>177</td><td><code><pre>func (c *checkinHit) Create() (int64, error) {</pre></code></td></tr><tr><td>178</td><td><code><pre> if c.CreatedAt.IsZero() {</pre></code></td></tr><tr class="miss"><td>179</td><td><code><pre> c.CreatedAt = time.Now()</pre></code></td></tr><tr><td>180</td><td><code><pre> }</pre></code></td></tr><tr><td>181</td><td><code><pre> row := checkinHitsDB().Create(c)</pre></code></td></tr><tr><td>182</td><td><code><pre> if row.Error != nil {</pre></code></td></tr><tr class="miss"><td>183</td><td><code><pre> utils.Log(2, row.Error)</pre></code></td></tr><tr class="miss"><td>184</td><td><code><pre> return 0, row.Error</pre></code></td></tr><tr><td>185</td><td><code><pre> }</pre></code></td></tr><tr><td>186</td><td><code><pre> return c.Id, row.Error</pre></code></td></tr><tr><td>187</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Service.SmallText">func Service.SmallText</div><div class="info"><a href="#s_fn_Service.SmallText">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
<tr><td>178</td><td><code><pre>func (s *Service) SmallText() string {</pre></code></td></tr><tr><td>179</td><td><code><pre> last := s.LimitedFailures()</pre></code></td></tr><tr><td>180</td><td><code><pre> hits, _ := s.LimitedHits()</pre></code></td></tr><tr><td>181</td><td><code><pre> zone := CoreApp.Timezone</pre></code></td></tr><tr><td>182</td><td><code><pre> if s.Online {</pre></code></td></tr><tr><td>183</td><td><code><pre> if len(last) == 0 {</pre></code></td></tr><tr><td>184</td><td><code><pre> return fmt.Sprintf(&#34;Online since %v&#34;, utils.Timezoner(s.CreatedAt, zone).Format(&#34;Monday 3:04:05PM, Jan _2 2006&#34;))</pre></code></td></tr><tr><td>185</td><td><code><pre> } else {</pre></code></td></tr><tr class="miss"><td>186</td><td><code><pre> return fmt.Sprintf(&#34;Online, last failure was %v&#34;, utils.Timezoner(hits[0].CreatedAt, zone).Format(&#34;Monday 3:04:05PM, Jan _2 2006&#34;))</pre></code></td></tr><tr><td>187</td><td><code><pre> }</pre></code></td></tr><tr><td>188</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>189</td><td><code><pre> if len(last) &gt; 0 {</pre></code></td></tr><tr class="miss"><td>190</td><td><code><pre> lastFailure := s.lastFailure()</pre></code></td></tr><tr class="miss"><td>191</td><td><code><pre> got, _ := timeago.TimeAgoWithTime(time.Now().Add(s.Downtime()), time.Now())</pre></code></td></tr><tr class="miss"><td>192</td><td><code><pre> return fmt.Sprintf(&#34;Reported offline %v, %v&#34;, got, lastFailure.ParseError())</pre></code></td></tr><tr><td>193</td><td><code><pre> } else {</pre></code></td></tr><tr class="miss"><td>194</td><td><code><pre> return fmt.Sprintf(&#34;%v is currently offline&#34;, s.Name)</pre></code></td></tr><tr><td>195</td><td><code><pre> }</pre></code></td></tr><tr><td>196</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_InsertNotifierDB">func InsertNotifierDB</div><div class="info"><a href="#s_fn_InsertNotifierDB">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/core.go</code>:</p></div><table class="listing">
<tr><td>70</td><td><code><pre>func InsertNotifierDB() error {</pre></code></td></tr><tr><td>71</td><td><code><pre> if DbSession == nil {</pre></code></td></tr><tr class="miss"><td>72</td><td><code><pre> err := Configs.Connect(false, utils.Directory)</pre></code></td></tr><tr class="miss"><td>73</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>74</td><td><code><pre> return errors.New(&#34;database connection has not been created&#34;)</pre></code></td></tr><tr><td>75</td><td><code><pre> }</pre></code></td></tr><tr><td>76</td><td><code><pre> }</pre></code></td></tr><tr><td>77</td><td><code><pre> notifier.SetDB(DbSession)</pre></code></td></tr><tr><td>78</td><td><code><pre> return nil</pre></code></td></tr><tr><td>79</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_@356:8">func @356:8</div><div class="info"><a href="#s_fn_@356:8">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
<tr><td>356</td><td><code><pre>func() {</pre></code></td></tr><tr><td>357</td><td><code><pre> if r := recover(); r != nil {</pre></code></td></tr><tr class="miss"><td>358</td><td><code><pre> tx.Rollback()</pre></code></td></tr><tr><td>359</td><td><code><pre> }</pre></code></td></tr><tr><td>360</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_DefaultPort">func DefaultPort</div><div class="info"><a href="#s_fn_DefaultPort">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/configs.go</code>:</p></div><table class="listing">
<tr><td>108</td><td><code><pre>func DefaultPort(db string) int64 {</pre></code></td></tr><tr><td>109</td><td><code><pre> switch db {</pre></code></td></tr><tr><td>110</td><td><code><pre> case &#34;mysql&#34;:</pre></code></td></tr><tr class="miss"><td>111</td><td><code><pre> return 3306</pre></code></td></tr><tr><td>112</td><td><code><pre> case &#34;postgres&#34;:</pre></code></td></tr><tr class="miss"><td>113</td><td><code><pre> return 5432</pre></code></td></tr><tr><td>114</td><td><code><pre> case &#34;mssql&#34;:</pre></code></td></tr><tr class="miss"><td>115</td><td><code><pre> return 1433</pre></code></td></tr><tr><td>116</td><td><code><pre> default:</pre></code></td></tr><tr><td>117</td><td><code><pre> return 0</pre></code></td></tr><tr><td>118</td><td><code><pre> }</pre></code></td></tr><tr><td>119</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_LoadUsingEnv">func LoadUsingEnv</div><div class="info"><a href="#s_fn_LoadUsingEnv">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/configs.go</code>:</p></div><table class="listing">
<tr><td>53</td><td><code><pre>func LoadUsingEnv() (*DbConfig, error) {</pre></code></td></tr><tr class="miss"><td>54</td><td><code><pre> Configs = new(DbConfig)</pre></code></td></tr><tr class="miss"><td>55</td><td><code><pre> if os.Getenv(&#34;DB_CONN&#34;) == &#34;&#34; {</pre></code></td></tr><tr class="miss"><td>56</td><td><code><pre> return nil, errors.New(&#34;Missing DB_CONN environment variable&#34;)</pre></code></td></tr><tr><td>57</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>58</td><td><code><pre> if os.Getenv(&#34;DB_HOST&#34;) == &#34;&#34; {</pre></code></td></tr><tr class="miss"><td>59</td><td><code><pre> return nil, errors.New(&#34;Missing DB_HOST environment variable&#34;)</pre></code></td></tr><tr><td>60</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>61</td><td><code><pre> if os.Getenv(&#34;DB_USER&#34;) == &#34;&#34; {</pre></code></td></tr><tr class="miss"><td>62</td><td><code><pre> return nil, errors.New(&#34;Missing DB_USER environment variable&#34;)</pre></code></td></tr><tr><td>63</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>64</td><td><code><pre> if os.Getenv(&#34;DB_PASS&#34;) == &#34;&#34; {</pre></code></td></tr><tr class="miss"><td>65</td><td><code><pre> return nil, errors.New(&#34;Missing DB_PASS environment variable&#34;)</pre></code></td></tr><tr><td>66</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>67</td><td><code><pre> if os.Getenv(&#34;DB_DATABASE&#34;) == &#34;&#34; {</pre></code></td></tr><tr class="miss"><td>68</td><td><code><pre> return nil, errors.New(&#34;Missing DB_DATABASE environment variable&#34;)</pre></code></td></tr><tr><td>69</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>70</td><td><code><pre> Configs = EnvToConfig()</pre></code></td></tr><tr class="miss"><td>71</td><td><code><pre> CoreApp.Name = os.Getenv(&#34;NAME&#34;)</pre></code></td></tr><tr class="miss"><td>72</td><td><code><pre> CoreApp.Domain = os.Getenv(&#34;DOMAIN&#34;)</pre></code></td></tr><tr class="miss"><td>73</td><td><code><pre> CoreApp.DbConnection = Configs.DbConn</pre></code></td></tr><tr class="miss"><td>74</td><td><code><pre> if os.Getenv(&#34;USE_CDN&#34;) == &#34;true&#34; {</pre></code></td></tr><tr class="miss"><td>75</td><td><code><pre> CoreApp.UseCdn = true</pre></code></td></tr><tr><td>76</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>77</td><td><code><pre> err := Configs.Connect(true, utils.Directory)</pre></code></td></tr><tr class="miss"><td>78</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>79</td><td><code><pre> utils.Log(4, err)</pre></code></td></tr><tr class="miss"><td>80</td><td><code><pre> return nil, err</pre></code></td></tr><tr><td>81</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>82</td><td><code><pre> Configs.Save()</pre></code></td></tr><tr class="miss"><td>83</td><td><code><pre> exists := DbSession.HasTable(&#34;core&#34;)</pre></code></td></tr><tr class="miss"><td>84</td><td><code><pre> if !exists {</pre></code></td></tr><tr class="miss"><td>85</td><td><code><pre> utils.Log(1, fmt.Sprintf(&#34;Core database does not exist, creating now!&#34;))</pre></code></td></tr><tr class="miss"><td>86</td><td><code><pre> Configs.DropDatabase()</pre></code></td></tr><tr class="miss"><td>87</td><td><code><pre> Configs.CreateDatabase()</pre></code></td></tr><tr class="miss"><td>88</td><td><code><pre> CoreApp, err = Configs.InsertCore()</pre></code></td></tr><tr class="miss"><td>89</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>90</td><td><code><pre> utils.Log(3, err)</pre></code></td></tr><tr><td>91</td><td><code><pre> }</pre></code></td></tr><tr><td>92</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>93</td><td><code><pre> admin := ReturnUser(&amp;types.User{</pre></code></td></tr><tr><td>94</td><td><code><pre> Username: &#34;admin&#34;,</pre></code></td></tr><tr><td>95</td><td><code><pre> Password: &#34;admin&#34;,</pre></code></td></tr><tr><td>96</td><td><code><pre> Email: &#34;info@admin.com&#34;,</pre></code></td></tr><tr><td>97</td><td><code><pre> Admin: true,</pre></code></td></tr><tr><td>98</td><td><code><pre> })</pre></code></td></tr><tr class="miss"><td>99</td><td><code><pre> _, err := admin.Create()</pre></code></td></tr><tr><td>100</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>101</td><td><code><pre> SampleData()</pre></code></td></tr><tr class="miss"><td>102</td><td><code><pre> return Configs, err</pre></code></td></tr><tr><td>103</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>104</td><td><code><pre> return Configs, nil</pre></code></td></tr><tr><td>105</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_failure.ParseError">func failure.ParseError</div><div class="info"><a href="#s_fn_failure.ParseError">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/failures.go</code>:</p></div><table class="listing">
<tr><td>132</td><td><code><pre>func (f *failure) ParseError() string {</pre></code></td></tr><tr class="miss"><td>133</td><td><code><pre> if f.Method == &#34;checkin&#34; {</pre></code></td></tr><tr class="miss"><td>134</td><td><code><pre> return fmt.Sprintf(&#34;Checkin is Offline&#34;)</pre></code></td></tr><tr><td>135</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>136</td><td><code><pre> err := strings.Contains(f.Issue, &#34;connection reset by peer&#34;)</pre></code></td></tr><tr class="miss"><td>137</td><td><code><pre> if err {</pre></code></td></tr><tr class="miss"><td>138</td><td><code><pre> return fmt.Sprintf(&#34;Connection Reset&#34;)</pre></code></td></tr><tr><td>139</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>140</td><td><code><pre> err = strings.Contains(f.Issue, &#34;operation timed out&#34;)</pre></code></td></tr><tr class="miss"><td>141</td><td><code><pre> if err {</pre></code></td></tr><tr class="miss"><td>142</td><td><code><pre> return fmt.Sprintf(&#34;HTTP Request Timed Out&#34;)</pre></code></td></tr><tr><td>143</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>144</td><td><code><pre> err = strings.Contains(f.Issue, &#34;x509: certificate is valid&#34;)</pre></code></td></tr><tr class="miss"><td>145</td><td><code><pre> if err {</pre></code></td></tr><tr class="miss"><td>146</td><td><code><pre> return fmt.Sprintf(&#34;SSL Certificate invalid&#34;)</pre></code></td></tr><tr><td>147</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>148</td><td><code><pre> err = strings.Contains(f.Issue, &#34;Client.Timeout exceeded while awaiting headers&#34;)</pre></code></td></tr><tr class="miss"><td>149</td><td><code><pre> if err {</pre></code></td></tr><tr class="miss"><td>150</td><td><code><pre> return fmt.Sprintf(&#34;Connection Timed Out&#34;)</pre></code></td></tr><tr><td>151</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>152</td><td><code><pre> err = strings.Contains(f.Issue, &#34;no such host&#34;)</pre></code></td></tr><tr class="miss"><td>153</td><td><code><pre> if err {</pre></code></td></tr><tr class="miss"><td>154</td><td><code><pre> return fmt.Sprintf(&#34;Domain is offline or not found&#34;)</pre></code></td></tr><tr><td>155</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>156</td><td><code><pre> err = strings.Contains(f.Issue, &#34;HTTP Status Code&#34;)</pre></code></td></tr><tr class="miss"><td>157</td><td><code><pre> if err {</pre></code></td></tr><tr class="miss"><td>158</td><td><code><pre> return fmt.Sprintf(&#34;Incorrect HTTP Status Code&#34;)</pre></code></td></tr><tr><td>159</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>160</td><td><code><pre> err = strings.Contains(f.Issue, &#34;connection refused&#34;)</pre></code></td></tr><tr class="miss"><td>161</td><td><code><pre> if err {</pre></code></td></tr><tr class="miss"><td>162</td><td><code><pre> return fmt.Sprintf(&#34;Connection Failed&#34;)</pre></code></td></tr><tr><td>163</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>164</td><td><code><pre> err = strings.Contains(f.Issue, &#34;can&#39;t assign requested address&#34;)</pre></code></td></tr><tr class="miss"><td>165</td><td><code><pre> if err {</pre></code></td></tr><tr class="miss"><td>166</td><td><code><pre> return fmt.Sprintf(&#34;Unable to Request Address&#34;)</pre></code></td></tr><tr><td>167</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>168</td><td><code><pre> err = strings.Contains(f.Issue, &#34;no route to host&#34;)</pre></code></td></tr><tr class="miss"><td>169</td><td><code><pre> if err {</pre></code></td></tr><tr class="miss"><td>170</td><td><code><pre> return fmt.Sprintf(&#34;Domain is offline or not found&#34;)</pre></code></td></tr><tr><td>171</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>172</td><td><code><pre> return f.Issue</pre></code></td></tr><tr><td>173</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_ExportIndexHTML">func ExportIndexHTML</div><div class="info"><a href="#s_fn_ExportIndexHTML">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/export.go</code>:</p></div><table class="listing">
<tr><td>31</td><td><code><pre>func ExportIndexHTML() string {</pre></code></td></tr><tr class="miss"><td>32</td><td><code><pre> source.Assets()</pre></code></td></tr><tr class="miss"><td>33</td><td><code><pre> injectDatabase()</pre></code></td></tr><tr class="miss"><td>34</td><td><code><pre> CoreApp.SelectAllServices(false)</pre></code></td></tr><tr class="miss"><td>35</td><td><code><pre> CoreApp.UseCdn = true</pre></code></td></tr><tr class="miss"><td>36</td><td><code><pre> for _, srv := range CoreApp.Services {</pre></code></td></tr><tr class="miss"><td>37</td><td><code><pre> service := srv.(*Service)</pre></code></td></tr><tr class="miss"><td>38</td><td><code><pre> service.Check(true)</pre></code></td></tr><tr class="miss"><td>39</td><td><code><pre> fmt.Println(service.Name, service.Online, service.Latency)</pre></code></td></tr><tr><td>40</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>41</td><td><code><pre> nav, _ := source.TmplBox.String(&#34;nav.html&#34;)</pre></code></td></tr><tr class="miss"><td>42</td><td><code><pre> footer, _ := source.TmplBox.String(&#34;footer.html&#34;)</pre></code></td></tr><tr class="miss"><td>43</td><td><code><pre> render, err := source.TmplBox.String(&#34;index.html&#34;)</pre></code></td></tr><tr class="miss"><td>44</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>45</td><td><code><pre> utils.Log(3, err)</pre></code></td></tr><tr><td>46</td><td><code><pre> }</pre></code></td></tr><tr><td>47</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>48</td><td><code><pre> t := template.New(&#34;message&#34;)</pre></code></td></tr><tr class="miss"><td>49</td><td><code><pre> t.Funcs(template.FuncMap{</pre></code></td></tr><tr><td>50</td><td><code><pre> &#34;js&#34;: func(html string) template.JS {</pre></code></td></tr><tr><td>51</td><td><code><pre> return template.JS(html)</pre></code></td></tr><tr><td>52</td><td><code><pre> },</pre></code></td></tr><tr><td>53</td><td><code><pre> &#34;safe&#34;: func(html string) template.HTML {</pre></code></td></tr><tr><td>54</td><td><code><pre> return template.HTML(html)</pre></code></td></tr><tr><td>55</td><td><code><pre> },</pre></code></td></tr><tr><td>56</td><td><code><pre> &#34;VERSION&#34;: func() string {</pre></code></td></tr><tr><td>57</td><td><code><pre> return VERSION</pre></code></td></tr><tr><td>58</td><td><code><pre> },</pre></code></td></tr><tr><td>59</td><td><code><pre> &#34;CoreApp&#34;: func() *Core {</pre></code></td></tr><tr><td>60</td><td><code><pre> return CoreApp</pre></code></td></tr><tr><td>61</td><td><code><pre> },</pre></code></td></tr><tr><td>62</td><td><code><pre> &#34;USE_CDN&#34;: func() bool {</pre></code></td></tr><tr><td>63</td><td><code><pre> return CoreApp.UseCdn</pre></code></td></tr><tr><td>64</td><td><code><pre> },</pre></code></td></tr><tr><td>65</td><td><code><pre> &#34;underscore&#34;: func(html string) string {</pre></code></td></tr><tr><td>66</td><td><code><pre> return utils.UnderScoreString(html)</pre></code></td></tr><tr><td>67</td><td><code><pre> },</pre></code></td></tr><tr><td>68</td><td><code><pre> &#34;URL&#34;: func() string {</pre></code></td></tr><tr><td>69</td><td><code><pre> return &#34;/&#34;</pre></code></td></tr><tr><td>70</td><td><code><pre> },</pre></code></td></tr><tr><td>71</td><td><code><pre> &#34;CHART_DATA&#34;: func() string {</pre></code></td></tr><tr><td>72</td><td><code><pre> return ExportChartsJs()</pre></code></td></tr><tr><td>73</td><td><code><pre> },</pre></code></td></tr><tr><td>74</td><td><code><pre> })</pre></code></td></tr><tr class="miss"><td>75</td><td><code><pre> t, _ = t.Parse(nav)</pre></code></td></tr><tr class="miss"><td>76</td><td><code><pre> t, _ = t.Parse(footer)</pre></code></td></tr><tr class="miss"><td>77</td><td><code><pre> t.Parse(render)</pre></code></td></tr><tr class="miss"><td>78</td><td><code><pre> var tpl bytes.Buffer</pre></code></td></tr><tr class="miss"><td>79</td><td><code><pre> if err := t.Execute(&amp;tpl, CoreApp); err != nil {</pre></code></td></tr><tr class="miss"><td>80</td><td><code><pre> utils.Log(3, err)</pre></code></td></tr><tr><td>81</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>82</td><td><code><pre> result := tpl.String()</pre></code></td></tr><tr class="miss"><td>83</td><td><code><pre> return result</pre></code></td></tr><tr><td>84</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_GraphDataRaw">func GraphDataRaw</div><div class="info"><a href="#s_fn_GraphDataRaw">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
<tr><td>242</td><td><code><pre>func GraphDataRaw(service types.ServiceInterface, start, end time.Time, group string, column string) *DateScanObj {</pre></code></td></tr><tr class="miss"><td>243</td><td><code><pre> var d []DateScan</pre></code></td></tr><tr class="miss"><td>244</td><td><code><pre> model := service.(*Service).HitsBetween(start, end, group, column)</pre></code></td></tr><tr class="miss"><td>245</td><td><code><pre> rows, _ := model.Rows()</pre></code></td></tr><tr class="miss"><td>246</td><td><code><pre> for rows.Next() {</pre></code></td></tr><tr class="miss"><td>247</td><td><code><pre> var gd DateScan</pre></code></td></tr><tr class="miss"><td>248</td><td><code><pre> var createdAt string</pre></code></td></tr><tr class="miss"><td>249</td><td><code><pre> var value float64</pre></code></td></tr><tr class="miss"><td>250</td><td><code><pre> var createdTime time.Time</pre></code></td></tr><tr class="miss"><td>251</td><td><code><pre> rows.Scan(&amp;createdAt, &amp;value)</pre></code></td></tr><tr class="miss"><td>252</td><td><code><pre> createdTime, _ = time.Parse(types.TIME, createdAt)</pre></code></td></tr><tr class="miss"><td>253</td><td><code><pre> if CoreApp.DbConnection == &#34;postgres&#34; {</pre></code></td></tr><tr class="miss"><td>254</td><td><code><pre> createdTime, _ = time.Parse(types.TIME_NANO, createdAt)</pre></code></td></tr><tr><td>255</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>256</td><td><code><pre> gd.CreatedAt = utils.Timezoner(createdTime, CoreApp.Timezone).Format(types.TIME)</pre></code></td></tr><tr class="miss"><td>257</td><td><code><pre> gd.Value = int64(value * 1000)</pre></code></td></tr><tr class="miss"><td>258</td><td><code><pre> d = append(d, gd)</pre></code></td></tr><tr><td>259</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>260</td><td><code><pre> return &amp;DateScanObj{d}</pre></code></td></tr><tr><td>261</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_InsertSampleHits">func InsertSampleHits</div><div class="info"><a href="#s_fn_InsertSampleHits">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/sample.go</code>:</p></div><table class="listing">
<tr><td>124</td><td><code><pre>func InsertSampleHits() error {</pre></code></td></tr><tr class="miss"><td>125</td><td><code><pre> since := time.Now().Add((-24 * 7) * time.Hour).UTC()</pre></code></td></tr><tr class="miss"><td>126</td><td><code><pre> for i := int64(1); i &lt;= 5; i++ {</pre></code></td></tr><tr class="miss"><td>127</td><td><code><pre> service := SelectService(i)</pre></code></td></tr><tr class="miss"><td>128</td><td><code><pre> utils.Log(1, fmt.Sprintf(&#34;Adding %v sample hit records to service %v&#34;, 360, service.Name))</pre></code></td></tr><tr class="miss"><td>129</td><td><code><pre> createdAt := since</pre></code></td></tr><tr class="miss"><td>130</td><td><code><pre> alpha := float64(1.05)</pre></code></td></tr><tr><td>131</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>132</td><td><code><pre> for hi := int64(1); hi &lt;= 168; hi++ {</pre></code></td></tr><tr class="miss"><td>133</td><td><code><pre> alpha += 0.01</pre></code></td></tr><tr class="miss"><td>134</td><td><code><pre> rand.Seed(time.Now().UnixNano())</pre></code></td></tr><tr class="miss"><td>135</td><td><code><pre> latency := rand.Float64() * alpha</pre></code></td></tr><tr class="miss"><td>136</td><td><code><pre> createdAt = createdAt.Add(1 * time.Hour)</pre></code></td></tr><tr class="miss"><td>137</td><td><code><pre> hit := &amp;types.Hit{</pre></code></td></tr><tr><td>138</td><td><code><pre> Service: service.Id,</pre></code></td></tr><tr><td>139</td><td><code><pre> CreatedAt: createdAt,</pre></code></td></tr><tr><td>140</td><td><code><pre> Latency: latency,</pre></code></td></tr><tr><td>141</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>142</td><td><code><pre> service.CreateHit(hit)</pre></code></td></tr><tr><td>143</td><td><code><pre> }</pre></code></td></tr><tr><td>144</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>145</td><td><code><pre> return nil</pre></code></td></tr><tr><td>146</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_DbConfig.Update">func DbConfig.Update</div><div class="info"><a href="#s_fn_DbConfig.Update">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
<tr><td>262</td><td><code><pre>func (db *DbConfig) Update() error {</pre></code></td></tr><tr class="miss"><td>263</td><td><code><pre> var err error</pre></code></td></tr><tr class="miss"><td>264</td><td><code><pre> config, err := os.Create(utils.Directory + &#34;/config.yml&#34;)</pre></code></td></tr><tr class="miss"><td>265</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>266</td><td><code><pre> utils.Log(4, err)</pre></code></td></tr><tr class="miss"><td>267</td><td><code><pre> return err</pre></code></td></tr><tr><td>268</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>269</td><td><code><pre> data, err := yaml.Marshal(db)</pre></code></td></tr><tr class="miss"><td>270</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>271</td><td><code><pre> utils.Log(3, err)</pre></code></td></tr><tr class="miss"><td>272</td><td><code><pre> return err</pre></code></td></tr><tr><td>273</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>274</td><td><code><pre> config.WriteString(string(data))</pre></code></td></tr><tr class="miss"><td>275</td><td><code><pre> config.Close()</pre></code></td></tr><tr class="miss"><td>276</td><td><code><pre> return err</pre></code></td></tr><tr><td>277</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Dbtimestamp">func Dbtimestamp</div><div class="info"><a href="#s_fn_Dbtimestamp">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
<tr><td>206</td><td><code><pre>func Dbtimestamp(group string, column string) string {</pre></code></td></tr><tr class="miss"><td>207</td><td><code><pre> seconds := 60</pre></code></td></tr><tr class="miss"><td>208</td><td><code><pre> if group == &#34;second&#34; {</pre></code></td></tr><tr class="miss"><td>209</td><td><code><pre> seconds = 60</pre></code></td></tr><tr class="miss"><td>210</td><td><code><pre> } else if group == &#34;hour&#34; {</pre></code></td></tr><tr class="miss"><td>211</td><td><code><pre> seconds = 3600</pre></code></td></tr><tr class="miss"><td>212</td><td><code><pre> } else if group == &#34;day&#34; {</pre></code></td></tr><tr class="miss"><td>213</td><td><code><pre> seconds = 86400</pre></code></td></tr><tr><td>214</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>215</td><td><code><pre> switch CoreApp.DbConnection {</pre></code></td></tr><tr><td>216</td><td><code><pre> case &#34;mysql&#34;:</pre></code></td></tr><tr class="miss"><td>217</td><td><code><pre> return fmt.Sprintf(&#34;CONCAT(date_format(created_at, &#39;%%Y-%%m-%%d %%H:00:00&#39;)) AS timeframe, AVG(%v) AS value&#34;, column)</pre></code></td></tr><tr><td>218</td><td><code><pre> case &#34;sqlite&#34;:</pre></code></td></tr><tr class="miss"><td>219</td><td><code><pre> return fmt.Sprintf(&#34;datetime((strftime(&#39;%%s&#39;, created_at) / %v) * %v, &#39;unixepoch&#39;) AS timeframe, AVG(%v) as value&#34;, seconds, seconds, column)</pre></code></td></tr><tr><td>220</td><td><code><pre> case &#34;postgres&#34;:</pre></code></td></tr><tr class="miss"><td>221</td><td><code><pre> return fmt.Sprintf(&#34;date_trunc(&#39;%v&#39;, created_at) AS timeframe, AVG(%v) AS value&#34;, group, column)</pre></code></td></tr><tr><td>222</td><td><code><pre> default:</pre></code></td></tr><tr class="miss"><td>223</td><td><code><pre> return &#34;&#34;</pre></code></td></tr><tr><td>224</td><td><code><pre> }</pre></code></td></tr><tr><td>225</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_ExportChartsJs">func ExportChartsJs</div><div class="info"><a href="#s_fn_ExportChartsJs">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/export.go</code>:</p></div><table class="listing">
<tr><td>87</td><td><code><pre>func ExportChartsJs() string {</pre></code></td></tr><tr class="miss"><td>88</td><td><code><pre> render, err := source.JsBox.String(&#34;charts.js&#34;)</pre></code></td></tr><tr class="miss"><td>89</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>90</td><td><code><pre> utils.Log(4, err)</pre></code></td></tr><tr><td>91</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>92</td><td><code><pre> t := template.New(&#34;charts&#34;)</pre></code></td></tr><tr class="miss"><td>93</td><td><code><pre> t.Funcs(template.FuncMap{</pre></code></td></tr><tr><td>94</td><td><code><pre> &#34;safe&#34;: func(html string) template.HTML {</pre></code></td></tr><tr><td>95</td><td><code><pre> return template.HTML(html)</pre></code></td></tr><tr><td>96</td><td><code><pre> },</pre></code></td></tr><tr><td>97</td><td><code><pre> })</pre></code></td></tr><tr class="miss"><td>98</td><td><code><pre> t.Parse(render)</pre></code></td></tr><tr class="miss"><td>99</td><td><code><pre> var tpl bytes.Buffer</pre></code></td></tr><tr class="miss"><td>100</td><td><code><pre> if err := t.Execute(&amp;tpl, CoreApp.Services); err != nil {</pre></code></td></tr><tr class="miss"><td>101</td><td><code><pre> utils.Log(3, err)</pre></code></td></tr><tr><td>102</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>103</td><td><code><pre> result := tpl.String()</pre></code></td></tr><tr class="miss"><td>104</td><td><code><pre> return result</pre></code></td></tr><tr><td>105</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Service.TotalUptime">func Service.TotalUptime</div><div class="info"><a href="#s_fn_Service.TotalUptime">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
<tr><td>315</td><td><code><pre>func (s *Service) TotalUptime() string {</pre></code></td></tr><tr class="miss"><td>316</td><td><code><pre> hits, _ := s.TotalHits()</pre></code></td></tr><tr class="miss"><td>317</td><td><code><pre> failures, _ := s.TotalFailures()</pre></code></td></tr><tr class="miss"><td>318</td><td><code><pre> percent := float64(failures) / float64(hits) * 100</pre></code></td></tr><tr class="miss"><td>319</td><td><code><pre> percent = 100 - percent</pre></code></td></tr><tr class="miss"><td>320</td><td><code><pre> if percent &lt; 0 {</pre></code></td></tr><tr class="miss"><td>321</td><td><code><pre> percent = 0</pre></code></td></tr><tr><td>322</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>323</td><td><code><pre> amount := fmt.Sprintf(&#34;%0.2f&#34;, percent)</pre></code></td></tr><tr class="miss"><td>324</td><td><code><pre> if amount == &#34;100.00&#34; {</pre></code></td></tr><tr class="miss"><td>325</td><td><code><pre> amount = &#34;100&#34;</pre></code></td></tr><tr><td>326</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>327</td><td><code><pre> return amount</pre></code></td></tr><tr><td>328</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_EnvToConfig">func EnvToConfig</div><div class="info"><a href="#s_fn_EnvToConfig">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/configs.go</code>:</p></div><table class="listing">
<tr><td>122</td><td><code><pre>func EnvToConfig() *DbConfig {</pre></code></td></tr><tr class="miss"><td>123</td><td><code><pre> port := DefaultPort(os.Getenv(&#34;DB_PORT&#34;))</pre></code></td></tr><tr class="miss"><td>124</td><td><code><pre> name := os.Getenv(&#34;NAME&#34;)</pre></code></td></tr><tr class="miss"><td>125</td><td><code><pre> if name == &#34;&#34; {</pre></code></td></tr><tr class="miss"><td>126</td><td><code><pre> name = &#34;Statup&#34;</pre></code></td></tr><tr><td>127</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>128</td><td><code><pre> description := os.Getenv(&#34;DESCRIPTION&#34;)</pre></code></td></tr><tr class="miss"><td>129</td><td><code><pre> if description == &#34;&#34; {</pre></code></td></tr><tr class="miss"><td>130</td><td><code><pre> description = &#34;Statup Monitoring Sample Data&#34;</pre></code></td></tr><tr><td>131</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>132</td><td><code><pre> data := &amp;DbConfig{</pre></code></td></tr><tr><td>133</td><td><code><pre> DbConn: os.Getenv(&#34;DB_CONN&#34;),</pre></code></td></tr><tr><td>134</td><td><code><pre> DbHost: os.Getenv(&#34;DB_HOST&#34;),</pre></code></td></tr><tr><td>135</td><td><code><pre> DbUser: os.Getenv(&#34;DB_USER&#34;),</pre></code></td></tr><tr><td>136</td><td><code><pre> DbPass: os.Getenv(&#34;DB_PASS&#34;),</pre></code></td></tr><tr><td>137</td><td><code><pre> DbData: os.Getenv(&#34;DB_DATABASE&#34;),</pre></code></td></tr><tr><td>138</td><td><code><pre> DbPort: port,</pre></code></td></tr><tr><td>139</td><td><code><pre> Project: name,</pre></code></td></tr><tr><td>140</td><td><code><pre> Description: description,</pre></code></td></tr><tr><td>141</td><td><code><pre> Domain: os.Getenv(&#34;DOMAIN&#34;),</pre></code></td></tr><tr><td>142</td><td><code><pre> Email: &#34;&#34;,</pre></code></td></tr><tr><td>143</td><td><code><pre> Username: &#34;admin&#34;,</pre></code></td></tr><tr><td>144</td><td><code><pre> Password: &#34;admin&#34;,</pre></code></td></tr><tr><td>145</td><td><code><pre> Error: nil,</pre></code></td></tr><tr><td>146</td><td><code><pre> Location: utils.Directory,</pre></code></td></tr><tr><td>147</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>148</td><td><code><pre> return data</pre></code></td></tr><tr><td>149</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Checkin.RecheckCheckinFailure">func Checkin.RecheckCheckinFailure</div><div class="info"><a href="#s_fn_Checkin.RecheckCheckinFailure">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checkin.go</code>:</p></div><table class="listing">
<tr><td>196</td><td><code><pre>func (c *Checkin) RecheckCheckinFailure(guard chan struct{}) {</pre></code></td></tr><tr class="miss"><td>197</td><td><code><pre> between := time.Now().Sub(time.Now()).Seconds()</pre></code></td></tr><tr class="miss"><td>198</td><td><code><pre> if between &gt; float64(c.Interval) {</pre></code></td></tr><tr class="miss"><td>199</td><td><code><pre> fmt.Println(&#34;rechecking every 15 seconds!&#34;)</pre></code></td></tr><tr class="miss"><td>200</td><td><code><pre> time.Sleep(15 * time.Second)</pre></code></td></tr><tr class="miss"><td>201</td><td><code><pre> guard &lt;- struct{}{}</pre></code></td></tr><tr class="miss"><td>202</td><td><code><pre> c.RecheckCheckinFailure(guard)</pre></code></td></tr><tr><td>203</td><td><code><pre> } else {</pre></code></td></tr><tr class="miss"><td>204</td><td><code><pre> fmt.Println(&#34;i recovered!!&#34;)</pre></code></td></tr><tr><td>205</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>206</td><td><code><pre> &lt;-guard</pre></code></td></tr><tr><td>207</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_DbConfig.CreateCore">func DbConfig.CreateCore</div><div class="info"><a href="#s_fn_DbConfig.CreateCore">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
<tr><td>300</td><td><code><pre>func (c *DbConfig) CreateCore() *Core {</pre></code></td></tr><tr class="miss"><td>301</td><td><code><pre> newCore := &amp;types.Core{</pre></code></td></tr><tr><td>302</td><td><code><pre> Name: c.Project,</pre></code></td></tr><tr><td>303</td><td><code><pre> Description: c.Description,</pre></code></td></tr><tr><td>304</td><td><code><pre> Config: &#34;config.yml&#34;,</pre></code></td></tr><tr><td>305</td><td><code><pre> ApiKey: c.ApiKey,</pre></code></td></tr><tr><td>306</td><td><code><pre> ApiSecret: c.ApiSecret,</pre></code></td></tr><tr><td>307</td><td><code><pre> Domain: c.Domain,</pre></code></td></tr><tr><td>308</td><td><code><pre> MigrationId: time.Now().Unix(),</pre></code></td></tr><tr><td>309</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>310</td><td><code><pre> db := coreDB().Create(&amp;newCore)</pre></code></td></tr><tr class="miss"><td>311</td><td><code><pre> if db.Error == nil {</pre></code></td></tr><tr class="miss"><td>312</td><td><code><pre> CoreApp = &amp;Core{Core: newCore}</pre></code></td></tr><tr><td>313</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>314</td><td><code><pre> CoreApp, err := SelectCore()</pre></code></td></tr><tr class="miss"><td>315</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>316</td><td><code><pre> utils.Log(4, err)</pre></code></td></tr><tr><td>317</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>318</td><td><code><pre> return CoreApp</pre></code></td></tr><tr><td>319</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Service.AvgTime">func Service.AvgTime</div><div class="info"><a href="#s_fn_Service.AvgTime">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
<tr><td>114</td><td><code><pre>func (s *Service) AvgTime() float64 {</pre></code></td></tr><tr class="miss"><td>115</td><td><code><pre> total, _ := s.TotalHits()</pre></code></td></tr><tr class="miss"><td>116</td><td><code><pre> if total == 0 {</pre></code></td></tr><tr class="miss"><td>117</td><td><code><pre> return float64(0)</pre></code></td></tr><tr><td>118</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>119</td><td><code><pre> sum, _ := s.Sum()</pre></code></td></tr><tr class="miss"><td>120</td><td><code><pre> avg := sum / float64(total) * 100</pre></code></td></tr><tr class="miss"><td>121</td><td><code><pre> amount := fmt.Sprintf(&#34;%0.0f&#34;, avg*10)</pre></code></td></tr><tr class="miss"><td>122</td><td><code><pre> val, _ := strconv.ParseFloat(amount, 10)</pre></code></td></tr><tr class="miss"><td>123</td><td><code><pre> return val</pre></code></td></tr><tr><td>124</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Service.GraphData">func Service.GraphData</div><div class="info"><a href="#s_fn_Service.GraphData">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
<tr><td>274</td><td><code><pre>func (s *Service) GraphData() string {</pre></code></td></tr><tr class="miss"><td>275</td><td><code><pre> start := time.Now().Add((-24 * 7) * time.Hour)</pre></code></td></tr><tr class="miss"><td>276</td><td><code><pre> end := time.Now()</pre></code></td></tr><tr class="miss"><td>277</td><td><code><pre> obj := GraphDataRaw(s, start, end, &#34;hour&#34;, &#34;latency&#34;)</pre></code></td></tr><tr class="miss"><td>278</td><td><code><pre> data, err := json.Marshal(obj)</pre></code></td></tr><tr class="miss"><td>279</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>280</td><td><code><pre> utils.Log(2, err)</pre></code></td></tr><tr class="miss"><td>281</td><td><code><pre> return &#34;&#34;</pre></code></td></tr><tr><td>282</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>283</td><td><code><pre> return string(data)</pre></code></td></tr><tr><td>284</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_CountFailures">func CountFailures</div><div class="info"><a href="#s_fn_CountFailures">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/failures.go</code>:</p></div><table class="listing">
<tr><td>99</td><td><code><pre>func CountFailures() uint64 {</pre></code></td></tr><tr class="miss"><td>100</td><td><code><pre> var count uint64</pre></code></td></tr><tr class="miss"><td>101</td><td><code><pre> err := failuresDB().Count(&amp;count)</pre></code></td></tr><tr class="miss"><td>102</td><td><code><pre> if err.Error != nil {</pre></code></td></tr><tr class="miss"><td>103</td><td><code><pre> utils.Log(2, err.Error)</pre></code></td></tr><tr class="miss"><td>104</td><td><code><pre> return 0</pre></code></td></tr><tr><td>105</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>106</td><td><code><pre> return count</pre></code></td></tr><tr><td>107</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_InitApp">func InitApp</div><div class="info"><a href="#s_fn_InitApp">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/core.go</code>:</p></div><table class="listing">
<tr><td>60</td><td><code><pre>func InitApp() {</pre></code></td></tr><tr class="miss"><td>61</td><td><code><pre> SelectCore()</pre></code></td></tr><tr class="miss"><td>62</td><td><code><pre> InsertNotifierDB()</pre></code></td></tr><tr class="miss"><td>63</td><td><code><pre> CoreApp.SelectAllServices(true)</pre></code></td></tr><tr class="miss"><td>64</td><td><code><pre> checkServices()</pre></code></td></tr><tr class="miss"><td>65</td><td><code><pre> CoreApp.Notifications = notifier.Load()</pre></code></td></tr><tr class="miss"><td>66</td><td><code><pre> go DatabaseMaintence()</pre></code></td></tr><tr><td>67</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Core.Count24HFailures">func Core.Count24HFailures</div><div class="info"><a href="#s_fn_Core.Count24HFailures">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/failures.go</code>:</p></div><table class="listing">
<tr><td>88</td><td><code><pre>func (c *Core) Count24HFailures() uint64 {</pre></code></td></tr><tr class="miss"><td>89</td><td><code><pre> var count uint64</pre></code></td></tr><tr class="miss"><td>90</td><td><code><pre> for _, s := range CoreApp.Services {</pre></code></td></tr><tr class="miss"><td>91</td><td><code><pre> service := s.(*Service)</pre></code></td></tr><tr class="miss"><td>92</td><td><code><pre> fails, _ := service.TotalFailures24()</pre></code></td></tr><tr class="miss"><td>93</td><td><code><pre> count += fails</pre></code></td></tr><tr><td>94</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>95</td><td><code><pre> return count</pre></code></td></tr><tr><td>96</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_SampleData">func SampleData</div><div class="info"><a href="#s_fn_SampleData">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/configs.go</code>:</p></div><table class="listing">
<tr><td>152</td><td><code><pre>func SampleData() error {</pre></code></td></tr><tr class="miss"><td>153</td><td><code><pre> if err := InsertSampleData(); err != nil {</pre></code></td></tr><tr class="miss"><td>154</td><td><code><pre> return err</pre></code></td></tr><tr><td>155</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>156</td><td><code><pre> if err := InsertSampleHits(); err != nil {</pre></code></td></tr><tr class="miss"><td>157</td><td><code><pre> return err</pre></code></td></tr><tr><td>158</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>159</td><td><code><pre> return nil</pre></code></td></tr><tr><td>160</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_recordFailure">func recordFailure</div><div class="info"><a href="#s_fn_recordFailure">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checker.go</code>:</p></div><table class="listing">
<tr><td>247</td><td><code><pre>func recordFailure(s *Service, issue string) {</pre></code></td></tr><tr class="miss"><td>248</td><td><code><pre> s.Online = false</pre></code></td></tr><tr class="miss"><td>249</td><td><code><pre> fail := &amp;types.Failure{</pre></code></td></tr><tr><td>250</td><td><code><pre> Service: s.Id,</pre></code></td></tr><tr><td>251</td><td><code><pre> Issue: issue,</pre></code></td></tr><tr><td>252</td><td><code><pre> PingTime: s.PingTime,</pre></code></td></tr><tr><td>253</td><td><code><pre> CreatedAt: time.Now(),</pre></code></td></tr><tr><td>254</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>255</td><td><code><pre> utils.Log(2, fmt.Sprintf(&#34;Service %v Failing: %v | Lookup in: %0.2f ms&#34;, s.Name, issue, fail.PingTime*1000))</pre></code></td></tr><tr class="miss"><td>256</td><td><code><pre> s.CreateFailure(fail)</pre></code></td></tr><tr class="miss"><td>257</td><td><code><pre> notifier.OnFailure(s.Service, fail)</pre></code></td></tr><tr><td>258</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Service.lastFailure">func Service.lastFailure</div><div class="info"><a href="#s_fn_Service.lastFailure">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
<tr><td>166</td><td><code><pre>func (s *Service) lastFailure() *failure {</pre></code></td></tr><tr class="miss"><td>167</td><td><code><pre> limited := s.LimitedFailures()</pre></code></td></tr><tr class="miss"><td>168</td><td><code><pre> if len(limited) == 0 {</pre></code></td></tr><tr class="miss"><td>169</td><td><code><pre> return nil</pre></code></td></tr><tr><td>170</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>171</td><td><code><pre> last := limited[len(limited)-1]</pre></code></td></tr><tr class="miss"><td>172</td><td><code><pre> return last</pre></code></td></tr><tr><td>173</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_DatabaseMaintence">func DatabaseMaintence</div><div class="info"><a href="#s_fn_DatabaseMaintence">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
<tr><td>243</td><td><code><pre>func DatabaseMaintence() {</pre></code></td></tr><tr class="miss"><td>244</td><td><code><pre> for range time.Tick(60 * time.Minute) {</pre></code></td></tr><tr class="miss"><td>245</td><td><code><pre> utils.Log(1, &#34;Checking for database records older than 3 months...&#34;)</pre></code></td></tr><tr class="miss"><td>246</td><td><code><pre> since := time.Now().AddDate(0, -3, 0).UTC()</pre></code></td></tr><tr class="miss"><td>247</td><td><code><pre> DeleteAllSince(&#34;failures&#34;, since)</pre></code></td></tr><tr class="miss"><td>248</td><td><code><pre> DeleteAllSince(&#34;hits&#34;, since)</pre></code></td></tr><tr><td>249</td><td><code><pre> }</pre></code></td></tr><tr><td>250</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_DateScanObj.ToString">func DateScanObj.ToString</div><div class="info"><a href="#s_fn_DateScanObj.ToString">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
<tr><td>264</td><td><code><pre>func (d *DateScanObj) ToString() string {</pre></code></td></tr><tr class="miss"><td>265</td><td><code><pre> data, err := json.Marshal(d.Array)</pre></code></td></tr><tr class="miss"><td>266</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>267</td><td><code><pre> utils.Log(2, err)</pre></code></td></tr><tr class="miss"><td>268</td><td><code><pre> return &#34;{}&#34;</pre></code></td></tr><tr><td>269</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>270</td><td><code><pre> return string(data)</pre></code></td></tr><tr><td>271</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_DeleteConfig">func DeleteConfig</div><div class="info"><a href="#s_fn_DeleteConfig">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/configs.go</code>:</p></div><table class="listing">
<tr><td>163</td><td><code><pre>func DeleteConfig() error {</pre></code></td></tr><tr class="miss"><td>164</td><td><code><pre> err := os.Remove(utils.Directory + &#34;/config.yml&#34;)</pre></code></td></tr><tr class="miss"><td>165</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>166</td><td><code><pre> utils.Log(3, err)</pre></code></td></tr><tr class="miss"><td>167</td><td><code><pre> return err</pre></code></td></tr><tr><td>168</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>169</td><td><code><pre> return nil</pre></code></td></tr><tr><td>170</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Core.CurrentTime">func Core.CurrentTime</div><div class="info"><a href="#s_fn_Core.CurrentTime">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/core.go</code>:</p></div><table class="listing">
<tr><td>88</td><td><code><pre>func (c Core) CurrentTime() string {</pre></code></td></tr><tr class="miss"><td>89</td><td><code><pre> t := time.Now().UTC()</pre></code></td></tr><tr class="miss"><td>90</td><td><code><pre> current := utils.Timezoner(t, c.Timezone)</pre></code></td></tr><tr class="miss"><td>91</td><td><code><pre> ansic := &#34;Monday 03:04:05 PM&#34;</pre></code></td></tr><tr class="miss"><td>92</td><td><code><pre> return current.Format(ansic)</pre></code></td></tr><tr><td>93</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Service.TotalFailures">func Service.TotalFailures</div><div class="info"><a href="#s_fn_Service.TotalFailures">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/failures.go</code>:</p></div><table class="listing">
<tr><td>116</td><td><code><pre>func (s *Service) TotalFailures() (uint64, error) {</pre></code></td></tr><tr class="miss"><td>117</td><td><code><pre> var count uint64</pre></code></td></tr><tr class="miss"><td>118</td><td><code><pre> rows := failuresDB().Where(&#34;service = ?&#34;, s.Id)</pre></code></td></tr><tr class="miss"><td>119</td><td><code><pre> err := rows.Count(&amp;count)</pre></code></td></tr><tr class="miss"><td>120</td><td><code><pre> return count, err.Error</pre></code></td></tr><tr><td>121</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Service.DeleteFailures">func Service.DeleteFailures</div><div class="info"><a href="#s_fn_Service.DeleteFailures">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/failures.go</code>:</p></div><table class="listing">
<tr><td>59</td><td><code><pre>func (s *Service) DeleteFailures() {</pre></code></td></tr><tr class="miss"><td>60</td><td><code><pre> err := DbSession.Exec(`DELETE FROM failures WHERE service = ?`, s.Id)</pre></code></td></tr><tr class="miss"><td>61</td><td><code><pre> if err.Error != nil {</pre></code></td></tr><tr class="miss"><td>62</td><td><code><pre> utils.Log(3, fmt.Sprintf(&#34;failed to delete all failures: %v&#34;, err))</pre></code></td></tr><tr><td>63</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>64</td><td><code><pre> s.Failures = nil</pre></code></td></tr><tr><td>65</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_DbConfig.InsertCore">func DbConfig.InsertCore</div><div class="info"><a href="#s_fn_DbConfig.InsertCore">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
<tr><td>179</td><td><code><pre>func (db *DbConfig) InsertCore() (*Core, error) {</pre></code></td></tr><tr class="miss"><td>180</td><td><code><pre> CoreApp = &amp;Core{Core: &amp;types.Core{</pre></code></td></tr><tr><td>181</td><td><code><pre> Name: db.Project,</pre></code></td></tr><tr><td>182</td><td><code><pre> Description: db.Description,</pre></code></td></tr><tr><td>183</td><td><code><pre> Config: &#34;config.yml&#34;,</pre></code></td></tr><tr><td>184</td><td><code><pre> ApiKey: utils.NewSHA1Hash(9),</pre></code></td></tr><tr><td>185</td><td><code><pre> ApiSecret: utils.NewSHA1Hash(16),</pre></code></td></tr><tr><td>186</td><td><code><pre> Domain: db.Domain,</pre></code></td></tr><tr><td>187</td><td><code><pre> MigrationId: time.Now().Unix(),</pre></code></td></tr><tr><td>188</td><td><code><pre> }}</pre></code></td></tr><tr class="miss"><td>189</td><td><code><pre> CoreApp.DbConnection = db.DbConn</pre></code></td></tr><tr class="miss"><td>190</td><td><code><pre> query := coreDB().Create(&amp;CoreApp)</pre></code></td></tr><tr class="miss"><td>191</td><td><code><pre> return CoreApp, query.Error</pre></code></td></tr><tr><td>192</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Core.AllOnline">func Core.AllOnline</div><div class="info"><a href="#s_fn_Core.AllOnline">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/core.go</code>:</p></div><table class="listing">
<tr><td>126</td><td><code><pre>func (c Core) AllOnline() bool {</pre></code></td></tr><tr class="miss"><td>127</td><td><code><pre> for _, s := range CoreApp.Services {</pre></code></td></tr><tr class="miss"><td>128</td><td><code><pre> if !s.Select().Online {</pre></code></td></tr><tr class="miss"><td>129</td><td><code><pre> return false</pre></code></td></tr><tr><td>130</td><td><code><pre> }</pre></code></td></tr><tr><td>131</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>132</td><td><code><pre> return true</pre></code></td></tr><tr><td>133</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_DeleteAllSince">func DeleteAllSince</div><div class="info"><a href="#s_fn_DeleteAllSince">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
<tr><td>253</td><td><code><pre>func DeleteAllSince(table string, date time.Time) {</pre></code></td></tr><tr class="miss"><td>254</td><td><code><pre> sql := fmt.Sprintf(&#34;DELETE FROM %v WHERE created_at &lt; &#39;%v&#39;;&#34;, table, date.Format(&#34;2006-01-02&#34;))</pre></code></td></tr><tr class="miss"><td>255</td><td><code><pre> db := DbSession.Raw(sql)</pre></code></td></tr><tr class="miss"><td>256</td><td><code><pre> if db.Error != nil {</pre></code></td></tr><tr class="miss"><td>257</td><td><code><pre> utils.Log(2, db.Error)</pre></code></td></tr><tr><td>258</td><td><code><pre> }</pre></code></td></tr><tr><td>259</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Service.CheckinProcess">func Service.CheckinProcess</div><div class="info"><a href="#s_fn_Service.CheckinProcess">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
<tr><td>59</td><td><code><pre>func (s *Service) CheckinProcess() {</pre></code></td></tr><tr class="miss"><td>60</td><td><code><pre> checkins := s.Checkins()</pre></code></td></tr><tr class="miss"><td>61</td><td><code><pre> for _, c := range checkins {</pre></code></td></tr><tr class="miss"><td>62</td><td><code><pre> c.Start()</pre></code></td></tr><tr class="miss"><td>63</td><td><code><pre> go c.Routine()</pre></code></td></tr><tr><td>64</td><td><code><pre> }</pre></code></td></tr><tr><td>65</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_SelectCheckinId">func SelectCheckinId</div><div class="info"><a href="#s_fn_SelectCheckinId">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checkin.go</code>:</p></div><table class="listing">
<tr><td>101</td><td><code><pre>func SelectCheckinId(id int64) *Checkin {</pre></code></td></tr><tr class="miss"><td>102</td><td><code><pre> var checkin Checkin</pre></code></td></tr><tr class="miss"><td>103</td><td><code><pre> checkinDB().Where(&#34;id = ?&#34;, id).First(&amp;checkin)</pre></code></td></tr><tr class="miss"><td>104</td><td><code><pre> return &amp;checkin</pre></code></td></tr><tr><td>105</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_SelectCheckin">func SelectCheckin</div><div class="info"><a href="#s_fn_SelectCheckin">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checkin.go</code>:</p></div><table class="listing">
<tr><td>94</td><td><code><pre>func SelectCheckin(api string) *Checkin {</pre></code></td></tr><tr class="miss"><td>95</td><td><code><pre> var checkin Checkin</pre></code></td></tr><tr class="miss"><td>96</td><td><code><pre> checkinDB().Where(&#34;api_key = ?&#34;, api).First(&amp;checkin)</pre></code></td></tr><tr class="miss"><td>97</td><td><code><pre> return &amp;checkin</pre></code></td></tr><tr><td>98</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Hit.BeforeCreate">func Hit.BeforeCreate</div><div class="info"><a href="#s_fn_Hit.BeforeCreate">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
<tr><td>131</td><td><code><pre>func (h *Hit) BeforeCreate() (err error) {</pre></code></td></tr><tr class="miss"><td>132</td><td><code><pre> if h.CreatedAt.IsZero() {</pre></code></td></tr><tr class="miss"><td>133</td><td><code><pre> h.CreatedAt = time.Now().UTC()</pre></code></td></tr><tr><td>134</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>135</td><td><code><pre> return</pre></code></td></tr><tr><td>136</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_failure.BeforeCreate">func failure.BeforeCreate</div><div class="info"><a href="#s_fn_failure.BeforeCreate">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
<tr><td>139</td><td><code><pre>func (f *failure) BeforeCreate() (err error) {</pre></code></td></tr><tr class="miss"><td>140</td><td><code><pre> if f.CreatedAt.IsZero() {</pre></code></td></tr><tr class="miss"><td>141</td><td><code><pre> f.CreatedAt = time.Now().UTC()</pre></code></td></tr><tr><td>142</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>143</td><td><code><pre> return</pre></code></td></tr><tr><td>144</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Checkin.Delete">func Checkin.Delete</div><div class="info"><a href="#s_fn_Checkin.Delete">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checkin.go</code>:</p></div><table class="listing">
<tr><td>147</td><td><code><pre>func (c *Checkin) Delete() error {</pre></code></td></tr><tr class="miss"><td>148</td><td><code><pre> c.Close()</pre></code></td></tr><tr class="miss"><td>149</td><td><code><pre> row := checkinDB().Delete(&amp;c)</pre></code></td></tr><tr class="miss"><td>150</td><td><code><pre> return row.Error</pre></code></td></tr><tr><td>151</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Service.LimitedCheckins">func Service.LimitedCheckins</div><div class="info"><a href="#s_fn_Service.LimitedCheckins">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
<tr><td>75</td><td><code><pre>func (s *Service) LimitedCheckins() []*Checkin {</pre></code></td></tr><tr class="miss"><td>76</td><td><code><pre> var checkin []*Checkin</pre></code></td></tr><tr class="miss"><td>77</td><td><code><pre> checkinDB().Where(&#34;service = ?&#34;, s.Id).Limit(10).Find(&amp;checkin)</pre></code></td></tr><tr class="miss"><td>78</td><td><code><pre> return checkin</pre></code></td></tr><tr><td>79</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Core.MobileSASS">func Core.MobileSASS</div><div class="info"><a href="#s_fn_Core.MobileSASS">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/core.go</code>:</p></div><table class="listing">
<tr><td>118</td><td><code><pre>func (c Core) MobileSASS() string {</pre></code></td></tr><tr class="miss"><td>119</td><td><code><pre> if !source.UsingAssets(utils.Directory) {</pre></code></td></tr><tr class="miss"><td>120</td><td><code><pre> return &#34;&#34;</pre></code></td></tr><tr><td>121</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>122</td><td><code><pre> return source.OpenAsset(utils.Directory, &#34;scss/mobile.scss&#34;)</pre></code></td></tr><tr><td>123</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Core.BaseSASS">func Core.BaseSASS</div><div class="info"><a href="#s_fn_Core.BaseSASS">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/core.go</code>:</p></div><table class="listing">
<tr><td>109</td><td><code><pre>func (c Core) BaseSASS() string {</pre></code></td></tr><tr class="miss"><td>110</td><td><code><pre> if !source.UsingAssets(utils.Directory) {</pre></code></td></tr><tr class="miss"><td>111</td><td><code><pre> return &#34;&#34;</pre></code></td></tr><tr><td>112</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>113</td><td><code><pre> return source.OpenAsset(utils.Directory, &#34;scss/base.scss&#34;)</pre></code></td></tr><tr><td>114</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Core.SassVars">func Core.SassVars</div><div class="info"><a href="#s_fn_Core.SassVars">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/core.go</code>:</p></div><table class="listing">
<tr><td>101</td><td><code><pre>func (c Core) SassVars() string {</pre></code></td></tr><tr class="miss"><td>102</td><td><code><pre> if !source.UsingAssets(utils.Directory) {</pre></code></td></tr><tr class="miss"><td>103</td><td><code><pre> return &#34;&#34;</pre></code></td></tr><tr><td>104</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>105</td><td><code><pre> return source.OpenAsset(utils.Directory, &#34;scss/variables.scss&#34;)</pre></code></td></tr><tr><td>106</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_checkServices">func checkServices</div><div class="info"><a href="#s_fn_checkServices">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checker.go</code>:</p></div><table class="listing">
<tr><td>34</td><td><code><pre>func checkServices() {</pre></code></td></tr><tr class="miss"><td>35</td><td><code><pre> utils.Log(1, fmt.Sprintf(&#34;Starting monitoring process for %v Services&#34;, len(CoreApp.Services)))</pre></code></td></tr><tr class="miss"><td>36</td><td><code><pre> for _, ser := range CoreApp.Services {</pre></code></td></tr><tr><td>37</td><td><code><pre> //go obj.StartCheckins()</pre></code></td></tr><tr class="miss"><td>38</td><td><code><pre> go ser.CheckQueue(true)</pre></code></td></tr><tr><td>39</td><td><code><pre> }</pre></code></td></tr><tr><td>40</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Service.AvgUptime24">func Service.AvgUptime24</div><div class="info"><a href="#s_fn_Service.AvgUptime24">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
<tr><td>287</td><td><code><pre>func (s *Service) AvgUptime24() string {</pre></code></td></tr><tr class="miss"><td>288</td><td><code><pre> ago := time.Now().Add(-24 * time.Hour)</pre></code></td></tr><tr class="miss"><td>289</td><td><code><pre> return s.AvgUptime(ago)</pre></code></td></tr><tr><td>290</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Service.ToJSON">func Service.ToJSON</div><div class="info"><a href="#s_fn_Service.ToJSON">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
<tr><td>108</td><td><code><pre>func (s *Service) ToJSON() string {</pre></code></td></tr><tr class="miss"><td>109</td><td><code><pre> data, _ := json.Marshal(s)</pre></code></td></tr><tr class="miss"><td>110</td><td><code><pre> return string(data)</pre></code></td></tr><tr><td>111</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Service.HitsBetween">func Service.HitsBetween</div><div class="info"><a href="#s_fn_Service.HitsBetween">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
<tr><td>77</td><td><code><pre>func (s *Service) HitsBetween(t1, t2 time.Time, group string, column string) *gorm.DB {</pre></code></td></tr><tr class="miss"><td>78</td><td><code><pre> selector := Dbtimestamp(group, column)</pre></code></td></tr><tr class="miss"><td>79</td><td><code><pre> return DbSession.Model(&amp;types.Hit{}).Select(selector).Where(&#34;service = ? AND created_at BETWEEN ? AND ?&#34;, s.Id, t1.Format(types.TIME_DAY), t2.Format(types.TIME_DAY)).Order(&#34;timeframe asc&#34;, false).Group(&#34;timeframe&#34;)</pre></code></td></tr><tr><td>80</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_failure.Ago">func failure.Ago</div><div class="info"><a href="#s_fn_failure.Ago">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/failures.go</code>:</p></div><table class="listing">
<tr><td>76</td><td><code><pre>func (f *failure) Ago() string {</pre></code></td></tr><tr class="miss"><td>77</td><td><code><pre> got, _ := timeago.TimeAgoWithTime(time.Now(), f.CreatedAt)</pre></code></td></tr><tr class="miss"><td>78</td><td><code><pre> return got</pre></code></td></tr><tr><td>79</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Service.TotalFailures24">func Service.TotalFailures24</div><div class="info"><a href="#s_fn_Service.TotalFailures24">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/failures.go</code>:</p></div><table class="listing">
<tr><td>110</td><td><code><pre>func (s *Service) TotalFailures24() (uint64, error) {</pre></code></td></tr><tr class="miss"><td>111</td><td><code><pre> ago := time.Now().Add(-24 * time.Hour)</pre></code></td></tr><tr class="miss"><td>112</td><td><code><pre> return s.TotalFailuresSince(ago)</pre></code></td></tr><tr><td>113</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Service.Online24">func Service.Online24</div><div class="info"><a href="#s_fn_Service.Online24">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
<tr><td>127</td><td><code><pre>func (s *Service) Online24() float32 {</pre></code></td></tr><tr class="miss"><td>128</td><td><code><pre> ago := time.Now().Add(-24 * time.Hour)</pre></code></td></tr><tr class="miss"><td>129</td><td><code><pre> return s.OnlineSince(ago)</pre></code></td></tr><tr><td>130</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_CloseDB">func CloseDB</div><div class="info"><a href="#s_fn_CloseDB">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
<tr><td>83</td><td><code><pre>func CloseDB() {</pre></code></td></tr><tr class="miss"><td>84</td><td><code><pre> if DbSession != nil {</pre></code></td></tr><tr class="miss"><td>85</td><td><code><pre> DbSession.DB().Close()</pre></code></td></tr><tr><td>86</td><td><code><pre> }</pre></code></td></tr><tr><td>87</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Hit.AfterFind">func Hit.AfterFind</div><div class="info"><a href="#s_fn_Hit.AfterFind">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
<tr><td>101</td><td><code><pre>func (h *Hit) AfterFind() (err error) {</pre></code></td></tr><tr class="miss"><td>102</td><td><code><pre> h.CreatedAt = utils.Timezoner(h.CreatedAt, CoreApp.Timezone)</pre></code></td></tr><tr class="miss"><td>103</td><td><code><pre> return</pre></code></td></tr><tr><td>104</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_DbConfig.waitForDb">func DbConfig.waitForDb</div><div class="info"><a href="#s_fn_DbConfig.waitForDb">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
<tr><td>236</td><td><code><pre>func (db *DbConfig) waitForDb() error {</pre></code></td></tr><tr class="miss"><td>237</td><td><code><pre> time.Sleep(5 * time.Second)</pre></code></td></tr><tr class="miss"><td>238</td><td><code><pre> return db.Connect(true, utils.Directory)</pre></code></td></tr><tr><td>239</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_UpdateCore">func UpdateCore</div><div class="info"><a href="#s_fn_UpdateCore">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/core.go</code>:</p></div><table class="listing">
<tr><td>82</td><td><code><pre>func UpdateCore(c *Core) (*Core, error) {</pre></code></td></tr><tr class="miss"><td>83</td><td><code><pre> db := coreDB().Update(&amp;c)</pre></code></td></tr><tr class="miss"><td>84</td><td><code><pre> return c, db.Error</pre></code></td></tr><tr><td>85</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_failure.Delete">func failure.Delete</div><div class="info"><a href="#s_fn_failure.Delete">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/failures.go</code>:</p></div><table class="listing">
<tr><td>82</td><td><code><pre>func (f *failure) Delete() error {</pre></code></td></tr><tr class="miss"><td>83</td><td><code><pre> db := failuresDB().Delete(f)</pre></code></td></tr><tr class="miss"><td>84</td><td><code><pre> return db.Error</pre></code></td></tr><tr><td>85</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_DbConfig.Close">func DbConfig.Close</div><div class="info"><a href="#s_fn_DbConfig.Close">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/database.go</code>:</p></div><table class="listing">
<tr><td>90</td><td><code><pre>func (db *DbConfig) Close() error {</pre></code></td></tr><tr class="miss"><td>91</td><td><code><pre> return DbSession.DB().Close()</pre></code></td></tr><tr><td>92</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_injectDatabase">func injectDatabase</div><div class="info"><a href="#s_fn_injectDatabase">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/export.go</code>:</p></div><table class="listing">
<tr><td>26</td><td><code><pre>func injectDatabase() {</pre></code></td></tr><tr class="miss"><td>27</td><td><code><pre> Configs.Connect(false, utils.Directory)</pre></code></td></tr><tr><td>28</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_@68:10">func @68:10</div><div class="info"><a href="#s_fn_@68:10">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/export.go</code>:</p></div><table class="listing">
<tr><td>68</td><td><code><pre>func() string {</pre></code></td></tr><tr class="miss"><td>69</td><td><code><pre> return &#34;/&#34;</pre></code></td></tr><tr><td>70</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_Core.ToCore">func Core.ToCore</div><div class="info"><a href="#s_fn_Core.ToCore">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/core.go</code>:</p></div><table class="listing">
<tr><td>55</td><td><code><pre>func (c *Core) ToCore() *types.Core {</pre></code></td></tr><tr class="miss"><td>56</td><td><code><pre> return c.Core</pre></code></td></tr><tr><td>57</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Services">func Services</div><div class="info"><a href="#s_fn_Services">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
<tr><td>44</td><td><code><pre>func Services() []types.ServiceInterface {</pre></code></td></tr><tr class="miss"><td>45</td><td><code><pre> return CoreApp.Services</pre></code></td></tr><tr><td>46</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Service.UpdateSingle">func Service.UpdateSingle</div><div class="info"><a href="#s_fn_Service.UpdateSingle">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
<tr><td>363</td><td><code><pre>func (s *Service) UpdateSingle(attr ...interface{}) error {</pre></code></td></tr><tr class="miss"><td>364</td><td><code><pre> return servicesDB().Model(s).Update(attr).Error</pre></code></td></tr><tr><td>365</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_@53:11">func @53:11</div><div class="info"><a href="#s_fn_@53:11">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/export.go</code>:</p></div><table class="listing">
<tr><td>53</td><td><code><pre>func(html string) template.HTML {</pre></code></td></tr><tr class="miss"><td>54</td><td><code><pre> return template.HTML(html)</pre></code></td></tr><tr><td>55</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_@56:14">func @56:14</div><div class="info"><a href="#s_fn_@56:14">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/export.go</code>:</p></div><table class="listing">
<tr><td>56</td><td><code><pre>func() string {</pre></code></td></tr><tr class="miss"><td>57</td><td><code><pre> return VERSION</pre></code></td></tr><tr><td>58</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_Core.ServicesCount">func Core.ServicesCount</div><div class="info"><a href="#s_fn_Core.ServicesCount">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
<tr><td>403</td><td><code><pre>func (c *Core) ServicesCount() int {</pre></code></td></tr><tr class="miss"><td>404</td><td><code><pre> return len(c.Services)</pre></code></td></tr><tr><td>405</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Service.DowntimeText">func Service.DowntimeText</div><div class="info"><a href="#s_fn_Service.DowntimeText">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/services.go</code>:</p></div><table class="listing">
<tr><td>201</td><td><code><pre>func (s *Service) DowntimeText() string {</pre></code></td></tr><tr class="miss"><td>202</td><td><code><pre> return fmt.Sprintf(&#34;%v has been offline for %v&#34;, s.Name, utils.DurationReadable(s.Downtime()))</pre></code></td></tr><tr><td>203</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Core.UsingAssets">func Core.UsingAssets</div><div class="info"><a href="#s_fn_Core.UsingAssets">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/core.go</code>:</p></div><table class="listing">
<tr><td>96</td><td><code><pre>func (c Core) UsingAssets() bool {</pre></code></td></tr><tr class="miss"><td>97</td><td><code><pre> return source.UsingAssets(utils.Directory)</pre></code></td></tr><tr><td>98</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_@59:14">func @59:14</div><div class="info"><a href="#s_fn_@59:14">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/export.go</code>:</p></div><table class="listing">
<tr><td>59</td><td><code><pre>func() *Core {</pre></code></td></tr><tr class="miss"><td>60</td><td><code><pre> return CoreApp</pre></code></td></tr><tr><td>61</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_@62:14">func @62:14</div><div class="info"><a href="#s_fn_@62:14">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/export.go</code>:</p></div><table class="listing">
<tr><td>62</td><td><code><pre>func() bool {</pre></code></td></tr><tr class="miss"><td>63</td><td><code><pre> return CoreApp.UseCdn</pre></code></td></tr><tr><td>64</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_Checkin.Link">func Checkin.Link</div><div class="info"><a href="#s_fn_Checkin.Link">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checkin.go</code>:</p></div><table class="listing">
<tr><td>135</td><td><code><pre>func (c *Checkin) Link() string {</pre></code></td></tr><tr class="miss"><td>136</td><td><code><pre> return fmt.Sprintf(&#34;%v/checkin/%v&#34;, CoreApp.Domain, c.ApiKey)</pre></code></td></tr><tr><td>137</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_@65:17">func @65:17</div><div class="info"><a href="#s_fn_@65:17">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/export.go</code>:</p></div><table class="listing">
<tr><td>65</td><td><code><pre>func(html string) string {</pre></code></td></tr><tr class="miss"><td>66</td><td><code><pre> return utils.UnderScoreString(html)</pre></code></td></tr><tr><td>67</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_@94:11">func @94:11</div><div class="info"><a href="#s_fn_@94:11">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/export.go</code>:</p></div><table class="listing">
<tr><td>94</td><td><code><pre>func(html string) template.HTML {</pre></code></td></tr><tr class="miss"><td>95</td><td><code><pre> return template.HTML(html)</pre></code></td></tr><tr><td>96</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_Checkin.String">func Checkin.String</div><div class="info"><a href="#s_fn_Checkin.String">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/checkin.go</code>:</p></div><table class="listing">
<tr><td>61</td><td><code><pre>func (c *Checkin) String() string {</pre></code></td></tr><tr class="miss"><td>62</td><td><code><pre> return c.ApiKey</pre></code></td></tr><tr><td>63</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_@71:17">func @71:17</div><div class="info"><a href="#s_fn_@71:17">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/export.go</code>:</p></div><table class="listing">
<tr><td>71</td><td><code><pre>func() string {</pre></code></td></tr><tr class="miss"><td>72</td><td><code><pre> return ExportChartsJs()</pre></code></td></tr><tr><td>73</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_@50:9">func @50:9</div><div class="info"><a href="#s_fn_@50:9">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/export.go</code>:</p></div><table class="listing">
<tr><td>50</td><td><code><pre>func(html string) template.JS {</pre></code></td></tr><tr class="miss"><td>51</td><td><code><pre> return template.JS(html)</pre></code></td></tr><tr><td>52</td><td><code><pre> }</pre></code></td></tr></table>
<!-- Can be parsed by external script
PACKAGE:github.com/hunterlong/statup/core DONE:52.58
-->
<div id="pkg_github.com/hunterlong/statup/core/notifier" class="funcname">Package Overview: github.com/hunterlong/statup/core/notifier <span class="packageTotal">72.73%</span></div><p>This is a coverage report created after analysis of the <code>github.com/hunterlong/statup/core/notifier</code> package. It
has been generated with the following command:</p><pre class="cmd">gocov test github.com/hunterlong/statup/core/notifier | gocov-html</pre> <p>Here are the stats. Please select a function name to view its implementation and see what's left for testing.</p><table class="overview">
<tr id="s_fn_Init"><td><code><a href="#fn_Init">Init(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>7/7</code></td></tr>
<tr id="s_fn_Load"><td><code><a href="#fn_Load">Load(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>7/7</code></td></tr>
<tr id="s_fn_Notification.SentLast"><td><code><a href="#fn_Notification.SentLast">Notification.SentLast(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>6/6</code></td></tr>
<tr id="s_fn_Update"><td><code><a href="#fn_Update">Update(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>6/6</code></td></tr>
<tr id="s_fn_Notification.IsRunning"><td><code><a href="#fn_Notification.IsRunning">Notification.IsRunning(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>5/5</code></td></tr>
<tr id="s_fn_Notification.LastSent"><td><code><a href="#fn_Notification.LastSent">Notification.LastSent(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>5/5</code></td></tr>
<tr id="s_fn_SelectNotification"><td><code><a href="#fn_SelectNotification">SelectNotification(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
<tr id="s_fn_OnDeletedService"><td><code><a href="#fn_OnDeletedService">OnDeletedService(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/events.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
<tr id="s_fn_OnNewUser"><td><code><a href="#fn_OnNewUser">OnNewUser(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/events.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
<tr id="s_fn_OnUpdatedUser"><td><code><a href="#fn_OnUpdatedUser">OnUpdatedUser(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/events.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
<tr id="s_fn_OnDeletedUser"><td><code><a href="#fn_OnDeletedUser">OnDeletedUser(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/events.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
<tr id="s_fn_OnUpdatedCore"><td><code><a href="#fn_OnUpdatedCore">OnUpdatedCore(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/events.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
<tr id="s_fn_inLimits"><td><code><a href="#fn_inLimits">inLimits(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
<tr id="s_fn_OnUpdatedService"><td><code><a href="#fn_OnUpdatedService">OnUpdatedService(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/events.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
<tr id="s_fn_OnUpdatedNotifier"><td><code><a href="#fn_OnUpdatedNotifier">OnUpdatedNotifier(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/events.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
<tr id="s_fn_OnNewService"><td><code><a href="#fn_OnNewService">OnNewService(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/events.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
<tr id="s_fn_OnSuccess"><td><code><a href="#fn_OnSuccess">OnSuccess(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/events.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
<tr id="s_fn_OnFailure"><td><code><a href="#fn_OnFailure">OnFailure(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/events.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
<tr id="s_fn_isType"><td><code><a href="#fn_isType">isType(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
<tr id="s_fn_reverseLogs"><td><code><a href="#fn_reverseLogs">reverseLogs(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
<tr id="s_fn_Notification.makeLog"><td><code><a href="#fn_Notification.makeLog">Notification.makeLog(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
<tr id="s_fn_Notification.SentLastHour"><td><code><a href="#fn_Notification.SentLastHour">Notification.SentLastHour(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
<tr id="s_fn_isEnabled"><td><code><a href="#fn_isEnabled">isEnabled(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
<tr id="s_fn_Notification.SentLastMinute"><td><code><a href="#fn_Notification.SentLastMinute">Notification.SentLastMinute(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
<tr id="s_fn_Notification.close"><td><code><a href="#fn_Notification.close">Notification.close(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
<tr id="s_fn_isInDatabase"><td><code><a href="#fn_isInDatabase">isInDatabase(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
<tr id="s_fn_Notification.CanTest"><td><code><a href="#fn_Notification.CanTest">Notification.CanTest(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_Notification.Logs"><td><code><a href="#fn_Notification.Logs">Notification.Logs(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_asNotification"><td><code><a href="#fn_asNotification">asNotification(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_modelDb"><td><code><a href="#fn_modelDb">modelDb(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_Notification.AddQueue"><td><code><a href="#fn_Notification.AddQueue">Notification.AddQueue(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_Notification.start"><td><code><a href="#fn_Notification.start">Notification.start(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_Queue"><td><code><a href="#fn_Queue">Queue(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>94.12%</code></td><td class="linecount"><code>16/17</code></td></tr>
<tr id="s_fn_checkNotifierForm"><td><code><a href="#fn_checkNotifierForm">checkNotifierForm(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/audit.go</code></td><td class="percent"><code>83.33%</code></td><td class="linecount"><code>5/6</code></td></tr>
<tr id="s_fn_insertDatabase"><td><code><a href="#fn_insertDatabase">insertDatabase(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>80.00%</code></td><td class="linecount"><code>4/5</code></td></tr>
<tr id="s_fn_contains"><td><code><a href="#fn_contains">contains(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/audit.go</code></td><td class="percent"><code>75.00%</code></td><td class="linecount"><code>3/4</code></td></tr>
<tr id="s_fn_Notification.WithinLimits"><td><code><a href="#fn_Notification.WithinLimits">Notification.WithinLimits(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>72.73%</code></td><td class="linecount"><code>8/11</code></td></tr>
<tr id="s_fn_install"><td><code><a href="#fn_install">install(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>71.43%</code></td><td class="linecount"><code>5/7</code></td></tr>
<tr id="s_fn_AddNotifier"><td><code><a href="#fn_AddNotifier">AddNotifier(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>71.43%</code></td><td class="linecount"><code>5/7</code></td></tr>
<tr id="s_fn_startAllNotifiers"><td><code><a href="#fn_startAllNotifiers">startAllNotifiers(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>57.14%</code></td><td class="linecount"><code>4/7</code></td></tr>
<tr id="s_fn_Notification.GetValue"><td><code><a href="#fn_Notification.GetValue">Notification.GetValue(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>30.77%</code></td><td class="linecount"><code>4/13</code></td></tr>
<tr id="s_fn_normalizeType"><td><code><a href="#fn_normalizeType">normalizeType(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>22.22%</code></td><td class="linecount"><code>2/9</code></td></tr>
<tr id="s_fn_SelectNotifier"><td><code><a href="#fn_SelectNotifier">SelectNotifier(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/8</code></td></tr>
<tr id="s_fn_Notification.removeQueue"><td><code><a href="#fn_Notification.removeQueue">Notification.removeQueue(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/6</code></td></tr>
<tr id="s_fn_OnSave"><td><code><a href="#fn_OnSave">OnSave(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/events.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/5</code></td></tr>
<tr id="s_fn_OnStart"><td><code><a href="#fn_OnStart">OnStart(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/events.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/3</code></td></tr>
<tr id="s_fn_OnNewNotifier"><td><code><a href="#fn_OnNewNotifier">OnNewNotifier(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/events.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/3</code></td></tr>
<tr id="s_fn_SetDB"><td><code><a href="#fn_SetDB">SetDB(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
<tr id="s_fn_Notification.ResetQueue"><td><code><a href="#fn_Notification.ResetQueue">Notification.ResetQueue(...)</a></code></td><td><code>github.com/hunterlong/statup/core/notifier/notifiers.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
<tr><td colspan="2"><code>github.com/hunterlong/statup/core/notifier</code></td><td class="percent"><code>72.73%</code></td><td class="linecount"><code>152/209</code></td></tr>
</table>
<div class="funcname" id="fn_Init">func Init</div><div class="info"><a href="#s_fn_Init">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
<tr><td>241</td><td><code><pre>func Init(n Notifier) (*Notification, error) {</pre></code></td></tr><tr><td>242</td><td><code><pre> err := install(n)</pre></code></td></tr><tr><td>243</td><td><code><pre> var notify *Notification</pre></code></td></tr><tr><td>244</td><td><code><pre> if err == nil {</pre></code></td></tr><tr><td>245</td><td><code><pre> notify, _ = SelectNotification(n)</pre></code></td></tr><tr><td>246</td><td><code><pre> notify.testable = isType(n, new(Tester))</pre></code></td></tr><tr><td>247</td><td><code><pre> notify.Form = n.Select().Form</pre></code></td></tr><tr><td>248</td><td><code><pre> }</pre></code></td></tr><tr><td>249</td><td><code><pre> return notify, err</pre></code></td></tr><tr><td>250</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Load">func Load</div><div class="info"><a href="#s_fn_Load">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
<tr><td>124</td><td><code><pre>func Load() []types.AllNotifiers {</pre></code></td></tr><tr><td>125</td><td><code><pre> var notifiers []types.AllNotifiers</pre></code></td></tr><tr><td>126</td><td><code><pre> for _, comm := range AllCommunications {</pre></code></td></tr><tr><td>127</td><td><code><pre> n := comm.(Notifier)</pre></code></td></tr><tr><td>128</td><td><code><pre> Init(n)</pre></code></td></tr><tr><td>129</td><td><code><pre> notifiers = append(notifiers, n)</pre></code></td></tr><tr><td>130</td><td><code><pre> }</pre></code></td></tr><tr><td>131</td><td><code><pre> startAllNotifiers()</pre></code></td></tr><tr><td>132</td><td><code><pre> return notifiers</pre></code></td></tr><tr><td>133</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Notification.SentLast">func Notification.SentLast</div><div class="info"><a href="#s_fn_Notification.SentLast">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
<tr><td>332</td><td><code><pre>func (n *Notification) SentLast(since time.Time) int {</pre></code></td></tr><tr><td>333</td><td><code><pre> sent := 0</pre></code></td></tr><tr><td>334</td><td><code><pre> for _, v := range n.Logs() {</pre></code></td></tr><tr><td>335</td><td><code><pre> lastTime := time.Time(v.Time)</pre></code></td></tr><tr><td>336</td><td><code><pre> if lastTime.After(since) {</pre></code></td></tr><tr><td>337</td><td><code><pre> sent++</pre></code></td></tr><tr><td>338</td><td><code><pre> }</pre></code></td></tr><tr><td>339</td><td><code><pre> }</pre></code></td></tr><tr><td>340</td><td><code><pre> return sent</pre></code></td></tr><tr><td>341</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Update">func Update</div><div class="info"><a href="#s_fn_Update">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
<tr><td>205</td><td><code><pre>func Update(n Notifier, notif *Notification) (*Notification, error) {</pre></code></td></tr><tr><td>206</td><td><code><pre> err := db.Model(&amp;Notification{}).Update(notif)</pre></code></td></tr><tr><td>207</td><td><code><pre> if notif.Enabled {</pre></code></td></tr><tr><td>208</td><td><code><pre> notif.close()</pre></code></td></tr><tr><td>209</td><td><code><pre> notif.start()</pre></code></td></tr><tr><td>210</td><td><code><pre> go Queue(n)</pre></code></td></tr><tr><td>211</td><td><code><pre> }</pre></code></td></tr><tr><td>212</td><td><code><pre> return notif, err.Error</pre></code></td></tr><tr><td>213</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Notification.IsRunning">func Notification.IsRunning</div><div class="info"><a href="#s_fn_Notification.IsRunning">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
<tr><td>429</td><td><code><pre>func (n *Notification) IsRunning() bool {</pre></code></td></tr><tr><td>430</td><td><code><pre> if n.Running == nil {</pre></code></td></tr><tr><td>431</td><td><code><pre> return false</pre></code></td></tr><tr><td>432</td><td><code><pre> }</pre></code></td></tr><tr><td>433</td><td><code><pre> select {</pre></code></td></tr><tr><td>434</td><td><code><pre> case &lt;-n.Running:</pre></code></td></tr><tr><td>435</td><td><code><pre> return false</pre></code></td></tr><tr><td>436</td><td><code><pre> default:</pre></code></td></tr><tr><td>437</td><td><code><pre> return true</pre></code></td></tr><tr><td>438</td><td><code><pre> }</pre></code></td></tr><tr><td>439</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Notification.LastSent">func Notification.LastSent</div><div class="info"><a href="#s_fn_Notification.LastSent">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
<tr><td>310</td><td><code><pre>func (n *Notification) LastSent() time.Duration {</pre></code></td></tr><tr><td>311</td><td><code><pre> if len(n.logs) == 0 {</pre></code></td></tr><tr><td>312</td><td><code><pre> return time.Duration(0)</pre></code></td></tr><tr><td>313</td><td><code><pre> }</pre></code></td></tr><tr><td>314</td><td><code><pre> last := n.Logs()[0]</pre></code></td></tr><tr><td>315</td><td><code><pre> since := time.Since(last.Timestamp)</pre></code></td></tr><tr><td>316</td><td><code><pre> return since</pre></code></td></tr><tr><td>317</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_SelectNotification">func SelectNotification</div><div class="info"><a href="#s_fn_SelectNotification">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
<tr><td>198</td><td><code><pre>func SelectNotification(n Notifier) (*Notification, error) {</pre></code></td></tr><tr><td>199</td><td><code><pre> notifier := n.Select()</pre></code></td></tr><tr><td>200</td><td><code><pre> err := db.Model(&amp;Notification{}).Where(&#34;method = ?&#34;, notifier.Method).Scan(&amp;notifier)</pre></code></td></tr><tr><td>201</td><td><code><pre> return notifier, err.Error</pre></code></td></tr><tr><td>202</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_OnDeletedService">func OnDeletedService</div><div class="info"><a href="#s_fn_OnDeletedService">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/events.go</code>:</p></div><table class="listing">
<tr><td>69</td><td><code><pre>func OnDeletedService(s *types.Service) {</pre></code></td></tr><tr><td>70</td><td><code><pre> for _, comm := range AllCommunications {</pre></code></td></tr><tr><td>71</td><td><code><pre> if isType(comm, new(ServiceEvents)) &amp;&amp; isEnabled(comm) &amp;&amp; inLimits(comm) {</pre></code></td></tr><tr><td>72</td><td><code><pre> comm.(ServiceEvents).OnDeletedService(s)</pre></code></td></tr><tr><td>73</td><td><code><pre> }</pre></code></td></tr><tr><td>74</td><td><code><pre> }</pre></code></td></tr><tr><td>75</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_OnNewUser">func OnNewUser</div><div class="info"><a href="#s_fn_OnNewUser">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/events.go</code>:</p></div><table class="listing">
<tr><td>78</td><td><code><pre>func OnNewUser(u *types.User) {</pre></code></td></tr><tr><td>79</td><td><code><pre> for _, comm := range AllCommunications {</pre></code></td></tr><tr><td>80</td><td><code><pre> if isType(comm, new(UserEvents)) &amp;&amp; isEnabled(comm) &amp;&amp; inLimits(comm) {</pre></code></td></tr><tr><td>81</td><td><code><pre> comm.(UserEvents).OnNewUser(u)</pre></code></td></tr><tr><td>82</td><td><code><pre> }</pre></code></td></tr><tr><td>83</td><td><code><pre> }</pre></code></td></tr><tr><td>84</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_OnUpdatedUser">func OnUpdatedUser</div><div class="info"><a href="#s_fn_OnUpdatedUser">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/events.go</code>:</p></div><table class="listing">
<tr><td>87</td><td><code><pre>func OnUpdatedUser(u *types.User) {</pre></code></td></tr><tr><td>88</td><td><code><pre> for _, comm := range AllCommunications {</pre></code></td></tr><tr><td>89</td><td><code><pre> if isType(comm, new(UserEvents)) &amp;&amp; isEnabled(comm) &amp;&amp; inLimits(comm) {</pre></code></td></tr><tr><td>90</td><td><code><pre> comm.(UserEvents).OnUpdatedUser(u)</pre></code></td></tr><tr><td>91</td><td><code><pre> }</pre></code></td></tr><tr><td>92</td><td><code><pre> }</pre></code></td></tr><tr><td>93</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_OnDeletedUser">func OnDeletedUser</div><div class="info"><a href="#s_fn_OnDeletedUser">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/events.go</code>:</p></div><table class="listing">
<tr><td>96</td><td><code><pre>func OnDeletedUser(u *types.User) {</pre></code></td></tr><tr><td>97</td><td><code><pre> for _, comm := range AllCommunications {</pre></code></td></tr><tr><td>98</td><td><code><pre> if isType(comm, new(UserEvents)) &amp;&amp; isEnabled(comm) &amp;&amp; inLimits(comm) {</pre></code></td></tr><tr><td>99</td><td><code><pre> comm.(UserEvents).OnDeletedUser(u)</pre></code></td></tr><tr><td>100</td><td><code><pre> }</pre></code></td></tr><tr><td>101</td><td><code><pre> }</pre></code></td></tr><tr><td>102</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_OnUpdatedCore">func OnUpdatedCore</div><div class="info"><a href="#s_fn_OnUpdatedCore">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/events.go</code>:</p></div><table class="listing">
<tr><td>105</td><td><code><pre>func OnUpdatedCore(c *types.Core) {</pre></code></td></tr><tr><td>106</td><td><code><pre> for _, comm := range AllCommunications {</pre></code></td></tr><tr><td>107</td><td><code><pre> if isType(comm, new(CoreEvents)) &amp;&amp; isEnabled(comm) &amp;&amp; inLimits(comm) {</pre></code></td></tr><tr><td>108</td><td><code><pre> comm.(CoreEvents).OnUpdatedCore(c)</pre></code></td></tr><tr><td>109</td><td><code><pre> }</pre></code></td></tr><tr><td>110</td><td><code><pre> }</pre></code></td></tr><tr><td>111</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_inLimits">func inLimits</div><div class="info"><a href="#s_fn_inLimits">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
<tr><td>385</td><td><code><pre>func inLimits(n interface{}) bool {</pre></code></td></tr><tr><td>386</td><td><code><pre> notifier := n.(Notifier).Select()</pre></code></td></tr><tr><td>387</td><td><code><pre> ok, _ := notifier.WithinLimits()</pre></code></td></tr><tr><td>388</td><td><code><pre> return ok</pre></code></td></tr><tr><td>389</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_OnUpdatedService">func OnUpdatedService</div><div class="info"><a href="#s_fn_OnUpdatedService">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/events.go</code>:</p></div><table class="listing">
<tr><td>60</td><td><code><pre>func OnUpdatedService(s *types.Service) {</pre></code></td></tr><tr><td>61</td><td><code><pre> for _, comm := range AllCommunications {</pre></code></td></tr><tr><td>62</td><td><code><pre> if isType(comm, new(ServiceEvents)) &amp;&amp; isEnabled(comm) &amp;&amp; inLimits(comm) {</pre></code></td></tr><tr><td>63</td><td><code><pre> comm.(ServiceEvents).OnUpdatedService(s)</pre></code></td></tr><tr><td>64</td><td><code><pre> }</pre></code></td></tr><tr><td>65</td><td><code><pre> }</pre></code></td></tr><tr><td>66</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_OnUpdatedNotifier">func OnUpdatedNotifier</div><div class="info"><a href="#s_fn_OnUpdatedNotifier">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/events.go</code>:</p></div><table class="listing">
<tr><td>132</td><td><code><pre>func OnUpdatedNotifier(n *Notification) {</pre></code></td></tr><tr><td>133</td><td><code><pre> for _, comm := range AllCommunications {</pre></code></td></tr><tr><td>134</td><td><code><pre> if isType(comm, new(NotifierEvents)) &amp;&amp; isEnabled(comm) &amp;&amp; inLimits(comm) {</pre></code></td></tr><tr><td>135</td><td><code><pre> comm.(NotifierEvents).OnUpdatedNotifier(n)</pre></code></td></tr><tr><td>136</td><td><code><pre> }</pre></code></td></tr><tr><td>137</td><td><code><pre> }</pre></code></td></tr><tr><td>138</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_OnNewService">func OnNewService</div><div class="info"><a href="#s_fn_OnNewService">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/events.go</code>:</p></div><table class="listing">
<tr><td>51</td><td><code><pre>func OnNewService(s *types.Service) {</pre></code></td></tr><tr><td>52</td><td><code><pre> for _, comm := range AllCommunications {</pre></code></td></tr><tr><td>53</td><td><code><pre> if isType(comm, new(ServiceEvents)) &amp;&amp; isEnabled(comm) &amp;&amp; inLimits(comm) {</pre></code></td></tr><tr><td>54</td><td><code><pre> comm.(ServiceEvents).OnNewService(s)</pre></code></td></tr><tr><td>55</td><td><code><pre> }</pre></code></td></tr><tr><td>56</td><td><code><pre> }</pre></code></td></tr><tr><td>57</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_OnSuccess">func OnSuccess</div><div class="info"><a href="#s_fn_OnSuccess">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/events.go</code>:</p></div><table class="listing">
<tr><td>42</td><td><code><pre>func OnSuccess(s *types.Service) {</pre></code></td></tr><tr><td>43</td><td><code><pre> for _, comm := range AllCommunications {</pre></code></td></tr><tr><td>44</td><td><code><pre> if isType(comm, new(BasicEvents)) &amp;&amp; isEnabled(comm) &amp;&amp; inLimits(comm) {</pre></code></td></tr><tr><td>45</td><td><code><pre> comm.(BasicEvents).OnSuccess(s)</pre></code></td></tr><tr><td>46</td><td><code><pre> }</pre></code></td></tr><tr><td>47</td><td><code><pre> }</pre></code></td></tr><tr><td>48</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_OnFailure">func OnFailure</div><div class="info"><a href="#s_fn_OnFailure">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/events.go</code>:</p></div><table class="listing">
<tr><td>33</td><td><code><pre>func OnFailure(s *types.Service, f *types.Failure) {</pre></code></td></tr><tr><td>34</td><td><code><pre> for _, comm := range AllCommunications {</pre></code></td></tr><tr><td>35</td><td><code><pre> if isType(comm, new(BasicEvents)) &amp;&amp; isEnabled(comm) &amp;&amp; inLimits(comm) {</pre></code></td></tr><tr><td>36</td><td><code><pre> comm.(BasicEvents).OnFailure(s, f)</pre></code></td></tr><tr><td>37</td><td><code><pre> }</pre></code></td></tr><tr><td>38</td><td><code><pre> }</pre></code></td></tr><tr><td>39</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_isType">func isType</div><div class="info"><a href="#s_fn_isType">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
<tr><td>372</td><td><code><pre>func isType(n interface{}, obj interface{}) bool {</pre></code></td></tr><tr><td>373</td><td><code><pre> one := reflect.TypeOf(n)</pre></code></td></tr><tr><td>374</td><td><code><pre> two := reflect.ValueOf(obj).Elem()</pre></code></td></tr><tr><td>375</td><td><code><pre> return one.Implements(two.Type())</pre></code></td></tr><tr><td>376</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_reverseLogs">func reverseLogs</div><div class="info"><a href="#s_fn_reverseLogs">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
<tr><td>184</td><td><code><pre>func reverseLogs(input []*NotificationLog) []*NotificationLog {</pre></code></td></tr><tr><td>185</td><td><code><pre> if len(input) == 0 {</pre></code></td></tr><tr><td>186</td><td><code><pre> return input</pre></code></td></tr><tr><td>187</td><td><code><pre> }</pre></code></td></tr><tr><td>188</td><td><code><pre> return append(reverseLogs(input[1:]), input[0])</pre></code></td></tr><tr><td>189</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Notification.makeLog">func Notification.makeLog</div><div class="info"><a href="#s_fn_Notification.makeLog">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
<tr><td>169</td><td><code><pre>func (n *Notification) makeLog(msg interface{}) {</pre></code></td></tr><tr><td>170</td><td><code><pre> log := &amp;NotificationLog{</pre></code></td></tr><tr><td>171</td><td><code><pre> Message: normalizeType(msg),</pre></code></td></tr><tr><td>172</td><td><code><pre> Time: utils.Timestamp(time.Now()),</pre></code></td></tr><tr><td>173</td><td><code><pre> Timestamp: time.Now(),</pre></code></td></tr><tr><td>174</td><td><code><pre> }</pre></code></td></tr><tr><td>175</td><td><code><pre> n.logs = append(n.logs, log)</pre></code></td></tr><tr><td>176</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Notification.SentLastHour">func Notification.SentLastHour</div><div class="info"><a href="#s_fn_Notification.SentLastHour">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
<tr><td>320</td><td><code><pre>func (n *Notification) SentLastHour() int {</pre></code></td></tr><tr><td>321</td><td><code><pre> since := time.Now().Add(-1 * time.Hour)</pre></code></td></tr><tr><td>322</td><td><code><pre> return n.SentLast(since)</pre></code></td></tr><tr><td>323</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_isEnabled">func isEnabled</div><div class="info"><a href="#s_fn_isEnabled">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
<tr><td>379</td><td><code><pre>func isEnabled(n interface{}) bool {</pre></code></td></tr><tr><td>380</td><td><code><pre> notifier, _ := SelectNotification(n.(Notifier))</pre></code></td></tr><tr><td>381</td><td><code><pre> return notifier.Enabled</pre></code></td></tr><tr><td>382</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Notification.SentLastMinute">func Notification.SentLastMinute</div><div class="info"><a href="#s_fn_Notification.SentLastMinute">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
<tr><td>326</td><td><code><pre>func (n *Notification) SentLastMinute() int {</pre></code></td></tr><tr><td>327</td><td><code><pre> since := time.Now().Add(-1 * time.Minute)</pre></code></td></tr><tr><td>328</td><td><code><pre> return n.SentLast(since)</pre></code></td></tr><tr><td>329</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Notification.close">func Notification.close</div><div class="info"><a href="#s_fn_Notification.close">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
<tr><td>422</td><td><code><pre>func (n *Notification) close() {</pre></code></td></tr><tr><td>423</td><td><code><pre> if n.IsRunning() {</pre></code></td></tr><tr><td>424</td><td><code><pre> close(n.Running)</pre></code></td></tr><tr><td>425</td><td><code><pre> }</pre></code></td></tr><tr><td>426</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_isInDatabase">func isInDatabase</div><div class="info"><a href="#s_fn_isInDatabase">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
<tr><td>192</td><td><code><pre>func isInDatabase(n *Notification) bool {</pre></code></td></tr><tr><td>193</td><td><code><pre> inDb := modelDb(n).RecordNotFound()</pre></code></td></tr><tr><td>194</td><td><code><pre> return !inDb</pre></code></td></tr><tr><td>195</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Notification.CanTest">func Notification.CanTest</div><div class="info"><a href="#s_fn_Notification.CanTest">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
<tr><td>90</td><td><code><pre>func (n *Notification) CanTest() bool {</pre></code></td></tr><tr><td>91</td><td><code><pre> return n.testable</pre></code></td></tr><tr><td>92</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Notification.Logs">func Notification.Logs</div><div class="info"><a href="#s_fn_Notification.Logs">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
<tr><td>179</td><td><code><pre>func (n *Notification) Logs() []*NotificationLog {</pre></code></td></tr><tr><td>180</td><td><code><pre> return reverseLogs(n.logs)</pre></code></td></tr><tr><td>181</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_asNotification">func asNotification</div><div class="info"><a href="#s_fn_asNotification">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
<tr><td>105</td><td><code><pre>func asNotification(n Notifier) *Notification {</pre></code></td></tr><tr><td>106</td><td><code><pre> return n.Select()</pre></code></td></tr><tr><td>107</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_modelDb">func modelDb</div><div class="info"><a href="#s_fn_modelDb">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
<tr><td>95</td><td><code><pre>func modelDb(n *Notification) *gorm.DB {</pre></code></td></tr><tr><td>96</td><td><code><pre> return db.Model(&amp;Notification{}).Where(&#34;method = ?&#34;, n.Method).Find(n)</pre></code></td></tr><tr><td>97</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Notification.AddQueue">func Notification.AddQueue</div><div class="info"><a href="#s_fn_Notification.AddQueue">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
<tr><td>85</td><td><code><pre>func (n *Notification) AddQueue(msg interface{}) {</pre></code></td></tr><tr><td>86</td><td><code><pre> n.Queue = append(n.Queue, msg)</pre></code></td></tr><tr><td>87</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Notification.start">func Notification.start</div><div class="info"><a href="#s_fn_Notification.start">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
<tr><td>417</td><td><code><pre>func (n *Notification) start() {</pre></code></td></tr><tr><td>418</td><td><code><pre> n.Running = make(chan bool)</pre></code></td></tr><tr><td>419</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Queue">func Queue</div><div class="info"><a href="#s_fn_Queue">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
<tr><td>267</td><td><code><pre>func Queue(n Notifier) {</pre></code></td></tr><tr><td>268</td><td><code><pre> notification := n.Select()</pre></code></td></tr><tr><td>269</td><td><code><pre> rateLimit := notification.Delay</pre></code></td></tr><tr><td>270</td><td><code><pre></pre></code></td></tr><tr><td>271</td><td><code><pre>CheckNotifier:</pre></code></td></tr><tr><td>272</td><td><code><pre> for {</pre></code></td></tr><tr><td>273</td><td><code><pre> select {</pre></code></td></tr><tr><td>274</td><td><code><pre> case &lt;-notification.Running:</pre></code></td></tr><tr><td>275</td><td><code><pre> break CheckNotifier</pre></code></td></tr><tr><td>276</td><td><code><pre> case &lt;-time.After(rateLimit):</pre></code></td></tr><tr><td>277</td><td><code><pre> notification = n.Select()</pre></code></td></tr><tr><td>278</td><td><code><pre> if len(notification.Queue) &gt; 0 {</pre></code></td></tr><tr><td>279</td><td><code><pre> ok, _ := notification.WithinLimits()</pre></code></td></tr><tr><td>280</td><td><code><pre> if ok {</pre></code></td></tr><tr><td>281</td><td><code><pre> msg := notification.Queue[0]</pre></code></td></tr><tr><td>282</td><td><code><pre> err := n.Send(msg)</pre></code></td></tr><tr><td>283</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>284</td><td><code><pre> utils.Log(2, fmt.Sprintf(&#34;notifier %v had an error: %v&#34;, notification.Method, err))</pre></code></td></tr><tr><td>285</td><td><code><pre> }</pre></code></td></tr><tr><td>286</td><td><code><pre> notification.makeLog(msg)</pre></code></td></tr><tr><td>287</td><td><code><pre> notification.Queue = notification.Queue[1:]</pre></code></td></tr><tr><td>288</td><td><code><pre> rateLimit = notification.Delay</pre></code></td></tr><tr><td>289</td><td><code><pre> }</pre></code></td></tr><tr><td>290</td><td><code><pre> }</pre></code></td></tr><tr><td>291</td><td><code><pre> }</pre></code></td></tr><tr><td>292</td><td><code><pre> continue</pre></code></td></tr><tr><td>293</td><td><code><pre> }</pre></code></td></tr><tr><td>294</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_checkNotifierForm">func checkNotifierForm</div><div class="info"><a href="#s_fn_checkNotifierForm">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/audit.go</code>:</p></div><table class="listing">
<tr><td>27</td><td><code><pre>func checkNotifierForm(n Notifier) error {</pre></code></td></tr><tr><td>28</td><td><code><pre> notifier := asNotification(n)</pre></code></td></tr><tr><td>29</td><td><code><pre> for _, f := range notifier.Form {</pre></code></td></tr><tr><td>30</td><td><code><pre> contains := contains(f.DbField, allowedVars)</pre></code></td></tr><tr><td>31</td><td><code><pre> if !contains {</pre></code></td></tr><tr class="miss"><td>32</td><td><code><pre> return fmt.Errorf(&#34;the DbField &#39;%v&#39; is not allowed, allowed vars: %v&#34;, f.DbField, allowedVars)</pre></code></td></tr><tr><td>33</td><td><code><pre> }</pre></code></td></tr><tr><td>34</td><td><code><pre> }</pre></code></td></tr><tr><td>35</td><td><code><pre> return nil</pre></code></td></tr><tr><td>36</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_insertDatabase">func insertDatabase</div><div class="info"><a href="#s_fn_insertDatabase">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
<tr><td>216</td><td><code><pre>func insertDatabase(n *Notification) (int64, error) {</pre></code></td></tr><tr><td>217</td><td><code><pre> n.Limits = 3</pre></code></td></tr><tr><td>218</td><td><code><pre> query := db.Create(n)</pre></code></td></tr><tr><td>219</td><td><code><pre> if query.Error != nil {</pre></code></td></tr><tr class="miss"><td>220</td><td><code><pre> return 0, query.Error</pre></code></td></tr><tr><td>221</td><td><code><pre> }</pre></code></td></tr><tr><td>222</td><td><code><pre> return n.Id, query.Error</pre></code></td></tr><tr><td>223</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_contains">func contains</div><div class="info"><a href="#s_fn_contains">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/audit.go</code>:</p></div><table class="listing">
<tr><td>38</td><td><code><pre>func contains(s string, arr []string) bool {</pre></code></td></tr><tr><td>39</td><td><code><pre> for _, v := range arr {</pre></code></td></tr><tr><td>40</td><td><code><pre> if strings.ToLower(s) == v {</pre></code></td></tr><tr><td>41</td><td><code><pre> return true</pre></code></td></tr><tr><td>42</td><td><code><pre> }</pre></code></td></tr><tr><td>43</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>44</td><td><code><pre> return false</pre></code></td></tr><tr><td>45</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Notification.WithinLimits">func Notification.WithinLimits</div><div class="info"><a href="#s_fn_Notification.WithinLimits">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
<tr><td>392</td><td><code><pre>func (n *Notification) WithinLimits() (bool, error) {</pre></code></td></tr><tr><td>393</td><td><code><pre> if n.SentLastMinute() == 0 {</pre></code></td></tr><tr><td>394</td><td><code><pre> return true, nil</pre></code></td></tr><tr><td>395</td><td><code><pre> }</pre></code></td></tr><tr><td>396</td><td><code><pre> if n.SentLastMinute() &gt;= n.Limits {</pre></code></td></tr><tr class="miss"><td>397</td><td><code><pre> return false, fmt.Errorf(&#34;notifier sent %v out of %v in last minute&#34;, n.SentLastMinute(), n.Limits)</pre></code></td></tr><tr><td>398</td><td><code><pre> }</pre></code></td></tr><tr><td>399</td><td><code><pre> if n.Delay.Seconds() == 0 {</pre></code></td></tr><tr class="miss"><td>400</td><td><code><pre> n.Delay = time.Duration(500 * time.Millisecond)</pre></code></td></tr><tr><td>401</td><td><code><pre> }</pre></code></td></tr><tr><td>402</td><td><code><pre> if n.LastSent().Seconds() == 0 {</pre></code></td></tr><tr class="miss"><td>403</td><td><code><pre> return true, nil</pre></code></td></tr><tr><td>404</td><td><code><pre> }</pre></code></td></tr><tr><td>405</td><td><code><pre> if n.Delay.Seconds() &gt;= n.LastSent().Seconds() {</pre></code></td></tr><tr><td>406</td><td><code><pre> return false, fmt.Errorf(&#34;notifiers delay (%v) is greater than last message sent (%v)&#34;, n.Delay.Seconds(), n.LastSent().Seconds())</pre></code></td></tr><tr><td>407</td><td><code><pre> }</pre></code></td></tr><tr><td>408</td><td><code><pre> return true, nil</pre></code></td></tr><tr><td>409</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_install">func install</div><div class="info"><a href="#s_fn_install">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
<tr><td>297</td><td><code><pre>func install(n Notifier) error {</pre></code></td></tr><tr><td>298</td><td><code><pre> inDb := isInDatabase(n.Select())</pre></code></td></tr><tr><td>299</td><td><code><pre> if !inDb {</pre></code></td></tr><tr><td>300</td><td><code><pre> _, err := insertDatabase(n.Select())</pre></code></td></tr><tr><td>301</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>302</td><td><code><pre> utils.Log(3, err)</pre></code></td></tr><tr class="miss"><td>303</td><td><code><pre> return err</pre></code></td></tr><tr><td>304</td><td><code><pre> }</pre></code></td></tr><tr><td>305</td><td><code><pre> }</pre></code></td></tr><tr><td>306</td><td><code><pre> return nil</pre></code></td></tr><tr><td>307</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_AddNotifier">func AddNotifier</div><div class="info"><a href="#s_fn_AddNotifier">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
<tr><td>110</td><td><code><pre>func AddNotifier(n Notifier) error {</pre></code></td></tr><tr><td>111</td><td><code><pre> if isType(n, new(Notifier)) {</pre></code></td></tr><tr><td>112</td><td><code><pre> err := checkNotifierForm(n)</pre></code></td></tr><tr><td>113</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>114</td><td><code><pre> return err</pre></code></td></tr><tr><td>115</td><td><code><pre> }</pre></code></td></tr><tr><td>116</td><td><code><pre> AllCommunications = append(AllCommunications, n)</pre></code></td></tr><tr><td>117</td><td><code><pre> } else {</pre></code></td></tr><tr class="miss"><td>118</td><td><code><pre> return errors.New(&#34;notifier does not have the required methods&#34;)</pre></code></td></tr><tr><td>119</td><td><code><pre> }</pre></code></td></tr><tr><td>120</td><td><code><pre> return nil</pre></code></td></tr><tr><td>121</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_startAllNotifiers">func startAllNotifiers</div><div class="info"><a href="#s_fn_startAllNotifiers">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
<tr><td>253</td><td><code><pre>func startAllNotifiers() {</pre></code></td></tr><tr><td>254</td><td><code><pre> for _, comm := range AllCommunications {</pre></code></td></tr><tr><td>255</td><td><code><pre> if isType(comm, new(Notifier)) {</pre></code></td></tr><tr><td>256</td><td><code><pre> notify := comm.(Notifier)</pre></code></td></tr><tr><td>257</td><td><code><pre> if notify.Select().Enabled {</pre></code></td></tr><tr class="miss"><td>258</td><td><code><pre> notify.Select().close()</pre></code></td></tr><tr class="miss"><td>259</td><td><code><pre> notify.Select().start()</pre></code></td></tr><tr class="miss"><td>260</td><td><code><pre> go Queue(notify)</pre></code></td></tr><tr><td>261</td><td><code><pre> }</pre></code></td></tr><tr><td>262</td><td><code><pre> }</pre></code></td></tr><tr><td>263</td><td><code><pre> }</pre></code></td></tr><tr><td>264</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Notification.GetValue">func Notification.GetValue</div><div class="info"><a href="#s_fn_Notification.GetValue">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
<tr><td>344</td><td><code><pre>func (n *Notification) GetValue(dbField string) string {</pre></code></td></tr><tr><td>345</td><td><code><pre> dbField = strings.ToLower(dbField)</pre></code></td></tr><tr><td>346</td><td><code><pre> switch dbField {</pre></code></td></tr><tr><td>347</td><td><code><pre> case &#34;host&#34;:</pre></code></td></tr><tr><td>348</td><td><code><pre> return n.Host</pre></code></td></tr><tr><td>349</td><td><code><pre> case &#34;port&#34;:</pre></code></td></tr><tr class="miss"><td>350</td><td><code><pre> return fmt.Sprintf(&#34;%v&#34;, n.Port)</pre></code></td></tr><tr><td>351</td><td><code><pre> case &#34;username&#34;:</pre></code></td></tr><tr class="miss"><td>352</td><td><code><pre> return n.Username</pre></code></td></tr><tr><td>353</td><td><code><pre> case &#34;password&#34;:</pre></code></td></tr><tr class="miss"><td>354</td><td><code><pre> if n.Password != &#34;&#34; {</pre></code></td></tr><tr class="miss"><td>355</td><td><code><pre> return &#34;##########&#34;</pre></code></td></tr><tr><td>356</td><td><code><pre> }</pre></code></td></tr><tr><td>357</td><td><code><pre> case &#34;var1&#34;:</pre></code></td></tr><tr class="miss"><td>358</td><td><code><pre> return n.Var1</pre></code></td></tr><tr><td>359</td><td><code><pre> case &#34;var2&#34;:</pre></code></td></tr><tr class="miss"><td>360</td><td><code><pre> return n.Var2</pre></code></td></tr><tr><td>361</td><td><code><pre> case &#34;api_key&#34;:</pre></code></td></tr><tr><td>362</td><td><code><pre> return n.ApiKey</pre></code></td></tr><tr><td>363</td><td><code><pre> case &#34;api_secret&#34;:</pre></code></td></tr><tr class="miss"><td>364</td><td><code><pre> return n.ApiSecret</pre></code></td></tr><tr><td>365</td><td><code><pre> case &#34;limits&#34;:</pre></code></td></tr><tr class="miss"><td>366</td><td><code><pre> return utils.ToString(int(n.Limits))</pre></code></td></tr><tr><td>367</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>368</td><td><code><pre> return &#34;&#34;</pre></code></td></tr><tr><td>369</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_normalizeType">func normalizeType</div><div class="info"><a href="#s_fn_normalizeType">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
<tr><td>136</td><td><code><pre>func normalizeType(ty interface{}) string {</pre></code></td></tr><tr><td>137</td><td><code><pre> switch v := ty.(type) {</pre></code></td></tr><tr><td>138</td><td><code><pre> case int, int32, int64:</pre></code></td></tr><tr class="miss"><td>139</td><td><code><pre> return fmt.Sprintf(&#34;%v&#34;, v)</pre></code></td></tr><tr><td>140</td><td><code><pre> case float32, float64:</pre></code></td></tr><tr class="miss"><td>141</td><td><code><pre> return fmt.Sprintf(&#34;%v&#34;, v)</pre></code></td></tr><tr><td>142</td><td><code><pre> case string:</pre></code></td></tr><tr><td>143</td><td><code><pre> return v</pre></code></td></tr><tr><td>144</td><td><code><pre> case []byte:</pre></code></td></tr><tr class="miss"><td>145</td><td><code><pre> return string(v)</pre></code></td></tr><tr><td>146</td><td><code><pre> case []string:</pre></code></td></tr><tr class="miss"><td>147</td><td><code><pre> return fmt.Sprintf(&#34;%v&#34;, v)</pre></code></td></tr><tr><td>148</td><td><code><pre> case interface{}, map[string]interface{}:</pre></code></td></tr><tr class="miss"><td>149</td><td><code><pre> j, _ := json.Marshal(v)</pre></code></td></tr><tr class="miss"><td>150</td><td><code><pre> return string(j)</pre></code></td></tr><tr><td>151</td><td><code><pre> default:</pre></code></td></tr><tr class="miss"><td>152</td><td><code><pre> return fmt.Sprintf(&#34;%v&#34;, v)</pre></code></td></tr><tr><td>153</td><td><code><pre> }</pre></code></td></tr><tr><td>154</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_SelectNotifier">func SelectNotifier</div><div class="info"><a href="#s_fn_SelectNotifier">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
<tr><td>226</td><td><code><pre>func SelectNotifier(method string) (*Notification, Notifier, error) {</pre></code></td></tr><tr class="miss"><td>227</td><td><code><pre> for _, comm := range AllCommunications {</pre></code></td></tr><tr class="miss"><td>228</td><td><code><pre> n, ok := comm.(Notifier)</pre></code></td></tr><tr class="miss"><td>229</td><td><code><pre> if !ok {</pre></code></td></tr><tr class="miss"><td>230</td><td><code><pre> return nil, nil, fmt.Errorf(&#34;incorrect notification type: %v&#34;, reflect.TypeOf(n).String())</pre></code></td></tr><tr><td>231</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>232</td><td><code><pre> notifier := n.Select()</pre></code></td></tr><tr class="miss"><td>233</td><td><code><pre> if notifier.Method == method {</pre></code></td></tr><tr class="miss"><td>234</td><td><code><pre> return notifier, comm.(Notifier), nil</pre></code></td></tr><tr><td>235</td><td><code><pre> }</pre></code></td></tr><tr><td>236</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>237</td><td><code><pre> return nil, nil, nil</pre></code></td></tr><tr><td>238</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Notification.removeQueue">func Notification.removeQueue</div><div class="info"><a href="#s_fn_Notification.removeQueue">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
<tr><td>157</td><td><code><pre>func (n *Notification) removeQueue(msg interface{}) interface{} {</pre></code></td></tr><tr class="miss"><td>158</td><td><code><pre> var newArr []interface{}</pre></code></td></tr><tr class="miss"><td>159</td><td><code><pre> for _, q := range n.Queue {</pre></code></td></tr><tr class="miss"><td>160</td><td><code><pre> if q != msg {</pre></code></td></tr><tr class="miss"><td>161</td><td><code><pre> newArr = append(newArr, q)</pre></code></td></tr><tr><td>162</td><td><code><pre> }</pre></code></td></tr><tr><td>163</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>164</td><td><code><pre> n.Queue = newArr</pre></code></td></tr><tr class="miss"><td>165</td><td><code><pre> return newArr</pre></code></td></tr><tr><td>166</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_OnSave">func OnSave</div><div class="info"><a href="#s_fn_OnSave">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/events.go</code>:</p></div><table class="listing">
<tr><td>21</td><td><code><pre>func OnSave(method string) {</pre></code></td></tr><tr class="miss"><td>22</td><td><code><pre> for _, comm := range AllCommunications {</pre></code></td></tr><tr class="miss"><td>23</td><td><code><pre> if isType(comm, new(Notifier)) {</pre></code></td></tr><tr class="miss"><td>24</td><td><code><pre> notifier := comm.(Notifier)</pre></code></td></tr><tr class="miss"><td>25</td><td><code><pre> if notifier.Select().Method == method {</pre></code></td></tr><tr class="miss"><td>26</td><td><code><pre> notifier.OnSave()</pre></code></td></tr><tr><td>27</td><td><code><pre> }</pre></code></td></tr><tr><td>28</td><td><code><pre> }</pre></code></td></tr><tr><td>29</td><td><code><pre> }</pre></code></td></tr><tr><td>30</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_OnStart">func OnStart</div><div class="info"><a href="#s_fn_OnStart">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/events.go</code>:</p></div><table class="listing">
<tr><td>114</td><td><code><pre>func OnStart(c *types.Core) {</pre></code></td></tr><tr class="miss"><td>115</td><td><code><pre> for _, comm := range AllCommunications {</pre></code></td></tr><tr class="miss"><td>116</td><td><code><pre> if isType(comm, new(CoreEvents)) &amp;&amp; isEnabled(comm) &amp;&amp; inLimits(comm) {</pre></code></td></tr><tr class="miss"><td>117</td><td><code><pre> comm.(CoreEvents).OnUpdatedCore(c)</pre></code></td></tr><tr><td>118</td><td><code><pre> }</pre></code></td></tr><tr><td>119</td><td><code><pre> }</pre></code></td></tr><tr><td>120</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_OnNewNotifier">func OnNewNotifier</div><div class="info"><a href="#s_fn_OnNewNotifier">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/events.go</code>:</p></div><table class="listing">
<tr><td>123</td><td><code><pre>func OnNewNotifier(n *Notification) {</pre></code></td></tr><tr class="miss"><td>124</td><td><code><pre> for _, comm := range AllCommunications {</pre></code></td></tr><tr class="miss"><td>125</td><td><code><pre> if isType(comm, new(NotifierEvents)) &amp;&amp; isEnabled(comm) &amp;&amp; inLimits(comm) {</pre></code></td></tr><tr class="miss"><td>126</td><td><code><pre> comm.(NotifierEvents).OnNewNotifier(n)</pre></code></td></tr><tr><td>127</td><td><code><pre> }</pre></code></td></tr><tr><td>128</td><td><code><pre> }</pre></code></td></tr><tr><td>129</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_SetDB">func SetDB</div><div class="info"><a href="#s_fn_SetDB">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
<tr><td>100</td><td><code><pre>func SetDB(d *gorm.DB) {</pre></code></td></tr><tr class="miss"><td>101</td><td><code><pre> db = d</pre></code></td></tr><tr><td>102</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Notification.ResetQueue">func Notification.ResetQueue</div><div class="info"><a href="#s_fn_Notification.ResetQueue">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/core/notifier/notifiers.go</code>:</p></div><table class="listing">
<tr><td>412</td><td><code><pre>func (n *Notification) ResetQueue() {</pre></code></td></tr><tr class="miss"><td>413</td><td><code><pre> n.Queue = nil</pre></code></td></tr><tr><td>414</td><td><code><pre>}</pre></code></td></tr></table>
<!-- Can be parsed by external script
PACKAGE:github.com/hunterlong/statup/core/notifier DONE:72.73
-->
<div id="pkg_github.com/hunterlong/statup/handlers" class="funcname">Package Overview: github.com/hunterlong/statup/handlers <span class="packageTotal">67.41%</span></div><p>This is a coverage report created after analysis of the <code>github.com/hunterlong/statup/handlers</code> package. It
has been generated with the following command:</p><pre class="cmd">gocov test github.com/hunterlong/statup/handlers | gocov-html</pre> <p>Here are the stats. Please select a function name to view its implementation and see what's left for testing.</p><table class="overview">
<tr id="s_fn_Router"><td><code><a href="#fn_Router">Router(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/routes.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>68/68</code></td></tr>
<tr id="s_fn_prometheusHandler"><td><code><a href="#fn_prometheusHandler">prometheusHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/prometheus.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>22/22</code></td></tr>
<tr id="s_fn_exportHandler"><td><code><a href="#fn_exportHandler">exportHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/dashboard.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>18/18</code></td></tr>
<tr id="s_fn_saveSASSHandler"><td><code><a href="#fn_saveSASSHandler">saveSASSHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/settings.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>13/13</code></td></tr>
<tr id="s_fn_renderServiceChartsHandler"><td><code><a href="#fn_renderServiceChartsHandler">renderServiceChartsHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/services.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>10/10</code></td></tr>
<tr id="s_fn_logsHandler"><td><code><a href="#fn_logsHandler">logsHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/dashboard.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>10/10</code></td></tr>
<tr id="s_fn_isAuthorized"><td><code><a href="#fn_isAuthorized">isAuthorized(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/prometheus.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>8/8</code></td></tr>
<tr id="s_fn_servicesDeleteFailuresHandler"><td><code><a href="#fn_servicesDeleteFailuresHandler">servicesDeleteFailuresHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/services.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>7/7</code></td></tr>
<tr id="s_fn_usersEditHandler"><td><code><a href="#fn_usersEditHandler">usersEditHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/users.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>7/7</code></td></tr>
<tr id="s_fn_deleteAssetsHandler"><td><code><a href="#fn_deleteAssetsHandler">deleteAssetsHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/settings.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>6/6</code></td></tr>
<tr id="s_fn_RunHTTPServer"><td><code><a href="#fn_RunHTTPServer">RunHTTPServer(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>6/6</code></td></tr>
<tr id="s_fn_usersHandler"><td><code><a href="#fn_usersHandler">usersHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/users.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>5/5</code></td></tr>
<tr id="s_fn_logsLineHandler"><td><code><a href="#fn_logsLineHandler">logsLineHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/dashboard.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>5/5</code></td></tr>
<tr id="s_fn_helpHandler"><td><code><a href="#fn_helpHandler">helpHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/dashboard.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>5/5</code></td></tr>
<tr id="s_fn_settingsHandler"><td><code><a href="#fn_settingsHandler">settingsHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/settings.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>4/4</code></td></tr>
<tr id="s_fn_servicesHandler"><td><code><a href="#fn_servicesHandler">servicesHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/services.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>4/4</code></td></tr>
<tr id="s_fn_logoutHandler"><td><code><a href="#fn_logoutHandler">logoutHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/dashboard.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>4/4</code></td></tr>
<tr id="s_fn_parseGet"><td><code><a href="#fn_parseGet">parseGet(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/settings.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
<tr id="s_fn_error404Handler"><td><code><a href="#fn_error404Handler">error404Handler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
<tr id="s_fn_resetRouter"><td><code><a href="#fn_resetRouter">resetRouter(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/routes.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
<tr id="s_fn_parseForm"><td><code><a href="#fn_parseForm">parseForm(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/settings.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
<tr id="s_fn_@126:17"><td><code><a href="#fn_@126:17">@126:17(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_@129:10"><td><code><a href="#fn_@129:10">@129:10(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_@138:15"><td><code><a href="#fn_@138:15">@138:15(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_@151:15"><td><code><a href="#fn_@151:15">@151:15(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_@88:20"><td><code><a href="#fn_@88:20">@88:20(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_@135:12"><td><code><a href="#fn_@135:12">@135:12(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_@93:11"><td><code><a href="#fn_@93:11">@93:11(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_@96:11"><td><code><a href="#fn_@96:11">@96:11(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_@99:14"><td><code><a href="#fn_@99:14">@99:14(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_@102:14"><td><code><a href="#fn_@102:14">@102:14(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_@105:15"><td><code><a href="#fn_@105:15">@105:15(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_@108:14"><td><code><a href="#fn_@108:14">@108:14(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_@154:17"><td><code><a href="#fn_@154:17">@154:17(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_@157:14"><td><code><a href="#fn_@157:14">@157:14(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_saveSettingsHandler"><td><code><a href="#fn_saveSettingsHandler">saveSettingsHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/settings.go</code></td><td class="percent"><code>96.15%</code></td><td class="linecount"><code>25/26</code></td></tr>
<tr id="s_fn_servicesUpdateHandler"><td><code><a href="#fn_servicesUpdateHandler">servicesUpdateHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/services.go</code></td><td class="percent"><code>93.55%</code></td><td class="linecount"><code>29/31</code></td></tr>
<tr id="s_fn_loginHandler"><td><code><a href="#fn_loginHandler">loginHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/dashboard.go</code></td><td class="percent"><code>92.86%</code></td><td class="linecount"><code>13/14</code></td></tr>
<tr id="s_fn_createUserHandler"><td><code><a href="#fn_createUserHandler">createUserHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/users.go</code></td><td class="percent"><code>92.31%</code></td><td class="linecount"><code>12/13</code></td></tr>
<tr id="s_fn_createServiceHandler"><td><code><a href="#fn_createServiceHandler">createServiceHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/services.go</code></td><td class="percent"><code>90.91%</code></td><td class="linecount"><code>20/22</code></td></tr>
<tr id="s_fn_servicesViewHandler"><td><code><a href="#fn_servicesViewHandler">servicesViewHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/services.go</code></td><td class="percent"><code>88.24%</code></td><td class="linecount"><code>15/17</code></td></tr>
<tr id="s_fn_setupHandler"><td><code><a href="#fn_setupHandler">setupHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/setup.go</code></td><td class="percent"><code>87.50%</code></td><td class="linecount"><code>7/8</code></td></tr>
<tr id="s_fn_saveNotificationHandler"><td><code><a href="#fn_saveNotificationHandler">saveNotificationHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/settings.go</code></td><td class="percent"><code>86.96%</code></td><td class="linecount"><code>40/46</code></td></tr>
<tr id="s_fn_apiIndexHandler"><td><code><a href="#fn_apiIndexHandler">apiIndexHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/api.go</code></td><td class="percent"><code>84.62%</code></td><td class="linecount"><code>11/13</code></td></tr>
<tr id="s_fn_apiServiceDataHandler"><td><code><a href="#fn_apiServiceDataHandler">apiServiceDataHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/api.go</code></td><td class="percent"><code>83.33%</code></td><td class="linecount"><code>10/12</code></td></tr>
<tr id="s_fn_apiAllServicesHandler"><td><code><a href="#fn_apiAllServicesHandler">apiAllServicesHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/api.go</code></td><td class="percent"><code>81.82%</code></td><td class="linecount"><code>9/11</code></td></tr>
<tr id="s_fn_executeResponse"><td><code><a href="#fn_executeResponse">executeResponse(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>80.00%</code></td><td class="linecount"><code>24/30</code></td></tr>
<tr id="s_fn_servicesDeleteHandler"><td><code><a href="#fn_servicesDeleteHandler">servicesDeleteHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/services.go</code></td><td class="percent"><code>80.00%</code></td><td class="linecount"><code>8/10</code></td></tr>
<tr id="s_fn_usersDeleteHandler"><td><code><a href="#fn_usersDeleteHandler">usersDeleteHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/users.go</code></td><td class="percent"><code>76.92%</code></td><td class="linecount"><code>10/13</code></td></tr>
<tr id="s_fn_resetCookies"><td><code><a href="#fn_resetCookies">resetCookies(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/routes.go</code></td><td class="percent"><code>75.00%</code></td><td class="linecount"><code>3/4</code></td></tr>
<tr id="s_fn_executeJSResponse"><td><code><a href="#fn_executeJSResponse">executeJSResponse(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>72.73%</code></td><td class="linecount"><code>8/11</code></td></tr>
<tr id="s_fn_reorderServiceHandler"><td><code><a href="#fn_reorderServiceHandler">reorderServiceHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/services.go</code></td><td class="percent"><code>72.73%</code></td><td class="linecount"><code>8/11</code></td></tr>
<tr id="s_fn_saveAssetsHandler"><td><code><a href="#fn_saveAssetsHandler">saveAssetsHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/settings.go</code></td><td class="percent"><code>71.43%</code></td><td class="linecount"><code>10/14</code></td></tr>
<tr id="s_fn_updateUserHandler"><td><code><a href="#fn_updateUserHandler">updateUserHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/users.go</code></td><td class="percent"><code>70.00%</code></td><td class="linecount"><code>14/20</code></td></tr>
<tr id="s_fn_apiServiceUpdateHandler"><td><code><a href="#fn_apiServiceUpdateHandler">apiServiceUpdateHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/api.go</code></td><td class="percent"><code>70.00%</code></td><td class="linecount"><code>14/20</code></td></tr>
<tr id="s_fn_apiRenewHandler"><td><code><a href="#fn_apiRenewHandler">apiRenewHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/api.go</code></td><td class="percent"><code>70.00%</code></td><td class="linecount"><code>7/10</code></td></tr>
<tr id="s_fn_apiUserUpdateHandler"><td><code><a href="#fn_apiUserUpdateHandler">apiUserUpdateHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/api.go</code></td><td class="percent"><code>68.42%</code></td><td class="linecount"><code>13/19</code></td></tr>
<tr id="s_fn_IsAuthenticated"><td><code><a href="#fn_IsAuthenticated">IsAuthenticated(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>66.67%</code></td><td class="linecount"><code>8/12</code></td></tr>
<tr id="s_fn_apiAllUsersHandler"><td><code><a href="#fn_apiAllUsersHandler">apiAllUsersHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/api.go</code></td><td class="percent"><code>66.67%</code></td><td class="linecount"><code>4/6</code></td></tr>
<tr id="s_fn_apiCreateUsersHandler"><td><code><a href="#fn_apiCreateUsersHandler">apiCreateUsersHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/api.go</code></td><td class="percent"><code>64.71%</code></td><td class="linecount"><code>11/17</code></td></tr>
<tr id="s_fn_apiCreateServiceHandler"><td><code><a href="#fn_apiCreateServiceHandler">apiCreateServiceHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/api.go</code></td><td class="percent"><code>62.50%</code></td><td class="linecount"><code>10/16</code></td></tr>
<tr id="s_fn_processSetupHandler"><td><code><a href="#fn_processSetupHandler">processSetupHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/setup.go</code></td><td class="percent"><code>62.00%</code></td><td class="linecount"><code>31/50</code></td></tr>
<tr id="s_fn_apiUserDeleteHandler"><td><code><a href="#fn_apiUserDeleteHandler">apiUserDeleteHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/api.go</code></td><td class="percent"><code>60.00%</code></td><td class="linecount"><code>9/15</code></td></tr>
<tr id="s_fn_apiServiceDeleteHandler"><td><code><a href="#fn_apiServiceDeleteHandler">apiServiceDeleteHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/api.go</code></td><td class="percent"><code>60.00%</code></td><td class="linecount"><code>9/15</code></td></tr>
<tr id="s_fn_apiUserHandler"><td><code><a href="#fn_apiUserHandler">apiUserHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/api.go</code></td><td class="percent"><code>60.00%</code></td><td class="linecount"><code>6/10</code></td></tr>
<tr id="s_fn_apiServiceHandler"><td><code><a href="#fn_apiServiceHandler">apiServiceHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/api.go</code></td><td class="percent"><code>60.00%</code></td><td class="linecount"><code>6/10</code></td></tr>
<tr id="s_fn_dashboardHandler"><td><code><a href="#fn_dashboardHandler">dashboardHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/dashboard.go</code></td><td class="percent"><code>60.00%</code></td><td class="linecount"><code>3/5</code></td></tr>
<tr id="s_fn_indexHandler"><td><code><a href="#fn_indexHandler">indexHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/index.go</code></td><td class="percent"><code>50.00%</code></td><td class="linecount"><code>2/4</code></td></tr>
<tr id="s_fn_isAPIAuthorized"><td><code><a href="#fn_isAPIAuthorized">isAPIAuthorized(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/api.go</code></td><td class="percent"><code>28.57%</code></td><td class="linecount"><code>2/7</code></td></tr>
<tr id="s_fn_testNotificationHandler"><td><code><a href="#fn_testNotificationHandler">testNotificationHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/settings.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/46</code></td></tr>
<tr id="s_fn_DesktopInit"><td><code><a href="#fn_DesktopInit">DesktopInit(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/index.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/42</code></td></tr>
<tr id="s_fn_checkinCreateHandler"><td><code><a href="#fn_checkinCreateHandler">checkinCreateHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/services.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/13</code></td></tr>
<tr id="s_fn_apiServicePingDataHandler"><td><code><a href="#fn_apiServicePingDataHandler">apiServicePingDataHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/api.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/12</code></td></tr>
<tr id="s_fn_checkinHitHandler"><td><code><a href="#fn_checkinHitHandler">checkinHitHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/services.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/10</code></td></tr>
<tr id="s_fn_checkinDeleteHandler"><td><code><a href="#fn_checkinDeleteHandler">checkinDeleteHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/services.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/9</code></td></tr>
<tr id="s_fn_pluginSavedHandler"><td><code><a href="#fn_pluginSavedHandler">pluginSavedHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/plugins.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/9</code></td></tr>
<tr id="s_fn_@111:11"><td><code><a href="#fn_@111:11">@111:11(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/8</code></td></tr>
<tr id="s_fn_apiCheckinHandler"><td><code><a href="#fn_apiCheckinHandler">apiCheckinHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/api.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/7</code></td></tr>
<tr id="s_fn_pluginsDownloadHandler"><td><code><a href="#fn_pluginsDownloadHandler">pluginsDownloadHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/plugins.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/5</code></td></tr>
<tr id="s_fn_parseId"><td><code><a href="#fn_parseId">parseId(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/settings.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/2</code></td></tr>
<tr id="s_fn_@122:13"><td><code><a href="#fn_@122:13">@122:13(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/2</code></td></tr>
<tr id="s_fn_@144:15"><td><code><a href="#fn_@144:15">@144:15(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/2</code></td></tr>
<tr id="s_fn_setupResponseError"><td><code><a href="#fn_setupResponseError">setupResponseError(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/setup.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
<tr id="s_fn_@90:9"><td><code><a href="#fn_@90:9">@90:9(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
<tr id="s_fn_@132:17"><td><code><a href="#fn_@132:17">@132:17(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
<tr id="s_fn_@148:13"><td><code><a href="#fn_@148:13">@148:13(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
<tr id="s_fn_trayHandler"><td><code><a href="#fn_trayHandler">trayHandler(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/index.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
<tr id="s_fn_@141:10"><td><code><a href="#fn_@141:10">@141:10(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
<tr id="s_fn_@235:15"><td><code><a href="#fn_@235:15">@235:15(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
<tr id="s_fn_@160:17"><td><code><a href="#fn_@160:17">@160:17(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
<tr id="s_fn_@232:11"><td><code><a href="#fn_@232:11">@232:11(...)</a></code></td><td><code>github.com/hunterlong/statup/handlers/handlers.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
<tr><td colspan="2"><code>github.com/hunterlong/statup/handlers</code></td><td class="percent"><code>67.41%</code></td><td class="linecount"><code>635/942</code></td></tr>
</table>
<div class="funcname" id="fn_Router">func Router</div><div class="info"><a href="#s_fn_Router">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/routes.go</code>:</p></div><table class="listing">
<tr><td>34</td><td><code><pre>func Router() *mux.Router {</pre></code></td></tr><tr><td>35</td><td><code><pre> dir := utils.Directory</pre></code></td></tr><tr><td>36</td><td><code><pre> r := mux.NewRouter()</pre></code></td></tr><tr><td>37</td><td><code><pre> r.Handle(&#34;/&#34;, http.HandlerFunc(indexHandler))</pre></code></td></tr><tr><td>38</td><td><code><pre> if source.UsingAssets(dir) {</pre></code></td></tr><tr><td>39</td><td><code><pre> indexHandler := http.FileServer(http.Dir(dir + &#34;/assets/&#34;))</pre></code></td></tr><tr><td>40</td><td><code><pre> r.PathPrefix(&#34;/css/&#34;).Handler(http.StripPrefix(&#34;/css/&#34;, http.FileServer(http.Dir(dir+&#34;/assets/css&#34;))))</pre></code></td></tr><tr><td>41</td><td><code><pre> r.PathPrefix(&#34;/robots.txt&#34;).Handler(indexHandler)</pre></code></td></tr><tr><td>42</td><td><code><pre> r.PathPrefix(&#34;/favicon.ico&#34;).Handler(indexHandler)</pre></code></td></tr><tr><td>43</td><td><code><pre> r.PathPrefix(&#34;/statup.png&#34;).Handler(indexHandler)</pre></code></td></tr><tr><td>44</td><td><code><pre> } else {</pre></code></td></tr><tr><td>45</td><td><code><pre> r.PathPrefix(&#34;/css/&#34;).Handler(http.StripPrefix(&#34;/css/&#34;, http.FileServer(source.CssBox.HTTPBox())))</pre></code></td></tr><tr><td>46</td><td><code><pre> r.PathPrefix(&#34;/robots.txt&#34;).Handler(http.FileServer(source.TmplBox.HTTPBox()))</pre></code></td></tr><tr><td>47</td><td><code><pre> r.PathPrefix(&#34;/favicon.ico&#34;).Handler(http.FileServer(source.TmplBox.HTTPBox()))</pre></code></td></tr><tr><td>48</td><td><code><pre> r.PathPrefix(&#34;/statup.png&#34;).Handler(http.FileServer(source.TmplBox.HTTPBox()))</pre></code></td></tr><tr><td>49</td><td><code><pre> }</pre></code></td></tr><tr><td>50</td><td><code><pre> r.PathPrefix(&#34;/js/&#34;).Handler(http.StripPrefix(&#34;/js/&#34;, http.FileServer(source.JsBox.HTTPBox())))</pre></code></td></tr><tr><td>51</td><td><code><pre> r.Handle(&#34;/charts.js&#34;, http.HandlerFunc(renderServiceChartsHandler))</pre></code></td></tr><tr><td>52</td><td><code><pre> r.Handle(&#34;/setup&#34;, http.HandlerFunc(setupHandler)).Methods(&#34;GET&#34;)</pre></code></td></tr><tr><td>53</td><td><code><pre> r.Handle(&#34;/setup&#34;, http.HandlerFunc(processSetupHandler)).Methods(&#34;POST&#34;)</pre></code></td></tr><tr><td>54</td><td><code><pre> r.Handle(&#34;/dashboard&#34;, http.HandlerFunc(dashboardHandler)).Methods(&#34;GET&#34;)</pre></code></td></tr><tr><td>55</td><td><code><pre> r.Handle(&#34;/dashboard&#34;, http.HandlerFunc(loginHandler)).Methods(&#34;POST&#34;)</pre></code></td></tr><tr><td>56</td><td><code><pre> r.Handle(&#34;/logout&#34;, http.HandlerFunc(logoutHandler))</pre></code></td></tr><tr><td>57</td><td><code><pre> r.Handle(&#34;/plugins/download/{name}&#34;, http.HandlerFunc(pluginsDownloadHandler))</pre></code></td></tr><tr><td>58</td><td><code><pre> r.Handle(&#34;/plugins/{name}/save&#34;, http.HandlerFunc(pluginSavedHandler)).Methods(&#34;POST&#34;)</pre></code></td></tr><tr><td>59</td><td><code><pre> r.Handle(&#34;/help&#34;, http.HandlerFunc(helpHandler))</pre></code></td></tr><tr><td>60</td><td><code><pre> r.Handle(&#34;/logs&#34;, http.HandlerFunc(logsHandler))</pre></code></td></tr><tr><td>61</td><td><code><pre> r.Handle(&#34;/logs/line&#34;, http.HandlerFunc(logsLineHandler))</pre></code></td></tr><tr><td>62</td><td><code><pre></pre></code></td></tr><tr><td>63</td><td><code><pre> // USER Routes</pre></code></td></tr><tr><td>64</td><td><code><pre> r.Handle(&#34;/users&#34;, http.HandlerFunc(usersHandler)).Methods(&#34;GET&#34;)</pre></code></td></tr><tr><td>65</td><td><code><pre> r.Handle(&#34;/users&#34;, http.HandlerFunc(createUserHandler)).Methods(&#34;POST&#34;)</pre></code></td></tr><tr><td>66</td><td><code><pre> r.Handle(&#34;/user/{id}&#34;, http.HandlerFunc(usersEditHandler)).Methods(&#34;GET&#34;)</pre></code></td></tr><tr><td>67</td><td><code><pre> r.Handle(&#34;/user/{id}&#34;, http.HandlerFunc(updateUserHandler)).Methods(&#34;POST&#34;)</pre></code></td></tr><tr><td>68</td><td><code><pre> r.Handle(&#34;/user/{id}/delete&#34;, http.HandlerFunc(usersDeleteHandler)).Methods(&#34;GET&#34;)</pre></code></td></tr><tr><td>69</td><td><code><pre></pre></code></td></tr><tr><td>70</td><td><code><pre> // SETTINGS Routes</pre></code></td></tr><tr><td>71</td><td><code><pre> r.Handle(&#34;/settings&#34;, http.HandlerFunc(settingsHandler)).Methods(&#34;GET&#34;)</pre></code></td></tr><tr><td>72</td><td><code><pre> r.Handle(&#34;/settings&#34;, http.HandlerFunc(saveSettingsHandler)).Methods(&#34;POST&#34;)</pre></code></td></tr><tr><td>73</td><td><code><pre> r.Handle(&#34;/settings/css&#34;, http.HandlerFunc(saveSASSHandler)).Methods(&#34;POST&#34;)</pre></code></td></tr><tr><td>74</td><td><code><pre> r.Handle(&#34;/settings/build&#34;, http.HandlerFunc(saveAssetsHandler)).Methods(&#34;GET&#34;)</pre></code></td></tr><tr><td>75</td><td><code><pre> r.Handle(&#34;/settings/delete_assets&#34;, http.HandlerFunc(deleteAssetsHandler)).Methods(&#34;GET&#34;)</pre></code></td></tr><tr><td>76</td><td><code><pre> r.Handle(&#34;/settings/notifier/{method}&#34;, http.HandlerFunc(saveNotificationHandler)).Methods(&#34;POST&#34;)</pre></code></td></tr><tr><td>77</td><td><code><pre> r.Handle(&#34;/settings/notifier/{method}/test&#34;, http.HandlerFunc(testNotificationHandler)).Methods(&#34;POST&#34;)</pre></code></td></tr><tr><td>78</td><td><code><pre> r.Handle(&#34;/settings/export&#34;, http.HandlerFunc(exportHandler)).Methods(&#34;GET&#34;)</pre></code></td></tr><tr><td>79</td><td><code><pre></pre></code></td></tr><tr><td>80</td><td><code><pre> // SERVICE Routes</pre></code></td></tr><tr><td>81</td><td><code><pre> r.Handle(&#34;/services&#34;, http.HandlerFunc(servicesHandler)).Methods(&#34;GET&#34;)</pre></code></td></tr><tr><td>82</td><td><code><pre> r.Handle(&#34;/services&#34;, http.HandlerFunc(createServiceHandler)).Methods(&#34;POST&#34;)</pre></code></td></tr><tr><td>83</td><td><code><pre> r.Handle(&#34;/services/reorder&#34;, http.HandlerFunc(reorderServiceHandler)).Methods(&#34;POST&#34;)</pre></code></td></tr><tr><td>84</td><td><code><pre> r.Handle(&#34;/service/{id}&#34;, http.HandlerFunc(servicesViewHandler)).Methods(&#34;GET&#34;)</pre></code></td></tr><tr><td>85</td><td><code><pre> r.Handle(&#34;/service/{id}&#34;, http.HandlerFunc(servicesUpdateHandler)).Methods(&#34;POST&#34;)</pre></code></td></tr><tr><td>86</td><td><code><pre> r.Handle(&#34;/service/{id}/edit&#34;, http.HandlerFunc(servicesViewHandler))</pre></code></td></tr><tr><td>87</td><td><code><pre> r.Handle(&#34;/service/{id}/delete&#34;, http.HandlerFunc(servicesDeleteHandler))</pre></code></td></tr><tr><td>88</td><td><code><pre> r.Handle(&#34;/service/{id}/delete_failures&#34;, http.HandlerFunc(servicesDeleteFailuresHandler)).Methods(&#34;GET&#34;)</pre></code></td></tr><tr><td>89</td><td><code><pre> r.Handle(&#34;/service/{id}/checkin&#34;, http.HandlerFunc(checkinCreateHandler)).Methods(&#34;POST&#34;)</pre></code></td></tr><tr><td>90</td><td><code><pre> r.Handle(&#34;/checkin/{id}/delete&#34;, http.HandlerFunc(checkinDeleteHandler)).Methods(&#34;GET&#34;)</pre></code></td></tr><tr><td>91</td><td><code><pre> r.Handle(&#34;/checkin/{id}&#34;, http.HandlerFunc(checkinHitHandler))</pre></code></td></tr><tr><td>92</td><td><code><pre></pre></code></td></tr><tr><td>93</td><td><code><pre> // API SERVICE Routes</pre></code></td></tr><tr><td>94</td><td><code><pre> r.Handle(&#34;/api/services&#34;, http.HandlerFunc(apiAllServicesHandler)).Methods(&#34;GET&#34;)</pre></code></td></tr><tr><td>95</td><td><code><pre> r.Handle(&#34;/api/services&#34;, http.HandlerFunc(apiCreateServiceHandler)).Methods(&#34;POST&#34;)</pre></code></td></tr><tr><td>96</td><td><code><pre> r.Handle(&#34;/api/services/{id}&#34;, http.HandlerFunc(apiServiceHandler)).Methods(&#34;GET&#34;)</pre></code></td></tr><tr><td>97</td><td><code><pre> r.Handle(&#34;/api/services/{id}/data&#34;, http.HandlerFunc(apiServiceDataHandler)).Methods(&#34;GET&#34;)</pre></code></td></tr><tr><td>98</td><td><code><pre> r.Handle(&#34;/api/services/{id}/ping&#34;, http.HandlerFunc(apiServicePingDataHandler)).Methods(&#34;GET&#34;)</pre></code></td></tr><tr><td>99</td><td><code><pre> r.Handle(&#34;/api/services/{id}&#34;, http.HandlerFunc(apiServiceUpdateHandler)).Methods(&#34;POST&#34;)</pre></code></td></tr><tr><td>100</td><td><code><pre> r.Handle(&#34;/api/services/{id}&#34;, http.HandlerFunc(apiServiceDeleteHandler)).Methods(&#34;DELETE&#34;)</pre></code></td></tr><tr><td>101</td><td><code><pre></pre></code></td></tr><tr><td>102</td><td><code><pre> // API USER Routes</pre></code></td></tr><tr><td>103</td><td><code><pre> r.Handle(&#34;/api/users&#34;, http.HandlerFunc(apiAllUsersHandler)).Methods(&#34;GET&#34;)</pre></code></td></tr><tr><td>104</td><td><code><pre> r.Handle(&#34;/api/users&#34;, http.HandlerFunc(apiCreateUsersHandler)).Methods(&#34;POST&#34;)</pre></code></td></tr><tr><td>105</td><td><code><pre> r.Handle(&#34;/api/users/{id}&#34;, http.HandlerFunc(apiUserHandler)).Methods(&#34;GET&#34;)</pre></code></td></tr><tr><td>106</td><td><code><pre> r.Handle(&#34;/api/users/{id}&#34;, http.HandlerFunc(apiUserUpdateHandler)).Methods(&#34;POST&#34;)</pre></code></td></tr><tr><td>107</td><td><code><pre> r.Handle(&#34;/api/users/{id}&#34;, http.HandlerFunc(apiUserDeleteHandler)).Methods(&#34;DELETE&#34;)</pre></code></td></tr><tr><td>108</td><td><code><pre></pre></code></td></tr><tr><td>109</td><td><code><pre> // Generic API Routes</pre></code></td></tr><tr><td>110</td><td><code><pre> r.Handle(&#34;/api&#34;, http.HandlerFunc(apiIndexHandler))</pre></code></td></tr><tr><td>111</td><td><code><pre> r.Handle(&#34;/api/renew&#34;, http.HandlerFunc(apiRenewHandler))</pre></code></td></tr><tr><td>112</td><td><code><pre> r.Handle(&#34;/api/checkin/{api}&#34;, http.HandlerFunc(apiCheckinHandler))</pre></code></td></tr><tr><td>113</td><td><code><pre> r.Handle(&#34;/metrics&#34;, http.HandlerFunc(prometheusHandler))</pre></code></td></tr><tr><td>114</td><td><code><pre> r.Handle(&#34;/tray&#34;, http.HandlerFunc(trayHandler))</pre></code></td></tr><tr><td>115</td><td><code><pre> r.NotFoundHandler = http.HandlerFunc(error404Handler)</pre></code></td></tr><tr><td>116</td><td><code><pre> return r</pre></code></td></tr><tr><td>117</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_prometheusHandler">func prometheusHandler</div><div class="info"><a href="#s_fn_prometheusHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/prometheus.go</code>:</p></div><table class="listing">
<tr><td>36</td><td><code><pre>func prometheusHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>37</td><td><code><pre> utils.Log(1, fmt.Sprintf(&#34;Prometheus /metrics Request From IP: %v\n&#34;, r.RemoteAddr))</pre></code></td></tr><tr><td>38</td><td><code><pre> if !isAuthorized(r) {</pre></code></td></tr><tr><td>39</td><td><code><pre> http.Redirect(w, r, &#34;/&#34;, http.StatusSeeOther)</pre></code></td></tr><tr><td>40</td><td><code><pre> return</pre></code></td></tr><tr><td>41</td><td><code><pre> }</pre></code></td></tr><tr><td>42</td><td><code><pre> metrics := []string{}</pre></code></td></tr><tr><td>43</td><td><code><pre> system := fmt.Sprintf(&#34;statup_total_failures %v\n&#34;, core.CountFailures())</pre></code></td></tr><tr><td>44</td><td><code><pre> system += fmt.Sprintf(&#34;statup_total_services %v&#34;, len(core.CoreApp.Services))</pre></code></td></tr><tr><td>45</td><td><code><pre> metrics = append(metrics, system)</pre></code></td></tr><tr><td>46</td><td><code><pre> for _, ser := range core.CoreApp.Services {</pre></code></td></tr><tr><td>47</td><td><code><pre> v := ser.Select()</pre></code></td></tr><tr><td>48</td><td><code><pre> online := 1</pre></code></td></tr><tr><td>49</td><td><code><pre> if !v.Online {</pre></code></td></tr><tr><td>50</td><td><code><pre> online = 0</pre></code></td></tr><tr><td>51</td><td><code><pre> }</pre></code></td></tr><tr><td>52</td><td><code><pre> met := fmt.Sprintf(&#34;statup_service_failures{id=\&#34;%v\&#34; name=\&#34;%v\&#34;} %v\n&#34;, v.Id, v.Name, len(v.Failures))</pre></code></td></tr><tr><td>53</td><td><code><pre> met += fmt.Sprintf(&#34;statup_service_latency{id=\&#34;%v\&#34; name=\&#34;%v\&#34;} %0.0f\n&#34;, v.Id, v.Name, (v.Latency * 100))</pre></code></td></tr><tr><td>54</td><td><code><pre> met += fmt.Sprintf(&#34;statup_service_online{id=\&#34;%v\&#34; name=\&#34;%v\&#34;} %v\n&#34;, v.Id, v.Name, online)</pre></code></td></tr><tr><td>55</td><td><code><pre> met += fmt.Sprintf(&#34;statup_service_status_code{id=\&#34;%v\&#34; name=\&#34;%v\&#34;} %v\n&#34;, v.Id, v.Name, v.LastStatusCode)</pre></code></td></tr><tr><td>56</td><td><code><pre> met += fmt.Sprintf(&#34;statup_service_response_length{id=\&#34;%v\&#34; name=\&#34;%v\&#34;} %v&#34;, v.Id, v.Name, len([]byte(v.LastResponse)))</pre></code></td></tr><tr><td>57</td><td><code><pre> metrics = append(metrics, met)</pre></code></td></tr><tr><td>58</td><td><code><pre> }</pre></code></td></tr><tr><td>59</td><td><code><pre> output := strings.Join(metrics, &#34;\n&#34;)</pre></code></td></tr><tr><td>60</td><td><code><pre> w.WriteHeader(http.StatusOK)</pre></code></td></tr><tr><td>61</td><td><code><pre> w.Write([]byte(output))</pre></code></td></tr><tr><td>62</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_exportHandler">func exportHandler</div><div class="info"><a href="#s_fn_exportHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/dashboard.go</code>:</p></div><table class="listing">
<tr><td>109</td><td><code><pre>func exportHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>110</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr><td>111</td><td><code><pre> w.WriteHeader(http.StatusInternalServerError)</pre></code></td></tr><tr><td>112</td><td><code><pre> return</pre></code></td></tr><tr><td>113</td><td><code><pre> }</pre></code></td></tr><tr><td>114</td><td><code><pre></pre></code></td></tr><tr><td>115</td><td><code><pre> var notifiers []*notifier.Notification</pre></code></td></tr><tr><td>116</td><td><code><pre> for _, v := range core.CoreApp.Notifications {</pre></code></td></tr><tr><td>117</td><td><code><pre> notifier := v.(notifier.Notifier)</pre></code></td></tr><tr><td>118</td><td><code><pre> notifiers = append(notifiers, notifier.Select())</pre></code></td></tr><tr><td>119</td><td><code><pre> }</pre></code></td></tr><tr><td>120</td><td><code><pre></pre></code></td></tr><tr><td>121</td><td><code><pre> data := exportData{core.CoreApp, notifiers}</pre></code></td></tr><tr><td>122</td><td><code><pre></pre></code></td></tr><tr><td>123</td><td><code><pre> export, _ := json.Marshal(data)</pre></code></td></tr><tr><td>124</td><td><code><pre></pre></code></td></tr><tr><td>125</td><td><code><pre> mime := http.DetectContentType(export)</pre></code></td></tr><tr><td>126</td><td><code><pre> fileSize := len(string(export))</pre></code></td></tr><tr><td>127</td><td><code><pre></pre></code></td></tr><tr><td>128</td><td><code><pre> w.Header().Set(&#34;Content-Type&#34;, mime)</pre></code></td></tr><tr><td>129</td><td><code><pre> w.Header().Set(&#34;Content-Disposition&#34;, &#34;attachment; filename=export.json&#34;)</pre></code></td></tr><tr><td>130</td><td><code><pre> w.Header().Set(&#34;Expires&#34;, &#34;0&#34;)</pre></code></td></tr><tr><td>131</td><td><code><pre> w.Header().Set(&#34;Content-Transfer-Encoding&#34;, &#34;binary&#34;)</pre></code></td></tr><tr><td>132</td><td><code><pre> w.Header().Set(&#34;Content-Length&#34;, strconv.Itoa(fileSize))</pre></code></td></tr><tr><td>133</td><td><code><pre> w.Header().Set(&#34;Content-Control&#34;, &#34;private, no-transform, no-store, must-revalidate&#34;)</pre></code></td></tr><tr><td>134</td><td><code><pre></pre></code></td></tr><tr><td>135</td><td><code><pre> http.ServeContent(w, r, &#34;export.json&#34;, time.Now(), bytes.NewReader(export))</pre></code></td></tr><tr><td>136</td><td><code><pre></pre></code></td></tr><tr><td>137</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_saveSASSHandler">func saveSASSHandler</div><div class="info"><a href="#s_fn_saveSASSHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/settings.go</code>:</p></div><table class="listing">
<tr><td>75</td><td><code><pre>func saveSASSHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>76</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr><td>77</td><td><code><pre> http.Redirect(w, r, &#34;/&#34;, http.StatusSeeOther)</pre></code></td></tr><tr><td>78</td><td><code><pre> return</pre></code></td></tr><tr><td>79</td><td><code><pre> }</pre></code></td></tr><tr><td>80</td><td><code><pre> r.ParseForm()</pre></code></td></tr><tr><td>81</td><td><code><pre> theme := r.PostForm.Get(&#34;theme&#34;)</pre></code></td></tr><tr><td>82</td><td><code><pre> variables := r.PostForm.Get(&#34;variables&#34;)</pre></code></td></tr><tr><td>83</td><td><code><pre> mobile := r.PostForm.Get(&#34;mobile&#34;)</pre></code></td></tr><tr><td>84</td><td><code><pre> source.SaveAsset([]byte(theme), utils.Directory, &#34;scss/base.scss&#34;)</pre></code></td></tr><tr><td>85</td><td><code><pre> source.SaveAsset([]byte(variables), utils.Directory, &#34;scss/variables.scss&#34;)</pre></code></td></tr><tr><td>86</td><td><code><pre> source.SaveAsset([]byte(mobile), utils.Directory, &#34;scss/mobile.scss&#34;)</pre></code></td></tr><tr><td>87</td><td><code><pre> source.CompileSASS(utils.Directory)</pre></code></td></tr><tr><td>88</td><td><code><pre> resetRouter()</pre></code></td></tr><tr><td>89</td><td><code><pre> executeResponse(w, r, &#34;settings.html&#34;, core.CoreApp, &#34;/settings&#34;)</pre></code></td></tr><tr><td>90</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_renderServiceChartsHandler">func renderServiceChartsHandler</div><div class="info"><a href="#s_fn_renderServiceChartsHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/services.go</code>:</p></div><table class="listing">
<tr><td>31</td><td><code><pre>func renderServiceChartsHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>32</td><td><code><pre> services := core.CoreApp.Services</pre></code></td></tr><tr><td>33</td><td><code><pre> w.Header().Set(&#34;Content-Type&#34;, &#34;text/javascript&#34;)</pre></code></td></tr><tr><td>34</td><td><code><pre> w.Header().Set(&#34;Cache-Control&#34;, &#34;max-age=60&#34;)</pre></code></td></tr><tr><td>35</td><td><code><pre></pre></code></td></tr><tr><td>36</td><td><code><pre> //var data []string</pre></code></td></tr><tr><td>37</td><td><code><pre> end := time.Now().UTC()</pre></code></td></tr><tr><td>38</td><td><code><pre> start := time.Now().Add((-24 * 7) * time.Hour).UTC()</pre></code></td></tr><tr><td>39</td><td><code><pre> var srvs []*core.Service</pre></code></td></tr><tr><td>40</td><td><code><pre> for _, s := range services {</pre></code></td></tr><tr><td>41</td><td><code><pre> srvs = append(srvs, s.(*core.Service))</pre></code></td></tr><tr><td>42</td><td><code><pre> }</pre></code></td></tr><tr><td>43</td><td><code><pre> out := struct {</pre></code></td></tr><tr><td>44</td><td><code><pre> Services []*core.Service</pre></code></td></tr><tr><td>45</td><td><code><pre> Start int64</pre></code></td></tr><tr><td>46</td><td><code><pre> End int64</pre></code></td></tr><tr><td>47</td><td><code><pre> }{srvs, start.Unix(), end.Unix()}</pre></code></td></tr><tr><td>48</td><td><code><pre></pre></code></td></tr><tr><td>49</td><td><code><pre> executeJSResponse(w, r, &#34;charts.js&#34;, out)</pre></code></td></tr><tr><td>50</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_logsHandler">func logsHandler</div><div class="info"><a href="#s_fn_logsHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/dashboard.go</code>:</p></div><table class="listing">
<tr><td>78</td><td><code><pre>func logsHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>79</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr><td>80</td><td><code><pre> http.Redirect(w, r, &#34;/&#34;, http.StatusSeeOther)</pre></code></td></tr><tr><td>81</td><td><code><pre> return</pre></code></td></tr><tr><td>82</td><td><code><pre> }</pre></code></td></tr><tr><td>83</td><td><code><pre> utils.LockLines.Lock()</pre></code></td></tr><tr><td>84</td><td><code><pre> logs := make([]string, 0)</pre></code></td></tr><tr><td>85</td><td><code><pre> len := len(utils.LastLines)</pre></code></td></tr><tr><td>86</td><td><code><pre> // We need string log lines from end to start.</pre></code></td></tr><tr><td>87</td><td><code><pre> for i := len - 1; i &gt;= 0; i-- {</pre></code></td></tr><tr><td>88</td><td><code><pre> logs = append(logs, utils.LastLines[i].FormatForHtml()+&#34;\r\n&#34;)</pre></code></td></tr><tr><td>89</td><td><code><pre> }</pre></code></td></tr><tr><td>90</td><td><code><pre> utils.LockLines.Unlock()</pre></code></td></tr><tr><td>91</td><td><code><pre> executeResponse(w, r, &#34;logs.html&#34;, logs, nil)</pre></code></td></tr><tr><td>92</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_isAuthorized">func isAuthorized</div><div class="info"><a href="#s_fn_isAuthorized">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/prometheus.go</code>:</p></div><table class="listing">
<tr><td>64</td><td><code><pre>func isAuthorized(r *http.Request) bool {</pre></code></td></tr><tr><td>65</td><td><code><pre> var token string</pre></code></td></tr><tr><td>66</td><td><code><pre> tokens, ok := r.Header[&#34;Authorization&#34;]</pre></code></td></tr><tr><td>67</td><td><code><pre> if ok &amp;&amp; len(tokens) &gt;= 1 {</pre></code></td></tr><tr><td>68</td><td><code><pre> token = tokens[0]</pre></code></td></tr><tr><td>69</td><td><code><pre> token = strings.TrimPrefix(token, &#34;Bearer &#34;)</pre></code></td></tr><tr><td>70</td><td><code><pre> }</pre></code></td></tr><tr><td>71</td><td><code><pre> if token == core.CoreApp.ApiSecret {</pre></code></td></tr><tr><td>72</td><td><code><pre> return true</pre></code></td></tr><tr><td>73</td><td><code><pre> }</pre></code></td></tr><tr><td>74</td><td><code><pre> return false</pre></code></td></tr><tr><td>75</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_servicesDeleteFailuresHandler">func servicesDeleteFailuresHandler</div><div class="info"><a href="#s_fn_servicesDeleteFailuresHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/services.go</code>:</p></div><table class="listing">
<tr><td>209</td><td><code><pre>func servicesDeleteFailuresHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>210</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr><td>211</td><td><code><pre> http.Redirect(w, r, &#34;/&#34;, http.StatusSeeOther)</pre></code></td></tr><tr><td>212</td><td><code><pre> return</pre></code></td></tr><tr><td>213</td><td><code><pre> }</pre></code></td></tr><tr><td>214</td><td><code><pre> vars := mux.Vars(r)</pre></code></td></tr><tr><td>215</td><td><code><pre> service := core.SelectService(utils.StringInt(vars[&#34;id&#34;]))</pre></code></td></tr><tr><td>216</td><td><code><pre> service.DeleteFailures()</pre></code></td></tr><tr><td>217</td><td><code><pre> executeResponse(w, r, &#34;services.html&#34;, core.CoreApp.Services, &#34;/services&#34;)</pre></code></td></tr><tr><td>218</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_usersEditHandler">func usersEditHandler</div><div class="info"><a href="#s_fn_usersEditHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/users.go</code>:</p></div><table class="listing">
<tr><td>37</td><td><code><pre>func usersEditHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>38</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr><td>39</td><td><code><pre> http.Redirect(w, r, &#34;/&#34;, http.StatusSeeOther)</pre></code></td></tr><tr><td>40</td><td><code><pre> return</pre></code></td></tr><tr><td>41</td><td><code><pre> }</pre></code></td></tr><tr><td>42</td><td><code><pre> vars := mux.Vars(r)</pre></code></td></tr><tr><td>43</td><td><code><pre> id, _ := strconv.Atoi(vars[&#34;id&#34;])</pre></code></td></tr><tr><td>44</td><td><code><pre> user, _ := core.SelectUser(int64(id))</pre></code></td></tr><tr><td>45</td><td><code><pre> executeResponse(w, r, &#34;user.html&#34;, user, nil)</pre></code></td></tr><tr><td>46</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_deleteAssetsHandler">func deleteAssetsHandler</div><div class="info"><a href="#s_fn_deleteAssetsHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/settings.go</code>:</p></div><table class="listing">
<tr><td>112</td><td><code><pre>func deleteAssetsHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>113</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr><td>114</td><td><code><pre> http.Redirect(w, r, &#34;/&#34;, http.StatusSeeOther)</pre></code></td></tr><tr><td>115</td><td><code><pre> return</pre></code></td></tr><tr><td>116</td><td><code><pre> }</pre></code></td></tr><tr><td>117</td><td><code><pre> source.DeleteAllAssets(utils.Directory)</pre></code></td></tr><tr><td>118</td><td><code><pre> resetRouter()</pre></code></td></tr><tr><td>119</td><td><code><pre> executeResponse(w, r, &#34;settings.html&#34;, core.CoreApp, &#34;/settings&#34;)</pre></code></td></tr><tr><td>120</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_RunHTTPServer">func RunHTTPServer</div><div class="info"><a href="#s_fn_RunHTTPServer">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
<tr><td>43</td><td><code><pre>func RunHTTPServer(ip string, port int) error {</pre></code></td></tr><tr><td>44</td><td><code><pre> host := fmt.Sprintf(&#34;%v:%v&#34;, ip, port)</pre></code></td></tr><tr><td>45</td><td><code><pre> utils.Log(1, &#34;Statup HTTP Server running on http://&#34;+host)</pre></code></td></tr><tr><td>46</td><td><code><pre> //for _, p := range core.CoreApp.AllPlugins {</pre></code></td></tr><tr><td>47</td><td><code><pre> // info := p.GetInfo()</pre></code></td></tr><tr><td>48</td><td><code><pre> // for _, route := range p.Routes() {</pre></code></td></tr><tr><td>49</td><td><code><pre> // path := fmt.Sprintf(&#34;%v&#34;, route.URL)</pre></code></td></tr><tr><td>50</td><td><code><pre> // router.Handle(path, http.HandlerFunc(route.Handler)).Methods(route.Method)</pre></code></td></tr><tr><td>51</td><td><code><pre> // utils.Log(1, fmt.Sprintf(&#34;Added Route %v for plugin %v\n&#34;, path, info.Name))</pre></code></td></tr><tr><td>52</td><td><code><pre> // }</pre></code></td></tr><tr><td>53</td><td><code><pre> //}</pre></code></td></tr><tr><td>54</td><td><code><pre> router = Router()</pre></code></td></tr><tr><td>55</td><td><code><pre> httpServer = &amp;http.Server{</pre></code></td></tr><tr><td>56</td><td><code><pre> Addr: host,</pre></code></td></tr><tr><td>57</td><td><code><pre> WriteTimeout: time.Second * 60,</pre></code></td></tr><tr><td>58</td><td><code><pre> ReadTimeout: time.Second * 60,</pre></code></td></tr><tr><td>59</td><td><code><pre> IdleTimeout: time.Second * 60,</pre></code></td></tr><tr><td>60</td><td><code><pre> Handler: router,</pre></code></td></tr><tr><td>61</td><td><code><pre> }</pre></code></td></tr><tr><td>62</td><td><code><pre> resetCookies()</pre></code></td></tr><tr><td>63</td><td><code><pre> return httpServer.ListenAndServe()</pre></code></td></tr><tr><td>64</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_usersHandler">func usersHandler</div><div class="info"><a href="#s_fn_usersHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/users.go</code>:</p></div><table class="listing">
<tr><td>28</td><td><code><pre>func usersHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>29</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr><td>30</td><td><code><pre> http.Redirect(w, r, &#34;/&#34;, http.StatusSeeOther)</pre></code></td></tr><tr><td>31</td><td><code><pre> return</pre></code></td></tr><tr><td>32</td><td><code><pre> }</pre></code></td></tr><tr><td>33</td><td><code><pre> users, _ := core.SelectAllUsers()</pre></code></td></tr><tr><td>34</td><td><code><pre> executeResponse(w, r, &#34;users.html&#34;, users, nil)</pre></code></td></tr><tr><td>35</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_logsLineHandler">func logsLineHandler</div><div class="info"><a href="#s_fn_logsLineHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/dashboard.go</code>:</p></div><table class="listing">
<tr><td>94</td><td><code><pre>func logsLineHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>95</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr><td>96</td><td><code><pre> w.WriteHeader(http.StatusInternalServerError)</pre></code></td></tr><tr><td>97</td><td><code><pre> return</pre></code></td></tr><tr><td>98</td><td><code><pre> }</pre></code></td></tr><tr><td>99</td><td><code><pre> if lastLine := utils.GetLastLine(); lastLine != nil {</pre></code></td></tr><tr><td>100</td><td><code><pre> w.Write([]byte(lastLine.FormatForHtml()))</pre></code></td></tr><tr><td>101</td><td><code><pre> }</pre></code></td></tr><tr><td>102</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_helpHandler">func helpHandler</div><div class="info"><a href="#s_fn_helpHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/dashboard.go</code>:</p></div><table class="listing">
<tr><td>69</td><td><code><pre>func helpHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>70</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr><td>71</td><td><code><pre> http.Redirect(w, r, &#34;/&#34;, http.StatusSeeOther)</pre></code></td></tr><tr><td>72</td><td><code><pre> return</pre></code></td></tr><tr><td>73</td><td><code><pre> }</pre></code></td></tr><tr><td>74</td><td><code><pre> help := source.HelpMarkdown()</pre></code></td></tr><tr><td>75</td><td><code><pre> executeResponse(w, r, &#34;help.html&#34;, help, nil)</pre></code></td></tr><tr><td>76</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_settingsHandler">func settingsHandler</div><div class="info"><a href="#s_fn_settingsHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/settings.go</code>:</p></div><table class="listing">
<tr><td>30</td><td><code><pre>func settingsHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>31</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr><td>32</td><td><code><pre> http.Redirect(w, r, &#34;/&#34;, http.StatusSeeOther)</pre></code></td></tr><tr><td>33</td><td><code><pre> return</pre></code></td></tr><tr><td>34</td><td><code><pre> }</pre></code></td></tr><tr><td>35</td><td><code><pre> executeResponse(w, r, &#34;settings.html&#34;, core.CoreApp, nil)</pre></code></td></tr><tr><td>36</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_servicesHandler">func servicesHandler</div><div class="info"><a href="#s_fn_servicesHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/services.go</code>:</p></div><table class="listing">
<tr><td>52</td><td><code><pre>func servicesHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>53</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr><td>54</td><td><code><pre> http.Redirect(w, r, &#34;/&#34;, http.StatusSeeOther)</pre></code></td></tr><tr><td>55</td><td><code><pre> return</pre></code></td></tr><tr><td>56</td><td><code><pre> }</pre></code></td></tr><tr><td>57</td><td><code><pre> executeResponse(w, r, &#34;services.html&#34;, core.CoreApp.Services, nil)</pre></code></td></tr><tr><td>58</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_logoutHandler">func logoutHandler</div><div class="info"><a href="#s_fn_logoutHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/dashboard.go</code>:</p></div><table class="listing">
<tr><td>62</td><td><code><pre>func logoutHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>63</td><td><code><pre> session, _ := sessionStore.Get(r, cookieKey)</pre></code></td></tr><tr><td>64</td><td><code><pre> session.Values[&#34;authenticated&#34;] = false</pre></code></td></tr><tr><td>65</td><td><code><pre> session.Save(r, w)</pre></code></td></tr><tr><td>66</td><td><code><pre> http.Redirect(w, r, &#34;/&#34;, http.StatusSeeOther)</pre></code></td></tr><tr><td>67</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_parseGet">func parseGet</div><div class="info"><a href="#s_fn_parseGet">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/settings.go</code>:</p></div><table class="listing">
<tr><td>132</td><td><code><pre>func parseGet(r *http.Request) url.Values {</pre></code></td></tr><tr><td>133</td><td><code><pre> r.ParseForm()</pre></code></td></tr><tr><td>134</td><td><code><pre> return r.Form</pre></code></td></tr><tr><td>135</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_error404Handler">func error404Handler</div><div class="info"><a href="#s_fn_error404Handler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
<tr><td>251</td><td><code><pre>func error404Handler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>252</td><td><code><pre> w.WriteHeader(http.StatusNotFound)</pre></code></td></tr><tr><td>253</td><td><code><pre> executeResponse(w, r, &#34;error_404.html&#34;, nil, nil)</pre></code></td></tr><tr><td>254</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_resetRouter">func resetRouter</div><div class="info"><a href="#s_fn_resetRouter">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/routes.go</code>:</p></div><table class="listing">
<tr><td>119</td><td><code><pre>func resetRouter() {</pre></code></td></tr><tr><td>120</td><td><code><pre> router = Router()</pre></code></td></tr><tr><td>121</td><td><code><pre> httpServer.Handler = router</pre></code></td></tr><tr><td>122</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_parseForm">func parseForm</div><div class="info"><a href="#s_fn_parseForm">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/settings.go</code>:</p></div><table class="listing">
<tr><td>127</td><td><code><pre>func parseForm(r *http.Request) url.Values {</pre></code></td></tr><tr><td>128</td><td><code><pre> r.ParseForm()</pre></code></td></tr><tr><td>129</td><td><code><pre> return r.PostForm</pre></code></td></tr><tr><td>130</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_@126:17">func @126:17</div><div class="info"><a href="#s_fn_@126:17">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
<tr><td>126</td><td><code><pre>func(html string) string {</pre></code></td></tr><tr><td>127</td><td><code><pre> return utils.UnderScoreString(html)</pre></code></td></tr><tr><td>128</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_@129:10">func @129:10</div><div class="info"><a href="#s_fn_@129:10">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
<tr><td>129</td><td><code><pre>func() string {</pre></code></td></tr><tr><td>130</td><td><code><pre> return r.URL.String()</pre></code></td></tr><tr><td>131</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_@138:15">func @138:15</div><div class="info"><a href="#s_fn_@138:15">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
<tr><td>138</td><td><code><pre>func(v interface{}) string {</pre></code></td></tr><tr><td>139</td><td><code><pre> return utils.ToString(v)</pre></code></td></tr><tr><td>140</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_@151:15">func @151:15</div><div class="info"><a href="#s_fn_@151:15">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
<tr><td>151</td><td><code><pre>func(t int64) string {</pre></code></td></tr><tr><td>152</td><td><code><pre> return utils.Timezoner(time.Unix(t, 0), core.CoreApp.Timezone).Format(&#34;Monday, January 02&#34;)</pre></code></td></tr><tr><td>153</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_@88:20">func @88:20</div><div class="info"><a href="#s_fn_@88:20">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
<tr><td>88</td><td><code><pre>func(w http.ResponseWriter, r *http.Request) template.FuncMap {</pre></code></td></tr><tr><td>89</td><td><code><pre> return template.FuncMap{</pre></code></td></tr><tr><td>90</td><td><code><pre> &#34;js&#34;: func(html interface{}) template.JS {</pre></code></td></tr><tr><td>91</td><td><code><pre> return template.JS(utils.ToString(html))</pre></code></td></tr><tr><td>92</td><td><code><pre> },</pre></code></td></tr><tr><td>93</td><td><code><pre> &#34;safe&#34;: func(html string) template.HTML {</pre></code></td></tr><tr><td>94</td><td><code><pre> return template.HTML(html)</pre></code></td></tr><tr><td>95</td><td><code><pre> },</pre></code></td></tr><tr><td>96</td><td><code><pre> &#34;Auth&#34;: func() bool {</pre></code></td></tr><tr><td>97</td><td><code><pre> return IsAuthenticated(r)</pre></code></td></tr><tr><td>98</td><td><code><pre> },</pre></code></td></tr><tr><td>99</td><td><code><pre> &#34;VERSION&#34;: func() string {</pre></code></td></tr><tr><td>100</td><td><code><pre> return core.VERSION</pre></code></td></tr><tr><td>101</td><td><code><pre> },</pre></code></td></tr><tr><td>102</td><td><code><pre> &#34;CoreApp&#34;: func() *core.Core {</pre></code></td></tr><tr><td>103</td><td><code><pre> return core.CoreApp</pre></code></td></tr><tr><td>104</td><td><code><pre> },</pre></code></td></tr><tr><td>105</td><td><code><pre> &#34;Services&#34;: func() []types.ServiceInterface {</pre></code></td></tr><tr><td>106</td><td><code><pre> return core.CoreApp.Services</pre></code></td></tr><tr><td>107</td><td><code><pre> },</pre></code></td></tr><tr><td>108</td><td><code><pre> &#34;USE_CDN&#34;: func() bool {</pre></code></td></tr><tr><td>109</td><td><code><pre> return core.CoreApp.UseCdn</pre></code></td></tr><tr><td>110</td><td><code><pre> },</pre></code></td></tr><tr><td>111</td><td><code><pre> &#34;Type&#34;: func(g interface{}) []string {</pre></code></td></tr><tr><td>112</td><td><code><pre> fooType := reflect.TypeOf(g)</pre></code></td></tr><tr><td>113</td><td><code><pre> var methods []string</pre></code></td></tr><tr><td>114</td><td><code><pre> methods = append(methods, fooType.String())</pre></code></td></tr><tr><td>115</td><td><code><pre> for i := 0; i &lt; fooType.NumMethod(); i++ {</pre></code></td></tr><tr><td>116</td><td><code><pre> method := fooType.Method(i)</pre></code></td></tr><tr><td>117</td><td><code><pre> fmt.Println(method.Name)</pre></code></td></tr><tr><td>118</td><td><code><pre> methods = append(methods, method.Name)</pre></code></td></tr><tr><td>119</td><td><code><pre> }</pre></code></td></tr><tr><td>120</td><td><code><pre> return methods</pre></code></td></tr><tr><td>121</td><td><code><pre> },</pre></code></td></tr><tr><td>122</td><td><code><pre> &#34;ToJSON&#34;: func(g interface{}) template.HTML {</pre></code></td></tr><tr><td>123</td><td><code><pre> data, _ := json.Marshal(g)</pre></code></td></tr><tr><td>124</td><td><code><pre> return template.HTML(string(data))</pre></code></td></tr><tr><td>125</td><td><code><pre> },</pre></code></td></tr><tr><td>126</td><td><code><pre> &#34;underscore&#34;: func(html string) string {</pre></code></td></tr><tr><td>127</td><td><code><pre> return utils.UnderScoreString(html)</pre></code></td></tr><tr><td>128</td><td><code><pre> },</pre></code></td></tr><tr><td>129</td><td><code><pre> &#34;URL&#34;: func() string {</pre></code></td></tr><tr><td>130</td><td><code><pre> return r.URL.String()</pre></code></td></tr><tr><td>131</td><td><code><pre> },</pre></code></td></tr><tr><td>132</td><td><code><pre> &#34;CHART_DATA&#34;: func() string {</pre></code></td></tr><tr><td>133</td><td><code><pre> return &#34;&#34;</pre></code></td></tr><tr><td>134</td><td><code><pre> },</pre></code></td></tr><tr><td>135</td><td><code><pre> &#34;Error&#34;: func() string {</pre></code></td></tr><tr><td>136</td><td><code><pre> return &#34;&#34;</pre></code></td></tr><tr><td>137</td><td><code><pre> },</pre></code></td></tr><tr><td>138</td><td><code><pre> &#34;ToString&#34;: func(v interface{}) string {</pre></code></td></tr><tr><td>139</td><td><code><pre> return utils.ToString(v)</pre></code></td></tr><tr><td>140</td><td><code><pre> },</pre></code></td></tr><tr><td>141</td><td><code><pre> &#34;Ago&#34;: func(t time.Time) string {</pre></code></td></tr><tr><td>142</td><td><code><pre> return utils.Timestamp(t).Ago()</pre></code></td></tr><tr><td>143</td><td><code><pre> },</pre></code></td></tr><tr><td>144</td><td><code><pre> &#34;Duration&#34;: func(t time.Duration) string {</pre></code></td></tr><tr><td>145</td><td><code><pre> duration, _ := time.ParseDuration(fmt.Sprintf(&#34;%vs&#34;, t.Seconds()))</pre></code></td></tr><tr><td>146</td><td><code><pre> return utils.FormatDuration(duration)</pre></code></td></tr><tr><td>147</td><td><code><pre> },</pre></code></td></tr><tr><td>148</td><td><code><pre> &#34;ToUnix&#34;: func(t time.Time) int64 {</pre></code></td></tr><tr><td>149</td><td><code><pre> return t.UTC().Unix()</pre></code></td></tr><tr><td>150</td><td><code><pre> },</pre></code></td></tr><tr><td>151</td><td><code><pre> &#34;FromUnix&#34;: func(t int64) string {</pre></code></td></tr><tr><td>152</td><td><code><pre> return utils.Timezoner(time.Unix(t, 0), core.CoreApp.Timezone).Format(&#34;Monday, January 02&#34;)</pre></code></td></tr><tr><td>153</td><td><code><pre> },</pre></code></td></tr><tr><td>154</td><td><code><pre> &#34;NewService&#34;: func() *types.Service {</pre></code></td></tr><tr><td>155</td><td><code><pre> return new(types.Service)</pre></code></td></tr><tr><td>156</td><td><code><pre> },</pre></code></td></tr><tr><td>157</td><td><code><pre> &#34;NewUser&#34;: func() *types.User {</pre></code></td></tr><tr><td>158</td><td><code><pre> return new(types.User)</pre></code></td></tr><tr><td>159</td><td><code><pre> },</pre></code></td></tr><tr><td>160</td><td><code><pre> &#34;NewCheckin&#34;: func() *types.Checkin {</pre></code></td></tr><tr><td>161</td><td><code><pre> return new(types.Checkin)</pre></code></td></tr><tr><td>162</td><td><code><pre> },</pre></code></td></tr><tr><td>163</td><td><code><pre> }</pre></code></td></tr><tr><td>164</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_@135:12">func @135:12</div><div class="info"><a href="#s_fn_@135:12">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
<tr><td>135</td><td><code><pre>func() string {</pre></code></td></tr><tr><td>136</td><td><code><pre> return &#34;&#34;</pre></code></td></tr><tr><td>137</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_@93:11">func @93:11</div><div class="info"><a href="#s_fn_@93:11">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
<tr><td>93</td><td><code><pre>func(html string) template.HTML {</pre></code></td></tr><tr><td>94</td><td><code><pre> return template.HTML(html)</pre></code></td></tr><tr><td>95</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_@96:11">func @96:11</div><div class="info"><a href="#s_fn_@96:11">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
<tr><td>96</td><td><code><pre>func() bool {</pre></code></td></tr><tr><td>97</td><td><code><pre> return IsAuthenticated(r)</pre></code></td></tr><tr><td>98</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_@99:14">func @99:14</div><div class="info"><a href="#s_fn_@99:14">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
<tr><td>99</td><td><code><pre>func() string {</pre></code></td></tr><tr><td>100</td><td><code><pre> return core.VERSION</pre></code></td></tr><tr><td>101</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_@102:14">func @102:14</div><div class="info"><a href="#s_fn_@102:14">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
<tr><td>102</td><td><code><pre>func() *core.Core {</pre></code></td></tr><tr><td>103</td><td><code><pre> return core.CoreApp</pre></code></td></tr><tr><td>104</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_@105:15">func @105:15</div><div class="info"><a href="#s_fn_@105:15">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
<tr><td>105</td><td><code><pre>func() []types.ServiceInterface {</pre></code></td></tr><tr><td>106</td><td><code><pre> return core.CoreApp.Services</pre></code></td></tr><tr><td>107</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_@108:14">func @108:14</div><div class="info"><a href="#s_fn_@108:14">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
<tr><td>108</td><td><code><pre>func() bool {</pre></code></td></tr><tr><td>109</td><td><code><pre> return core.CoreApp.UseCdn</pre></code></td></tr><tr><td>110</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_@154:17">func @154:17</div><div class="info"><a href="#s_fn_@154:17">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
<tr><td>154</td><td><code><pre>func() *types.Service {</pre></code></td></tr><tr><td>155</td><td><code><pre> return new(types.Service)</pre></code></td></tr><tr><td>156</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_@157:14">func @157:14</div><div class="info"><a href="#s_fn_@157:14">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
<tr><td>157</td><td><code><pre>func() *types.User {</pre></code></td></tr><tr><td>158</td><td><code><pre> return new(types.User)</pre></code></td></tr><tr><td>159</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_saveSettingsHandler">func saveSettingsHandler</div><div class="info"><a href="#s_fn_saveSettingsHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/settings.go</code>:</p></div><table class="listing">
<tr><td>38</td><td><code><pre>func saveSettingsHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>39</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr><td>40</td><td><code><pre> http.Redirect(w, r, &#34;/&#34;, http.StatusSeeOther)</pre></code></td></tr><tr><td>41</td><td><code><pre> return</pre></code></td></tr><tr><td>42</td><td><code><pre> }</pre></code></td></tr><tr><td>43</td><td><code><pre> r.ParseForm()</pre></code></td></tr><tr><td>44</td><td><code><pre> app := core.CoreApp</pre></code></td></tr><tr><td>45</td><td><code><pre> name := r.PostForm.Get(&#34;project&#34;)</pre></code></td></tr><tr><td>46</td><td><code><pre> if name != &#34;&#34; {</pre></code></td></tr><tr><td>47</td><td><code><pre> app.Name = name</pre></code></td></tr><tr><td>48</td><td><code><pre> }</pre></code></td></tr><tr><td>49</td><td><code><pre> description := r.PostForm.Get(&#34;description&#34;)</pre></code></td></tr><tr><td>50</td><td><code><pre> if description != app.Description {</pre></code></td></tr><tr><td>51</td><td><code><pre> app.Description = description</pre></code></td></tr><tr><td>52</td><td><code><pre> }</pre></code></td></tr><tr><td>53</td><td><code><pre> style := r.PostForm.Get(&#34;style&#34;)</pre></code></td></tr><tr><td>54</td><td><code><pre> if style != app.Style {</pre></code></td></tr><tr class="miss"><td>55</td><td><code><pre> app.Style = style</pre></code></td></tr><tr><td>56</td><td><code><pre> }</pre></code></td></tr><tr><td>57</td><td><code><pre> footer := r.PostForm.Get(&#34;footer&#34;)</pre></code></td></tr><tr><td>58</td><td><code><pre> if footer != app.Footer {</pre></code></td></tr><tr><td>59</td><td><code><pre> app.Footer = footer</pre></code></td></tr><tr><td>60</td><td><code><pre> }</pre></code></td></tr><tr><td>61</td><td><code><pre> domain := r.PostForm.Get(&#34;domain&#34;)</pre></code></td></tr><tr><td>62</td><td><code><pre> if domain != app.Domain {</pre></code></td></tr><tr><td>63</td><td><code><pre> app.Domain = domain</pre></code></td></tr><tr><td>64</td><td><code><pre> }</pre></code></td></tr><tr><td>65</td><td><code><pre> timezone := r.PostForm.Get(&#34;timezone&#34;)</pre></code></td></tr><tr><td>66</td><td><code><pre> timeFloat, _ := strconv.ParseFloat(timezone, 10)</pre></code></td></tr><tr><td>67</td><td><code><pre> app.Timezone = float32(timeFloat)</pre></code></td></tr><tr><td>68</td><td><code><pre></pre></code></td></tr><tr><td>69</td><td><code><pre> app.UseCdn = (r.PostForm.Get(&#34;enable_cdn&#34;) == &#34;on&#34;)</pre></code></td></tr><tr><td>70</td><td><code><pre> core.CoreApp, _ = core.UpdateCore(app)</pre></code></td></tr><tr><td>71</td><td><code><pre> //notifiers.OnSettingsSaved(core.CoreApp.ToCore())</pre></code></td></tr><tr><td>72</td><td><code><pre> executeResponse(w, r, &#34;settings.html&#34;, core.CoreApp, &#34;/settings&#34;)</pre></code></td></tr><tr><td>73</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_servicesUpdateHandler">func servicesUpdateHandler</div><div class="info"><a href="#s_fn_servicesUpdateHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/services.go</code>:</p></div><table class="listing">
<tr><td>172</td><td><code><pre>func servicesUpdateHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>173</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr class="miss"><td>174</td><td><code><pre> http.Redirect(w, r, &#34;/&#34;, http.StatusSeeOther)</pre></code></td></tr><tr class="miss"><td>175</td><td><code><pre> return</pre></code></td></tr><tr><td>176</td><td><code><pre> }</pre></code></td></tr><tr><td>177</td><td><code><pre> vars := mux.Vars(r)</pre></code></td></tr><tr><td>178</td><td><code><pre> service := core.SelectService(utils.StringInt(vars[&#34;id&#34;]))</pre></code></td></tr><tr><td>179</td><td><code><pre> r.ParseForm()</pre></code></td></tr><tr><td>180</td><td><code><pre> name := r.PostForm.Get(&#34;name&#34;)</pre></code></td></tr><tr><td>181</td><td><code><pre> domain := r.PostForm.Get(&#34;domain&#34;)</pre></code></td></tr><tr><td>182</td><td><code><pre> method := r.PostForm.Get(&#34;method&#34;)</pre></code></td></tr><tr><td>183</td><td><code><pre> expected := r.PostForm.Get(&#34;expected&#34;)</pre></code></td></tr><tr><td>184</td><td><code><pre> status, _ := strconv.Atoi(r.PostForm.Get(&#34;expected_status&#34;))</pre></code></td></tr><tr><td>185</td><td><code><pre> interval, _ := strconv.Atoi(r.PostForm.Get(&#34;interval&#34;))</pre></code></td></tr><tr><td>186</td><td><code><pre> port, _ := strconv.Atoi(r.PostForm.Get(&#34;port&#34;))</pre></code></td></tr><tr><td>187</td><td><code><pre> timeout, _ := strconv.Atoi(r.PostForm.Get(&#34;timeout&#34;))</pre></code></td></tr><tr><td>188</td><td><code><pre> checkType := r.PostForm.Get(&#34;check_type&#34;)</pre></code></td></tr><tr><td>189</td><td><code><pre> postData := r.PostForm.Get(&#34;post_data&#34;)</pre></code></td></tr><tr><td>190</td><td><code><pre> order, _ := strconv.Atoi(r.PostForm.Get(&#34;order&#34;))</pre></code></td></tr><tr><td>191</td><td><code><pre></pre></code></td></tr><tr><td>192</td><td><code><pre> service.Name = name</pre></code></td></tr><tr><td>193</td><td><code><pre> service.Domain = domain</pre></code></td></tr><tr><td>194</td><td><code><pre> service.Method = method</pre></code></td></tr><tr><td>195</td><td><code><pre> service.ExpectedStatus = status</pre></code></td></tr><tr><td>196</td><td><code><pre> service.Expected = expected</pre></code></td></tr><tr><td>197</td><td><code><pre> service.Interval = interval</pre></code></td></tr><tr><td>198</td><td><code><pre> service.Type = checkType</pre></code></td></tr><tr><td>199</td><td><code><pre> service.Port = port</pre></code></td></tr><tr><td>200</td><td><code><pre> service.PostData = postData</pre></code></td></tr><tr><td>201</td><td><code><pre> service.Timeout = timeout</pre></code></td></tr><tr><td>202</td><td><code><pre> service.Order = order</pre></code></td></tr><tr><td>203</td><td><code><pre></pre></code></td></tr><tr><td>204</td><td><code><pre> service.Update(true)</pre></code></td></tr><tr><td>205</td><td><code><pre> service.Check(true)</pre></code></td></tr><tr><td>206</td><td><code><pre> executeResponse(w, r, &#34;service.html&#34;, service, &#34;/services&#34;)</pre></code></td></tr><tr><td>207</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_loginHandler">func loginHandler</div><div class="info"><a href="#s_fn_loginHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/dashboard.go</code>:</p></div><table class="listing">
<tr><td>42</td><td><code><pre>func loginHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>43</td><td><code><pre> if sessionStore == nil {</pre></code></td></tr><tr class="miss"><td>44</td><td><code><pre> resetCookies()</pre></code></td></tr><tr><td>45</td><td><code><pre> }</pre></code></td></tr><tr><td>46</td><td><code><pre> session, _ := sessionStore.Get(r, cookieKey)</pre></code></td></tr><tr><td>47</td><td><code><pre> r.ParseForm()</pre></code></td></tr><tr><td>48</td><td><code><pre> username := r.PostForm.Get(&#34;username&#34;)</pre></code></td></tr><tr><td>49</td><td><code><pre> password := r.PostForm.Get(&#34;password&#34;)</pre></code></td></tr><tr><td>50</td><td><code><pre> user, auth := core.AuthUser(username, password)</pre></code></td></tr><tr><td>51</td><td><code><pre> if auth {</pre></code></td></tr><tr><td>52</td><td><code><pre> session.Values[&#34;authenticated&#34;] = true</pre></code></td></tr><tr><td>53</td><td><code><pre> session.Values[&#34;user_id&#34;] = user.Id</pre></code></td></tr><tr><td>54</td><td><code><pre> session.Save(r, w)</pre></code></td></tr><tr><td>55</td><td><code><pre> http.Redirect(w, r, &#34;/dashboard&#34;, http.StatusSeeOther)</pre></code></td></tr><tr><td>56</td><td><code><pre> } else {</pre></code></td></tr><tr><td>57</td><td><code><pre> err := core.ErrorResponse{Error: &#34;Incorrect login information submitted, try again.&#34;}</pre></code></td></tr><tr><td>58</td><td><code><pre> executeResponse(w, r, &#34;login.html&#34;, err, nil)</pre></code></td></tr><tr><td>59</td><td><code><pre> }</pre></code></td></tr><tr><td>60</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_createUserHandler">func createUserHandler</div><div class="info"><a href="#s_fn_createUserHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/users.go</code>:</p></div><table class="listing">
<tr><td>75</td><td><code><pre>func createUserHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>76</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr><td>77</td><td><code><pre> http.Redirect(w, r, &#34;/&#34;, http.StatusSeeOther)</pre></code></td></tr><tr><td>78</td><td><code><pre> return</pre></code></td></tr><tr><td>79</td><td><code><pre> }</pre></code></td></tr><tr><td>80</td><td><code><pre> r.ParseForm()</pre></code></td></tr><tr><td>81</td><td><code><pre> username := r.PostForm.Get(&#34;username&#34;)</pre></code></td></tr><tr><td>82</td><td><code><pre> password := r.PostForm.Get(&#34;password&#34;)</pre></code></td></tr><tr><td>83</td><td><code><pre> email := r.PostForm.Get(&#34;email&#34;)</pre></code></td></tr><tr><td>84</td><td><code><pre> admin := r.PostForm.Get(&#34;admin&#34;)</pre></code></td></tr><tr><td>85</td><td><code><pre></pre></code></td></tr><tr><td>86</td><td><code><pre> user := core.ReturnUser(&amp;types.User{</pre></code></td></tr><tr><td>87</td><td><code><pre> Username: username,</pre></code></td></tr><tr><td>88</td><td><code><pre> Password: password,</pre></code></td></tr><tr><td>89</td><td><code><pre> Email: email,</pre></code></td></tr><tr><td>90</td><td><code><pre> Admin: (admin == &#34;on&#34;),</pre></code></td></tr><tr><td>91</td><td><code><pre> })</pre></code></td></tr><tr><td>92</td><td><code><pre> _, err := user.Create()</pre></code></td></tr><tr><td>93</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>94</td><td><code><pre> utils.Log(3, err)</pre></code></td></tr><tr><td>95</td><td><code><pre> }</pre></code></td></tr><tr><td>96</td><td><code><pre> //notifiers.OnNewUser(user)</pre></code></td></tr><tr><td>97</td><td><code><pre> executeResponse(w, r, &#34;users.html&#34;, user, &#34;/users&#34;)</pre></code></td></tr><tr><td>98</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_createServiceHandler">func createServiceHandler</div><div class="info"><a href="#s_fn_createServiceHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/services.go</code>:</p></div><table class="listing">
<tr><td>81</td><td><code><pre>func createServiceHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>82</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr><td>83</td><td><code><pre> http.Redirect(w, r, &#34;/&#34;, http.StatusSeeOther)</pre></code></td></tr><tr><td>84</td><td><code><pre> return</pre></code></td></tr><tr><td>85</td><td><code><pre> }</pre></code></td></tr><tr><td>86</td><td><code><pre> r.ParseForm()</pre></code></td></tr><tr><td>87</td><td><code><pre> name := r.PostForm.Get(&#34;name&#34;)</pre></code></td></tr><tr><td>88</td><td><code><pre> domain := r.PostForm.Get(&#34;domain&#34;)</pre></code></td></tr><tr><td>89</td><td><code><pre> method := r.PostForm.Get(&#34;method&#34;)</pre></code></td></tr><tr><td>90</td><td><code><pre> expected := r.PostForm.Get(&#34;expected&#34;)</pre></code></td></tr><tr><td>91</td><td><code><pre> status, _ := strconv.Atoi(r.PostForm.Get(&#34;expected_status&#34;))</pre></code></td></tr><tr><td>92</td><td><code><pre> interval, _ := strconv.Atoi(r.PostForm.Get(&#34;interval&#34;))</pre></code></td></tr><tr><td>93</td><td><code><pre> port, _ := strconv.Atoi(r.PostForm.Get(&#34;port&#34;))</pre></code></td></tr><tr><td>94</td><td><code><pre> timeout, _ := strconv.Atoi(r.PostForm.Get(&#34;timeout&#34;))</pre></code></td></tr><tr><td>95</td><td><code><pre> checkType := r.PostForm.Get(&#34;check_type&#34;)</pre></code></td></tr><tr><td>96</td><td><code><pre> postData := r.PostForm.Get(&#34;post_data&#34;)</pre></code></td></tr><tr><td>97</td><td><code><pre> order, _ := strconv.Atoi(r.PostForm.Get(&#34;order&#34;))</pre></code></td></tr><tr><td>98</td><td><code><pre></pre></code></td></tr><tr><td>99</td><td><code><pre> if checkType == &#34;http&#34; &amp;&amp; status == 0 {</pre></code></td></tr><tr class="miss"><td>100</td><td><code><pre> status = 200</pre></code></td></tr><tr><td>101</td><td><code><pre> }</pre></code></td></tr><tr><td>102</td><td><code><pre></pre></code></td></tr><tr><td>103</td><td><code><pre> service := core.ReturnService(&amp;types.Service{</pre></code></td></tr><tr><td>104</td><td><code><pre> Name: name,</pre></code></td></tr><tr><td>105</td><td><code><pre> Domain: domain,</pre></code></td></tr><tr><td>106</td><td><code><pre> Method: method,</pre></code></td></tr><tr><td>107</td><td><code><pre> Expected: expected,</pre></code></td></tr><tr><td>108</td><td><code><pre> ExpectedStatus: status,</pre></code></td></tr><tr><td>109</td><td><code><pre> Interval: interval,</pre></code></td></tr><tr><td>110</td><td><code><pre> Type: checkType,</pre></code></td></tr><tr><td>111</td><td><code><pre> Port: port,</pre></code></td></tr><tr><td>112</td><td><code><pre> PostData: postData,</pre></code></td></tr><tr><td>113</td><td><code><pre> Timeout: timeout,</pre></code></td></tr><tr><td>114</td><td><code><pre> Order: order,</pre></code></td></tr><tr><td>115</td><td><code><pre> })</pre></code></td></tr><tr><td>116</td><td><code><pre> _, err := service.Create(true)</pre></code></td></tr><tr><td>117</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>118</td><td><code><pre> utils.Log(3, fmt.Sprintf(&#34;Error starting %v check routine. %v&#34;, service.Name, err))</pre></code></td></tr><tr><td>119</td><td><code><pre> }</pre></code></td></tr><tr><td>120</td><td><code><pre> //notifiers.OnNewService(core.ReturnService(service.Service))</pre></code></td></tr><tr><td>121</td><td><code><pre> executeResponse(w, r, &#34;services.html&#34;, core.CoreApp.Services, &#34;/services&#34;)</pre></code></td></tr><tr><td>122</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_servicesViewHandler">func servicesViewHandler</div><div class="info"><a href="#s_fn_servicesViewHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/services.go</code>:</p></div><table class="listing">
<tr><td>139</td><td><code><pre>func servicesViewHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>140</td><td><code><pre> vars := mux.Vars(r)</pre></code></td></tr><tr><td>141</td><td><code><pre> fields := parseGet(r)</pre></code></td></tr><tr><td>142</td><td><code><pre> startField := utils.StringInt(fields.Get(&#34;start&#34;))</pre></code></td></tr><tr><td>143</td><td><code><pre> endField := utils.StringInt(fields.Get(&#34;end&#34;))</pre></code></td></tr><tr><td>144</td><td><code><pre> serv := core.SelectService(utils.StringInt(vars[&#34;id&#34;]))</pre></code></td></tr><tr><td>145</td><td><code><pre> if serv == nil {</pre></code></td></tr><tr><td>146</td><td><code><pre> w.WriteHeader(http.StatusNotFound)</pre></code></td></tr><tr><td>147</td><td><code><pre> return</pre></code></td></tr><tr><td>148</td><td><code><pre> }</pre></code></td></tr><tr><td>149</td><td><code><pre></pre></code></td></tr><tr><td>150</td><td><code><pre> end := time.Now().UTC()</pre></code></td></tr><tr><td>151</td><td><code><pre> start := end.Add((-24 * 7) * time.Hour).UTC()</pre></code></td></tr><tr><td>152</td><td><code><pre></pre></code></td></tr><tr><td>153</td><td><code><pre> if startField != 0 {</pre></code></td></tr><tr class="miss"><td>154</td><td><code><pre> start = time.Unix(startField, 0)</pre></code></td></tr><tr><td>155</td><td><code><pre> }</pre></code></td></tr><tr><td>156</td><td><code><pre> if endField != 0 {</pre></code></td></tr><tr class="miss"><td>157</td><td><code><pre> end = time.Unix(endField, 0)</pre></code></td></tr><tr><td>158</td><td><code><pre> }</pre></code></td></tr><tr><td>159</td><td><code><pre></pre></code></td></tr><tr><td>160</td><td><code><pre> data := core.GraphDataRaw(serv, start, end, &#34;hour&#34;, &#34;latency&#34;)</pre></code></td></tr><tr><td>161</td><td><code><pre></pre></code></td></tr><tr><td>162</td><td><code><pre> out := struct {</pre></code></td></tr><tr><td>163</td><td><code><pre> Service *core.Service</pre></code></td></tr><tr><td>164</td><td><code><pre> Start int64</pre></code></td></tr><tr><td>165</td><td><code><pre> End int64</pre></code></td></tr><tr><td>166</td><td><code><pre> Data string</pre></code></td></tr><tr><td>167</td><td><code><pre> }{serv, start.Unix(), end.Unix(), data.ToString()}</pre></code></td></tr><tr><td>168</td><td><code><pre></pre></code></td></tr><tr><td>169</td><td><code><pre> executeResponse(w, r, &#34;service.html&#34;, out, nil)</pre></code></td></tr><tr><td>170</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_setupHandler">func setupHandler</div><div class="info"><a href="#s_fn_setupHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/setup.go</code>:</p></div><table class="listing">
<tr><td>27</td><td><code><pre>func setupHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>28</td><td><code><pre> if core.CoreApp.Services != nil {</pre></code></td></tr><tr><td>29</td><td><code><pre> http.Redirect(w, r, &#34;/&#34;, http.StatusSeeOther)</pre></code></td></tr><tr><td>30</td><td><code><pre> return</pre></code></td></tr><tr><td>31</td><td><code><pre> }</pre></code></td></tr><tr><td>32</td><td><code><pre> w.WriteHeader(http.StatusOK)</pre></code></td></tr><tr><td>33</td><td><code><pre> var data interface{}</pre></code></td></tr><tr><td>34</td><td><code><pre> if os.Getenv(&#34;DB_CONN&#34;) != &#34;&#34; {</pre></code></td></tr><tr class="miss"><td>35</td><td><code><pre> data, _ = core.LoadUsingEnv()</pre></code></td></tr><tr><td>36</td><td><code><pre> }</pre></code></td></tr><tr><td>37</td><td><code><pre> executeResponse(w, r, &#34;setup.html&#34;, data, nil)</pre></code></td></tr><tr><td>38</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_saveNotificationHandler">func saveNotificationHandler</div><div class="info"><a href="#s_fn_saveNotificationHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/settings.go</code>:</p></div><table class="listing">
<tr><td>137</td><td><code><pre>func saveNotificationHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>138</td><td><code><pre> var err error</pre></code></td></tr><tr><td>139</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr><td>140</td><td><code><pre> http.Redirect(w, r, &#34;/&#34;, http.StatusSeeOther)</pre></code></td></tr><tr><td>141</td><td><code><pre> return</pre></code></td></tr><tr><td>142</td><td><code><pre> }</pre></code></td></tr><tr><td>143</td><td><code><pre> form := parseForm(r)</pre></code></td></tr><tr><td>144</td><td><code><pre> vars := mux.Vars(r)</pre></code></td></tr><tr><td>145</td><td><code><pre> method := vars[&#34;method&#34;]</pre></code></td></tr><tr><td>146</td><td><code><pre> enabled := form.Get(&#34;enable&#34;)</pre></code></td></tr><tr><td>147</td><td><code><pre> host := form.Get(&#34;host&#34;)</pre></code></td></tr><tr><td>148</td><td><code><pre> port := int(utils.StringInt(form.Get(&#34;port&#34;)))</pre></code></td></tr><tr><td>149</td><td><code><pre> username := form.Get(&#34;username&#34;)</pre></code></td></tr><tr><td>150</td><td><code><pre> password := form.Get(&#34;password&#34;)</pre></code></td></tr><tr><td>151</td><td><code><pre> var1 := form.Get(&#34;var1&#34;)</pre></code></td></tr><tr><td>152</td><td><code><pre> var2 := form.Get(&#34;var2&#34;)</pre></code></td></tr><tr><td>153</td><td><code><pre> apiKey := form.Get(&#34;api_key&#34;)</pre></code></td></tr><tr><td>154</td><td><code><pre> apiSecret := form.Get(&#34;api_secret&#34;)</pre></code></td></tr><tr><td>155</td><td><code><pre> limits := int(utils.StringInt(form.Get(&#34;limits&#34;)))</pre></code></td></tr><tr><td>156</td><td><code><pre></pre></code></td></tr><tr><td>157</td><td><code><pre> notifer, notif, err := notifier.SelectNotifier(method)</pre></code></td></tr><tr><td>158</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>159</td><td><code><pre> utils.Log(3, fmt.Sprintf(&#34;issue saving notifier %v: %v&#34;, method, err))</pre></code></td></tr><tr class="miss"><td>160</td><td><code><pre> executeResponse(w, r, &#34;settings.html&#34;, core.CoreApp, &#34;/settings&#34;)</pre></code></td></tr><tr class="miss"><td>161</td><td><code><pre> return</pre></code></td></tr><tr><td>162</td><td><code><pre> }</pre></code></td></tr><tr><td>163</td><td><code><pre></pre></code></td></tr><tr><td>164</td><td><code><pre> if host != &#34;&#34; {</pre></code></td></tr><tr><td>165</td><td><code><pre> notifer.Host = host</pre></code></td></tr><tr><td>166</td><td><code><pre> }</pre></code></td></tr><tr><td>167</td><td><code><pre> if port != 0 {</pre></code></td></tr><tr><td>168</td><td><code><pre> notifer.Port = port</pre></code></td></tr><tr><td>169</td><td><code><pre> }</pre></code></td></tr><tr><td>170</td><td><code><pre> if username != &#34;&#34; {</pre></code></td></tr><tr><td>171</td><td><code><pre> notifer.Username = username</pre></code></td></tr><tr><td>172</td><td><code><pre> }</pre></code></td></tr><tr><td>173</td><td><code><pre> if password != &#34;&#34; &amp;&amp; password != &#34;##########&#34; {</pre></code></td></tr><tr><td>174</td><td><code><pre> notifer.Password = password</pre></code></td></tr><tr><td>175</td><td><code><pre> }</pre></code></td></tr><tr><td>176</td><td><code><pre> if var1 != &#34;&#34; {</pre></code></td></tr><tr><td>177</td><td><code><pre> notifer.Var1 = var1</pre></code></td></tr><tr><td>178</td><td><code><pre> }</pre></code></td></tr><tr><td>179</td><td><code><pre> if var2 != &#34;&#34; {</pre></code></td></tr><tr><td>180</td><td><code><pre> notifer.Var2 = var2</pre></code></td></tr><tr><td>181</td><td><code><pre> }</pre></code></td></tr><tr><td>182</td><td><code><pre> if apiKey != &#34;&#34; {</pre></code></td></tr><tr class="miss"><td>183</td><td><code><pre> notifer.ApiKey = apiKey</pre></code></td></tr><tr><td>184</td><td><code><pre> }</pre></code></td></tr><tr><td>185</td><td><code><pre> if apiSecret != &#34;&#34; {</pre></code></td></tr><tr class="miss"><td>186</td><td><code><pre> notifer.ApiSecret = apiSecret</pre></code></td></tr><tr><td>187</td><td><code><pre> }</pre></code></td></tr><tr><td>188</td><td><code><pre> if limits != 0 {</pre></code></td></tr><tr><td>189</td><td><code><pre> notifer.Limits = limits</pre></code></td></tr><tr><td>190</td><td><code><pre> }</pre></code></td></tr><tr><td>191</td><td><code><pre> notifer.Enabled = enabled == &#34;on&#34;</pre></code></td></tr><tr><td>192</td><td><code><pre> _, err = notifier.Update(notif, notifer)</pre></code></td></tr><tr><td>193</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>194</td><td><code><pre> utils.Log(3, fmt.Sprintf(&#34;issue updating notifier: %v&#34;, err))</pre></code></td></tr><tr><td>195</td><td><code><pre> }</pre></code></td></tr><tr><td>196</td><td><code><pre> notifier.OnSave(notifer.Method)</pre></code></td></tr><tr><td>197</td><td><code><pre> executeResponse(w, r, &#34;settings.html&#34;, core.CoreApp, &#34;/settings&#34;)</pre></code></td></tr><tr><td>198</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_apiIndexHandler">func apiIndexHandler</div><div class="info"><a href="#s_fn_apiIndexHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/api.go</code>:</p></div><table class="listing">
<tr><td>36</td><td><code><pre>func apiIndexHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>37</td><td><code><pre> if !isAPIAuthorized(r) {</pre></code></td></tr><tr class="miss"><td>38</td><td><code><pre> http.Error(w, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized)</pre></code></td></tr><tr class="miss"><td>39</td><td><code><pre> return</pre></code></td></tr><tr><td>40</td><td><code><pre> }</pre></code></td></tr><tr><td>41</td><td><code><pre> var out core.Core</pre></code></td></tr><tr><td>42</td><td><code><pre> out = *core.CoreApp</pre></code></td></tr><tr><td>43</td><td><code><pre> var services []types.ServiceInterface</pre></code></td></tr><tr><td>44</td><td><code><pre> for _, s := range out.Services {</pre></code></td></tr><tr><td>45</td><td><code><pre> service := s.Select()</pre></code></td></tr><tr><td>46</td><td><code><pre> service.Failures = nil</pre></code></td></tr><tr><td>47</td><td><code><pre> services = append(services, core.ReturnService(service))</pre></code></td></tr><tr><td>48</td><td><code><pre> }</pre></code></td></tr><tr><td>49</td><td><code><pre> out.Services = services</pre></code></td></tr><tr><td>50</td><td><code><pre> w.Header().Set(&#34;Content-Type&#34;, &#34;application/json&#34;)</pre></code></td></tr><tr><td>51</td><td><code><pre> json.NewEncoder(w).Encode(out)</pre></code></td></tr><tr><td>52</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_apiServiceDataHandler">func apiServiceDataHandler</div><div class="info"><a href="#s_fn_apiServiceDataHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/api.go</code>:</p></div><table class="listing">
<tr><td>81</td><td><code><pre>func apiServiceDataHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>82</td><td><code><pre> vars := mux.Vars(r)</pre></code></td></tr><tr><td>83</td><td><code><pre> service := core.SelectService(utils.StringInt(vars[&#34;id&#34;]))</pre></code></td></tr><tr><td>84</td><td><code><pre> if service == nil {</pre></code></td></tr><tr class="miss"><td>85</td><td><code><pre> http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound)</pre></code></td></tr><tr class="miss"><td>86</td><td><code><pre> return</pre></code></td></tr><tr><td>87</td><td><code><pre> }</pre></code></td></tr><tr><td>88</td><td><code><pre> fields := parseGet(r)</pre></code></td></tr><tr><td>89</td><td><code><pre> grouping := fields.Get(&#34;group&#34;)</pre></code></td></tr><tr><td>90</td><td><code><pre> startField := utils.StringInt(fields.Get(&#34;start&#34;))</pre></code></td></tr><tr><td>91</td><td><code><pre> endField := utils.StringInt(fields.Get(&#34;end&#34;))</pre></code></td></tr><tr><td>92</td><td><code><pre> obj := core.GraphDataRaw(service, time.Unix(startField, 0), time.Unix(endField, 0), grouping, &#34;latency&#34;)</pre></code></td></tr><tr><td>93</td><td><code><pre></pre></code></td></tr><tr><td>94</td><td><code><pre> w.Header().Set(&#34;Content-Type&#34;, &#34;application/json&#34;)</pre></code></td></tr><tr><td>95</td><td><code><pre> json.NewEncoder(w).Encode(obj)</pre></code></td></tr><tr><td>96</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_apiAllServicesHandler">func apiAllServicesHandler</div><div class="info"><a href="#s_fn_apiAllServicesHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/api.go</code>:</p></div><table class="listing">
<tr><td>205</td><td><code><pre>func apiAllServicesHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>206</td><td><code><pre> if !isAPIAuthorized(r) {</pre></code></td></tr><tr class="miss"><td>207</td><td><code><pre> http.Error(w, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized)</pre></code></td></tr><tr class="miss"><td>208</td><td><code><pre> return</pre></code></td></tr><tr><td>209</td><td><code><pre> }</pre></code></td></tr><tr><td>210</td><td><code><pre> allServices := core.CoreApp.Services</pre></code></td></tr><tr><td>211</td><td><code><pre> var services []types.ServiceInterface</pre></code></td></tr><tr><td>212</td><td><code><pre> for _, s := range allServices {</pre></code></td></tr><tr><td>213</td><td><code><pre> service := s.Select()</pre></code></td></tr><tr><td>214</td><td><code><pre> service.Failures = nil</pre></code></td></tr><tr><td>215</td><td><code><pre> services = append(services, core.ReturnService(service))</pre></code></td></tr><tr><td>216</td><td><code><pre> }</pre></code></td></tr><tr><td>217</td><td><code><pre> w.Header().Set(&#34;Content-Type&#34;, &#34;application/json&#34;)</pre></code></td></tr><tr><td>218</td><td><code><pre> json.NewEncoder(w).Encode(services)</pre></code></td></tr><tr><td>219</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_executeResponse">func executeResponse</div><div class="info"><a href="#s_fn_executeResponse">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
<tr><td>169</td><td><code><pre>func executeResponse(w http.ResponseWriter, r *http.Request, file string, data interface{}, redirect interface{}) {</pre></code></td></tr><tr><td>170</td><td><code><pre> utils.Http(r)</pre></code></td></tr><tr><td>171</td><td><code><pre> if url, ok := redirect.(string); ok {</pre></code></td></tr><tr><td>172</td><td><code><pre> http.Redirect(w, r, url, http.StatusSeeOther)</pre></code></td></tr><tr><td>173</td><td><code><pre> return</pre></code></td></tr><tr><td>174</td><td><code><pre> }</pre></code></td></tr><tr><td>175</td><td><code><pre></pre></code></td></tr><tr><td>176</td><td><code><pre> templates := []string{&#34;base.html&#34;, &#34;head.html&#34;, &#34;nav.html&#34;, &#34;footer.html&#34;, &#34;scripts.html&#34;, &#34;form_service.html&#34;, &#34;form_notifier.html&#34;, &#34;form_user.html&#34;, &#34;form_checkin.html&#34;}</pre></code></td></tr><tr><td>177</td><td><code><pre></pre></code></td></tr><tr><td>178</td><td><code><pre> javascripts := []string{&#34;charts.js&#34;, &#34;chart_index.js&#34;}</pre></code></td></tr><tr><td>179</td><td><code><pre></pre></code></td></tr><tr><td>180</td><td><code><pre> render, err := source.TmplBox.String(file)</pre></code></td></tr><tr><td>181</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>182</td><td><code><pre> utils.Log(4, err)</pre></code></td></tr><tr><td>183</td><td><code><pre> }</pre></code></td></tr><tr><td>184</td><td><code><pre></pre></code></td></tr><tr><td>185</td><td><code><pre> // setup the main template and handler funcs</pre></code></td></tr><tr><td>186</td><td><code><pre> t := template.New(&#34;main&#34;)</pre></code></td></tr><tr><td>187</td><td><code><pre> t.Funcs(handlerFuncs(w, r))</pre></code></td></tr><tr><td>188</td><td><code><pre> t, err = t.Parse(mainTmpl)</pre></code></td></tr><tr><td>189</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>190</td><td><code><pre> utils.Log(4, err)</pre></code></td></tr><tr><td>191</td><td><code><pre> }</pre></code></td></tr><tr><td>192</td><td><code><pre></pre></code></td></tr><tr><td>193</td><td><code><pre> // render all templates</pre></code></td></tr><tr><td>194</td><td><code><pre> for _, temp := range templates {</pre></code></td></tr><tr><td>195</td><td><code><pre> tmp, _ := source.TmplBox.String(temp)</pre></code></td></tr><tr><td>196</td><td><code><pre> t, err = t.Parse(tmp)</pre></code></td></tr><tr><td>197</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>198</td><td><code><pre> utils.Log(4, err)</pre></code></td></tr><tr><td>199</td><td><code><pre> }</pre></code></td></tr><tr><td>200</td><td><code><pre> }</pre></code></td></tr><tr><td>201</td><td><code><pre></pre></code></td></tr><tr><td>202</td><td><code><pre> // render all javascript files</pre></code></td></tr><tr><td>203</td><td><code><pre> for _, temp := range javascripts {</pre></code></td></tr><tr><td>204</td><td><code><pre> tmp, _ := source.JsBox.String(temp)</pre></code></td></tr><tr><td>205</td><td><code><pre> t, err = t.Parse(tmp)</pre></code></td></tr><tr><td>206</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>207</td><td><code><pre> utils.Log(4, err)</pre></code></td></tr><tr><td>208</td><td><code><pre> }</pre></code></td></tr><tr><td>209</td><td><code><pre> }</pre></code></td></tr><tr><td>210</td><td><code><pre></pre></code></td></tr><tr><td>211</td><td><code><pre> // render the page requested</pre></code></td></tr><tr><td>212</td><td><code><pre> _, err = t.Parse(render)</pre></code></td></tr><tr><td>213</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>214</td><td><code><pre> utils.Log(4, err)</pre></code></td></tr><tr><td>215</td><td><code><pre> }</pre></code></td></tr><tr><td>216</td><td><code><pre></pre></code></td></tr><tr><td>217</td><td><code><pre> // execute the template</pre></code></td></tr><tr><td>218</td><td><code><pre> err = t.Execute(w, data)</pre></code></td></tr><tr><td>219</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>220</td><td><code><pre> utils.Log(4, err)</pre></code></td></tr><tr><td>221</td><td><code><pre> }</pre></code></td></tr><tr><td>222</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_servicesDeleteHandler">func servicesDeleteHandler</div><div class="info"><a href="#s_fn_servicesDeleteHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/services.go</code>:</p></div><table class="listing">
<tr><td>124</td><td><code><pre>func servicesDeleteHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>125</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr><td>126</td><td><code><pre> http.Redirect(w, r, &#34;/&#34;, http.StatusSeeOther)</pre></code></td></tr><tr><td>127</td><td><code><pre> return</pre></code></td></tr><tr><td>128</td><td><code><pre> }</pre></code></td></tr><tr><td>129</td><td><code><pre> vars := mux.Vars(r)</pre></code></td></tr><tr><td>130</td><td><code><pre> service := core.SelectService(utils.StringInt(vars[&#34;id&#34;]))</pre></code></td></tr><tr><td>131</td><td><code><pre> if service == nil {</pre></code></td></tr><tr class="miss"><td>132</td><td><code><pre> w.WriteHeader(http.StatusNotFound)</pre></code></td></tr><tr class="miss"><td>133</td><td><code><pre> return</pre></code></td></tr><tr><td>134</td><td><code><pre> }</pre></code></td></tr><tr><td>135</td><td><code><pre> service.Delete()</pre></code></td></tr><tr><td>136</td><td><code><pre> executeResponse(w, r, &#34;services.html&#34;, core.CoreApp.Services, &#34;/services&#34;)</pre></code></td></tr><tr><td>137</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_usersDeleteHandler">func usersDeleteHandler</div><div class="info"><a href="#s_fn_usersDeleteHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/users.go</code>:</p></div><table class="listing">
<tr><td>100</td><td><code><pre>func usersDeleteHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>101</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr><td>102</td><td><code><pre> http.Redirect(w, r, &#34;/&#34;, http.StatusSeeOther)</pre></code></td></tr><tr><td>103</td><td><code><pre> return</pre></code></td></tr><tr><td>104</td><td><code><pre> }</pre></code></td></tr><tr><td>105</td><td><code><pre> vars := mux.Vars(r)</pre></code></td></tr><tr><td>106</td><td><code><pre> id, _ := strconv.Atoi(vars[&#34;id&#34;])</pre></code></td></tr><tr><td>107</td><td><code><pre> user, _ := core.SelectUser(int64(id))</pre></code></td></tr><tr><td>108</td><td><code><pre></pre></code></td></tr><tr><td>109</td><td><code><pre> users, _ := core.SelectAllUsers()</pre></code></td></tr><tr><td>110</td><td><code><pre> if len(users) == 1 {</pre></code></td></tr><tr class="miss"><td>111</td><td><code><pre> utils.Log(2, &#34;cannot delete the only user in the system&#34;)</pre></code></td></tr><tr class="miss"><td>112</td><td><code><pre> http.Redirect(w, r, &#34;/users&#34;, http.StatusSeeOther)</pre></code></td></tr><tr class="miss"><td>113</td><td><code><pre> return</pre></code></td></tr><tr><td>114</td><td><code><pre> }</pre></code></td></tr><tr><td>115</td><td><code><pre> user.Delete()</pre></code></td></tr><tr><td>116</td><td><code><pre> http.Redirect(w, r, &#34;/users&#34;, http.StatusSeeOther)</pre></code></td></tr><tr><td>117</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_resetCookies">func resetCookies</div><div class="info"><a href="#s_fn_resetCookies">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/routes.go</code>:</p></div><table class="listing">
<tr><td>124</td><td><code><pre>func resetCookies() {</pre></code></td></tr><tr><td>125</td><td><code><pre> if core.CoreApp != nil {</pre></code></td></tr><tr><td>126</td><td><code><pre> cookie := fmt.Sprintf(&#34;%v_%v&#34;, core.CoreApp.ApiSecret, time.Now().Nanosecond())</pre></code></td></tr><tr><td>127</td><td><code><pre> sessionStore = sessions.NewCookieStore([]byte(cookie))</pre></code></td></tr><tr><td>128</td><td><code><pre> } else {</pre></code></td></tr><tr class="miss"><td>129</td><td><code><pre> sessionStore = sessions.NewCookieStore([]byte(&#34;secretinfo&#34;))</pre></code></td></tr><tr><td>130</td><td><code><pre> }</pre></code></td></tr><tr><td>131</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_executeJSResponse">func executeJSResponse</div><div class="info"><a href="#s_fn_executeJSResponse">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
<tr><td>225</td><td><code><pre>func executeJSResponse(w http.ResponseWriter, r *http.Request, file string, data interface{}) {</pre></code></td></tr><tr><td>226</td><td><code><pre> render, err := source.JsBox.String(file)</pre></code></td></tr><tr><td>227</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>228</td><td><code><pre> utils.Log(4, err)</pre></code></td></tr><tr><td>229</td><td><code><pre> }</pre></code></td></tr><tr><td>230</td><td><code><pre> t := template.New(&#34;charts&#34;)</pre></code></td></tr><tr><td>231</td><td><code><pre> t.Funcs(template.FuncMap{</pre></code></td></tr><tr><td>232</td><td><code><pre> &#34;safe&#34;: func(html string) template.HTML {</pre></code></td></tr><tr><td>233</td><td><code><pre> return template.HTML(html)</pre></code></td></tr><tr><td>234</td><td><code><pre> },</pre></code></td></tr><tr><td>235</td><td><code><pre> &#34;Services&#34;: func() []types.ServiceInterface {</pre></code></td></tr><tr><td>236</td><td><code><pre> return core.CoreApp.Services</pre></code></td></tr><tr><td>237</td><td><code><pre> },</pre></code></td></tr><tr><td>238</td><td><code><pre> })</pre></code></td></tr><tr><td>239</td><td><code><pre> _, err = t.Parse(render)</pre></code></td></tr><tr><td>240</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>241</td><td><code><pre> utils.Log(4, err)</pre></code></td></tr><tr><td>242</td><td><code><pre> }</pre></code></td></tr><tr><td>243</td><td><code><pre></pre></code></td></tr><tr><td>244</td><td><code><pre> err = t.Execute(w, data)</pre></code></td></tr><tr><td>245</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>246</td><td><code><pre> utils.Log(4, err)</pre></code></td></tr><tr><td>247</td><td><code><pre> }</pre></code></td></tr><tr><td>248</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_reorderServiceHandler">func reorderServiceHandler</div><div class="info"><a href="#s_fn_reorderServiceHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/services.go</code>:</p></div><table class="listing">
<tr><td>65</td><td><code><pre>func reorderServiceHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>66</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr><td>67</td><td><code><pre> http.Redirect(w, r, &#34;/&#34;, http.StatusSeeOther)</pre></code></td></tr><tr><td>68</td><td><code><pre> return</pre></code></td></tr><tr><td>69</td><td><code><pre> }</pre></code></td></tr><tr><td>70</td><td><code><pre> var newOrder []*serviceOrder</pre></code></td></tr><tr><td>71</td><td><code><pre> decoder := json.NewDecoder(r.Body)</pre></code></td></tr><tr><td>72</td><td><code><pre> decoder.Decode(&amp;newOrder)</pre></code></td></tr><tr><td>73</td><td><code><pre> for _, s := range newOrder {</pre></code></td></tr><tr class="miss"><td>74</td><td><code><pre> service := core.SelectService(s.Id)</pre></code></td></tr><tr class="miss"><td>75</td><td><code><pre> service.Order = s.Order</pre></code></td></tr><tr class="miss"><td>76</td><td><code><pre> service.Update(false)</pre></code></td></tr><tr><td>77</td><td><code><pre> }</pre></code></td></tr><tr><td>78</td><td><code><pre> w.WriteHeader(http.StatusOK)</pre></code></td></tr><tr><td>79</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_saveAssetsHandler">func saveAssetsHandler</div><div class="info"><a href="#s_fn_saveAssetsHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/settings.go</code>:</p></div><table class="listing">
<tr><td>92</td><td><code><pre>func saveAssetsHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>93</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr><td>94</td><td><code><pre> http.Redirect(w, r, &#34;/&#34;, http.StatusSeeOther)</pre></code></td></tr><tr><td>95</td><td><code><pre> return</pre></code></td></tr><tr><td>96</td><td><code><pre> }</pre></code></td></tr><tr><td>97</td><td><code><pre> dir := utils.Directory</pre></code></td></tr><tr><td>98</td><td><code><pre> err := source.CreateAllAssets(dir)</pre></code></td></tr><tr><td>99</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>100</td><td><code><pre> utils.Log(3, err)</pre></code></td></tr><tr class="miss"><td>101</td><td><code><pre> return</pre></code></td></tr><tr><td>102</td><td><code><pre> }</pre></code></td></tr><tr><td>103</td><td><code><pre> err = source.CompileSASS(dir)</pre></code></td></tr><tr><td>104</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>105</td><td><code><pre> source.CopyToPublic(source.CssBox, dir+&#34;/assets/css&#34;, &#34;base.css&#34;)</pre></code></td></tr><tr class="miss"><td>106</td><td><code><pre> utils.Log(2, &#34;Default &#39;base.css&#39; was insert because SASS did not work.&#34;)</pre></code></td></tr><tr><td>107</td><td><code><pre> }</pre></code></td></tr><tr><td>108</td><td><code><pre> resetRouter()</pre></code></td></tr><tr><td>109</td><td><code><pre> executeResponse(w, r, &#34;settings.html&#34;, core.CoreApp, &#34;/settings&#34;)</pre></code></td></tr><tr><td>110</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_updateUserHandler">func updateUserHandler</div><div class="info"><a href="#s_fn_updateUserHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/users.go</code>:</p></div><table class="listing">
<tr><td>48</td><td><code><pre>func updateUserHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>49</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr class="miss"><td>50</td><td><code><pre> http.Redirect(w, r, &#34;/&#34;, http.StatusSeeOther)</pre></code></td></tr><tr class="miss"><td>51</td><td><code><pre> return</pre></code></td></tr><tr><td>52</td><td><code><pre> }</pre></code></td></tr><tr><td>53</td><td><code><pre> r.ParseForm()</pre></code></td></tr><tr><td>54</td><td><code><pre> vars := mux.Vars(r)</pre></code></td></tr><tr><td>55</td><td><code><pre> id, _ := strconv.Atoi(vars[&#34;id&#34;])</pre></code></td></tr><tr><td>56</td><td><code><pre> user, err := core.SelectUser(int64(id))</pre></code></td></tr><tr><td>57</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>58</td><td><code><pre> utils.Log(3, fmt.Sprintf(&#34;user error: %v&#34;, err))</pre></code></td></tr><tr class="miss"><td>59</td><td><code><pre> w.WriteHeader(http.StatusInternalServerError)</pre></code></td></tr><tr class="miss"><td>60</td><td><code><pre> return</pre></code></td></tr><tr><td>61</td><td><code><pre> }</pre></code></td></tr><tr><td>62</td><td><code><pre></pre></code></td></tr><tr><td>63</td><td><code><pre> user.Username = r.PostForm.Get(&#34;username&#34;)</pre></code></td></tr><tr><td>64</td><td><code><pre> user.Email = r.PostForm.Get(&#34;email&#34;)</pre></code></td></tr><tr><td>65</td><td><code><pre> user.Admin = (r.PostForm.Get(&#34;admin&#34;) == &#34;on&#34;)</pre></code></td></tr><tr><td>66</td><td><code><pre> password := r.PostForm.Get(&#34;password&#34;)</pre></code></td></tr><tr><td>67</td><td><code><pre> if password != &#34;##########&#34; {</pre></code></td></tr><tr class="miss"><td>68</td><td><code><pre> user.Password = utils.HashPassword(password)</pre></code></td></tr><tr><td>69</td><td><code><pre> }</pre></code></td></tr><tr><td>70</td><td><code><pre> user.Update()</pre></code></td></tr><tr><td>71</td><td><code><pre> users, _ := core.SelectAllUsers()</pre></code></td></tr><tr><td>72</td><td><code><pre> executeResponse(w, r, &#34;users.html&#34;, users, &#34;/users&#34;)</pre></code></td></tr><tr><td>73</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_apiServiceUpdateHandler">func apiServiceUpdateHandler</div><div class="info"><a href="#s_fn_apiServiceUpdateHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/api.go</code>:</p></div><table class="listing">
<tr><td>153</td><td><code><pre>func apiServiceUpdateHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>154</td><td><code><pre> if !isAPIAuthorized(r) {</pre></code></td></tr><tr class="miss"><td>155</td><td><code><pre> http.Error(w, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized)</pre></code></td></tr><tr class="miss"><td>156</td><td><code><pre> return</pre></code></td></tr><tr><td>157</td><td><code><pre> }</pre></code></td></tr><tr><td>158</td><td><code><pre> vars := mux.Vars(r)</pre></code></td></tr><tr><td>159</td><td><code><pre> service := core.SelectService(utils.StringInt(vars[&#34;id&#34;]))</pre></code></td></tr><tr><td>160</td><td><code><pre> if service == nil {</pre></code></td></tr><tr class="miss"><td>161</td><td><code><pre> http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound)</pre></code></td></tr><tr class="miss"><td>162</td><td><code><pre> return</pre></code></td></tr><tr><td>163</td><td><code><pre> }</pre></code></td></tr><tr><td>164</td><td><code><pre> var updatedService *types.Service</pre></code></td></tr><tr><td>165</td><td><code><pre> decoder := json.NewDecoder(r.Body)</pre></code></td></tr><tr><td>166</td><td><code><pre> decoder.Decode(&amp;updatedService)</pre></code></td></tr><tr><td>167</td><td><code><pre> updatedService.Id = service.Id</pre></code></td></tr><tr><td>168</td><td><code><pre> service = core.ReturnService(updatedService)</pre></code></td></tr><tr><td>169</td><td><code><pre> err := service.Update(true)</pre></code></td></tr><tr><td>170</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>171</td><td><code><pre> http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)</pre></code></td></tr><tr class="miss"><td>172</td><td><code><pre> return</pre></code></td></tr><tr><td>173</td><td><code><pre> }</pre></code></td></tr><tr><td>174</td><td><code><pre> service.Check(true)</pre></code></td></tr><tr><td>175</td><td><code><pre> w.Header().Set(&#34;Content-Type&#34;, &#34;application/json&#34;)</pre></code></td></tr><tr><td>176</td><td><code><pre> json.NewEncoder(w).Encode(service)</pre></code></td></tr><tr><td>177</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_apiRenewHandler">func apiRenewHandler</div><div class="info"><a href="#s_fn_apiRenewHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/api.go</code>:</p></div><table class="listing">
<tr><td>54</td><td><code><pre>func apiRenewHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>55</td><td><code><pre> if !isAPIAuthorized(r) {</pre></code></td></tr><tr class="miss"><td>56</td><td><code><pre> http.Error(w, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized)</pre></code></td></tr><tr class="miss"><td>57</td><td><code><pre> return</pre></code></td></tr><tr><td>58</td><td><code><pre> }</pre></code></td></tr><tr><td>59</td><td><code><pre> var err error</pre></code></td></tr><tr><td>60</td><td><code><pre> core.CoreApp.ApiKey = utils.NewSHA1Hash(40)</pre></code></td></tr><tr><td>61</td><td><code><pre> core.CoreApp.ApiSecret = utils.NewSHA1Hash(40)</pre></code></td></tr><tr><td>62</td><td><code><pre> core.CoreApp, err = core.UpdateCore(core.CoreApp)</pre></code></td></tr><tr><td>63</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>64</td><td><code><pre> utils.Log(3, err)</pre></code></td></tr><tr><td>65</td><td><code><pre> }</pre></code></td></tr><tr><td>66</td><td><code><pre> http.Redirect(w, r, &#34;/settings&#34;, http.StatusSeeOther)</pre></code></td></tr><tr><td>67</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_apiUserUpdateHandler">func apiUserUpdateHandler</div><div class="info"><a href="#s_fn_apiUserUpdateHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/api.go</code>:</p></div><table class="listing">
<tr><td>236</td><td><code><pre>func apiUserUpdateHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>237</td><td><code><pre> if !isAPIAuthorized(r) {</pre></code></td></tr><tr class="miss"><td>238</td><td><code><pre> http.Error(w, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized)</pre></code></td></tr><tr class="miss"><td>239</td><td><code><pre> return</pre></code></td></tr><tr><td>240</td><td><code><pre> }</pre></code></td></tr><tr><td>241</td><td><code><pre> vars := mux.Vars(r)</pre></code></td></tr><tr><td>242</td><td><code><pre> user, err := core.SelectUser(utils.StringInt(vars[&#34;id&#34;]))</pre></code></td></tr><tr><td>243</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>244</td><td><code><pre> http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound)</pre></code></td></tr><tr class="miss"><td>245</td><td><code><pre> return</pre></code></td></tr><tr><td>246</td><td><code><pre> }</pre></code></td></tr><tr><td>247</td><td><code><pre> var updateUser *types.User</pre></code></td></tr><tr><td>248</td><td><code><pre> decoder := json.NewDecoder(r.Body)</pre></code></td></tr><tr><td>249</td><td><code><pre> decoder.Decode(&amp;updateUser)</pre></code></td></tr><tr><td>250</td><td><code><pre> updateUser.Id = user.Id</pre></code></td></tr><tr><td>251</td><td><code><pre> user = core.ReturnUser(updateUser)</pre></code></td></tr><tr><td>252</td><td><code><pre> err = user.Update()</pre></code></td></tr><tr><td>253</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>254</td><td><code><pre> http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)</pre></code></td></tr><tr class="miss"><td>255</td><td><code><pre> return</pre></code></td></tr><tr><td>256</td><td><code><pre> }</pre></code></td></tr><tr><td>257</td><td><code><pre> w.Header().Set(&#34;Content-Type&#34;, &#34;application/json&#34;)</pre></code></td></tr><tr><td>258</td><td><code><pre> json.NewEncoder(w).Encode(user)</pre></code></td></tr><tr><td>259</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_IsAuthenticated">func IsAuthenticated</div><div class="info"><a href="#s_fn_IsAuthenticated">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
<tr><td>68</td><td><code><pre>func IsAuthenticated(r *http.Request) bool {</pre></code></td></tr><tr><td>69</td><td><code><pre> if os.Getenv(&#34;GO_ENV&#34;) == &#34;test&#34; {</pre></code></td></tr><tr><td>70</td><td><code><pre> return true</pre></code></td></tr><tr><td>71</td><td><code><pre> }</pre></code></td></tr><tr><td>72</td><td><code><pre> if core.CoreApp == nil {</pre></code></td></tr><tr class="miss"><td>73</td><td><code><pre> return false</pre></code></td></tr><tr><td>74</td><td><code><pre> }</pre></code></td></tr><tr><td>75</td><td><code><pre> if sessionStore == nil {</pre></code></td></tr><tr class="miss"><td>76</td><td><code><pre> return false</pre></code></td></tr><tr><td>77</td><td><code><pre> }</pre></code></td></tr><tr><td>78</td><td><code><pre> session, err := sessionStore.Get(r, cookieKey)</pre></code></td></tr><tr><td>79</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>80</td><td><code><pre> return false</pre></code></td></tr><tr><td>81</td><td><code><pre> }</pre></code></td></tr><tr><td>82</td><td><code><pre> if session.Values[&#34;authenticated&#34;] == nil {</pre></code></td></tr><tr><td>83</td><td><code><pre> return false</pre></code></td></tr><tr><td>84</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>85</td><td><code><pre> return session.Values[&#34;authenticated&#34;].(bool)</pre></code></td></tr><tr><td>86</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_apiAllUsersHandler">func apiAllUsersHandler</div><div class="info"><a href="#s_fn_apiAllUsersHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/api.go</code>:</p></div><table class="listing">
<tr><td>287</td><td><code><pre>func apiAllUsersHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>288</td><td><code><pre> if !isAPIAuthorized(r) {</pre></code></td></tr><tr class="miss"><td>289</td><td><code><pre> http.Error(w, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized)</pre></code></td></tr><tr class="miss"><td>290</td><td><code><pre> return</pre></code></td></tr><tr><td>291</td><td><code><pre> }</pre></code></td></tr><tr><td>292</td><td><code><pre> users, _ := core.SelectAllUsers()</pre></code></td></tr><tr><td>293</td><td><code><pre> w.Header().Set(&#34;Content-Type&#34;, &#34;application/json&#34;)</pre></code></td></tr><tr><td>294</td><td><code><pre> json.NewEncoder(w).Encode(users)</pre></code></td></tr><tr><td>295</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_apiCreateUsersHandler">func apiCreateUsersHandler</div><div class="info"><a href="#s_fn_apiCreateUsersHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/api.go</code>:</p></div><table class="listing">
<tr><td>297</td><td><code><pre>func apiCreateUsersHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>298</td><td><code><pre> if !isAPIAuthorized(r) {</pre></code></td></tr><tr class="miss"><td>299</td><td><code><pre> http.Error(w, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized)</pre></code></td></tr><tr class="miss"><td>300</td><td><code><pre> return</pre></code></td></tr><tr><td>301</td><td><code><pre> }</pre></code></td></tr><tr><td>302</td><td><code><pre> var user *types.User</pre></code></td></tr><tr><td>303</td><td><code><pre> decoder := json.NewDecoder(r.Body)</pre></code></td></tr><tr><td>304</td><td><code><pre> err := decoder.Decode(&amp;user)</pre></code></td></tr><tr><td>305</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>306</td><td><code><pre> http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)</pre></code></td></tr><tr class="miss"><td>307</td><td><code><pre> return</pre></code></td></tr><tr><td>308</td><td><code><pre> }</pre></code></td></tr><tr><td>309</td><td><code><pre> newUser := core.ReturnUser(user)</pre></code></td></tr><tr><td>310</td><td><code><pre> uId, err := newUser.Create()</pre></code></td></tr><tr><td>311</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>312</td><td><code><pre> http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)</pre></code></td></tr><tr class="miss"><td>313</td><td><code><pre> return</pre></code></td></tr><tr><td>314</td><td><code><pre> }</pre></code></td></tr><tr><td>315</td><td><code><pre> output := apiResponse{</pre></code></td></tr><tr><td>316</td><td><code><pre> Object: &#34;user&#34;,</pre></code></td></tr><tr><td>317</td><td><code><pre> Method: &#34;create&#34;,</pre></code></td></tr><tr><td>318</td><td><code><pre> Id: uId,</pre></code></td></tr><tr><td>319</td><td><code><pre> Status: &#34;success&#34;,</pre></code></td></tr><tr><td>320</td><td><code><pre> }</pre></code></td></tr><tr><td>321</td><td><code><pre> w.Header().Set(&#34;Content-Type&#34;, &#34;application/json&#34;)</pre></code></td></tr><tr><td>322</td><td><code><pre> json.NewEncoder(w).Encode(output)</pre></code></td></tr><tr><td>323</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_apiCreateServiceHandler">func apiCreateServiceHandler</div><div class="info"><a href="#s_fn_apiCreateServiceHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/api.go</code>:</p></div><table class="listing">
<tr><td>131</td><td><code><pre>func apiCreateServiceHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>132</td><td><code><pre> if !isAPIAuthorized(r) {</pre></code></td></tr><tr class="miss"><td>133</td><td><code><pre> http.Error(w, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized)</pre></code></td></tr><tr class="miss"><td>134</td><td><code><pre> return</pre></code></td></tr><tr><td>135</td><td><code><pre> }</pre></code></td></tr><tr><td>136</td><td><code><pre> var service *types.Service</pre></code></td></tr><tr><td>137</td><td><code><pre> decoder := json.NewDecoder(r.Body)</pre></code></td></tr><tr><td>138</td><td><code><pre> err := decoder.Decode(&amp;service)</pre></code></td></tr><tr><td>139</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>140</td><td><code><pre> http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)</pre></code></td></tr><tr class="miss"><td>141</td><td><code><pre> return</pre></code></td></tr><tr><td>142</td><td><code><pre> }</pre></code></td></tr><tr><td>143</td><td><code><pre> newService := core.ReturnService(service)</pre></code></td></tr><tr><td>144</td><td><code><pre> _, err = newService.Create(true)</pre></code></td></tr><tr><td>145</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>146</td><td><code><pre> http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)</pre></code></td></tr><tr class="miss"><td>147</td><td><code><pre> return</pre></code></td></tr><tr><td>148</td><td><code><pre> }</pre></code></td></tr><tr><td>149</td><td><code><pre> w.Header().Set(&#34;Content-Type&#34;, &#34;application/json&#34;)</pre></code></td></tr><tr><td>150</td><td><code><pre> json.NewEncoder(w).Encode(service)</pre></code></td></tr><tr><td>151</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_processSetupHandler">func processSetupHandler</div><div class="info"><a href="#s_fn_processSetupHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/setup.go</code>:</p></div><table class="listing">
<tr><td>40</td><td><code><pre>func processSetupHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>41</td><td><code><pre> var err error</pre></code></td></tr><tr><td>42</td><td><code><pre> if core.Services() != nil {</pre></code></td></tr><tr class="miss"><td>43</td><td><code><pre> http.Redirect(w, r, &#34;/&#34;, http.StatusSeeOther)</pre></code></td></tr><tr class="miss"><td>44</td><td><code><pre> return</pre></code></td></tr><tr><td>45</td><td><code><pre> }</pre></code></td></tr><tr><td>46</td><td><code><pre> r.ParseForm()</pre></code></td></tr><tr><td>47</td><td><code><pre> dbHost := r.PostForm.Get(&#34;db_host&#34;)</pre></code></td></tr><tr><td>48</td><td><code><pre> dbUser := r.PostForm.Get(&#34;db_user&#34;)</pre></code></td></tr><tr><td>49</td><td><code><pre> dbPass := r.PostForm.Get(&#34;db_password&#34;)</pre></code></td></tr><tr><td>50</td><td><code><pre> dbDatabase := r.PostForm.Get(&#34;db_database&#34;)</pre></code></td></tr><tr><td>51</td><td><code><pre> dbConn := r.PostForm.Get(&#34;db_connection&#34;)</pre></code></td></tr><tr><td>52</td><td><code><pre> dbPort := utils.StringInt(r.PostForm.Get(&#34;db_port&#34;))</pre></code></td></tr><tr><td>53</td><td><code><pre> project := r.PostForm.Get(&#34;project&#34;)</pre></code></td></tr><tr><td>54</td><td><code><pre> username := r.PostForm.Get(&#34;username&#34;)</pre></code></td></tr><tr><td>55</td><td><code><pre> password := r.PostForm.Get(&#34;password&#34;)</pre></code></td></tr><tr><td>56</td><td><code><pre> //sample := r.PostForm.Get(&#34;sample_data&#34;)</pre></code></td></tr><tr><td>57</td><td><code><pre> description := r.PostForm.Get(&#34;description&#34;)</pre></code></td></tr><tr><td>58</td><td><code><pre> domain := r.PostForm.Get(&#34;domain&#34;)</pre></code></td></tr><tr><td>59</td><td><code><pre> email := r.PostForm.Get(&#34;email&#34;)</pre></code></td></tr><tr><td>60</td><td><code><pre> dir := utils.Directory</pre></code></td></tr><tr><td>61</td><td><code><pre></pre></code></td></tr><tr><td>62</td><td><code><pre> config := &amp;core.DbConfig{</pre></code></td></tr><tr><td>63</td><td><code><pre> DbConn: dbConn,</pre></code></td></tr><tr><td>64</td><td><code><pre> DbHost: dbHost,</pre></code></td></tr><tr><td>65</td><td><code><pre> DbUser: dbUser,</pre></code></td></tr><tr><td>66</td><td><code><pre> DbPass: dbPass,</pre></code></td></tr><tr><td>67</td><td><code><pre> DbData: dbDatabase,</pre></code></td></tr><tr><td>68</td><td><code><pre> DbPort: dbPort,</pre></code></td></tr><tr><td>69</td><td><code><pre> Project: project,</pre></code></td></tr><tr><td>70</td><td><code><pre> Description: description,</pre></code></td></tr><tr><td>71</td><td><code><pre> Domain: domain,</pre></code></td></tr><tr><td>72</td><td><code><pre> Username: username,</pre></code></td></tr><tr><td>73</td><td><code><pre> Password: password,</pre></code></td></tr><tr><td>74</td><td><code><pre> Email: email,</pre></code></td></tr><tr><td>75</td><td><code><pre> Error: nil,</pre></code></td></tr><tr><td>76</td><td><code><pre> Location: utils.Directory,</pre></code></td></tr><tr><td>77</td><td><code><pre> }</pre></code></td></tr><tr><td>78</td><td><code><pre></pre></code></td></tr><tr><td>79</td><td><code><pre> if core.Configs, err = config.Save(); err != nil {</pre></code></td></tr><tr class="miss"><td>80</td><td><code><pre> utils.Log(4, err)</pre></code></td></tr><tr class="miss"><td>81</td><td><code><pre> config.Error = err</pre></code></td></tr><tr class="miss"><td>82</td><td><code><pre> setupResponseError(w, r, config)</pre></code></td></tr><tr class="miss"><td>83</td><td><code><pre> return</pre></code></td></tr><tr><td>84</td><td><code><pre> }</pre></code></td></tr><tr><td>85</td><td><code><pre></pre></code></td></tr><tr><td>86</td><td><code><pre> if core.Configs, err = core.LoadConfigFile(dir); err != nil {</pre></code></td></tr><tr class="miss"><td>87</td><td><code><pre> utils.Log(3, err)</pre></code></td></tr><tr class="miss"><td>88</td><td><code><pre> config.Error = err</pre></code></td></tr><tr class="miss"><td>89</td><td><code><pre> setupResponseError(w, r, config)</pre></code></td></tr><tr class="miss"><td>90</td><td><code><pre> return</pre></code></td></tr><tr><td>91</td><td><code><pre> }</pre></code></td></tr><tr><td>92</td><td><code><pre></pre></code></td></tr><tr><td>93</td><td><code><pre> if err = core.Configs.Connect(false, dir); err != nil {</pre></code></td></tr><tr class="miss"><td>94</td><td><code><pre> utils.Log(4, err)</pre></code></td></tr><tr class="miss"><td>95</td><td><code><pre> core.DeleteConfig()</pre></code></td></tr><tr class="miss"><td>96</td><td><code><pre> config.Error = err</pre></code></td></tr><tr class="miss"><td>97</td><td><code><pre> setupResponseError(w, r, config)</pre></code></td></tr><tr class="miss"><td>98</td><td><code><pre> return</pre></code></td></tr><tr><td>99</td><td><code><pre> }</pre></code></td></tr><tr><td>100</td><td><code><pre></pre></code></td></tr><tr><td>101</td><td><code><pre> config.DropDatabase()</pre></code></td></tr><tr><td>102</td><td><code><pre> config.CreateDatabase()</pre></code></td></tr><tr><td>103</td><td><code><pre></pre></code></td></tr><tr><td>104</td><td><code><pre> core.CoreApp, err = config.InsertCore()</pre></code></td></tr><tr><td>105</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>106</td><td><code><pre> utils.Log(4, err)</pre></code></td></tr><tr class="miss"><td>107</td><td><code><pre> config.Error = err</pre></code></td></tr><tr class="miss"><td>108</td><td><code><pre> setupResponseError(w, r, config)</pre></code></td></tr><tr class="miss"><td>109</td><td><code><pre> return</pre></code></td></tr><tr><td>110</td><td><code><pre> }</pre></code></td></tr><tr><td>111</td><td><code><pre></pre></code></td></tr><tr><td>112</td><td><code><pre> admin := core.ReturnUser(&amp;types.User{</pre></code></td></tr><tr><td>113</td><td><code><pre> Username: config.Username,</pre></code></td></tr><tr><td>114</td><td><code><pre> Password: config.Password,</pre></code></td></tr><tr><td>115</td><td><code><pre> Email: config.Email,</pre></code></td></tr><tr><td>116</td><td><code><pre> Admin: true,</pre></code></td></tr><tr><td>117</td><td><code><pre> })</pre></code></td></tr><tr><td>118</td><td><code><pre> admin.Create()</pre></code></td></tr><tr><td>119</td><td><code><pre></pre></code></td></tr><tr><td>120</td><td><code><pre> core.SampleData()</pre></code></td></tr><tr><td>121</td><td><code><pre> core.InitApp()</pre></code></td></tr><tr><td>122</td><td><code><pre> resetCookies()</pre></code></td></tr><tr><td>123</td><td><code><pre> time.Sleep(2 * time.Second)</pre></code></td></tr><tr><td>124</td><td><code><pre> http.Redirect(w, r, &#34;/&#34;, http.StatusSeeOther)</pre></code></td></tr><tr><td>125</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_apiUserDeleteHandler">func apiUserDeleteHandler</div><div class="info"><a href="#s_fn_apiUserDeleteHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/api.go</code>:</p></div><table class="listing">
<tr><td>261</td><td><code><pre>func apiUserDeleteHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>262</td><td><code><pre> if !isAPIAuthorized(r) {</pre></code></td></tr><tr class="miss"><td>263</td><td><code><pre> http.Error(w, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized)</pre></code></td></tr><tr class="miss"><td>264</td><td><code><pre> return</pre></code></td></tr><tr><td>265</td><td><code><pre> }</pre></code></td></tr><tr><td>266</td><td><code><pre> vars := mux.Vars(r)</pre></code></td></tr><tr><td>267</td><td><code><pre> user, err := core.SelectUser(utils.StringInt(vars[&#34;id&#34;]))</pre></code></td></tr><tr><td>268</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>269</td><td><code><pre> http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound)</pre></code></td></tr><tr class="miss"><td>270</td><td><code><pre> return</pre></code></td></tr><tr><td>271</td><td><code><pre> }</pre></code></td></tr><tr><td>272</td><td><code><pre> err = user.Delete()</pre></code></td></tr><tr><td>273</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>274</td><td><code><pre> http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)</pre></code></td></tr><tr class="miss"><td>275</td><td><code><pre> return</pre></code></td></tr><tr><td>276</td><td><code><pre> }</pre></code></td></tr><tr><td>277</td><td><code><pre> output := apiResponse{</pre></code></td></tr><tr><td>278</td><td><code><pre> Object: &#34;user&#34;,</pre></code></td></tr><tr><td>279</td><td><code><pre> Method: &#34;delete&#34;,</pre></code></td></tr><tr><td>280</td><td><code><pre> Id: user.Id,</pre></code></td></tr><tr><td>281</td><td><code><pre> Status: &#34;success&#34;,</pre></code></td></tr><tr><td>282</td><td><code><pre> }</pre></code></td></tr><tr><td>283</td><td><code><pre> w.Header().Set(&#34;Content-Type&#34;, &#34;application/json&#34;)</pre></code></td></tr><tr><td>284</td><td><code><pre> json.NewEncoder(w).Encode(output)</pre></code></td></tr><tr><td>285</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_apiServiceDeleteHandler">func apiServiceDeleteHandler</div><div class="info"><a href="#s_fn_apiServiceDeleteHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/api.go</code>:</p></div><table class="listing">
<tr><td>179</td><td><code><pre>func apiServiceDeleteHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>180</td><td><code><pre> if !isAPIAuthorized(r) {</pre></code></td></tr><tr class="miss"><td>181</td><td><code><pre> http.Error(w, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized)</pre></code></td></tr><tr class="miss"><td>182</td><td><code><pre> return</pre></code></td></tr><tr><td>183</td><td><code><pre> }</pre></code></td></tr><tr><td>184</td><td><code><pre> vars := mux.Vars(r)</pre></code></td></tr><tr><td>185</td><td><code><pre> service := core.SelectService(utils.StringInt(vars[&#34;id&#34;]))</pre></code></td></tr><tr><td>186</td><td><code><pre> if service == nil {</pre></code></td></tr><tr class="miss"><td>187</td><td><code><pre> http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound)</pre></code></td></tr><tr class="miss"><td>188</td><td><code><pre> return</pre></code></td></tr><tr><td>189</td><td><code><pre> }</pre></code></td></tr><tr><td>190</td><td><code><pre> err := service.Delete()</pre></code></td></tr><tr><td>191</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>192</td><td><code><pre> http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)</pre></code></td></tr><tr class="miss"><td>193</td><td><code><pre> return</pre></code></td></tr><tr><td>194</td><td><code><pre> }</pre></code></td></tr><tr><td>195</td><td><code><pre> output := apiResponse{</pre></code></td></tr><tr><td>196</td><td><code><pre> Object: &#34;service&#34;,</pre></code></td></tr><tr><td>197</td><td><code><pre> Method: &#34;delete&#34;,</pre></code></td></tr><tr><td>198</td><td><code><pre> Id: service.Id,</pre></code></td></tr><tr><td>199</td><td><code><pre> Status: &#34;success&#34;,</pre></code></td></tr><tr><td>200</td><td><code><pre> }</pre></code></td></tr><tr><td>201</td><td><code><pre> w.Header().Set(&#34;Content-Type&#34;, &#34;application/json&#34;)</pre></code></td></tr><tr><td>202</td><td><code><pre> json.NewEncoder(w).Encode(output)</pre></code></td></tr><tr><td>203</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_apiUserHandler">func apiUserHandler</div><div class="info"><a href="#s_fn_apiUserHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/api.go</code>:</p></div><table class="listing">
<tr><td>221</td><td><code><pre>func apiUserHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>222</td><td><code><pre> if !isAPIAuthorized(r) {</pre></code></td></tr><tr class="miss"><td>223</td><td><code><pre> http.Error(w, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized)</pre></code></td></tr><tr class="miss"><td>224</td><td><code><pre> return</pre></code></td></tr><tr><td>225</td><td><code><pre> }</pre></code></td></tr><tr><td>226</td><td><code><pre> vars := mux.Vars(r)</pre></code></td></tr><tr><td>227</td><td><code><pre> user, err := core.SelectUser(utils.StringInt(vars[&#34;id&#34;]))</pre></code></td></tr><tr><td>228</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>229</td><td><code><pre> http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound)</pre></code></td></tr><tr class="miss"><td>230</td><td><code><pre> return</pre></code></td></tr><tr><td>231</td><td><code><pre> }</pre></code></td></tr><tr><td>232</td><td><code><pre> w.Header().Set(&#34;Content-Type&#34;, &#34;application/json&#34;)</pre></code></td></tr><tr><td>233</td><td><code><pre> json.NewEncoder(w).Encode(user)</pre></code></td></tr><tr><td>234</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_apiServiceHandler">func apiServiceHandler</div><div class="info"><a href="#s_fn_apiServiceHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/api.go</code>:</p></div><table class="listing">
<tr><td>115</td><td><code><pre>func apiServiceHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>116</td><td><code><pre> if !isAPIAuthorized(r) {</pre></code></td></tr><tr class="miss"><td>117</td><td><code><pre> http.Error(w, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized)</pre></code></td></tr><tr class="miss"><td>118</td><td><code><pre> return</pre></code></td></tr><tr><td>119</td><td><code><pre> }</pre></code></td></tr><tr><td>120</td><td><code><pre> vars := mux.Vars(r)</pre></code></td></tr><tr><td>121</td><td><code><pre> service := core.SelectService(utils.StringInt(vars[&#34;id&#34;]))</pre></code></td></tr><tr><td>122</td><td><code><pre> if service == nil {</pre></code></td></tr><tr class="miss"><td>123</td><td><code><pre> http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound)</pre></code></td></tr><tr class="miss"><td>124</td><td><code><pre> return</pre></code></td></tr><tr><td>125</td><td><code><pre> }</pre></code></td></tr><tr><td>126</td><td><code><pre></pre></code></td></tr><tr><td>127</td><td><code><pre> w.Header().Set(&#34;Content-Type&#34;, &#34;application/json&#34;)</pre></code></td></tr><tr><td>128</td><td><code><pre> json.NewEncoder(w).Encode(service)</pre></code></td></tr><tr><td>129</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_dashboardHandler">func dashboardHandler</div><div class="info"><a href="#s_fn_dashboardHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/dashboard.go</code>:</p></div><table class="listing">
<tr><td>32</td><td><code><pre>func dashboardHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>33</td><td><code><pre> fmt.Println()</pre></code></td></tr><tr><td>34</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr class="miss"><td>35</td><td><code><pre> err := core.ErrorResponse{}</pre></code></td></tr><tr class="miss"><td>36</td><td><code><pre> executeResponse(w, r, &#34;login.html&#34;, err, nil)</pre></code></td></tr><tr><td>37</td><td><code><pre> } else {</pre></code></td></tr><tr><td>38</td><td><code><pre> executeResponse(w, r, &#34;dashboard.html&#34;, core.CoreApp, nil)</pre></code></td></tr><tr><td>39</td><td><code><pre> }</pre></code></td></tr><tr><td>40</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_indexHandler">func indexHandler</div><div class="info"><a href="#s_fn_indexHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/index.go</code>:</p></div><table class="listing">
<tr><td>25</td><td><code><pre>func indexHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>26</td><td><code><pre> if core.Configs == nil {</pre></code></td></tr><tr class="miss"><td>27</td><td><code><pre> http.Redirect(w, r, &#34;/setup&#34;, http.StatusSeeOther)</pre></code></td></tr><tr class="miss"><td>28</td><td><code><pre> return</pre></code></td></tr><tr><td>29</td><td><code><pre> }</pre></code></td></tr><tr><td>30</td><td><code><pre> executeResponse(w, r, &#34;index.html&#34;, core.CoreApp, nil)</pre></code></td></tr><tr><td>31</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_isAPIAuthorized">func isAPIAuthorized</div><div class="info"><a href="#s_fn_isAPIAuthorized">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/api.go</code>:</p></div><table class="listing">
<tr><td>325</td><td><code><pre>func isAPIAuthorized(r *http.Request) bool {</pre></code></td></tr><tr><td>326</td><td><code><pre> if os.Getenv(&#34;GO_ENV&#34;) == &#34;test&#34; {</pre></code></td></tr><tr><td>327</td><td><code><pre> return true</pre></code></td></tr><tr><td>328</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>329</td><td><code><pre> if IsAuthenticated(r) {</pre></code></td></tr><tr class="miss"><td>330</td><td><code><pre> return true</pre></code></td></tr><tr><td>331</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>332</td><td><code><pre> if isAuthorized(r) {</pre></code></td></tr><tr class="miss"><td>333</td><td><code><pre> return true</pre></code></td></tr><tr><td>334</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>335</td><td><code><pre> return false</pre></code></td></tr><tr><td>336</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_testNotificationHandler">func testNotificationHandler</div><div class="info"><a href="#s_fn_testNotificationHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/settings.go</code>:</p></div><table class="listing">
<tr><td>200</td><td><code><pre>func testNotificationHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr class="miss"><td>201</td><td><code><pre> var err error</pre></code></td></tr><tr class="miss"><td>202</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr class="miss"><td>203</td><td><code><pre> http.Redirect(w, r, &#34;/&#34;, http.StatusSeeOther)</pre></code></td></tr><tr class="miss"><td>204</td><td><code><pre> return</pre></code></td></tr><tr><td>205</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>206</td><td><code><pre> form := parseForm(r)</pre></code></td></tr><tr class="miss"><td>207</td><td><code><pre> vars := mux.Vars(r)</pre></code></td></tr><tr class="miss"><td>208</td><td><code><pre> method := vars[&#34;method&#34;]</pre></code></td></tr><tr class="miss"><td>209</td><td><code><pre> enabled := form.Get(&#34;enable&#34;)</pre></code></td></tr><tr class="miss"><td>210</td><td><code><pre> host := form.Get(&#34;host&#34;)</pre></code></td></tr><tr class="miss"><td>211</td><td><code><pre> port := int(utils.StringInt(form.Get(&#34;port&#34;)))</pre></code></td></tr><tr class="miss"><td>212</td><td><code><pre> username := form.Get(&#34;username&#34;)</pre></code></td></tr><tr class="miss"><td>213</td><td><code><pre> password := form.Get(&#34;password&#34;)</pre></code></td></tr><tr class="miss"><td>214</td><td><code><pre> var1 := form.Get(&#34;var1&#34;)</pre></code></td></tr><tr class="miss"><td>215</td><td><code><pre> var2 := form.Get(&#34;var2&#34;)</pre></code></td></tr><tr class="miss"><td>216</td><td><code><pre> apiKey := form.Get(&#34;api_key&#34;)</pre></code></td></tr><tr class="miss"><td>217</td><td><code><pre> apiSecret := form.Get(&#34;api_secret&#34;)</pre></code></td></tr><tr class="miss"><td>218</td><td><code><pre> limits := int(utils.StringInt(form.Get(&#34;limits&#34;)))</pre></code></td></tr><tr><td>219</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>220</td><td><code><pre> fakeNotifer, notif, err := notifier.SelectNotifier(method)</pre></code></td></tr><tr class="miss"><td>221</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>222</td><td><code><pre> utils.Log(3, fmt.Sprintf(&#34;issue saving notifier %v: %v&#34;, method, err))</pre></code></td></tr><tr class="miss"><td>223</td><td><code><pre> executeResponse(w, r, &#34;settings.html&#34;, core.CoreApp, &#34;/settings&#34;)</pre></code></td></tr><tr class="miss"><td>224</td><td><code><pre> return</pre></code></td></tr><tr><td>225</td><td><code><pre> }</pre></code></td></tr><tr><td>226</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>227</td><td><code><pre> notifer := *fakeNotifer</pre></code></td></tr><tr><td>228</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>229</td><td><code><pre> if host != &#34;&#34; {</pre></code></td></tr><tr class="miss"><td>230</td><td><code><pre> notifer.Host = host</pre></code></td></tr><tr><td>231</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>232</td><td><code><pre> if port != 0 {</pre></code></td></tr><tr class="miss"><td>233</td><td><code><pre> notifer.Port = port</pre></code></td></tr><tr><td>234</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>235</td><td><code><pre> if username != &#34;&#34; {</pre></code></td></tr><tr class="miss"><td>236</td><td><code><pre> notifer.Username = username</pre></code></td></tr><tr><td>237</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>238</td><td><code><pre> if password != &#34;&#34; &amp;&amp; password != &#34;##########&#34; {</pre></code></td></tr><tr class="miss"><td>239</td><td><code><pre> notifer.Password = password</pre></code></td></tr><tr><td>240</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>241</td><td><code><pre> if var1 != &#34;&#34; {</pre></code></td></tr><tr class="miss"><td>242</td><td><code><pre> notifer.Var1 = var1</pre></code></td></tr><tr><td>243</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>244</td><td><code><pre> if var2 != &#34;&#34; {</pre></code></td></tr><tr class="miss"><td>245</td><td><code><pre> notifer.Var2 = var2</pre></code></td></tr><tr><td>246</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>247</td><td><code><pre> if apiKey != &#34;&#34; {</pre></code></td></tr><tr class="miss"><td>248</td><td><code><pre> notifer.ApiKey = apiKey</pre></code></td></tr><tr><td>249</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>250</td><td><code><pre> if apiSecret != &#34;&#34; {</pre></code></td></tr><tr class="miss"><td>251</td><td><code><pre> notifer.ApiSecret = apiSecret</pre></code></td></tr><tr><td>252</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>253</td><td><code><pre> if limits != 0 {</pre></code></td></tr><tr class="miss"><td>254</td><td><code><pre> notifer.Limits = limits</pre></code></td></tr><tr><td>255</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>256</td><td><code><pre> notifer.Enabled = enabled == &#34;on&#34;</pre></code></td></tr><tr><td>257</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>258</td><td><code><pre> err = notif.(notifier.Tester).OnTest()</pre></code></td></tr><tr class="miss"><td>259</td><td><code><pre> if err == nil {</pre></code></td></tr><tr class="miss"><td>260</td><td><code><pre> w.Write([]byte(&#34;ok&#34;))</pre></code></td></tr><tr><td>261</td><td><code><pre> } else {</pre></code></td></tr><tr class="miss"><td>262</td><td><code><pre> w.Write([]byte(err.Error()))</pre></code></td></tr><tr><td>263</td><td><code><pre> }</pre></code></td></tr><tr><td>264</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_DesktopInit">func DesktopInit</div><div class="info"><a href="#s_fn_DesktopInit">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/index.go</code>:</p></div><table class="listing">
<tr><td>38</td><td><code><pre>func DesktopInit(ip string, port int) {</pre></code></td></tr><tr class="miss"><td>39</td><td><code><pre> var err error</pre></code></td></tr><tr class="miss"><td>40</td><td><code><pre> exists := utils.FileExists(utils.Directory + &#34;/statup.db&#34;)</pre></code></td></tr><tr class="miss"><td>41</td><td><code><pre> if exists {</pre></code></td></tr><tr class="miss"><td>42</td><td><code><pre> core.Configs, err = core.LoadConfigFile(utils.Directory)</pre></code></td></tr><tr class="miss"><td>43</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>44</td><td><code><pre> utils.Log(3, err)</pre></code></td></tr><tr class="miss"><td>45</td><td><code><pre> return</pre></code></td></tr><tr><td>46</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>47</td><td><code><pre> err = core.Configs.Connect(false, utils.Directory)</pre></code></td></tr><tr class="miss"><td>48</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>49</td><td><code><pre> utils.Log(3, err)</pre></code></td></tr><tr class="miss"><td>50</td><td><code><pre> return</pre></code></td></tr><tr><td>51</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>52</td><td><code><pre> core.InitApp()</pre></code></td></tr><tr class="miss"><td>53</td><td><code><pre> RunHTTPServer(ip, port)</pre></code></td></tr><tr><td>54</td><td><code><pre> }</pre></code></td></tr><tr><td>55</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>56</td><td><code><pre> config := &amp;core.DbConfig{</pre></code></td></tr><tr><td>57</td><td><code><pre> DbConn: &#34;sqlite&#34;,</pre></code></td></tr><tr><td>58</td><td><code><pre> Project: &#34;Statup&#34;,</pre></code></td></tr><tr><td>59</td><td><code><pre> Description: &#34;Statup running as an App!&#34;,</pre></code></td></tr><tr><td>60</td><td><code><pre> Domain: &#34;http://localhost&#34;,</pre></code></td></tr><tr><td>61</td><td><code><pre> Username: &#34;admin&#34;,</pre></code></td></tr><tr><td>62</td><td><code><pre> Password: &#34;admin&#34;,</pre></code></td></tr><tr><td>63</td><td><code><pre> Email: &#34;user@email.com&#34;,</pre></code></td></tr><tr><td>64</td><td><code><pre> Error: nil,</pre></code></td></tr><tr><td>65</td><td><code><pre> Location: utils.Directory,</pre></code></td></tr><tr><td>66</td><td><code><pre> }</pre></code></td></tr><tr><td>67</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>68</td><td><code><pre> config, err = config.Save()</pre></code></td></tr><tr class="miss"><td>69</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>70</td><td><code><pre> utils.Log(4, err)</pre></code></td></tr><tr><td>71</td><td><code><pre> }</pre></code></td></tr><tr><td>72</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>73</td><td><code><pre> config.DropDatabase()</pre></code></td></tr><tr class="miss"><td>74</td><td><code><pre> config.CreateDatabase()</pre></code></td></tr><tr class="miss"><td>75</td><td><code><pre> core.CoreApp = config.CreateCore()</pre></code></td></tr><tr><td>76</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>77</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>78</td><td><code><pre> utils.Log(3, err)</pre></code></td></tr><tr class="miss"><td>79</td><td><code><pre> return</pre></code></td></tr><tr><td>80</td><td><code><pre> }</pre></code></td></tr><tr><td>81</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>82</td><td><code><pre> core.Configs, err = core.LoadConfigFile(utils.Directory)</pre></code></td></tr><tr class="miss"><td>83</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>84</td><td><code><pre> utils.Log(3, err)</pre></code></td></tr><tr class="miss"><td>85</td><td><code><pre> config.Error = err</pre></code></td></tr><tr class="miss"><td>86</td><td><code><pre> return</pre></code></td></tr><tr><td>87</td><td><code><pre> }</pre></code></td></tr><tr><td>88</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>89</td><td><code><pre> err = core.Configs.Connect(false, utils.Directory)</pre></code></td></tr><tr class="miss"><td>90</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>91</td><td><code><pre> utils.Log(3, err)</pre></code></td></tr><tr class="miss"><td>92</td><td><code><pre> core.DeleteConfig()</pre></code></td></tr><tr class="miss"><td>93</td><td><code><pre> config.Error = err</pre></code></td></tr><tr class="miss"><td>94</td><td><code><pre> return</pre></code></td></tr><tr><td>95</td><td><code><pre> }</pre></code></td></tr><tr><td>96</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>97</td><td><code><pre> admin := core.ReturnUser(&amp;types.User{</pre></code></td></tr><tr><td>98</td><td><code><pre> Username: config.Username,</pre></code></td></tr><tr><td>99</td><td><code><pre> Password: config.Password,</pre></code></td></tr><tr><td>100</td><td><code><pre> Email: config.Email,</pre></code></td></tr><tr><td>101</td><td><code><pre> Admin: true,</pre></code></td></tr><tr><td>102</td><td><code><pre> })</pre></code></td></tr><tr class="miss"><td>103</td><td><code><pre> admin.Create()</pre></code></td></tr><tr><td>104</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>105</td><td><code><pre> core.InsertSampleData()</pre></code></td></tr><tr><td>106</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>107</td><td><code><pre> config.ApiKey = core.CoreApp.ApiKey</pre></code></td></tr><tr class="miss"><td>108</td><td><code><pre> config.ApiSecret = core.CoreApp.ApiSecret</pre></code></td></tr><tr class="miss"><td>109</td><td><code><pre> config.Update()</pre></code></td></tr><tr><td>110</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>111</td><td><code><pre> core.InitApp()</pre></code></td></tr><tr class="miss"><td>112</td><td><code><pre> RunHTTPServer(ip, port)</pre></code></td></tr><tr><td>113</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_checkinCreateHandler">func checkinCreateHandler</div><div class="info"><a href="#s_fn_checkinCreateHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/services.go</code>:</p></div><table class="listing">
<tr><td>233</td><td><code><pre>func checkinCreateHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr class="miss"><td>234</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr class="miss"><td>235</td><td><code><pre> http.Redirect(w, r, &#34;/&#34;, http.StatusSeeOther)</pre></code></td></tr><tr class="miss"><td>236</td><td><code><pre> return</pre></code></td></tr><tr><td>237</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>238</td><td><code><pre> vars := mux.Vars(r)</pre></code></td></tr><tr class="miss"><td>239</td><td><code><pre> r.ParseForm()</pre></code></td></tr><tr class="miss"><td>240</td><td><code><pre> service := core.SelectService(utils.StringInt(vars[&#34;id&#34;]))</pre></code></td></tr><tr class="miss"><td>241</td><td><code><pre> fmt.Println(service.Name)</pre></code></td></tr><tr class="miss"><td>242</td><td><code><pre> name := r.PostForm.Get(&#34;name&#34;)</pre></code></td></tr><tr class="miss"><td>243</td><td><code><pre> interval := utils.StringInt(r.PostForm.Get(&#34;interval&#34;))</pre></code></td></tr><tr class="miss"><td>244</td><td><code><pre> grace := utils.StringInt(r.PostForm.Get(&#34;grace&#34;))</pre></code></td></tr><tr class="miss"><td>245</td><td><code><pre> checkin := core.ReturnCheckin(&amp;types.Checkin{</pre></code></td></tr><tr><td>246</td><td><code><pre> Name: name,</pre></code></td></tr><tr><td>247</td><td><code><pre> ServiceId: service.Id,</pre></code></td></tr><tr><td>248</td><td><code><pre> Interval: interval,</pre></code></td></tr><tr><td>249</td><td><code><pre> GracePeriod: grace,</pre></code></td></tr><tr><td>250</td><td><code><pre> })</pre></code></td></tr><tr class="miss"><td>251</td><td><code><pre> checkin.Create()</pre></code></td></tr><tr class="miss"><td>252</td><td><code><pre> executeResponse(w, r, &#34;service.html&#34;, service, fmt.Sprintf(&#34;/service/%v&#34;, service.Id))</pre></code></td></tr><tr><td>253</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_apiServicePingDataHandler">func apiServicePingDataHandler</div><div class="info"><a href="#s_fn_apiServicePingDataHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/api.go</code>:</p></div><table class="listing">
<tr><td>98</td><td><code><pre>func apiServicePingDataHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr class="miss"><td>99</td><td><code><pre> vars := mux.Vars(r)</pre></code></td></tr><tr class="miss"><td>100</td><td><code><pre> service := core.SelectService(utils.StringInt(vars[&#34;id&#34;]))</pre></code></td></tr><tr class="miss"><td>101</td><td><code><pre> if service == nil {</pre></code></td></tr><tr class="miss"><td>102</td><td><code><pre> http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound)</pre></code></td></tr><tr class="miss"><td>103</td><td><code><pre> return</pre></code></td></tr><tr><td>104</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>105</td><td><code><pre> fields := parseGet(r)</pre></code></td></tr><tr class="miss"><td>106</td><td><code><pre> grouping := fields.Get(&#34;group&#34;)</pre></code></td></tr><tr class="miss"><td>107</td><td><code><pre> startField := utils.StringInt(fields.Get(&#34;start&#34;))</pre></code></td></tr><tr class="miss"><td>108</td><td><code><pre> endField := utils.StringInt(fields.Get(&#34;end&#34;))</pre></code></td></tr><tr class="miss"><td>109</td><td><code><pre> obj := core.GraphDataRaw(service, time.Unix(startField, 0), time.Unix(endField, 0), grouping, &#34;ping_time&#34;)</pre></code></td></tr><tr><td>110</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>111</td><td><code><pre> w.Header().Set(&#34;Content-Type&#34;, &#34;application/json&#34;)</pre></code></td></tr><tr class="miss"><td>112</td><td><code><pre> json.NewEncoder(w).Encode(obj)</pre></code></td></tr><tr><td>113</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_checkinHitHandler">func checkinHitHandler</div><div class="info"><a href="#s_fn_checkinHitHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/services.go</code>:</p></div><table class="listing">
<tr><td>255</td><td><code><pre>func checkinHitHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr class="miss"><td>256</td><td><code><pre> vars := mux.Vars(r)</pre></code></td></tr><tr class="miss"><td>257</td><td><code><pre> checkin := core.SelectCheckin(vars[&#34;id&#34;])</pre></code></td></tr><tr class="miss"><td>258</td><td><code><pre> ip, _, _ := net.SplitHostPort(r.RemoteAddr)</pre></code></td></tr><tr class="miss"><td>259</td><td><code><pre> checkinHit := core.ReturnCheckinHit(&amp;types.CheckinHit{</pre></code></td></tr><tr><td>260</td><td><code><pre> Checkin: checkin.Id,</pre></code></td></tr><tr><td>261</td><td><code><pre> From: ip,</pre></code></td></tr><tr><td>262</td><td><code><pre> CreatedAt: time.Now().UTC(),</pre></code></td></tr><tr><td>263</td><td><code><pre> })</pre></code></td></tr><tr class="miss"><td>264</td><td><code><pre> if checkin.Last() == nil {</pre></code></td></tr><tr class="miss"><td>265</td><td><code><pre> checkin.Start()</pre></code></td></tr><tr class="miss"><td>266</td><td><code><pre> go checkin.Routine()</pre></code></td></tr><tr><td>267</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>268</td><td><code><pre> checkinHit.Create()</pre></code></td></tr><tr class="miss"><td>269</td><td><code><pre> w.Write([]byte(&#34;ok&#34;))</pre></code></td></tr><tr class="miss"><td>270</td><td><code><pre> w.WriteHeader(http.StatusOK)</pre></code></td></tr><tr><td>271</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_checkinDeleteHandler">func checkinDeleteHandler</div><div class="info"><a href="#s_fn_checkinDeleteHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/services.go</code>:</p></div><table class="listing">
<tr><td>220</td><td><code><pre>func checkinDeleteHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr class="miss"><td>221</td><td><code><pre> if !IsAuthenticated(r) {</pre></code></td></tr><tr class="miss"><td>222</td><td><code><pre> http.Redirect(w, r, &#34;/&#34;, http.StatusSeeOther)</pre></code></td></tr><tr class="miss"><td>223</td><td><code><pre> return</pre></code></td></tr><tr><td>224</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>225</td><td><code><pre> vars := mux.Vars(r)</pre></code></td></tr><tr class="miss"><td>226</td><td><code><pre> checkin := core.SelectCheckinId(utils.StringInt(vars[&#34;id&#34;]))</pre></code></td></tr><tr class="miss"><td>227</td><td><code><pre> service := core.SelectService(checkin.ServiceId)</pre></code></td></tr><tr class="miss"><td>228</td><td><code><pre> fmt.Println(checkin, service)</pre></code></td></tr><tr class="miss"><td>229</td><td><code><pre> checkin.Delete()</pre></code></td></tr><tr class="miss"><td>230</td><td><code><pre> executeResponse(w, r, &#34;service.html&#34;, service, fmt.Sprintf(&#34;/service/%v&#34;, service.Id))</pre></code></td></tr><tr><td>231</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_pluginSavedHandler">func pluginSavedHandler</div><div class="info"><a href="#s_fn_pluginSavedHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/plugins.go</code>:</p></div><table class="listing">
<tr><td>29</td><td><code><pre>func pluginSavedHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr class="miss"><td>30</td><td><code><pre> auth := IsAuthenticated(r)</pre></code></td></tr><tr class="miss"><td>31</td><td><code><pre> if !auth {</pre></code></td></tr><tr class="miss"><td>32</td><td><code><pre> http.Redirect(w, r, &#34;/&#34;, http.StatusSeeOther)</pre></code></td></tr><tr class="miss"><td>33</td><td><code><pre> return</pre></code></td></tr><tr><td>34</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>35</td><td><code><pre> r.ParseForm()</pre></code></td></tr><tr><td>36</td><td><code><pre> //vars := mux.Vars(router)</pre></code></td></tr><tr><td>37</td><td><code><pre> //plug := SelectPlugin(vars[&#34;name&#34;])</pre></code></td></tr><tr class="miss"><td>38</td><td><code><pre> data := make(map[string]string)</pre></code></td></tr><tr class="miss"><td>39</td><td><code><pre> for k, v := range r.PostForm {</pre></code></td></tr><tr class="miss"><td>40</td><td><code><pre> data[k] = strings.Join(v, &#34;&#34;)</pre></code></td></tr><tr><td>41</td><td><code><pre> }</pre></code></td></tr><tr><td>42</td><td><code><pre> //plug.OnSave(structs.Map(data))</pre></code></td></tr><tr class="miss"><td>43</td><td><code><pre> http.Redirect(w, r, &#34;/settings&#34;, http.StatusSeeOther)</pre></code></td></tr><tr><td>44</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_@111:11">func @111:11</div><div class="info"><a href="#s_fn_@111:11">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
<tr><td>111</td><td><code><pre>func(g interface{}) []string {</pre></code></td></tr><tr class="miss"><td>112</td><td><code><pre> fooType := reflect.TypeOf(g)</pre></code></td></tr><tr class="miss"><td>113</td><td><code><pre> var methods []string</pre></code></td></tr><tr class="miss"><td>114</td><td><code><pre> methods = append(methods, fooType.String())</pre></code></td></tr><tr class="miss"><td>115</td><td><code><pre> for i := 0; i &lt; fooType.NumMethod(); i++ {</pre></code></td></tr><tr class="miss"><td>116</td><td><code><pre> method := fooType.Method(i)</pre></code></td></tr><tr class="miss"><td>117</td><td><code><pre> fmt.Println(method.Name)</pre></code></td></tr><tr class="miss"><td>118</td><td><code><pre> methods = append(methods, method.Name)</pre></code></td></tr><tr><td>119</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>120</td><td><code><pre> return methods</pre></code></td></tr><tr><td>121</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_apiCheckinHandler">func apiCheckinHandler</div><div class="info"><a href="#s_fn_apiCheckinHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/api.go</code>:</p></div><table class="listing">
<tr><td>69</td><td><code><pre>func apiCheckinHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr class="miss"><td>70</td><td><code><pre> if !isAPIAuthorized(r) {</pre></code></td></tr><tr class="miss"><td>71</td><td><code><pre> http.Error(w, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized)</pre></code></td></tr><tr class="miss"><td>72</td><td><code><pre> return</pre></code></td></tr><tr><td>73</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>74</td><td><code><pre> vars := mux.Vars(r)</pre></code></td></tr><tr class="miss"><td>75</td><td><code><pre> checkin := core.SelectCheckin(vars[&#34;api&#34;])</pre></code></td></tr><tr><td>76</td><td><code><pre> //checkin.Receivehit()</pre></code></td></tr><tr class="miss"><td>77</td><td><code><pre> w.WriteHeader(http.StatusOK)</pre></code></td></tr><tr class="miss"><td>78</td><td><code><pre> json.NewEncoder(w).Encode(checkin)</pre></code></td></tr><tr><td>79</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_pluginsDownloadHandler">func pluginsDownloadHandler</div><div class="info"><a href="#s_fn_pluginsDownloadHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/plugins.go</code>:</p></div><table class="listing">
<tr><td>46</td><td><code><pre>func pluginsDownloadHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr class="miss"><td>47</td><td><code><pre> auth := IsAuthenticated(r)</pre></code></td></tr><tr class="miss"><td>48</td><td><code><pre> if !auth {</pre></code></td></tr><tr class="miss"><td>49</td><td><code><pre> http.Redirect(w, r, &#34;/&#34;, http.StatusSeeOther)</pre></code></td></tr><tr class="miss"><td>50</td><td><code><pre> return</pre></code></td></tr><tr><td>51</td><td><code><pre> }</pre></code></td></tr><tr><td>52</td><td><code><pre> //vars := mux.Vars(router)</pre></code></td></tr><tr><td>53</td><td><code><pre> //name := vars[&#34;name&#34;]</pre></code></td></tr><tr><td>54</td><td><code><pre> //DownloadPlugin(name)</pre></code></td></tr><tr><td>55</td><td><code><pre> //core.LoadConfig(utils.Directory)</pre></code></td></tr><tr class="miss"><td>56</td><td><code><pre> http.Redirect(w, r, &#34;/plugins&#34;, http.StatusSeeOther)</pre></code></td></tr><tr><td>57</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_parseId">func parseId</div><div class="info"><a href="#s_fn_parseId">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/settings.go</code>:</p></div><table class="listing">
<tr><td>122</td><td><code><pre>func parseId(r *http.Request) int64 {</pre></code></td></tr><tr class="miss"><td>123</td><td><code><pre> vars := mux.Vars(r)</pre></code></td></tr><tr class="miss"><td>124</td><td><code><pre> return utils.StringInt(vars[&#34;id&#34;])</pre></code></td></tr><tr><td>125</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_@122:13">func @122:13</div><div class="info"><a href="#s_fn_@122:13">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
<tr><td>122</td><td><code><pre>func(g interface{}) template.HTML {</pre></code></td></tr><tr class="miss"><td>123</td><td><code><pre> data, _ := json.Marshal(g)</pre></code></td></tr><tr class="miss"><td>124</td><td><code><pre> return template.HTML(string(data))</pre></code></td></tr><tr><td>125</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_@144:15">func @144:15</div><div class="info"><a href="#s_fn_@144:15">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
<tr><td>144</td><td><code><pre>func(t time.Duration) string {</pre></code></td></tr><tr class="miss"><td>145</td><td><code><pre> duration, _ := time.ParseDuration(fmt.Sprintf(&#34;%vs&#34;, t.Seconds()))</pre></code></td></tr><tr class="miss"><td>146</td><td><code><pre> return utils.FormatDuration(duration)</pre></code></td></tr><tr><td>147</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_setupResponseError">func setupResponseError</div><div class="info"><a href="#s_fn_setupResponseError">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/setup.go</code>:</p></div><table class="listing">
<tr><td>127</td><td><code><pre>func setupResponseError(w http.ResponseWriter, r *http.Request, a interface{}) {</pre></code></td></tr><tr class="miss"><td>128</td><td><code><pre> executeResponse(w, r, &#34;setup.html&#34;, a, nil)</pre></code></td></tr><tr><td>129</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_@90:9">func @90:9</div><div class="info"><a href="#s_fn_@90:9">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
<tr><td>90</td><td><code><pre>func(html interface{}) template.JS {</pre></code></td></tr><tr class="miss"><td>91</td><td><code><pre> return template.JS(utils.ToString(html))</pre></code></td></tr><tr><td>92</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_@132:17">func @132:17</div><div class="info"><a href="#s_fn_@132:17">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
<tr><td>132</td><td><code><pre>func() string {</pre></code></td></tr><tr class="miss"><td>133</td><td><code><pre> return &#34;&#34;</pre></code></td></tr><tr><td>134</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_@148:13">func @148:13</div><div class="info"><a href="#s_fn_@148:13">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
<tr><td>148</td><td><code><pre>func(t time.Time) int64 {</pre></code></td></tr><tr class="miss"><td>149</td><td><code><pre> return t.UTC().Unix()</pre></code></td></tr><tr><td>150</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_trayHandler">func trayHandler</div><div class="info"><a href="#s_fn_trayHandler">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/index.go</code>:</p></div><table class="listing">
<tr><td>33</td><td><code><pre>func trayHandler(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr class="miss"><td>34</td><td><code><pre> executeResponse(w, r, &#34;tray.html&#34;, core.CoreApp, nil)</pre></code></td></tr><tr><td>35</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_@141:10">func @141:10</div><div class="info"><a href="#s_fn_@141:10">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
<tr><td>141</td><td><code><pre>func(t time.Time) string {</pre></code></td></tr><tr class="miss"><td>142</td><td><code><pre> return utils.Timestamp(t).Ago()</pre></code></td></tr><tr><td>143</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_@235:15">func @235:15</div><div class="info"><a href="#s_fn_@235:15">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
<tr><td>235</td><td><code><pre>func() []types.ServiceInterface {</pre></code></td></tr><tr class="miss"><td>236</td><td><code><pre> return core.CoreApp.Services</pre></code></td></tr><tr><td>237</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_@160:17">func @160:17</div><div class="info"><a href="#s_fn_@160:17">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
<tr><td>160</td><td><code><pre>func() *types.Checkin {</pre></code></td></tr><tr class="miss"><td>161</td><td><code><pre> return new(types.Checkin)</pre></code></td></tr><tr><td>162</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_@232:11">func @232:11</div><div class="info"><a href="#s_fn_@232:11">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/handlers/handlers.go</code>:</p></div><table class="listing">
<tr><td>232</td><td><code><pre>func(html string) template.HTML {</pre></code></td></tr><tr class="miss"><td>233</td><td><code><pre> return template.HTML(html)</pre></code></td></tr><tr><td>234</td><td><code><pre> }</pre></code></td></tr></table>
<!-- Can be parsed by external script
PACKAGE:github.com/hunterlong/statup/handlers DONE:67.41
-->
<div id="pkg_github.com/hunterlong/statup/notifiers" class="funcname">Package Overview: github.com/hunterlong/statup/notifiers <span class="packageTotal">7.00%</span></div><p>This is a coverage report created after analysis of the <code>github.com/hunterlong/statup/notifiers</code> package. It
has been generated with the following command:</p><pre class="cmd">gocov test github.com/hunterlong/statup/notifiers | gocov-html</pre> <p>Here are the stats. Please select a function name to view its implementation and see what's left for testing.</p><table class="overview">
<tr id="s_fn_twilio.Select"><td><code><a href="#fn_twilio.Select">twilio.Select(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/twilio.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_lineNotifier.Select"><td><code><a href="#fn_lineNotifier.Select">lineNotifier.Select(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/line_notify.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_discord.Select"><td><code><a href="#fn_discord.Select">discord.Select(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/discord.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_webhooker.Select"><td><code><a href="#fn_webhooker.Select">webhooker.Select(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/webhook.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_slack.Select"><td><code><a href="#fn_slack.Select">slack.Select(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/slack.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_email.Select"><td><code><a href="#fn_email.Select">email.Select(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/email.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_init"><td><code><a href="#fn_init">init(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/line_notify.go</code></td><td class="percent"><code>66.67%</code></td><td class="linecount"><code>2/3</code></td></tr>
<tr id="s_fn_init"><td><code><a href="#fn_init">init(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/email.go</code></td><td class="percent"><code>66.67%</code></td><td class="linecount"><code>2/3</code></td></tr>
<tr id="s_fn_init"><td><code><a href="#fn_init">init(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/discord.go</code></td><td class="percent"><code>66.67%</code></td><td class="linecount"><code>2/3</code></td></tr>
<tr id="s_fn_init"><td><code><a href="#fn_init">init(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/twilio.go</code></td><td class="percent"><code>66.67%</code></td><td class="linecount"><code>2/3</code></td></tr>
<tr id="s_fn_init"><td><code><a href="#fn_init">init(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/webhook.go</code></td><td class="percent"><code>66.67%</code></td><td class="linecount"><code>2/3</code></td></tr>
<tr id="s_fn_init"><td><code><a href="#fn_init">init(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/slack.go</code></td><td class="percent"><code>66.67%</code></td><td class="linecount"><code>2/3</code></td></tr>
<tr id="s_fn_twilio.Send"><td><code><a href="#fn_twilio.Send">twilio.Send(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/twilio.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/25</code></td></tr>
<tr id="s_fn_webhooker.run"><td><code><a href="#fn_webhooker.run">webhooker.run(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/webhook.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/21</code></td></tr>
<tr id="s_fn_discord.OnTest"><td><code><a href="#fn_discord.OnTest">discord.OnTest(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/discord.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/20</code></td></tr>
<tr id="s_fn_lineNotifier.Send"><td><code><a href="#fn_lineNotifier.Send">lineNotifier.Send(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/line_notify.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/14</code></td></tr>
<tr id="s_fn_email.dialSend"><td><code><a href="#fn_email.dialSend">email.dialSend(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/email.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/12</code></td></tr>
<tr id="s_fn_emailTemplate"><td><code><a href="#fn_emailTemplate">emailTemplate(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/email.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/9</code></td></tr>
<tr id="s_fn_webhooker.OnTest"><td><code><a href="#fn_webhooker.OnTest">webhooker.OnTest(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/webhook.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/9</code></td></tr>
<tr id="s_fn_slack.OnTest"><td><code><a href="#fn_slack.OnTest">slack.OnTest(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/slack.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/9</code></td></tr>
<tr id="s_fn_email.OnTest"><td><code><a href="#fn_email.OnTest">email.OnTest(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/email.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/8</code></td></tr>
<tr id="s_fn_discord.Send"><td><code><a href="#fn_discord.Send">discord.Send(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/discord.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/8</code></td></tr>
<tr id="s_fn_replaceBodyText"><td><code><a href="#fn_replaceBodyText">replaceBodyText(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/webhook.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/7</code></td></tr>
<tr id="s_fn_slack.Send"><td><code><a href="#fn_slack.Send">slack.Send(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/slack.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/7</code></td></tr>
<tr id="s_fn_parseSlackMessage"><td><code><a href="#fn_parseSlackMessage">parseSlackMessage(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/slack.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/7</code></td></tr>
<tr id="s_fn_email.Send"><td><code><a href="#fn_email.Send">email.Send(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/email.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/6</code></td></tr>
<tr id="s_fn_twilioSuccess"><td><code><a href="#fn_twilioSuccess">twilioSuccess(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/twilio.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/5</code></td></tr>
<tr id="s_fn_lineNotifier.OnSuccess"><td><code><a href="#fn_lineNotifier.OnSuccess">lineNotifier.OnSuccess(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/line_notify.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/4</code></td></tr>
<tr id="s_fn_webhooker.Send"><td><code><a href="#fn_webhooker.Send">webhooker.Send(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/webhook.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/4</code></td></tr>
<tr id="s_fn_discord.OnSuccess"><td><code><a href="#fn_discord.OnSuccess">discord.OnSuccess(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/discord.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/4</code></td></tr>
<tr id="s_fn_slack.OnSuccess"><td><code><a href="#fn_slack.OnSuccess">slack.OnSuccess(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/slack.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/4</code></td></tr>
<tr id="s_fn_email.OnSuccess"><td><code><a href="#fn_email.OnSuccess">email.OnSuccess(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/email.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/4</code></td></tr>
<tr id="s_fn_webhooker.OnSuccess"><td><code><a href="#fn_webhooker.OnSuccess">webhooker.OnSuccess(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/webhook.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/4</code></td></tr>
<tr id="s_fn_twilio.OnSuccess"><td><code><a href="#fn_twilio.OnSuccess">twilio.OnSuccess(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/twilio.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/4</code></td></tr>
<tr id="s_fn_twilio.OnFailure"><td><code><a href="#fn_twilio.OnFailure">twilio.OnFailure(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/twilio.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/3</code></td></tr>
<tr id="s_fn_discord.OnSave"><td><code><a href="#fn_discord.OnSave">discord.OnSave(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/discord.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/3</code></td></tr>
<tr id="s_fn_lineNotifier.OnFailure"><td><code><a href="#fn_lineNotifier.OnFailure">lineNotifier.OnFailure(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/line_notify.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/3</code></td></tr>
<tr id="s_fn_email.OnFailure"><td><code><a href="#fn_email.OnFailure">email.OnFailure(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/email.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/3</code></td></tr>
<tr id="s_fn_slack.OnSave"><td><code><a href="#fn_slack.OnSave">slack.OnSave(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/slack.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/3</code></td></tr>
<tr id="s_fn_twilioError"><td><code><a href="#fn_twilioError">twilioError(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/twilio.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/3</code></td></tr>
<tr id="s_fn_slack.OnFailure"><td><code><a href="#fn_slack.OnFailure">slack.OnFailure(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/slack.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/3</code></td></tr>
<tr id="s_fn_webhooker.OnFailure"><td><code><a href="#fn_webhooker.OnFailure">webhooker.OnFailure(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/webhook.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/3</code></td></tr>
<tr id="s_fn_discord.OnFailure"><td><code><a href="#fn_discord.OnFailure">discord.OnFailure(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/discord.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/3</code></td></tr>
<tr id="s_fn_twilio.OnTest"><td><code><a href="#fn_twilio.OnTest">twilio.OnTest(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/twilio.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/2</code></td></tr>
<tr id="s_fn_lineNotifier.OnSave"><td><code><a href="#fn_lineNotifier.OnSave">lineNotifier.OnSave(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/line_notify.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/2</code></td></tr>
<tr id="s_fn_emailSource"><td><code><a href="#fn_emailSource">emailSource(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/email.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/2</code></td></tr>
<tr id="s_fn_email.OnSave"><td><code><a href="#fn_email.OnSave">email.OnSave(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/email.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/2</code></td></tr>
<tr id="s_fn_twilio.OnSave"><td><code><a href="#fn_twilio.OnSave">twilio.OnSave(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/twilio.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/2</code></td></tr>
<tr id="s_fn_webhooker.OnSave"><td><code><a href="#fn_webhooker.OnSave">webhooker.OnSave(...)</a></code></td><td><code>github.com/hunterlong/statup/notifiers/webhook.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
<tr><td colspan="2"><code>github.com/hunterlong/statup/notifiers</code></td><td class="percent"><code>7.00%</code></td><td class="linecount"><code>18/257</code></td></tr>
</table>
<div class="funcname" id="fn_twilio.Select">func twilio.Select</div><div class="info"><a href="#s_fn_twilio.Select">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/twilio.go</code>:</p></div><table class="listing">
<tr><td>78</td><td><code><pre>func (u *twilio) Select() *notifier.Notification {</pre></code></td></tr><tr><td>79</td><td><code><pre> return u.Notification</pre></code></td></tr><tr><td>80</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_lineNotifier.Select">func lineNotifier.Select</div><div class="info"><a href="#s_fn_lineNotifier.Select">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/line_notify.go</code>:</p></div><table class="listing">
<tr><td>78</td><td><code><pre>func (u *lineNotifier) Select() *notifier.Notification {</pre></code></td></tr><tr><td>79</td><td><code><pre> return u.Notification</pre></code></td></tr><tr><td>80</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_discord.Select">func discord.Select</div><div class="info"><a href="#s_fn_discord.Select">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/discord.go</code>:</p></div><table class="listing">
<tr><td>71</td><td><code><pre>func (u *discord) Select() *notifier.Notification {</pre></code></td></tr><tr><td>72</td><td><code><pre> return u.Notification</pre></code></td></tr><tr><td>73</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_webhooker.Select">func webhooker.Select</div><div class="info"><a href="#s_fn_webhooker.Select">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/webhook.go</code>:</p></div><table class="listing">
<tr><td>97</td><td><code><pre>func (w *webhooker) Select() *notifier.Notification {</pre></code></td></tr><tr><td>98</td><td><code><pre> return w.Notification</pre></code></td></tr><tr><td>99</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_slack.Select">func slack.Select</div><div class="info"><a href="#s_fn_slack.Select">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/slack.go</code>:</p></div><table class="listing">
<tr><td>97</td><td><code><pre>func (u *slack) Select() *notifier.Notification {</pre></code></td></tr><tr><td>98</td><td><code><pre> return u.Notification</pre></code></td></tr><tr><td>99</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_email.Select">func email.Select</div><div class="info"><a href="#s_fn_email.Select">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/email.go</code>:</p></div><table class="listing">
<tr><td>209</td><td><code><pre>func (u *email) Select() *notifier.Notification {</pre></code></td></tr><tr><td>210</td><td><code><pre> return u.Notification</pre></code></td></tr><tr><td>211</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_init">func init</div><div class="info"><a href="#s_fn_init">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/line_notify.go</code>:</p></div><table class="listing">
<tr><td>51</td><td><code><pre>func init() {</pre></code></td></tr><tr><td>52</td><td><code><pre> err := notifier.AddNotifier(lineNotify)</pre></code></td></tr><tr><td>53</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>54</td><td><code><pre> panic(err)</pre></code></td></tr><tr><td>55</td><td><code><pre> }</pre></code></td></tr><tr><td>56</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_init">func init</div><div class="info"><a href="#s_fn_init">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/email.go</code>:</p></div><table class="listing">
<tr><td>153</td><td><code><pre>func init() {</pre></code></td></tr><tr><td>154</td><td><code><pre> err := notifier.AddNotifier(emailer)</pre></code></td></tr><tr><td>155</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>156</td><td><code><pre> panic(err)</pre></code></td></tr><tr><td>157</td><td><code><pre> }</pre></code></td></tr><tr><td>158</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_init">func init</div><div class="info"><a href="#s_fn_init">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/discord.go</code>:</p></div><table class="listing">
<tr><td>51</td><td><code><pre>func init() {</pre></code></td></tr><tr><td>52</td><td><code><pre> err := notifier.AddNotifier(discorder)</pre></code></td></tr><tr><td>53</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>54</td><td><code><pre> panic(err)</pre></code></td></tr><tr><td>55</td><td><code><pre> }</pre></code></td></tr><tr><td>56</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_init">func init</div><div class="info"><a href="#s_fn_init">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/twilio.go</code>:</p></div><table class="listing">
<tr><td>71</td><td><code><pre>func init() {</pre></code></td></tr><tr><td>72</td><td><code><pre> err := notifier.AddNotifier(twilioNotifier)</pre></code></td></tr><tr><td>73</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>74</td><td><code><pre> panic(err)</pre></code></td></tr><tr><td>75</td><td><code><pre> }</pre></code></td></tr><tr><td>76</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_init">func init</div><div class="info"><a href="#s_fn_init">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/webhook.go</code>:</p></div><table class="listing">
<tr><td>81</td><td><code><pre>func init() {</pre></code></td></tr><tr><td>82</td><td><code><pre> err := notifier.AddNotifier(webhook)</pre></code></td></tr><tr><td>83</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>84</td><td><code><pre> panic(err)</pre></code></td></tr><tr><td>85</td><td><code><pre> }</pre></code></td></tr><tr><td>86</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_init">func init</div><div class="info"><a href="#s_fn_init">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/slack.go</code>:</p></div><table class="listing">
<tr><td>77</td><td><code><pre>func init() {</pre></code></td></tr><tr><td>78</td><td><code><pre> err := notifier.AddNotifier(slacker)</pre></code></td></tr><tr><td>79</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>80</td><td><code><pre> panic(err)</pre></code></td></tr><tr><td>81</td><td><code><pre> }</pre></code></td></tr><tr><td>82</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_twilio.Send">func twilio.Send</div><div class="info"><a href="#s_fn_twilio.Send">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/twilio.go</code>:</p></div><table class="listing">
<tr><td>83</td><td><code><pre>func (u *twilio) Send(msg interface{}) error {</pre></code></td></tr><tr class="miss"><td>84</td><td><code><pre> message := msg.(string)</pre></code></td></tr><tr class="miss"><td>85</td><td><code><pre> twilioUrl := fmt.Sprintf(&#34;https://api.twilio.com/2010-04-01/Accounts/%v/Messages.json&#34;, u.GetValue(&#34;api_key&#34;))</pre></code></td></tr><tr class="miss"><td>86</td><td><code><pre> client := &amp;http.Client{}</pre></code></td></tr><tr class="miss"><td>87</td><td><code><pre> v := url.Values{}</pre></code></td></tr><tr class="miss"><td>88</td><td><code><pre> v.Set(&#34;To&#34;, &#34;+&#34;+u.Var1)</pre></code></td></tr><tr class="miss"><td>89</td><td><code><pre> v.Set(&#34;From&#34;, &#34;+&#34;+u.Var2)</pre></code></td></tr><tr class="miss"><td>90</td><td><code><pre> v.Set(&#34;Body&#34;, message)</pre></code></td></tr><tr class="miss"><td>91</td><td><code><pre> rb := *strings.NewReader(v.Encode())</pre></code></td></tr><tr class="miss"><td>92</td><td><code><pre> req, err := http.NewRequest(&#34;POST&#34;, twilioUrl, &amp;rb)</pre></code></td></tr><tr class="miss"><td>93</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>94</td><td><code><pre> return err</pre></code></td></tr><tr><td>95</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>96</td><td><code><pre> req.SetBasicAuth(u.ApiKey, u.ApiSecret)</pre></code></td></tr><tr class="miss"><td>97</td><td><code><pre> req.Header.Add(&#34;Accept&#34;, &#34;application/json&#34;)</pre></code></td></tr><tr class="miss"><td>98</td><td><code><pre> req.Header.Add(&#34;Content-Type&#34;, &#34;application/x-www-form-urlencoded&#34;)</pre></code></td></tr><tr class="miss"><td>99</td><td><code><pre> res, err := client.Do(req)</pre></code></td></tr><tr class="miss"><td>100</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>101</td><td><code><pre> return err</pre></code></td></tr><tr><td>102</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>103</td><td><code><pre> defer res.Body.Close()</pre></code></td></tr><tr class="miss"><td>104</td><td><code><pre> contents, _ := ioutil.ReadAll(res.Body)</pre></code></td></tr><tr class="miss"><td>105</td><td><code><pre> success, _ := twilioSuccess(contents)</pre></code></td></tr><tr class="miss"><td>106</td><td><code><pre> if !success {</pre></code></td></tr><tr class="miss"><td>107</td><td><code><pre> errorOut := twilioError(contents)</pre></code></td></tr><tr class="miss"><td>108</td><td><code><pre> out := fmt.Sprintf(&#34;Error code %v - %v&#34;, errorOut.Code, errorOut.Message)</pre></code></td></tr><tr class="miss"><td>109</td><td><code><pre> return errors.New(out)</pre></code></td></tr><tr><td>110</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>111</td><td><code><pre> return nil</pre></code></td></tr><tr><td>112</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_webhooker.run">func webhooker.run</div><div class="info"><a href="#s_fn_webhooker.run">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/webhook.go</code>:</p></div><table class="listing">
<tr><td>113</td><td><code><pre>func (w *webhooker) run(body string) (*http.Response, error) {</pre></code></td></tr><tr class="miss"><td>114</td><td><code><pre> utils.Log(1, fmt.Sprintf(&#34;sending body: &#39;%v&#39; to %v as a %v request&#34;, body, w.Host, w.Var1))</pre></code></td></tr><tr class="miss"><td>115</td><td><code><pre> client := new(http.Client)</pre></code></td></tr><tr class="miss"><td>116</td><td><code><pre> client.Timeout = time.Duration(10 * time.Second)</pre></code></td></tr><tr class="miss"><td>117</td><td><code><pre> var buf *bytes.Buffer</pre></code></td></tr><tr class="miss"><td>118</td><td><code><pre> buf = bytes.NewBuffer(nil)</pre></code></td></tr><tr class="miss"><td>119</td><td><code><pre> if w.Var2 != &#34;&#34; {</pre></code></td></tr><tr class="miss"><td>120</td><td><code><pre> buf = bytes.NewBuffer([]byte(w.Var2))</pre></code></td></tr><tr><td>121</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>122</td><td><code><pre> req, err := http.NewRequest(w.Var1, w.Host, buf)</pre></code></td></tr><tr class="miss"><td>123</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>124</td><td><code><pre> return nil, err</pre></code></td></tr><tr><td>125</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>126</td><td><code><pre> if w.ApiSecret != &#34;&#34; {</pre></code></td></tr><tr class="miss"><td>127</td><td><code><pre> splitArray := strings.Split(w.ApiSecret, &#34;,&#34;)</pre></code></td></tr><tr class="miss"><td>128</td><td><code><pre> for _, a := range splitArray {</pre></code></td></tr><tr class="miss"><td>129</td><td><code><pre> split := strings.Split(a, &#34;=&#34;)</pre></code></td></tr><tr class="miss"><td>130</td><td><code><pre> req.Header.Add(split[0], split[1])</pre></code></td></tr><tr><td>131</td><td><code><pre> }</pre></code></td></tr><tr><td>132</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>133</td><td><code><pre> if w.ApiKey != &#34;&#34; {</pre></code></td></tr><tr class="miss"><td>134</td><td><code><pre> req.Header.Add(&#34;Content-Type&#34;, w.ApiKey)</pre></code></td></tr><tr><td>135</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>136</td><td><code><pre> resp, err := client.Do(req)</pre></code></td></tr><tr class="miss"><td>137</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>138</td><td><code><pre> return nil, err</pre></code></td></tr><tr><td>139</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>140</td><td><code><pre> return resp, err</pre></code></td></tr><tr><td>141</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_discord.OnTest">func discord.OnTest</div><div class="info"><a href="#s_fn_discord.OnTest">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/discord.go</code>:</p></div><table class="listing">
<tr><td>99</td><td><code><pre>func (u *discord) OnTest() error {</pre></code></td></tr><tr class="miss"><td>100</td><td><code><pre> outError := errors.New(&#34;Incorrect discord URL, please confirm URL is correct&#34;)</pre></code></td></tr><tr class="miss"><td>101</td><td><code><pre> message := `{&#34;content&#34;: &#34;Testing the discord notifier&#34;}`</pre></code></td></tr><tr class="miss"><td>102</td><td><code><pre> req, _ := http.NewRequest(&#34;POST&#34;, discorder.Host, bytes.NewBuffer([]byte(message)))</pre></code></td></tr><tr class="miss"><td>103</td><td><code><pre> req.Header.Set(&#34;Content-Type&#34;, &#34;application/json&#34;)</pre></code></td></tr><tr class="miss"><td>104</td><td><code><pre> client := &amp;http.Client{}</pre></code></td></tr><tr class="miss"><td>105</td><td><code><pre> resp, err := client.Do(req)</pre></code></td></tr><tr class="miss"><td>106</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>107</td><td><code><pre> return err</pre></code></td></tr><tr><td>108</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>109</td><td><code><pre> defer resp.Body.Close()</pre></code></td></tr><tr class="miss"><td>110</td><td><code><pre> contents, _ := ioutil.ReadAll(resp.Body)</pre></code></td></tr><tr class="miss"><td>111</td><td><code><pre> if string(contents) == &#34;&#34; {</pre></code></td></tr><tr class="miss"><td>112</td><td><code><pre> return nil</pre></code></td></tr><tr><td>113</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>114</td><td><code><pre> var d discordTestJson</pre></code></td></tr><tr class="miss"><td>115</td><td><code><pre> err = json.Unmarshal(contents, &amp;d)</pre></code></td></tr><tr class="miss"><td>116</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>117</td><td><code><pre> return outError</pre></code></td></tr><tr><td>118</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>119</td><td><code><pre> if d.Code == 0 {</pre></code></td></tr><tr class="miss"><td>120</td><td><code><pre> return outError</pre></code></td></tr><tr><td>121</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>122</td><td><code><pre> fmt.Println(&#34;discord: &#34;, string(contents))</pre></code></td></tr><tr class="miss"><td>123</td><td><code><pre> return nil</pre></code></td></tr><tr><td>124</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_lineNotifier.Send">func lineNotifier.Send</div><div class="info"><a href="#s_fn_lineNotifier.Send">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/line_notify.go</code>:</p></div><table class="listing">
<tr><td>59</td><td><code><pre>func (u *lineNotifier) Send(msg interface{}) error {</pre></code></td></tr><tr class="miss"><td>60</td><td><code><pre> message := msg.(string)</pre></code></td></tr><tr class="miss"><td>61</td><td><code><pre> client := new(http.Client)</pre></code></td></tr><tr class="miss"><td>62</td><td><code><pre> v := url.Values{}</pre></code></td></tr><tr class="miss"><td>63</td><td><code><pre> v.Set(&#34;message&#34;, message)</pre></code></td></tr><tr class="miss"><td>64</td><td><code><pre> req, err := http.NewRequest(&#34;POST&#34;, &#34;https://notify-api.line.me/api/notify&#34;, strings.NewReader(v.Encode()))</pre></code></td></tr><tr class="miss"><td>65</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>66</td><td><code><pre> return err</pre></code></td></tr><tr><td>67</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>68</td><td><code><pre> req.Header.Add(&#34;Authorization&#34;, fmt.Sprintf(&#34;Bearer %v&#34;, u.GetValue(&#34;api_secret&#34;)))</pre></code></td></tr><tr class="miss"><td>69</td><td><code><pre> req.Header.Add(&#34;Accept&#34;, &#34;application/json&#34;)</pre></code></td></tr><tr class="miss"><td>70</td><td><code><pre> req.Header.Add(&#34;Content-Type&#34;, &#34;application/x-www-form-urlencoded&#34;)</pre></code></td></tr><tr class="miss"><td>71</td><td><code><pre> _, err = client.Do(req)</pre></code></td></tr><tr class="miss"><td>72</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>73</td><td><code><pre> return err</pre></code></td></tr><tr><td>74</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>75</td><td><code><pre> return nil</pre></code></td></tr><tr><td>76</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_email.dialSend">func email.dialSend</div><div class="info"><a href="#s_fn_email.dialSend">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/email.go</code>:</p></div><table class="listing">
<tr><td>233</td><td><code><pre>func (u *email) dialSend(email *emailOutgoing) error {</pre></code></td></tr><tr class="miss"><td>234</td><td><code><pre> mailer = mail.NewDialer(emailer.Host, emailer.Port, emailer.Username, emailer.Password)</pre></code></td></tr><tr class="miss"><td>235</td><td><code><pre> mailer.TLSConfig = &amp;tls.Config{InsecureSkipVerify: true}</pre></code></td></tr><tr class="miss"><td>236</td><td><code><pre> emailSource(email)</pre></code></td></tr><tr class="miss"><td>237</td><td><code><pre> m := mail.NewMessage()</pre></code></td></tr><tr class="miss"><td>238</td><td><code><pre> m.SetHeader(&#34;From&#34;, email.From)</pre></code></td></tr><tr class="miss"><td>239</td><td><code><pre> m.SetHeader(&#34;To&#34;, email.To)</pre></code></td></tr><tr class="miss"><td>240</td><td><code><pre> m.SetHeader(&#34;Subject&#34;, email.Subject)</pre></code></td></tr><tr class="miss"><td>241</td><td><code><pre> m.SetBody(&#34;text/html&#34;, email.Source)</pre></code></td></tr><tr class="miss"><td>242</td><td><code><pre> if err := mailer.DialAndSend(m); err != nil {</pre></code></td></tr><tr class="miss"><td>243</td><td><code><pre> utils.Log(3, fmt.Sprintf(&#34;email &#39;%v&#39; sent to: %v using the %v template (size: %v) %v&#34;, email.Subject, email.To, email.Template, len([]byte(email.Source)), err))</pre></code></td></tr><tr class="miss"><td>244</td><td><code><pre> return err</pre></code></td></tr><tr><td>245</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>246</td><td><code><pre> return nil</pre></code></td></tr><tr><td>247</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_emailTemplate">func emailTemplate</div><div class="info"><a href="#s_fn_emailTemplate">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/email.go</code>:</p></div><table class="listing">
<tr><td>254</td><td><code><pre>func emailTemplate(contents string, data interface{}) string {</pre></code></td></tr><tr class="miss"><td>255</td><td><code><pre> t := template.New(&#34;email&#34;)</pre></code></td></tr><tr class="miss"><td>256</td><td><code><pre> t, err := t.Parse(contents)</pre></code></td></tr><tr class="miss"><td>257</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>258</td><td><code><pre> utils.Log(3, err)</pre></code></td></tr><tr><td>259</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>260</td><td><code><pre> var tpl bytes.Buffer</pre></code></td></tr><tr class="miss"><td>261</td><td><code><pre> if err := t.Execute(&amp;tpl, data); err != nil {</pre></code></td></tr><tr class="miss"><td>262</td><td><code><pre> utils.Log(2, err)</pre></code></td></tr><tr><td>263</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>264</td><td><code><pre> result := tpl.String()</pre></code></td></tr><tr class="miss"><td>265</td><td><code><pre> return result</pre></code></td></tr><tr><td>266</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_webhooker.OnTest">func webhooker.OnTest</div><div class="info"><a href="#s_fn_webhooker.OnTest">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/webhook.go</code>:</p></div><table class="listing">
<tr><td>143</td><td><code><pre>func (w *webhooker) OnTest() error {</pre></code></td></tr><tr class="miss"><td>144</td><td><code><pre> service := &amp;types.Service{</pre></code></td></tr><tr><td>145</td><td><code><pre> Id: 1,</pre></code></td></tr><tr><td>146</td><td><code><pre> Name: &#34;Interpol - All The Rage Back Home&#34;,</pre></code></td></tr><tr><td>147</td><td><code><pre> Domain: &#34;https://www.youtube.com/watch?v=-u6DvRyyKGU&#34;,</pre></code></td></tr><tr><td>148</td><td><code><pre> ExpectedStatus: 200,</pre></code></td></tr><tr><td>149</td><td><code><pre> Interval: 30,</pre></code></td></tr><tr><td>150</td><td><code><pre> Type: &#34;http&#34;,</pre></code></td></tr><tr><td>151</td><td><code><pre> Method: &#34;GET&#34;,</pre></code></td></tr><tr><td>152</td><td><code><pre> Timeout: 20,</pre></code></td></tr><tr><td>153</td><td><code><pre> LastStatusCode: 404,</pre></code></td></tr><tr><td>154</td><td><code><pre> Expected: &#34;test example&#34;,</pre></code></td></tr><tr><td>155</td><td><code><pre> LastResponse: &#34;&lt;html&gt;this is an example response&lt;/html&gt;&#34;,</pre></code></td></tr><tr><td>156</td><td><code><pre> CreatedAt: time.Now().Add(-24 * time.Hour),</pre></code></td></tr><tr><td>157</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>158</td><td><code><pre> body := replaceBodyText(w.Var2, service, nil)</pre></code></td></tr><tr class="miss"><td>159</td><td><code><pre> resp, err := w.run(body)</pre></code></td></tr><tr class="miss"><td>160</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>161</td><td><code><pre> return err</pre></code></td></tr><tr><td>162</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>163</td><td><code><pre> defer resp.Body.Close()</pre></code></td></tr><tr class="miss"><td>164</td><td><code><pre> content, err := ioutil.ReadAll(resp.Body)</pre></code></td></tr><tr class="miss"><td>165</td><td><code><pre> utils.Log(1, fmt.Sprintf(&#34;webhook notifier received: &#39;%v&#39;&#34;, string(content)))</pre></code></td></tr><tr class="miss"><td>166</td><td><code><pre> return err</pre></code></td></tr><tr><td>167</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_slack.OnTest">func slack.OnTest</div><div class="info"><a href="#s_fn_slack.OnTest">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/slack.go</code>:</p></div><table class="listing">
<tr><td>101</td><td><code><pre>func (u *slack) OnTest() error {</pre></code></td></tr><tr class="miss"><td>102</td><td><code><pre> client := new(http.Client)</pre></code></td></tr><tr class="miss"><td>103</td><td><code><pre> res, err := client.Post(u.Host, &#34;application/json&#34;, bytes.NewBuffer([]byte(`{&#34;text&#34;:&#34;testing message&#34;}`)))</pre></code></td></tr><tr class="miss"><td>104</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>105</td><td><code><pre> return err</pre></code></td></tr><tr><td>106</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>107</td><td><code><pre> defer res.Body.Close()</pre></code></td></tr><tr class="miss"><td>108</td><td><code><pre> contents, _ := ioutil.ReadAll(res.Body)</pre></code></td></tr><tr class="miss"><td>109</td><td><code><pre> if string(contents) != &#34;ok&#34; {</pre></code></td></tr><tr class="miss"><td>110</td><td><code><pre> return errors.New(&#34;The slack response was incorrect, check the URL&#34;)</pre></code></td></tr><tr><td>111</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>112</td><td><code><pre> return err</pre></code></td></tr><tr><td>113</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_email.OnTest">func email.OnTest</div><div class="info"><a href="#s_fn_email.OnTest">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/email.go</code>:</p></div><table class="listing">
<tr><td>221</td><td><code><pre>func (u *email) OnTest() error {</pre></code></td></tr><tr class="miss"><td>222</td><td><code><pre> host := fmt.Sprintf(&#34;%v:%v&#34;, u.Host, u.Port)</pre></code></td></tr><tr class="miss"><td>223</td><td><code><pre> dial, err := smtp.Dial(host)</pre></code></td></tr><tr class="miss"><td>224</td><td><code><pre> dial.StartTLS(&amp;tls.Config{InsecureSkipVerify: true})</pre></code></td></tr><tr class="miss"><td>225</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>226</td><td><code><pre> utils.Log(3, err)</pre></code></td></tr><tr class="miss"><td>227</td><td><code><pre> return err</pre></code></td></tr><tr><td>228</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>229</td><td><code><pre> auth := smtp.PlainAuth(&#34;&#34;, u.Username, u.Password, host)</pre></code></td></tr><tr class="miss"><td>230</td><td><code><pre> return dial.Auth(auth)</pre></code></td></tr><tr><td>231</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_discord.Send">func discord.Send</div><div class="info"><a href="#s_fn_discord.Send">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/discord.go</code>:</p></div><table class="listing">
<tr><td>59</td><td><code><pre>func (u *discord) Send(msg interface{}) error {</pre></code></td></tr><tr class="miss"><td>60</td><td><code><pre> message := msg.(string)</pre></code></td></tr><tr class="miss"><td>61</td><td><code><pre> req, _ := http.NewRequest(&#34;POST&#34;, discorder.GetValue(&#34;host&#34;), bytes.NewBuffer([]byte(message)))</pre></code></td></tr><tr class="miss"><td>62</td><td><code><pre> req.Header.Set(&#34;Content-Type&#34;, &#34;application/json&#34;)</pre></code></td></tr><tr class="miss"><td>63</td><td><code><pre> client := &amp;http.Client{}</pre></code></td></tr><tr class="miss"><td>64</td><td><code><pre> resp, err := client.Do(req)</pre></code></td></tr><tr class="miss"><td>65</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>66</td><td><code><pre> return err</pre></code></td></tr><tr><td>67</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>68</td><td><code><pre> return resp.Body.Close()</pre></code></td></tr><tr><td>69</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_replaceBodyText">func replaceBodyText</div><div class="info"><a href="#s_fn_replaceBodyText">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/webhook.go</code>:</p></div><table class="listing">
<tr><td>101</td><td><code><pre>func replaceBodyText(body string, s *types.Service, f *types.Failure) string {</pre></code></td></tr><tr class="miss"><td>102</td><td><code><pre> if s != nil {</pre></code></td></tr><tr class="miss"><td>103</td><td><code><pre> body = strings.Replace(body, &#34;%service.Name&#34;, s.Name, -1)</pre></code></td></tr><tr class="miss"><td>104</td><td><code><pre> body = strings.Replace(body, &#34;%service.Id&#34;, utils.ToString(s.Id), -1)</pre></code></td></tr><tr class="miss"><td>105</td><td><code><pre> body = strings.Replace(body, &#34;%service.Online&#34;, utils.ToString(s.Online), -1)</pre></code></td></tr><tr><td>106</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>107</td><td><code><pre> if f != nil {</pre></code></td></tr><tr class="miss"><td>108</td><td><code><pre> body = strings.Replace(body, &#34;%failure.Issue&#34;, f.Issue, -1)</pre></code></td></tr><tr><td>109</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>110</td><td><code><pre> return body</pre></code></td></tr><tr><td>111</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_slack.Send">func slack.Send</div><div class="info"><a href="#s_fn_slack.Send">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/slack.go</code>:</p></div><table class="listing">
<tr><td>85</td><td><code><pre>func (u *slack) Send(msg interface{}) error {</pre></code></td></tr><tr class="miss"><td>86</td><td><code><pre> message := msg.(string)</pre></code></td></tr><tr class="miss"><td>87</td><td><code><pre> client := new(http.Client)</pre></code></td></tr><tr class="miss"><td>88</td><td><code><pre> res, err := client.Post(u.Host, &#34;application/json&#34;, bytes.NewBuffer([]byte(message)))</pre></code></td></tr><tr class="miss"><td>89</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>90</td><td><code><pre> return err</pre></code></td></tr><tr><td>91</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>92</td><td><code><pre> defer res.Body.Close()</pre></code></td></tr><tr><td>93</td><td><code><pre> //contents, _ := ioutil.ReadAll(res.Body)</pre></code></td></tr><tr class="miss"><td>94</td><td><code><pre> return nil</pre></code></td></tr><tr><td>95</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_parseSlackMessage">func parseSlackMessage</div><div class="info"><a href="#s_fn_parseSlackMessage">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/slack.go</code>:</p></div><table class="listing">
<tr><td>59</td><td><code><pre>func parseSlackMessage(temp string, data interface{}) error {</pre></code></td></tr><tr class="miss"><td>60</td><td><code><pre> buf := new(bytes.Buffer)</pre></code></td></tr><tr class="miss"><td>61</td><td><code><pre> slackTemp, _ := template.New(&#34;slack&#34;).Parse(temp)</pre></code></td></tr><tr class="miss"><td>62</td><td><code><pre> err := slackTemp.Execute(buf, data)</pre></code></td></tr><tr class="miss"><td>63</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>64</td><td><code><pre> return err</pre></code></td></tr><tr><td>65</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>66</td><td><code><pre> slacker.AddQueue(buf.String())</pre></code></td></tr><tr class="miss"><td>67</td><td><code><pre> return nil</pre></code></td></tr><tr><td>68</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_email.Send">func email.Send</div><div class="info"><a href="#s_fn_email.Send">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/email.go</code>:</p></div><table class="listing">
<tr><td>161</td><td><code><pre>func (u *email) Send(msg interface{}) error {</pre></code></td></tr><tr class="miss"><td>162</td><td><code><pre> email := msg.(*emailOutgoing)</pre></code></td></tr><tr class="miss"><td>163</td><td><code><pre> err := u.dialSend(email)</pre></code></td></tr><tr class="miss"><td>164</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>165</td><td><code><pre> utils.Log(3, fmt.Sprintf(&#34;email Notifier could not send email: %v&#34;, err))</pre></code></td></tr><tr class="miss"><td>166</td><td><code><pre> return err</pre></code></td></tr><tr><td>167</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>168</td><td><code><pre> return nil</pre></code></td></tr><tr><td>169</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_twilioSuccess">func twilioSuccess</div><div class="info"><a href="#s_fn_twilioSuccess">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/twilio.go</code>:</p></div><table class="listing">
<tr><td>145</td><td><code><pre>func twilioSuccess(res []byte) (bool, twilioResponse) {</pre></code></td></tr><tr class="miss"><td>146</td><td><code><pre> var obj twilioResponse</pre></code></td></tr><tr class="miss"><td>147</td><td><code><pre> json.Unmarshal(res, &amp;obj)</pre></code></td></tr><tr class="miss"><td>148</td><td><code><pre> if obj.Status == &#34;queued&#34; {</pre></code></td></tr><tr class="miss"><td>149</td><td><code><pre> return true, obj</pre></code></td></tr><tr><td>150</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>151</td><td><code><pre> return false, obj</pre></code></td></tr><tr><td>152</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_lineNotifier.OnSuccess">func lineNotifier.OnSuccess</div><div class="info"><a href="#s_fn_lineNotifier.OnSuccess">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/line_notify.go</code>:</p></div><table class="listing">
<tr><td>90</td><td><code><pre>func (u *lineNotifier) OnSuccess(s *types.Service) {</pre></code></td></tr><tr class="miss"><td>91</td><td><code><pre> if !u.Online {</pre></code></td></tr><tr class="miss"><td>92</td><td><code><pre> msg := fmt.Sprintf(&#34;Your service &#39;%v&#39; is back online!&#34;, s.Name)</pre></code></td></tr><tr class="miss"><td>93</td><td><code><pre> u.AddQueue(msg)</pre></code></td></tr><tr><td>94</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>95</td><td><code><pre> u.Online = true</pre></code></td></tr><tr><td>96</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_webhooker.Send">func webhooker.Send</div><div class="info"><a href="#s_fn_webhooker.Send">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/webhook.go</code>:</p></div><table class="listing">
<tr><td>89</td><td><code><pre>func (w *webhooker) Send(msg interface{}) error {</pre></code></td></tr><tr class="miss"><td>90</td><td><code><pre> resp, err := w.run(msg.(string))</pre></code></td></tr><tr class="miss"><td>91</td><td><code><pre> if err == nil {</pre></code></td></tr><tr class="miss"><td>92</td><td><code><pre> resp.Body.Close()</pre></code></td></tr><tr><td>93</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>94</td><td><code><pre> return err</pre></code></td></tr><tr><td>95</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_discord.OnSuccess">func discord.OnSuccess</div><div class="info"><a href="#s_fn_discord.OnSuccess">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/discord.go</code>:</p></div><table class="listing">
<tr><td>83</td><td><code><pre>func (u *discord) OnSuccess(s *types.Service) {</pre></code></td></tr><tr class="miss"><td>84</td><td><code><pre> if !u.Online {</pre></code></td></tr><tr class="miss"><td>85</td><td><code><pre> msg := fmt.Sprintf(`{&#34;content&#34;: &#34;Your service &#39;%v&#39; is back online!&#34;}`, s.Name)</pre></code></td></tr><tr class="miss"><td>86</td><td><code><pre> u.AddQueue(msg)</pre></code></td></tr><tr><td>87</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>88</td><td><code><pre> u.Online = true</pre></code></td></tr><tr><td>89</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_slack.OnSuccess">func slack.OnSuccess</div><div class="info"><a href="#s_fn_slack.OnSuccess">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/slack.go</code>:</p></div><table class="listing">
<tr><td>127</td><td><code><pre>func (u *slack) OnSuccess(s *types.Service) {</pre></code></td></tr><tr class="miss"><td>128</td><td><code><pre> if !u.Online {</pre></code></td></tr><tr class="miss"><td>129</td><td><code><pre> message := slackMessage{</pre></code></td></tr><tr><td>130</td><td><code><pre> Service: s,</pre></code></td></tr><tr><td>131</td><td><code><pre> Template: successTemplate,</pre></code></td></tr><tr><td>132</td><td><code><pre> Time: time.Now().Unix(),</pre></code></td></tr><tr><td>133</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>134</td><td><code><pre> parseSlackMessage(successTemplate, message)</pre></code></td></tr><tr><td>135</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>136</td><td><code><pre> u.Online = true</pre></code></td></tr><tr><td>137</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_email.OnSuccess">func email.OnSuccess</div><div class="info"><a href="#s_fn_email.OnSuccess">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/email.go</code>:</p></div><table class="listing">
<tr><td>195</td><td><code><pre>func (u *email) OnSuccess(s *types.Service) {</pre></code></td></tr><tr class="miss"><td>196</td><td><code><pre> if !u.Online {</pre></code></td></tr><tr class="miss"><td>197</td><td><code><pre> email := &amp;emailOutgoing{</pre></code></td></tr><tr><td>198</td><td><code><pre> To: emailer.GetValue(&#34;var2&#34;),</pre></code></td></tr><tr><td>199</td><td><code><pre> Subject: fmt.Sprintf(&#34;Service %v is Back Online&#34;, s.Name),</pre></code></td></tr><tr><td>200</td><td><code><pre> Template: mainEmailTemplate,</pre></code></td></tr><tr><td>201</td><td><code><pre> Data: interface{}(s),</pre></code></td></tr><tr><td>202</td><td><code><pre> From: emailer.GetValue(&#34;var1&#34;),</pre></code></td></tr><tr><td>203</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>204</td><td><code><pre> u.AddQueue(email)</pre></code></td></tr><tr><td>205</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>206</td><td><code><pre> u.Online = true</pre></code></td></tr><tr><td>207</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_webhooker.OnSuccess">func webhooker.OnSuccess</div><div class="info"><a href="#s_fn_webhooker.OnSuccess">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/webhook.go</code>:</p></div><table class="listing">
<tr><td>177</td><td><code><pre>func (w *webhooker) OnSuccess(s *types.Service) {</pre></code></td></tr><tr class="miss"><td>178</td><td><code><pre> if !w.Online {</pre></code></td></tr><tr class="miss"><td>179</td><td><code><pre> msg := replaceBodyText(w.Var2, s, nil)</pre></code></td></tr><tr class="miss"><td>180</td><td><code><pre> webhook.AddQueue(msg)</pre></code></td></tr><tr><td>181</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>182</td><td><code><pre> w.Online = true</pre></code></td></tr><tr><td>183</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_twilio.OnSuccess">func twilio.OnSuccess</div><div class="info"><a href="#s_fn_twilio.OnSuccess">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/twilio.go</code>:</p></div><table class="listing">
<tr><td>122</td><td><code><pre>func (u *twilio) OnSuccess(s *types.Service) {</pre></code></td></tr><tr class="miss"><td>123</td><td><code><pre> if !u.Online {</pre></code></td></tr><tr class="miss"><td>124</td><td><code><pre> msg := fmt.Sprintf(&#34;Your service &#39;%v&#39; is back online!&#34;, s.Name)</pre></code></td></tr><tr class="miss"><td>125</td><td><code><pre> u.AddQueue(msg)</pre></code></td></tr><tr><td>126</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>127</td><td><code><pre> u.Online = true</pre></code></td></tr><tr><td>128</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_twilio.OnFailure">func twilio.OnFailure</div><div class="info"><a href="#s_fn_twilio.OnFailure">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/twilio.go</code>:</p></div><table class="listing">
<tr><td>115</td><td><code><pre>func (u *twilio) OnFailure(s *types.Service, f *types.Failure) {</pre></code></td></tr><tr class="miss"><td>116</td><td><code><pre> msg := fmt.Sprintf(&#34;Your service &#39;%v&#39; is currently offline!&#34;, s.Name)</pre></code></td></tr><tr class="miss"><td>117</td><td><code><pre> u.AddQueue(msg)</pre></code></td></tr><tr class="miss"><td>118</td><td><code><pre> u.Online = false</pre></code></td></tr><tr><td>119</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_discord.OnSave">func discord.OnSave</div><div class="info"><a href="#s_fn_discord.OnSave">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/discord.go</code>:</p></div><table class="listing">
<tr><td>92</td><td><code><pre>func (u *discord) OnSave() error {</pre></code></td></tr><tr class="miss"><td>93</td><td><code><pre> msg := fmt.Sprintf(`{&#34;content&#34;: &#34;The discord notifier on Statup was just updated.&#34;}`)</pre></code></td></tr><tr class="miss"><td>94</td><td><code><pre> u.AddQueue(msg)</pre></code></td></tr><tr class="miss"><td>95</td><td><code><pre> return nil</pre></code></td></tr><tr><td>96</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_lineNotifier.OnFailure">func lineNotifier.OnFailure</div><div class="info"><a href="#s_fn_lineNotifier.OnFailure">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/line_notify.go</code>:</p></div><table class="listing">
<tr><td>83</td><td><code><pre>func (u *lineNotifier) OnFailure(s *types.Service, f *types.Failure) {</pre></code></td></tr><tr class="miss"><td>84</td><td><code><pre> msg := fmt.Sprintf(&#34;Your service &#39;%v&#39; is currently offline!&#34;, s.Name)</pre></code></td></tr><tr class="miss"><td>85</td><td><code><pre> u.AddQueue(msg)</pre></code></td></tr><tr class="miss"><td>86</td><td><code><pre> u.Online = false</pre></code></td></tr><tr><td>87</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_email.OnFailure">func email.OnFailure</div><div class="info"><a href="#s_fn_email.OnFailure">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/email.go</code>:</p></div><table class="listing">
<tr><td>182</td><td><code><pre>func (u *email) OnFailure(s *types.Service, f *types.Failure) {</pre></code></td></tr><tr class="miss"><td>183</td><td><code><pre> email := &amp;emailOutgoing{</pre></code></td></tr><tr><td>184</td><td><code><pre> To: emailer.GetValue(&#34;var2&#34;),</pre></code></td></tr><tr><td>185</td><td><code><pre> Subject: fmt.Sprintf(&#34;Service %v is Failing&#34;, s.Name),</pre></code></td></tr><tr><td>186</td><td><code><pre> Template: mainEmailTemplate,</pre></code></td></tr><tr><td>187</td><td><code><pre> Data: interface{}(s),</pre></code></td></tr><tr><td>188</td><td><code><pre> From: emailer.GetValue(&#34;var1&#34;),</pre></code></td></tr><tr><td>189</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>190</td><td><code><pre> u.AddQueue(email)</pre></code></td></tr><tr class="miss"><td>191</td><td><code><pre> u.Online = false</pre></code></td></tr><tr><td>192</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_slack.OnSave">func slack.OnSave</div><div class="info"><a href="#s_fn_slack.OnSave">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/slack.go</code>:</p></div><table class="listing">
<tr><td>140</td><td><code><pre>func (u *slack) OnSave() error {</pre></code></td></tr><tr class="miss"><td>141</td><td><code><pre> message := fmt.Sprintf(&#34;Notification %v is receiving updated information.&#34;, u.Method)</pre></code></td></tr><tr class="miss"><td>142</td><td><code><pre> u.AddQueue(message)</pre></code></td></tr><tr class="miss"><td>143</td><td><code><pre> return nil</pre></code></td></tr><tr><td>144</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_twilioError">func twilioError</div><div class="info"><a href="#s_fn_twilioError">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/twilio.go</code>:</p></div><table class="listing">
<tr><td>154</td><td><code><pre>func twilioError(res []byte) twilioErrorObj {</pre></code></td></tr><tr class="miss"><td>155</td><td><code><pre> var obj twilioErrorObj</pre></code></td></tr><tr class="miss"><td>156</td><td><code><pre> json.Unmarshal(res, &amp;obj)</pre></code></td></tr><tr class="miss"><td>157</td><td><code><pre> return obj</pre></code></td></tr><tr><td>158</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_slack.OnFailure">func slack.OnFailure</div><div class="info"><a href="#s_fn_slack.OnFailure">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/slack.go</code>:</p></div><table class="listing">
<tr><td>116</td><td><code><pre>func (u *slack) OnFailure(s *types.Service, f *types.Failure) {</pre></code></td></tr><tr class="miss"><td>117</td><td><code><pre> message := slackMessage{</pre></code></td></tr><tr><td>118</td><td><code><pre> Service: s,</pre></code></td></tr><tr><td>119</td><td><code><pre> Template: failingTemplate,</pre></code></td></tr><tr><td>120</td><td><code><pre> Time: time.Now().Unix(),</pre></code></td></tr><tr><td>121</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>122</td><td><code><pre> parseSlackMessage(failingTemplate, message)</pre></code></td></tr><tr class="miss"><td>123</td><td><code><pre> u.Online = false</pre></code></td></tr><tr><td>124</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_webhooker.OnFailure">func webhooker.OnFailure</div><div class="info"><a href="#s_fn_webhooker.OnFailure">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/webhook.go</code>:</p></div><table class="listing">
<tr><td>170</td><td><code><pre>func (w *webhooker) OnFailure(s *types.Service, f *types.Failure) {</pre></code></td></tr><tr class="miss"><td>171</td><td><code><pre> msg := replaceBodyText(w.Var2, s, f)</pre></code></td></tr><tr class="miss"><td>172</td><td><code><pre> webhook.AddQueue(msg)</pre></code></td></tr><tr class="miss"><td>173</td><td><code><pre> w.Online = false</pre></code></td></tr><tr><td>174</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_discord.OnFailure">func discord.OnFailure</div><div class="info"><a href="#s_fn_discord.OnFailure">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/discord.go</code>:</p></div><table class="listing">
<tr><td>76</td><td><code><pre>func (u *discord) OnFailure(s *types.Service, f *types.Failure) {</pre></code></td></tr><tr class="miss"><td>77</td><td><code><pre> msg := fmt.Sprintf(`{&#34;content&#34;: &#34;Your service &#39;%v&#39; is currently failing! Reason: %v&#34;}`, s.Name, f.Issue)</pre></code></td></tr><tr class="miss"><td>78</td><td><code><pre> u.AddQueue(msg)</pre></code></td></tr><tr class="miss"><td>79</td><td><code><pre> u.Online = false</pre></code></td></tr><tr><td>80</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_twilio.OnTest">func twilio.OnTest</div><div class="info"><a href="#s_fn_twilio.OnTest">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/twilio.go</code>:</p></div><table class="listing">
<tr><td>140</td><td><code><pre>func (u *twilio) OnTest() error {</pre></code></td></tr><tr class="miss"><td>141</td><td><code><pre> msg := fmt.Sprintf(&#34;Testing the Twilio SMS Notifier&#34;)</pre></code></td></tr><tr class="miss"><td>142</td><td><code><pre> return u.Send(msg)</pre></code></td></tr><tr><td>143</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_lineNotifier.OnSave">func lineNotifier.OnSave</div><div class="info"><a href="#s_fn_lineNotifier.OnSave">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/line_notify.go</code>:</p></div><table class="listing">
<tr><td>99</td><td><code><pre>func (u *lineNotifier) OnSave() error {</pre></code></td></tr><tr class="miss"><td>100</td><td><code><pre> utils.Log(1, fmt.Sprintf(&#34;Notification %v is receiving updated information.&#34;, u.Method))</pre></code></td></tr><tr><td>101</td><td><code><pre> // Do updating stuff here</pre></code></td></tr><tr class="miss"><td>102</td><td><code><pre> return nil</pre></code></td></tr><tr><td>103</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_emailSource">func emailSource</div><div class="info"><a href="#s_fn_emailSource">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/email.go</code>:</p></div><table class="listing">
<tr><td>249</td><td><code><pre>func emailSource(email *emailOutgoing) {</pre></code></td></tr><tr class="miss"><td>250</td><td><code><pre> source := emailTemplate(email.Template, email.Data)</pre></code></td></tr><tr class="miss"><td>251</td><td><code><pre> email.Source = source</pre></code></td></tr><tr><td>252</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_email.OnSave">func email.OnSave</div><div class="info"><a href="#s_fn_email.OnSave">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/email.go</code>:</p></div><table class="listing">
<tr><td>214</td><td><code><pre>func (u *email) OnSave() error {</pre></code></td></tr><tr class="miss"><td>215</td><td><code><pre> utils.Log(1, fmt.Sprintf(&#34;Notification %v is receiving updated information.&#34;, u.Method))</pre></code></td></tr><tr><td>216</td><td><code><pre> // Do updating stuff here</pre></code></td></tr><tr class="miss"><td>217</td><td><code><pre> return nil</pre></code></td></tr><tr><td>218</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_twilio.OnSave">func twilio.OnSave</div><div class="info"><a href="#s_fn_twilio.OnSave">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/twilio.go</code>:</p></div><table class="listing">
<tr><td>131</td><td><code><pre>func (u *twilio) OnSave() error {</pre></code></td></tr><tr class="miss"><td>132</td><td><code><pre> utils.Log(1, fmt.Sprintf(&#34;Notification %v is receiving updated information.&#34;, u.Method))</pre></code></td></tr><tr><td>133</td><td><code><pre></pre></code></td></tr><tr><td>134</td><td><code><pre> // Do updating stuff here</pre></code></td></tr><tr><td>135</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>136</td><td><code><pre> return nil</pre></code></td></tr><tr><td>137</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_webhooker.OnSave">func webhooker.OnSave</div><div class="info"><a href="#s_fn_webhooker.OnSave">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/notifiers/webhook.go</code>:</p></div><table class="listing">
<tr><td>186</td><td><code><pre>func (w *webhooker) OnSave() error {</pre></code></td></tr><tr class="miss"><td>187</td><td><code><pre> return nil</pre></code></td></tr><tr><td>188</td><td><code><pre>}</pre></code></td></tr></table>
<!-- Can be parsed by external script
PACKAGE:github.com/hunterlong/statup/notifiers DONE:7.00
-->
<div id="pkg_github.com/hunterlong/statup/plugin" class="funcname">Package Overview: github.com/hunterlong/statup/plugin <span class="packageTotal">4.08%</span></div><p>This is a coverage report created after analysis of the <code>github.com/hunterlong/statup/plugin</code> package. It
has been generated with the following command:</p><pre class="cmd">gocov test github.com/hunterlong/statup/plugin | gocov-html</pre> <p>Here are the stats. Please select a function name to view its implementation and see what's left for testing.</p><table class="overview">
<tr id="s_fn_init"><td><code><a href="#fn_init">init(...)</a></code></td><td><code>github.com/hunterlong/statup/plugin/plugin.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
<tr id="s_fn_LoadPlugin"><td><code><a href="#fn_LoadPlugin">LoadPlugin(...)</a></code></td><td><code>github.com/hunterlong/statup/plugin/plugin.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/33</code></td></tr>
<tr id="s_fn_LoadPlugins"><td><code><a href="#fn_LoadPlugins">LoadPlugins(...)</a></code></td><td><code>github.com/hunterlong/statup/plugin/plugin.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/14</code></td></tr>
<tr><td colspan="2"><code>github.com/hunterlong/statup/plugin</code></td><td class="percent"><code>4.08%</code></td><td class="linecount"><code>2/49</code></td></tr>
</table>
<div class="funcname" id="fn_init">func init</div><div class="info"><a href="#s_fn_init">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/plugin/plugin.go</code>:</p></div><table class="listing">
<tr><td>46</td><td><code><pre>func init() {</pre></code></td></tr><tr><td>47</td><td><code><pre> utils.InitLogs()</pre></code></td></tr><tr><td>48</td><td><code><pre> dir = utils.Directory</pre></code></td></tr><tr><td>49</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_LoadPlugin">func LoadPlugin</div><div class="info"><a href="#s_fn_LoadPlugin">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/plugin/plugin.go</code>:</p></div><table class="listing">
<tr><td>51</td><td><code><pre>func LoadPlugin(file string) error {</pre></code></td></tr><tr class="miss"><td>52</td><td><code><pre> utils.Log(1, fmt.Sprintf(&#34;opening file %v&#34;, file))</pre></code></td></tr><tr class="miss"><td>53</td><td><code><pre> f, err := os.Open(file)</pre></code></td></tr><tr class="miss"><td>54</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>55</td><td><code><pre> return err</pre></code></td></tr><tr><td>56</td><td><code><pre> }</pre></code></td></tr><tr><td>57</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>58</td><td><code><pre> fSplit := strings.Split(f.Name(), &#34;/&#34;)</pre></code></td></tr><tr class="miss"><td>59</td><td><code><pre> fileBin := fSplit[len(fSplit)-1]</pre></code></td></tr><tr><td>60</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>61</td><td><code><pre> utils.Log(1, fmt.Sprintf(&#34;Attempting to load plugin &#39;%v&#39;&#34;, fileBin))</pre></code></td></tr><tr class="miss"><td>62</td><td><code><pre> ext := strings.Split(fileBin, &#34;.&#34;)</pre></code></td></tr><tr class="miss"><td>63</td><td><code><pre> if len(ext) != 2 {</pre></code></td></tr><tr class="miss"><td>64</td><td><code><pre> utils.Log(3, fmt.Sprintf(&#34;Plugin &#39;%v&#39; must end in .so extension&#34;, fileBin))</pre></code></td></tr><tr class="miss"><td>65</td><td><code><pre> return fmt.Errorf(&#34;Plugin &#39;%v&#39; must end in .so extension %v&#34;, fileBin, len(ext))</pre></code></td></tr><tr><td>66</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>67</td><td><code><pre> if ext[1] != &#34;so&#34; {</pre></code></td></tr><tr class="miss"><td>68</td><td><code><pre> utils.Log(3, fmt.Sprintf(&#34;Plugin &#39;%v&#39; must end in .so extension&#34;, fileBin))</pre></code></td></tr><tr class="miss"><td>69</td><td><code><pre> return fmt.Errorf(&#34;Plugin &#39;%v&#39; must end in .so extension&#34;, fileBin)</pre></code></td></tr><tr><td>70</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>71</td><td><code><pre> plug, err := plugin.Open(file)</pre></code></td></tr><tr class="miss"><td>72</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>73</td><td><code><pre> utils.Log(3, fmt.Sprintf(&#34;Plugin &#39;%v&#39; could not load correctly. %v&#34;, fileBin, err))</pre></code></td></tr><tr class="miss"><td>74</td><td><code><pre> return err</pre></code></td></tr><tr><td>75</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>76</td><td><code><pre> symPlugin, err := plug.Lookup(&#34;Plugin&#34;)</pre></code></td></tr><tr class="miss"><td>77</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>78</td><td><code><pre> utils.Log(3, fmt.Sprintf(&#34;Plugin &#39;%v&#39; could not locate Plugin variable. %v&#34;, fileBin, err))</pre></code></td></tr><tr class="miss"><td>79</td><td><code><pre> return err</pre></code></td></tr><tr><td>80</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>81</td><td><code><pre> plugActions, ok := symPlugin.(types.PluginActions)</pre></code></td></tr><tr class="miss"><td>82</td><td><code><pre> if !ok {</pre></code></td></tr><tr class="miss"><td>83</td><td><code><pre> utils.Log(3, fmt.Sprintf(&#34;Plugin %v was not type PluginObject&#34;, f.Name()))</pre></code></td></tr><tr class="miss"><td>84</td><td><code><pre> return fmt.Errorf(&#34;Plugin %v was not type PluginActions %v&#34;, f.Name(), plugActions.GetInfo())</pre></code></td></tr><tr><td>85</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>86</td><td><code><pre> info := plugActions.GetInfo()</pre></code></td></tr><tr class="miss"><td>87</td><td><code><pre> err = plugActions.OnLoad()</pre></code></td></tr><tr class="miss"><td>88</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>89</td><td><code><pre> return err</pre></code></td></tr><tr><td>90</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>91</td><td><code><pre> utils.Log(1, fmt.Sprintf(&#34;Plugin %v loaded from %v&#34;, info.Name, f.Name()))</pre></code></td></tr><tr class="miss"><td>92</td><td><code><pre> core.CoreApp.AllPlugins = append(core.CoreApp.AllPlugins, plugActions)</pre></code></td></tr><tr class="miss"><td>93</td><td><code><pre> return nil</pre></code></td></tr><tr><td>94</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_LoadPlugins">func LoadPlugins</div><div class="info"><a href="#s_fn_LoadPlugins">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/plugin/plugin.go</code>:</p></div><table class="listing">
<tr><td>96</td><td><code><pre>func LoadPlugins() {</pre></code></td></tr><tr class="miss"><td>97</td><td><code><pre> pluginDir := dir + &#34;/plugins&#34;</pre></code></td></tr><tr class="miss"><td>98</td><td><code><pre> utils.Log(1, fmt.Sprintf(&#34;Loading any available Plugins from /plugins directory&#34;))</pre></code></td></tr><tr class="miss"><td>99</td><td><code><pre> if _, err := os.Stat(pluginDir); os.IsNotExist(err) {</pre></code></td></tr><tr class="miss"><td>100</td><td><code><pre> os.Mkdir(pluginDir, os.ModePerm)</pre></code></td></tr><tr><td>101</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>102</td><td><code><pre> files, err := ioutil.ReadDir(pluginDir)</pre></code></td></tr><tr class="miss"><td>103</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>104</td><td><code><pre> utils.Log(2, fmt.Sprintf(&#34;Plugins directory was not found. Error: %v&#34;, err))</pre></code></td></tr><tr class="miss"><td>105</td><td><code><pre> return</pre></code></td></tr><tr><td>106</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>107</td><td><code><pre> for _, f := range files {</pre></code></td></tr><tr class="miss"><td>108</td><td><code><pre> err := LoadPlugin(f.Name())</pre></code></td></tr><tr class="miss"><td>109</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>110</td><td><code><pre> utils.Log(3, err)</pre></code></td></tr><tr class="miss"><td>111</td><td><code><pre> continue</pre></code></td></tr><tr><td>112</td><td><code><pre> }</pre></code></td></tr><tr><td>113</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>114</td><td><code><pre> utils.Log(1, fmt.Sprintf(&#34;Loaded %v Plugins&#34;, len(core.CoreApp.Plugins)))</pre></code></td></tr><tr><td>115</td><td><code><pre>}</pre></code></td></tr></table>
<!-- Can be parsed by external script
PACKAGE:github.com/hunterlong/statup/plugin DONE:4.08
-->
<div id="pkg_github.com/hunterlong/statup/source" class="funcname">Package Overview: github.com/hunterlong/statup/source <span class="packageTotal">77.71%</span></div><p>This is a coverage report created after analysis of the <code>github.com/hunterlong/statup/source</code> package. It
has been generated with the following command:</p><pre class="cmd">gocov test github.com/hunterlong/statup/source | gocov-html</pre> <p>Here are the stats. Please select a function name to view its implementation and see what's left for testing.</p><table class="overview">
<tr id="s_fn_init"><td><code><a href="#fn_init">init(...)</a></code></td><td><code>github.com/hunterlong/statup/source/rice-box.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>29/29</code></td></tr>
<tr id="s_fn_CreateAllAssets"><td><code><a href="#fn_CreateAllAssets">CreateAllAssets(...)</a></code></td><td><code>github.com/hunterlong/statup/source/source.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>17/17</code></td></tr>
<tr id="s_fn_init"><td><code><a href="#fn_init">init(...)</a></code></td><td><code>github.com/hunterlong/statup/source/rice-box.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>12/12</code></td></tr>
<tr id="s_fn_init"><td><code><a href="#fn_init">init(...)</a></code></td><td><code>github.com/hunterlong/statup/source/rice-box.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>7/7</code></td></tr>
<tr id="s_fn_init"><td><code><a href="#fn_init">init(...)</a></code></td><td><code>github.com/hunterlong/statup/source/rice-box.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>6/6</code></td></tr>
<tr id="s_fn_Assets"><td><code><a href="#fn_Assets">Assets(...)</a></code></td><td><code>github.com/hunterlong/statup/source/source.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>4/4</code></td></tr>
<tr id="s_fn_@79:5"><td><code><a href="#fn_@79:5">@79:5(...)</a></code></td><td><code>github.com/hunterlong/statup/source/source.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_@83:5"><td><code><a href="#fn_@83:5">@83:5(...)</a></code></td><td><code>github.com/hunterlong/statup/source/source.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_CompileSASS"><td><code><a href="#fn_CompileSASS">CompileSASS(...)</a></code></td><td><code>github.com/hunterlong/statup/source/source.go</code></td><td class="percent"><code>74.19%</code></td><td class="linecount"><code>23/31</code></td></tr>
<tr id="s_fn_MakePublicFolder"><td><code><a href="#fn_MakePublicFolder">MakePublicFolder(...)</a></code></td><td><code>github.com/hunterlong/statup/source/source.go</code></td><td class="percent"><code>71.43%</code></td><td class="linecount"><code>5/7</code></td></tr>
<tr id="s_fn_SaveAsset"><td><code><a href="#fn_SaveAsset">SaveAsset(...)</a></code></td><td><code>github.com/hunterlong/statup/source/source.go</code></td><td class="percent"><code>66.67%</code></td><td class="linecount"><code>4/6</code></td></tr>
<tr id="s_fn_DeleteAllAssets"><td><code><a href="#fn_DeleteAllAssets">DeleteAllAssets(...)</a></code></td><td><code>github.com/hunterlong/statup/source/source.go</code></td><td class="percent"><code>66.67%</code></td><td class="linecount"><code>4/6</code></td></tr>
<tr id="s_fn_copyAndCapture"><td><code><a href="#fn_copyAndCapture">copyAndCapture(...)</a></code></td><td><code>github.com/hunterlong/statup/source/source.go</code></td><td class="percent"><code>64.29%</code></td><td class="linecount"><code>9/14</code></td></tr>
<tr id="s_fn_CopyToPublic"><td><code><a href="#fn_CopyToPublic">CopyToPublic(...)</a></code></td><td><code>github.com/hunterlong/statup/source/source.go</code></td><td class="percent"><code>63.64%</code></td><td class="linecount"><code>7/11</code></td></tr>
<tr id="s_fn_OpenAsset"><td><code><a href="#fn_OpenAsset">OpenAsset(...)</a></code></td><td><code>github.com/hunterlong/statup/source/source.go</code></td><td class="percent"><code>60.00%</code></td><td class="linecount"><code>3/5</code></td></tr>
<tr id="s_fn_UsingAssets"><td><code><a href="#fn_UsingAssets">UsingAssets(...)</a></code></td><td><code>github.com/hunterlong/statup/source/source.go</code></td><td class="percent"><code>33.33%</code></td><td class="linecount"><code>4/12</code></td></tr>
<tr id="s_fn_HelpMarkdown"><td><code><a href="#fn_HelpMarkdown">HelpMarkdown(...)</a></code></td><td><code>github.com/hunterlong/statup/source/source.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/6</code></td></tr>
<tr><td colspan="2"><code>github.com/hunterlong/statup/source</code></td><td class="percent"><code>77.71%</code></td><td class="linecount"><code>136/175</code></td></tr>
</table>
<div class="funcname" id="fn_init">func init</div><div class="info"><a href="#s_fn_init">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/source/rice-box.go</code>:</p></div><table class="listing">
<tr><td>155</td><td><code><pre>func init() {</pre></code></td></tr><tr><td>156</td><td><code><pre></pre></code></td></tr><tr><td>157</td><td><code><pre> // define files</pre></code></td></tr><tr><td>158</td><td><code><pre> fileh := &amp;embedded.EmbeddedFile{</pre></code></td></tr><tr><td>159</td><td><code><pre> Filename: &#34;base.html&#34;,</pre></code></td></tr><tr><td>160</td><td><code><pre> FileModTime: time.Unix(1538458071, 0),</pre></code></td></tr><tr><td>161</td><td><code><pre> Content: string(&#34;{{ define \&#34;base\&#34; }}\n&lt;!doctype html&gt;\n&lt;html lang=\&#34;en\&#34;&gt;\n{{block \&#34;head\&#34; .}} {{end}}\n&lt;body&gt;\n {{template \&#34;content\&#34; .}}\n&lt;/body&gt;\n&lt;footer&gt;{{template \&#34;footer\&#34; .}}&lt;/footer&gt;\n{{template \&#34;scripts\&#34; .}}\n&lt;/html&gt;\n{{end}}\n&#34;),</pre></code></td></tr><tr><td>162</td><td><code><pre> }</pre></code></td></tr><tr><td>163</td><td><code><pre> filei := &amp;embedded.EmbeddedFile{</pre></code></td></tr><tr><td>164</td><td><code><pre> Filename: &#34;dashboard.html&#34;,</pre></code></td></tr><tr><td>165</td><td><code><pre> FileModTime: time.Unix(1538459427, 0),</pre></code></td></tr><tr><td>166</td><td><code><pre> Content: string(&#34;{{define \&#34;title\&#34;}}Statup | Dashboard{{end}}\n{{define \&#34;content\&#34;}}\n&lt;div class=\&#34;container col-md-7 col-sm-12 mt-md-5 bg-light\&#34;&gt;\n{{template \&#34;nav\&#34; }}\n &lt;div class=\&#34;col-12 mt-3\&#34;&gt;\n &lt;div class=\&#34;row stats_area mb-5\&#34;&gt;\n &lt;div class=\&#34;col-4\&#34;&gt;\n &lt;span class=\&#34;lg_number\&#34;&gt;{{ CoreApp.ServicesCount }}&lt;/span&gt;\n Total Services\n &lt;/div&gt;\n &lt;div class=\&#34;col-4\&#34;&gt;\n &lt;span class=\&#34;lg_number\&#34;&gt;{{ CoreApp.Count24HFailures }}&lt;/span&gt;\n Failures last 24 Hours\n &lt;/div&gt;\n &lt;div class=\&#34;col-4\&#34;&gt;\n &lt;span class=\&#34;lg_number\&#34;&gt;{{ CoreApp.CountOnline }}&lt;/span&gt;\n Online Services\n &lt;/div&gt;\n &lt;/div&gt;\n &lt;div class=\&#34;row mt-4\&#34;&gt;\n &lt;div class=\&#34;col-12\&#34;&gt;\n &lt;h3&gt;Services&lt;/h3&gt;\n &lt;div class=\&#34;list-group mb-5 mt-3\&#34;&gt;\n {{ range Services }}\n &lt;a href=\&#34;#\&#34; class=\&#34;list-group-item list-group-item-action flex-column align-items-start\&#34;&gt;\n &lt;div class=\&#34;d-flex w-100 justify-content-between\&#34;&gt;\n &lt;h5 class=\&#34;mb-1\&#34;&gt;{{.Name}}&lt;/h5&gt;\n &lt;small&gt;{{if .Online}} &lt;span class=\&#34;badge badge-success\&#34;&gt;ONLINE&lt;/span&gt; {{else}} &lt;span class=\&#34;badge badge-danger\&#34;&gt;OFFLINE&lt;/span&gt; {{end}}&lt;/small&gt;\n &lt;/div&gt;\n &lt;p class=\&#34;mb-1\&#34;&gt;{{.SmallText}}&lt;/p&gt;\n &lt;/a&gt;\n {{ end }}\n &lt;/div&gt;\n\n {{ range Services }}\n {{ if .LimitedFailures }}\n &lt;h4 class=\&#34;text-truncate\&#34;&gt;{{.Name}} Failures&lt;/h4&gt;\n &lt;div class=\&#34;list-group mt-3 mb-4\&#34;&gt;\n {{ range .LimitedFailures }}\n &lt;a href=\&#34;#\&#34; class=\&#34;list-group-item list-group-item-action flex-column align-items-start\&#34;&gt;\n &lt;div class=\&#34;d-flex w-100 justify-content-between\&#34;&gt;\n &lt;h5 class=\&#34;mb-1\&#34;&gt;{{.ParseError}}&lt;/h5&gt;\n &lt;small&gt;{{.Ago}}&lt;/small&gt;\n &lt;/div&gt;\n &lt;p class=\&#34;mb-1\&#34;&gt;{{.Issue}}&lt;/p&gt;\n &lt;/a&gt;\n {{ end }}\n &lt;/div&gt;\n {{ end }}\n {{ end }}\n\n\n &lt;/div&gt;\n &lt;/div&gt;\n &lt;/div&gt;\n&lt;/div&gt;\n{{end}}\n&#34;),</pre></code></td></tr><tr><td>167</td><td><code><pre> }</pre></code></td></tr><tr><td>168</td><td><code><pre> filej := &amp;embedded.EmbeddedFile{</pre></code></td></tr><tr><td>169</td><td><code><pre> Filename: &#34;error_404.html&#34;,</pre></code></td></tr><tr><td>170</td><td><code><pre> FileModTime: time.Unix(1538457906, 0),</pre></code></td></tr><tr><td>171</td><td><code><pre> Content: string(&#34;{{define \&#34;title\&#34;}}Statup Page Not Found{{end}}\n{{define \&#34;content\&#34;}}\n&lt;div class=\&#34;container col-md-7 col-sm-12 mt-md-5 bg-light\&#34;&gt;\n &lt;div class=\&#34;col-12 mt-3\&#34;&gt;\n &lt;div class=\&#34;alert alert-danger\&#34; role=\&#34;alert\&#34;&gt;\n Sorry, this page doesn&#39;t seem to exist.\n &lt;/div&gt;\n &lt;/div&gt;\n&lt;/div&gt;\n{{end}}\n&#34;),</pre></code></td></tr><tr><td>172</td><td><code><pre> }</pre></code></td></tr><tr><td>173</td><td><code><pre> filek := &amp;embedded.EmbeddedFile{</pre></code></td></tr><tr><td>174</td><td><code><pre> Filename: &#34;favicon.ico&#34;,</pre></code></td></tr><tr><td>175</td><td><code><pre> FileModTime: time.Unix(1530546686, 0),</pre></code></td></tr><tr><td>176</td><td><code><pre> Content: string(&#34;\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00@\x00\x00\x00@\b\x06\x00\x00\x00\xaaiq\xde\x00\x00\v\x92IDATx\x9c\xed\x9ak\x8c]Wu\xc7\u007fk\xed3w\xc6\xf3\xcexb\x1c)\t\x89\x89\xa8\t\xe6!C\xa3\xc8T\xd8q\x1d\x9a\x84\x14\xd1\b\x10\xad\xd4\x12\xb5\xa9P\x15\x12\xd3Z\x15TBB\x15\x1f\xe8\a\xaa\xe0\x98\xb4*\x16n\xfb\xa1T\x05җ҄\x94ď@R\nI_\xaa\&#34;\xd7\x19\x9c4$\xe0Lf\xfc\x18\xcf\xe3νg\xaf\xd5\x0f\xe7\xee9\xe7\x9a\xca\xe9=3\xa6\xa8\x9d\xbfd\xcd\xf8\xdes\xd6\xde\xeb?k\xaf\xbd\xd6\u007foX\xc7:ֱ\x8eu\xac\xe3\xff-\xe4R\x0f\xf0\x86\u007f\x19gff\xeez\x11\xb9!\x04\xdeb\xe6W\xbb\xfb\xa6\x10t\xd0\xddUU\x9af,\xaa\xca)w^t\xb7\xe7@\x9f\x0e\xc1\x9e}\xf5\xddf\x97z~\x97\x84\x80\x81\xbf\x83\x91\x91\xb0Ý_\x8e\xd1\xdf\x0fl\x16\x01\x11\x05\fw\x10\x11D\x84\x18\rUp\aU!\xcf\x1dU\x018\v&lt;\f&lt;\xb8\xbc\xec\x0f-\xdcb\xadK1\xd75&#39;`\xec1\xb9-\x04\xf9\x8c\x88l7s\n\xc7\x05w/\x06\x14A\xa4pجpֽ\xf8\x19\xa3\x93e\x82\x99\xe3^&lt;g愠/\xb9\xfb\x01\x11\xff\xc2\xccN[\\\xcb\xf9\xae\x19\x01\x93\xc7t،\x83\xaa\xfaaw\xa7\xf0\xd7W\x9c\x17QD\x9c\x18\x8bϒ\xe3\xe9YU\xc1\xcd\xe1\x02\xc2\x121\xaa\x82\b/\xba\xf3볻\xe2߯ռׄ\x80\x8dG\xc3f3\xff\x06\xb0\r\x04\x91\xc2Ʉ\x14\t@\x85\x90\xee\xa8\x00V\xc8\bA\xc8s#\x04튒\xc26\x06\xfe\x89\xd9]\xf6\xb9\xb5\x98\xfb\xaa\t\x988\&#34;\xa3\xaa\xe1Iw\xdf\xd6\xf1\a\x91\x14\x01e\xb8\x83\xaf\xbc\xa3\xaa]\xa4T\x89\xb0hhЕg\xdd\x1cQ\xadDDa\xcf\xdd\xef&gt;}\x93\xfd\xc1j篯\xfd\xc8kA\x0e\xba\xfb\xb6\x18\x9d\&#34;\xe4\x93äd\x86j\xf1\xbb H\x14l\xc9\xf0%\xc7\xe6\x1d_\x04\x96\x81\b\xe0\x1d\xe7\v\x03f\x8e(\xb8[\xc7\x06\xc4\xe8)\x89\xde7y,\xbb~\xb5\xb3\xcfV\xf3\xf2\xc4\x11\xbd͝\x0f\x81w&amp;\xa8\xb8\x17;WJrn\x0e\x8b\x82\x9dwdA\x88MC\\P\x8adg\xe6H\x00\xed\x13\x18pd\xd4\xd1\x11\xa0Q,\x85\xb4\xfe\xcb\xe8\x12\n\x82\xa4a\xe6\a\x80\x9f]\x8d\x0f\xb5\x97\xc0\xa6o\x06b\xe4\x19w\xdf^]\xef\xe5\xfa\x06o9\xfeC!N;~\x8e\xdcs\x9e\x15\x93g\x89\x9cr\xf3y\\\x16\xdc=C٨\r\xb6H\x9f\xdc\xe0\xfd\xbeY&amp; \\\x01ac\x99\x1b\xca\xe9zW\xceP\x95\x9f\x9e\xd9\x19\x9f\xae\xebG\xed\b\xc8snHΧDU\x9d\x1c9ؔ\xd0\xfe\xbeOiS&gt;\xdb^\xb6\xbf\\\xfeC?{1\x9bW|jT\xcfN\x9f\xbf1\x9b\xd7}\xf1&lt;wp\xad\xa3\xaf\x832\x978\xa1\x93\x1fR\x84\x89\xc8G\x81\xda\x04Ԏ\x80\x89#\xfa\x19U\xf9T\xda\xe2ܽ+c\xe7ρMɟ\xd8R\xfc\x8d\xc5\x034{\xb5?\xb8Wo\xd7I\xfe,\xbc\x99Q\x1d\xa7\xb3#XW\x01\x15\x82`\xe6\xd3ͦ]\xb1x+\xb5\xaa\xc6\xfaI\xd0y\xa7Y\xb15%\xe7W\xfe\xfam!\xfe&#39;_c\xd9~\xad\x8e\xf3\x00\x8b\xfb\xed!=&#39;\xb7\xda\U000f4534\xee\v\x98\x19\xaa\xa9`b\xd3\xc0\x80\xbe\xb5\xae\x1b\xb5\t\x10\x917v\x19R]\xd9\xd6X\xa4is~\xf7\xfc~_U-?\xf7\xb9\xf8\x14\xb3\xf2i;\xeb\x95$\xd8]Mv\x8a\xaaw\xd6\x1d\xa36\x01\x16}2msE\x92\xaaD\xc1\b&#39;\x96\x0e\xf8t]\xdbU\xc8R\xf6\xf98\xe3\xd3\ue38a\xe0m\xf0&amp;\xe4s\x8e\x9e\x17|\xd6\xf1i\xa9\x9d\xcb\xeaG\x80\xc9p\n\xfd\xea\xbeo\xe6\xb8\xf8\xb6\xb1Ǻ#\xa4.\xe6\xee[n\xb2(_\xb1\xef\v\xed\x13N&lt;\x01\xf19\x88\xff\x01\xf9\xb3\xd0\xfaWh\xfes\xfd@\xab͜\xb7ܤ!Z\x84\xa4w\xd6e\xc1\xa7\b\x1a\x82|i\xec1n&gt;\xb7\xc7k\xe5\x80*\xe2)9\x12_\xf1;1Nb~\x92\\\xa6&lt;\xe7{&amp;\x9c\xcc\xdb~\xb2\u007f@_\xa8k\xbb\xf6.0\xf6U\xfda\xdf&amp;ٜ\x12\xa1H\x99\x10)\x93\xd6S\xaa\xfa\x91\x99\x9d\xf9T\xddq\x00\x86\xf7\x065\x8b\xb6x`5V\xfe{\xd4&amp;`\xfc\x90&gt;\xa9\xd7ʎ\xb4?\v\x82h\x91\x94R##\x021ZKD\xbel\xc6_\x80\x1d&gt;\xb3\xdb/I__\x17\xf5\x93\xe0\f\xdf\xf1\x96w\x1a\x13\xb0N&#39;\x97j\x013&#39;FÝ\x86\x88\xdc\t\xfe\x88\xaa\xbe:y,{p\xe3\xd1p\xd7ƣ\xe1\xea5\xf4\xa36jG\xc0\xd0o\xeb\x8e\xec-&lt;\x19\xae\xaaV\x82\x1d\xa3\x9dv\xb8\xf8\xfcG;\xbfJ+|\x1c\xf8z\x9e\xfb\xa3\xfd\xfd}O\xbc\xfa\xee֚\x8a\x1d\xff\x13\xd4&#39;\xe0^T^\xa7\xcf\xf4\xbd\x8d\xb73HE\xe0(\xbeO\xff/\x9dMy\x02̊F&#39;EO\xa7\xa6o\xba\xfb\xb7@\x1e\rA\x1e\nA\x8e\x9fzW{-|\xbc(V\xa5\a\f\xed\xd3[\xb2k\xe5\x11\xbdΡ\xd1MB\x8a\b\x8b\xa9\xa5M\xe5l\xec\xa8Ct%\xcc\xd4@%\xb8\xfbT\b\xf2\x90\x88&lt;\xe8nO]*\x81tՂ\xc8\xd0&#39;\xc2\xc1\xf0z\xbf\xab\xefZ\x85\r\x85\a\xd5\xee-\xe9}E\xd5FWEW\n%\x82j\x91?\xd2;\xd5g\x81\x1f\xa8\xcaWD\xf8\xd2\xcc\xce\xf8\ufadds\x15\xab&amp;`|_\u007f#\xcf\xda\u007f\xc5f\xbf-\xbbJ\xd0\xcb\x04\x94ʚ/\x15\xa2\xa2\x89)\xf3Ez&amp;\xe9~\xd5ϊ(*\x96K\xf1\xcc\xca\xefG\xf3&lt;~z\xeef\x9eX\xed\xdca\x8d4\xc1\xa1{\xa5a\x81\xcf\xf6]\xae\xbfŤ\xa1\x1b\x05\x19\x06\xfa\xca\xeaP\xb5\x9b\x80\xaa\xe8ٵd\xec\xc2(J\xd3,e\xb3N\xde8$\x12\xf6\x9e\xbe\xa9=\xbf\x9a\xb9\xaf\xa9,\xbe\xe1c\xb2+\x1b\xd1\xdf\xf7!߮\x97\x81\x8c\x03CN6\xac+5gW\xd7\b\x95\xa6\xa6\x9a\x13\xa0\xaa(&#39;hG\x1bL\x89S\x84\xa7ݹ\xf5\xccn\x9b\xa9;\xe75?\x17\x90\xbb\xd0\xc1\xc1\xb0\x9b\x86\xdf\x1d\x06\xf5\xb68\x18\x1b:\x02:&amp;\x84\x11\xc1\xfb\x9d\xb0\xa1\x94\xca\xd3_&lt;EE\xe7\x1c\xa0\xd3cx\xea\xf9\xbbT \x11%\xc6H\x96\x05\xdc\xfd;ͦ\xef\\\xb8\xc5j\x95ܗ\xf4hlxo\x98p\xfc\x0e\xe9烞\xb1+\x8cJC\x86\x81\r\x8e\x8c\x00\x03\x10\x06\x05\x0f\xdd\x11\xb0R]J\x99+RM\x01t\x91\xe3\xee\xe49\xf7\x9f\xdbc{\xeb\xcc\xf1\x92\x9f\r&amp;\f\xef\r\xc3\xc0{\xa2\xda{À\xbc\x87\x86\\)#^\b\xa1C\x82\x8e\x80n\x10d\x03\x18\xa9p\xea^\xfbi\xb9T\x97Lg\x99\xe4\xaa\xfa晝\xf9\x89^\xe7\xf5c#\xa0\x8a\xf1}}\xb4Z\xf1\x8d\x1adO\f~s6 \xbb\xe8\xf7q\x86\x05\x19tt\ftX`\xb0P\x8c\x13\x11\xee\xe9g\xf1Yyt&amp;\xb8\xf3\xf9\xd37\xc5\xdf\xecu.\xff+\x04\\\x88ὒ\xb9\xcbvT\xf6Ȁ\xbfW\x1ar#\xa3\xae:\n:)\xc8\x18H\xf0\xea\x0e\xb0\x92 \xdd%-\x85\x93\xb3\xbb\xe2\x1bz\x1d\xfb&#39;\x82\x80\v1t\xaflr\xe4\x03\xb2\x81\x8f\xe8\xa8\xdc\x10\xae\x84p\x15H\xe8.\xaf/(\x960\xb3\xcb\xcf\xec\xf6\x9ev\x845!`\xfcq\xc9D\xe4:U\xb6\xba3\u007f\xfa&amp;{l-\xec\x02\f~,\xec\x961?ط\x8d-\xe1\x8ab\t\x98\x91\x0eK+J4\x80\xbfcv\x97\xfdS/\xf6{V\x846\x1e\x95a\xd5pG\x9eۛTe\xab\x9bo\x15\x95-f\xde\xe8\x1ci\x1f\x06\u058c\x80\xc5/\xc4Ã\xf7\xe8\xbb\xecE\xf9G\xb9ܯ\x96\xd0\xddHA\x99\x18C\xd0qzT\xc7{\xd6\x03\xe24ט\xf1\xa7\&#34;|\xd2\xdd\xdf/*[E\xa4Q\xa8\u008e\x99\xdf8yL\x1b\xbdڽ\x18\x16\x0f\xd8);\xeb\xfb\xc8\xcbJP\xe8V\x88͌&lt;\x8f=\xfb\xd3\xf3\v\xf6\xbc\x8c\xd3N\xc5K\xd9\xd5\x15g\x82\x82\b\x831rK\xafv_\v}\xed\xeco\x05ZЩ\x17\xa4\xac\a@\bAɖC\xcfjS\xcf\x04\xb4Oq\&#34;\x9e\xabfa*\xe1X$&amp;U\xa9U\x94\\\f\xfd\xbf\xc0\x80\xf4\x17\&#34;,\xa4\xf3\x00\xed\x12bZ\xcf\xf9\\\xafv{&amp;`\xe9&gt;\x9b\xb63L\xa5s\x80\x94\x8d\x81\xce&gt;-\x98\xf9\xee\xcb\x0e\xeb\xfbz\xb5}1\xb4Z\xf1W\xcc=+\x1a&#39;\xa5\xdd6܍\x18;\xd2\xdb\&#34;ė\xfd\a\xbdڭ\xa5\t\xda,\x0f{[:엵z\xa7RM\xa75\a&#39;\x8fe\xd7Ա\u007f!&amp;\x8f\x85+U\xf9\xdd2\xf9yg\xac\&#34;\xf4C\x10\xec\f\xd3\xf9\xbc\xf5|\x18S\x8b\x00\x9f\xe5\xab6\x93z\xfcB\xe9Iˡ\x88\x86\xe2\xcc\xceݏ\x8c?.[댑0\xfe\xb8n\x06\x1e\x01&amp;R\xe3\x94\bOw\x8cp\xb0i?\xdc|\xa0w\xfb\xb5\b\x90\x96\u007f\xcb^⸵|\xe5\x92C\xb5\x9bK\n\x8f;\xd7\x00\u07fd\xfc\x89\xec\xe3C_g\xa0\x971&amp;\x8e\xc0\xe4\xb1p{\b\xf2]3\xb6\xa5\xc6\xc8\xccȲ\xf2ʌ\b\xe4\xaf:&gt;-\u007f^˗:/\x01\f}R\xef\xcc\xde\xc4\x1fg\xaf\xaf^\x86\xb2\xceQ9+ˡli\x99v\xf7/\x8b\xf0h\x9e\xf3\xf4\xb9=?\xda\xc3O\x1e\xcb\x06\xddm\x9b;\xbb\xdc\xf9EUy{\xfa\xaej\xb3\x18\xabs_\xa8\r\xadg|\xca^\xe6\xa7\x16\xee\xef]7\xacM\x80\xfe*\xd9\xf0\x96\xf0\x8c^\xefo\xcd6\n\xee\xd2!\xa0HR\xc5\x05\xc8R\xe8\xac\\n\xa2\x13!s\xc0\f\xd02#\x13\xf1q\x90\t@c,[ݴ\xac\ne\xa9T\x8aB\x10&lt;B{\xca\xe1\xa4~p\xee\xf7\xf2\xaf\xd5\xf2\xa3.\x01v\x88&lt;\x9f\xf5\x8f\xdaIr\x9b\x87\xe2\x9eP)kU\xf5\xbej4\xa4\x9b$\xee\x8c\xc6\xe8[\xcc|\xab\b\xd7\x01\x93\x80V5\x80t\x9f\xb0\x10JS\x84\x15\xdf\xc7\xdc\xc9_r\xe2\v\xfc\xb57\xad\x96\xf3\x00\xa1\xee\x8b\x00\xedo\xfbK\xd9\xdbd\x816?&#39;C \xfd\xc9\xd1\xf22S٬$ŷ\xbc\x17X\xaa&lt;\x90\xda\xdbR-\x93\x15\x87S\xd4dY\x87\xc9\x1c\xece\xb0\xef\xc9q\x9f\x93\x9f\x9f\xdf_O\r\x82U\x12\x000\xfa3\xfd\xffО\xb3a_b\a}\x10\x86\x04\x87\x15\xf5&amp;9\x9e\bIW\\\xca\x1dC\xaa\xcd\f\x89\x88\xf4Nq\xbeXl{n\x8e/\x80\xbd\b\xf6\xbc\x1c\x97\xf3z\xf3\xfc\xfe|U\xf7\x10VM\xc0ғ9}\xef\xf0o\xb0\xa4\v\xb2(\xbbc\xcbU3\x90\x06H\xa5.\x80R!N[e\xf1\x1d$\xa7˪N\xa8\n\xa7\xaa\x02K`\xaf@|\x1e\xe2\xcb&lt;\xec\vr\xfb\xfc\xfe\xfc\x95\xd5\xce\u007fM\xf5\x80Ꮗ\x1d&gt;\xe0\u007f\xa4\x97\xb1MƁq&#39;\x1b\x16\xe8\x17\b\xddjpB\xb5vH\xe7\x88f\xc5m\x10ZB&gt;op\x0e\xec4pF\xa6m\xc1\u007f\a\xb3C\v\xf7\xaf͜\xd7\\\x10\x19\xbc\x87LC\xf6Kް\xbd:\xc8v\x19\x13\xe8wd\x03ſ\x06H\x80N\xd5\fBq\xb4\xee\xe0\x06\x9e\x83-9&gt;_\\\x85a\x1eX\x90\x93\xb6\xc4\x03\xb1\x1d\xbf\xd8|\x80U\x9d\x03\\\x88K\xaa\b\rݫף\xbcO\xfae&#39;ʍ\x1e|\\\xfa:$\xf4\t\x8e\xa3\x01,\a\x8f\xa0.X\xd3\xf16-\&#34;\xff\xe6\xcb\x1c&amp;\xf27\xcb\xcb\xf6\xed\xf8\xc5z\xd7\xe0^\v?6Il\xf0\x1eȲl\xb3\xbbl\x01\xdfdf\x138\x03\x0e\x99Eoj\x90y\x119kf/4\x17}\xca\x0f\xf1\x13u\x91b\x1d\xebX\xc7:\xd6\xf1\u007f\x11\xff\x05\x1f2t\x13ȇz\xd2\x00\x00\x00\x00IEND\xaeB`\x82&#34;),</pre></code></td></tr><tr><td>177</td><td><code><pre> }</pre></code></td></tr><tr><td>178</td><td><code><pre> filel := &amp;embedded.EmbeddedFile{</pre></code></td></tr><tr><td>179</td><td><code><pre> Filename: &#34;footer.html&#34;,</pre></code></td></tr><tr><td>180</td><td><code><pre> FileModTime: time.Unix(1538458476, 0),</pre></code></td></tr><tr><td>181</td><td><code><pre> Content: string(&#34;{{ define \&#34;footer\&#34;}}\n&lt;div class=\&#34;footer text-center mb-4\&#34;&gt;\n{{ if CoreApp.Footer}}\n {{ CoreApp.Footer }}\n{{ else }}\n &lt;a href=\&#34;https://github.com/hunterlong/statup\&#34; target=\&#34;_blank\&#34;&gt;Statup {{VERSION}} made with ❤️&lt;/a&gt; | &lt;a href=\&#34;/dashboard\&#34;&gt;Dashboard&lt;/a&gt;\n{{ end }}\n&lt;/div&gt;\n{{ end }}\n&#34;),</pre></code></td></tr><tr><td>182</td><td><code><pre> }</pre></code></td></tr><tr><td>183</td><td><code><pre> filem := &amp;embedded.EmbeddedFile{</pre></code></td></tr><tr><td>184</td><td><code><pre> Filename: &#34;form_checkin.html&#34;,</pre></code></td></tr><tr><td>185</td><td><code><pre> FileModTime: time.Unix(1538935644, 0),</pre></code></td></tr><tr><td>186</td><td><code><pre> Content: string(&#34;{{define \&#34;form_checkin\&#34;}}\n&lt;form action=\&#34;/service/{{.Id}}/checkin\&#34; method=\&#34;POST\&#34;&gt;\n &lt;div class=\&#34;form-group row\&#34;&gt;\n &lt;div class=\&#34;col-md-3\&#34;&gt;\n &lt;label for=\&#34;checkin_interval\&#34; class=\&#34;col-form-label\&#34;&gt;Checkin Name&lt;/label&gt;\n &lt;input type=\&#34;text\&#34; name=\&#34;name\&#34; class=\&#34;form-control\&#34; id=\&#34;checkin_name\&#34; placeholder=\&#34;New Checkin\&#34;&gt;\n &lt;/div&gt;\n &lt;div class=\&#34;col-3\&#34;&gt;\n &lt;label for=\&#34;checkin_interval\&#34; class=\&#34;col-form-label\&#34;&gt;Interval&lt;/label&gt;\n &lt;input type=\&#34;number\&#34; name=\&#34;interval\&#34; class=\&#34;form-control\&#34; id=\&#34;checkin_interval\&#34; placeholder=\&#34;60\&#34;&gt;\n &lt;/div&gt;\n &lt;div class=\&#34;col-3\&#34;&gt;\n &lt;label for=\&#34;grace_period\&#34; class=\&#34;col-form-label\&#34;&gt;Grace Period&lt;/label&gt;\n &lt;input type=\&#34;number\&#34; name=\&#34;grace\&#34; class=\&#34;form-control\&#34; id=\&#34;grace_period\&#34; placeholder=\&#34;10\&#34;&gt;\n &lt;/div&gt;\n &lt;div class=\&#34;col-3\&#34;&gt;\n &lt;label for=\&#34;checkin_interval\&#34; class=\&#34;col-form-label\&#34;&gt;&lt;/label&gt;\n &lt;button type=\&#34;submit\&#34; class=\&#34;btn btn-success d-block\&#34;&gt;Save Checkin&lt;/button&gt;\n &lt;/div&gt;\n &lt;/div&gt;\n&lt;/form&gt;\n{{end}}\n&#34;),</pre></code></td></tr><tr><td>187</td><td><code><pre> }</pre></code></td></tr><tr><td>188</td><td><code><pre> filen := &amp;embedded.EmbeddedFile{</pre></code></td></tr><tr><td>189</td><td><code><pre> Filename: &#34;form_notifier.html&#34;,</pre></code></td></tr><tr><td>190</td><td><code><pre> FileModTime: time.Unix(1539400173, 0),</pre></code></td></tr><tr><td>191</td><td><code><pre> Content: string(&#34;{{define \&#34;form_notifier\&#34;}}\n{{$n := .Select}}\n&lt;form method=\&#34;POST\&#34; class=\&#34;{{underscore $n.Method }}\&#34; action=\&#34;/settings/notifier/{{ $n.Method }}\&#34;&gt;\n{{if $n.Title}}&lt;h4&gt;{{$n.Title}}&lt;/h4&gt;{{end}}\n{{if $n.Description}}&lt;p class=\&#34;small text-muted\&#34;&gt;{{safe $n.Description}}&lt;/p&gt;{{end}}\n\n{{range $n.Form}}\n &lt;div class=\&#34;form-group\&#34;&gt;\n &lt;label class=\&#34;text-capitalize\&#34; for=\&#34;{{underscore .Title}}\&#34;&gt;{{.Title}}&lt;/label&gt;\n {{if eq .Type \&#34;textarea\&#34;}}\n &lt;textarea rows=\&#34;3\&#34; class=\&#34;form-control\&#34; name=\&#34;{{underscore .DbField}}\&#34; id=\&#34;{{underscore .Title}}\&#34;&gt;{{ $n.GetValue .DbField }}&lt;/textarea&gt;\n {{else}}\n &lt;input type=\&#34;{{.Type}}\&#34; name=\&#34;{{underscore .DbField}}\&#34; class=\&#34;form-control\&#34; value=\&#34;{{ $n.GetValue .DbField }}\&#34; id=\&#34;{{underscore .Title}}\&#34; placeholder=\&#34;{{.Placeholder}}\&#34; {{if .Required}}required{{end}}&gt;\n {{end}}\n {{if .SmallText}}\n &lt;small class=\&#34;form-text text-muted\&#34;&gt;{{safe .SmallText}}&lt;/small&gt;\n {{end}}\n &lt;/div&gt;\n{{end}}\n\n &lt;div class=\&#34;row\&#34;&gt;\n &lt;div class=\&#34;col-9 col-sm-6\&#34;&gt;\n &lt;div class=\&#34;input-group mb-2\&#34;&gt;\n &lt;div class=\&#34;input-group-prepend\&#34;&gt;\n &lt;div class=\&#34;input-group-text\&#34;&gt;Limit&lt;/div&gt;\n &lt;/div&gt;\n &lt;input type=\&#34;text\&#34; class=\&#34;form-control\&#34; name=\&#34;limits\&#34; min=\&#34;1\&#34; max=\&#34;60\&#34; id=\&#34;limits_per_hour_{{underscore $n.Method }}\&#34; value=\&#34;{{$n.Limits}}\&#34; placeholder=\&#34;7\&#34;&gt;\n &lt;div class=\&#34;input-group-append\&#34;&gt;\n &lt;div class=\&#34;input-group-text\&#34;&gt;Per Minute&lt;/div&gt;\n &lt;/div&gt;\n &lt;/div&gt;\n &lt;/div&gt;\n\n &lt;div class=\&#34;col-3 col-sm-2 mt-1\&#34;&gt;\n &lt;span class=\&#34;switch\&#34;&gt;\n &lt;input type=\&#34;checkbox\&#34; name=\&#34;enable\&#34; class=\&#34;switch\&#34; id=\&#34;switch-{{ $n.Method }}\&#34; {{if $n.Enabled}}checked{{end}}&gt;\n &lt;label for=\&#34;switch-{{ $n.Method }}\&#34;&gt;&lt;/label&gt;\n &lt;/span&gt;\n &lt;/div&gt;\n\n &lt;input type=\&#34;hidden\&#34; name=\&#34;notifier\&#34; value=\&#34;{{underscore $n.Method }}\&#34;&gt;\n\n &lt;div class=\&#34;col-12 col-sm-4 mb-2 mb-sm-0 mt-2 mt-sm-0\&#34;&gt;\n &lt;button type=\&#34;submit\&#34; class=\&#34;btn btn-primary btn-block text-capitalize\&#34;&gt;Save&lt;/button&gt;\n &lt;/div&gt;\n\n {{if $n.CanTest}}\n &lt;div class=\&#34;col-12 col-sm-12\&#34;&gt;\n &lt;button class=\&#34;test_notifier btn btn-secondary btn-block text-capitalize col-12 float-right\&#34;&gt;Test&lt;/button&gt;\n &lt;/div&gt;\n\n &lt;div class=\&#34;col-12 col-sm-12 mt-2\&#34;&gt;\n &lt;div class=\&#34;alert alert-danger d-none\&#34; id=\&#34;{{underscore $n.Method}}-error\&#34; role=\&#34;alert\&#34;&gt;\n {{$n.Method}} has an error!\n &lt;/div&gt;\n\n &lt;div class=\&#34;alert alert-success d-none\&#34; id=\&#34;{{underscore $n.Method}}-success\&#34; role=\&#34;alert\&#34;&gt;\n The {{$n.Method}} notifier is working correctly!\n &lt;/div&gt;\n &lt;/div&gt;\n {{end}}\n\n &lt;/div&gt;\n\n{{if $n.Author}}\n &lt;span class=\&#34;d-block small text-center mt-3 mb-5\&#34;&gt;\n {{$n.Title}} Notifier created by &lt;a href=\&#34;{{$n.AuthorUrl}}\&#34; target=\&#34;_blank\&#34;&gt;{{$n.Author}}&lt;/a&gt;\n &lt;/span&gt;\n{{ end }}\n&lt;/form&gt;\n{{end}}\n&#34;),</pre></code></td></tr><tr><td>192</td><td><code><pre> }</pre></code></td></tr><tr><td>193</td><td><code><pre> fileo := &amp;embedded.EmbeddedFile{</pre></code></td></tr><tr><td>194</td><td><code><pre> Filename: &#34;form_service.html&#34;,</pre></code></td></tr><tr><td>195</td><td><code><pre> FileModTime: time.Unix(1538934599, 0),</pre></code></td></tr><tr><td>196</td><td><code><pre> Content: string(&#34;{{define \&#34;form_service\&#34;}}\n&lt;form action=\&#34;{{if ne .Id 0}}/service/{{.Id}}{{else}}/services{{end}}\&#34; method=\&#34;POST\&#34;&gt;\n &lt;div class=\&#34;form-group row\&#34;&gt;\n &lt;label for=\&#34;service_name\&#34; class=\&#34;col-sm-4 col-form-label\&#34;&gt;Service Name&lt;/label&gt;\n &lt;div class=\&#34;col-sm-8\&#34;&gt;\n &lt;input type=\&#34;text\&#34; name=\&#34;name\&#34; class=\&#34;form-control\&#34; id=\&#34;service_name\&#34; value=\&#34;{{.Name}}\&#34; placeholder=\&#34;Name\&#34; required spellcheck=\&#34;false\&#34;&gt;\n &lt;/div&gt;\n &lt;/div&gt;\n &lt;div class=\&#34;form-group row\&#34;&gt;\n &lt;label for=\&#34;service_type\&#34; class=\&#34;col-sm-4 col-form-label\&#34;&gt;Service Check Type&lt;/label&gt;\n &lt;div class=\&#34;col-sm-8\&#34;&gt;\n &lt;select name=\&#34;check_type\&#34; class=\&#34;form-control\&#34; id=\&#34;service_type\&#34; value=\&#34;{{.Type}}\&#34;&gt;\n &lt;option value=\&#34;http\&#34; {{if eq .Type \&#34;http\&#34;}}selected{{end}}&gt;HTTP Service&lt;/option&gt;\n &lt;option value=\&#34;tcp\&#34; {{if eq .Type \&#34;tcp\&#34;}}selected{{end}}&gt;TCP Service&lt;/option&gt;\n &lt;option value=\&#34;udp\&#34; {{if eq .Type \&#34;udp\&#34;}}selected{{end}}&gt;UDP Service&lt;/option&gt;\n &lt;/select&gt;\n &lt;/div&gt;\n &lt;/div&gt;\n &lt;div class=\&#34;form-group row\&#34;&gt;\n &lt;label for=\&#34;service_url\&#34; class=\&#34;col-sm-4 col-form-label\&#34;&gt;Application Endpoint (URL)&lt;/label&gt;\n &lt;div class=\&#34;col-sm-8\&#34;&gt;\n &lt;input type=\&#34;text\&#34; name=\&#34;domain\&#34; class=\&#34;form-control\&#34; id=\&#34;service_url\&#34; value=\&#34;{{.Domain}}\&#34; placeholder=\&#34;https://google.com\&#34; required autocapitalize=\&#34;false\&#34; spellcheck=\&#34;false\&#34;&gt;\n &lt;/div&gt;\n &lt;/div&gt;\n &lt;div class=\&#34;form-group row{{if eq .Type \&#34;tcp\&#34;}} d-none{{end}}\&#34;&gt;\n &lt;label for=\&#34;service_check_type\&#34; class=\&#34;col-sm-4 col-form-label\&#34;&gt;Service Check Type&lt;/label&gt;\n &lt;div class=\&#34;col-sm-8\&#34;&gt;\n &lt;select name=\&#34;method\&#34; class=\&#34;form-control\&#34; id=\&#34;service_check_type\&#34; value=\&#34;{{.Method}}\&#34;&gt;\n &lt;option value=\&#34;GET\&#34; {{if eq .Method \&#34;GET\&#34;}}selected{{end}}&gt;GET&lt;/option&gt;\n &lt;option value=\&#34;POST\&#34; {{if eq .Method \&#34;POST\&#34;}}selected{{end}}&gt;POST&lt;/option&gt;\n &lt;option value=\&#34;DELETE\&#34; {{if eq .Method \&#34;DELETE\&#34;}}selected{{end}}&gt;DELETE&lt;/option&gt;\n &lt;option value=\&#34;PATCH\&#34; {{if eq .Method \&#34;PATCH\&#34;}}selected{{end}}&gt;PATCH&lt;/option&gt;\n &lt;option value=\&#34;PUT\&#34; {{if eq .Method \&#34;PUT\&#34;}}selected{{end}}&gt;PUT&lt;/option&gt;\n &lt;/select&gt;\n &lt;/div&gt;\n &lt;/div&gt;\n &lt;div class=\&#34;form-group row{{if ne .Method \&#34;POST\&#34;}} d-none{{end}}\&#34;&gt;\n &lt;label for=\&#34;post_data\&#34; class=\&#34;col-sm-4 col-form-label\&#34;&gt;Optional Post Data (JSON)&lt;/label&gt;\n &lt;div class=\&#34;col-sm-8\&#34;&gt;\n &lt;textarea name=\&#34;post_data\&#34; class=\&#34;form-control\&#34; id=\&#34;post_data\&#34; rows=\&#34;3\&#34; autocapitalize=\&#34;false\&#34; spellcheck=\&#34;false\&#34;&gt;{{.PostData}}&lt;/textarea&gt;\n &lt;small id=\&#34;emailHelp\&#34; class=\&#34;form-text text-muted\&#34;&gt;You can insert &lt;a target=\&#34;_blank\&#34; href=\&#34;https://regex101.com/r/I5bbj9/1\&#34;&gt;Regex&lt;/a&gt; to validate the response&lt;/small&gt;\n &lt;/div&gt;\n &lt;/div&gt;\n &lt;div class=\&#34;form-group row{{if ne .Type \&#34;http\&#34;}} d-none{{end}}\&#34;&gt;\n &lt;label for=\&#34;service_response\&#34; class=\&#34;col-sm-4 col-form-label\&#34;&gt;Expected Response (Regex)&lt;/label&gt;\n &lt;div class=\&#34;col-sm-8\&#34;&gt;\n &lt;textarea name=\&#34;expected\&#34; class=\&#34;form-control\&#34; id=\&#34;service_response\&#34; rows=\&#34;3\&#34; autocapitalize=\&#34;false\&#34; spellcheck=\&#34;false\&#34;&gt;{{.Expected}}&lt;/textarea&gt;\n &lt;/div&gt;\n &lt;/div&gt;\n &lt;div class=\&#34;form-group row{{if ne .Type \&#34;http\&#34;}} d-none{{end}}\&#34;&gt;\n &lt;label for=\&#34;service_response_code\&#34; class=\&#34;col-sm-4 col-form-label\&#34;&gt;Expected Status Code&lt;/label&gt;\n &lt;div class=\&#34;col-sm-8\&#34;&gt;\n &lt;input type=\&#34;number\&#34; name=\&#34;expected_status\&#34; class=\&#34;form-control\&#34; value=\&#34;{{if ne .ExpectedStatus 0}}{{.ExpectedStatus}}{{end}}\&#34; placeholder=\&#34;200\&#34; id=\&#34;service_response_code\&#34;&gt;\n &lt;/div&gt;\n &lt;/div&gt;\n &lt;div class=\&#34;form-group row{{if eq .Type \&#34;\&#34;}} d-none{{else if eq .Type \&#34;http\&#34;}} d-none{{end}}\&#34;&gt;\n &lt;label id=\&#34;service_type_label\&#34; for=\&#34;service_port\&#34; class=\&#34;col-sm-4 col-form-label\&#34;&gt;TCP Port&lt;/label&gt;\n &lt;div class=\&#34;col-sm-8\&#34;&gt;\n &lt;input type=\&#34;number\&#34; name=\&#34;port\&#34; class=\&#34;form-control\&#34; value=\&#34;{{if ne .Port 0}}{{.Port}}{{end}}\&#34; id=\&#34;service_port\&#34; placeholder=\&#34;8080\&#34;&gt;\n &lt;/div&gt;\n &lt;/div&gt;\n &lt;div class=\&#34;form-group row\&#34;&gt;\n &lt;label for=\&#34;service_interval\&#34; class=\&#34;col-sm-4 col-form-label\&#34;&gt;Check Interval (Seconds)&lt;/label&gt;\n &lt;div class=\&#34;col-sm-8\&#34;&gt;\n &lt;input type=\&#34;number\&#34; name=\&#34;interval\&#34; class=\&#34;form-control\&#34; value=\&#34;{{if ne .Interval 0}}{{.Interval}}{{end}}\&#34; min=\&#34;1\&#34; id=\&#34;service_interval\&#34; required&gt;\n &lt;small id=\&#34;emailHelp\&#34; class=\&#34;form-text text-muted\&#34;&gt;10,000+ will be checked in Microseconds (1 millisecond = 1000 microseconds).&lt;/small&gt;\n &lt;/div&gt;\n &lt;/div&gt;\n &lt;div class=\&#34;form-group row\&#34;&gt;\n &lt;label for=\&#34;service_timeout\&#34; class=\&#34;col-sm-4 col-form-label\&#34;&gt;Timeout in Seconds&lt;/label&gt;\n &lt;div class=\&#34;col-sm-8\&#34;&gt;\n &lt;input type=\&#34;number\&#34; name=\&#34;timeout\&#34; class=\&#34;form-control\&#34; value=\&#34;{{if ne .Timeout 0}}{{.Timeout}}{{end}}\&#34; placeholder=\&#34;15\&#34; id=\&#34;service_timeout\&#34; min=\&#34;1\&#34;&gt;\n &lt;/div&gt;\n &lt;/div&gt;\n &lt;div class=\&#34;form-group row\&#34;&gt;\n &lt;label for=\&#34;order\&#34; class=\&#34;col-sm-4 col-form-label\&#34;&gt;List Order&lt;/label&gt;\n &lt;div class=\&#34;col-sm-8\&#34;&gt;\n &lt;input type=\&#34;number\&#34; name=\&#34;order\&#34; class=\&#34;form-control\&#34; min=\&#34;0\&#34; value=\&#34;{{.Order}}\&#34; id=\&#34;order\&#34;&gt;\n &lt;/div&gt;\n &lt;/div&gt;\n &lt;div class=\&#34;form-group row\&#34;&gt;\n &lt;div class=\&#34;{{if ne .Id 0}}col-6{{else}}col-12{{end}}\&#34;&gt;\n &lt;button type=\&#34;submit\&#34; class=\&#34;btn btn-success btn-block\&#34;&gt;{{if ne .Id 0}}Update Service{{else}}Create Service{{end}}&lt;/button&gt;\n &lt;/div&gt;\n {{if ne .Id 0}}\n &lt;div class=\&#34;col-6\&#34;&gt;\n &lt;a href=\&#34;/service/{{ .Id }}/delete_failures\&#34; class=\&#34;btn btn-danger btn-block confirm-btn\&#34;&gt;Delete All Failures&lt;/a&gt;\n &lt;/div&gt;\n {{end}}\n &lt;/div&gt;\n&lt;/form&gt;\n{{end}}\n&#34;),</pre></code></td></tr><tr><td>197</td><td><code><pre> }</pre></code></td></tr><tr><td>198</td><td><code><pre> filep := &amp;embedded.EmbeddedFile{</pre></code></td></tr><tr><td>199</td><td><code><pre> Filename: &#34;form_user.html&#34;,</pre></code></td></tr><tr><td>200</td><td><code><pre> FileModTime: time.Unix(1538543370, 0),</pre></code></td></tr><tr><td>201</td><td><code><pre> Content: string(&#34;{{define \&#34;form_user\&#34;}}\n&lt;form action=\&#34;{{if ne .Id 0}}/user/{{.Id}}{{else}}/users{{end}}\&#34; method=\&#34;POST\&#34;&gt;\n &lt;div class=\&#34;form-group row\&#34;&gt;\n &lt;label for=\&#34;username\&#34; class=\&#34;col-sm-4 col-form-label\&#34;&gt;Username&lt;/label&gt;\n &lt;div class=\&#34;col-6 col-md-4\&#34;&gt;\n &lt;input type=\&#34;text\&#34; name=\&#34;username\&#34; class=\&#34;form-control\&#34; value=\&#34;{{.Username}}\&#34; id=\&#34;username\&#34; placeholder=\&#34;Username\&#34; required&gt;\n &lt;/div&gt;\n &lt;div class=\&#34;col-6 col-md-4\&#34;&gt;\n &lt;span class=\&#34;switch\&#34;&gt;\n &lt;input type=\&#34;checkbox\&#34; name=\&#34;admin\&#34; class=\&#34;switch\&#34; id=\&#34;switch-normal\&#34;{{if .Admin}} checked{{end}}&gt;\n &lt;label for=\&#34;switch-normal\&#34;&gt;Administrator&lt;/label&gt;\n &lt;/span&gt;\n &lt;/div&gt;\n &lt;/div&gt;\n &lt;div class=\&#34;form-group row\&#34;&gt;\n &lt;label for=\&#34;email\&#34; class=\&#34;col-sm-4 col-form-label\&#34;&gt;Email Address&lt;/label&gt;\n &lt;div class=\&#34;col-sm-8\&#34;&gt;\n &lt;input type=\&#34;email\&#34; name=\&#34;email\&#34; class=\&#34;form-control\&#34; id=\&#34;email\&#34; value=\&#34;{{.Email}}\&#34; placeholder=\&#34;user@domain.com\&#34; required autocapitalize=\&#34;false\&#34; spellcheck=\&#34;false\&#34;&gt;\n &lt;/div&gt;\n &lt;/div&gt;\n &lt;div class=\&#34;form-group row\&#34;&gt;\n &lt;label for=\&#34;password\&#34; class=\&#34;col-sm-4 col-form-label\&#34;&gt;Password&lt;/label&gt;\n &lt;div class=\&#34;col-sm-8\&#34;&gt;\n &lt;input type=\&#34;password\&#34; name=\&#34;password\&#34; class=\&#34;form-control\&#34; id=\&#34;password\&#34; value=\&#34;##########\&#34; placeholder=\&#34;Password\&#34; required&gt;\n &lt;/div&gt;\n &lt;/div&gt;\n &lt;div class=\&#34;form-group row\&#34;&gt;\n &lt;label for=\&#34;password_confirm\&#34; class=\&#34;col-sm-4 col-form-label\&#34;&gt;Confirm Password&lt;/label&gt;\n &lt;div class=\&#34;col-sm-8\&#34;&gt;\n &lt;input type=\&#34;password\&#34; name=\&#34;password_confirm\&#34; class=\&#34;form-control\&#34; id=\&#34;password_confirm\&#34; value=\&#34;##########\&#34; placeholder=\&#34;Confirm Password\&#34; required&gt;\n &lt;/div&gt;\n &lt;/div&gt;\n &lt;div class=\&#34;form-group row\&#34;&gt;\n &lt;div class=\&#34;col-sm-12\&#34;&gt;\n &lt;button type=\&#34;submit\&#34; class=\&#34;btn btn-primary btn-block\&#34;&gt;{{if ne .Id 0}}Update User{{else}}Create User{{end}}&lt;/button&gt;\n &lt;/div&gt;\n &lt;/div&gt;\n&lt;/form&gt;\n{{end}}\n&#34;),</pre></code></td></tr><tr><td>202</td><td><code><pre> }</pre></code></td></tr><tr><td>203</td><td><code><pre> fileq := &amp;embedded.EmbeddedFile{</pre></code></td></tr><tr><td>204</td><td><code><pre> Filename: &#34;head.html&#34;,</pre></code></td></tr><tr><td>205</td><td><code><pre> FileModTime: time.Unix(1538459085, 0),</pre></code></td></tr><tr><td>206</td><td><code><pre> Content: string(&#34;{{ define \&#34;head\&#34;}}\n&lt;head&gt;\n &lt;meta charset=\&#34;utf-8\&#34;&gt;\n &lt;meta name=\&#34;viewport\&#34; content=\&#34;width=device-width, initial-scale=1, shrink-to-fit=no, maximum-scale=1.0, user-scalable=0\&#34;&gt;\n{{if USE_CDN}}\n &lt;link rel=\&#34;shortcut icon\&#34; type=\&#34;image/x-icon\&#34; href=\&#34;https://assets.statup.io/favicon.ico\&#34;&gt;\n &lt;link rel=\&#34;stylesheet\&#34; href=\&#34;https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css\&#34; integrity=\&#34;sha384-WskhaSGFgHYWDcbwN70/dfYBj47jz9qbsMId/iRN3ewGhXQFZCSftd1LZCfmhktB\&#34; crossorigin=\&#34;anonymous\&#34;&gt;\n &lt;link rel=\&#34;stylesheet\&#34; href=\&#34;https://assets.statup.io/base.css\&#34;&gt;\n{{ else }}\n &lt;link rel=\&#34;shortcut icon\&#34; type=\&#34;image/x-icon\&#34; href=\&#34;/favicon.ico\&#34;&gt;\n &lt;link rel=\&#34;stylesheet\&#34; href=\&#34;/css/bootstrap.min.css\&#34;&gt;\n &lt;link rel=\&#34;stylesheet\&#34; href=\&#34;/css/base.css\&#34;&gt;\n{{end}}\n{{block \&#34;extra_css\&#34; .}} {{end}}\n&lt;title&gt;{{block \&#34;title\&#34; .}} {{end}}&lt;/title&gt;\n&lt;/head&gt;\n{{end}}\n&#34;),</pre></code></td></tr><tr><td>207</td><td><code><pre> }</pre></code></td></tr><tr><td>208</td><td><code><pre> filer := &amp;embedded.EmbeddedFile{</pre></code></td></tr><tr><td>209</td><td><code><pre> Filename: &#34;help.html&#34;,</pre></code></td></tr><tr><td>210</td><td><code><pre> FileModTime: time.Unix(1538459433, 0),</pre></code></td></tr><tr><td>211</td><td><code><pre> Content: string(&#34;{{define \&#34;title\&#34;}}Statup | Help{{end}}\n{{define \&#34;content\&#34;}}\n&lt;div class=\&#34;container col-md-7 col-sm-12 mt-md-5 bg-light\&#34;&gt;\n{{if Auth}}\n {{template \&#34;nav\&#34;}}\n{{end}}\n &lt;div class=\&#34;col-12\&#34;&gt;\n {{ safe . }}\n &lt;/div&gt;\n&lt;/div&gt;\n{{end}}\n{{define \&#34;extra_css\&#34;}}\n&lt;style&gt;\n pre {\n background-color: white;\n padding: 10px 15px;\n border: 1px solid #a2a2a233;\n border-radius: 7px;\n }\n code {\n color: #d87e1a;\n }\n&lt;/style&gt;\n{{end}}\n&#34;),</pre></code></td></tr><tr><td>212</td><td><code><pre> }</pre></code></td></tr><tr><td>213</td><td><code><pre> files := &amp;embedded.EmbeddedFile{</pre></code></td></tr><tr><td>214</td><td><code><pre> Filename: &#34;help.md&#34;,</pre></code></td></tr><tr><td>215</td><td><code><pre> FileModTime: time.Unix(1536974218, 0),</pre></code></td></tr><tr><td>216</td><td><code><pre> Content: string(&#34;# Statup Help\nStatup is an easy to use Status Page monitor for your websites and applications. Statup is developed in Go Language and you are able to create custom plugins with it!\n\n&lt;p&gt;\n &lt;a href=\&#34;https://github.com/hunterlong/statup\&#34;&gt;&lt;img src=\&#34;https://img.shields.io/github/stars/hunterlong/statup.svg?style=social&amp;label=Stars\&#34;&gt;&lt;/a&gt;\n &lt;a href=\&#34;https://github.com/hunterlong/statup\&#34;&gt;&lt;img src=\&#34;https://img.shields.io/docker/build/hunterlong/statup.svg\&#34;&gt;&lt;/a&gt;\n &lt;a href=\&#34;https://github.com/hunterlong/statup\&#34;&gt;&lt;img src=\&#34;https://img.shields.io/github/release/hunterlong/statup.svg\&#34;&gt;&lt;/a&gt;\n&lt;/p&gt;\n\n# Services\nFor each website and application you want to add a new Service. Each Service will require a URL endpoint to test your applications status.\nYou can also add expected HTTP responses (regex allow), expected HTTP response codes, and other fields to make sure your service is online or offline.\n\n# Statup Settings\nYou can change multiple settings in your Statup instance.\n\n# Users\nUsers can access the Statup Dashboard to add, remove, and view services.\n\n# Notifications\n\n\n# Plugins\nCreating a plugin for Statup is not that difficult, if you know a little bit of Go Language you can create any type of application to be embedded into the Status framework.\nCheckout the example plugin that includes all the interfaces, information, and custom HTTP routing at &lt;a href=\&#34;https://github.com/hunterlong/statup_plugin\&#34;&gt;https://github.com/hunterlong/statup_plugin&lt;/a&gt;.\nAnytime there is an action on your status page, all of your plugins will be notified of the change with the values that were changed or created.\n&lt;p&gt;&lt;/p&gt;\nUsing the statup/plugin Golang package you can quickly implement the event listeners. Statup uses &lt;a href=\&#34;https://github.com/upper/db\&#34;&gt;upper.io/db.v3&lt;/a&gt; for the database connection.\nYou can use the database inside of your plugin to create, update, and destroy tables/data. &lt;b&gt;Please only use respectable plugins!&lt;/b&gt;\n\n# Custom Stlying\nOn Statup Status Page server can you create your own custom stylesheet to be rendered on the index view of your status page. Go to &lt;a href=\&#34;/settings\&#34;&gt;Settings&lt;/a&gt; and click on Custom Styling.\n\n# API Endpoints\nStatup includes a RESTFUL API so you can view, update, and edit your services with easy to use routes. You can currently view, update and delete services, view, create, update users, and get detailed information about the Statup instance. To make life easy, try out a Postman or Swagger JSON file and use it on your Statup Server.\n\n&lt;p align=\&#34;center\&#34;&gt;\n&lt;a href=\&#34;https://github.com/hunterlong/statup/blob/master/dev/postman.json\&#34;&gt;Postman JSON Export&lt;/a&gt; | &lt;a href=\&#34;https://github.com/hunterlong/statup/blob/master/dev/swagger.json\&#34;&gt;Swagger Export&lt;/a&gt;\n&lt;/p&gt;\n\n## Authentication\nAuthentication uses the Statup API Secret to accept remote requests. You can find the API Secret in the Settings page of your Statup server. To send requests to your Statup API, include a Authorization Header when you send the request. The API will accept any one of the headers below.\n\n- HTTP Header: `Authorization: API SECRET HERE`\n- HTTP Header: `Authorization: Bearer API SECRET HERE`\n\n## Main Route `/api`\nThe main API route will show you all services and failures along with them.\n\n## Services\nThe services API endpoint will show you detailed information about services and will allow you to edit/delete services with POST/DELETE http methods.\n\n### Viewing All Services\n- Endpoint: `/api/services`\n- Method: `GET`\n- Response: Array of [Services](https://github.com/hunterlong/statup/wiki/API#service-response)\n- Response Type: `application/json`\n- Request Type: `application/json`\n\n### Viewing Service\n- Endpoint: `/api/services/{id}`\n- Method: `GET`\n- Response: [Service](https://github.com/hunterlong/statup/wiki/API#service-response)\n- Response Type: `application/json`\n- Request Type: `application/json`\n\n### Updating Service\n- Endpoint: `/api/services/{id}`\n- Method: `POST`\n- Response: [Service](https://github.com/hunterlong/statup/wiki/API#service-response)\n- Response Type: `application/json`\n- Request Type: `application/json`\n\nPOST Data:\n``` json\n{\n \&#34;name\&#34;: \&#34;Updated Service\&#34;,\n \&#34;domain\&#34;: \&#34;https://google.com\&#34;,\n \&#34;expected\&#34;: \&#34;\&#34;,\n \&#34;expected_status\&#34;: 200,\n \&#34;check_interval\&#34;: 15,\n \&#34;type\&#34;: \&#34;http\&#34;,\n \&#34;method\&#34;: \&#34;GET\&#34;,\n \&#34;post_data\&#34;: \&#34;\&#34;,\n \&#34;port\&#34;: 0,\n \&#34;timeout\&#34;: 10,\n \&#34;order_id\&#34;: 0\n}\n```\n\n### Deleting Service\n- Endpoint: `/api/services/{id}`\n- Method: `DELETE`\n- Response: [Object Response](https://github.com/hunterlong/statup/wiki/API#object-response)\n- Response Type: `application/json`\n- Request Type: `application/json`\n\nResponse:\n``` json\n{\n \&#34;status\&#34;: \&#34;success\&#34;,\n \&#34;id\&#34;: 4,\n \&#34;type\&#34;: \&#34;service\&#34;,\n \&#34;method\&#34;: \&#34;delete\&#34;\n}\n```\n\n## Users\nThe users API endpoint will show you users that are registered inside your Statup instance.\n\n### View All Users\n- Endpoint: `/api/users`\n- Method: `GET`\n- Response: Array of [Users](https://github.com/hunterlong/statup/wiki/API#user-response)\n- Response Type: `application/json`\n- Request Type: `application/json`\n\n### Viewing User\n- Endpoint: `/api/users/{id}`\n- Method: `GET`\n- Response: [User](https://github.com/hunterlong/statup/wiki/API#user-response)\n- Response Type: `application/json`\n- Request Type: `application/json`\n\n### Creating New User\n- Endpoint: `/api/users`\n- Method: `POST`\n- Response: [User](https://github.com/hunterlong/statup/wiki/API#user-response)\n- Response Type: `application/json`\n- Request Type: `application/json`\n\nPOST Data:\n``` json\n{\n \&#34;username\&#34;: \&#34;newadmin\&#34;,\n \&#34;email\&#34;: \&#34;info@email.com\&#34;,\n \&#34;password\&#34;: \&#34;password123\&#34;,\n \&#34;admin\&#34;: true\n}\n```\n\n### Updating User\n- Endpoint: `/api/users/{id}`\n- Method: `POST`\n- Response: [User](https://github.com/hunterlong/statup/wiki/API#user-response)\n- Response Type: `application/json`\n- Request Type: `application/json`\n\nPOST Data:\n``` json\n{\n \&#34;username\&#34;: \&#34;updatedadmin\&#34;,\n \&#34;email\&#34;: \&#34;info@email.com\&#34;,\n \&#34;password\&#34;: \&#34;password123\&#34;,\n \&#34;admin\&#34;: true\n}\n```\n\n### Deleting User\n- Endpoint: `/api/services/{id}`\n- Method: `DELETE`\n- Response: [Object Response](https://github.com/hunterlong/statup/wiki/API#object-response)\n- Response Type: `application/json`\n- Request Type: `application/json`\n\nResponse:\n``` json\n{\n \&#34;status\&#34;: \&#34;success\&#34;,\n \&#34;id\&#34;: 3,\n \&#34;type\&#34;: \&#34;user\&#34;,\n \&#34;method\&#34;: \&#34;delete\&#34;\n}\n```\n\n# Service Response\n``` json\n{\n \&#34;id\&#34;: 8,\n \&#34;name\&#34;: \&#34;Test Service 0\&#34;,\n \&#34;domain\&#34;: \&#34;https://status.coinapp.io\&#34;,\n \&#34;expected\&#34;: \&#34;\&#34;,\n \&#34;expected_status\&#34;: 200,\n \&#34;check_interval\&#34;: 1,\n \&#34;type\&#34;: \&#34;http\&#34;,\n \&#34;method\&#34;: \&#34;GET\&#34;,\n \&#34;post_data\&#34;: \&#34;\&#34;,\n \&#34;port\&#34;: 0,\n \&#34;timeout\&#34;: 30,\n \&#34;order_id\&#34;: 0,\n \&#34;created_at\&#34;: \&#34;2018-09-12T09:07:03.045832088-07:00\&#34;,\n \&#34;updated_at\&#34;: \&#34;2018-09-12T09:07:03.046114305-07:00\&#34;,\n \&#34;online\&#34;: false,\n \&#34;latency\&#34;: 0.031411064,\n \&#34;24_hours_online\&#34;: 0,\n \&#34;avg_response\&#34;: \&#34;\&#34;,\n \&#34;status_code\&#34;: 502,\n \&#34;last_online\&#34;: \&#34;0001-01-01T00:00:00Z\&#34;,\n \&#34;dns_lookup_time\&#34;: 0.001727175,\n \&#34;failures\&#34;: [\n {\n \&#34;id\&#34;: 5187,\n \&#34;issue\&#34;: \&#34;HTTP Status Code 502 did not match 200\&#34;,\n \&#34;created_at\&#34;: \&#34;2018-09-12T10:41:46.292277471-07:00\&#34;\n },\n {\n \&#34;id\&#34;: 5188,\n \&#34;issue\&#34;: \&#34;HTTP Status Code 502 did not match 200\&#34;,\n \&#34;created_at\&#34;: \&#34;2018-09-12T10:41:47.337659862-07:00\&#34;\n }\n ]\n}\n```\n\n# User Response\n``` json\n{\n \&#34;id\&#34;: 1,\n \&#34;username\&#34;: \&#34;admin\&#34;,\n \&#34;api_key\&#34;: \&#34;02f324450a631980121e8fd6ea7dfe4a7c685a2f\&#34;,\n \&#34;admin\&#34;: true,\n \&#34;created_at\&#34;: \&#34;2018-09-12T09:06:53.906398511-07:00\&#34;,\n \&#34;updated_at\&#34;: \&#34;2018-09-12T09:06:54.972440207-07:00\&#34;\n}\n```\n\n# Object Response\n``` json\n{\n \&#34;type\&#34;: \&#34;service\&#34;,\n \&#34;id\&#34;: 19,\n \&#34;method\&#34;: \&#34;delete\&#34;,\n \&#34;status\&#34;: \&#34;success\&#34;\n}\n```\n\n# Main API Response\n``` json\n{\n \&#34;name\&#34;: \&#34;Awesome Status\&#34;,\n \&#34;description\&#34;: \&#34;An awesome status page by Statup\&#34;,\n \&#34;footer\&#34;: \&#34;This is my custom footer\&#34;,\n \&#34;domain\&#34;: \&#34;https://demo.statup.io\&#34;,\n \&#34;version\&#34;: \&#34;v0.56\&#34;,\n \&#34;migration_id\&#34;: 1536768413,\n \&#34;created_at\&#34;: \&#34;2018-09-12T09:06:53.905374829-07:00\&#34;,\n \&#34;updated_at\&#34;: \&#34;2018-09-12T09:07:01.654201225-07:00\&#34;,\n \&#34;database\&#34;: \&#34;sqlite\&#34;,\n \&#34;started_on\&#34;: \&#34;2018-09-12T10:43:07.760729349-07:00\&#34;,\n \&#34;services\&#34;: [\n {\n \&#34;id\&#34;: 1,\n \&#34;name\&#34;: \&#34;Google\&#34;,\n \&#34;domain\&#34;: \&#34;https://google.com\&#34;,\n \&#34;expected\&#34;: \&#34;\&#34;,\n \&#34;expected_status\&#34;: 200,\n \&#34;check_interval\&#34;: 10,\n \&#34;type\&#34;: \&#34;http\&#34;,\n \&#34;method\&#34;: \&#34;GET\&#34;,\n \&#34;post_data\&#34;: \&#34;\&#34;,\n \&#34;port\&#34;: 0,\n \&#34;timeout\&#34;: 10,\n \&#34;order_id\&#34;: 0,\n \&#34;created_at\&#34;: \&#34;2018-09-12T09:06:54.97549122-07:00\&#34;,\n \&#34;updated_at\&#34;: \&#34;2018-09-12T09:06:54.975624103-07:00\&#34;,\n \&#34;online\&#34;: true,\n \&#34;latency\&#34;: 0.09080986,\n \&#34;24_hours_online\&#34;: 0,\n \&#34;avg_response\&#34;: \&#34;\&#34;,\n \&#34;status_code\&#34;: 200,\n \&#34;last_online\&#34;: \&#34;2018-09-12T10:44:07.931990439-07:00\&#34;,\n \&#34;dns_lookup_time\&#34;: 0.005543935\n }\n ]\n}\n```\n\n# Prometheus Exporter\nStatup includes a prometheus exporter so you can have even more monitoring power with your services. The prometheus exporter can be seen on `/metrics`, simply create another exporter in your prometheus config. Use your Statup API Secret for the Authorization Bearer header, the `/metrics` URL is dedicated for Prometheus and requires the correct API Secret has `Authorization` header.\n\n# Grafana Dashboard\nStatup has a [Grafana Dashboard](https://grafana.com/dashboards/6950) that you can quickly implement if you&#39;ve added your Statup service to Prometheus. Import Dashboard ID: `6950` into your Grafana dashboard and watch the metrics come in!\n\n&lt;p align=\&#34;center\&#34;&gt;&lt;img width=\&#34;80%\&#34; src=\&#34;https://img.cjx.io/statupgrafana.png\&#34;&gt;&lt;/p&gt;\n\n## Basic Prometheus Exporter\nIf you have Statup and the Prometheus server in the same Docker network, you can use the yaml config below.\n``` yaml\nscrape_configs:\n - job_name: &#39;statup&#39;\n scrape_interval: 30s\n bearer_token: &#39;SECRET API KEY HERE&#39;\n static_configs:\n - targets: [&#39;statup:8080&#39;]\n```\n\n## Remote URL Prometheus Exporter\nThis exporter yaml below has `scheme: https`, which you can remove if you arn&#39;t using HTTPS.\n``` yaml\nscrape_configs:\n - job_name: &#39;statup&#39;\n scheme: https\n scrape_interval: 30s\n bearer_token: &#39;SECRET API KEY HERE&#39;\n static_configs:\n - targets: [&#39;status.mydomain.com&#39;]\n```\n\n### `/metrics` Output\n```\nstatup_total_failures 206\nstatup_total_services 4\nstatup_service_failures{id=\&#34;1\&#34; name=\&#34;Google\&#34;} 0\nstatup_service_latency{id=\&#34;1\&#34; name=\&#34;Google\&#34;} 12\nstatup_service_online{id=\&#34;1\&#34; name=\&#34;Google\&#34;} 1\nstatup_service_status_code{id=\&#34;1\&#34; name=\&#34;Google\&#34;} 200\nstatup_service_response_length{id=\&#34;1\&#34; name=\&#34;Google\&#34;} 10777\nstatup_service_failures{id=\&#34;2\&#34; name=\&#34;Statup.io\&#34;} 0\nstatup_service_latency{id=\&#34;2\&#34; name=\&#34;Statup.io\&#34;} 3\nstatup_service_online{id=\&#34;2\&#34; name=\&#34;Statup.io\&#34;} 1\nstatup_service_status_code{id=\&#34;2\&#34; name=\&#34;Statup.io\&#34;} 200\nstatup_service_response_length{id=\&#34;2\&#34; name=\&#34;Statup.io\&#34;} 2\n```\n\n# Static HTML Exporter\nYou might have a server that won&#39;t allow you to run command that run longer for 60 seconds, or maybe you just want to export your status page to a static HTML file. Using the Statup exporter you can easily do this with 1 command.\n\n```\nstatup export\n```\n###### &#39;index.html&#39; is created in current directory with static CDN url&#39;s.\n\n## Push to Github\nOnce you have the `index.html` file, you could technically send it to an FTP server, Email it, Pastebin it, or even push to your Github repo for Status updates directly from repo.\n\n```bash\ngit add index.html\ngit commit -m \&#34;Updated Status Page\&#34;\ngit push -u origin/master\n```\n\n# Config with .env File\nIt may be useful to load your environment using a `.env` file in the root directory of your Statup server. The .env file will be automatically loaded on startup and will overwrite all values you have in config.yml.\n\nIf you have the `DB_CONN` environment variable set Statup will bypass all values in config.yml and will require you to have the other DB_* variables in place. You can pass in these environment variables without requiring a .env file.\n\n## `.env` File\n```bash\nDB_CONN=postgres\nDB_HOST=0.0.0.0\nDB_PORT=5432\nDB_USER=root\nDB_PASS=password123\nDB_DATABASE=root\n\nNAME=Demo\nDESCRIPTION=This is an awesome page\nDOMAIN=https://domain.com\nADMIN_USER=admin\nADMIN_PASS=admin\nADMIN_EMAIL=info@admin.com\nUSE_CDN=true\n\nIS_DOCKER=false\nIS_AWS=false\nSASS=/usr/local/bin/sass\nCMD_FILE=/bin/bash\n```\nThis .env file will include additional variables in the future, subscribe to this repo to keep up-to-date with changes and updates.\n\n# Makefile\nHere&#39;s a simple list of Makefile commands you can run using `make`. The [Makefile](https://github.com/hunterlong/statup/blob/master/Makefile) may change often, so i&#39;ll try to keep this Wiki up-to-date.\n\n- Ubuntu `apt-get install build-essential`\n- MacOSX `sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer`\n- Windows [Install Guide for GNU make utility](http://gnuwin32.sourceforge.net/packages/make.htm)\n- CentOS/RedHat `yum groupinstall \&#34;Development Tools\&#34;`\n\n### Commands\n``` bash\nmake build # build the binary\nmake install\nmake run\nmake test\nmake coverage\nmake docs\n# Building Statup\nmake build-all\nmake build-alpine\nmake docker\nmake docker-run\nmake docker-dev\nmake docker-run-dev\nmake databases\nmake dep\nmake dev-deps\nmake clean\nmake compress\nmake cypress-install\nmake cypress-test\n```\n\n## Testing\n* If you want to test your updates with the current golang testing units, you can follow the guide below to run a full test process. Each test for Statup will run in MySQL, Postgres, and SQlite to make sure all database types work correctly.\n\n## Create Docker Databases\nThe easiest way to run the tests on all 3 databases is by starting temporary databases servers with Docker. Docker is available for Linux, Mac and Windows. You can download/install it by going to the [Docker Installation](https://docs.docker.com/install/) site.\n\n``` bash\ndocker run -it -d \\\n -p 3306:3306 \\\n -env MYSQL_ROOT_PASSWORD=password123 \\\n -env MYSQL_DATABASE=root mysql\n```\n\n``` bash\ndocker run -it -d \\\n -p 5432:5432 \\\n -env POSTGRES_PASSWORD=password123 \\\n -env POSTGRES_USER=root \\\n -env POSTGRES_DB=root postgres\n```\n\nOnce you have MySQL and Postgres running, you can begin the testing. SQLite database will automatically create a `statup.db` file and will delete after testing.\n\n## Run Tests\nInsert the database environment variables to auto connect the the databases and run the normal test command: `go test -v`. You&#39;ll see a verbose output of each test. If all tests pass, make a push request! 💃\n``` bash\nDB_DATABASE=root \\\n DB_USER=root \\\n DB_PASS=password123 \\\n DB_HOST=localhost \\\n go test -v\n```\n&#34;),</pre></code></td></tr><tr><td>217</td><td><code><pre> }</pre></code></td></tr><tr><td>218</td><td><code><pre> filet := &amp;embedded.EmbeddedFile{</pre></code></td></tr><tr><td>219</td><td><code><pre> Filename: &#34;index.html&#34;,</pre></code></td></tr><tr><td>220</td><td><code><pre> FileModTime: time.Unix(1538522506, 0),</pre></code></td></tr><tr><td>221</td><td><code><pre> Content: string(&#34;{{define \&#34;title\&#34;}}{{CoreApp.Name}} Status{{end}}\n{{define \&#34;content\&#34;}}\n&lt;div class=\&#34;container col-md-7 col-sm-12 mt-2 sm-container\&#34;&gt;\n&lt;h1 class=\&#34;col-12 text-center mb-4 mt-sm-3 header-title\&#34;&gt;{{.Name}}&lt;/h1&gt;\n\n{{ if .Description }}\n&lt;h5 class=\&#34;col-12 text-center mb-5 header-desc\&#34;&gt;{{ .Description }}&lt;/h5&gt;\n{{ end }}\n\n&lt;div class=\&#34;col-12 full-col-12 mb-5\&#34;&gt;\n &lt;div class=\&#34;list-group online_list\&#34;&gt;\n {{ range Services }}\n &lt;a href=\&#34;#\&#34; class=\&#34;service_li list-group-item list-group-item-action {{if not .Online}}bg-danger text-white{{ end }}\&#34; data-id=\&#34;{{.Id}}\&#34;&gt;\n {{ .Name }}\n {{if .Online}}\n &lt;span class=\&#34;badge bg-success float-right pulse-glow\&#34;&gt;ONLINE&lt;/span&gt;\n {{ else }}\n &lt;span class=\&#34;badge bg-white text-black-50 float-right pulse\&#34;&gt;OFFLINE&lt;/span&gt;\n {{end}}\n &lt;/a&gt;\n {{ end }}\n &lt;/div&gt;\n&lt;/div&gt;\n\n&lt;div class=\&#34;col-12 full-col-12\&#34;&gt;\n{{ if not Services }}\n &lt;div class=\&#34;alert alert-danger\&#34; role=\&#34;alert\&#34;&gt;\n &lt;h4 class=\&#34;alert-heading\&#34;&gt;No Services to Monitor!&lt;/h4&gt;\n &lt;p&gt;Your Statup Status Page is working correctly, but you don&#39;t have any services to monitor. Go to the &lt;b&gt;Dashboard&lt;/b&gt; and add a website to begin really using your status page!&lt;/p&gt;\n &lt;hr&gt;\n &lt;p class=\&#34;mb-0\&#34;&gt;If this is a bug, please make an issue in the Statup Github Repo. &lt;a href=\&#34;https://github.com/hunterlong/statup\&#34; class=\&#34;btn btn-sm btn-outline-danger float-right\&#34;&gt;Statup Github Repo&lt;/a&gt;&lt;/p&gt;\n &lt;/div&gt;\n{{end}}\n{{ range Services }}\n &lt;div class=\&#34;mt-4\&#34; id=\&#34;service_id_{{.Id}}\&#34;&gt;\n &lt;div class=\&#34;card\&#34;&gt;\n &lt;div class=\&#34;card-body\&#34;&gt;\n &lt;div class=\&#34;col-12\&#34;&gt;\n &lt;h4 class=\&#34;mt-3\&#34;&gt;&lt;a href=\&#34;/service/{{.Id}}\&#34;{{if not .Online}} class=\&#34;text-danger\&#34;{{end}}&gt;{{ .Name }}&lt;/a&gt;\n {{if .Online}}\n &lt;span class=\&#34;badge bg-success float-right\&#34;&gt;ONLINE&lt;/span&gt;\n {{ else }}\n &lt;span class=\&#34;badge bg-danger float-right pulse\&#34;&gt;OFFLINE&lt;/span&gt;\n {{end}}&lt;/h4&gt;\n\n &lt;div class=\&#34;row stats_area mt-5 mb-5\&#34;&gt;\n &lt;div class=\&#34;col-4\&#34;&gt;\n &lt;span class=\&#34;lg_number\&#34;&gt;{{.Online24}}%&lt;/span&gt;\n Online last 24 Hours\n &lt;/div&gt;\n &lt;div class=\&#34;col-4\&#34;&gt;\n &lt;span class=\&#34;lg_number\&#34;&gt;{{.AvgTime}}ms&lt;/span&gt;\n Average Response\n &lt;/div&gt;\n &lt;div class=\&#34;col-4\&#34;&gt;\n &lt;span class=\&#34;lg_number\&#34;&gt;{{.AvgUptime24}}%&lt;/span&gt;\n Uptime last 24 Hours\n &lt;/div&gt;\n &lt;/div&gt;\n\n &lt;/div&gt;\n &lt;/div&gt;\n {{ if .AvgUptime24 }}\n &lt;div class=\&#34;chart-container\&#34;&gt;\n &lt;canvas id=\&#34;service_{{ .Id }}\&#34;&gt;&lt;/canvas&gt;\n &lt;/div&gt;\n {{ end }}\n &lt;div class=\&#34;row lower_canvas full-col-12 text-white{{if not .Online}} bg-danger{{end}}\&#34;&gt;\n &lt;div class=\&#34;col-10 text-truncate\&#34;&gt;\n &lt;span class=\&#34;d-none d-md-inline\&#34;&gt;{{.SmallText}}&lt;/span&gt;\n &lt;/div&gt;\n &lt;div class=\&#34;col-sm-12 col-md-2\&#34;&gt;\n &lt;a href=\&#34;/service/{{ .Id }}\&#34; class=\&#34;btn {{if .Online}}btn-success{{else}}btn-danger{{end}} btn-sm float-right dyn-dark btn-block\&#34;&gt;View Service&lt;/a&gt;\n &lt;/div&gt;\n &lt;/div&gt;\n &lt;/div&gt;\n &lt;/div&gt;\n{{ end }}\n&lt;/div&gt;\n&lt;/div&gt;\n{{end}}\n{{define \&#34;extra_scripts\&#34;}}\n&lt;script src=\&#34;/charts.js\&#34;&gt;&lt;/script&gt;\n{{end}}\n&#34;),</pre></code></td></tr><tr><td>222</td><td><code><pre> }</pre></code></td></tr><tr><td>223</td><td><code><pre> fileu := &amp;embedded.EmbeddedFile{</pre></code></td></tr><tr><td>224</td><td><code><pre> Filename: &#34;login.html&#34;,</pre></code></td></tr><tr><td>225</td><td><code><pre> FileModTime: time.Unix(1538454764, 0),</pre></code></td></tr><tr><td>226</td><td><code><pre> Content: string(&#34;{{define \&#34;title\&#34;}}Statup Login{{end}}\n{{define \&#34;content\&#34;}}\n&lt;div class=\&#34;container col-md-7 col-sm-12 mt-md-5 bg-light\&#34;&gt;\n &lt;div class=\&#34;col-10 offset-1 col-md-8 offset-md-2 mt-md-2\&#34;&gt;\n &lt;div class=\&#34;col-12 col-md-8 offset-md-2 mb-4\&#34;&gt;\n &lt;img class=\&#34;col-12 mt-5 mt-md-0\&#34; src=\&#34;/statup.png\&#34;&gt;\n &lt;/div&gt;\n {{ if .Error }}\n &lt;div class=\&#34;alert alert-danger\&#34; role=\&#34;alert\&#34;&gt;\n Incorrect login information submitted, try again.\n &lt;/div&gt;\n {{ end }}\n &lt;form action=\&#34;/dashboard\&#34; method=\&#34;POST\&#34;&gt;\n &lt;div class=\&#34;form-group row\&#34;&gt;\n &lt;label for=\&#34;username\&#34; class=\&#34;col-sm-2 col-form-label\&#34;&gt;Username&lt;/label&gt;\n &lt;div class=\&#34;col-sm-10\&#34;&gt;\n &lt;input type=\&#34;text\&#34; name=\&#34;username\&#34; class=\&#34;form-control\&#34; id=\&#34;username\&#34; placeholder=\&#34;Username\&#34; autocapitalize=\&#34;false\&#34; spellcheck=\&#34;false\&#34;&gt;\n &lt;/div&gt;\n &lt;/div&gt;\n &lt;div class=\&#34;form-group row\&#34;&gt;\n &lt;label for=\&#34;password\&#34; class=\&#34;col-sm-2 col-form-label\&#34;&gt;Password&lt;/label&gt;\n &lt;div class=\&#34;col-sm-10\&#34;&gt;\n &lt;input type=\&#34;password\&#34; name=\&#34;password\&#34; class=\&#34;form-control\&#34; id=\&#34;password\&#34; placeholder=\&#34;Password\&#34;&gt;\n &lt;/div&gt;\n &lt;/div&gt;\n &lt;div class=\&#34;form-group row\&#34;&gt;\n &lt;div class=\&#34;col-sm-12\&#34;&gt;\n &lt;button type=\&#34;submit\&#34; class=\&#34;btn btn-primary btn-block\&#34;&gt;Sign in&lt;/button&gt;\n &lt;/div&gt;\n &lt;/div&gt;\n &lt;/form&gt;\n &lt;/div&gt;\n&lt;/div&gt;\n{{end}}\n&#34;),</pre></code></td></tr><tr><td>227</td><td><code><pre> }</pre></code></td></tr><tr><td>228</td><td><code><pre> filev := &amp;embedded.EmbeddedFile{</pre></code></td></tr><tr><td>229</td><td><code><pre> Filename: &#34;logs.html&#34;,</pre></code></td></tr><tr><td>230</td><td><code><pre> FileModTime: time.Unix(1538460210, 0),</pre></code></td></tr><tr><td>231</td><td><code><pre> Content: string(&#34;{{define \&#34;title\&#34;}}Statup | Logs{{end}}\n{{define \&#34;content\&#34;}}\n&lt;div class=\&#34;container col-md-7 col-sm-12 mt-md-5 bg-light\&#34;&gt;\n{{if Auth}}\n {{template \&#34;nav\&#34;}}\n{{end}}\n&lt;div class=\&#34;col-12\&#34;&gt;\n &lt;textarea id=\&#34;live_logs\&#34; class=\&#34;form-control\&#34; rows=\&#34;40\&#34; readonly&gt;{{range .}}{{.}}{{end}}&lt;/textarea&gt;\n&lt;/div&gt;\n&lt;/div&gt;\n{{end}}\n{{define \&#34;extra_css\&#34;}}\n&lt;style&gt;\n @media (max-width: 767px) {\n #live_logs {\n font-size: 6pt;\n }\n }\n&lt;/style&gt;\n{{end}}\n&#34;),</pre></code></td></tr><tr><td>232</td><td><code><pre> }</pre></code></td></tr><tr><td>233</td><td><code><pre> filew := &amp;embedded.EmbeddedFile{</pre></code></td></tr><tr><td>234</td><td><code><pre> Filename: &#34;nav.html&#34;,</pre></code></td></tr><tr><td>235</td><td><code><pre> FileModTime: time.Unix(1534817721, 0),</pre></code></td></tr><tr><td>236</td><td><code><pre> Content: string(&#34;{{define \&#34;nav\&#34;}}\n&lt;nav class=\&#34;navbar navbar-expand-lg navbar-light bg-light\&#34;&gt;\n &lt;a class=\&#34;navbar-brand\&#34; href=\&#34;/\&#34;&gt;Statup&lt;/a&gt;\n &lt;button class=\&#34;navbar-toggler\&#34; type=\&#34;button\&#34; data-toggle=\&#34;collapse\&#34; data-target=\&#34;#navbarText\&#34; aria-controls=\&#34;navbarText\&#34; aria-expanded=\&#34;false\&#34; aria-label=\&#34;Toggle navigation\&#34;&gt;\n &lt;span class=\&#34;navbar-toggler-icon\&#34;&gt;&lt;/span&gt;\n &lt;/button&gt;\n\n &lt;div class=\&#34;collapse navbar-collapse\&#34; id=\&#34;navbarText\&#34;&gt;\n &lt;ul class=\&#34;navbar-nav mr-auto\&#34;&gt;\n &lt;li class=\&#34;nav-item{{ if eq URL \&#34;/dashboard\&#34; }} active{{ end }}\&#34;&gt;\n &lt;a class=\&#34;nav-link\&#34; href=\&#34;/dashboard\&#34;&gt;Dashboard&lt;/a&gt;\n &lt;/li&gt;\n &lt;li class=\&#34;nav-item{{ if eq URL \&#34;/services\&#34; }} active{{ end }}\&#34;&gt;\n &lt;a class=\&#34;nav-link\&#34; href=\&#34;/services\&#34;&gt;Services&lt;/a&gt;\n &lt;/li&gt;\n &lt;li class=\&#34;nav-item{{ if eq URL \&#34;/users\&#34; }} active{{ end }}\&#34;&gt;\n &lt;a class=\&#34;nav-link\&#34; href=\&#34;/users\&#34;&gt;Users&lt;/a&gt;\n &lt;/li&gt;\n &lt;li class=\&#34;nav-item{{ if eq URL \&#34;/settings\&#34; }} active{{ end }}\&#34;&gt;\n &lt;a class=\&#34;nav-link\&#34; href=\&#34;/settings\&#34;&gt;Settings&lt;/a&gt;\n &lt;/li&gt;\n &lt;li class=\&#34;nav-item{{ if eq URL \&#34;/logs\&#34; }} active{{ end }}\&#34;&gt;\n &lt;a class=\&#34;nav-link\&#34; href=\&#34;/logs\&#34;&gt;Logs&lt;/a&gt;\n &lt;/li&gt;\n &lt;li class=\&#34;nav-item{{ if eq URL \&#34;/help\&#34; }} active{{ end }}\&#34;&gt;\n &lt;a class=\&#34;nav-link\&#34; href=\&#34;/help\&#34;&gt;Help&lt;/a&gt;\n &lt;/li&gt;\n &lt;/ul&gt;\n &lt;span class=\&#34;navbar-text\&#34;&gt;\n &lt;a class=\&#34;nav-link\&#34; href=\&#34;/logout\&#34;&gt;Logout&lt;/a&gt;\n &lt;/span&gt;\n &lt;/div&gt;\n&lt;/nav&gt;\n{{end}}&#34;),</pre></code></td></tr><tr><td>237</td><td><code><pre> }</pre></code></td></tr><tr><td>238</td><td><code><pre> filex := &amp;embedded.EmbeddedFile{</pre></code></td></tr><tr><td>239</td><td><code><pre> Filename: &#34;robots.txt&#34;,</pre></code></td></tr><tr><td>240</td><td><code><pre> FileModTime: time.Unix(1530546686, 0),</pre></code></td></tr><tr><td>241</td><td><code><pre> Content: string(&#34;User-agent: *\nDisallow: /login\nDisallow: /dashboard&#34;),</pre></code></td></tr><tr><td>242</td><td><code><pre> }</pre></code></td></tr><tr><td>243</td><td><code><pre> filey := &amp;embedded.EmbeddedFile{</pre></code></td></tr><tr><td>244</td><td><code><pre> Filename: &#34;scripts.html&#34;,</pre></code></td></tr><tr><td>245</td><td><code><pre> FileModTime: time.Unix(1538453657, 0),</pre></code></td></tr><tr><td>246</td><td><code><pre> Content: string(&#34;{{define \&#34;scripts\&#34;}}\n{{if USE_CDN}}\n&lt;script src=\&#34;https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js\&#34;&gt;&lt;/script&gt;\n&lt;script src=\&#34;https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js\&#34; integrity=\&#34;sha384-smHYKdLADwkXOn1EmN1qk/HfnUcbVRZyYmZ4qpPea6sjB/pTJ0euyQp0Mk8ck+5T\&#34; crossorigin=\&#34;anonymous\&#34;&gt;&lt;/script&gt;\n&lt;script src=\&#34;https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.2/Chart.bundle.min.js\&#34;&gt;&lt;/script&gt;\n&lt;script src=\&#34;https://assets.statup.io/main.js\&#34;&gt;&lt;/script&gt;\n{{ else }}\n&lt;script src=\&#34;/js/jquery-3.3.1.min.js\&#34;&gt;&lt;/script&gt;\n&lt;script src=\&#34;/js/bootstrap.min.js\&#34;&gt;&lt;/script&gt;\n&lt;script src=\&#34;/js/Chart.bundle.min.js\&#34;&gt;&lt;/script&gt;\n&lt;script src=\&#34;/js/main.js\&#34;&gt;&lt;/script&gt;\n{{end}}\n{{block \&#34;extra_scripts\&#34; .}} {{end}}\n{{end}}\n&#34;),</pre></code></td></tr><tr><td>247</td><td><code><pre> }</pre></code></td></tr><tr><td>248</td><td><code><pre> filez := &amp;embedded.EmbeddedFile{</pre></code></td></tr><tr><td>249</td><td><code><pre> Filename: &#34;service.html&#34;,</pre></code></td></tr><tr><td>250</td><td><code><pre> FileModTime: time.Unix(1539361671, 0),</pre></code></td></tr><tr><td>251</td><td><code><pre> Content: string(&#34;{{define \&#34;title\&#34;}}{{.Service.Name}} Status{{end}}\n{{ define \&#34;content\&#34; }}\n{{$s := .Service}}\n\n&lt;div class=\&#34;container col-md-7 col-sm-12 mt-md-5 bg-light\&#34;&gt;\n\n{{if Auth}}\n {{template \&#34;nav\&#34;}}\n{{end}}\n\n &lt;div class=\&#34;col-12 mb-4\&#34;&gt;\n\n {{if $s.Online }}\n &lt;span class=\&#34;mt-3 mb-3 text-white d-md-none btn bg-success d-block d-md-none\&#34;&gt;ONLINE&lt;/span&gt;\n {{ else }}\n &lt;span class=\&#34;mt-3 mb-3 text-white d-md-none btn bg-danger d-block d-md-none\&#34;&gt;OFFLINE&lt;/span&gt;\n {{end}}\n\n &lt;h4 class=\&#34;mt-2\&#34;&gt;{{ $s.Name }}\n {{if $s.Online }}\n &lt;span class=\&#34;badge bg-success float-right d-none d-md-block\&#34;&gt;ONLINE&lt;/span&gt;\n {{ else }}\n &lt;span class=\&#34;badge bg-danger float-right d-none d-md-block\&#34;&gt;OFFLINE&lt;/span&gt;\n {{end}}&lt;/h4&gt;\n\n &lt;div class=\&#34;row stats_area mt-5 mb-5\&#34;&gt;\n\n &lt;div class=\&#34;col-4\&#34;&gt;\n &lt;span class=\&#34;lg_number\&#34;&gt;{{$s.Online24}}%&lt;/span&gt;\n Online last 24 Hours\n &lt;/div&gt;\n\n &lt;div class=\&#34;col-4\&#34;&gt;\n &lt;span class=\&#34;lg_number\&#34;&gt;{{$s.AvgTime}}ms&lt;/span&gt;\n Average Response\n &lt;/div&gt;\n\n &lt;div class=\&#34;col-4\&#34;&gt;\n &lt;span class=\&#34;lg_number\&#34;&gt;{{$s.TotalUptime}}%&lt;/span&gt;\n Total Uptime\n &lt;/div&gt;\n &lt;/div&gt;\n\n &lt;div class=\&#34;service-chart-container\&#34;&gt;\n &lt;canvas id=\&#34;service\&#34;&gt;&lt;/canvas&gt;\n &lt;/div&gt;\n\n &lt;form id=\&#34;service_date_form\&#34; class=\&#34;col-12 mt-2 mb-3\&#34;&gt;\n &lt;span id=\&#34;start_date\&#34; class=\&#34;text-muted small float-left pointer\&#34;&gt;{{FromUnix .Start}}&lt;/span&gt;\n &lt;span id=\&#34;end_date\&#34; class=\&#34;text-muted small float-right pointer\&#34; style=\&#34;position: absolute;right: 0;\&#34;&gt;{{FromUnix .End}}&lt;/span&gt;\n &lt;input type=\&#34;hidden\&#34; name=\&#34;start\&#34; class=\&#34;form-control\&#34; id=\&#34;service_start\&#34; spellcheck=\&#34;false\&#34;&gt;\n &lt;input type=\&#34;hidden\&#34; name=\&#34;end\&#34; class=\&#34;form-control\&#34; id=\&#34;service_end\&#34; spellcheck=\&#34;false\&#34;&gt;\n &lt;button type=\&#34;submit\&#34; class=\&#34;btn btn-light btn-block btn-sm mt-2\&#34;&gt;Set Timeframe&lt;/button&gt;\n &lt;div id=\&#34;start_container\&#34;&gt;&lt;/div&gt;\n &lt;div id=\&#34;end_container\&#34;&gt;&lt;/div&gt;\n &lt;/form&gt;\n\n {{if not $s.Online}}\n &lt;div class=\&#34;col-12 small text-center mt-3 text-muted\&#34;&gt;{{$s.DowntimeText}}&lt;/div&gt;\n {{end}}\n\n {{ if $s.LimitedFailures }}\n &lt;div class=\&#34;list-group mt-3 mb-4\&#34;&gt;\n {{ range $s.LimitedFailures }}\n &lt;a href=\&#34;#\&#34; class=\&#34;list-group-item list-group-item-action flex-column align-items-start\&#34;&gt;\n &lt;div class=\&#34;d-flex w-100 justify-content-between\&#34;&gt;\n &lt;h5 class=\&#34;mb-1\&#34;&gt;{{.ParseError}}&lt;/h5&gt;\n &lt;small&gt;{{.Ago}}&lt;/small&gt;\n &lt;/div&gt;\n &lt;p class=\&#34;mb-1\&#34;&gt;{{.Issue}}&lt;/p&gt;\n &lt;/a&gt;\n {{ end }}\n &lt;/div&gt;\n {{ end }}\n\n &lt;/div&gt;\n\n{{if Auth}}\n\n &lt;div class=\&#34;col-12 mt-4{{if ne $s.Type \&#34;http\&#34;}} d-none{{end}}\&#34;&gt;\n &lt;h3&gt;Last Response&lt;/h3&gt;\n &lt;textarea rows=\&#34;8\&#34; class=\&#34;form-control\&#34; readonly&gt;{{ $s.LastResponse }}&lt;/textarea&gt;\n &lt;div class=\&#34;form-group row mt-2\&#34;&gt;\n &lt;label for=\&#34;last_status_code\&#34; class=\&#34;col-sm-3 col-form-label\&#34;&gt;HTTP Status Code&lt;/label&gt;\n &lt;div class=\&#34;col-sm-2\&#34;&gt;\n &lt;input type=\&#34;text\&#34; id=\&#34;last_status_code\&#34; class=\&#34;form-control\&#34; value=\&#34;{{ $s.LastStatusCode }}\&#34; readonly&gt;\n &lt;/div&gt;\n &lt;/div&gt;\n &lt;/div&gt;\n\n &lt;div class=\&#34;col-12 mt-4\&#34;&gt;\n &lt;h3&gt;Edit Service&lt;/h3&gt;\n {{template \&#34;form_service\&#34; $s}}\n &lt;/div&gt;\n\n &lt;div class=\&#34;col-12 mt-4\&#34;&gt;\n &lt;h3&gt;Service Checkin&lt;/h3&gt;\n {{if $s.LimitedCheckins}}\n &lt;table class=\&#34;table\&#34;&gt;\n &lt;thead&gt;\n &lt;tr&gt;\n &lt;th scope=\&#34;col\&#34;&gt;Checkin&lt;/th&gt;\n &lt;th scope=\&#34;col\&#34;&gt;Report Period&lt;br&gt;Grace Period&lt;/th&gt;\n &lt;th scope=\&#34;col\&#34;&gt;Last Seen&lt;/th&gt;\n &lt;th scope=\&#34;col\&#34;&gt;Expected&lt;/th&gt;\n &lt;th scope=\&#34;col\&#34;&gt;&lt;/th&gt;\n &lt;/tr&gt;\n &lt;/thead&gt;\n &lt;tbody&gt;\n {{range $s.LimitedCheckins}}\n {{ $ch := . }}\n &lt;tr class=\&#34;{{ if lt $ch.Expected 0}}bg-warning text-black{{else}}bg-light{{end}}\&#34;&gt;\n &lt;td&gt;{{$ch.Name}}&lt;br&gt;&lt;a href=\&#34;{{$ch.Link}}\&#34; target=\&#34;_blank\&#34;&gt;{{$ch.Link}}&lt;/a&gt;&lt;/td&gt;\n &lt;td&gt;every {{Duration $ch.Period}}&lt;br&gt;after {{Duration $ch.Grace}}&lt;/td&gt;\n &lt;td&gt;{{ if $ch.Last.CreatedAt.IsZero}}\n Never\n {{else}}\n {{Ago $ch.Last.CreatedAt}}\n {{end}}\n &lt;/td&gt;\n &lt;td&gt;\n {{ if $ch.Last.CreatedAt.IsZero}}\n -\n {{else}}\n {{ if lt $ch.Expected 0}}{{Duration $ch.Expected}} ago{{else}}in {{Duration $ch.Expected}}{{end}}\n {{end}}\n &lt;/td&gt;\n &lt;td&gt;&lt;a href=\&#34;/checkin/{{$ch.Id}}/delete\&#34; class=\&#34;btn btn-sm btn-danger\&#34;&gt;Delete&lt;/a&gt;&lt;/td&gt;\n &lt;/tr&gt;\n {{end}}\n &lt;/tbody&gt;\n &lt;/table&gt;\n {{end}}\n {{template \&#34;form_checkin\&#34; $s}}\n &lt;/div&gt;\n\n{{end}}\n&lt;/div&gt;\n{{end}}\n{{define \&#34;extra_scripts\&#34;}}\n{{if USE_CDN}}\n&lt;script src=\&#34;https://assets.statup.io/pikaday.js\&#34;&gt;&lt;/script&gt;\n{{ else }}\n&lt;script src=\&#34;/js/pikaday.js\&#34;&gt;&lt;/script&gt;\n{{end}}\n{{$s := .Service}}\n&lt;script&gt;\n\n var ctx = document.getElementById(\&#34;service\&#34;).getContext(&#39;2d&#39;);\n\n var chartdata = new Chart(ctx, {\n type: &#39;line&#39;,\n data: {\n datasets: [{\n label: &#39;Response Time (Milliseconds)&#39;,\n data: [],\n backgroundColor: [\n &#39;rgba(47, 206, 30, 0.92)&#39;\n ],\n borderColor: [\n &#39;rgb(47, 171, 34)&#39;\n ],\n borderWidth: 1\n }]\n },\n options: {\n legend: {\n display: false\n },\n scales: {\n yAxes: [{\n ticks: {\n beginAtZero: true\n },\n gridLines: {\n display: true\n }\n }],\n xAxes: [{\n type: &#39;time&#39;,\n distribution: &#39;series&#39;,\n time: {\n displayFormats: {\n &#39;millisecond&#39;: &#39;MMM DD&#39;,\n &#39;second&#39;: &#39;MMM DD&#39;,\n &#39;minute&#39;: &#39;MMM DD&#39;,\n &#39;hour&#39;: &#39;MMM DD hA&#39;,\n &#39;day&#39;: &#39;MMM DD&#39;,\n &#39;week&#39;: &#39;MMM DD&#39;,\n &#39;month&#39;: &#39;MMM DD&#39;,\n &#39;quarter&#39;: &#39;MMM DD&#39;,\n &#39;year&#39;: &#39;MMM DD&#39;,\n }\n },\n gridLines: {\n display: true\n },\n ticks: {\n source: &#39;auto&#39;\n }\n }],\n },\n elements: {\n point: {\n radius: 0\n }\n }\n }\n });\n\n\n var startPick = new Pikaday({\n field: $(&#39;#service_start&#39;)[0],\n bound: false,\n trigger: $(\&#34;#start_date\&#34;),\n container: $(\&#34;#start_container\&#34;)[0],\n maxDate: new Date(),\n onSelect: function(date) {\n $(&#39;#service_start&#39;)[0].value = Math.round(date.getTime() / 1000);\n this.hide();\n }\n });\n\n var endPick = new Pikaday({\n field: $(&#39;#service_end&#39;)[0],\n bound: false,\n trigger: $(\&#34;#end_date\&#34;),\n container: $(\&#34;#end_container\&#34;)[0],\n maxDate: new Date(),\n onSelect: function(date) {\n $(&#39;#service_end&#39;)[0].value = Math.round(date.getTime() / 1000);\n this.hide();\n }\n });\n\n startPick.setDate(new Date({{.Start}}* 1000));\n endPick.setDate(new Date({{.End}}* 1000));\n startPick.hide();\n endPick.hide();\n\n $(\&#34;#start_date\&#34;).click(function(e) {\n startPick.show()\n });\n\n $(\&#34;#end_date\&#34;).click(function(e) {\n endPick.show()\n });\n\n AjaxChart(chartdata,{{$s.Id}},{{.Start}},{{.End}},\&#34;hour\&#34;);\n\n&lt;/script&gt;\n{{end}}\n&#34;),</pre></code></td></tr><tr><td>252</td><td><code><pre> }</pre></code></td></tr><tr><td>253</td><td><code><pre> file10 := &amp;embedded.EmbeddedFile{</pre></code></td></tr><tr><td>254</td><td><code><pre> Filename: &#34;services.html&#34;,</pre></code></td></tr><tr><td>255</td><td><code><pre> FileModTime: time.Unix(1538459465, 0),</pre></code></td></tr><tr><td>256</td><td><code><pre> Content: string(&#34;{{define \&#34;title\&#34;}}Statup | Services{{end}}\n{{define \&#34;content\&#34;}}\n&lt;div class=\&#34;container col-md-7 col-sm-12 mt-md-5 bg-light\&#34;&gt;\n{{template \&#34;nav\&#34;}}\n\n &lt;div class=\&#34;col-12\&#34;&gt;\n\n &lt;h3&gt;Services&lt;/h3&gt;\n\n &lt;table class=\&#34;table\&#34;&gt;\n &lt;thead&gt;\n &lt;tr&gt;\n &lt;th scope=\&#34;col\&#34;&gt;Name&lt;/th&gt;\n &lt;th scope=\&#34;col\&#34; class=\&#34;d-none d-md-table-cell\&#34;&gt;Status&lt;/th&gt;\n &lt;th scope=\&#34;col\&#34;&gt;&lt;/th&gt;\n &lt;/tr&gt;\n &lt;/thead&gt;\n &lt;tbody class=\&#34;sortable\&#34;&gt;\n {{range .}}\n &lt;tr id=\&#34;{{.Id}}\&#34;&gt;\n &lt;td&gt;&lt;span class=\&#34;drag_icon d-none d-md-inline\&#34;&gt;&amp;#9776;&lt;/span&gt; {{.Name}}&lt;/td&gt;\n &lt;td class=\&#34;d-none d-md-table-cell\&#34;&gt;{{if .Online}}&lt;span class=\&#34;badge badge-success\&#34;&gt;ONLINE&lt;/span&gt;{{else}}&lt;span class=\&#34;badge badge-danger\&#34;&gt;OFFLINE&lt;/span&gt;{{end}} &lt;/td&gt;\n &lt;td class=\&#34;text-right\&#34;&gt;\n &lt;div class=\&#34;btn-group\&#34;&gt;\n &lt;a href=\&#34;/service/{{.Id}}\&#34; class=\&#34;btn btn-primary\&#34;&gt;View&lt;/a&gt;\n &lt;a href=\&#34;/service/{{.Id}}/delete\&#34; class=\&#34;btn btn-danger confirm-btn\&#34;&gt;Delete&lt;/a&gt;\n &lt;/div&gt;\n &lt;/td&gt;\n &lt;/tr&gt;\n {{end}}\n &lt;/tbody&gt;\n &lt;/table&gt;\n\n &lt;h3&gt;Create Service&lt;/h3&gt;\n\n {{template \&#34;form_service\&#34; NewService}}\n\n &lt;/div&gt;\n&lt;/div&gt;\n{{end}}\n{{define \&#34;extra_scripts\&#34;}}\n{{if USE_CDN}}\n&lt;script src=\&#34;https://assets.statup.io/sortable.min.js\&#34;&gt;&lt;/script&gt;\n{{ else }}\n&lt;script src=\&#34;/js/sortable.min.js\&#34;&gt;&lt;/script&gt;\n{{end}}\n&lt;script&gt;\n sortable(&#39;.sortable&#39;, {\n forcePlaceholderSize: true,\n hoverClass: &#39;sortable_drag&#39;,\n handle: &#39;.drag_icon&#39;\n });\n sortable(&#39;.sortable&#39;)[0].addEventListener(&#39;sortupdate&#39;, function(e) {\n var i = 0;\n var newOrder = [];\n var dest = e.detail.destination.items;\n dest.forEach(function(d) {\n i++;\n var o = {service: parseInt(d.id), order: i}\n newOrder.push(o);\n });\n $.post(\&#34;/services/reorder\&#34;, JSON.stringify(newOrder), function(data, status){\n });\n });\n&lt;/script&gt;\n{{end}}\n&#34;),</pre></code></td></tr><tr><td>257</td><td><code><pre> }</pre></code></td></tr><tr><td>258</td><td><code><pre> file11 := &amp;embedded.EmbeddedFile{</pre></code></td></tr><tr><td>259</td><td><code><pre> Filename: &#34;settings.html&#34;,</pre></code></td></tr><tr><td>260</td><td><code><pre> FileModTime: time.Unix(1538947359, 0),</pre></code></td></tr><tr><td>261</td><td><code><pre> Content: string(&#34;{{define \&#34;title\&#34;}}Statup | Settings{{end}}\n{{define \&#34;content\&#34;}}\n&lt;div class=\&#34;container col-md-7 col-sm-12 mt-md-5 bg-light\&#34;&gt;\n{{template \&#34;nav\&#34;}}\n &lt;div class=\&#34;col-12\&#34;&gt;\n &lt;div class=\&#34;row\&#34;&gt;\n &lt;div class=\&#34;col-md-3 col-sm-12 mb-4 mb-md-0\&#34;&gt;\n &lt;div class=\&#34;nav flex-column nav-pills\&#34; id=\&#34;v-pills-tab\&#34; role=\&#34;tablist\&#34; aria-orientation=\&#34;vertical\&#34;&gt;\n &lt;a class=\&#34;nav-link active\&#34; id=\&#34;v-pills-home-tab\&#34; data-toggle=\&#34;pill\&#34; href=\&#34;#v-pills-home\&#34; role=\&#34;tab\&#34; aria-controls=\&#34;v-pills-home\&#34; aria-selected=\&#34;true\&#34;&gt;Settings&lt;/a&gt;\n &lt;a class=\&#34;nav-link\&#34; id=\&#34;v-pills-style-tab\&#34; data-toggle=\&#34;pill\&#34; href=\&#34;#v-pills-style\&#34; role=\&#34;tab\&#34; aria-controls=\&#34;v-pills-style\&#34; aria-selected=\&#34;false\&#34;&gt;Theme Editor&lt;/a&gt;\n {{ range .Notifications }}\n &lt;a class=\&#34;nav-link text-capitalize\&#34; id=\&#34;v-pills-{{underscore .Select.Method}}-tab\&#34; data-toggle=\&#34;pill\&#34; href=\&#34;#v-pills-{{underscore .Select.Method}}\&#34; role=\&#34;tab\&#34; aria-controls=\&#34;v-pills-{{underscore .Select.Method}}\&#34; aria-selected=\&#34;false\&#34;&gt;{{.Select.Method}} &lt;span class=\&#34;badge badge-pill badge-secondary\&#34;&gt;&lt;/span&gt;&lt;/a&gt;\n {{ end }}\n &lt;a class=\&#34;nav-link\&#34; id=\&#34;v-pills-browse-tab\&#34; data-toggle=\&#34;pill\&#34; href=\&#34;#v-pills-browse\&#34; role=\&#34;tab\&#34; aria-controls=\&#34;v-pills-home\&#34; aria-selected=\&#34;false\&#34;&gt;Browse Plugins&lt;/a&gt;\n &lt;a class=\&#34;nav-link d-none\&#34; id=\&#34;v-pills-backups-tab\&#34; data-toggle=\&#34;pill\&#34; href=\&#34;#v-pills-backups\&#34; role=\&#34;tab\&#34; aria-controls=\&#34;v-pills-backups\&#34; aria-selected=\&#34;false\&#34;&gt;Backups&lt;/a&gt;\n {{ range .Plugins }}\n &lt;a class=\&#34;nav-link text-capitalize\&#34; id=\&#34;v-pills-{{underscore .Name}}-tab\&#34; data-toggle=\&#34;pill\&#34; href=\&#34;#v-pills-{{underscore .Name}}\&#34; role=\&#34;tab\&#34; aria-controls=\&#34;v-pills-profile\&#34; aria-selected=\&#34;false\&#34;&gt;{{.Name}}&lt;/a&gt;\n {{end}}\n &lt;/div&gt;\n &lt;/div&gt;\n &lt;div class=\&#34;col-md-8 col-sm-12\&#34;&gt;\n {{if Error}}\n &lt;div class=\&#34;alert alert-danger\&#34; role=\&#34;alert\&#34;&gt;{{Error}}&lt;/div&gt;\n {{end}}\n &lt;div class=\&#34;tab-content\&#34; id=\&#34;v-pills-tabContent\&#34;&gt;\n &lt;div class=\&#34;tab-pane fade show active\&#34; id=\&#34;v-pills-home\&#34; role=\&#34;tabpanel\&#34; aria-labelledby=\&#34;v-pills-home-tab\&#34;&gt;\n &lt;h3&gt;Settings&lt;/h3&gt;\n\n &lt;form method=\&#34;POST\&#34; action=\&#34;/settings\&#34;&gt;\n &lt;div class=\&#34;form-group\&#34;&gt;\n &lt;label for=\&#34;project\&#34;&gt;Project Name&lt;/label&gt;\n &lt;input type=\&#34;text\&#34; name=\&#34;project\&#34; class=\&#34;form-control\&#34; value=\&#34;{{ .Name }}\&#34; id=\&#34;project\&#34; placeholder=\&#34;Great Uptime\&#34;&gt;\n &lt;/div&gt;\n\n &lt;div class=\&#34;form-group\&#34;&gt;\n &lt;label for=\&#34;description\&#34;&gt;Project Description&lt;/label&gt;\n &lt;input type=\&#34;text\&#34; name=\&#34;description\&#34; class=\&#34;form-control\&#34; value=\&#34;{{ .Description }}\&#34; id=\&#34;description\&#34; placeholder=\&#34;Great Uptime\&#34;&gt;\n &lt;/div&gt;\n\n &lt;div class=\&#34;form-group row\&#34;&gt;\n &lt;div class=\&#34;col-8 col-sm-9\&#34;&gt;\n &lt;label for=\&#34;domain\&#34;&gt;Domain&lt;/label&gt;\n &lt;input type=\&#34;text\&#34; name=\&#34;domain\&#34; class=\&#34;form-control\&#34; value=\&#34;{{ .Domain }}\&#34; id=\&#34;domain\&#34;&gt;\n &lt;/div&gt;\n &lt;div class=\&#34;col-4 col-sm-3 mt-sm-1 mt-0\&#34;&gt;\n &lt;label for=\&#34;enable_cdn\&#34; class=\&#34;d-inline d-sm-none\&#34;&gt;Enable CDN&lt;/label&gt;\n &lt;label for=\&#34;enable_cdn\&#34; class=\&#34;d-none d-sm-block\&#34;&gt;Enable CDN&lt;/label&gt;\n &lt;span class=\&#34;switch\&#34;&gt;\n &lt;input type=\&#34;checkbox\&#34; name=\&#34;enable_cdn\&#34; class=\&#34;switch\&#34; id=\&#34;switch-normal\&#34; {{if USE_CDN}}checked{{end}}{{if .UsingAssets}} disabled{{end}}&gt;\n &lt;label for=\&#34;switch-normal\&#34; class=\&#34;mt-2 mt-sm-0\&#34;&gt;&lt;/label&gt;\n &lt;/span&gt;\n &lt;/div&gt;\n\n &lt;/div&gt;\n\n &lt;div class=\&#34;form-group\&#34;&gt;\n &lt;label for=\&#34;footer\&#34;&gt;Custom Footer&lt;/label&gt;\n &lt;textarea rows=\&#34;4\&#34; name=\&#34;footer\&#34; class=\&#34;form-control\&#34; id=\&#34;footer\&#34;&gt;{{ .Footer }}&lt;/textarea&gt;\n &lt;/div&gt;\n\n &lt;div class=\&#34;form-group\&#34;&gt;\n &lt;label for=\&#34;timezone\&#34;&gt;Timezone&lt;/label&gt;&lt;span class=\&#34;mt-1 small float-right\&#34;&gt;Current: {{.CurrentTime}}&lt;/span&gt;\n &lt;select class=\&#34;form-control\&#34; name=\&#34;timezone\&#34; id=\&#34;timezone\&#34;&gt;\n &lt;option value=\&#34;-12.0\&#34; {{if eq (ToString .Timezone) \&#34;-12\&#34;}}selected{{end}}&gt;(GMT -12:00) Eniwetok, Kwajalein&lt;/option&gt;\n &lt;option value=\&#34;-11.0\&#34; {{if eq (ToString .Timezone) \&#34;-11\&#34;}}selected{{end}}&gt;(GMT -11:00) Midway Island, Samoa&lt;/option&gt;\n &lt;option value=\&#34;-10.0\&#34; {{if eq (ToString .Timezone) \&#34;-10\&#34;}}selected{{end}}&gt;(GMT -10:00) Hawaii&lt;/option&gt;\n &lt;option value=\&#34;-9.0\&#34; {{if eq (ToString .Timezone) \&#34;-9\&#34;}}selected{{end}}&gt;(GMT -9:00) Alaska&lt;/option&gt;\n &lt;option value=\&#34;-8.0\&#34; {{if eq (ToString .Timezone) \&#34;-8\&#34;}}selected{{end}}&gt;(GMT -8:00) Pacific Time (US &amp;amp; Canada)&lt;/option&gt;\n &lt;option value=\&#34;-7.0\&#34; {{if eq (ToString .Timezone) \&#34;-7\&#34;}}selected{{end}}&gt;(GMT -7:00) Mountain Time (US &amp;amp; Canada)&lt;/option&gt;\n &lt;option value=\&#34;-6.0\&#34; {{if eq (ToString .Timezone) \&#34;-6\&#34;}}selected{{end}}&gt;(GMT -6:00) Central Time (US &amp;amp; Canada), Mexico City&lt;/option&gt;\n &lt;option value=\&#34;-5.0\&#34; {{if eq (ToString .Timezone) \&#34;-5\&#34;}}selected{{end}}&gt;(GMT -5:00) Eastern Time (US &amp;amp; Canada), Bogota, Lima&lt;/option&gt;\n &lt;option value=\&#34;-4.0\&#34; {{if eq (ToString .Timezone) \&#34;-4\&#34;}}selected{{end}}&gt;(GMT -4:00) Atlantic Time (Canada), Caracas, La Paz&lt;/option&gt;\n &lt;option value=\&#34;-3.5\&#34; {{if eq (ToString .Timezone) \&#34;-3.5\&#34;}}selected{{end}}&gt;(GMT -3:30) Newfoundland&lt;/option&gt;\n &lt;option value=\&#34;-3.0\&#34; {{if eq (ToString .Timezone) \&#34;-3\&#34;}}selected{{end}}&gt;(GMT -3:00) Brazil, Buenos Aires, Georgetown&lt;/option&gt;\n &lt;option value=\&#34;-2.0\&#34; {{if eq (ToString .Timezone) \&#34;-2\&#34;}}selected{{end}}&gt;(GMT -2:00) Mid-Atlantic&lt;/option&gt;\n &lt;option value=\&#34;-1.0\&#34; {{if eq (ToString .Timezone) \&#34;-1\&#34;}}selected{{end}}&gt;(GMT -1:00 hour) Azores, Cape Verde Islands&lt;/option&gt;\n &lt;option value=\&#34;0.0\&#34; {{if eq (ToString .Timezone) \&#34;0\&#34;}}selected{{end}}&gt;(GMT) Western Europe Time, London, Lisbon, Casablanca&lt;/option&gt;\n &lt;option value=\&#34;1.0\&#34; {{if eq (ToString .Timezone) \&#34;1\&#34;}}selected{{end}}&gt;(GMT +1:00 hour) Brussels, Copenhagen, Madrid, Paris&lt;/option&gt;\n &lt;option value=\&#34;2.0\&#34; {{if eq (ToString .Timezone) \&#34;2\&#34;}}selected{{end}}&gt;(GMT +2:00) Kaliningrad, South Africa&lt;/option&gt;\n &lt;option value=\&#34;3.0\&#34; {{if eq (ToString .Timezone) \&#34;3\&#34;}}selected{{end}}&gt;(GMT +3:00) Baghdad, Riyadh, Moscow, St. Petersburg&lt;/option&gt;\n &lt;option value=\&#34;3.5\&#34; {{if eq (ToString .Timezone) \&#34;3.5\&#34;}}selected{{end}}&gt;(GMT +3:30) Tehran&lt;/option&gt;\n &lt;option value=\&#34;4.0\&#34; {{if eq (ToString .Timezone) \&#34;4\&#34;}}selected{{end}}&gt;(GMT +4:00) Abu Dhabi, Muscat, Baku, Tbilisi&lt;/option&gt;\n &lt;option value=\&#34;4.5\&#34; {{if eq (ToString .Timezone) \&#34;4.5\&#34;}}selected{{end}}&gt;(GMT +4:30) Kabul&lt;/option&gt;\n &lt;option value=\&#34;5.0\&#34; {{if eq (ToString .Timezone) \&#34;5\&#34;}}selected{{end}}&gt;(GMT +5:00) Ekaterinburg, Islamabad, Karachi, Tashkent&lt;/option&gt;\n &lt;option value=\&#34;5.5\&#34; {{if eq (ToString .Timezone) \&#34;5.5\&#34;}}selected{{end}}&gt;(GMT +5:30) Bombay, Calcutta, Madras, New Delhi&lt;/option&gt;\n &lt;option value=\&#34;5.75\&#34; {{if eq (ToString .Timezone) \&#34;5.75\&#34;}}selected{{end}}&gt;(GMT +5:45) Kathmandu&lt;/option&gt;\n &lt;option value=\&#34;6.0\&#34; {{if eq (ToString .Timezone) \&#34;6\&#34;}}selected{{end}}&gt;(GMT +6:00) Almaty, Dhaka, Colombo&lt;/option&gt;\n &lt;option value=\&#34;7.0\&#34; {{if eq (ToString .Timezone) \&#34;7\&#34;}}selected{{end}}&gt;(GMT +7:00) Bangkok, Hanoi, Jakarta&lt;/option&gt;\n &lt;option value=\&#34;8.0\&#34; {{if eq (ToString .Timezone) \&#34;8\&#34;}}selected{{end}}&gt;(GMT +8:00) Beijing, Perth, Singapore, Hong Kong&lt;/option&gt;\n &lt;option value=\&#34;9.0\&#34; {{if eq (ToString .Timezone) \&#34;9\&#34;}}selected{{end}}&gt;(GMT +9:00) Tokyo, Seoul, Osaka, Sapporo, Yakutsk&lt;/option&gt;\n &lt;option value=\&#34;9.5\&#34; {{if eq (ToString .Timezone) \&#34;9.5\&#34;}}selected{{end}}&gt;(GMT +9:30) Adelaide, Darwin&lt;/option&gt;\n &lt;option value=\&#34;10.0\&#34; {{if eq (ToString .Timezone) \&#34;10.5\&#34;}}selected{{end}}&gt;(GMT +10:00) Eastern Australia, Guam, Vladivostok&lt;/option&gt;\n &lt;option value=\&#34;11.0\&#34; {{if eq (ToString .Timezone) \&#34;11\&#34;}}selected{{end}}&gt;(GMT +11:00) Magadan, Solomon Islands, New Caledonia&lt;/option&gt;\n &lt;option value=\&#34;12.0\&#34; {{if eq (ToString .Timezone) \&#34;12\&#34;}}selected{{end}}&gt;(GMT +12:00) Auckland, Wellington, Fiji, Kamchatka&lt;/option&gt;\n &lt;/select&gt;\n &lt;/div&gt;\n\n &lt;button type=\&#34;submit\&#34; class=\&#34;btn btn-primary btn-block\&#34;&gt;Save Settings&lt;/button&gt;\n\n &lt;div class=\&#34;form-group row mt-3\&#34;&gt;\n &lt;label for=\&#34;api_key\&#34; class=\&#34;col-sm-3 col-form-label\&#34;&gt;API Key&lt;/label&gt;\n &lt;div class=\&#34;col-sm-9\&#34;&gt;\n &lt;input type=\&#34;text\&#34; class=\&#34;form-control select-input\&#34; value=\&#34;{{ .ApiKey }}\&#34; id=\&#34;api_key\&#34; readonly&gt;\n &lt;/div&gt;\n &lt;/div&gt;\n\n &lt;div class=\&#34;form-group row\&#34;&gt;\n &lt;label for=\&#34;api_secret\&#34; class=\&#34;col-sm-3 col-form-label\&#34;&gt;API Secret&lt;/label&gt;\n &lt;div class=\&#34;col-sm-9\&#34;&gt;\n &lt;input type=\&#34;text\&#34; class=\&#34;form-control select-input\&#34; value=\&#34;{{ .ApiSecret }}\&#34; id=\&#34;api_secret\&#34; readonly&gt;\n &lt;small class=\&#34;form-text text-muted\&#34;&gt;You can &lt;a href=\&#34;/api/renew\&#34;&gt;Regenerate API Keys&lt;/a&gt; if you need to.&lt;/small&gt;\n &lt;/div&gt;\n &lt;/div&gt;\n\n &lt;div class=\&#34;row\&#34;&gt;\n &lt;a href=\&#34;/settings/export\&#34; class=\&#34;btn btn-sm btn-secondary float-right\&#34;&gt;Export Settings&lt;/a&gt;\n &lt;/div&gt;\n\n &lt;/form&gt;\n\n &lt;/div&gt;\n\n &lt;div class=\&#34;tab-pane\&#34; id=\&#34;v-pills-style\&#34; role=\&#34;tabpanel\&#34; aria-labelledby=\&#34;v-pills-style-tab\&#34;&gt;\n\n {{if not .UsingAssets }}\n &lt;a href=\&#34;/settings/build\&#34; class=\&#34;btn btn-primary btn-block\&#34;{{if USE_CDN}} disabled{{end}}&gt;Enable Local Assets&lt;/a&gt;\n {{ else }}\n &lt;form method=\&#34;POST\&#34; action=\&#34;/settings/css\&#34;&gt;\n &lt;ul class=\&#34;nav nav-pills mb-3\&#34; id=\&#34;pills-tab\&#34; role=\&#34;tablist\&#34;&gt;\n &lt;li class=\&#34;nav-item col text-center\&#34;&gt;\n &lt;a class=\&#34;nav-link active\&#34; id=\&#34;pills-vars-tab\&#34; data-toggle=\&#34;pill\&#34; href=\&#34;#pills-vars\&#34; role=\&#34;tab\&#34; aria-controls=\&#34;pills-vars\&#34; aria-selected=\&#34;true\&#34;&gt;Variables&lt;/a&gt;\n &lt;/li&gt;\n &lt;li class=\&#34;nav-item col text-center\&#34;&gt;\n &lt;a class=\&#34;nav-link\&#34; id=\&#34;pills-theme-tab\&#34; data-toggle=\&#34;pill\&#34; href=\&#34;#pills-theme\&#34; role=\&#34;tab\&#34; aria-controls=\&#34;pills-theme\&#34; aria-selected=\&#34;false\&#34;&gt;Base Theme&lt;/a&gt;\n &lt;/li&gt;\n &lt;li class=\&#34;nav-item col text-center\&#34;&gt;\n &lt;a class=\&#34;nav-link\&#34; id=\&#34;pills-mobile-tab\&#34; data-toggle=\&#34;pill\&#34; href=\&#34;#pills-mobile\&#34; role=\&#34;tab\&#34; aria-controls=\&#34;pills-mobile\&#34; aria-selected=\&#34;false\&#34;&gt;Mobile&lt;/a&gt;\n &lt;/li&gt;\n &lt;/ul&gt;\n &lt;div class=\&#34;tab-content\&#34; id=\&#34;pills-tabContent\&#34;&gt;\n &lt;div class=\&#34;tab-pane show active\&#34; id=\&#34;pills-vars\&#34; role=\&#34;tabpanel\&#34; aria-labelledby=\&#34;pills-vars-tab\&#34;&gt;\n &lt;textarea name=\&#34;variables\&#34; id=\&#34;sass_vars\&#34;&gt;{{ .SassVars }}&lt;/textarea&gt;\n &lt;/div&gt;\n &lt;div class=\&#34;tab-pane\&#34; id=\&#34;pills-theme\&#34; role=\&#34;tabpanel\&#34; aria-labelledby=\&#34;pills-theme-tab\&#34;&gt;\n &lt;textarea name=\&#34;theme\&#34; id=\&#34;theme_css\&#34;&gt;{{ .BaseSASS }}&lt;/textarea&gt;\n &lt;/div&gt;\n &lt;div class=\&#34;tab-pane\&#34; id=\&#34;pills-mobile\&#34; role=\&#34;tabpanel\&#34; aria-labelledby=\&#34;pills-mobile-tab\&#34;&gt;\n &lt;textarea name=\&#34;mobile\&#34; id=\&#34;mobile_css\&#34;&gt;{{ .MobileSASS }}&lt;/textarea&gt;\n &lt;/div&gt;\n &lt;/div&gt;\n &lt;button type=\&#34;submit\&#34; class=\&#34;btn btn-primary btn-block mt-2\&#34;&gt;Save Style&lt;/button&gt;\n &lt;a href=\&#34;/settings/delete_assets\&#34; class=\&#34;btn btn-danger btn-block confirm-btn\&#34;&gt;Delete All Assets&lt;/a&gt;\n &lt;/form&gt;\n {{end}}\n &lt;/div&gt;\n\n {{ range .Notifications }}\n {{$n := .Select}}\n &lt;div class=\&#34;tab-pane\&#34; id=\&#34;v-pills-{{underscore $n.Method}}\&#34; role=\&#34;tabpanel\&#34; aria-labelledby=\&#34;v-pills-{{underscore $n.Method }}-tab\&#34;&gt;\n\n {{template \&#34;form_notifier\&#34; .}}\n\n {{ if $n.Logs }}\n Sent {{$n.SentLastHour}} in the last hour&lt;br&gt;\n {{ range $n.Logs }}\n &lt;div class=\&#34;card mt-1\&#34;&gt;\n &lt;div class=\&#34;card-body\&#34;&gt;\n {{.Message}}\n &lt;p class=\&#34;card-text\&#34;&gt;&lt;small class=\&#34;text-muted\&#34;&gt;Sent {{.Time.Ago}}&lt;/small&gt;&lt;/p&gt;\n &lt;/div&gt;\n &lt;/div&gt;\n {{ end }}\n {{ end }}\n &lt;/div&gt;\n {{ end }}\n\n &lt;div class=\&#34;tab-pane fade\&#34; id=\&#34;v-pills-browse\&#34; role=\&#34;tabpanel\&#34; aria-labelledby=\&#34;v-pills-browse-tab\&#34;&gt;\n {{ range .Repos }}\n &lt;div class=\&#34;card col-6\&#34; style=\&#34;width: 18rem;\&#34;&gt;\n &lt;div class=\&#34;card-body\&#34;&gt;\n &lt;h5 class=\&#34;card-title\&#34;&gt;{{ .Name }}&lt;/h5&gt;\n &lt;p class=\&#34;card-text\&#34;&gt;{{ .Description }}&lt;/p&gt;\n &lt;a href=\&#34;/plugins/download/{{ .Name }}\&#34; class=\&#34;card-link\&#34;&gt;Add&lt;/a&gt;\n &lt;/div&gt;\n &lt;/div&gt;\n {{ end }}\n &lt;/div&gt;\n\n\n &lt;div class=\&#34;tab-pane fade\&#34; id=\&#34;v-pills-backups\&#34; role=\&#34;tabpanel\&#34; aria-labelledby=\&#34;v-pills-backups-tab\&#34;&gt;\n &lt;a href=\&#34;/backups/create\&#34; class=\&#34;btn btn-primary btn-block\&#34;&gt;Backup Database&lt;/a&gt;\n &lt;/div&gt;\n\n {{ range .Plugins }}\n\n &lt;div class=\&#34;tab-pane fade\&#34; id=\&#34;v-pills-{{underscore .Name}}\&#34; role=\&#34;tabpanel\&#34; aria-labelledby=\&#34;v-pills-{{underscore .Name}}-tab\&#34;&gt;\n\n &lt;h4 class=\&#34;text-capitalize\&#34;&gt;{{ .Name }}&lt;/h4&gt;\n &lt;span class=\&#34;text-muted\&#34;&gt;{{ .Description }}&lt;/span&gt;\n\n &lt;div class=\&#34;mt-1\&#34;&gt;\n {{ safe .Form }}\n &lt;/div&gt;\n\n &lt;/div&gt;\n {{end}}\n\n &lt;/div&gt;\n &lt;/div&gt;\n\n &lt;/div&gt;\n &lt;/div&gt;\n&lt;/div&gt;\n{{end}}\n{{define \&#34;extra_css\&#34;}}\n&lt;link rel=\&#34;stylesheet\&#34; href=\&#34;https://assets.statup.io/codemirror.css\&#34;&gt;\n&lt;link rel=\&#34;stylesheet\&#34; href=\&#34;https://assets.statup.io/codemirror-colorpicker.css\&#34;/&gt;\n{{end}}\n{{define \&#34;extra_scripts\&#34;}}\n&lt;script src=\&#34;https://assets.statup.io/codemirror.js\&#34;&gt;&lt;/script&gt;\n&lt;script src=\&#34;https://assets.statup.io/css.js\&#34;&gt;&lt;/script&gt;\n&lt;script src=\&#34;https://assets.statup.io/codemirror-colorpicker.min.js\&#34;&gt;&lt;/script&gt;\n{{end}}\n&#34;),</pre></code></td></tr><tr><td>262</td><td><code><pre> }</pre></code></td></tr><tr><td>263</td><td><code><pre> file12 := &amp;embedded.EmbeddedFile{</pre></code></td></tr><tr><td>264</td><td><code><pre> Filename: &#34;setup.html&#34;,</pre></code></td></tr><tr><td>265</td><td><code><pre> FileModTime: time.Unix(1538459628, 0),</pre></code></td></tr><tr><td>266</td><td><code><pre> Content: string(&#34;{{define \&#34;title\&#34;}}Statup | Setup{{end}}\n{{define \&#34;content\&#34;}}\n&lt;div class=\&#34;container col-md-7 col-sm-12 mt-md-5 bg-light\&#34;&gt;\n &lt;div class=\&#34;col-4 offset-4 mt-2 mb-5\&#34;&gt;&lt;img width=\&#34;100%\&#34; src=\&#34;/statup.png\&#34;&gt;&lt;/div&gt;\n &lt;div class=\&#34;col-12\&#34;&gt;\n {{ if .Error }}\n &lt;div class=\&#34;alert alert-danger\&#34; role=\&#34;alert\&#34;&gt;\n {{ .Error }}\n &lt;/div&gt;\n {{ end }}\n &lt;form method=\&#34;POST\&#34; id=\&#34;setup_form\&#34; action=\&#34;/setup\&#34;&gt;\n &lt;div class=\&#34;row\&#34;&gt;\n &lt;div class=\&#34;col-6\&#34;&gt;\n &lt;div class=\&#34;form-group\&#34;&gt;\n &lt;label for=\&#34;inputState\&#34;&gt;Database Connection&lt;/label&gt;\n &lt;select id=\&#34;database_type\&#34; name=\&#34;db_connection\&#34; class=\&#34;form-control\&#34;&gt;\n &lt;option selected value=\&#34;postgres\&#34;&gt;Postgres&lt;/option&gt;\n &lt;option value=\&#34;sqlite\&#34;&gt;Sqlite&lt;/option&gt;\n &lt;option value=\&#34;mysql\&#34;&gt;MySQL&lt;/option&gt;\n &lt;/select&gt;\n &lt;/div&gt;\n &lt;div class=\&#34;form-group\&#34; id=\&#34;db_host\&#34;&gt;\n &lt;label for=\&#34;db_host_in\&#34;&gt;Host&lt;/label&gt;\n &lt;input type=\&#34;text\&#34; name=\&#34;db_host\&#34; id=\&#34;db_host_in\&#34; class=\&#34;form-control\&#34; value=\&#34;{{.DbHost}}\&#34; placeholder=\&#34;localhost\&#34;&gt;\n &lt;/div&gt;\n &lt;div class=\&#34;form-group\&#34; id=\&#34;db_port\&#34;&gt;\n &lt;label for=\&#34;db_port_in\&#34;&gt;Database Port&lt;/label&gt;\n &lt;input type=\&#34;text\&#34; name=\&#34;db_port\&#34; id=\&#34;db_port_in\&#34; class=\&#34;form-control\&#34; value=\&#34;{{.DbPort}}\&#34; placeholder=\&#34;localhost\&#34;&gt;\n &lt;/div&gt;\n &lt;div class=\&#34;form-group\&#34; id=\&#34;db_user\&#34;&gt;\n &lt;label for=\&#34;db_user_in\&#34;&gt;Username&lt;/label&gt;\n &lt;input type=\&#34;text\&#34; name=\&#34;db_user\&#34; id=\&#34;db_user_in\&#34; class=\&#34;form-control\&#34; value=\&#34;{{.DbUser}}\&#34; placeholder=\&#34;root\&#34;&gt;\n &lt;/div&gt;\n &lt;div class=\&#34;form-group\&#34; id=\&#34;db_password\&#34;&gt;\n &lt;label for=\&#34;db_password\&#34;&gt;Password&lt;/label&gt;\n &lt;input type=\&#34;password\&#34; name=\&#34;db_password\&#34; class=\&#34;form-control\&#34; value=\&#34;{{.DbPass}}\&#34; id=\&#34;db_password\&#34; placeholder=\&#34;password123\&#34;&gt;\n &lt;/div&gt;\n &lt;div class=\&#34;form-group\&#34; id=\&#34;db_database\&#34;&gt;\n &lt;label for=\&#34;db_database\&#34;&gt;Database&lt;/label&gt;\n &lt;input type=\&#34;text\&#34; name=\&#34;db_database\&#34; class=\&#34;form-control\&#34; value=\&#34;{{.DbData}}\&#34; id=\&#34;db_database\&#34; placeholder=\&#34;Database name\&#34;&gt;\n &lt;/div&gt;\n\n &lt;/div&gt;\n\n &lt;div class=\&#34;col-6\&#34;&gt;\n\n &lt;div class=\&#34;form-group\&#34;&gt;\n &lt;label for=\&#34;project\&#34;&gt;Project Name&lt;/label&gt;\n &lt;input type=\&#34;text\&#34; name=\&#34;project\&#34; class=\&#34;form-control\&#34; value=\&#34;{{.Project}}\&#34; id=\&#34;project\&#34; placeholder=\&#34;Great Uptime\&#34; required&gt;\n &lt;/div&gt;\n\n &lt;div class=\&#34;form-group\&#34;&gt;\n &lt;label for=\&#34;description\&#34;&gt;Project Description&lt;/label&gt;\n &lt;input type=\&#34;text\&#34; name=\&#34;description\&#34; class=\&#34;form-control\&#34; value=\&#34;{{.Description}}\&#34; id=\&#34;description\&#34; placeholder=\&#34;Great Uptime\&#34;&gt;\n &lt;/div&gt;\n\n &lt;div class=\&#34;form-group\&#34;&gt;\n &lt;label for=\&#34;domain_input\&#34;&gt;Domain URL&lt;/label&gt;\n &lt;input type=\&#34;text\&#34; name=\&#34;domain\&#34; class=\&#34;form-control\&#34; value=\&#34;{{.Domain}}\&#34; id=\&#34;domain_input\&#34; required&gt;\n &lt;/div&gt;\n\n &lt;div class=\&#34;form-group\&#34;&gt;\n &lt;label for=\&#34;username\&#34;&gt;Admin Username&lt;/label&gt;\n &lt;input type=\&#34;text\&#34; name=\&#34;username\&#34; class=\&#34;form-control\&#34; value=\&#34;{{.Username}}\&#34; id=\&#34;username\&#34; value=\&#34;admin\&#34; placeholder=\&#34;admin\&#34; required&gt;\n &lt;/div&gt;\n\n &lt;div class=\&#34;form-group\&#34;&gt;\n &lt;label for=\&#34;email\&#34;&gt;Admin Email Address&lt;/label&gt;\n &lt;input type=\&#34;email\&#34; name=\&#34;email\&#34; class=\&#34;form-control\&#34; value=\&#34;{{.Email}}\&#34; id=\&#34;email\&#34; placeholder=\&#34;info@admin.com\&#34; required&gt;\n &lt;/div&gt;\n\n &lt;div class=\&#34;form-group\&#34;&gt;\n &lt;label for=\&#34;password\&#34;&gt;Admin Password&lt;/label&gt;\n &lt;input type=\&#34;password\&#34; name=\&#34;password\&#34; class=\&#34;form-control\&#34; value=\&#34;{{.Password}}\&#34; id=\&#34;password\&#34; placeholder=\&#34;password\&#34; required&gt;\n &lt;/div&gt;\n\n &lt;div class=\&#34;form-group\&#34;&gt;\n &lt;span class=\&#34;switch\&#34;&gt;\n &lt;input type=\&#34;checkbox\&#34; name=\&#34;sample_data\&#34; class=\&#34;switch\&#34; id=\&#34;switch-normal\&#34; checked&gt;\n &lt;label for=\&#34;switch-normal\&#34;&gt;Load Sample Data&lt;/label&gt;\n &lt;/span&gt;\n &lt;/div&gt;\n\n &lt;/div&gt;\n &lt;button id=\&#34;setup_button\&#34; type=\&#34;submit\&#34; class=\&#34;btn btn-primary btn-block disable_click\&#34;&gt;Save Settings&lt;/button&gt;\n &lt;/div&gt;\n &lt;/form&gt;\n &lt;/div&gt;\n&lt;/div&gt;\n{{end}}\n{{define \&#34;extra_scripts\&#34;}}\n&lt;script src=\&#34;/js/setup.js\&#34;&gt;&lt;/script&gt;\n{{end}}\n&#34;),</pre></code></td></tr><tr><td>267</td><td><code><pre> }</pre></code></td></tr><tr><td>268</td><td><code><pre> file13 := &amp;embedded.EmbeddedFile{</pre></code></td></tr><tr><td>269</td><td><code><pre> Filename: &#34;statup.png&#34;,</pre></code></td></tr><tr><td>270</td><td><code><pre> FileModTime: time.Unix(1533786305, 0),</pre></code></td></tr><tr><td>271</td><td><code><pre> Content: string(&#34;\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x01\x90\x00\x00\x00|\b\x06\x00\x00\x00GN\xe6\x81\x00\x00\x01\x83iCCPsRGB IEC61966-2.1\x00\x00(\x91u\x91\xcf+\xc3a\x1c\xc7_\xdb\xc80MqppX\x1a\x17\x9bfjqQ&amp;\xa1\xa45S\x86\xcb\xf6\xb5\x1fj?\xbe}\xbf\x93\xe4\xaa\\\x15%.~\x1d\xf8\v\xb8*g\xa5\x88\x94\x1c\x9c\x9c\x89\v\xeb\xeb\xf3\xb5Ֆ\xec\xf3\xf4y&gt;\xaf\xe7\xfd&lt;\x9fO\xcf\xf3y\xc0\x1a\xc9(Y\xbd\xce\a\xd9\\A\v\x8f\a]s\xd1yW\xc3\vv\x1a\xb1ы3\xa6\xe8\xeaH(4EM\xfb\xbc\xc7b\xc6[\xafY\xab\xf6\xb9\u007f\xady)\xa1+`\xb1\v\x0f+\xaaV\x10\x9e\x10\x9eZ-\xa8&amp;\xef\b\xb7+\xe9ؒ\xf0\x99\xb0G\x93\v\nߙz\xbcį&amp;\xa7J\xfcm\xb2\x16\t\x8f\x82\xb5Uؕ\xaa\xe2x\x15+i-+,/ǝͬ(\xe5\xfb\x98/q$r\xb33\x12\xbb\xc4;\xd1\t3N\x10\x17\x93\x8c1J\x80~\x86d\x0e\xe0\xc5O\x9f\xac\xa8\x91\xef\xfb͟&amp;/\xb9\x8a\xcc*kh,\x93\&#34;M\x01\x8f\xa8+R=!1)zBF\x865\xb3\xff\u007f\xfb\xaa&#39;\a\xfc\xa5\xea\x8e \xd4?\x1b\xc6{74lCq\xcb0\xbe\x8e\f\xa3x\f\xb6&#39;\xb8\xccU\xf2\xf3\x870\xf8!\xfaVEs\x1f\x80s\x03ί*Z|\x17.6\xa1\xe3Q\x8di\xb1_\xc9&amp;nM&amp;\xe1\xed\x14Z\xa2\xd0v\x03M\v\xa5\x9e\x95\xf79y\x80Ⱥ|\xd55\xec\xedC\x8f\x9cw.\xfe\x00\x1a\x80g\xc3\x17\xe1\xe9w\x00\x00\x00\tpHYs\x00\x00=\x84\x00\x00=\x84\x01լ\xaft\x00\x00 \x00IDATx\x9c\xec\xbdy\x98$Gu/\xfa\x8b\x88\xcc\xea\x9eю\x05H,\x12\b\x8cY\xb4\x8c4\x82ь\x84a$\xb8\x86\x87\xd9\xeck\x8c\xedk??\xaf`\xf9^\x1b\x84\x04\bc\xbc\x00bF#\xd9\xc6\x12\x8b\xfd\x8cͽ6B\xba\xc6\x17\x03\xc6\xd8\x06I\xc3&amp;\x01\x96f\x1f6\vI#\t\x8df\xba\xa7\xf7\xae\xaǎ8\uf3ec\x93\xf5\xcb\xe8\xea\x99\xea\xeej\xeb\xcd\xf7\xd5\xf9\xbe\xfe\xba\xbb\x96\xcc\x13&#39;N\x9c\xe5wND\x02C\x1aҐ\x864\xa4!\riHC\x1aҐ\x864\xa4!\riHC\x1aҐ\x864\xa4!\riHC\x1aҐ\x864\xa4!\riHC\x1aҐ\x864\xa4\xe5\x93y\xbc\x198\x1e\xe85\xfb~\xf6CƘ\xd7\xe9\xff\&#34;\x82\x10\x02\x8c1\xb0\xd6BD\x00\x00\xd6Zx\xef\xe1\x9cCQ\x14\xb0\xd6\&#34;I\x12\x84\x10 \&#34;0\xc6T\u007f;\xe7\xb2O?\xef\x96g&lt;^c\x1a\xd2\xd2\xe8\xaa\x03\xd7\xfe\xa8\x88l\xef\xcc\x1d\x00\xd4\xe6\xd3Z\vkm5\xef\xde\xfb\xea\xb7\xea\x00\x80\xea\xbb!\x04ա\xf7\xddx\xf6u7?n\x03\x1bҐV@\xc9\xe3\xcd\xc0\xf1@ιS\xbd\xf7g\xaa\xe3h4\x1a0\xc6\xc0{\x0fcL\xe5\x1cԸ\xa8A1\xa6\xeb\x9fE\x04\&#34;\x82$IP\x14\x05D${\x1c\x874\xa4\xa5S\x12B8\x93\x9d\x06\xcf=P:\x05\x9d\u007f\x0e.TO\xa2\x00\x02\xd6Z\xe4y~\xc2\xe3&lt;\xae!\ri\xd9d\x1fo\x06\x8e\a*\x8a\xa22\b\x9a]\x88H\xe5H\xf4G3\x11\xfdl\xc7@\x00@͡8窈tH\xc7\ay\xef\x01\x00IR\xc6\\:\xe7\x00\xaay\xd7\xcfāD\x92$\x95ð\xb6\\r!\x04\xe4y^]oHC:\x1ei\xa8\xbd}\x90\x88\xfc\x98F\x93j4\x8c1\xc8\xf3\xbc\x8a*\xd90(\x94\xa1\x86C\xe1\x8c\x10B\x15\x8db(\xfb㊒\x89\xe4\xc9\xe1GB\xe5,8X\x88\x03\x03\xce:4+\x01P\xe9\x80~7I\x12\xf8\xa6\u007f\xfe\xe30\x9c!\ri 44b}\xd0\xdc\xec\xec\x8f$I\x02Ai$\x9csH\x92\xa42\x1c\x9c]\xa8\xf1P\xc7a\x8c\xa9\xfeN\xd3\x14y\x9e\xab\xa1\x19f\u007f\xc7\x11\xd9Y{BvJ\x86$I\xaa\fC\xeb\x18\xaa\v\x1a4\x88H-ke\x87\xa2\xce\x04(\xf5\x06s\xf2\xc4\xc7qXC\x1aҊh\xe8@\xfa\xa0v\xbb\x8d\xf9\xf9y8\xe7*\xa8\x8a!,\xeb\x1c\x1ai\x8a$M+\x98K\xb3\x0e\xfd\xac\x1a\x11\xa0[@\x1d\xd2\xf1C&gt;\x94\x01\x80f\x97q\x93\x04\x80\xea=\xfd[\xe7\xdd\x18S\x05\x0f\xda|\x11B(\x9d\xcc\xe39\xa8!\ri\x854t }\x90\x16\xbf\xf5oŶ\xb3,\xab \x8c\xe6\xfc|\xe5 FFF\x90$\t\xacsH\x9c\x83\xeb@YZ\x84WhkH\xc7\x17i\x10\xa0p\xa5\xbe\x06\xa0\x06m*T\xa5\r\x13\x00jP\x16\xd0u0\x90\xff\xc4\x01\fiH\x03\xa6\xa1\x03Y\&#34;\xa9q\x00\xea\xc6B\xdfS(\xc3{\xdf\x13\xea\xb0\xd6\&#34;IS$C\ar\\\x911\x06\x82n\xfdC\xb3L\x00\v\x1c\x05\xb7\xeer&amp;\xa2\xef+\f*\&#34;(\x90?&gt;\x03\x1aҐ\x06@C\a\xd2\a\xc5\x06@\xfb\xfb\xb5\x95\x97\xb3\v\xcdV\x14\xaa\xe0V_\xed\xba)\x8ab\ba\x1dgd`\xaa \x00(;\xf3\x14\x96Ү&lt;\xaeq\xa8\x13Q\xbdQb\xe7!\&#34;pf\x18H\f\xe9\xf8\xa5a!\xb7\x0fR\x87\xa1\x06\x847\x8e)\xe9\xfb\xfa\x9a\x1a\x14Żոp\xf7\u0590\x8e\x1f\x1a\x97#h\x86\x16rߝ;\x9dW\x00\xd5\xdcrV\xa2\u007fk\xa6\xaa\xdf\xe1v\xdf!\r\xe9x\xa6a\x06\xd2&#39;\xa5iZ-~\x8e.\x15\xa2`H\x83\xdbv\xf5s\\|\x8f\x9dϐ\xfe\xffO\x87\xe40\\\xbbӎ\v\x8b\x11\xdb@jR\xacIGѰ#\x18A\xa3\xca.\x14\xb2T\xa7\xa2\x1dY\xdc\xf2\x9b\xe79\x1a\x8d\x06\n\x19BXC:~i\xe8@\xfa$\ue80ak\x1f\x9ay\x84\x10*GÝ6\xfa\xbef2\x00*\xcc|H\xc7\a%6\xa9\x0e\xfe\t\x120\xef\x9bp.\xc3Ts\xba\xac}\xc1 \xb5)Fl\x03\t\x12\xa4&amp;\xc1\t#&#39; A\xb2\xe0T\x02\xd5\r\xef=\x02\x86P搎_\x1a:\x90&gt;I3\x8d4MὯ\xa2J\xdeX\xc6\xd1&#39;CV\xba{\x1d\xe8\xc2\x19C\xf8\xe2\xf8\xa2 \x01\b\xf5F\t\x0e$\xac\xb5\xc8B\x86V\xd1꾖[H\x10\x8c\xba\x11\x8c&amp;k\x90\&#34;A\x82\x04k\x1bk鴂\xf4\xf1\x1eڐ\x86\xb4l\x1a:\x90&gt;H\x8b\xe3i\x9a\xd6\x1c\x06\x1b\x13\x00\v:o\xb8\xc0\xaeQ\xa7b\xe3C\ar|Q\x90\x00#\xdd#k4(\xe0ڇ\xea\x03\xeb\x00\fЖ\f\xcdv\xab\xcaB\xc3\\@b\x124L\x8a\x864\x1e\xef\xa1\riH˦\xa1\x03\xe9\x83b\x87\xa0\x99FQ\x14h4\x1a\xb5\x13w\xb9\x88\xae\u007f3|\xa1\x1bІ5\x90\xe3\x93t\x9e\xb9\xee\xa5u.\xee\xd6\xe3\xf3\xb14\v\xd5\x1d\xea\&#34;\x82`\x02\n[`\x16s\x8f\xe7p\x864\xa4\x15\xd1Њ\xf5Aj\x04ԑp\x1dDk\x1cj&lt;\xf8o&gt;\xad\x95\x1d\f\x1b\x9a!\x1d\x1f$\xe8\x1d\x1c\xf0\x916\x9cyhV\x1a\x9f\xdc\xcc\xd0\xe60\x13\x1d\xd2\xf1N\xff\xe9\x19ȋ\xbf\xf2\xf2\x91\x10\xc2\x05Ƙ\x17\x8a\xc8\x19\&#34;r\x1a\x80\xd3\x00\x9c\xea\xbd?\xcd9w\x92\x88\x8c\x8bȣ\xd6\xdaGC\b\x8f:\xe7~\b\xe0Q\x11yTD\x1e5\xc6L}\xfd\xa5\xb7\xff\xa7\xad&lt;\xed\xedg\xe7\xc1\xce@?\xc3\xceCq\xf0\xf8\xb0\xc5\xe3\xd9y\\r\xfbKM\x92$&#39;\x15Eq\xa61\xe6Lk\xed\x99\xde\xfb3\x00xc\xccc\x00\x1eK\x92\xe41\xe7\xdc\xc1$M&#39;\xbf\xf8\xc2\xcf\x1e\x9f\x03\xedA\xba_\x83aHv\x1c\x9a\x85\xd4\xe0+\xa0\xb6G\x84\x03\v\xa0\xb3)uXD\x1f\xd2Q\xe8-\x0f\xbcc$M\xd33\x8a\xa28\xc3Z{f\b\xe1\f\x00&#39;Zk\x1f\x03\xf0\xc3\xceϣ!\x84\xa9\x1bϾ\xee?}\xbd\xad\xba\x03y\xd1\xe7_|\xa2I쫌3\x1b\xad\xb3\x1bB\b\x17y\xef\x1b\\/\x887]q\xa4\xaf\xbfy\xf3\x951\xa6y\xe9\xf6+\x0e\x00\xf87c\xccg\xf2&lt;\xdf\xfe\x8d+\xb6\xaf\xda\xf35\xd8(\xf0\xa9\xbc\xf1\x06C\xc6\xc6\xe3\xd3{\xe3\xd3[\x8f\a&#39;r\xe9\xf6+,\x80M\&#34;\xf2\xd3\x00^\x01\xe0,\xef\xfdZ}_\xe7%.(\x03@\xbbݞ\xdax\xc7\xe6/\x18c&gt;k\x8c\xf9篽\xe4KG\x1e\x9fQ\f\x86\x82\x04X\xb1\xb5\xac3M\xcb\x02\xb8\xea(\x80\x05\xcf\b\x01\xea\xc1\x05?K$\xee\xce\x1aҐ\xae:p\xad\x13\x91\x17\x03\xf8i\x00\xaf\x01p\x16\x9fr\xa0\xfa\xc5[\x05:\x01n\xf3\xea\x87\u007f\xef!\x11\xf9\x17c\xcc߇\x10\xbev\xc3Y\xef\xf7\xab\xcd\xef\xaai\xef\xba[6\\h\x8c\xf9\x8d\x10\xc2/\x008\xc9Z[\x9ef\x9bZ\x88\x11\xd8\xc4\xc1&amp;\x06\xc6Y\xd8\xd4º\xae#ᣰ\x81n\xe7\vG\xf7@w\xb3^\ba\x06\xc0\x17\x92$\xf9l\b\xe1\xf3_{ɗƗ\xca\xef\xc6;6\xbf\xd3\x18\xf3T~\x96\x03\xdd\xff\x97\xbc\xf7&#39;\x01\xa8\x15O9\xb3\xe0\x16\xdd$I\x90eY\xf5\f\x888*\xa5M\x897\xb3c\xe1\xf3\x93\xe2&#39;\x1d\x02@\b\xe1\xe6\xbb6\xdf\xf1\xed\xe5\xcc\xc7\x12\xe4\x90\x18c^\xe2\xbd\xff\xe9F\xa3\xf1\xfa\x10\xc2\x19*g&gt;\a\xaa\xd7ò8\x12\x8f\x8e\xee\b\xd6گy\xefo\x01\xf0Wwm\xbe\xa3\xa7\xb3\u007f\xf9\xb7^}j\x92\xa6\xefՆ\x05v\xb6*S\x85\x8c\xf8@J6\xda\xce9\xe4y^u\xcbu\xf8\xfe\xd6\xe7\xce\xfb\xdf\x1f?\xd6\xd8_\xb3\xefg/4\xc6\xfc*\x80Z\x06)\&#34;\xf0E\xf1\f\x01^\xa5\x87e\xea\xd8\xe2L4\xe6\x87;\xf2\xb8C\x8f\x8ev\u007f0I\x92\xcfq\r%\xbe\x16\xcb\xdc{\xff\x83ϼ\xe0\xd6\x1b\x17\x1bë\xf7\xbe\xe14\x11\xf9\xe3Z\xf3\x86\x0f\x18IF\xb0&amp;\x19E\x82\xa4\xb3w\xa5\x01\x87\xee\xaey\x1dW\xaf\xa0\xads\xdf/\xfc\xe93\xb7|\xeeX2\\*\xbd\xed\xa1w\xfd\xa4\x88\xbc\x82\x1f\x83\xd0h4j\xf2\x8b[\xe6\xb5\xf6č-\xac\x9b\x9d\xef\xbe\xfb\x86\xb3\xde?\xb1\f~\x9e\x0e\xe0\xed\xbc\x11\xb8ױD&lt;&#39;|\xce\x19\xf3\xc7\xf3o\x8c\xf9\xfb\x1b\xcez\xff\x9d\x8b\xdd\xf7\xaa\x03\xd7^\x1aB\xf8ec\xcckE\xe4\x89z/\x9d\u007f\xd6i]\x0f\x00\xaa\xff{&lt;n␈\xfc\x1f\x11\xf9\x14\x80;o&lt;\xfb\xbaU\xd9p4\xd0\f\xe4\xfc\xbf{\xa1\xb1\xd6\xfe\xbcs\xeew\x8b\xa2\xb8\x98\x8d\xa3\x0e\xaehw\x1e\xf9\x99\x15P\xf7(\&#34;0\xd6\xc0:\x8b\xdce0\xce\&#34;i8\x04\blb\xe1RW\xedގ\x1f\x17\xda9!\xf5\xa4\xa2(~&amp;˲\x9f\xb1ֆ˾\xfc\xb2\xafz\xef?+\&#34;\x9f\xb9\xfb\xf2;\xbf\xd7&#39;\xfbo4Ɯ\xaf]U\xec\xdd\xe33\x8d\xb8xʝV:V\xfd&gt;\x1bY\x86&lt;\xe8T\xdf+\xe3hU\x9d\x90^+\x8ah?\x03`U\x1c\xc8e_~\x99\r!\xfc\x82\x88\\\a\xe0\xa9\xec\x10u\x11\xa5iZ9F]б\xa2\xf3i\xb4@\xf5\x00&amp;[\x14ŋ\x01\xbc\xd8Z\xfb֍wl~\a\x80\u007f\xb8k\xf3\x1d\xb54l~~~-\x80+yߌ\xe9\x9cd\x9bt\x1c\n\x9f\x88\xcc\xd9\x1do\xd2\xe3\xf6\xe9,\xcb\x00\xe0o\x01\x1cӁ\x88ȳ\xac\xb5W\xeai\x01z\u007fc\f\x92N\xb6\xc1N@\xef\xa5G\xf4s\xa0\xa3r\x8b\xa1K\x86\xaf:\x06\xe6l\xef\xfd\x95\xcas\xecd\xf4\xbb\xb41\xf1k\x00\x16u I\x92\x9cX\x14ŕ|?\x978\xe4\x92Wss$\xef&lt;\x8f\xc4:\xa4&amp;Ej\x1ah\x98\x14k\xd25\x18MF ^ju\x9a\xce؎\x00\x18\xb8\x03\t!l0\xc6\\\xa9\x81\x197\xa4\xa8\x9c8p\x8ce\xbbXSJ\b\xe1\x03\x00\x96\xec@D\xe4\x89y\x9e_\x19\xef\xe7\x8aϼ\x03P\xdbL\x1cw\xe1\xe9\xba \xe4\xe4\xbb\x00\xee\x8c\xefwՁk\x9f$\&#34;۬\xb5\xbf\xa8\xaf\xc5M\x19\xba\x06\xd8Yęl|\xc8g\b\xe1I\x00~\xd3\x18\xf3\x9b\xde\xfb\x83W?\xfc{\xef\x12\x91\x8fo{\xfa\xfb\x06\x9a\x95\f́\xac\xbfmӳC\b\x1f5\xc6\\\x0et\x9dF\xbc0\x948z\x04\x00\b\xe0s\x0f\xeb-\U000a2342&amp;\xa3\xed,`\x00\xd7p\x10\x03$\x8d\x04H\x05\xd6ؚ\x92w&amp;\xda\xe6y\xfe\xe3\xd6\xda\x1fw\xce\xfdѦ;/?\xfb\xeb/\xbd\xfd\xf0\xb1\xf8W\xc3\xcfg\x15\xf1\x02\xe6\xdf\x00j\x8a\x1e;J&amp;\x8e^\xf4\x1al\x10XI\x81\xfaa\x8d\xfa}\x8e\x86W\x83.\xdd~\xc5\x06\xef\xfd\x9f\x19c60\xb4\xc8{]4\xcaS\x83\xaa&lt;\xb2\x93\xe1(\x8d\x1dk\xa4\xf4\xcf\x0e!\xfc}\x92$_\xbf\xec\xcb/\xbb\xea\xab?\xfeŻ\x95\x0f\x96\x1d\xcb\xc9{\x0f\x9beh\xb7\xdbUf\xa2\x11s\xa3\xd1\x00\x8cA#Ma\xe8\x18\xfd^O\x82&lt;\x16q@\xc0\xed\xd6\xec\xfc\xf5s\\\xe3P^\xf4o5\x8414\xcb:\xc0\x0e*v.\xea\xfcT\xbe\x9c\xb1\xf43\x16\x8e\x8e\xf5\xfaz\x0e\x1b\xeb].\x82\xc2x4\xd1*\xf9\xca:|\xc2am\xba\x06#n\x04)\x12\x8c\x98\x11$f\xf5\xd0n\xd57]{\xbc\xc9V\u05f7\x8e\x8b#m\x96\v\x1bU\x96\xc1r\xa8\xd1hTs\xa7\xd7b\x9d\xd6y\xe09\xe4\xac(\xce^{\xf1\xf3\x96\a\xdea\xad\xb5\xbf\xe6\x9c\xdbR\x14ũ\xbc\xe6ئ0\&#34;\xa1\xa4\xd7繌\xb3V\xb5g\x9d\x03\\\xcf\b!\xfc\x951淯:p\xed[n8\xeb\xfdۗ-\x9c\x88V\xac\x15\xebnِ\x1ac\xde\x1aB\xf8\x03\xe7ܨ\nZ\x15\x9d&#39;\x9f\x85\xcf\xca͆\x9a\x0f)LӴ\x9b\x1a\xfa\x00\xdf*\xaf՜ͺ\x11\x9a\x01`\r\x92\xd4\xc1$\x16\x05\n4FS\x04/\xf0\xe2\xff\xfc\xee\xcb\xef&lt;\xa6\xf3\xe8\xf0y\x12G]\xf1B娗\x8dk\x1c\x19\xc4Q\xa3\x8e=\xce^⬅\xe5\xc0\xd1t䐞\xb0\x94\xb99\x16]r\xfbK\x9f✻\xce{\xffKl\xf8\xd9\xc11?l4\xe3\b\x95ǯ\xaf\xf1\xd8\xe2\xa8]D6\x85\x10\xee\xbat\xfb\x15\xef,\x8ab\xcb7\xae\xd8.\&#34;\xb2\x86#&gt;\x951\x00dYV3\x12*\xc7N\x86Q\x9b&#39;\x97$H\x9c\xab\x9e\xd3⒤\xaf\x876\x15Eq\xba\xf2\xaf5\x0e\xe6[\xefφCOX\xd6,\x84!P\x86?\xd4\x18\xf1w\x81\xfa\x13,\xd9\xc1\xa8#d\xdd\x01\x00\xef\xfd\xa9G\x1bC\ba-\xf3\xaa\x86.\x1e\vߋ\xb3M\x00\xf0\xf0\x98\xcef`\xed\\\xf5\xd9\&#34;/\x9e\u070f\f\x97J\x12\u0093\x04]|_\r\xa8\xcaPu\xa9(\n\xe4y^\x83*u\x9d\xaa\x91\xe5CLMn\xd6,\x8f!\x9c\xac\xc0&gt;w\xc9Yk+\xb8\x8c!I\x9d\x1f\x9d\xff\xc5\x1an:\x19\x01\x00\xe0w\xef\u007f\xfb\xe9Ƙ\u007f\f!l\xe2\xb5\x1e;\x1d^C\x1c\xa8\xa8L\xd8np\xe0\xa9&lt;\xaan\x12\xfcw\xa1\x88\xdcyՁk?彿\xe6O\x9f\xb9\xe5\a˒\x11ъ\xdax\xd7ݲ\xe1\x04\x11\xf9\x17\x11\xf9\x801f\x94#\a\x1e\x98\xa6\xf7*\x98\x18\x12b\x83\xa5\xdf\xe1\xf7c\xd8@\x1d\x8b\xb5\xe5N_)\x02\xdasm\xe4\xb3\x19\xfcl\x81\xe6X\x13s\ag\xe7\xe6\x0f\xce\xdd\xd0\xefX\x9csg*\xdfqڪ\x8b_\xf9P\xc3\x16\xd7A\x98_}\x8d\x15\n@\xedh\x13&amp;UN\xbd6;^\xfd\xed\xbd\u007f\xe6\x92&amp;\xe8(t\xe9\xf6+^f\x8c\xf9\xb6\x88\xfc\x12G\xf5\f\x9fċ 6&gt;\x1c\xe9ğ\xd7\xf7Y\xa9y\xfe\x81*\x8b\xbb\xceZ\xfb\x91\r_zI\&#34;\x82\x935p\x88\x83\f\x86\vظ\xe8\xb5\xf5\x9aY\x96!\xcf24\x9bM\xcc\xcd\xce\xe2ȑ#8\xf4\xd8c\xcf\xe9K(3x\xb6\x1aw5\xaal\xfc\x95\x8e\x96MƵ\x04\xd6e\x00\xb5\xbf9\x9bS\xe3\xa7\u007f\xeb\xbc\xf7\x88d\x9f~\xb4!\x98\xc7̩U\xd6ֹ\xd7b\xcf]\xd79U\xa3\xcdđ\xbd\xf7\x1e\xe2\xe5y}\xc9p\x89df\xec\xf3u-\x03u\x990\x1fI\x92T\x0f\xf4\x8a\x8d(;\xe1ꨠ\xfb\x8b\xa3:\xda\xc5\xc8\xdf_&lt;\x05@\xd5 \xa1\xcf\xeea\xdd\xd6\a\x8a\x01\xdd.;\xe5_y\x88\xb3E;n\x9f\v\x00o{\xe8]\xa7;\xe7\xbe\xe4\x9c\xdb\xc4\xc1\x15\xaf\x0f\xbe\x9f^Gu\&#34;FC4@\xe0\xb5\xc0\xd7d9Қ\xfaik\xed\xfe\xab\x0e\\\xfbsˑ\x11Ӳ\x1d\xc8\xfa\xdb6\x9d`\xad\xfd\xac\xb5vs&lt; ]\x80* \x15h/\xac\\&#39;\n\xe8\x1aW6`l4\xf4&gt;z\x94\bg3\xbc\xe0;\x8b\xf6\x04\xd9U\xec:\xef\xed\x17\xf6\x15}f\xb3\x19|\xdb\xc3\xe7\xdd\xe8\x93k-\xb13\xe4\xa8M\xef\xa9\xca̐]\x8cѦiZ\xdb\xd1\xceO\xb9\xd3\xcf\xe88\xb8\x96°\xd6Jiӝ\x97\xff\xb7\x10\xc2?\x1bcN\x0e! ˲ZQ\x12\xe8B\x8b\xbaX\x81n\xbb*\xcf+G\x83*\v\x9d\x13\xae\v\xb0NT\x10J\xa7\xae\xe5\x9c\xfb\x8d\xb2\x01\u009f\xc8Ή\xe1\n\xfdn\xbc\x9f\&#34;vP\xf1\&#34;\xeb\x05+.FM4\xd1j\xb5j\x90#G\xba&lt;\x8e8\xc8QC\xad\xf3\xceQ!\xcf+\xcb6v\xd0lH\xf5s\f\xa3\xf43\x96\&#34;t\x9d\xb9\xae\x11&gt;\xccQ\xe7Q\xc7\xc1\xb5E%\xd5\xedŲ\xf1AS\xac\xdfq\xb0\t\xa0f\x94UO\xf5o\x96?G\xdc\xcb!g]Mf\f)\xe9\xcf\xc8\xc8H5\x1f\xbc^\xe2Z\t;\x06\x81\xe0\xad\x0f\xbe\xf3GD\xe4\x8b\x00\xce\u05cc\x93u6\xce^\x01\xd4\xe4\xc0\xf6Ee\x12\aW*?\xcd\xdaX\x16\x91]\x1e1\xc6|\xe2m\x0f\xbd\xeb\x9dW\x1d\xb8v\xd9\x13\xbc,\b뼿\xbd\xf8\x84\x10\xc2g\x8d1\x9b5\xfa\xd2\x01\xa8\xd1\xe3\bA\x05\xa0\x03el\x99\r\x86\xfeVAŞ\x9fa\x156(zo]\xc0E\x91\xc3}&#39;\x81\x97l\xfbޭ;\xfb\x82\xb0\u009cG\xee\xb3\xee\x8e\xe1$\x87\x18\x81q\x06&amp;\xb1\x90F\xa9\x04\x1e\xddT\x9f3\x0f\xfd\xcdΌ\xa3r%6\xb4lP8\x1d\xd5\x05\xa2\x8b\x86\xa3\xb3\x95\xd0\xc6;6\x1bc\xccۍ1ױ\xfc\xd9\xe8\xb3A\xe6q\xe8\xfcőN\f\x85p\xf6\xa4\xf0\x12\x1bc~\x8a#GK\xde\xfbW\x18c\x9e\xa7\x86\x8f\xf9b\xfeب\xe9\xfd\x99g\xa0\v\xb1\xa9\xbe-\x16\x81\xc74ۜ\x85mw\xe7/m4`\x00\xa4\x8d\xf2\xa4]6\x16\xb1\xb3b\xd9\xf1\xd8j\xddPqTj\xed\x02Ǡ\xbf\x19o\uf571.F\x06\xf5\xac\r\xe8\x1a2\x9e\v\x95a\xa3ѨA\x85:\xa6\x18\x8e]-\xd2:&amp;;[\xe5=\xae\xaf\xe98\x92$Y\x00gq\xf3\x861\x06\xde,\xafV\x1c$\xc0\xc0֮\xcd\x0e\x17@m=\xb3l9ˌk\&#34;\xb2&amp;\x9c \x82/Zk/\xe0\x82;_\x9f\xafݫ\x99 \xceF\xf5\xf3\xecP\xb8\x19\x81\x1f\xb7\x1c##\x14$\xbc_D\x9euՁk\xdf|\xc3Y\xef_r\xa7֒\x1dȺ[6\x18\x00\u007f\x1bB\xd8ܫ@\xce\x1e\x98q\xd58Em4\x1a\v\xa2G^xz]\x1d8\x178\xb9Xɓ\xd05&amp;\x06\u0379\xd9`\x8cyO\xbf\xe3\xf2\xde\xd7`#\xf1ݮ1\x00(L^\t=i$\x10\x03\xa4#\t\x8c\xb3\x80\x03\x04\x01I#\x05L\xd7Y2\xae\xad8tlh\xf8iv1\xcc\xc1\x11\xcdJ\x17\xf1e_~\x99\xf3\xde\xff\xb91\xe6\xcdzo\x1dw\x1c\x812\x0f\xfa\x9b\x8b\x8a1\xac\xa4\x9fS~\x19\x96\xe1\xebq$\xcc\xc1\x80R\x9a\xa6g\xab.1\x04\xa4\xf2c\xbeu.\xb8P\xcd\x19\x02;\xc8~#\xd2r\xd1w\xe7\&#34;t\f\x80:=\x00\xb0\x1d\x9e\xd3$\x01\x8cA\x9a$H\x1b\x8dZ۰\xf2\xa7\xe3\xe0\f\x96\x03%6&lt;\fY0\x84\xc5\xdf\xe1\xc8t1\xb2\xa6kh4\x82\xe6f\x868\x10\xd0\xf7\xf5\x01Y\xec\xb08\xf8Y\xad\&#34;\xfa\xf7\xe5&gt;4f\x1b\x18u#h\xd8\x06F\xd0@\xc36`Q\xdf\xf5ρ\x04\xeb%C\xc5l\x87\x96\xbb^\x12\x9b@,j\x01\xa0^OeV\xd5e\xa3\x80\x80\xf5\x9d\x83\x1c\xef=\x92\x93\x92\x9f\x00`c;\xc9\xc11;l\xce.\xb4\xf3\x91\x83(\x9eWv,\xcc7\axlsz\xac\x87_\xf5ޟuՁk\u007f憳\xde?\xb5$y-\xe5\xc3\x1dz\xad\xb5\xf6u\xbc0\xa8կbV\xb1l6\x06\xb1\xc04\xda\xe4E\xc7\xc50\x16v\f\x17\xc5\vK\x17\xbas\x16v\x9f\x83s\xee\xe3{\xb7\xee\xfc\xeeR\x06\xc6\xfc\xb2\xe1\xe1\xc5d\x8cA\x91\x95&lt;\xb7\xb3zWF;\xb4\xe1RW\xeemI\flb\x91\xa1@\xd2H\x90&amp;i\x8dw\x1d\xb7\x16\xdf\xd4\x10\xb2Q\x8c\xeb&#39;쐗J!\x84\xad!\x847\xeb\xffzOv\x1c\xecLx\xaf\x8b\xce-/\x8a8\xa2\xe6T;vF\xfc\x1a\a\x00|\x1d\x86\xc1\x18\xf6\x02\xba]I,#}]\xa4\xdb\xd1\xc4\xd9@\xac\x1b\xfdP\xb9\a!\xad`\x1d\x8e\xda+\x03\xacM\x06\x1dY\xb4;\x90W9\x0e\xc1\xe8\xe8\b\xd2F\xa3ʈ\xe3\xfa\x1f\x1b:\xe6Q\r\x8a\xea \xcf\a;\xec\xb8i`\xc1&lt;K\xa8\xb2\x90\xd8\x11\xa8&gt;iC\x02\a\x0e*W\x96=g\x9f\x85\xac\xce\xe3\a\f\frɑ\xe5Y\xcd!\x88\x0f\x18q\xa3\xa5c)\x1a\x18q\r\x8c\xb8\x11\xf0\xc6}6\x86\xdc\xed\x16BX\xf6\x93\x1e}\xf00R\x87Kk|\x91#\xe1\xa0X\xd7\f\xf3\xa5sٙ\x03\v,\xdcT\xaa\xf3\xc2\xceA\xaf\xad\b\x04\aZ\xac\xcbl\x93b\x1b\xaa|\x18c\xaa\xeeE\xfd\x0e\a[@e\xf7^\x0e\xe0\xd3oy\xe0\x1d/\xff\x93g|\xa0\xef\xc9^\x92\x03\xb9\U000135dc\b\xe0\x83\x1c\x1drD\xc9\x11\xa8\xe2\xab\\3\x88\x05\xcc\xc50\xc6\xe05\xe2\xe3(\x83\x8d\x1d;%ƈK\x81\n|\xd6̍1\u007f\xb4\x94\xb1iZ\x1c\x17Hyc#+\x13\xf3S\x831\x8a\x00\xe3\x05E\xab\x9b=\xb4C\xe7$\xd6\xc4\xc2&amp;\x0ebBg\u007fKRf/\xa6wʮ\x13\xad\xbc\xf5\v\xc5\xc4t\xe9\xf6+^\x1bBxk\f\x0f\xe8\xb5\xd5(\xb1\x93\x88q\xd58\x95g\xc3\xcc\xce$\x8e\xdat\x9e\xab\a(-\xb2dž#`\xcef\x18fS\b\x8c\xe7\x8a#9\xee$c\x9d\x8b3\x9d\xc5(\x86^\xe3\xc5\xca\xd1\xe6bYs\xd6i7\xe6\xef\xb03qIRe-l\xfc8[b\xf9\xf0}\xe3v\xce\xc5(\x86\xcft\xfe\xd8\x11q6\xc8|\xb2\xd3\xe0\xb9_I\xf0r4\n(\x8f\xc9g9\x02\x80q\x16mi#\x0f9\x10\x80\xa2U\xce\xe3H2\x82D\x1cF\\\xf9{M\xba\x16&amp;ԝm\xbf\x19\xe7b\xb4\xd8&lt;\xeb\xff\xdc\xe2\xcd\u0383\xf5\x81۸c8\x9bх8kf\xde\xd9\xd6\xf0\\\xe9{\x1c\x000\xcc\xc7\xef\x8bH\xb51\x13\xa8;=\xe5E\xc7\&#34;\&#34;/M\x92\xe4}\x00\xdeޯ\xac\x96d\x91B\b\xbf/\&#34;O\xd7&gt;\xe9\xcek5\x85\xef\x15\xc5p\xe4\xad\x13\x12{\xc1\x18*ae\x8a\xb3\x126\xdcu\xc1\x19\x98=\x82\x10\xc2_\xec߶\xfb\x81\xa5\x8c\x8d\x05̆\x83\x17-G\x8d\xbd\xc6\x1a\x1b=6\x10\x00 ^P\x14%\x14\x13L\x807]%4\xd6@l\xb9C?i8d!C2\x92 i$5Hl\xa9\xb4\xf1\x8e\xcd\xe7x\xef?\xceВ*\x8e\x1a\xe4\xb8%PǪQT&lt;_q\xf4\x1c;:\x96\x89\xea\x80F@\xaa+1ƫ\xf7\x89\x8d&#39;Ϗb\xcb|\xb4\x03\xeb\x95\xf2\xc4\xd8o\xbf\xce\x03P\xc3Q_\xc4q$\xaf\xaf\xf1b\x8d[:\xbb\xd7\xea~\xbf\xd5jU\x9fU\x03\xa3rԍ\x92\x89s0\xd6VP&#39;\u007f\x9f\xef{4r֕A\x89tk\x92:\aq\x10\x10\xcf9\as\xf1k\x82թ\x83\x88\b\x12\xb7\xb0\xb6\xa6\xe3U^T^ͬ\t\xe7\x1cf\xf2Y\x00@h\x06\x8c4F`\x83Ś\xa4\xdca\x9f\x88\xc3(F\x97ŏ5\v\x83\xa3x~Yf\x1c\fs֢\xaf\xb1\xfcy&lt;\x9c]0\xc2\xc2\xf7c&#39;\x04,\x84\x9bu~\xd9&gt;\xc4\xddZ:߱\x13R\xfd\xe5\xbdA\xde{\xe4y~\xcd\xdb\x1ez\xd7\xdd۞\xfe\xbe\xffӏ\xbc\xfav \xebo\xdbt\x8a\x88\xfcN\b\xdd\x0e\x05V\xe68\x1a\x8f\x175\x80\x9a\xc1b&#39;\xa1\xaf\xe9\xf7\xb8\xb8\xae\x1e\x94\x05\x10\xe3\x93&lt;\x91\xde\xe7Mc\xcc\xfb\xfa\x1d\x97\x92\n_\xef\xc9J\x11Gܽ\xa05\xe6\x81qG.j\xa92h\x94\xcc\x05\xcd\xc4$\bY\x80\xe4\x02\xdf\xec\x18\xc8Y\x8f\xb6\xb4`\x9d\x85X)\xeb-K\xa0K\xb7_1\x12B\xb8\xcd\x18sJ\xafh\x9a\xf9\xe3F\b\x9e[5\xf21T\xa5\xaf\xf1\x9c\xaaSⱱAb\xb8\x92\x9d\x18GM\xcc\x1bGw\xec\x14\xb8\x16\xc3Pg|\x04\fGYK\xa18\vU\x990\xa4\xa1\x9f\xe3L\x9b\xe5\xa9\xf7\x8f`\x82\x05\v:\x84\x80v\xbb\x8d,\xcbj\x91iU\xb0\xb7\x16\x8d4\xc5\xc8\xe8h_\xe3\b\x12\x90\xd8d\x01\xfc\xa1\xc1\x19\xb0p\xad\xc6ccȮ\n\x06V\xe9\xd4#\xc1\xc2n\xbe\x18\xb7\xe7\xe3M\xb8+Nǒ\x17y&#39;\xd3oW\xef\aY^\x16R\x84\x02\x89\xe9\xc2=q\x00\xc1\xeb\x83\x1d{\x8c\x1e\x18ӭS\xb0\xbdT=\xe1.2\xce\xca\xf5Z\x9cU\xf7ʂbć\x9dZ%\xdb\bA`\x9e\x94\xf4\x9e\x8c*y\xef?\xfe;?\xb8fߟ\x9d\xb3\xf5\x98\xa7x\xf4m\x91B\b\xaf6\xc644\xe2\x03\xba]$\xb5\vR\x04\x1b\x1b*\x8ehY\x00|\x92\xa9~\x87\r\xb3\x16Pوk4\xdà\x04\xb2\xab\x80\x88ܴ\xef\xfa]\x8f\xf6;.%^h쨀n\xbb\\\xec\f\x81z\xbb\xa9\xf6\x80\xb3\x81\xd1\xdf\x1c]k\xb4\xce\x11\x85*\x81*\x8f\xde\xd7\x18\x03_x\x84,\xa0=\xd3ZҘB\b۬\xb5\xeb\xd9\xe8뜩\xfcT\xa9\x95\xa7\xce\xf7J\xb8%\xc2^\xd9X\xb3\\\x18\xd7ey\xb0\xc1R\xa3ʑ\xa6\xfe\xcf\xc1F/Y\xf4\x8a\xc2\xf9\xfa&lt;\x8ex\xb1\xf5\x03\xf9\x90\xbcj\xf3\xa7\xf2\xd2 G\xef\xcf\xfc\xa8q\xe09\xe3\xf9挛\r\x1f\xcf3;%5,\xedv\x1b\xedv\x1bE\x9ecvv\x16c\x87\x0f\xe3\xc8\xf88\xc6\x0e\x1f\xbd\xa9\xd0\xc0T5\x1c\xbd\x8f\x06.\x9c\xadŲd\b%\xce\xc0\x96ꀗBڅ\xd5\r\x00\xeb{(\xf4=\xae\x19\xea\xeb\xb1-\xaa\xe9\xc42k \x9a\x81(\x0f\xb1\xcd\x01\xba\x8e\x8du\x8ek\xc0\xaaì\a,\u007f\xce&gt;\xe3\f\x9e\xff\xe6\xe0\x87u:\x86\xbf\u2004\xbf\xc7m\xc8\xec&lt;8\x1bQ\xb9+\xefI\x92\x9c\xd4h4&gt;\xf5\xd6\a\xdfY\x1d\x9c\xba\xa8\xbc\xfa\x16\xac\xb5\xff56p,L\xf6b\f-p\xe7\x14;\t\x15\nO\x969b`\xef\xb70\xdf5\x90\x83\x02\xe4\xa5qp֡\xf0\x05\f\xea\xfb,\xf4\x1e!\x04X\x18\xc0`\xc6Z\xbb\xa5\xdf11qD\x11\xa7\xf9l\xe0t\x12y\xf3\x95*\x89\xee\xf1P\x19\xf1be\bI\xa4[\xf8\xe5hC\xf7X\xc40\x8e^g)5\x90u\xb7lx~\xf3\xb1\xf9+[cM\xe4\xd39\x8a\xd9\x1c\xf9\\\x06\x9fy\x14y}\x13\x14G6\xca&#39;oN\xd2\xf9\x8d\xb3K&gt;f!\x86\xbe8\x83aGɑ\x9c\x12à*c\x95g\xec\x00\x18\xc2d\x18!\xee4\x02\xea\xb8x?\xc4Δyb\xa7\xaf\xc4u\x025\nl\x10b\xe8\x8c\xf9fc\xc1k\x06@\xed\b\x16\xbd\a\x1b*{\x8c,tR&amp;\x91\xb5\xdbh\xb5Z\xb5\xd6V\x8e\x909ӎ\x1d\n\xebB/\x872h\nR?\xa5\x98\x91\t\xce:9\x82gx\x8dad\x1d\xebJ \xb7\t;\x8d\xe9|\xa6\x84\x97!5C\xcb끃b\xfd\x9f\rr\xec\x84y\x9d\xf3g9\x00\xe9U\xbb㌆\xe5\xc0\x8e\x8d3\xf58\xe3\xe0u\x117pp\xf0\xa0\xfa\vTs\u007f.\x80\xdf:\x96\xbc\xfa\xb2H\x17ݺ\xf1\xe4\x10\xc2+bE\x8a\x0f\u038b\xa3O\x16(\x1bPUhk,쌅\xbf?C\xde\x19|\x86N+r\x13\xc8\x1e\xcdj\x8bߍ\x8e\x00ϯwߔ\x03\a\xb2\x1d-\xb8\xc4ݸ\xfb\x03\xf7.\xf9$^\xa0\x9e\xee\xc5\xce\t\xe8\x16:u\xbc\xac(\xdc\x06\xa9r\x88k\x16z\x1d\xc679b\xe04W\xefυN\xe6\xa5Oz\x97\x811\xf0\x80\xcf\n\x14\x1d\x05\xca\xe7\xcbM\x83\x995\x80\x05\x92F\x8a\f\x19\x8c\x05\x92\x91\xb4\xdc\xf7b{w\x84\xb01W\xa5f\\=^\xf8ʷ~\x9e\xd3d\x95\x13\xcb2ލ\xcdƔ\xa1\v\xbd\x06\xef9\x8a\xb3&gt;\x95a\xbb\xdd\xee\xbb\x0eR~\xa7,\x84s\xc1_\xbf\xaf\xfa\x16w\x83\x01ug\xa5\x06\x83\x8b\xcf&lt;\x8f\x1c1\xea}\xd9A\xab\x03\xe7V\xf0\n\xfe;\x86]l\xa3\x85\xf6T\xab\xbav\x95\x05w\x8ew1\x1dc\xa1H\x00\xeb!\x93ʕ1\xf8\xd5 m;Vy\xb3}`\x99\xa9\xbeq\xc0\t\xd4\xe1\xb7\x1a\f\x14\x96W\xf4?\&#34;G`2\x83\xd0*\xbb\xd9\x12\x93`\xc46\x90\x9a\x14&#39;\xad9\x11N\x12$fak8\xaf\x95\xd89Ď\x99ǡ\xd0\x1cg5@\xfd\xa0\xc6^&#39;_\xc4:\xa3\xf7f^\x18q\x88\xed\x98ΫfwJ\xfa\xb9\xce\xf7\xaey\xeb\x83\xef\xfc\xf0\x8dg_\xb7\xe8c3\xfb\xd2\f\x11\xd9\f`\x84\x99ӿ\x999UH.\x14\xf1\x02\x04\xba\xa7\x97Zk\x81q \u007f\xa8U\xf3\xa0\fﰑ\xca\xf3\x1c\xf3\xf330\xf7t0\xe5&#39;\x8dB\x9e\&#34;\U0003e034\x00\x81\x1c\xf1\xde/zJ鱈\x17;G\x87:\xae8\xfa\x88!\x13n#Աp\xd6@\x9d\x0e\vڛY\xe9z\xc1\nq\x14r,:\xefo/\xfe1k\xed\x1bC\b\xd5\xfe\x93\x98o\xef=\x9cq(\x9aye\xec\x9a\xd3\xf3\xa5l\xd3\x14\xc1\x04\xb8\xd4\x01\xae&lt;g\xcc&amp;\x0e\xc1\x04X\xd7M\xcf{\x9d\x89\xc50P\xaf\xc8]eƊ\xcaΘ#&gt;}\x9f\x95&lt;\x96\x0fG\x82\xca\a\xcbs)Et\xcel\xd8H1_\x1c\xd5)\xf1\xdf\x1c|\xb0\xb3\xe3\xcc5\xce\xce9\x10\x89\x9dp\x9c\xd9\xf4C\xb1cף7ڨפ\x9cs\x801H\x9cC\xa3\xb3\xbb\x9aO\x86й5Ƭj\x11\xddXS\v\x16t\f\xb13\xd1יB\b\xb5\xf5\xa4\xd7\\.\x05\t\xd51\xf7֕\x0f\xfc\x9a\v\xf3\b!`\x06\xb3\xe5zr)R\x93bԍ`4\x19E\x02\x87\xd1dtA\xd6\x1aג8\xe8\x89\r;\xeb\n\a\x12\x9c\x95T\xf2\&#34;{\xa0?\xbc\x0e8\x88\xe2\xe0\x80\xef\x05\xd4\xf7\xaa\x00\xf5\xb5\xd9y\xed\x89Ƙ\xdf\x02p\xfdb\xf2\xea7\xb48\x9b\x17\xbc\xfe\xcd\a\t*\x03\x9c\xaa+C\xea\xed\x14\x9b-&#39;\xdc\xc3?\x9c\xeb\x80\xe7\x00\xdcf\xad\xdd\x0f\xe0a\xef\xfd\x9c1\xe6\x19\xd6\xdasB\b\xe7x\xef\xcf\x01pN\x92$k\xd5@e\x8f5a\x0e\x19\xb8\xa4\x01_\x1e߰e\xef֝\xd3}\x8eg\x01ѱ\x1a\xd5k\xf1\&#34;g\xa3\xa5\v\x9c\x8d\x03\xe3\xf9l\x84\xb8x\xacΐ\xfb\xfd\xd9X\xb2\&#34;\xb0\x01\xd1\xeb\xf7Ci\x9a^뽷|\x1dU8\x95_|\b$\x1b\xdbv\xbb\x8d\xd1\xd1QH&amp;\x10\t\xc8M@\b\xedr\x01x\x0f\xe3\x00\xa7N\xc5y\xd8\xc4\xc15\xea\r\a\f\x05ŝ)q\xed\x82\x17^\x9c\xd1\xe8\xf7x!p$\xcfNQI\x8b\xee\xf1\x82&lt;\x16\xc5\x19\x13\x1b/\x86\xe4bh\x89u\x9e\x8b\xd71\xe4\xc2FB\xff\xe7{\xb3\xfcb\x98\xc2ڲX\x9f\xb8\xa3/Yk\xcag\xebą\xd9^\xf7\xaa`\xb3\x100??_s\xba\xba\x939I\x92\xf2(\xfdU*\xa2&#39;6A\xb0ݵ\xc5G\x1c\xf11+1D\xa4\xef7\x1a\x8d\xdasb\xaa\xf1\xd9\xe5\xf1\xab\xf6*\x0e\&#34;X\xd7\x02\x02\xda\xd2F3k\xc2\xe4]\xe7ް)\x9c8\x9c8z\&#34;\x1a&amp;E\xea\x1b\x18I\x1a\xb5\xb9d{\xc0\xaf\xc5YW&lt;\xff\xfc\xd9\x18-\xe1@\x9b\xd7Y\xacwq\xbb\xb8~\x8e\xf5\x8e\xe1\xce\xce\xf5\xaf\xb9\xfa\xe1\xdf\xfb\xf0\xf5O{\xefl\xcf\xf9\xebS\xa8O\xe5\x88*\x16\x04/\xa8\x18\x8b\xe3\xc5\xcf\xe9;\xba\x86\xe1\xdd!\x84?\u07fbu\xe7Qw@&gt;\xffm\xe7\x1b\xef\xfd\xc5\x00~\xcd9\xf7\xf3\x00N4\xc6 +2\x98\xf2q\xaa7\xf73\x96\xc5H\x05\x1e\x1b-.:1N\xa9\xef1\xac\x15w\x14\xf1\xb8{e\x141T\xa6\x0e\x83\r0˶\x1f\a\xb2\xee\x96\r\xcf.\x8a\xe2\x17\x14\x12`#\xad{\x11b\xa7\xc6FK\xff\xaf\xed\xbe\xa6\x88\xd9\x1a\x03\xf1\xe5\xf5\x8a&amp;\xef\xeb\x11\xb8\xc4\xc2\xcd8ȴ i\xa5\x90\x86\xc0\x9dl\x11N\x15\xc8\xe9\xf5c=\xd8\x01\xf0}8\xf3d\xe3\x1fˏ\xe7\xc1{_A\x01\xfc\xb9\xd8(\x1d\x8b\xe2l\xa7\u05f58c\x8a\x1d\x8bf\x97\xedv\xbb6\xa7\xfa\xf98\x1b\x8a3\x918\n\xe5\xeb\xf7\v%\x05\t0\xd25&amp;\xfa\xdd^\xf2fc\x19;\xb5,\xcbjYA\xbf\xc1\xcbRi\xb1\xf5\xc0\xddX\x9c\t\xda\x0e\x04\xc7ϥQY\xc7\xd9\xcarȚ\xf2\x84\xef\xb8~\xc6s\xc8\u007f\xab\xfe\x19c\xd0*\xcayo\xb5\xda]\x1e\x04\x18q#\x18u#\x18q#p\xc1bM\xba\xa6*֫\xdc\xf5\u07b2W0\xfb\xc8$\x0eO\x1f\xc6\xc4\xdc\x04N^{2N[{\x1a\x9e\xf0\x84&#39;A~\f0\xa7\t\x80\xfaI\x10\xf1\x01\xacl\x878P\x88\x1b7X\x1fx\x1cQv\u007fz\b\xe1\xb7\x00l\xed%\xaf\xbe\x1cH\ba\x1d\x1f.\xc8Q\xa2\n\x8a\xbb\x06b\xc3ʌFQ\xe1\x9b\xf7n\xdd\xf9\x91~xؿm\xb7\x00\xf8\x16\x80o=\xef\xaa\xf3\xaeJ\x92\xe4\rEQ\xfc\x9asn#\x80\xf7\xedݺs\x13L\x85Z\x00\x00 \x00IDATQ\x9c\xae\x1f\x12\x91\xc7\xd0ɴXQX\x818\xaa\xecȥ\x06\xb7\xe9x\xe3̂\x9dO\x05I\x84z\xd6\xc6\xf0\x0f\x1bR\xbd\x8e\xb5\x16&amp;7\x0f\x1ek\x1c!\x84\xff\x91\xa6\xa9\x8b#g.H\x16E\x81\x91\x91\x91\x05N$v\x90l88\x10\xe8f\a\x801\x16\xd8\aH\x96\xa1\x00\xd0\xee|\xbf\xa50գ]\x03\xb0fd\r\xec\xba\x14f\xd4 7\x02\x97\x96\x9b)]RO\xf5\xe3(p1lWI\x95?N\xeb\xe3(\xf2Xd\x0f\xe0\a~\x8d\x87\x85\xed\xb6\xc3v\xb0t{\x8aE\xb2\xb6[\xd7b,Y\xe7Qe\xcb\xc5\xff\x98Oկ*0\x00 \x87\x05b\x050\xa8\ueb5f/|\x81\xc4&amp;Hl\xa7C.\v\x8f\x1cm\f\v\xe7\xa8^\xb0\xe7Z\x92\xaee\x8d\xe0\x95\u007f\xfdN\xecHW\x83\xbcxHQ\xdfx\a,\xd4\xc7ة\xc6c\u2d7a\x12\a\&#34;(\x9f3\xc4P\x1fP߸\xd7+\xa3e\xfb\xa0&lt;h&amp;\x9c#GVd\xf0\xed\xc9\xf2\x1a\xb9\x85\x15\x83\xd1ξ\x95\xc6\xe1\x06\xee\xbf\xf3\xfb88y\x10@=\x83\x1e\x9b\x1dG\b\xf7\xc1\xdco\x80{\x80F\xd2\xc0\xe6\xf3^\x06\xd9X\x87\xa48Љ!W\x1e\a\xdb\xec8)\xd0\xf5\xce\x1d\xa2\x9d\xdfo{\xeb\x83\xef\xbc\xe1Ƴ\xaf[\x10E\xf4\xe5@\xd24}:+\x13G]\xbc\xa8\xf5\x86\x1c\xcdsT\x11}WҋF\x8fi\x10{ѷo\xd83\v\xe0c\x00&gt;v\xde\xdb/&lt;\xb7(\x8a\xef/\xe7:L\xb2\xbb\x98j\xfbv\xa5\x9c\xb9\xe4\xd5\x18\x1b\x17\xadY\x00]\xb0q\xe7l\x84?\xa7\xc4\xd9L\x95\x99H@~o\v\x85iW\x8b\x9ea\x97\xaaK\v\x1d\xf8\xa24Tc}\f\xe5\xff\x8a7/\xb1\xc3\x0f!\xd4\x1e\x19\x1a+\x1e\xd7r\x80\xfa\xde\x16\x0e\x0e\xac\xb5\xc0\xb7\r\xdas\xf3\xb5\xb1\xc5Ε\xafU\x84\x02\xfe[m\x8c4F\xe1_ (\x00X\x9b\xc3X\x83\x00\xe9&lt;\xd3\xc5T\xe7\x8c\xe9\xfd\x95T\xb9C\xa8\x9f0\xab\xbc\xeb|pd\b\xd4O|&gt;\x1a\x8d\xef:t(~ι1%&gt;\xffħ\x9f\x89\xb0\xbe^\x13ӌ#\x8e\xe4E\xba]v*\v]\x13\v\&#34;\xe4Y\xc1\xdc=S\v2\x0e\xa0\x9e\x19\xd2&lt;\x1c\xf3\xd9\xf2\xbd\xe6+\x0e\x804r\x8d\xbbo\xe2\xe6\x00\x86oW\x83\xac)\x1fi\xadM\x03l3\x14\xaa\xe2`(6xq\x10\xa4\xf3\xce\xebo\xa9\xfc\xe8\xf5\xf9d\x04\xa0\xde\b\x02,&lt;\vK\xf9\x8d\x83!\xa0~rn\b\x01\x85\x04̴gP\xfcS\x13\x0fO&lt;R\xcbBU\x0e:nn.)B\x81\u007f\xdb\xf5\x054\xf6\xa6\xd8\xfc\xe2\x97#\u007fn\tk\xc6k\x80\x9d\xa9\xb6\x86\xc7Y\xbb\x8e\x91!5\x0e4u\r\x17E\xf1D\x11y\x11\x80\xbbby\xf5\xe5@|\xe7aK\x8c\xef\xeaMx\xb0\x1c\x19\xe8\xe4r\x11Y\x17X\xc7p\x19\x11\xf9Njn\xdd\xf8~\x11\xf9\x9f;\xdex\xf7\xb2\x1en\xb2gˎ\xbd\xcb\xf9^L\xb1\x17\xe6E\x96F\xe3\x02\x16n\xc6b\xc5b\xa7\xa22\x887\x97\xe9\xc4j\x94\xc5\v\x9a#\x88\xf8(\xee\xa3Q穐ϊ\xb3 6L\xbd\x1c\xbe*\x12\x13+?;\x02U\xaa\xec\x9ef732\x06Y\x96M5\x1a\x8d\u007f\t!|GD\x1e\xb3֎\x018\x19\xc0\x19\xd6\xdasD\xe4\x15\&#34;r\xa6\xb5\x16\xed\xac\x05\xff\xef\x1e\x8ds\xd7 \x8c\x06XXH\bȋ.\x9e[\x98\xb2\xb8\x1f$`\xcd\tk\x11\xc4\x03\x0e\bi\x80\x18)k0\xae~f\x16\xf3\xc8c\xed\x17\xc2\xd2E\xa8\xdfW}M\xd3\x14y\x91\xc3\xf8\x85G\xccsp\x10\xb7a*/\x9c\xc9\xc5s\xc9\x0e:\x86\x13⌁\xe1\xb5\xc5\xc8\x1a[:d2\x021\x9c\xc6\x06&amp;&gt;\xf3\xacW\xa6\xa9\xb2X\r\x9a\x9c\x99@\xdah 錳\xd1hԜ\x85ޛ\xdb]{5\x1ep\xc0`m\xe7As\xcb \x03S\xc9O\x83\x00\x95E&lt;\x8f\xcc\x17\xeb`\x1c\x80\xe9g\x81n\x9b\xbb-,\x1e\xbe\xedAdEV]\xdf{\xdf6\xc6|\x11\xc0N\x00\a\x8d1\x87\x92$9)\x84pf\b\xe1l\x00\xaf(\x8a\xe2i\xce9̷\x9b\xf8ܿ\xfd#6=\xb8\x11\xa7\xbd\xf2\x89\v\xe0]\xa58\x90\xe7\xc0\x92\x031\xb6]\xac&#39;\x94\xad\xbe\x12\xcbu \xd6Z\u1cca\x989\xfe_\x15&lt;\xc6\xfc\xf9}\x8e\xa6\x00\xa4!\x84\xf7Xk\xdfs\xe1&#39;/\xf9\x9a\xf7\xfe\xd3\xd6گ9\xe7\xee\xbd\xe7\r_o\xf7\xc3\xdb\x00\xe9\xd3\xd6\xda{\x98?U\xe8 \xe1g\xc4ˉ\xdc\b\xa0\xe3S\xc5\xe0\x85ȑ\xa6N\x82\x8e_\x15&gt;\xcb2\xc0\xfb\xbf\xd6ϳs\xe2\x8c\x00\x00\xff\xfe\xe1\xd1\x06\xd01\xd2\xd5\xf7\x19\ag\x83\xc7\v!\xc6K9\xc2c\xe7\xc3\xd7i\xff\xfb&lt;;\xa4\u007f\f!\xfcY\x9a\xa6_\xdd\xfd\x81{\x17=\x0e\xfa\x05W_`\x8d1\x17\x89ț\x00\xfc?\x8dF\xc3\x16\xfb۰\xcfJaO\xab\x9f\xe4˼8㐷\xb2n\xf6\xd1,wl{u\xf4\xa9\x83Mlْ&lt;\x92\&#34; \xc0\xb8\xf2 K6\x84\xfd\x90\xb5\xf6\x01\x00\u007f\xcd\x1b\xba\xaa\xc0`\x14O\xb7־\x8c?ϲ\xe4\xec\xabs\xad\xea5\xdeD\xc9F\x10\x00|\xc3?\x92$ɿ\xb2\xc1\xe6\x00&amp;\x0e\x04\xac\xb5GͶ\x83t\x1b/b\xf8By\x8e\xbb\xf2\xf8&gt;\xcc?\x1bN\xad\x87\f\x9a\x8a\xa2\xa8\xae\xcd\x10\xb9\xb5\xb6z\xa2\xe4\xc8\xe8h\xcdA\xebZ\xd3q\xb1\\\x81\x0e\xe4f\x96\xef\xf0z\xed\xd6\x06\xba\xeb\x97\xd7:\xaf+\xbdw\xecp8\xb2\xd7\xf7\xee\xfb\xc4w\xd8h\xef\xb2־\xcf\x18\xf3\xcf{\xb7\xee\xecY\xac\x06\x80s\xafYg\x00\xac\x0f!\xfc*\x80_\xb7ֺo\xdc\xf7M&lt;\xf3\xd6g\xe0\xa9?}6F\x935H\b~cb=T\xddR=Q(6\xee\x1a\xd3\xf1td\xf1\n\x00\xbf\x1f\xf3\xd4\xd7\xcaZwˆ\x87\x8c1OS\xc5\xe7\xc8\x15\xa8ciJ,HU~\x8e(8\xda\xe2\xcfu~\xda\xd6\xda\u007f7\xc6|\xcd\x18\xf3U\x00_\xb9\xf7g\xef\x9a\xec\x87\xd7\u0560u\xb7lx \x84pv\x8c\xbb\x02\va&lt;v\x9cq\x96\xc2\x11\xb2s\x0e;\xdex\xf7@[[\xce\xff\xbb\x17~.I\x92W\xe9\xd1\x0f\xbcّ\xe1\x10\xee c#\xc2Q\x12\xc3j\xaa\\&gt;x\x84\x9d\xb9\xbew/\x80\xff\xbew\xebί/\x95\xcfs\xafY\xf7\\\x00\u007f\xe2\xcbg\x80 \xbdh\xb4v?\xa0\xdejȼǭ\x86\xec\xccu\x9c\xea\xfc\x93F\x02\x97:\x04\x84\xfb\xefy\xdd\xd7\xcfY\x89l/\xb9c\U000eb735\x9f\x8b\x03(\xe65&gt;(\x12Xx\xb2\x01\xe3\xe4\x9dk}\xfe\xae\xcdw\xbcj%\xbc1m\xbc}\xf3\x06\x81\xdc\xcd\x06N\xf9`\u074c3R^\x9f*\xdb\xc8\xe8}\xe5\xae\xcdw\xfc\xf8\xa0\xf8\xac\xf8\xbdc\xf3W\x00\\\x06ԍ\x1c\xd0-\xdesc\t\x004FF\xe0:\x0e\xc69Wk\xa0\xa8 \xa3G\xfd\x8b\xfe\xe9e\u007f\xff\xad\xa5\xf2\xf3\xda/\xbf\xf1\xe7\xfdi\xfe\xef\xe2\x93\&#34;Ա\xc7u9\x8e\xfc9#\x8a3N\xed\xbeL\x9c\xc3\xc4\xdf\x1f\xc2\xd8\xcc8Dd\f\xc0[\x01\xfcݾ\xebw-\ts;\xef\xed\x17\xfeX\x9e\xe7۬\xb5?\x99\xa6)\xce&gt;\xe7\xd9\xc0\xc62\x03]\x93\xaeAäH\x90\xe0\x84\x91\xb5H\x90T\x0fʊ\x91\r\xd5\xe7\xf8\xa8\x1d\xe6\xbd3n\x11\x91&#39;\xdfx\xf6u\xb5\xa3\x10\xfa\xca@\x8a\xb1\xdc\xd9\xd4\xc1%\x16y\xc8J\x8c\xbaQ&gt;\x0f\xc1\xa6\xbd\x1f\xb2\xa2\xc2\xe5\xf4\x8d\x17X\x1c\xa9s1\xdaZ;\&#34;\&#34;\x97\x02\xb8\x14\xc05!\x84p\xe1&#39;/\xd9a\x8c\xb9\xc3{\xff\xc5$I\xbet\xcf\x1b\xbe\xbe:\xe7K\xf7 N\x9b\xd9K\xf3\u0600\x85\x9dB\x1c\xb9\xb3\xf1\xeb7\&#34;^\n\xad\xbbeè\x88\\\xaeF*&gt;\x17\x8ayV\xe5\xd1n!\x8e\xac8:\xd518\xe7 A\xe0\x1ep\b\xc8\x11B\xf8$\x80_ٻugs9\xbc\xeeݺ\xf3;/\xb8\xfa\x82W\xa5i\xfaޢ(ޙ~7Ex\x81,\x88\xee\x80z\x17\x89\xc2|\x9c\xc9q\xf4\x17\xc3O\b\x80o\x0f\xb6{\x88#\xe1\xcaQQw\x14\x1b^\x86\x14T\xce*\xd7x\x9c\x83\&#34;\x1f|\x951pF̺Ɏ,\xc6\xdbـ\xf0I\x05\xab\xa1\xb3@\xbdê\x96A\x90#ֶw\x85\x94\xe6\xe7\xe6\x16ԕ\xd24\xad2\x16\xeb\xeaOv\\*\xc5ȉ\xbe\x06\xd4\v\xdc\xcaw\x1c\xbc\xf0\xbcs\x94o\x8cA\xb1\xc3\xe3\xf0\xf4\x18\x00\xec\xb7־zϖ\x1d˅\xee\xbf{\xee5\xeb^\x13Bx{\x9e\xe7\xef\xbf\xef{\xdf1\xcf|\xc6s`\x9ff1\x97\xcfa\x0e\x9d\xe0%+\xe7.\x81\xc3\xda\xc6Z\x18o\xb0&amp;Y\x83\x86m 5ݓ/t\\\\\xf3b\x94ED\f\x80\x9f\x00\xf0\xb7\xccG\xbf\x10\xd6!)\u0099E\xd1I\xcdL\xf9\xa0%k-\xf2\xd0ٍ\xee,`\r`\x046\xb1𡀷\x82\xa4\x91 \x0f\x19\x8c\xb3p\x89[ p\x15:\xd7K\x00\xc4\x03\xb3!\x84\xf5\x00\xd6[k\xdf\xe6\xbd\xff\xbc䯭\xb5\x1f\xbb\xe7\r__\xd6\x04,\x858\xd2\xe4\xc8\x02X\xd8T\xa0)8G\xf1\xbd2\x96Uh\x8b\\o\x8cY\x13Ä\xcag|\u007f\x91\xf2ќ\xcaG\x1c\xdd\xc7\x06R \xc8&#39;Z\x00\xf0Qc̛\xf7lٱ\xa2\xaaj&#39;\xe2\xba\xf6\x05W_p\xb8՜\xbb192\x82\xe4G\xba\xcf@\xe9\x05\xbf\xb0AT\a\xc9\xd0\n;hu6\x83\xc2\xeeCV\xc0\x8d4\xca\xe7E\x90l\xd9@p+\xae\x8e\x01\xe8vlqƽZ5\x85\xc4&amp;%\x84\x17e\xc1\fEi\xa1W\xf9֮&lt;\x0e&gt;x&lt;1\xba0HR\a\x10\a\x93܂\xce2\x8b\x1d\x87\xfe_\x14\x05\x8c\xf7ȳ\xb2\xa6\xb0\xdc\xc3\x14My$Rm}\xb3c\xd3{ǻ\xccYה\xb7\x05\xad\xe5\x85\xe0?v~\x1b\&#34;\xb2\xd7Z{ٞ-;\x96\xf4\xf0\xa6\x98\xf6n\xdd)\x00&gt;\xf0\x82\xab/\xf8\x1e\x80\xff=\xfeՃ\xf6\xf47&lt;\x05 \xa7\xaf\xf7\xce|\x8e\&#34;\x9b\x81\xb5\x16\xd3\xd9L\x05\xf3\x8d&amp;\xa3\xd5\xf1\xf8#R&gt;sŠ\v\xbf1Ҕ\xa6\xe9\xcb\x109\x90\xfe\xb4x\x12?\x88\xa3\xe9\x18+\x97 \x80\x17\xa0\x00\xa4\x15`\xda\x06\xa6\t\x14\x939\xc2T\x00\xa6\x04\xd9X\x1b\x98\x11\x84\x19\x8f0\x17 ̀\xd0\x0e0\xa1|\x8e\x86FMq\xe4\x16\xb5\x94\xc1\x18\xf3\x14c̻B\b\xf7\xad\xbbeç.\xf8ċV\x04O\xf4C\x12M\nP\xaf\x19\x18czv`0\x14\xc3\xceg\xd0\xc7C8\xe7\x9e\x12;5vn\xba\x1b\xb9\xd7{\\h\xe3\b\x8aq\xdc\xfc\xde\x16B\b\xdf\a\xf0֕:\x8f\x88\xfeLDn\xcf\xefkU\x06A\x8d\x1a/\\\xfd\xcd\xf0&#39;\xd0ť\xe3z\x1c\xd0=\x98\xb0\xdf\&#34;\xfa\xd1(\x9f\xc81\xf7\xe8,\xdac-\xb4\xc6[\xc8&amp;\xdb\xf0\xf3\x05B;\xa0\xc8\nXS\x1a\xe78\x92\x0eT\x8c5\xc6T\u007f\xc7m\xa2\x83\&#34;\xc1\xc2V\xce8\xa2\xe4s\xe9⚘\xfe\xd6bv\xbcwe\xd0\xc4Y\x8e\xeb@R\xf1&lt;\xf3\xf1\xf6\xbc\xc6\xf8D[\xd5\x1dθ\x96C*?\xa0\xde\xf0\xa2sƐ\xae\xbe\xa6\x9f\x05\xeag\xc1\xe9\x9a\x0f!\x00\&#34;8\xf2\xa9\xc7\x00\xc0\x1bc~\xf9X\xfbޖB\xfb\xae\xdf\xf5\x0fƘ\xab\xa7\xe6\xa6`\x1eDup#CPlSU\xbey\x91c&gt;\x9f\xc7T&gt;\x8dC\xad\xc3x\xb8\xf9C\xfc`\xee\x01&lt;8\u007f\x00\x0f\xcf\xfd\x10\x13\xf9$f\x8b9\x14R\x05kό\xef\xdd\xdf&gt;\x90\xa9\xe2\x11s\xca\xc2\xed\xf11\xfe\\1\x16=\x13\xa2\x8a\x10\x8cAy6S\xe7\x99١\xfe\xb8Mk-2\xdb.+3\xa9@\f\x80\xce32|Qb\xdaA\xbaim&#39;B\xfa)\x11\xf9\xc9\v?yɍƘ\xf7\xdd\xfb\xb3w-Z\x84Z\t1\xf6\xa9\v.\xce4\xd8q\xc4\x10\x10G\xa0*\xc7A\x92\xf7\xfe\f\x00\v\x8c\xbf\xb5\xb6z\&#34;\x19g\x17\xfaY\x8e\xb08b\x06\xea\x05v\x00\xd2Q\xfc\xf9A\xf2\xbd\xef\xfa]\xe1\xdck\xd6\xfd\xaa\xf7~\x8f\x8cɉɓ\xbb&#39;\x02\xf3x\xb8\x1dUy\x8d\xeb\x11\f\xdb\xe9\xe7uѯ\x94*l=\xa7\xfd9\x99Ԝ\x80\xb1\x06\x85\xcba\x9c\xed\xec\xd6O\x00\vؤ\xcb+w\x10\xc5m\u0383\xa0 \x01\x89I*}ձs{n\fm\xb1\xacX\xa6\xab\xa9\xaf\x15\xbf\xa1{\xaa\x03\xbf\xc6\x193;9~\x82&#39;;DδJ\x94dy\x8eyL\x0e!\x9dj\x00Ơ\x91\xa6\xd5q\xfa@y\x9e\x18?͑\x9f\x84\xb9\xe0\xfe\x84\xaeXk!90&gt;;\x0ec\xcc\xfb\xf7]\xbf랕\xc8l\x11\xfa\x13\x00\x1bZ\xbbf\xdep\xc29\xa7\xd6\xd6y\f\t\x03X`\xbf\x19\xfa͊\x1c\x19r\xcc\xe6\xb35\b{č&lt;#\xbei_R\x16\x91\x1d\f\x85(s\x8c\x8b.\xe8oG\xbdUT\xbf\xab\f\xf3\xf5\x18\x9f7b \x85 \xb4\x02\xb2\xe96\xfc\xacG6ц\x99\x05\xf2\xb1\f\xf9X\x86l&lt;\x83\x99\x03\xc2l\x80\x9f\xf3\x90vhH.\xef\xf0Yq\xf7\xfa[7-\x18\xe4\xa0(v\x14,\a\x8ez\x18\x93W٬\xe6\x81t\x1d:\x8f\xe5˽\xf0\f\xa1\x00\xf5MQ\\\xd4U\x9e+c\xa9\x06\xfb?\x00k\xed\r\xfb\xaeߵ\xe4\x82y?\xb4w\xeb\xce\a\xd24}\x9b?\x90Ղ\tVr\x86\f\xe2n&#39;\x86\x10\xb8%Zuu\x10p!/\xb0\xb8\x9e\xa1&lt;\x06\x1f`\xbc\x81\xb4\x03\x8a\xd9\x02\xd9d\x1b\xed\xf1\x16\xe6\x0f\xce#\x1bk\xa3}\xa4\x05?\xeb\x11\xe6}\xe9|2\x8f\xd5(-\xb0a\xe0z\rg$\x8c \xf0\xff\x9cݱQ\\-\xfd\xe5H\x9e\xb3\xca8\x8b\xeb\xb5\xee\x16\x1b{\ba\xd9gw\x85PvH\x16y\x8e\x99\x99\x19LMN\xe2\xf0\xe1\xc3\x18\x1f\x1f\xc7\xf8\xd8\x18\xe6\xe6\xe6\xd0j6\xd1lv\xcb\u007f,K\xe6\xaf&amp;\xd7\xdd\x01\&#34;\xb2[D\u07bb,ƎA{\xb7\xee\x94$I\xde\xfe\xf0\xf8\xc3y\xe1\xbb\xcd3\x9c\xa1\x01X`\u007f\xe3̝\xeb\xbd\xfa\xfd\xf2\x0f\xa0\x1d\xdaO\x8a\xefۗ\x03\xb1\xd6\xde.\a&lt; \xf5g0\xf0b\xe2\xe2\vG.\xcc\x04G\x90\xfa9\xceV\xd8\x003\xdeXSd\x97\xc0\x04 d\x01\xc8\x04a\xde\xc3\xcfx\xf8\xa9\x02\xf9\x91\xfc\x05\xf9X\xf6\x8d\xf3n^\xbf\xb1/\xa9\xf7I\x9cy\xc4P^\x1c\x05\xf7\x1a\xffb\x10р\xe9\x19\xfa\a+\t/&lt;\x95\xbf\xf2\xa1P\x11;AV8k-\x8c\xb5ȧ[\xff!\&#34;\xef\x1e4\xc3L\&#34;\xf2\x17ƚ/\x15yQ\xd31\xe5\x83[ku\f\xbcHԩ\xe8g5p\x19T\xbd!\xdep\xa7FO#`\xe5\x83k/\xb5\xe0\&#34;\x94\xf0n6\xdbF{\xba\x8d֑&amp;\xb2#m\xcc&lt;&lt;\xb3bޘ\xac\xa9\xc3Q\xf1\xdabb\xf8\x8f\xa1b\xa0\xfe\x1c\x89A9\xe1\xc5HDj\xcf0\x01\xba\x8e\x9a\xe5Νm\xca\u007f\xac\xe7U\xa6\xbf\x82\xb3\xbb\x18\xf6\x8c\xed[\xbb\xd5\xc2\xcc\xcc\f\xa6\xa7\xa60v\xf80\x0e\x1f:\x84Ç\x0eaff\x06s\xb3\xb3h6\x9b\xb5S\x85\x95\xc7\xe9\xfbǂ\xb5\xf6\x97\xf7]\xbf\xeb\xe8\x0f\xb5_\x01\xed\xfe\xc0\xbd\x0fXk\xff\x12\xd3u\xa8\x8f\xb3&lt;vv\v\x82w\xaa\xe7(\f\xc6\tC\ba\xf45\xfb~\xb6\x16I\xf4\xb5\xb2\xf6l\xd9\xf1\x80\xf7\xfe\a\xd6՟2\xc77gC\xcf\xcf\x1b\xe0\xcd=q\xd4\xc6\v\x9f\xa3^N\v\xe3HD&#39;G\x95\x9a\xa3\xa6\x8e\x91y\x92\xb3\xee\x8b/\xf8\xe0\x85\xe7\xadxF:\xc4\x06\x8b\xa3\xba8\xbd\xd7I\xe1\xa8T?\xc7-\x81\x8c\x93\x0f\x8a\x9csOb\b&#39;^\x8cJ\x9c-i\xd7E\fc\xf1u\xc4\a\x00\xf8\x9b\xbd[w.\xediVK\xa4=[v\x88\x88\xfc\x99\xae{\x9d\xe7xw2\x1bB\xd6\x1d\x8e\xfa\xe2\x831\aᬵ\xbe\xc1\x05\\uP|\xfc\x06w\x1a\x1e\xad\xf6\xb2\x12\x9c\xfeh\x14\xa4\x1e\xa4pA\x9c\x8d\x1a\xcb$\xfe\f\x1b\x9a\x18z]-\x8aa\x14\x95/\xef\xa7\xe2\xcf2|\xa5\xc6n\xb1\xa3\xe9\x97B\xbc\xce9\xd3U^bǢ\xeb\xa9\xd5l\xa2\xd5jazj\n3\xd3\xd3\x18\x1f\x1b\xc3\xf8\xd8\x18&amp;&amp;&amp;0=9\x89\xb1\xe9\xf1;\xf7nݹcٌ\xf5O\u007fe\xa6\xeb\x1b\x90\xd9\t2\xc5vM\xf5%\xce\x00Y\xdeI\x92\x9c\xce\xd7\xe8;43\xc6|\xa8\xb8?\xab\x8cQ\x9c\xfa\xb0\xb7cLP&#39;\x97\x9d\x8d*\x83~\x86\x8bR\xfa\xf9^8=_7\xc6\x1c\xf5\xef\xceg\xd7:\xe7\xfe\xe1\x82\x0f\xbd\xf0\xd4~\xc7w4\xb2-\x03?\xe7\x91\xcff\bYyX]\x91\x17\v\xd2Aδؠ\xf1{j\x84\x06\r\t\x14E\xf1\x84\xb8\xfe\xa1\xb2\xeb\xb5 \xac-kU\xb1\x93\xe3h?\x84\xa0\xe7T\xf5\xf5|䕒\xf7\xfe߬\xb5m\x8e\xf4\x81nG\x16\xcb4\x1e\x9f\x1a&gt;\x86B\xf4\xbb\x830\xd4q\xa1\x9eOXЧ\x15\xc6\xf5%\xe6C\x1d\n\aO\xacσ\xa2\x90\a\xa4IZ\xddC\xf9T\xec\x9e\xefY\xabM\x12\xcfi\x9a\xd6\x0e\xdeT\xfeW\x8btnYoUޱ\xbc8\b\xe3L\x8b\x83Օ\x12g\xb9\x1c\xa4h\x91\x9f\rl\x9c\xfd\xa8\x1e\xaaSγ\f\xadv\x06\x18|j \xcc\x1d\x83B\b;e^\xa6\x95\x1f\x1dG\x96e\v\x9a&#39;8\xd0P[\xa0\xfa\xa2\xef\xe9\x0fP\x95/\x9e\xcc\xf7\xeb[{E\xe4#Ƙ19\xd0\xed\x94\xe1ݠq\x14\xa8\x91\x99zm\x15|\x1c\xa5qT\x17G\x9a\xeaH\u0603\xb21`\xef\xcaE\xb5\xce{\xcf\x16\x91\xbf\\\xe1|\x00\x00|\xb3ĭM\xcb\xc0O\x15\xc0\xb4@&amp;C\xf93\x15\x80YA1S\x00\xad\xb2vc\x83Eb\x1c ]G\xa7\xe3\xd21\f\xa23\x88ID\x8c\x1a\xfe\x1a\x04e\xba\xbb\xea\xb9\xd8\xc8\xd9\x12C\x861\x94\xd0n\xb73\xe7ܷ\a\xca\xec\&#34;\xb4\u007f\xdb\ue588|\x9f\xf1Z\x86\xaa\xd8h\xb0\\Yg\x18\xe7\x1f\xa4\xd1\xe3H\x98\xaf\x9b\xd0Ù\x94\x1f\x0e*\x94\x18\x06Y\xcdh\xbe\x98,\xbbŚ\x8f5\xd1\x1eo!\x9f\xca\xe0\xe7=laP\xb4\n\x04\xbf\xf0\xb1\x04,;\r,\xd4\xe8\xb0a_\rR\x03\xad|(\xf1\xfc\xb11\x03\xea\xba\v\xd4\xed@\xf5\xfde\xb6\xf1\x02X\x800\xa8|\x18\xfd\xe0\f\x8f\x11\x18\x866\xf5Z\x1dy\u007f~\xd9\f-\x81\xf6o\xdb\x1d\xcc\tf\x1f\a\x8b1BĶH\x03\x05\xde\x00\x19B\xa8u02|\x1f|\x18\xe1\xfb\xf5\xad\x15\xfb\xb7\xed\x9e\xf3\u07bf[D`;\xe7\x81\xfa\xa2\xfbHI.\xbepԧ\x93\xcd)?\x1b\xaa\xb8w\x9f\a\xc8\xe93/\xdc8\xa3\xd1\xfb\xb31\xec|\xfe\xbf\x9ew\xd3\xfa\xf5+\x98\x8fj\x02\x98*/\xee\xcb\x16Nm]\xf6s\x1e\xc5t\x8e0\xed\x91\x1f\xc9!\x93\x01\xf9x\x06?Y\xc0\xcc\x03\xf9t^\x15P1xHY4\x82\x88\x17&lt;G\xa3\xbd\xa2;}\x8de\xa8\x9fO\xd3\xd4\x0f\xb8m\xf7X\x94\xa9^0\xfe\r\xa0\xb689(\xe1\xac+\xa68\xf3Z.\xe9\xde\x04\x8er\x19J\xe5̈\r\f\a6\xac\xb3|V\xd6j\x90\x01ʎǖ\x87\x9f+Кh\xc1O\x17\xc8\xc6ژ{t\x16\xf3\x87\xe6\x90M\xb6\x91Mg(\xe6s\xa0@\x95U\xc7-\xaa\xc0``\xc0^\xa4\xf3\xa8\x01\x0eg\x1al\xc0\x95\a\x8e\xf2\xf9\xb5\x98G=\xbdx\xa9\xc4\x198\xb7\xde3\xec\xdb\v9\x01\xba\x8e\x8eaz\x00\x10\t8\xe1\xccS\x8ez\x8a\xf2 \xc9&gt;\xc9e:\x8f̧R\xdc\xfd\x17\u05ee\xf5\xc8&amp;\xbd\x06g3\xa6ejP\xf6\x92\xc2\nk\xedG\x01\xfc\x8d\xf7\x1e\xe1\xc1\x02v\xde\xd6\x1e\x14\xd5\v/唔\x9d\x04\x17lb\xbc\x98qX\x00\v\xf0&lt;\xfd&gt;;\x95\x91\x91\x91jSY\x04\xe5\xbcg)c\xecE\x1cU\xc6\xc7N+\xef\x1c!)OޗO\xfd\x93B`\n\x03\x9b\x1bH\xb3\xdc\a\xe3&#39;\a\xbe\x91\xder\x1aώ\x9c\r+\x1b66^\xbc yA\x14E\x91\\\xf0\x89\x17\xad.\x00N\x14Bpl\x84\x95T\x8fT\xb1\x95\xd4\xe1i\xc0\xa1\xdfc\x18n\x10\xd9\x1eװ\x80\xfa\xa6\xb2^p\xaeʘ\xb3k\x0e\x98FFFV\xa7\x06BN\x8d\xa3e}OD\xf7l\x01\xf9|\x0e?_:\x97\xf6\x91\x16\xb2\xb16\xe6\x0f\xcea\xee\xe0,\x9a\xe3\xf3Ȧ3\x84V@\xd1ʑ\xb5V\xa7\xf6ˁ\v\xb7\xbb\xc7\xd8&lt;\xc3k\x8bes\x9cY\xad\x948\vџF\xa3\x01\xa0\xbbF\x94\x17\xb6\x0fq\xf1Z\xf5#\xb9(9e\xc5L\xf5I-i&amp;|\xfeZ܍ș\x1b7\xac\xf4\x1a{\x8c\na{V\x8bƖ\xe4@\xf6n\xdd)!\x847\x1bc\xbed\x8c\x81\x1f\xcf!\a&lt;\xd0\xee\b\xd5\xd8\x05\x9eM&#39;Y\x8d;GȜA\xe8\x80┹\xc6&lt;\xba0\x86N\f\xb7m6\x1a\x8dZ\xe4\xd4\x11«Ͽ\xf9\xe2g-e\x9c1\xc50P\x1c\xf5\xaaB\xeb\xc40\xd4ƛ!5r\x8e\x9d\xec \xc8\x18\x93\xc7i&gt;+\fgi\f\x11q\x8d$\x8e\xfc:\xe3J\x93$Y7Pf\x17\xa1\v?y\x893Ɯ\x13+/G\xa2\xaa?l@\x18\xd3\xe7\xc5\xcb\x11\xffJ\x89\xe1G\xa0\xbe\xb91\x8e\x96\xd9q\xf7ʮ\x192\\\rh\x88\xa1I\xbe\x17\xbf\xcf|\xb1\x11t\xd6\xc1\x19\x87\xd0\x0e\xf0\xf3\x05\xf2\xe9\f\xc5T\x81bbu\x0eS\xe4\x00G#\xfe؆\xe8\xda\xc9\xf3\xbcּ\xc3uV\xb6\x13ι\xe5\xefD\xefȂO\xa7V\x87\xa4\xc1\xae\xae-.8+\xcf|\xd8j\xa4+/Y\x16CK\xa4K\xb7_a\xa6&amp;&#39;\x9f391\x81Ç\x0ea~n\x0e333(\xf2\xbc\x82&amp;\xd9I\xc7\xd9y\f\xc7q\xc0\x04\x00\xdf\xfb\xe1\xf7\x1b\xfc\xf9%k\xef\xfem\xbb[\x00^!\&#34;ۀN\xbb\xdfc\x1e\xc5\xfd\x19̡:$\xa2\x91\xa02\x16\v\x9b\x17\x1f+&lt;\xb0\xf0H\xee\x1a\xd3\x14e\xe8\xc3{\x18\xfbgat\xee\xf1\U000a5393\x89\xa3ZΜbG\xc7\xe3e\xc3\xc5ІFY\x83&amp;\x99\f\xe3f\x16\xd5.\u007f\x97\xdb\xf2q\x9b\x85@\xbcTY\x92\xf2˵\xa3^\x06N\xc7\xd0\xf9\xfck\x06\xcepo\xba4I\x92\x93t\xd7&lt;\a\x14ʏ\x12g\x1b,\xe7\xd8\xc8\xc7E\xf5\xe5\x92\xde&#39;\x9e_\xbe_\xbc!.\x867\x80\x85&#39;\x1e\x0f\x02^\x8bI\xf5\x8d\x8356|\xbc\x0e\xd9\xd9\xc500끈\x9c0pFK:\x91\xa3\xe08\xa3\u0ff9\xc1&amp;v:\xfa7\xb0\xb2\xa3\xe7u\xec|\x12\x82\x06~1z\x12C\xf6q\xd6\x11\xc9\xfeu\xcbfj\tT\x14Ņ\&#34;\xf2Dͼ\xb3,Cs~\x1eSSS\x98\x9d\x99\xc1\xd8\xe1\xc382&gt;\x8eɉ\t\xcc\xce\xceb~n\x0eEQ\xa0\xd9lւ\xae&lt;\xcfk\xe7\xcei\x82\x90\xa6i\xed\x99D˒\xf4ޭ;\x8b\xfd\xdbv_-\&#34;\xaf\xb7\xd6\xfe\x87\n\xabhf0\x0f\v\xfc\x039\xfc\xfd9l\xa8\xd71X\x91ِr\xa6\x12\x17Ҹ\x10\ft#A5 \xaa@\x1cUq\x1a\xdfQ\xc8\x159\x10\x8e\xe8\xe2\xe3\xeacL\xbc\x97\x12\xf5ʞ\x06\x8d}\x87\x10\x1e\xf3\x99\x87\xf5\x16\xd2\n%\xb6=\x9d\x97G\xc7Lz\x98)\x00\xd3\x02?Y@fˍn&amp;\x03\xac\xb7pp@\xe8&gt;|\x86\x9dKG\xa1~\xfe\x82O\xbch\xd5wB\x02xS\x9c]\x02\xa8a\xe3:\aZ\xf8댽\xf6Y\x9d\xafA9\x0f\xa0\v\xa1\xf1^\t\x86\xc7\xd4\xe8p֣|\xa9\xae0$º\xbbZ\x14;X\xa0kp9\xabg&#39;\xc2\xfcFY\xcb\x13V\x87G9Me\xd2\v6\xd2\xd7t.\xb9\xbdW\x03\x06v\xd2+m;f;\xc4\xf8\u007f\x92$\xb5\xfa\a\a\x85@7X\xe1Ca9\x90\t!\xbc\xf6\xd2\xedW\f\xa4+\xf4h\x94\xa6\xe9\x9bX\xdf8 g4$\xcb2\xb4\x9aM\xcc\xcc\xcc\xe0\xc8\xf8x\xb9a\xf2\xd0!\x1c\x19\x1f\xc7\xf4\xf44\xb2v\x1b\xadV\xab\xaa\xfb\x85Pn\xce,\x8a\xe21\xbeߊ\xf2\xe7\xfd\xdbv\u007fZD\x9e/\&#34;\xbf\x0e\xe0!\x11\xe9n\xf5\xb7\x06\xf9\x816\xe4@&#39;;9\u0099Fɐb\x8al08\x8ac\\;\x8e8\xb83\x80\x8d\vGv\x84\x83\xbfx%㌍\x13\xc3Sl\xac\xf4\xe9i\x1c\xbd1&gt;\x0ft1\xdfA\xb7\xf1J\x90\x878\xb5\x8fa \xef=\x10\x00x\xa0h\x16\xb0\x99A{\xb2\x8d0㑍\xb7\xe1&#39;\n`J\x90\x1fɑOd\xc8&amp;ې\xa6@Z\x01E\xabx\x0e\x02~q\xa0\fGtѭ\x1b_\v\xe0\xe7\xf4\u007f]\xc0\xfa\xc3\x0e\x97\xc7\xd5k\x1f\x8b\xca;\xcejWB1$\xc8-\x9d@\xf78l\x8d\x94\xf9\xf3l\xa8\xd9a\xacF\xf6\xc1\x0e\x8a\xd7\x15\x1bE\x86z\xb8\xce\xc0\xfcr\xf6\xd7\xe1\u007fU\x1cH&gt;\xd6~\xc2\xfccs\xc8&amp;\xda\bs\x1e\xf9\\\x0e\xdf.\x1fs\xcb&lt;\xb2\x1d\x88\xf7{0\x14\xee\x9cC\xbb\xdd^v}\x89\xf7\xf4\xe8\xf8\xf9^|\xbfx\x1dǎCe\xd7y\xb4\xc2I\x00\u07b9L1\xf5E\x9b\xee\xbc\xfce\&#34;\xf2\xeb\x9a1)1$\xad\xfcs\xf6ę\xaa\xf7\xber,\xd3SS\x98\x9c\x98\xc0\xf8\xd8\x18\xa6&amp;&#39;199\xe9\xf7o\xdb];*j\xc5\x00\xec\xbe\xebw\xe5{\xb7\xee\xfc\u007f\x01&lt;\xcb9\xb7\xd9Z\xbbMD\xbeÆ\f\x00d\xae,\xbc\xe3\xa1\x009\x10\x80\xc3u\x83,\&#34;\x95\x01fH\x8a\a\x1eGM\xecT8\xad\x04\x16\x1c\x1ex\xfa\xf97_\xbc\xa2\xb1*.ʩ\xa9*v\xdc\x19\xa2\xbcr\xe6\x15GÃ\xce@\xec\xa3v\x0f\xf3Î\x8e\x9d\x18/6}\xaf2\xc2&gt;@\x8a\xb2\r\xd9\xe4\x06\xa6\r\x143\x05\xcc\x1cP\x1c\xc9\xff༛֯\n\x8cqѭ\x1bO\x17\x91\xbf`H&#39;\x863c\xfe9{U\xa3\xa2\xef\U00061703\x82\x89bh\x853\x0f\xe5M\x0f \x04\xba\xf5\x9a\xb8~\xc7\x1d0\xb1a\x1a\x041\xb6\xad2T\x1eb9*O\xfa\xbd\xb8) 2,&#39;\xaf\xbbe\xc3\xe8 y]wˆ5EQ\x9cd\xa4l1\xcef3dSm\xe4\x93\x19\x9a\x87\xe7\xd1&lt;8\x8f\xd9Gg\x90O\xe5\xf0\xb3\x05\x8a\xb9\x02y3G\xc8}\xf9\xe4@\x82`\x81\xfa\xeeug\x977\xe7\\&#39;d\x1d\xe2yd\x1d\xe4c\xf39+\xe6\fXO@\xf6\xde\xffΦ;/_Q=v1\xdax\xc7\xe6SP&gt;\xe6{Q\xbb\x19\xa3;&lt;\x8e8[6\xc6T\xa7\t\x03\xe5&gt;\xa2|&lt;[\xf0L\xa6\x81U\xf0\xf6]\xbf+߳eǝ\xfb\xae\xdfu\xf5ޭ;\x9f\x17Bx\xb6\x88\xfcN\x9e\xe7\xff*\&#34;\x99\x1a6\xdd9\xea\xe7r\xd8G\x80\xe2\xfe\fr\xa8\x9c\xa4\&#34;\xefzM&gt;Q\x92&#39;\x903\x8f\xb8_;\xfe\xad\x023\xe5\vˎ\xa0xQ\xa9B1/\x1a\x850N\x1a\x17\xd6t\xb2\xe2\xe7t\f\x8cB8\xc8\xd1e\\\xbc\x8fSj5\xac\fǰ\xb1\x89\x15\xceZ{\x16\x80\x8f\x9dw\xd3\xfa\x81wd\x85\x10n\xf6\xde?\x89!\&#34;\x96\x8f\xf2\xc1\x9b\xf9hn\xab\xcf\xc6N\xb3W\xedd\x05&lt;ֺYX\xb6\x8a\x97+\xef\n\xb9\xe9\xc2d8\x86\xb1u\xe5\u007f\x90$\&#34;\xf3@\xf7\xd9;\xfa\xb7\xdeKaJ\xbd\xaf\x8eI\x1d\f\xff\xa8\xdeҹb?:`^\x9f\xc3\xd92Н\xebJ\xf7\x02\x10\xdaefR\xcc\xe6(\xa6r\xcc\x1f\x9a\xc7\xcc#\xd3\xf0\x93\x05\xf2\xc9\x1c\xf9t\x86|6C\xdȇ5\xdb00(\x1e+\xe6\x96\xcb\x17;ZF9:&lt;\xd7`ʸv\xc4-\xb3\xec\x9c;\xaf\x8f\x00\xf8\xf4\xc6;6\x9f\xbc\\ގB7\x02x:;\x00\xa5^\x0e\x90\xd7P\x1c\x98+qW\xab\x88\xc0~\xcf&gt;\x14\xdftuv\a\x01\xd8w\xfd\xae\xfb\xf6]\xbf\xeb\x83\u07fea\xcfO\x88ȏ$I\xf2\xfa\x10\xc2G\x00Ԟa\x1eB\x00Z\x01\xe6a\x81\xb1\xf5\xa3M8\xf5\xe6\xc9\xe0\xbf\xd5\x10\xc6\x1d-&lt;ᝅSۂ\xbf\x14\xe2\b\x8e\r\x03\xdfG?\x17\x17\xcf\xd8\x11\xea\xff\xaa\x98\x83\xa4\x10\xc2A\x9dh\xde%\xcdNE\u007f\xf3\x93\xe6:\xdf]\xb0\xf9\x89#)2\xd0oH\x92d\xa0i\xf8\xb9\x1f\xbd\xe8\x17\xd0\xc2\x1bLV\x9enkBy\x8e\x91f{@]ᕗ\xaa\xeeF\xc5\xf6xN8KY)\xa9&gt;\xaa\xf1e\xdeb#\xc3\xd90\xe3\xf9\fu\xf2\x02\x1e$\xb9\xfdv\xca\xd9:\xec\xc7NB\x1d\x02\xaf#\xae)r\r\x80\u007f:\xe3\xbbz\x90\xbc&amp;Ir5\xf3\xc5N66̱\x93K\xd3\x14Y+\x83\xf1@{\xa6\x8d0\x1f\x90M\xb4\x91\x1d\xc90\u007fp\x0e\xd9\xeeֲ\x0e\x19c\x98/\x0e\xf8b\x84A\xa9W\r6\xde\xd3Bk\xf0\xdc$In\xbb\xe4\xf6\x97\x0e,\x9b\xbf\xe4\xf6\x97\xbe\x0e\xc0\xafp\x90˙n\x9c\xf1\xc6g\xc5ŁV\\;3\xc6\xc0:\x87\xc9\xc7\xc6\x0e\xc4\xf7^2\x10\u007f\xee\x9f_\xf4\xca$I\xee\xd8\xf9\xe6o\xf6}6R\a7\xfbt\xe7\a\xe7^\xb3\xee\tƘ\x8d\xde\xfb˒$y\x9d\xf7\xfe\xb9\&#34;\x02\x1c\xf0\bg\x99\xea$M\xc6\x1fc\\6\xa6\xf8\x8c\x1a\x9e\xf0\x8e\x82.\xfb\xd4:\x9d\x10\x8e&lt;c\x85\x89a\x02\xfd[kB:\x1e5փ&amp;k\xed\x0e3e2\x9c\x8a\x86\xf2\xcc\x066\xe6\x81\xf1\xf18\xab\x02\xba\x11,+Qg\x1e\xdew\xdeM\xebO\xb7\xd6^\xbd뷾\xb5\xec\n\xf0\xf97_lD䷑\xe3O\xf3vV\x19\x8c`|Ն\xe9\xd2\x04A|\xf9\xa02+\b\xae&lt;\xe2\xdf\xd8r\xd3[\x92&amp;\xb5c\xca5\x98Ь`A4\xbb\x02\xe2\xb9V\x83\x1b\xb7\x12\xc75&lt;\xa0\xbe\x18U/\x18b\x1b\xb4\x13i\xb7\x9b\xe2B\xa3\x06\x9fr\xe3\x86\x1aH\x005\xe3\x1cgѽ\xeatƘ_\\wˆ\x8f\xec\xfc\xb9o\xac\xf8T\xe6\xf5\xb7m\xba\xb4(\x8a_\xe0\x00\x85\r\x1d\x1f\xb1\xa2\xf0\xa0Ω\xca\xdd\xda\xee\x93\x17\xeb\x8c\x02\xed\xac\xb9\xac\xb4\x93\x83*\xad\x0fp \xabA\x00g\xbd\xca3\x9f\x04\xc1z\xa9\xef\xbb\xce\x06\xea$I~\xc2\x18\xb3{ӝ\x97\xff\xca\xd7_z\xfb\xf6\xe5\xf0\xa9\xb4\xe9\xce\xcb\u007f\xc5\x18\xf3\x11`\xe1\x9e\x0f\x9d\xdf4M\xab\xccW\xf7\xa9\xf0V\a\x0ef\xd8~\xb1\xfd5\xe5{ߌ\xef\xbf$\xed=\xef\xa6\xf5\xe7\xa4i\xfa\x99\x10\xc2\xde\xf3o\xbe\xf8\x95\xcb\x1d\xf4ޭ;\x8f\xecٲ\xe3\x9f\xf6]\xbf\xeb\x9dY\x96=\xdfZ\xfb\xf2\x10\xc2g\xe34\x91\r\\\xdc\xeb\xcd\x11T\xac\x80\x1a\x01\x00\xd4\x1a\xd8²\x1e\xbf\n\xd4\x1fU\xa9\xff\xf7\xe2A&#39;\x86\x95\x8b\x1f\x13\x19\xa7\x95\x83\xa4=[v\xcc˴\xbfS(\xfa\xe1HJ\xf9稜\v\xfe\xb1\xbc\x19\xde\xe2h\xbbCo\x01\xf0\xf9\xf3nZ\xbf,H㼛\xd6?\x19\xc0nj1\x1f\x14\x11\xdb\x03r\x04\x04(\xda\xe5\x0ei\xdf,\xca\r\x98\xb3\x012\x13\xaa\a\x94\xf9#\x05\u0094\x87\xcc\x06\x98\x96\x81\xcbm\xb9\xf1\xad]\x94{\x19\xc2\xc2ξ\xe5\x12w\x01\xa9|\xe2\x8e:ΞU\xa6q\xb1\x9d\x17n\fg\r\x88\xda\xd6\xd4\v\xbfj\xd8b؏\x1b;\x94\xef\xf8aDq4j\xad\xfd\xe0\xba[6\xacH\xa0\xebo\xdb\xe4\xbc\xf7\x1fdhX\xafϧ\x0f\xb0\xc1\xe6\xec(曑\bc\f$\b\xac\xb5\xed\xe5\xf0\xd6&gt;\xdcB6\xd1.\x1bL\x9a\x1e\xed\xd96\xa4\x10xr\xac\x1c\x10\xc4p\xa5ʕ\x03Eu.z\xf2xǎ\x9d#\&#34;w^\xba\xfd\x8a\x9b.\xb9\xfd\xa5&#39;.\x95\xcf\x17\u007f\xe5\xe5\xa7m\xbcc\xf3M\&#34;\xf2W\&#34;\x92r&amp;\xc7땳O\x00U݆\xb3&lt;\x955\xeb)C\xde\xd6Z\xe0\xbb\x00\x80\x05DZ,I\x11\x8c1\xef\xf1\xde&#39;\x00\x9e\x15B\xf8\xfc\xf97_\xfc\x0f\x17|\xe8\x85g-u\xf0L\u07fea\x8f\xf0y&gt;8\x00\x00 \x00IDAT\xec\xfe\xc0\xbd_ܿm\xf7kD䆀n\xeb.G\xcf\xdaN\x16\xc3\x031\xb6\xa7\x93\xcb\xfbO$\bp8,\xbb\x06»\x9f\xe3\xc9\x00\xba\x8a\x1c\xe3\xf7&lt;\x19\xec\x84xq\x0f\x98\xbe\xe0h\x87|,/Κ\xd8\xd11\xf4\xa6N/\xc6o\xe3\xb1x\xef\xff\x8b\xb5v\xff\xf97_\xfc\xe1\xf3o\xbe\xf8\xc7\xfaa\uef1b\xd6?\xed\xbc\x9b\xd6\xff\x91\x88\xdc\a\xe0\x97\xf5Z5\xc7AĐ\x1bGDJ\xbe\xf0\x80/\xa1/=JF\xe6\x02d:\xa08\x92#\x1c\xf1\xf0\x13\x83\xdd\x04\xb7\b,Q\x19&gt;\x9e{\x9dg\xde\\\xa6\xf5\x04.\xbe\x0e\x98\xc6A\xebC\r/w3q\x96\xa1\xbc\xc6{)\x9cs\v\xb2\xd7\xcew\xd6[k?\xba\xee\x96\r\xcb\xdaY}ѭ\x1bO\x11\x91\x8f\x00\xb8\x88\xf51Θk\xf0I\x04\xc1\xea\xfbj\x90\x81n\xc6\xd0\xf9\x91\x10\xc2\xf8\xb2\xa4&#39;\x82\xa2U\xc0\x16\x06\xed\xa96¬G&gt;\x91\xa1u\xa8\x85֡&amp;\xf2\x89\f\xc5L\x81|&amp;+\xbb\x19ea\x81Z[~9\x88c\x98\x98m\x81\x88\\i\xadݽ\xe1K/\xf9\xa9\x8dwl&gt;f\x93¦;/?}×^\xf2\xb6,\xcb\xee3\xc6\\\xc9\xeb\x9231Θt\r\xe9\xfdU\xee\xf1A\x9a1\x9c\xa8r\xf5!\xa0\xf5\xe0\xecA\xe7\xdcΘ\x9f\xbe!\xac\r[.{^6\x99\xfd78\x03\x9bZ\x04\x13 V^/V^\xb1\xee\xe6\x17\xfe\xa5\x97\xf0\xc1=\xbf}\xcf}\xfd^\xaf\x17\xc9\xd3̻\x9c\xb1o\x01`5\x85\xe6\xc8C\x15]\x1d\x8a\x0eP\x85\xa4\n\xc6\x13\x1aBy\xa2l\x1e\x96\u007f\x9e\x05\x9f!\x15G\x9fqD\x14\xd7g\x80z-\x821\xcaA\x93\x88|\xc1\x1f\xf17ʉ\x82$Mj\xb2`c\xa0&lt;\xc70\fw\x9d(1\xfe\xcc\n\xd9\x19c\x12Bx\x931\xe6M\xe7\xdf|\xf1\xf7E\xe4\x9fD\xe4\xbbƘ\x83\x00\x0e;\xe7N\xf1ޟ\x19Bx\xa6\xb5\xf6\x95\xd6ڋ\xd8\x11\xc7Ƙ\xc6Q\x8b~\xd9Ȱ\xd3\xebe\xf8\xf8=\x00\xd5\xe1\x81\x03\x90mŧ:g\x95\xabs\xae:\x91\x17@\r\xcaP~\xf4\xb7f\x1d\f\x83\r\x92\xf6n\xdd\xe9/\xbauc\xab(\x8aQ2\xa8\v!\tc*X\x88uV?\xcb\x01\b\xd0}(Z\xe7\xb5_3\xc6\xfc\xe4\xba[6\xfc.\x80\xdbv\xfe\xdc7\x8e)\xe0\xf5\xb7m2y\x9e\xbf\x01\xc0\x9f\x8a\xc8\x19q@\x15C\xaa\xbc\x9680\xe3\xd6y\xbe\x06\xd7q\xac\xb5\xad\xfd\xdbv\xaf\xc83svY\x9b\xf7̗\x19\xaes\b!\xef\&#34;\x0f\x89\x83K\x1d&lt;\x02\\b\x01\a\xa4#\r\x04t\x1fn\x15?\x93\x03\xa8 \xb3g&amp;I\xf2)c\xcc̥ۯ\xf8&#39;\x11\xf9\xa6\xb5\xf6\x87\x00\x1e\x15\x91Qc̙\&#34;rV\x9e\xe7\xff\xc5{\xbf\xc9Z[\xcb\xda㵩:\xc9\xe3`}\xe4\xda\x12ˎ?˿C\x1e\x90\xfb\xfc\xf3\xbd\xce\xc4\xebۊ\x85\xd9\xf0\x87\xa3ɨ\x95\\ MA\x92\x8ch\x14\xb5\xc6Z\xfb?\xf2\&#34;\xff\uf5fc\xf7ş\x0e\b\u007f\x12L\xf8꿿\xeb\xae%\xad\xda\v&gt;\xf4B\a\xe0oB\b\x95%\x89\xa3$\x8e\x8cc%\x8b#\xa68\xc5\xecLȲ(Ɛ\xb9\b\x1ec\x9e&lt;I\xfaY\xfd_\r^\xdc\xd2;(\n!|\xc7N\xe1@rZz\x96\x1a)6v1\x14\xa5\x0eC\xa3%퐋\vk\x9c\xad\xa8\xe2qM\xa83O?j\x8c\xf9]\xe5\x85\xe1\x1e\x8ezx1\xaa\\\xa2豒\x9d\xfe\xcf|\xebw\xf9\xd4`\x86\x87b\x87\xc3\xe3]\x91l&#39;=lj\x01ga\xad\x81\x97\x00$\x80\xebQ@g\xf91O\xbc\xd0٨\x0f\x9a\xbc\xf7\xe3\xd6ڧ\xea\xb5;\xb8{\xed\x9e\xdcz\xca\xd1&#39;g\xff\\\xecg\xbe;\x06\xfd\fc\xcc&#39;\xbd\xf7\xbf\xb9\xee\x96\r\xb7\x1bc\xbe/\&#34;\xdf3\xc6|\u007f\xc7\x1b\uf7bd\xe8֍&#39;\x1ac~\xd4{\xff\x1cc̏\x86\x10.7\xc6l\xd6{\xc55D6|\xaa\x13*O\xe6K\r\x9d\xea\x8566Ԑ\x81\xe0\xc7\x16\x15N\x1f\xc4\xfc\x01u8\x87y\xe2\x9aW\xf0\x01\xbe(\xd7v\xde*3^o;\xeb\x03\x021\x82\x90\x06xx\xa4\x8d\x04&amp;\xb10\xce H\xad\xf3\xf1\xa4\x10\xc2\x1b\x9dso\xe4\xf1\xa8\x81\xd7\xe3U\&#34;\xe7S\xf1\xa4Y-;\x8cx-\xc75$F\x18b\xe82I\x12\x04\x11د\x06\x84\x10z\x9e&amp;ܗ\x03y\xd1\xef_\xba\x0e\xc0\xcf\xf0\xc2\xd4\x01U-\x820Ʒ\xfd\xeb\x9ds\xaf\x17/\xdf\xd9\xf0\x9e˾`\x8c\xf9W\x00_\xbe\xfb\x0f\xberԖ\xba\xf5\xd7m\\\x1f\xa6\xc3\x1f\xc2\xe1U\xd6Y\x04xX:\xb4\x90暑S\x0f\xcb\x18\x1f\x1b\xbfH\x01g\xf7nٱ\xec\xd3\xe0\xb8\xe0\xc9J\xc5Q3\xa7\xde1\xa6ˑ\x96v\xf1h\x8b\xdc i\xff\xb6\xddr\xfe;.\xfaB1V\xfc\x06N\xc1\x02#\xb5\x18\\\xc2P\x92.\xde\xd8бC\xd2\xd7c|\x15\xa8\x9f\x14\xa0\xbf\x81n\x16\xc6\xf5\x19\xfd\xbbW\xe19\xae\xcb\xc4Q;\x1f)\xc2s\x12;\xf7AE\xf8\x12\x04\xbe\xe5\x01x\x92Uw_\x8a\x982\n\r\xf00\xceBl\x80q\x16\x05\n\xb8\xc4\xc1&amp;ݬ\x993\xd0Հ2\xed\x03\xf6\xfe\xf0\x8c\xf0Tv\x16j\xa0\x15n〆\xe7^\x83.5\xcaqWd\x1cH\x18c6\x03\xd8̺v\xe1&#39;/\x99,\x8a\xe2\xd4\x1eEx\x00\xa89-\x86V\xf5&gt;\xfa;F\x12\x80\xfazb{\xc0\x81\x83\xfd\x81\xbd\u007f\xb9\xb2\xd35\nt7\x06\xc6\x067v\x82\xfa:\x9f`\xab:\\\xe9m\xee\x11\xf2N&#39;\xd9|\xf7Ad!\x04\xa4\xa3)\x8c3\xf0\bH\x1b\t\nS \x19IJ\xc7#\v\xeb\x1a,k\x9e\x0f\xcd(\xf9s\x1c\xe8q\xf0˶\x8b\x03:ՉF\xa3Q\xca7782s\xa40\xc6|\xb1\x97\xbc\xfa\xcd@\xfe\x98a\x1bU\xb28:UeK\x92\xe4\xb9!\x84\xe7\x86\x10~\xd79\x97\xbd\xf0ݛ\xbei\xad= \&#34;\a\x9ds\a\x8b\xa2\x18\xb3֞\x0e\xe0lk텡\x156\x89ԟ5\x1dB@\x82Nˣ\t\x80\x03&lt;&lt;\xc4\x02p\x80\x98\x001\x028 \b\xe0\x8d\x87I\xba\xe7T\xd5`\x83CŲ\x15\n\xa8\x1f[\x10C=\xb1b1\xf6\xcc\x11@&lt;\xe9\xab\x11yvx\xfdK\xcc\xc8o$\xa7\xa7\x00\xea&#39;$\xc7\xf7d\xe3\xcb\xddX\xbd\&#34;\xf9\xaa@)\xd2SƬ\xc8\xfa\x1a\x8f\x9d\xef\xc1\x0e\x9e\x15We\xc9\vV\xdfk4\x1a\xb5\xd7\xf4\xbb1\xec\x16\xd7vbG\xbf\\\x12\x91jsZ\b\xa12\xb2\xd5\\\a\x81\x0f\x9dlS4\x98\xe8\xe8\x88\x05\x8a\x90\x03\xd6\xc0\xa5\x160@&amp;\x19\x92\xd4\xc1%\x83\xef\xc8\xcb&#39;[\x0f\xa5f\x14b\xba\x19\x9bs\xf5\x93\x12\xd8\xf8\xc6\x01\x03\xeb/\xeb\fG\xa9\xac+*\x1f\x95\xb7\xf7\xfeT\xb5\x17\xfcY\xce\xd2hs]-\x18`}Pb\xa8P\x1d\xa1\xf2\xa2\x81\b\x8f\xb351\xb7`\xbfB\xbfTf\xe1\xe9\xa2\xf5L\xe5C\x8dql\x17\xf5\xffxm\xa91\xef\xf5DâݭIy[\x8e\xad--\xc0\x94\xfaR8\x03\xe3,\x8c\x03\x92F\nq\x02\xeb\xba\xe8\x86\xeawܖ\xab\xb2$\x94\xa0\x1a&#39;\xdb/M\x048\xd8j\xb7\xdbp.\x81\xdfބs\xee\x13{\xb7\xee\x9c\xea%\xafc:\x90\x17\xbe{\xd3%I\x92\xfc$\xf7C\xb32pڤ\xccs\vh\b\xa1a\xad\xbd\x8c\xa3\xdbZ\x8aDƙ=\xbbR\x15\x15\xb5\nXðQ\xb7\x1d1\xa5\xc92\x89\xe9\xd4g\x00\xe3\f\x8c\x13\xe4\xb3\xed\a\x8f5Σ\x91\x1a4\xe5\x97\xc7\xc7FT\v\x94\xaa(\x1a]\xe9\x18X\xa1V#\xf2\x04\x80\xbd[w\xfe\xfb\v\xae\xbe\u0cd80\xafƩ\xa8);\x13\x1b\x006\xe8\xfa\x9eF!\xec\x04b\x8c\x14\xa8\xb7\xfd\xc5i1Gg\xfcY\xbd\aG&gt;\xfa\x9a*t-\xa2\xb4\xdd\xe38\x18\xdb\xe5\x8cHy\xe3\xac(vV+!\xe7\x1c\x82\xafg\x96:&amp;\xa0[?\xd0q\x14E\x81\xd1\xd1\xd1\xea\xa1L\xd6Z\x84\xc2\xc3\x19[^\a\x80o{\x142\xf0c\xfd!\&#34;\xf7\xc0\xe0\xe7 \v\x8d\xb2\xca_\x8d1G\xdbl09{\x8c\xb3X\x86T؈Ŷ!\x0e,8\xf3\xe8\x95\xe1\xe8w\x98?\xbe&#39;G㬓Zs\xa2\xcc\xea\x9e\xe5ʎ\xb3&amp;\xbe&amp;ý\xac뜙s\r\x873:\xfd;F)z9a\x9e\xa3\x10\x02B\x1e`\n\x83\xf2\x1c\&#34; \vYy?\t\xb0\xce\xc25\x1cr\b\\\xc3A \xb0I\t\x99\xc5\xed\xed\xb5\x9a\x06͡f\x1al\xc3+\x9b\x96\x19L\xb5f\xbd\xb5\xf6\x8f\x17\x93\xd71C3k\xed{Y`ʈ\x0eT\x15\x81\xa3s\xa0\xbe\xa0x\xa1\xeb{l\x14T\x88q\x9a\xa6\x8a\xcfu\x04\xeed`R\x0fo\xc5\xc2y\a\xd3\x02\\\xcb\xc2\xcd&#39;p\xce-\xe8_^\n)\x9f\\\x00\xd5\xf1\xb0\x11V&gt;\xf8)^|\xc0\x1eCm\x83.\x9e2\x89\xc8\x1f\xfa\xa9\x1c\x82n1\x94\x17\xa3\xf2\x1dgNʿ\xf2\xcb;Qkx/A\b\xb1a\xe7\xe7\xc3p\xe6\xd5\xeb\x18{\xce0\x18Έ\x17\x1a\a\x1d:\x0e&amp;\xd6\v\xe5E\xf9\x89\x1f\x02\xb5RR\xdd\xe5\b36~*\a\xe5[\xff\xe6vZ\x1d\xdf \xb2\xa3\x1e&lt;~\xc6&gt;\xb2\xf0\xa1kʫ\xea\x04P?[Nǧs\b,\xec:dX&amp;\x86\x1d\xd9x2)\x0f\xfc\\y^\xd3\xfa]\xcepb{\xc1\xf2U\bS\xef\xc5|\xd9G,\xac\xb5\x9fY\xae\xecbx*ַx=\xb3\xdc\xf85\xb5\x15\xea8؉\xc7NV\xdf\xe7 \x9b3\xc3\xf8yC\xde{\x14y\x81P\x04\x14\xcd\x02\xf9lypj6\xd1F{\xac\x85\xe2H\x8e\xb9\x83\xb3\b\xb3\x1e\xed\xa96\x8a\xf9\x02E+G\x91uO\xcaУ\x9e\x18\x1eֵ\xa3\xf7mm\x9f\x05\x80\x8f\xefݺ\xf3?\x16\x93\xd7Q\xb5w\xc3{.\xdbl\xad\xbd\&#34;\xae\xe4\xebb\xe5\xcd):\xe9\xbc\x03S\x05\xd6kW&amp;O\x18OL/\x03\xc3)\xb8\x92\x1a\x9a\x18\x02\xd1\xebi\xed$\xcf2\x88\xc8&#39;\x8e6\xcec\xd1\xda\xc3k\xb0fl\x14k&#39;\xd7btr\x04\x8d\xa9\x14#s\r\xb8Y\v;o\x81&amp; m\x81\r\xb6l\x19F]QbH\x85\x17\xf0j\xd0\xfem\xbb\xef\x11\x91\xcf\xc8\x01\x0f\xdb1\xa6|\x14=\x1b|v,\x8bAVq\xe0\xc0?\xfa:?\xc0\x86\r\x81ރ#1\xde)\xcfN\x82#L\xe5\x89\x1d\xad~_\x8d\x9e\xf2\xc9\xc1\x87\xf2\x91e\x19\x8c\xe9&gt;\xdf{\xa5\xc4\xfc\xc5\xc1T\x8c\xe3\xc7\xd9\x19gFld{\x19\xa8A\xd0ޭ;\xbf\xdf:8\xf7\x1d\xdb4\b\xf3\x01h\v\x8af\x01\x13\fB\x11*\xb9\xf0\xbdu\\\x9ca\xc7\x19%\xaf\xdb8#\x89\xb3\t\xd6\x1d\xdd[\xa2k6~\xa6\x0e\x80Zdφ\x92\xaf\xc5k\x9d;\xd88\vn?6\xbf\u007fϖ\x1d\xcb\xee\x06\x8d\xb3ט\xf4\xbc3\x9dw5\xc0l\x88\xd9^\xc5\xebF\xaf\xcd\u05cf\x83\xed\xd8)q0\xa2\xefŏ\x15\xa8ɦ\xf0Hl\x82|&gt;/\xe7~&amp;G6\x91\xa1\x98\xc8\xd1|l\x1eّ\f\xf9dV=\x82[\U00080b15Uk&#39;I\x13\xf8oz4\xb3f\x91\xa6\xe9{\x8f&amp;\xafEW\xd6ſ\xb7\xd1\x00xo\x8c\x8d\xa9\x90\x19\xef\xe3\xc8O\a\u008b\x84\x8d(/\x1a62z\x0f6\xb2qt\x1cu\xfd,\nϨ C\b\xc8|v\xf7ޭ;W\xd6^,R\xf6{\xe7\x02\xdb\xf1\xb9\x0e\xf5{\xabC\xb5֖\xbb\xa5\x1d V \xb6\xacӔ\u007f\x97\xc5X8,\xfb\xb0\xb7~\xc9\x18\xf3\x87\xde\xfb\xd74\xc6S\x14\xa7\x140\xb6\x1b\t\xf3B\x15\x91\x1aT\x15\xa7\xbb\xea\x1cTa\xe3\xc2y/(\x82\xb3KU\xfa\xf8H\xf6\xd8\b\xa8\xc3b}\xe2h\x94\x17\x95\xde\x17\xa8;\xa1ب\xf3\xfb+%k\xcb\x13\xa6\xd9Xq6\xa1{\x12\xe2\x05\xcf\x1d|\x1c\xf4\xb0\x0e\xaf\x06\x89\xc8g\xc2\xc1\xf0\\\u007fb\xb9c_B@&amp;\xe5\xde:\xb1\x01\xdey$\xa9C\x11|\x19F\x1a\x81I,\\ja\x12\x8b\xbc\xc8k\x86\x89\xd7g\x9c9j\x10ɭ\xbe\xfa\x1d\xce&gt;93\xe4,\x833\vޥ\xaf\xf2\x03\xea\x8faedB\xed\x10\x04p?p\xc8E\x96\x9d}(_\&#34;\v\x9f\x8b\xae\xf3\x1d\xd7\x1d\xb8S\x8du[\xe5\xc2h\x03g6\xfay\xbdO\x04\xfb\xf3&lt;\xd6\xe4ş\x89\xed/;\&#34;\x86\xafj\xd7\x12 \xe4\xe5{y\xb3+k\xef=\xd2F\x8afh\xc2\x16\x06~&lt;\x03\x80\x8f\xed\xba\ue7a3֏\x8f\x96\x81\xbc\xd2\x18\xb3\x89;_8\&#34;P\xe2t7.ز\xa7\x8d#rV.V\x16\x8e\xd2\xf8\xbbl\xf0t\x02y\xe1\xc6F+\x04\x8f\xb9\xe6,D\xe4\xef\x8e&amp;\x80~\x88\v\x82\xba\x10tҙ\x17] \x89up\xe2\xe0\n\x87$K`\xe7,\x92\xd9\x04\x8d\x99\x14kfG\xb1vz\rF\xc7G\x8eqו\xd1ޭ;\xef\xb5\xd6\xdeZ\xccd\xa5\x1c\xb1\xf0AA\xaa\xdc:\x0f\xbc\x10\xe2LP\xffgE\xe7\xefi\xe4\xda+\xe5g\x88\x01\xa8w\xb7pF\x1b;\r\xa0\xbb\xe8X\x87\xf4\xfb\x9c\xda3\xbeΙ\n/ƕ\x90\x8e\x93\xe5\u008b\x95\x9f\x15\xa1\xc4\xce#v\x8e\xfa\xb3Z\x99\xa81\xe632\xe3al\x8f\x83)\x05\x80\x17\x84,\xc0w\x8e\xf67-\x03\x99\t(&amp;\n\xb4\x0f\xb5`g\f\xfcDQ&gt;~y֗\x9dC\xad\x00\xe3\r\x10\xeagR\xf5\n\x06t.\x18B\xe4\x82y\x8d\x1ft\xb3\n&gt;\x01X\xa3xv:\xb1a\xac\x82S\x03\xb4&amp;琦\xe9\x8a\x1d\b\a\xc3qv\x1c\a\xb7\xdayů\xb1\xe3`\x9b\xc5Y\x1b\xc3\xe1\xf1\x1a\xe0u\x1a\xa3\x00,O\xd6{\xfd\x9f\x1d\\\xec\xfct\x0ez\xa1#Ɣ\xa7?8Xd;\x9b\xc8\xf3|\xca9w\xd4\xec\x03Xālx\xcfe\xd69\xf7^\x8e\xb2\x18\xd7慢=汧TA\xe9\xc0YQ\xd8\xd8s\xe4\xcaB\xd3\xcf\xf2k\x9c\xb61|\xa5\xc2\xd0G\xda\x1a\x18\x00\x06\&#34;\xd2\xf2\xde\xdfv,!\x1c\x8bb\a\xa8cc\x05a\xe8\x85&#39;\x87\x17/+\xc4 \xa2\xe2&gt;\xe8M\x00\xee3\x8f\b\x82\x84\x1a\x8f\xf1\xc2\xe8U\x83\xe2\x80!\xee,Q\x99\xb0A\xe0E\xa7\xca\x1cC;\xec\f\x94\x18&gt;a\x05\x8f\xe1\x04\xfd\x9b\x9f\x8b\xcdp\x98\xf2\xc0\x86Hy])1\xa4\xa7c\x89q\xedŢT\xfd\f\x1b\x89X\xe6\x83&amp;\x11\xb9\xab(\x8a\xbb\xcd#\xdd\xe7\xef0\x84\xa4\xb2ֵȎYa\x10\v\v\xe4\x00\xda\xe5\xde/\xd3\x04\x8a\xc9\x1c\xed\xc3md\x87\xcag\xc8\xc8t@\x98\xf1@\x13\xf0\xf3\x05\xb2\xb9\xaclW\xf5\xd2s\xed\xab\x1daH\x93\xe7_\xd76Эϰ!Wb\xc8RB@~O\vƘ\xbb\x8a\xa2\xf8\xc6\n\xe5\x06`\xe1S\x1dy\x1ds\x16\xce\x01W\xaf`&#39;\xaeip\x80ú\xa2\xf7\xe6\xac6\xb6\xab\xfa\x9b\x9dv\xbc&gt;\xe3qp\x10\xae\xdfg\xfb\xac\xb2\xacjI;+\xc7\xf6\u007f\xefٲ\xe3\x98\xddl=\xb5\xd7\x18\xf3zc̅\xec0b\xe7\xc10\x16\x0f&lt;N\xe7\xbc\xf7U\xf1\x8c\x17Oŀ\xedv/\xe9\xf5\x19\x06\xd0ϰAQ\xc18\xe7*\xa7\xa1&lt;\x15E\x01\x81`\xbe5\a\x11y\xf7\xfem\xbb\x0f\x1dK\b\xc7\&#34;n\xd3S\xa5V\x1e\u0600\xb2C\xe3蘣\x1a\x9d\xc8\xd5,\xa2+\xedݺs\x12\xc0O\x89H\xd3&gt;\x02\xd8i\v7_fE\xa9O`r\x03+\v\xa3u\xee\xd0\xd1q\xeb\xbc)\xdc\xc5\v\x9f\x8d\xa0\xfe͆\x83\xbf\xaf\xf2P#Q\x93[\x90\xdaao\x1c\xa93n\xae\xfa\xa2\xf3͎\x8c\x17\xafF\xafqV\xb4\x12\xe2l\x82\xb3c\xd6M\x8e\xfc\xe2\xccK\xe5\xc1\x19\xfdj\xd0\xfem\xbb\x83s\xeeJH\bI֍\xe2\xf9\x98\r\xceF\x81z\xb3K\x9c\x1d\xb1a\xaft\xb7\xf3\x802\xc9\x04\xa1Y&gt;J\xd96M\xf9\xd4˩\x80\xecP\x1b2%\xe5\xf3d\xa6s\xf89\x0f\x9b\x1b\x14\xcd\x02EVvU\xf6\x82\xb1yM\xb1\x8c\xd9\t\xb3\xa15\x8fX\b$\x88ȕ\xfb\xaeߵ┓\x03&lt;\x86\xdf\xd8&gt;)o\xbc\xe6\x95\x18\xb2U&#39;\xc4\x01\b\a\xd6&lt;nv(,\u007f\x0e̸\x01\x81O&lt;\xe8\x95ų3\xd4\xf1\xf0Q\xfez\xffʞ}[\xe0C\x81$I\xb6\xecݺ\xf3\x1f\xfb\x91\xd5\x02\a\xb2\xf1\x0f\u007f\xdc\x19c\xfe\x98\x9d\x05G\xdd\xecEY\x01\xe3hC\aޫ=LI#\x12\x1e\xb8\xb5\xb6\xc2SY(q\x14\xc9\xc6&lt;6\xea\x1d\xe7\xf1-\xe7ܟ\xf6#\x84c\x11\xc35\xbd\x1c \u007f\x8e\xfff\xde\xe3\boP\xd0ʱh\xef֝\xbb\xad\xb5\xbf\x99\xe79\xf2#m\xa43\t\xd2\xc9\x04\xa3S\xa3X;\xb5\x06k\xc6G\xb1\xf6\xf0\x1a\x9c0\xb1\x16k&amp;G\x91N$h\xcc4\x90Υ%\xf4\xd6.;ڐ\x01V\xba2瀁#1\x00Uj\xcfN#&gt;\xd6^\x17T\xa5܂\xaaư\xd8&amp;K^\xc4@W\xe78\xdb\xe1\x05\xad:7\b\x98\x88\xa1\x848\xaac\x87\x17\xebx\x9cy\x03\xa8\x05L\xab\xa9\a{\xb6\xec\xb8\x17\xc0\x87\xfd\xa1\x1c2\xb30S\x8e\xf9S^bx\x85e\xa0\xf2䢷\xfep`Pe&lt;Y\x0e\xc9\x05\xc8\x00i\x06ȼ\x94\x8fT&gt;\x92\xa3}\xa8\x85|,\x83\x9f\xf4\xf0S\x05\x8a\xe9\x02aޣ\x98/\xbfc\x02`P\x87\xbc9\x90\fA`\x1e,\xf1z\x11\xf9\xd0\xfem\xbbw\xacTfq\xa0Ǚ\xa5\x8eKm\x94~\x9e\r2G\xf7\x9c\x91\xfa\x1ev\x92\xbf\xcb\xf0f/g\xa12\xd0\xcf\xeak\x1a\x8c\xf4\xea\xe4R=\xe5\xf5\xa2\x14\xa3\x11~G\x01\xdf\xca\x00\xe0Nc\xcc\xef\xf5+\xaf\x05\x0e\xa4(\x8a\xcbB\b\xcfc8\x81;\fb\x0f\xa9\x03fe\x8a!(`aڧ\x82\x88\x8fXP\x03\x15\x17\xd2\xf8:&lt;\tU\x81\xaa\x03Ѵ\xf3\x16\xbc\xf79\x80_ٳe\xc7\xc0\x9a\xecc\x88\x8a\x1d#Gg:\xee8\x82\x03\xea\x13\xf8\x9f\xe5@\x00`ϖ\x1d\xff\xcb9\xf7\xe1\x10\x02ZY\xb34\xe6\xa6\xde\x05\xe4\xe0`\v\v\x979$-\a;c\x90\xce$p\x13\x0e\xa3ӥ\xb3\x19\x1d\x1b\xc1\xda\xc3kp\xf2\xf4I\x18\x9d\x18Ac\xb2\xf1\xff\xb5w\xae!v]\xd7\x1d\xff\xaf\xbdϽ3#K_T\x88mZ\\ZB\xa0z\x9b@\xdcGH!\x1fR\xbbNH(\t8\xae)\r\xa5\r-qh\xa8\xa4\x12ZSH\xa1hf\x14h\x1e\x1f\xf2h\xa1\xfd`5\xa4\x8e\x9b&gt;▒\x96\xbaP\x97\xd8ռG\xc6\r8vd[\xb6\xf5\x98ǝ\xfb&lt;g\xaf\xd5\x0f\xf7\xac{\xd7\xd93\xaa\xa4yH\xc9e\xffĠ\x99\xb93w\xce\xdeg\x9f\xbd\x9e{-\x8c7\xc71\xd6\x1a\x83\xdfp\xc8:\x1e\xbe\xe71\xeeƑQU;\xb2\x9a\xb8\x9d\x87Z\xad\x06\x0e\ft\x01Z\x1d\xf6ˈ\x95\x17\xe7\x1c:\x9dNE\xe8Xal\x85\x95}\xc0\xb6\xf2\xbbo\a\xebZ\xd3\xf7\xb6\n\x94}\xddj\xb0VX\xeax\xecƱז\xa8\x88&lt;\xc1̗\x8b\xcb=`\x1d T[\x1fX\x8d&gt;\xb6\xe4\xacU\x15[\n6U\xddλZ\x90\xd6M\xa7s\xa0\xf3\xa6\xf7V\xd7!\xe7\x01\x14\b\x94\x03\xdcb\xb8\x8eC\xb1\x9a\xa3X)\xfa\x15\x97W\x03\xd0\x10\x84\xf5\x02h\xf7\xcf&#39;P\xe1\xc0/\a\xe4\xd7:\x10\x91\xcb\x00\x9e؍\xf9\xb2q\x86XqV\xb6r\xa9\xd9{\x1f\xbbj\x89\b\xa2J7\x0f-\xf0\xd8Ka\xf7N}Om\xfbm\x95#\xbb\x0f\xe9\xde\x13[F\xb1{P\xef\x8f~n\xc3\x01X\b\x10\x04\x10\xd1%\&#34;zd\xe1\xcc\xccM\uf6db\x04\xc8\v\u007f\xfaܳD\xf4\x18\xf3\xf0샕\x8cV\xa3\xd6Iҋ\xb1\x12X\xbf\xb6\x83\x8d5p\xfb0Z)i\x17\xa4\x95\xa2\xaa\xb9\xe9\xffz3\xb3̃@\xd8h5\xf4\xc6\xff\xf1\xd2\xd4\\\xa5q\xd5N\xb1\xfev\x00\x95&lt;\xf9ؕa\xad\xa9\xd8J\xd3\xf1\xdc\x0e\x17\x96\xc59\xf7\x99,\xcb\xfe\xa1(\n\xac5V\x118@\xb8\x1a_\x88ﭵ2\x14\xe6\xfe\xe1\xa6:\xea\xf0=\x87z\xaf\x86\xac\xe51ѝ\xc0Dk\x02\x13\x8dq\xf8\xb7\x1d\xc6.\xd71\xf1\xf68&amp;\xae\x8e\xa3v%\xc3\xd8\xea\x18\xc6\x1bc}\v\xa8\x95!\xebxP\x87\xe0\n\x87Z\xa8\x81ߪ\xfa\xe5\xadŪף\xe6w\xfca7B;\xff\xfa\xbb\xbb\xe1&amp;\x8aݳ:\x17\xfa\x9an\xaa\x8a\r*\x0f\xe6\xcdXW\xb1\xb5\xbeW,Mͭx\xef?\xe1\xbd\xcfõ\x1c\xc5Հ\xcc\x0f\x0f\xf0Z\x85к\n\xb7rO\xc6J\x8f&gt;õZm\xcb\x03\x89[=\xe3\xf1\xbd\xb0_[m\xbf\xf2\xf3\x8c\xfei\xed\xd2U\xd6Y\xed\x80\u007fX@\xd6\v\x88HOD~syz~S\xbb\xd5\xed`k\xac\x01\xc3\xe3\x00VyP%7v\x01\xd99\xb4\xe3\xd1\xf7i?\xbf\x014\xcb^6\xd1Y0+\xac\xec~\xab\aQ\xb7J,\xb2\x9f\xeb\xb5\xe4y\xbee\xb2S\x1cs\xe1P\xc6\x1c\xe7z\b\x1cP\x14ś\&#34;\xf2\xf0\u0099\x99\xb7ne\xbe\xb6\\\xc1\x8d\xe6\xfao\xb4:\xad\x8aD\xb4\x99\x10\x006\xf9\xa4\xad\x1bJ\x1fx\x95\xb2:\x99\xfa\x1e\xb6\f\xb3]`ֽa\xad\x10\xf5u덈\xfd\xf2!\x0fhu\x9az}\u007f\xb4457u+\x93p\xb3\xd8ִv\xa3\xb5\xae:}(c\xf3юu/}\xdf\xd7c\xe1\xccL\xb7(\x8a_\xf3\xde\u007f\x01\x00\x1a\xcdu\xa8\x92\x00\xd3\xc0\xcb\xde/{\x9dv&lt;ֺR\xad\xc6f`\xa9\x89\xef\xbd\x1f\x1c\xect=B\xd6\xcb\xe0[\x1e\xbe\xe1Qo\xd41\xbe6\x86\xfa\xd5\x1a\x8a7{\x10\x910\x11Ɵ\x98X\x99\xc0\xc4\xda8\xc6\xd6\xebp\xab\x04Z\a\xc6\xf21p\x93\x81\x1e\xc0=\x1eTص\x0fT\xaf\xd7\x1b\x9c\xfe\xd7q\xc4\x1b\xfeN\xd9\xca]\x19k~V\xf3\xb4\xe5^\x94\xadb\x86{\xcd\u0099\x99\xef\x10ч\x9ds]Y\x0f\xa0פ\xe2\x82\xd1\x18\xa5\xddt\xe2Mӎ\x85\x99+\xf1\xa5\xd8\xfa\x06\xaaq\x84\x8a\xb6\x8b\xeb\x9f\xef\xb1V\x9d\xdd\xfc\xac\x05\xc7\xcc\xc8.9\xf4\xaeu\x00\xa0\xeb\xbd\xff\xf0\xf2\xf4\xfc\x96\x85\xfe\xb6C\xac\xdcY\x97T\xec~\xb2V\x9b\xbd\x97\xb1UW\n\x80\x9c\x88\xd0{\xa9\r\xf7\xa6\x83\xa0z\xf6*V:cE.^\xc3\xfa\xb3:W\xfa\xbfƸ\xecu\xe8\xfbW\xbc&amp;\xaf\v\xf2\x99\x8eދ\x17\xbd\xf7?\xbf45w\xcb.\xc0M\x02\xe4\xf0\xa9\xe3\xef\x05\xf0\x01\x11\xc1F\xab\x81v\xb7UY$v#\xb1\x03\xd5&amp;%ַ\x1dkYvAY\r\xcd.L5!m9\v}\xd8\xf45\xe7\xfa7 \x84~\xaan\xb3\xdb\xd4k\xfb\xcc\xd2\xd4ܟ\xdd\xea$\xdcp\x92\x9c\xab,,+L\xad;B\xc7`\xb3$\xf4\xf7m*\xf0nnj\xb7\u008b\x9f_\f\x8b\x93\xb3\xbfOD\x9f&amp;\&#34;n\xf7\xdah\xb67\x00T\x9b\x0f\xe9x\xd4|\xbe\x9e\xb6\x1ck\xfb\xd6\n\x03\xaagB\xecB֏n\xaf\x83f{\x03!\x84\xe0\xbd\u007f\xc4\xc1}\x87\n \xb4\x02|ףޭc\xa2;\xd1O\u007fn\x8ccbu\x1cw\xad\xeeþ+\x13ؿ\xb2\x1f\x13\xd7\xc61\xb6RGm5\xc3]\xdd}\xa8\xb52P\x93\xfa\xbf+u8v\xc8|V\xb9?\xdb%\xd6\xfe\xec\x1c\xc4\xcd\xcet\xbc[\xf5\b\xb1\xbf\xa7J\xd8\xed`qr\xf6\x9f\x01|\x90\x88\xdaE(\x10^ɑ\xbfַ\x86\xec\xb3\x06TcMz\xdfl\xc0V\x85\xa3\xf5\x1c\xd8ZU\xf6^o%$u\xcc\xd6\xdaT\xb7\xca\xf5&lt;\x11!\x04\xe0-\x00\x17Y\x15\xd063?\xbcpf\xe6_vs\x9e\xc2J?\xabLZ\x02i3\xb8\xc3p\xec\xe00TJT\xc8\xc5^\x04k9X\xa1Z\xce\xe33\xde\xfbsD\x84\xe2\xed.\xa4\xac6_\xaf\xd5+?k\x05\x16PMW\xb6Ϧ\xfe\x8e\xf5~螣\x16\x8b^\xc7P\xe0\x01\xae\xe5\x10\xe6z\xc8\xdf\xea\xe8\xef\xfeG\bᗖ\xa6\xe6\xb6U\xeeiӮ\xe0\x9c{^D~\xd79\xf7\xba&gt;\xfc\x1b\xadF\xb9є\xfeO\x93\xb1\x13\xe7\x1dǧLcS/\x8e\x83\xc4~;]\xa0q\n\xe8p1\xf67\xe1v\xbbi\xad\x8e\x00\xe0w.\x9c]ؕ\xa0y\x8cՎ\xac\xfbM7\xcb8\xa5\xd8j\x16vA\xe8F\xb3W\xb9\xff7\xcb\xd2\xd4ܗ\x00|\x84\x99[DT\xb9\xbf\xceh\xef\xf6\x01\xd7\xfba\xcfpX\x8b\xc4\xdeO[\xf2\xc4\xc6&#39;\xfa\x9f\xf7\u007f\xae\xd1\\G\xaf聈\x82s\xee㋓\xb3OY!\x16k\x81\xb1\x9fXB\xff\xc1\x96\x8e\xa0^\xd4A\x1b\x84z\xab\x8e\x89V\xdfz\xa9]\xcd0qm\x1c\x13\x97DZ\xff\xda\xce\xdbO\xdb\xcdAǢ\xd7i-S\x00\x83\x18\xce\xf5,Q\xbb\xd6o\x87\x1bKY\x9c\x9c\xfd\xaes\xee!\&#34;\xea\xbb{z\f~\xb5@X/3ʀ\x8a\x10\x04\x86\x15\&#34;t-ر\xeb|\xd8Tj\xbb\xfe\xb7JÍ\xc7k\xf7\a\xbd\xb7\x83\x98\x99*\\-\a\\dP&gt;\x98\xaf\x15\xef\xfd\x83\xcb\xd3\xf3\xff\xb6\xeb\x93\xc4\x02\xe9\t\xa8\a\xa0\x03\xa0%(Vs\xe4Ws`U k\f^\v\xa0\x16P4\np; t\xfa=B\xc0\xd5d\v\xa0\xe2\xa2\xcb\x01&lt;&amp;\&#34;\u007f\xe2\x9cC\xaf\xdbF\xef|\x1b\xf2\x92\f\xaaW(Vp\xeb\u05fa&#39;Z\x8f\x90\x9dkUZ\xad\x12\xa0\xffk܋\xe7z\xc8\xff\xb7c\xef\xc79f~pyz~e\xbbӵi\xf5.N\xce\xf6.\x9c]\xf8\x8a\x88\xbcSD\x1e&#39;\xa2K:!\xadN\x13\x1b\xad\x06Z\xed\x8d\xe1\x03N\xd5\x1ce\x9b\xae\x16\xbb\xb4l)\x12\xab\xf1l\xe5\x1f\xb5\x82ƹ\xe1f\xd5\xe9u\xb0\xbe\xb1\x860p\xbf\xe0\xbf\x00ܿ45\xf7\xf5\xedN\u008d\x10\x91Wl`V\xb5\x0f벱c\x8a\xcd\xf7\xad\x02\xadY\x96\xddQ)\xb2&lt;=\xff\x8f\xde\xfb\xf7\x10\xd1w\xf5\xc1n4ױ\xde\\\xaf$0\xe8\xbds\xce\r*\xa8ƽ@\x80\xeaحeBD\xfd\&#34;\x98\xe5\xbd\xdch\xad\xa3\xddm\xe9\x02n3\xf3\xa3KSs\u007f\v\x00Y\x96m\xe8߱\nD\xfc0\xa9Eg\xad\xdc؟l\xdd E^\xbc\xb2\xd3\xf9\xf2M\u007f\xcdu\x1c\xa8G\xa0\x02\xf0\xe47\xa5\xa7[\v:\x16\x9e\xd6\xe26k\x00EQ\xbc\xbc\xd3k\xbb\x15\x96\xa6\xe6\x9e%\xa2w\x85\x10\xbeFD⽇_#\xe0\&#34;C.2P\xaeJ\xad\x94`㛱\xa2d\xad\x11\xbbVb\xc5B_\x13\x91A\xe3\xadX\xc9\x1c\xccKyHQ\x82 \xbcZ\x00\x17\x19\xe1\xca\xc0\xc5&amp;y\x9e\u007f\xd5{\xff\xae\x8533\xff\xb9\x17\xf3c\xaf\xd5*.\x833\x19\xdcO8A\xde?\xf7\xc2M\x86l0\xc2j\x81\xe2Z\x8e\xe2J\x0e^c\xf0z@\xb1\x9e\xf7\x85PW\x10:\x8c\xc5\xc9YY\x9e\x9e\xff\x1c3\u007f\xdc9\xd7\x15\x11\xb4V\x1b\x90\xc5\x02\xf2\x03\xdd\xfb6\x1f\xc0\xd4\xfd\xc6*\xa4\xfa\\\xd8\xfd\xc5&gt;\x0f,\xfd\xc3ò\&#34;\xc8g\xbb\xc0b@\x11\x06\xc9\x13\x97\x9cs\x9fȲ\xec\xb1\vg\x17\xb6\xd5\xfaW\xb9nz\xca\xf2\xf4|\a\xc0\x97\x0f\x9f:\xfe\x97ιO2\xf3gE\xe4\x1dz\xd3\xd77\xfa\xd5}\xbd\xf7\x98\x18\xdb7,U,\x02\x8a\x82K\xf6a\xaa\xd5j\x83ÇV\x13\xb7f\xaes\x04熾\xbf\x8dV\xa3\xb2Y\x97Z\xcf\xd5\x10\xc2i\xe7\xdc_-N\xce\xee\xa9#\xb9\xd9\xdex\x03@E\xb3\x8eMt\xbb\x91\x84N5;-\xeeD&amp;\&#34;\xe8\xe6\x9d;k\x86\x00X\x9c\x9c]&gt;r\xfa\xc4\a\x88\xe8\xa1\x10\xc24\x80C\xde{=\xc1\x0f\xf4\x80\xfd\xfb\x0e\x94Z\xa4\xc0{B\x91\x17\x83\x12\xe4\xd65e\u074c\&#34;2H\xcb\r!\xa0Wt+\xf1\x94\xd2\xdd\xf1\x8cs\xeeS\vgf\x06\xa5\x12\x1a\xcd\xf5\xa6nHV\x11\xb1Y?\xfa\x1e\xba![aa\xb54\x15\x1e\xe5k\xaf\xeft\xae\xf8Z\xb1j\x95\x9a\xc09 \x82\x80jY\x16\xf1\x00\x02#\x80\xe1\x88\xc0(\x06cf\xe3\xea#\&#34;\x14\x12\xe0\x89\xb6]z|\xbb,\x9c\x99\xb9\f\xe0\x93\x87N\x1e\xfb\x1a\x80/\x89\xc8/\x00\xa5r\xf4j\u007f?q\xe4@?偬\xfc\xbeT\x9b\xa6\xc5~ykeYKB\u05c8Zj\xf5z\xbd\xd2\x1b\x9c\x8c\xbb\v\x05\x80\xd7\x18\x05\x0fS\xf8\xf5~z\xef\x9f\x13\x91\xc7_\xfc\xfc\xe2\xcc^\u038d\xae7ݏ\xac[ֺ\xd4\xf4\xfa\xec\xf8\x15-\x15\x92e\x19Bs\xe8\xfaW\x16&#39;g\xbfq\xe8\xe4\xb1e\xe7\xdc\x14\x11=(\&#34;\xe0\xb5\x1c\xc5\xf9\xfe\xdf\x1c;\xb8\x0fr_\xbf}\x00K\x80s\xc3\xf5o\x15\xb7\x81\xd2B\x0e!\f\xebp\xf1\x9b\x8c\xe2\xf5n%\xe6T\n\x9b\x0e3O\x13\xd1\xd4\xe2\xe4\xec\xc6n\xcc\xd7\r\xf3\x1b\x97\xa7\xe7\xdb\x00\xfe\xfc\xf0\xa9\xe3_!\xa2_%\xa2\xc7D\xe4a\xe7\\\x1d@\xa9U6*\x1b\xaaw\x1e\xb5\xac^y\xe0\xbd\xf7 \xe7\xd0\xeb\xe5pnh\xeao\xca`\xe8\xe5hv;\x95߳\xc1$\&#34;z+˲\xbf\x16\x91\xe9\xe5\xe9\xf9\x1du\x1e\xbbY\xac/_\xaf\x15\x18\x96\xb2\xb7\x9bWlBZW\x85\x8d\xe7\xdci7\x96\xb245&#39;\x00\x9e9|\xea\xf8\xbf:\xe7~\v\xc0\xe7\x98\xf9\x1dz/U\x988\xe7\xc0ݲ\x05\xa6\xf3\xb8k\xdf\xfe\x8ae\xa0\x14E\x8e^\xd1۴\xc9\x18\x8d\xf3\r\xef\xfd\xa7E\xe4\xe9\x8533\x15\xdb=\xb6@\xab\xae\xaf\xeaIZk\xc2[\v\x00\xc0\xc0Z\xb2&gt;㝢\u007fǺd\xf4z\xac\xe6\xad\u007f\xdf\n&lt;+\xe0b\x8bĎ\xf9vs\xe1\xec\xc2\xf9ç\x8e\xbf\x97\x88\x1e\x11\x91\xdf\x06\xf0\xcbDD\x03w\xf4\xc5|\xa0\x00\t3\xd8\t0N\xc8\xee\xae6\xf3\xb2q\x0e\x0eܯ\x05&#39;\xd5\xcdغ@\x9ds\x90\xcb\x02j\t\x8a\xa2[YG:\xcfjq\x88ȳι\xaf\x8b\xc8\xdf\\8\xbb\xb0\xe7\x93\x15\xefY\x9a\x95e\x9fW{$\xc1\xde\u007f+,u\x9d\xd8{\x1e\xcd\xfd\&#34;\x80\x87\x8e\x9c&gt;\xf1~\x11\x99\n!\xbc[_k_\xd9@\xb6\x9a\xa1@ѷ\xfa\xb3\x1a\xb2\xfdu\xc8]\x02\xdc\x05`\x1f -AX\v\xa0\rB\xde\xee\xf4לȦ}\x13\x18\xec_犢\xf8\xec\xf2\xf4\xfc\x0fws\xben:A\xbe\xb4H\x9e\x06\xf0\xf4\x91\xd3&#39;\x0e\x02\xf8(\x80_\x17\x91\xf7\xe9\x84\xeaD\xf5\xf2\x1e\xf2\&#34;\xaf&lt;\xf8q\xf6\x89\x1d\x1c\xb0Y\x9b\xd5`t\xa9\x81p\b\xe1\x99\x10\xc2_\xd4j\xb5g\x16&#39;gw\xbf\x9d\xdf\xff\x03\x11\xfd\x0f\x80\t\x00\x9b\x04\x81}H\xac[%\x96\xfev\xac%\xbb\xdf\bb\a,O\xcf\x17\x00\xbez\xe4\xf4\x89s\x00&gt;\x04\xe0#\&#34;\xf2\x90\x88\xec\x8f\xcd\xfa,˰\xd6X\xad&lt;\x1c:\xfe\xd8\xefo\xfc\xb7\x8b\xcc\xfcM\xe7\xdc\x17\x97\xa7\xe7\u05f7\xba\x06\&#34;\xea0\xf3\xb7\x01T,\xd48\xbef\xad\x13+\x90\xad\xb6h\xcb}3\xf3\xb6\xfbC(\&#34;\xb2Q\x14ŷc_\xb4]\x0f\&#34;R\xb1\x9e\x00T\xae\xc5Z\xa5\x806/ʾ\xbf\xd3k\xdb\t\xe5\xc9\xeds\x00\xce\x1d:y\xec&#39;E\xe4c\xcc\xfc\b\x80\a\xac&amp;&gt;X\xcf\xcd\x02\xfcr5\xb5?\x18\x97\xads\x0e\xc2\fq\x0e\x85\xb1\x06E\x04\x01C\x8f\x84\x18\xc5j\xa0&lt;\x0e{\xe9|/˲o\x10\xd17\x17\xce\xccl\xbb\x15\xf5v\xd0\xf1ڴl\x1bطV\xa8\xae\x05\xfb\xba\n\xcaxO\xbc\x9e¸45\xf7\xef\x87N\x1e{\x0f\x11}\xd4{\xff83\xffb\b\xc1Ya\xc4\xc2謵@\xeb\xe5&lt;\x995e\x15\x15+\xc8\xcb\xe7\xf0\xbcs\xeei\&#34;\xfa\xd6\xe2\xe4\xecK{1_;V\xcf\x0e\x9f:~\x9f\x88\xbcOD\x1eȲ\xec\x01f&gt;\x01\xa0\x06Ts\xe7\xad\x14\xb7n\x1f\xdb\r\xcbNH\x96e/2\xf3\xf3\x00\xbe\a\xe0\uf5e6\xe6n\xebBJ\x00\x87N\x1e\x1b\x03\xf0\xfe,\xcb&gt;\&#34;\&#34;\x1fb\xe6{\xe3\x87V\x96*(\x00\x00\x05\x9fIDAT\xc6\nE\xbbї\x9f\x9fg\xe6\xa7\x00|\xeb\xc2م;\xbaQ&amp;n\x8dç\x8e\xff,\x80\x0f\x028FDGC\bG\xbc\xf7\xfb\xac\xb0\xb6V\x9fM\x12Qb\xcb[\x85\xa8U*\x99\xb9\xc5\xccK\xde\xfb\xc5\x10\xc2\x02\x80\u007f\xbapv\xe1\xb6ƅ,\x87\xbep\xe2Q\xef\xfd\x93\xba7Yk\x11@\xe5\xb0\xe4VY\x95:F;G\xe5x\x9f\x9a\xff\xbd\x17&gt;v\xa3\xbf\xffs\u007fp\xf4\xa0s\xeeWD\xe4\xe1,\xcb\x1e\x12\x91\x83V\x10\x01Մ\x0e\x9d\xf7\xf2\xef\x05\&#34;z\x0e\xc0\xd3\xcc\xfcw\xcb\xd3\xf3;j\xa4w3\xecz\x0e\xe1\xd1?\xbc\u007f\\D\x8e3\xf3\x03Y\x96\xddW\x14\xc5O\x88\xc8A\xef\xfdA\&#34;:\xc8\xcc\a\xbd\xf7\x8e\x99WDd\x15\xc0\x8asn\x85\x88V\x99\xf9\xb5\x10\xc2\xf3ι\x17\x96\xa7\xe7\xb7l\xa1\x98\xb8s\x1c:y\xec\x00\x11\xddCD\xf7\x88\xc8=ι{\x01\xdc\x03`\x8c\x99/\x89\xc8%\&#34;z\x13\xc0%\&#34;z\xa3\xacŕ\x18\x01\x0e\x9d&lt;\xe6\x88\xe8g\x9csG\x99\xf9(\x80{\x9ds\aD\xe4\x003\x1f \xa2\x03Y\x96\x1d`\xe6\x03!\x84}ι\x1637\xb2,k0s\x03@\x83\x99\x1bD\xd4@\u007f},\x02X\x04\xf0\x83\xa5\xa9\xb9\xdbW\x96\xe1\x06\x1c\xfe\xe2\xfd\x8f\x02x2N\x92\x897q\xebފcn\x83X\x84\xc9V\v!&lt;\xb5\xf8\xa9\xf37\x14 \x96#\xa7Ox\x00?\r\xe0n\x00w\x17Eq\xb7\xf7\xfen\xef\xfdAf\xbe\x06\xe0\r\&#34;\xba䜻\xc4\xcco\x88\xc8奩\xb9\xdb\xea\x1b\xbf=I\xe8\x89D\&#34;\xf1c\xc0\xd1/\xbf\xfbQ\&#34;z\xd2\xc65ĸ\xe84&amp;d\xd3فj\x8cL\x05\x8e\xba\xe0K\xe1s\xcb\x02\xe4ǁۗ\x84\x9eH$\x12?\xe2\xd8TظK\xaa\x8d]\xe9\xf7\xb6\xaa֠Yfz&gt;\xc8\xc6&amp;F\x8d$@\x12\x89D\xa2\xc4\n\x0e\xa0Zj\xdd6\xbbR\x97\x96Z#63Ϟ_\xd2\xf7ܭl\xc0\x1f5\x92\x00I$\x12\x89\x12\x1b\xe8\xb7.)}M3\xa3\xac@\xb0\xf5\xf9\xe2\xb31q\xe2\xc0\xa8\x91\x04H\&#34;\x91H\x94hv\x95\xcd\x1e\xb5\x99V6\x95\x1d\xa8\x96\xd9\x016\x17\x93̲\f\xbd^\uf39e\xf7\xd9K\x92\x00I$\x12\x89\x92\xb1N\x1d\xb5n\x86Z\x91A\xba\x02)L\ttS\x85B\xbf\x06\xaa\xe7CT\xd8h\xc5\r\x15\&#34;\xa3*@v\xdei&#39;\x91H$F\x84Z\xab\x86:\xeap\x9d\xe8lGF\xc89G6VC\xaf\xe8!\xab{xr`b\x88\xeb\xd7F\v\b@Vm\x8b\xa0Av[\xf6d\x94H\x02$\x91H$JB\b\xf0\xceo*S$\x85\xa0F5\xa0\x03Ըo\x9d\xd4|\xbf8\xac\xba\xb5\x802\x80N\xfd\x1ai\xf0\x00\x9c\x80\x89\xe1j\xa3\x19\x03I\x02$\x91H$JlI\x16%._\xa2&#39;\xcd5\x0eb[X\x88\xf4\xab\xe0:\xa6\xb2\xb21\rʼ\x8f\&#34;I\x80$\x12\x89\x84\xc1\x16\xe3\xb41\x0f[&lt;Q\xcf{h\x8cC\xd1fxJ\xfc\x1e\xa3\xc6h:\xe6\x12\x89Db\x1blU 5&gt;\x8d\xee\xbdG\xbd^\xaf\xa4\xf7\xdaC\x83\xa6\x04}\xa57\xcc(\x92\x04H\&#34;\x91H\x94\xa8P\xb0\xc5\&#34;m\xdf\x19\x1b\x1c\xb7\x02fll\xacr\xf8\xd0\xf6\x0f\xb11\x92Q#\t\x90D\&#34;\x91(\xb1}^l\xd3(\xdb\xf7C\u007fFk]eY6(_\xa2B$nc\x11\xf7O\x1f\x15\x92\x00I$\x12\t\x83\xed壂\x01\xd8\xdc\xee\xd6V\xdbՒ&amp;q\x8bY[|q\x14I\x02$\x91H$Jt\xc3W!\xa0օ\r\xa0\x03\xd8t\x98ЖqW\x01\xa3n/\xb5fF\x91\x94\x85\x95H$\x12\x06ku\xd8&amp;x\x8a\xado\x15\xf7N\x8f\xddU\xea\xd6\xd2\xd8ɨ\x91\x04H\&#34;\x91H\x94ؔ]-\x90\xa8\xc4}\xd0\xf55ۦ8n[\xac?kS}G\x89\xe4\xc2J$\x12\x89\x12kQ\xd86\xbc\xdavۦ\xee\xda~!\xb6d\xbb\xad\xd6k\xad\x94Q$\t\x90D\&#34;\x91(\xb1\xc2\xc0\x16@̲l 0\xecY\x11k\xb1\xe8\x87E\xab\xfa\x8e\xaa\v+\t\x90D\&#34;\x910ĥKl\tw\xb5(\xf4\xc0\xa0\x8do8\xe7*\x95wm&lt;dT\x8b)\x8e\xe6\xa8\x12\x89Db\x9b\xc4\x19W\x8a\x9e0W\xc1\xa2\x8d\xa4,Z&#39;K3\xaf⬭Qc4#;\x89D\&#34;\xb1\r\xbc\xf7\bE@Q\x14\x95\x96\xb4궲=A\xb4\x0f\x88\xbe\xa65\xb4\xac\xf0Qa4\xaaq\x90d\x81$\x12\x89D\x89MŵYWZq\u05f6\xaf\xd5v\xb7\xde\xfb\x8a\xb5\xa1ߋ\x85\xc8(\x92,\x90D\&#34;\x910h}+\x1b\xf3\xd0\xefٲ\xed\xeaʊ˟\xd8`\xba\xfd\xf9Q$Y \x89D\&#34;\xa1\b\x02\x04\xa8\xd7\xea(\xf2\x02\x10@X\xc0\x81\xe1\xc8m\xfa&lt;\x14\x01\x04\x02\x04\xe0\xc0\xe0\xc0 \xf3OX\xfa\x1f\&#34;\xf9\x9d\x1e\xda^\x90,\x90D\&#34;\x91(iu\x9a\xdf\aL\x89\x926W\x0e\x14Z\xb7\x94Z&amp;\xfay\xadV\xab\x94n\xd7\x18IY\x0e\xe5\xbf\xef\xc4x\xf6\x9a$@\x12\x89D\xa2DSs\xe3\x02\x88\x1a8\xb7&#39;\xd05E\xd7\xc6;\x00l\x126\x1a?\x19E\x92\v+\x91H$J4\x80\x1eB@\xadV\x1bX\x1f\xb60\xa2\n\x19\x15\x1c*h4F\x12\xc7?\xf4c\x14I\x16H\&#34;\x91H\x948疙\xf9\x9d\x9ay\x05\xa0\x92\xaa\v\fO\xabk\xb7A[&lt;\xd1\n\x16\xfd\xba\x14:Wn\xffh\x12\x89D\&#34;\x91H$\x12\x89D\&#34;\x91H$\x12\x89D\&#34;\x91H$\x12\xdb\xe1\xff\x00a`\x0e\xb8q\xfd\x8e\xd6\x00\x00\x00\x00IEND\xaeB`\x82&#34;),</pre></code></td></tr><tr><td>272</td><td><code><pre> }</pre></code></td></tr><tr><td>273</td><td><code><pre> file14 := &amp;embedded.EmbeddedFile{</pre></code></td></tr><tr><td>274</td><td><code><pre> Filename: &#34;tray.html&#34;,</pre></code></td></tr><tr><td>275</td><td><code><pre> FileModTime: time.Unix(1535012730, 0),</pre></code></td></tr><tr><td>276</td><td><code><pre> Content: string(&#34;&lt;!doctype html&gt;\n&lt;html lang=\&#34;en\&#34;&gt;\n&lt;head&gt;\n &lt;meta charset=\&#34;utf-8\&#34;&gt;\n &lt;meta name=\&#34;viewport\&#34; content=\&#34;width=device-355, initial-scale=1, shrink-to-fit=no, maximum-scale=1.0, user-scalable=0\&#34;&gt;\n{{if USE_CDN}}\n &lt;link rel=\&#34;shortcut icon\&#34; type=\&#34;image/x-icon\&#34; href=\&#34;https://assets.statup.io/favicon.ico\&#34;&gt;\n &lt;link rel=\&#34;stylesheet\&#34; href=\&#34;https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css\&#34; integrity=\&#34;sha384-WskhaSGFgHYWDcbwN70/dfYBj47jz9qbsMId/iRN3ewGhXQFZCSftd1LZCfmhktB\&#34; crossorigin=\&#34;anonymous\&#34;&gt;\n &lt;link rel=\&#34;stylesheet\&#34; href=\&#34;https://assets.statup.io/base.css\&#34;&gt;\n{{ else }}\n &lt;link rel=\&#34;shortcut icon\&#34; type=\&#34;image/x-icon\&#34; href=\&#34;/favicon.ico\&#34;&gt;\n &lt;link rel=\&#34;stylesheet\&#34; href=\&#34;/css/bootstrap.min.css\&#34;&gt;\n &lt;link rel=\&#34;stylesheet\&#34; href=\&#34;/css/base.css\&#34;&gt;\n{{end}}\n\n &lt;title&gt;{{.Name}} Status&lt;/title&gt;\n\n &lt;style&gt;\n BODY::-webkit-scrollbar { width: 0 !important }\n &lt;/style&gt;\n\n&lt;/head&gt;\n&lt;body&gt;\n\n\n&lt;div class=\&#34;container col-12 sm-container\&#34; style=\&#34;margin-top: 0 !important;\&#34;&gt;\n\n &lt;div class=\&#34;col-12 full-col-12\&#34;&gt;\n &lt;div class=\&#34;list-group online_list\&#34;&gt;\n {{ range .Services }}\n &lt;a href=\&#34;#\&#34; class=\&#34;service_li list-group-item list-group-item-action text-truncate {{if not .Online}}bg-danger text-white{{ end }}\&#34; data-id=\&#34;{{.Id}}\&#34;&gt;\n {{ .Name }}\n {{if .Online}}\n &lt;span class=\&#34;badge bg-success float-right pulse-glow\&#34;&gt;ONLINE&lt;/span&gt;\n {{ else }}\n &lt;span class=\&#34;badge bg-white text-black-50 float-right pulse\&#34;&gt;OFFLINE&lt;/span&gt;\n {{end}}\n &lt;/a&gt;\n {{ end }}\n &lt;/div&gt;\n &lt;/div&gt;\n\n &lt;div class=\&#34;col-12 full-col-12\&#34;&gt;\n {{ range .Services }}\n &lt;div class=\&#34;mt-4\&#34; id=\&#34;service_id_{{.Id}}\&#34;&gt;\n &lt;div class=\&#34;card\&#34;&gt;\n &lt;div class=\&#34;card-body\&#34;&gt;\n &lt;div class=\&#34;col-12\&#34;&gt;\n &lt;h4 class=\&#34;mt-3\&#34;&gt;&lt;a href=\&#34;/service/{{.Id}}\&#34;{{if not .Online}} class=\&#34;text-danger\&#34;{{end}}&gt;{{ .Name }}&lt;/a&gt;\n {{if .Online}}\n &lt;span class=\&#34;badge bg-success float-right\&#34;&gt;ONLINE&lt;/span&gt;\n {{ else }}\n &lt;span class=\&#34;badge bg-danger float-right pulse\&#34;&gt;OFFLINE&lt;/span&gt;\n {{end}}&lt;/h4&gt;\n\n &lt;div class=\&#34;row stats_area mt-5 mb-5\&#34;&gt;\n &lt;div class=\&#34;col-4\&#34;&gt;\n &lt;span class=\&#34;lg_number\&#34;&gt;{{.Online24}}%&lt;/span&gt;\n Online last 24 Hours\n &lt;/div&gt;\n &lt;div class=\&#34;col-4\&#34;&gt;\n &lt;span class=\&#34;lg_number\&#34;&gt;{{.AvgTime}}ms&lt;/span&gt;\n Average Response\n &lt;/div&gt;\n &lt;div class=\&#34;col-4\&#34;&gt;\n &lt;span class=\&#34;lg_number\&#34;&gt;{{.AvgUptime}}%&lt;/span&gt;\n Total Uptime\n &lt;/div&gt;\n &lt;/div&gt;\n\n &lt;/div&gt;\n &lt;/div&gt;\n {{ if .AvgTime }}\n &lt;div class=\&#34;chart-container\&#34;&gt;\n &lt;canvas id=\&#34;service_{{ .Id }}\&#34;&gt;&lt;/canvas&gt;\n &lt;/div&gt;\n {{ end }}\n &lt;div class=\&#34;row lower_canvas full-col-12 text-white{{if not .Online}} bg-danger{{end}}\&#34;&gt;\n &lt;div class=\&#34;col-10 text-truncate\&#34;&gt;\n &lt;span class=\&#34;d-none d-md-inline\&#34;&gt;{{.SmallText}}&lt;/span&gt;\n &lt;/div&gt;\n &lt;div class=\&#34;col-sm-12 col-md-2\&#34;&gt;\n\n &lt;/div&gt;\n &lt;/div&gt;\n &lt;/div&gt;\n &lt;/div&gt;\n {{ end }}\n &lt;/div&gt;\n&lt;/div&gt;\n\n&lt;script src=\&#34;https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js\&#34;&gt;&lt;/script&gt;\n&lt;script src=\&#34;https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js\&#34; integrity=\&#34;sha384-smHYKdLADwkXOn1EmN1qk/HfnUcbVRZyYmZ4qpPea6sjB/pTJ0euyQp0Mk8ck+5T\&#34; crossorigin=\&#34;anonymous\&#34;&gt;&lt;/script&gt;\n&lt;script src=\&#34;https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.2/Chart.bundle.min.js\&#34;&gt;&lt;/script&gt;\n&lt;script src=\&#34;https://assets.statup.io/main.js\&#34;&gt;&lt;/script&gt;\n\n&lt;script src=\&#34;/charts.js\&#34;&gt;&lt;/script&gt;\n\n&lt;/body&gt;\n&lt;/html&gt;&#34;),</pre></code></td></tr><tr><td>277</td><td><code><pre> }</pre></code></td></tr><tr><td>278</td><td><code><pre> file15 := &amp;embedded.EmbeddedFile{</pre></code></td></tr><tr><td>279</td><td><code><pre> Filename: &#34;user.html&#34;,</pre></code></td></tr><tr><td>280</td><td><code><pre> FileModTime: time.Unix(1538459587, 0),</pre></code></td></tr><tr><td>281</td><td><code><pre> Content: string(&#34;{{define \&#34;title\&#34;}}Statup | {{.Username}}{{end}}\n{{define \&#34;content\&#34;}}\n&lt;div class=\&#34;container col-md-7 col-sm-12 mt-md-5 bg-light\&#34;&gt;\n{{template \&#34;nav\&#34;}}\n &lt;div class=\&#34;col-12\&#34;&gt;\n &lt;h3&gt;User {{.Username}}&lt;/h3&gt;\n {{template \&#34;form_user\&#34; .}}\n &lt;/div&gt;\n&lt;/div&gt;\n{{end}}\n&#34;),</pre></code></td></tr><tr><td>282</td><td><code><pre> }</pre></code></td></tr><tr><td>283</td><td><code><pre> file16 := &amp;embedded.EmbeddedFile{</pre></code></td></tr><tr><td>284</td><td><code><pre> Filename: &#34;users.html&#34;,</pre></code></td></tr><tr><td>285</td><td><code><pre> FileModTime: time.Unix(1538459610, 0),</pre></code></td></tr><tr><td>286</td><td><code><pre> Content: string(&#34;{{define \&#34;title\&#34;}}Statup | Users{{end}}\n{{define \&#34;content\&#34;}}\n&lt;div class=\&#34;container col-md-7 col-sm-12 mt-md-5 bg-light\&#34;&gt;\n{{template \&#34;nav\&#34;}}\n &lt;div class=\&#34;col-12\&#34;&gt;\n &lt;h3&gt;Users&lt;/h3&gt;\n &lt;table class=\&#34;table table-striped\&#34;&gt;\n &lt;thead&gt;\n &lt;tr&gt;\n &lt;th scope=\&#34;col\&#34;&gt;Username&lt;/th&gt;\n &lt;th scope=\&#34;col\&#34;&gt;&lt;/th&gt;\n &lt;/tr&gt;\n &lt;/thead&gt;\n &lt;tbody&gt;\n {{range .}}\n &lt;tr&gt;\n &lt;td&gt;{{.Username}}&lt;/td&gt;\n &lt;td class=\&#34;text-right\&#34; id=\&#34;user_{{.Id}}\&#34;&gt;\n &lt;div class=\&#34;btn-group\&#34;&gt;\n &lt;a href=\&#34;/user/{{.Id}}\&#34; class=\&#34;btn btn-primary\&#34;&gt;Edit&lt;/a&gt;\n &lt;a href=\&#34;/user/{{.Id}}/delete\&#34; class=\&#34;btn btn-danger confirm-btn\&#34; data-id=\&#34;user_{{.Id}}\&#34;&gt;Delete&lt;/a&gt;\n &lt;/div&gt;\n &lt;/td&gt;\n &lt;/tr&gt;\n {{end}}\n &lt;/tbody&gt;\n &lt;/table&gt;\n\n &lt;h3&gt;Create User&lt;/h3&gt;\n\n {{template \&#34;form_user\&#34; NewUser}}\n\n &lt;/div&gt;\n&lt;/div&gt;\n{{end}}\n&#34;),</pre></code></td></tr><tr><td>287</td><td><code><pre> }</pre></code></td></tr><tr><td>288</td><td><code><pre></pre></code></td></tr><tr><td>289</td><td><code><pre> // define dirs</pre></code></td></tr><tr><td>290</td><td><code><pre> dirg := &amp;embedded.EmbeddedDir{</pre></code></td></tr><tr><td>291</td><td><code><pre> Filename: &#34;&#34;,</pre></code></td></tr><tr><td>292</td><td><code><pre> DirModTime: time.Unix(1539400173, 0),</pre></code></td></tr><tr><td>293</td><td><code><pre> ChildFiles: []*embedded.EmbeddedFile{</pre></code></td></tr><tr><td>294</td><td><code><pre> fileh, // &#34;base.html&#34;</pre></code></td></tr><tr><td>295</td><td><code><pre> filei, // &#34;dashboard.html&#34;</pre></code></td></tr><tr><td>296</td><td><code><pre> filej, // &#34;error_404.html&#34;</pre></code></td></tr><tr><td>297</td><td><code><pre> filek, // &#34;favicon.ico&#34;</pre></code></td></tr><tr><td>298</td><td><code><pre> filel, // &#34;footer.html&#34;</pre></code></td></tr><tr><td>299</td><td><code><pre> filem, // &#34;form_checkin.html&#34;</pre></code></td></tr><tr><td>300</td><td><code><pre> filen, // &#34;form_notifier.html&#34;</pre></code></td></tr><tr><td>301</td><td><code><pre> fileo, // &#34;form_service.html&#34;</pre></code></td></tr><tr><td>302</td><td><code><pre> filep, // &#34;form_user.html&#34;</pre></code></td></tr><tr><td>303</td><td><code><pre> fileq, // &#34;head.html&#34;</pre></code></td></tr><tr><td>304</td><td><code><pre> filer, // &#34;help.html&#34;</pre></code></td></tr><tr><td>305</td><td><code><pre> files, // &#34;help.md&#34;</pre></code></td></tr><tr><td>306</td><td><code><pre> filet, // &#34;index.html&#34;</pre></code></td></tr><tr><td>307</td><td><code><pre> fileu, // &#34;login.html&#34;</pre></code></td></tr><tr><td>308</td><td><code><pre> filev, // &#34;logs.html&#34;</pre></code></td></tr><tr><td>309</td><td><code><pre> filew, // &#34;nav.html&#34;</pre></code></td></tr><tr><td>310</td><td><code><pre> filex, // &#34;robots.txt&#34;</pre></code></td></tr><tr><td>311</td><td><code><pre> filey, // &#34;scripts.html&#34;</pre></code></td></tr><tr><td>312</td><td><code><pre> filez, // &#34;service.html&#34;</pre></code></td></tr><tr><td>313</td><td><code><pre> file10, // &#34;services.html&#34;</pre></code></td></tr><tr><td>314</td><td><code><pre> file11, // &#34;settings.html&#34;</pre></code></td></tr><tr><td>315</td><td><code><pre> file12, // &#34;setup.html&#34;</pre></code></td></tr><tr><td>316</td><td><code><pre> file13, // &#34;statup.png&#34;</pre></code></td></tr><tr><td>317</td><td><code><pre> file14, // &#34;tray.html&#34;</pre></code></td></tr><tr><td>318</td><td><code><pre> file15, // &#34;user.html&#34;</pre></code></td></tr><tr><td>319</td><td><code><pre> file16, // &#34;users.html&#34;</pre></code></td></tr><tr><td>320</td><td><code><pre></pre></code></td></tr><tr><td>321</td><td><code><pre> },</pre></code></td></tr><tr><td>322</td><td><code><pre> }</pre></code></td></tr><tr><td>323</td><td><code><pre></pre></code></td></tr><tr><td>324</td><td><code><pre> // link ChildDirs</pre></code></td></tr><tr><td>325</td><td><code><pre> dirg.ChildDirs = []*embedded.EmbeddedDir{}</pre></code></td></tr><tr><td>326</td><td><code><pre></pre></code></td></tr><tr><td>327</td><td><code><pre> // register embeddedBox</pre></code></td></tr><tr><td>328</td><td><code><pre> embedded.RegisterEmbeddedBox(`tmpl`, &amp;embedded.EmbeddedBox{</pre></code></td></tr><tr><td>329</td><td><code><pre> Name: `tmpl`,</pre></code></td></tr><tr><td>330</td><td><code><pre> Time: time.Unix(1539400173, 0),</pre></code></td></tr><tr><td>331</td><td><code><pre> Dirs: map[string]*embedded.EmbeddedDir{</pre></code></td></tr><tr><td>332</td><td><code><pre> &#34;&#34;: dirg,</pre></code></td></tr><tr><td>333</td><td><code><pre> },</pre></code></td></tr><tr><td>334</td><td><code><pre> Files: map[string]*embedded.EmbeddedFile{</pre></code></td></tr><tr><td>335</td><td><code><pre> &#34;base.html&#34;: fileh,</pre></code></td></tr><tr><td>336</td><td><code><pre> &#34;dashboard.html&#34;: filei,</pre></code></td></tr><tr><td>337</td><td><code><pre> &#34;error_404.html&#34;: filej,</pre></code></td></tr><tr><td>338</td><td><code><pre> &#34;favicon.ico&#34;: filek,</pre></code></td></tr><tr><td>339</td><td><code><pre> &#34;footer.html&#34;: filel,</pre></code></td></tr><tr><td>340</td><td><code><pre> &#34;form_checkin.html&#34;: filem,</pre></code></td></tr><tr><td>341</td><td><code><pre> &#34;form_notifier.html&#34;: filen,</pre></code></td></tr><tr><td>342</td><td><code><pre> &#34;form_service.html&#34;: fileo,</pre></code></td></tr><tr><td>343</td><td><code><pre> &#34;form_user.html&#34;: filep,</pre></code></td></tr><tr><td>344</td><td><code><pre> &#34;head.html&#34;: fileq,</pre></code></td></tr><tr><td>345</td><td><code><pre> &#34;help.html&#34;: filer,</pre></code></td></tr><tr><td>346</td><td><code><pre> &#34;help.md&#34;: files,</pre></code></td></tr><tr><td>347</td><td><code><pre> &#34;index.html&#34;: filet,</pre></code></td></tr><tr><td>348</td><td><code><pre> &#34;login.html&#34;: fileu,</pre></code></td></tr><tr><td>349</td><td><code><pre> &#34;logs.html&#34;: filev,</pre></code></td></tr><tr><td>350</td><td><code><pre> &#34;nav.html&#34;: filew,</pre></code></td></tr><tr><td>351</td><td><code><pre> &#34;robots.txt&#34;: filex,</pre></code></td></tr><tr><td>352</td><td><code><pre> &#34;scripts.html&#34;: filey,</pre></code></td></tr><tr><td>353</td><td><code><pre> &#34;service.html&#34;: filez,</pre></code></td></tr><tr><td>354</td><td><code><pre> &#34;services.html&#34;: file10,</pre></code></td></tr><tr><td>355</td><td><code><pre> &#34;settings.html&#34;: file11,</pre></code></td></tr><tr><td>356</td><td><code><pre> &#34;setup.html&#34;: file12,</pre></code></td></tr><tr><td>357</td><td><code><pre> &#34;statup.png&#34;: file13,</pre></code></td></tr><tr><td>358</td><td><code><pre> &#34;tray.html&#34;: file14,</pre></code></td></tr><tr><td>359</td><td><code><pre> &#34;user.html&#34;: file15,</pre></code></td></tr><tr><td>360</td><td><code><pre> &#34;users.html&#34;: file16,</pre></code></td></tr><tr><td>361</td><td><code><pre> },</pre></code></td></tr><tr><td>362</td><td><code><pre> })</pre></code></td></tr><tr><td>363</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_CreateAllAssets">func CreateAllAssets</div><div class="info"><a href="#s_fn_CreateAllAssets">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/source/source.go</code>:</p></div><table class="listing">
<tr><td>152</td><td><code><pre>func CreateAllAssets(folder string) error {</pre></code></td></tr><tr><td>153</td><td><code><pre> utils.Log(1, fmt.Sprintf(&#34;Dump Statup assets into %v/assets&#34;, folder))</pre></code></td></tr><tr><td>154</td><td><code><pre> MakePublicFolder(folder + &#34;/assets&#34;)</pre></code></td></tr><tr><td>155</td><td><code><pre> MakePublicFolder(folder + &#34;/assets/js&#34;)</pre></code></td></tr><tr><td>156</td><td><code><pre> MakePublicFolder(folder + &#34;/assets/css&#34;)</pre></code></td></tr><tr><td>157</td><td><code><pre> MakePublicFolder(folder + &#34;/assets/scss&#34;)</pre></code></td></tr><tr><td>158</td><td><code><pre> utils.Log(1, &#34;Inserting scss, css, and javascript files into assets folder&#34;)</pre></code></td></tr><tr><td>159</td><td><code><pre> CopyToPublic(ScssBox, folder+&#34;/assets/scss&#34;, &#34;base.scss&#34;)</pre></code></td></tr><tr><td>160</td><td><code><pre> CopyToPublic(ScssBox, folder+&#34;/assets/scss&#34;, &#34;variables.scss&#34;)</pre></code></td></tr><tr><td>161</td><td><code><pre> CopyToPublic(ScssBox, folder+&#34;/assets/scss&#34;, &#34;mobile.scss&#34;)</pre></code></td></tr><tr><td>162</td><td><code><pre> CopyToPublic(ScssBox, folder+&#34;/assets/scss&#34;, &#34;pikaday.scss&#34;)</pre></code></td></tr><tr><td>163</td><td><code><pre> CopyToPublic(CssBox, folder+&#34;/assets/css&#34;, &#34;bootstrap.min.css&#34;)</pre></code></td></tr><tr><td>164</td><td><code><pre> CopyToPublic(CssBox, folder+&#34;/assets/css&#34;, &#34;base.css&#34;)</pre></code></td></tr><tr><td>165</td><td><code><pre> //CopyToPublic(JsBox, folder+&#34;/assets/js&#34;, &#34;bootstrap.min.js&#34;)</pre></code></td></tr><tr><td>166</td><td><code><pre> //CopyToPublic(JsBox, folder+&#34;/assets/js&#34;, &#34;Chart.bundle.min.js&#34;)</pre></code></td></tr><tr><td>167</td><td><code><pre> //CopyToPublic(JsBox, folder+&#34;/assets/js&#34;, &#34;jquery-3.3.1.min.js&#34;)</pre></code></td></tr><tr><td>168</td><td><code><pre> //CopyToPublic(JsBox, folder+&#34;/assets/js&#34;, &#34;sortable.min.js&#34;)</pre></code></td></tr><tr><td>169</td><td><code><pre> //CopyToPublic(JsBox, folder+&#34;/assets/js&#34;, &#34;main.js&#34;)</pre></code></td></tr><tr><td>170</td><td><code><pre> //CopyToPublic(JsBox, folder+&#34;/assets/js&#34;, &#34;setup.js&#34;)</pre></code></td></tr><tr><td>171</td><td><code><pre> CopyToPublic(TmplBox, folder+&#34;/assets&#34;, &#34;robots.txt&#34;)</pre></code></td></tr><tr><td>172</td><td><code><pre> CopyToPublic(TmplBox, folder+&#34;/assets&#34;, &#34;statup.png&#34;)</pre></code></td></tr><tr><td>173</td><td><code><pre> utils.Log(1, &#34;Compiling CSS from SCSS style...&#34;)</pre></code></td></tr><tr><td>174</td><td><code><pre> err := utils.Log(1, &#34;Statup assets have been inserted&#34;)</pre></code></td></tr><tr><td>175</td><td><code><pre> return err</pre></code></td></tr><tr><td>176</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_init">func init</div><div class="info"><a href="#s_fn_init">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/source/rice-box.go</code>:</p></div><table class="listing">
<tr><td>64</td><td><code><pre>func init() {</pre></code></td></tr><tr><td>65</td><td><code><pre></pre></code></td></tr><tr><td>66</td><td><code><pre> // define files</pre></code></td></tr><tr><td>67</td><td><code><pre> file7 := &amp;embedded.EmbeddedFile{</pre></code></td></tr><tr><td>68</td><td><code><pre> Filename: &#34;Chart.bundle.min.js&#34;,</pre></code></td></tr><tr><td>69</td><td><code><pre> FileModTime: time.Unix(1528732500, 0),</pre></code></td></tr><tr><td>70</td><td><code><pre> Content: string(&#34;/*!\n * Chart.js\n * http://chartjs.org/\n * Version: 2.7.2\n *\n * Copyright 2018 Chart.js Contributors\n * Released under the MIT license\n * https://github.com/chartjs/Chart.js/blob/master/LICENSE.md\n */\n!function(t){if(\&#34;object\&#34;==typeof exports&amp;&amp;\&#34;undefined\&#34;!=typeof module)module.exports=t();else if(\&#34;function\&#34;==typeof define&amp;&amp;define.amd)define([],t);else{(\&#34;undefined\&#34;!=typeof window?window:\&#34;undefined\&#34;!=typeof global?global:\&#34;undefined\&#34;!=typeof self?self:this).Chart=t()}}(function(){return function t(e,i,n){function a(o,s){if(!i[o]){if(!e[o]){var l=\&#34;function\&#34;==typeof require&amp;&amp;require;if(!s&amp;&amp;l)return l(o,!0);if(r)return r(o,!0);var u=new Error(\&#34;Cannot find module &#39;\&#34;+o+\&#34;&#39;\&#34;);throw u.code=\&#34;MODULE_NOT_FOUND\&#34;,u}var d=i[o]={exports:{}};e[o][0].call(d.exports,function(t){var i=e[o][1][t];return a(i||t)},d,d.exports,t,e,i,n)}return i[o].exports}for(var r=\&#34;function\&#34;==typeof require&amp;&amp;require,o=0;o&lt;n.length;o++)a(n[o]);return a}({1:[function(t,e,i){var n=t(5);function a(t){if(t){var e=[0,0,0],i=1,a=t.match(/^#([a-fA-F0-9]{3})$/i);if(a){a=a[1];for(var r=0;r&lt;e.length;r++)e[r]=parseInt(a[r]+a[r],16)}else if(a=t.match(/^#([a-fA-F0-9]{6})$/i)){a=a[1];for(r=0;r&lt;e.length;r++)e[r]=parseInt(a.slice(2*r,2*r+2),16)}else if(a=t.match(/^rgba?\\(\\s*([+-]?\\d+)\\s*,\\s*([+-]?\\d+)\\s*,\\s*([+-]?\\d+)\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)$/i)){for(r=0;r&lt;e.length;r++)e[r]=parseInt(a[r+1]);i=parseFloat(a[4])}else if(a=t.match(/^rgba?\\(\\s*([+-]?[\\d\\.]+)\\%\\s*,\\s*([+-]?[\\d\\.]+)\\%\\s*,\\s*([+-]?[\\d\\.]+)\\%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)$/i)){for(r=0;r&lt;e.length;r++)e[r]=Math.round(2.55*parseFloat(a[r+1]));i=parseFloat(a[4])}else if(a=t.match(/(\\w+)/)){if(\&#34;transparent\&#34;==a[1])return[0,0,0,0];if(!(e=n[a[1]]))return}for(r=0;r&lt;e.length;r++)e[r]=d(e[r],0,255);return i=i||0==i?d(i,0,1):1,e[3]=i,e}}function r(t){if(t){var e=t.match(/^hsla?\\(\\s*([+-]?\\d+)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)/);if(e){var i=parseFloat(e[4]);return[d(parseInt(e[1]),0,360),d(parseFloat(e[2]),0,100),d(parseFloat(e[3]),0,100),d(isNaN(i)?1:i,0,1)]}}}function o(t){if(t){var e=t.match(/^hwb\\(\\s*([+-]?\\d+)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)/);if(e){var i=parseFloat(e[4]);return[d(parseInt(e[1]),0,360),d(parseFloat(e[2]),0,100),d(parseFloat(e[3]),0,100),d(isNaN(i)?1:i,0,1)]}}}function s(t,e){return void 0===e&amp;&amp;(e=void 0!==t[3]?t[3]:1),\&#34;rgba(\&#34;+t[0]+\&#34;, \&#34;+t[1]+\&#34;, \&#34;+t[2]+\&#34;, \&#34;+e+\&#34;)\&#34;}function l(t,e){return\&#34;rgba(\&#34;+Math.round(t[0]/255*100)+\&#34;%, \&#34;+Math.round(t[1]/255*100)+\&#34;%, \&#34;+Math.round(t[2]/255*100)+\&#34;%, \&#34;+(e||t[3]||1)+\&#34;)\&#34;}function u(t,e){return void 0===e&amp;&amp;(e=void 0!==t[3]?t[3]:1),\&#34;hsla(\&#34;+t[0]+\&#34;, \&#34;+t[1]+\&#34;%, \&#34;+t[2]+\&#34;%, \&#34;+e+\&#34;)\&#34;}function d(t,e,i){return Math.min(Math.max(e,t),i)}function h(t){var e=t.toString(16).toUpperCase();return e.length&lt;2?\&#34;0\&#34;+e:e}e.exports={getRgba:a,getHsla:r,getRgb:function(t){var e=a(t);return e&amp;&amp;e.slice(0,3)},getHsl:function(t){var e=r(t);return e&amp;&amp;e.slice(0,3)},getHwb:o,getAlpha:function(t){var e=a(t);{if(e)return e[3];if(e=r(t))return e[3];if(e=o(t))return e[3]}},hexString:function(t){return\&#34;#\&#34;+h(t[0])+h(t[1])+h(t[2])},rgbString:function(t,e){if(e&lt;1||t[3]&amp;&amp;t[3]&lt;1)return s(t,e);return\&#34;rgb(\&#34;+t[0]+\&#34;, \&#34;+t[1]+\&#34;, \&#34;+t[2]+\&#34;)\&#34;},rgbaString:s,percentString:function(t,e){if(e&lt;1||t[3]&amp;&amp;t[3]&lt;1)return l(t,e);var i=Math.round(t[0]/255*100),n=Math.round(t[1]/255*100),a=Math.round(t[2]/255*100);return\&#34;rgb(\&#34;+i+\&#34;%, \&#34;+n+\&#34;%, \&#34;+a+\&#34;%)\&#34;},percentaString:l,hslString:function(t,e){if(e&lt;1||t[3]&amp;&amp;t[3]&lt;1)return u(t,e);return\&#34;hsl(\&#34;+t[0]+\&#34;, \&#34;+t[1]+\&#34;%, \&#34;+t[2]+\&#34;%)\&#34;},hslaString:u,hwbString:function(t,e){void 0===e&amp;&amp;(e=void 0!==t[3]?t[3]:1);return\&#34;hwb(\&#34;+t[0]+\&#34;, \&#34;+t[1]+\&#34;%, \&#34;+t[2]+\&#34;%\&#34;+(void 0!==e&amp;&amp;1!==e?\&#34;, \&#34;+e:\&#34;\&#34;)+\&#34;)\&#34;},keyword:function(t){return c[t.slice(0,3)]}};var c={};for(var f in n)c[n[f]]=f},{5:5}],2:[function(t,e,i){var n=t(4),a=t(1),r=function(t){return t instanceof r?t:this instanceof r?(this.valid=!1,this.values={rgb:[0,0,0],hsl:[0,0,0],hsv:[0,0,0],hwb:[0,0,0],cmyk:[0,0,0,0],alpha:1},void(\&#34;string\&#34;==typeof t?(e=a.getRgba(t))?this.setValues(\&#34;rgb\&#34;,e):(e=a.getHsla(t))?this.setValues(\&#34;hsl\&#34;,e):(e=a.getHwb(t))&amp;&amp;this.setValues(\&#34;hwb\&#34;,e):\&#34;object\&#34;==typeof t&amp;&amp;(void 0!==(e=t).r||void 0!==e.red?this.setValues(\&#34;rgb\&#34;,e):void 0!==e.l||void 0!==e.lightness?this.setValues(\&#34;hsl\&#34;,e):void 0!==e.v||void 0!==e.value?this.setValues(\&#34;hsv\&#34;,e):void 0!==e.w||void 0!==e.whiteness?this.setValues(\&#34;hwb\&#34;,e):void 0===e.c&amp;&amp;void 0===e.cyan||this.setValues(\&#34;cmyk\&#34;,e)))):new r(t);var e};r.prototype={isValid:function(){return this.valid},rgb:function(){return this.setSpace(\&#34;rgb\&#34;,arguments)},hsl:function(){return this.setSpace(\&#34;hsl\&#34;,arguments)},hsv:function(){return this.setSpace(\&#34;hsv\&#34;,arguments)},hwb:function(){return this.setSpace(\&#34;hwb\&#34;,arguments)},cmyk:function(){return this.setSpace(\&#34;cmyk\&#34;,arguments)},rgbArray:function(){return this.values.rgb},hslArray:function(){return this.values.hsl},hsvArray:function(){return this.values.hsv},hwbArray:function(){var t=this.values;return 1!==t.alpha?t.hwb.concat([t.alpha]):t.hwb},cmykArray:function(){return this.values.cmyk},rgbaArray:function(){var t=this.values;return t.rgb.concat([t.alpha])},hslaArray:function(){var t=this.values;return t.hsl.concat([t.alpha])},alpha:function(t){return void 0===t?this.values.alpha:(this.setValues(\&#34;alpha\&#34;,t),this)},red:function(t){return this.setChannel(\&#34;rgb\&#34;,0,t)},green:function(t){return this.setChannel(\&#34;rgb\&#34;,1,t)},blue:function(t){return this.setChannel(\&#34;rgb\&#34;,2,t)},hue:function(t){return t&amp;&amp;(t=(t%=360)&lt;0?360+t:t),this.setChannel(\&#34;hsl\&#34;,0,t)},saturation:function(t){return this.setChannel(\&#34;hsl\&#34;,1,t)},lightness:function(t){return this.setChannel(\&#34;hsl\&#34;,2,t)},saturationv:function(t){return this.setChannel(\&#34;hsv\&#34;,1,t)},whiteness:function(t){return this.setChannel(\&#34;hwb\&#34;,1,t)},blackness:function(t){return this.setChannel(\&#34;hwb\&#34;,2,t)},value:function(t){return this.setChannel(\&#34;hsv\&#34;,2,t)},cyan:function(t){return this.setChannel(\&#34;cmyk\&#34;,0,t)},magenta:function(t){return this.setChannel(\&#34;cmyk\&#34;,1,t)},yellow:function(t){return this.setChannel(\&#34;cmyk\&#34;,2,t)},black:function(t){return this.setChannel(\&#34;cmyk\&#34;,3,t)},hexString:function(){return a.hexString(this.values.rgb)},rgbString:function(){return a.rgbString(this.values.rgb,this.values.alpha)},rgbaString:function(){return a.rgbaString(this.values.rgb,this.values.alpha)},percentString:function(){return a.percentString(this.values.rgb,this.values.alpha)},hslString:function(){return a.hslString(this.values.hsl,this.values.alpha)},hslaString:function(){return a.hslaString(this.values.hsl,this.values.alpha)},hwbString:function(){return a.hwbString(this.values.hwb,this.values.alpha)},keyword:function(){return a.keyword(this.values.rgb,this.values.alpha)},rgbNumber:function(){var t=this.values.rgb;return t[0]&lt;&lt;16|t[1]&lt;&lt;8|t[2]},luminosity:function(){for(var t=this.values.rgb,e=[],i=0;i&lt;t.length;i++){var n=t[i]/255;e[i]=n&lt;=.03928?n/12.92:Math.pow((n+.055)/1.055,2.4)}return.2126*e[0]+.7152*e[1]+.0722*e[2]},contrast:function(t){var e=this.luminosity(),i=t.luminosity();return e&gt;i?(e+.05)/(i+.05):(i+.05)/(e+.05)},level:function(t){var e=this.contrast(t);return e&gt;=7.1?\&#34;AAA\&#34;:e&gt;=4.5?\&#34;AA\&#34;:\&#34;\&#34;},dark:function(){var t=this.values.rgb;return(299*t[0]+587*t[1]+114*t[2])/1e3&lt;128},light:function(){return!this.dark()},negate:function(){for(var t=[],e=0;e&lt;3;e++)t[e]=255-this.values.rgb[e];return this.setValues(\&#34;rgb\&#34;,t),this},lighten:function(t){var e=this.values.hsl;return e[2]+=e[2]*t,this.setValues(\&#34;hsl\&#34;,e),this},darken:function(t){var e=this.values.hsl;return e[2]-=e[2]*t,this.setValues(\&#34;hsl\&#34;,e),this},saturate:function(t){var e=this.values.hsl;return e[1]+=e[1]*t,this.setValues(\&#34;hsl\&#34;,e),this},desaturate:function(t){var e=this.values.hsl;return e[1]-=e[1]*t,this.setValues(\&#34;hsl\&#34;,e),this},whiten:function(t){var e=this.values.hwb;return e[1]+=e[1]*t,this.setValues(\&#34;hwb\&#34;,e),this},blacken:function(t){var e=this.values.hwb;return e[2]+=e[2]*t,this.setValues(\&#34;hwb\&#34;,e),this},greyscale:function(){var t=this.values.rgb,e=.3*t[0]+.59*t[1]+.11*t[2];return this.setValues(\&#34;rgb\&#34;,[e,e,e]),this},clearer:function(t){var e=this.values.alpha;return this.setValues(\&#34;alpha\&#34;,e-e*t),this},opaquer:function(t){var e=this.values.alpha;return this.setValues(\&#34;alpha\&#34;,e+e*t),this},rotate:function(t){var e=this.values.hsl,i=(e[0]+t)%360;return e[0]=i&lt;0?360+i:i,this.setValues(\&#34;hsl\&#34;,e),this},mix:function(t,e){var i=this,n=t,a=void 0===e?.5:e,r=2*a-1,o=i.alpha()-n.alpha(),s=((r*o==-1?r:(r+o)/(1+r*o))+1)/2,l=1-s;return this.rgb(s*i.red()+l*n.red(),s*i.green()+l*n.green(),s*i.blue()+l*n.blue()).alpha(i.alpha()*a+n.alpha()*(1-a))},toJSON:function(){return this.rgb()},clone:function(){var t,e,i=new r,n=this.values,a=i.values;for(var o in n)n.hasOwnProperty(o)&amp;&amp;(t=n[o],\&#34;[object Array]\&#34;===(e={}.toString.call(t))?a[o]=t.slice(0):\&#34;[object Number]\&#34;===e?a[o]=t:console.error(\&#34;unexpected color value:\&#34;,t));return i}},r.prototype.spaces={rgb:[\&#34;red\&#34;,\&#34;green\&#34;,\&#34;blue\&#34;],hsl:[\&#34;hue\&#34;,\&#34;saturation\&#34;,\&#34;lightness\&#34;],hsv:[\&#34;hue\&#34;,\&#34;saturation\&#34;,\&#34;value\&#34;],hwb:[\&#34;hue\&#34;,\&#34;whiteness\&#34;,\&#34;blackness\&#34;],cmyk:[\&#34;cyan\&#34;,\&#34;magenta\&#34;,\&#34;yellow\&#34;,\&#34;black\&#34;]},r.prototype.maxes={rgb:[255,255,255],hsl:[360,100,100],hsv:[360,100,100],hwb:[360,100,100],cmyk:[100,100,100,100]},r.prototype.getValues=function(t){for(var e=this.values,i={},n=0;n&lt;t.length;n++)i[t.charAt(n)]=e[t][n];return 1!==e.alpha&amp;&amp;(i.a=e.alpha),i},r.prototype.setValues=function(t,e){var i,a,r=this.values,o=this.spaces,s=this.maxes,l=1;if(this.valid=!0,\&#34;alpha\&#34;===t)l=e;else if(e.length)r[t]=e.slice(0,t.length),l=e[t.length];else if(void 0!==e[t.charAt(0)]){for(i=0;i&lt;t.length;i++)r[t][i]=e[t.charAt(i)];l=e.a}else if(void 0!==e[o[t][0]]){var u=o[t];for(i=0;i&lt;t.length;i++)r[t][i]=e[u[i]];l=e.alpha}if(r.alpha=Math.max(0,Math.min(1,void 0===l?r.alpha:l)),\&#34;alpha\&#34;===t)return!1;for(i=0;i&lt;t.length;i++)a=Math.max(0,Math.min(s[t][i],r[t][i])),r[t][i]=Math.round(a);for(var d in o)d!==t&amp;&amp;(r[d]=n[t][d](r[t]));return!0},r.prototype.setSpace=function(t,e){var i=e[0];return void 0===i?this.getValues(t):(\&#34;number\&#34;==typeof i&amp;&amp;(i=Array.prototype.slice.call(e)),this.setValues(t,i),this)},r.prototype.setChannel=function(t,e,i){var n=this.values[t];return void 0===i?n[e]:i===n[e]?this:(n[e]=i,this.setValues(t,n),this)},\&#34;undefined\&#34;!=typeof window&amp;&amp;(window.Color=r),e.exports=r},{1:1,4:4}],3:[function(t,e,i){function n(t){var e,i,n=t[0]/255,a=t[1]/255,r=t[2]/255,o=Math.min(n,a,r),s=Math.max(n,a,r),l=s-o;return s==o?e=0:n==s?e=(a-r)/l:a==s?e=2+(r-n)/l:r==s&amp;&amp;(e=4+(n-a)/l),(e=Math.min(60*e,360))&lt;0&amp;&amp;(e+=360),i=(o+s)/2,[e,100*(s==o?0:i&lt;=.5?l/(s+o):l/(2-s-o)),100*i]}function a(t){var e,i,n=t[0],a=t[1],r=t[2],o=Math.min(n,a,r),s=Math.max(n,a,r),l=s-o;return i=0==s?0:l/s*1e3/10,s==o?e=0:n==s?e=(a-r)/l:a==s?e=2+(r-n)/l:r==s&amp;&amp;(e=4+(n-a)/l),(e=Math.min(60*e,360))&lt;0&amp;&amp;(e+=360),[e,i,s/255*1e3/10]}function o(t){var e=t[0],i=t[1],a=t[2];return[n(t)[0],100*(1/255*Math.min(e,Math.min(i,a))),100*(a=1-1/255*Math.max(e,Math.max(i,a)))]}function s(t){var e,i=t[0]/255,n=t[1]/255,a=t[2]/255;return[100*((1-i-(e=Math.min(1-i,1-n,1-a)))/(1-e)||0),100*((1-n-e)/(1-e)||0),100*((1-a-e)/(1-e)||0),100*e]}function l(t){return S[JSON.stringify(t)]}function u(t){var e=t[0]/255,i=t[1]/255,n=t[2]/255;return[100*(.4124*(e=e&gt;.04045?Math.pow((e+.055)/1.055,2.4):e/12.92)+.3576*(i=i&gt;.04045?Math.pow((i+.055)/1.055,2.4):i/12.92)+.1805*(n=n&gt;.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)),100*(.2126*e+.7152*i+.0722*n),100*(.0193*e+.1192*i+.9505*n)]}function d(t){var e=u(t),i=e[0],n=e[1],a=e[2];return n/=100,a/=108.883,i=(i/=95.047)&gt;.008856?Math.pow(i,1/3):7.787*i+16/116,[116*(n=n&gt;.008856?Math.pow(n,1/3):7.787*n+16/116)-16,500*(i-n),200*(n-(a=a&gt;.008856?Math.pow(a,1/3):7.787*a+16/116))]}function h(t){var e,i,n,a,r,o=t[0]/360,s=t[1]/100,l=t[2]/100;if(0==s)return[r=255*l,r,r];e=2*l-(i=l&lt;.5?l*(1+s):l+s-l*s),a=[0,0,0];for(var u=0;u&lt;3;u++)(n=o+1/3*-(u-1))&lt;0&amp;&amp;n++,n&gt;1&amp;&amp;n--,r=6*n&lt;1?e+6*(i-e)*n:2*n&lt;1?i:3*n&lt;2?e+(i-e)*(2/3-n)*6:e,a[u]=255*r;return a}function c(t){var e=t[0]/60,i=t[1]/100,n=t[2]/100,a=Math.floor(e)%6,r=e-Math.floor(e),o=255*n*(1-i),s=255*n*(1-i*r),l=255*n*(1-i*(1-r));n*=255;switch(a){case 0:return[n,l,o];case 1:return[s,n,o];case 2:return[o,n,l];case 3:return[o,s,n];case 4:return[l,o,n];case 5:return[n,o,s]}}function f(t){var e,i,n,a,o=t[0]/360,s=t[1]/100,l=t[2]/100,u=s+l;switch(u&gt;1&amp;&amp;(s/=u,l/=u),n=6*o-(e=Math.floor(6*o)),0!=(1&amp;e)&amp;&amp;(n=1-n),a=s+n*((i=1-l)-s),e){default:case 6:case 0:r=i,g=a,b=s;break;case 1:r=a,g=i,b=s;break;case 2:r=s,g=i,b=a;break;case 3:r=s,g=a,b=i;break;case 4:r=a,g=s,b=i;break;case 5:r=i,g=s,b=a}return[255*r,255*g,255*b]}function m(t){var e=t[0]/100,i=t[1]/100,n=t[2]/100,a=t[3]/100;return[255*(1-Math.min(1,e*(1-a)+a)),255*(1-Math.min(1,i*(1-a)+a)),255*(1-Math.min(1,n*(1-a)+a))]}function p(t){var e,i,n,a=t[0]/100,r=t[1]/100,o=t[2]/100;return i=-.9689*a+1.8758*r+.0415*o,n=.0557*a+-.204*r+1.057*o,e=(e=3.2406*a+-1.5372*r+-.4986*o)&gt;.0031308?1.055*Math.pow(e,1/2.4)-.055:e*=12.92,i=i&gt;.0031308?1.055*Math.pow(i,1/2.4)-.055:i*=12.92,n=n&gt;.0031308?1.055*Math.pow(n,1/2.4)-.055:n*=12.92,[255*(e=Math.min(Math.max(0,e),1)),255*(i=Math.min(Math.max(0,i),1)),255*(n=Math.min(Math.max(0,n),1))]}function v(t){var e=t[0],i=t[1],n=t[2];return i/=100,n/=108.883,e=(e/=95.047)&gt;.008856?Math.pow(e,1/3):7.787*e+16/116,[116*(i=i&gt;.008856?Math.pow(i,1/3):7.787*i+16/116)-16,500*(e-i),200*(i-(n=n&gt;.008856?Math.pow(n,1/3):7.787*n+16/116))]}function y(t){var e,i,n,a,r=t[0],o=t[1],s=t[2];return r&lt;=8?a=(i=100*r/903.3)/100*7.787+16/116:(i=100*Math.pow((r+16)/116,3),a=Math.pow(i/100,1/3)),[e=e/95.047&lt;=.008856?e=95.047*(o/500+a-16/116)/7.787:95.047*Math.pow(o/500+a,3),i,n=n/108.883&lt;=.008859?n=108.883*(a-s/200-16/116)/7.787:108.883*Math.pow(a-s/200,3)]}function x(t){var e,i=t[0],n=t[1],a=t[2];return(e=360*Math.atan2(a,n)/2/Math.PI)&lt;0&amp;&amp;(e+=360),[i,Math.sqrt(n*n+a*a),e]}function _(t){return p(y(t))}function k(t){var e,i=t[0],n=t[1];return e=t[2]/360*2*Math.PI,[i,n*Math.cos(e),n*Math.sin(e)]}function w(t){return M[t]}e.exports={rgb2hsl:n,rgb2hsv:a,rgb2hwb:o,rgb2cmyk:s,rgb2keyword:l,rgb2xyz:u,rgb2lab:d,rgb2lch:function(t){return x(d(t))},hsl2rgb:h,hsl2hsv:function(t){var e=t[0],i=t[1]/100,n=t[2]/100;if(0===n)return[0,0,0];return[e,100*(2*(i*=(n*=2)&lt;=1?n:2-n)/(n+i)),100*((n+i)/2)]},hsl2hwb:function(t){return o(h(t))},hsl2cmyk:function(t){return s(h(t))},hsl2keyword:function(t){return l(h(t))},hsv2rgb:c,hsv2hsl:function(t){var e,i,n=t[0],a=t[1]/100,r=t[2]/100;return e=a*r,[n,100*(e=(e/=(i=(2-a)*r)&lt;=1?i:2-i)||0),100*(i/=2)]},hsv2hwb:function(t){return o(c(t))},hsv2cmyk:function(t){return s(c(t))},hsv2keyword:function(t){return l(c(t))},hwb2rgb:f,hwb2hsl:function(t){return n(f(t))},hwb2hsv:function(t){return a(f(t))},hwb2cmyk:function(t){return s(f(t))},hwb2keyword:function(t){return l(f(t))},cmyk2rgb:m,cmyk2hsl:function(t){return n(m(t))},cmyk2hsv:function(t){return a(m(t))},cmyk2hwb:function(t){return o(m(t))},cmyk2keyword:function(t){return l(m(t))},keyword2rgb:w,keyword2hsl:function(t){return n(w(t))},keyword2hsv:function(t){return a(w(t))},keyword2hwb:function(t){return o(w(t))},keyword2cmyk:function(t){return s(w(t))},keyword2lab:function(t){return d(w(t))},keyword2xyz:function(t){return u(w(t))},xyz2rgb:p,xyz2lab:v,xyz2lch:function(t){return x(v(t))},lab2xyz:y,lab2rgb:_,lab2lch:x,lch2lab:k,lch2xyz:function(t){return y(k(t))},lch2rgb:function(t){return _(k(t))}};var M={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},S={};for(var D in M)S[JSON.stringify(M[D])]=D},{}],4:[function(t,e,i){var n=t(3),a=function(){return new u};for(var r in n){a[r+\&#34;Raw\&#34;]=function(t){return function(e){return\&#34;number\&#34;==typeof e&amp;&amp;(e=Array.prototype.slice.call(arguments)),n[t](e)}}(r);var o=/(\\w+)2(\\w+)/.exec(r),s=o[1],l=o[2];(a[s]=a[s]||{})[l]=a[r]=function(t){return function(e){\&#34;number\&#34;==typeof e&amp;&amp;(e=Array.prototype.slice.call(arguments));var i=n[t](e);if(\&#34;string\&#34;==typeof i||void 0===i)return i;for(var a=0;a&lt;i.length;a++)i[a]=Math.round(i[a]);return i}}(r)}var u=function(){this.convs={}};u.prototype.routeSpace=function(t,e){var i=e[0];return void 0===i?this.getValues(t):(\&#34;number\&#34;==typeof i&amp;&amp;(i=Array.prototype.slice.call(e)),this.setValues(t,i))},u.prototype.setValues=function(t,e){return this.space=t,this.convs={},this.convs[t]=e,this},u.prototype.getValues=function(t){var e=this.convs[t];if(!e){var i=this.space,n=this.convs[i];e=a[i][t](n),this.convs[t]=e}return e},[\&#34;rgb\&#34;,\&#34;hsl\&#34;,\&#34;hsv\&#34;,\&#34;cmyk\&#34;,\&#34;keyword\&#34;].forEach(function(t){u.prototype[t]=function(e){return this.routeSpace(t,arguments)}}),e.exports=a},{3:3}],5:[function(t,e,i){\&#34;use strict\&#34;;e.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}},{}],6:[function(t,e,i){var n,a;n=this,a=function(){\&#34;use strict\&#34;;var i,n;function a(){return i.apply(null,arguments)}function r(t){return t instanceof Array||\&#34;[object Array]\&#34;===Object.prototype.toString.call(t)}function o(t){return null!=t&amp;&amp;\&#34;[object Object]\&#34;===Object.prototype.toString.call(t)}function s(t){return void 0===t}function l(t){return\&#34;number\&#34;==typeof t||\&#34;[object Number]\&#34;===Object.prototype.toString.call(t)}function u(t){return t instanceof Date||\&#34;[object Date]\&#34;===Object.prototype.toString.call(t)}function d(t,e){var i,n=[];for(i=0;i&lt;t.length;++i)n.push(e(t[i],i));return n}function h(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function c(t,e){for(var i in e)h(e,i)&amp;&amp;(t[i]=e[i]);return h(e,\&#34;toString\&#34;)&amp;&amp;(t.toString=e.toString),h(e,\&#34;valueOf\&#34;)&amp;&amp;(t.valueOf=e.valueOf),t}function f(t,e,i,n){return Pe(t,e,i,n,!0).utc()}function g(t){return null==t._pf&amp;&amp;(t._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null,rfc2822:!1,weekdayMismatch:!1}),t._pf}function m(t){if(null==t._isValid){var e=g(t),i=n.call(e.parsedDateParts,function(t){return null!=t}),a=!isNaN(t._d.getTime())&amp;&amp;e.overflow&lt;0&amp;&amp;!e.empty&amp;&amp;!e.invalidMonth&amp;&amp;!e.invalidWeekday&amp;&amp;!e.weekdayMismatch&amp;&amp;!e.nullInput&amp;&amp;!e.invalidFormat&amp;&amp;!e.userInvalidated&amp;&amp;(!e.meridiem||e.meridiem&amp;&amp;i);if(t._strict&amp;&amp;(a=a&amp;&amp;0===e.charsLeftOver&amp;&amp;0===e.unusedTokens.length&amp;&amp;void 0===e.bigHour),null!=Object.isFrozen&amp;&amp;Object.isFrozen(t))return a;t._isValid=a}return t._isValid}function p(t){var e=f(NaN);return null!=t?c(g(e),t):g(e).userInvalidated=!0,e}n=Array.prototype.some?Array.prototype.some:function(t){for(var e=Object(this),i=e.length&gt;&gt;&gt;0,n=0;n&lt;i;n++)if(n in e&amp;&amp;t.call(this,e[n],n,e))return!0;return!1};var v=a.momentProperties=[];function y(t,e){var i,n,a;if(s(e._isAMomentObject)||(t._isAMomentObject=e._isAMomentObject),s(e._i)||(t._i=e._i),s(e._f)||(t._f=e._f),s(e._l)||(t._l=e._l),s(e._strict)||(t._strict=e._strict),s(e._tzm)||(t._tzm=e._tzm),s(e._isUTC)||(t._isUTC=e._isUTC),s(e._offset)||(t._offset=e._offset),s(e._pf)||(t._pf=g(e)),s(e._locale)||(t._locale=e._locale),v.length&gt;0)for(i=0;i&lt;v.length;i++)s(a=e[n=v[i]])||(t[n]=a);return t}var b=!1;function x(t){y(this,t),this._d=new Date(null!=t._d?t._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===b&amp;&amp;(b=!0,a.updateOffset(this),b=!1)}function _(t){return t instanceof x||null!=t&amp;&amp;null!=t._isAMomentObject}function k(t){return t&lt;0?Math.ceil(t)||0:Math.floor(t)}function w(t){var e=+t,i=0;return 0!==e&amp;&amp;isFinite(e)&amp;&amp;(i=k(e)),i}function M(t,e,i){var n,a=Math.min(t.length,e.length),r=Math.abs(t.length-e.length),o=0;for(n=0;n&lt;a;n++)(i&amp;&amp;t[n]!==e[n]||!i&amp;&amp;w(t[n])!==w(e[n]))&amp;&amp;o++;return o+r}function S(t){!1===a.suppressDeprecationWarnings&amp;&amp;\&#34;undefined\&#34;!=typeof console&amp;&amp;console.warn&amp;&amp;console.warn(\&#34;Deprecation warning: \&#34;+t)}function D(t,e){var i=!0;return c(function(){if(null!=a.deprecationHandler&amp;&amp;a.deprecationHandler(null,t),i){for(var n,r=[],o=0;o&lt;arguments.length;o++){if(n=\&#34;\&#34;,\&#34;object\&#34;==typeof arguments[o]){for(var s in n+=\&#34;\\n[\&#34;+o+\&#34;] \&#34;,arguments[0])n+=s+\&#34;: \&#34;+arguments[0][s]+\&#34;, \&#34;;n=n.slice(0,-2)}else n=arguments[o];r.push(n)}S(t+\&#34;\\nArguments: \&#34;+Array.prototype.slice.call(r).join(\&#34;\&#34;)+\&#34;\\n\&#34;+(new Error).stack),i=!1}return e.apply(this,arguments)},e)}var C,P={};function T(t,e){null!=a.deprecationHandler&amp;&amp;a.deprecationHandler(t,e),P[t]||(S(e),P[t]=!0)}function O(t){return t instanceof Function||\&#34;[object Function]\&#34;===Object.prototype.toString.call(t)}function I(t,e){var i,n=c({},t);for(i in e)h(e,i)&amp;&amp;(o(t[i])&amp;&amp;o(e[i])?(n[i]={},c(n[i],t[i]),c(n[i],e[i])):null!=e[i]?n[i]=e[i]:delete n[i]);for(i in t)h(t,i)&amp;&amp;!h(e,i)&amp;&amp;o(t[i])&amp;&amp;(n[i]=c({},n[i]));return n}function A(t){null!=t&amp;&amp;this.set(t)}a.suppressDeprecationWarnings=!1,a.deprecationHandler=null,C=Object.keys?Object.keys:function(t){var e,i=[];for(e in t)h(t,e)&amp;&amp;i.push(e);return i};var F={};function R(t,e){var i=t.toLowerCase();F[i]=F[i+\&#34;s\&#34;]=F[e]=t}function L(t){return\&#34;string\&#34;==typeof t?F[t]||F[t.toLowerCase()]:void 0}function W(t){var e,i,n={};for(i in t)h(t,i)&amp;&amp;(e=L(i))&amp;&amp;(n[e]=t[i]);return n}var Y={};function N(t,e){Y[t]=e}function z(t,e,i){var n=\&#34;\&#34;+Math.abs(t),a=e-n.length;return(t&gt;=0?i?\&#34;+\&#34;:\&#34;\&#34;:\&#34;-\&#34;)+Math.pow(10,Math.max(0,a)).toString().substr(1)+n}var H=/(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,V=/(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,B={},E={};function j(t,e,i,n){var a=n;\&#34;string\&#34;==typeof n&amp;&amp;(a=function(){return this[n]()}),t&amp;&amp;(E[t]=a),e&amp;&amp;(E[e[0]]=function(){return z(a.apply(this,arguments),e[1],e[2])}),i&amp;&amp;(E[i]=function(){return this.localeData().ordinal(a.apply(this,arguments),t)})}function U(t,e){return t.isValid()?(e=q(e,t.localeData()),B[e]=B[e]||function(t){var e,i,n,a=t.match(H);for(e=0,i=a.length;e&lt;i;e++)E[a[e]]?a[e]=E[a[e]]:a[e]=(n=a[e]).match(/\\[[\\s\\S]/)?n.replace(/^\\[|\\]$/g,\&#34;\&#34;):n.replace(/\\\\/g,\&#34;\&#34;);return function(e){var n,r=\&#34;\&#34;;for(n=0;n&lt;i;n++)r+=O(a[n])?a[n].call(e,t):a[n];return r}}(e),B[e](t)):t.localeData().invalidDate()}function q(t,e){var i=5;function n(t){return e.longDateFormat(t)||t}for(V.lastIndex=0;i&gt;=0&amp;&amp;V.test(t);)t=t.replace(V,n),V.lastIndex=0,i-=1;return t}var G=/\\d/,Z=/\\d\\d/,X=/\\d{3}/,J=/\\d{4}/,K=/[+-]?\\d{6}/,$=/\\d\\d?/,Q=/\\d\\d\\d\\d?/,tt=/\\d\\d\\d\\d\\d\\d?/,et=/\\d{1,3}/,it=/\\d{1,4}/,nt=/[+-]?\\d{1,6}/,at=/\\d+/,rt=/[+-]?\\d+/,ot=/Z|[+-]\\d\\d:?\\d\\d/gi,st=/Z|[+-]\\d\\d(?::?\\d\\d)?/gi,lt=/[0-9]{0,256}[&#39;a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,ut={};function dt(t,e,i){ut[t]=O(e)?e:function(t,n){return t&amp;&amp;i?i:e}}function ht(t,e){return h(ut,t)?ut[t](e._strict,e._locale):new RegExp(ct(t.replace(\&#34;\\\\\&#34;,\&#34;\&#34;).replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,function(t,e,i,n,a){return e||i||n||a})))}function ct(t){return t.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g,\&#34;\\\\$&amp;\&#34;)}var ft={};function gt(t,e){var i,n=e;for(\&#34;string\&#34;==typeof t&amp;&amp;(t=[t]),l(e)&amp;&amp;(n=function(t,i){i[e]=w(t)}),i=0;i&lt;t.length;i++)ft[t[i]]=n}function mt(t,e){gt(t,function(t,i,n,a){n._w=n._w||{},e(t,n._w,n,a)})}var pt=0,vt=1,yt=2,bt=3,xt=4,_t=5,kt=6,wt=7,Mt=8;function St(t){return Dt(t)?366:365}function Dt(t){return t%4==0&amp;&amp;t%100!=0||t%400==0}j(\&#34;Y\&#34;,0,0,function(){var t=this.year();return t&lt;=9999?\&#34;\&#34;+t:\&#34;+\&#34;+t}),j(0,[\&#34;YY\&#34;,2],0,function(){return this.year()%100}),j(0,[\&#34;YYYY\&#34;,4],0,\&#34;year\&#34;),j(0,[\&#34;YYYYY\&#34;,5],0,\&#34;year\&#34;),j(0,[\&#34;YYYYYY\&#34;,6,!0],0,\&#34;year\&#34;),R(\&#34;year\&#34;,\&#34;y\&#34;),N(\&#34;year\&#34;,1),dt(\&#34;Y\&#34;,rt),dt(\&#34;YY\&#34;,$,Z),dt(\&#34;YYYY\&#34;,it,J),dt(\&#34;YYYYY\&#34;,nt,K),dt(\&#34;YYYYYY\&#34;,nt,K),gt([\&#34;YYYYY\&#34;,\&#34;YYYYYY\&#34;],pt),gt(\&#34;YYYY\&#34;,function(t,e){e[pt]=2===t.length?a.parseTwoDigitYear(t):w(t)}),gt(\&#34;YY\&#34;,function(t,e){e[pt]=a.parseTwoDigitYear(t)}),gt(\&#34;Y\&#34;,function(t,e){e[pt]=parseInt(t,10)}),a.parseTwoDigitYear=function(t){return w(t)+(w(t)&gt;68?1900:2e3)};var Ct,Pt=Tt(\&#34;FullYear\&#34;,!0);function Tt(t,e){return function(i){return null!=i?(It(this,t,i),a.updateOffset(this,e),this):Ot(this,t)}}function Ot(t,e){return t.isValid()?t._d[\&#34;get\&#34;+(t._isUTC?\&#34;UTC\&#34;:\&#34;\&#34;)+e]():NaN}function It(t,e,i){t.isValid()&amp;&amp;!isNaN(i)&amp;&amp;(\&#34;FullYear\&#34;===e&amp;&amp;Dt(t.year())&amp;&amp;1===t.month()&amp;&amp;29===t.date()?t._d[\&#34;set\&#34;+(t._isUTC?\&#34;UTC\&#34;:\&#34;\&#34;)+e](i,t.month(),At(i,t.month())):t._d[\&#34;set\&#34;+(t._isUTC?\&#34;UTC\&#34;:\&#34;\&#34;)+e](i))}function At(t,e){if(isNaN(t)||isNaN(e))return NaN;var i,n=(e%(i=12)+i)%i;return t+=(e-n)/12,1===n?Dt(t)?29:28:31-n%7%2}Ct=Array.prototype.indexOf?Array.prototype.indexOf:function(t){var e;for(e=0;e&lt;this.length;++e)if(this[e]===t)return e;return-1},j(\&#34;M\&#34;,[\&#34;MM\&#34;,2],\&#34;Mo\&#34;,function(){return this.month()+1}),j(\&#34;MMM\&#34;,0,0,function(t){return this.localeData().monthsShort(this,t)}),j(\&#34;MMMM\&#34;,0,0,function(t){return this.localeData().months(this,t)}),R(\&#34;month\&#34;,\&#34;M\&#34;),N(\&#34;month\&#34;,8),dt(\&#34;M\&#34;,$),dt(\&#34;MM\&#34;,$,Z),dt(\&#34;MMM\&#34;,function(t,e){return e.monthsShortRegex(t)}),dt(\&#34;MMMM\&#34;,function(t,e){return e.monthsRegex(t)}),gt([\&#34;M\&#34;,\&#34;MM\&#34;],function(t,e){e[vt]=w(t)-1}),gt([\&#34;MMM\&#34;,\&#34;MMMM\&#34;],function(t,e,i,n){var a=i._locale.monthsParse(t,n,i._strict);null!=a?e[vt]=a:g(i).invalidMonth=t});var Ft=/D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,Rt=\&#34;January_February_March_April_May_June_July_August_September_October_November_December\&#34;.split(\&#34;_\&#34;);var Lt=\&#34;Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\&#34;.split(\&#34;_\&#34;);function Wt(t,e){var i;if(!t.isValid())return t;if(\&#34;string\&#34;==typeof e)if(/^\\d+$/.test(e))e=w(e);else if(!l(e=t.localeData().monthsParse(e)))return t;return i=Math.min(t.date(),At(t.year(),e)),t._d[\&#34;set\&#34;+(t._isUTC?\&#34;UTC\&#34;:\&#34;\&#34;)+\&#34;Month\&#34;](e,i),t}function Yt(t){return null!=t?(Wt(this,t),a.updateOffset(this,!0),this):Ot(this,\&#34;Month\&#34;)}var Nt=lt;var zt=lt;function Ht(){function t(t,e){return e.length-t.length}var e,i,n=[],a=[],r=[];for(e=0;e&lt;12;e++)i=f([2e3,e]),n.push(this.monthsShort(i,\&#34;\&#34;)),a.push(this.months(i,\&#34;\&#34;)),r.push(this.months(i,\&#34;\&#34;)),r.push(this.monthsShort(i,\&#34;\&#34;));for(n.sort(t),a.sort(t),r.sort(t),e=0;e&lt;12;e++)n[e]=ct(n[e]),a[e]=ct(a[e]);for(e=0;e&lt;24;e++)r[e]=ct(r[e]);this._monthsRegex=new RegExp(\&#34;^(\&#34;+r.join(\&#34;|\&#34;)+\&#34;)\&#34;,\&#34;i\&#34;),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp(\&#34;^(\&#34;+a.join(\&#34;|\&#34;)+\&#34;)\&#34;,\&#34;i\&#34;),this._monthsShortStrictRegex=new RegExp(\&#34;^(\&#34;+n.join(\&#34;|\&#34;)+\&#34;)\&#34;,\&#34;i\&#34;)}function Vt(t){var e=new Date(Date.UTC.apply(null,arguments));return t&lt;100&amp;&amp;t&gt;=0&amp;&amp;isFinite(e.getUTCFullYear())&amp;&amp;e.setUTCFullYear(t),e}function Bt(t,e,i){var n=7+e-i;return-((7+Vt(t,0,n).getUTCDay()-e)%7)+n-1}function Et(t,e,i,n,a){var r,o,s=1+7*(e-1)+(7+i-n)%7+Bt(t,n,a);return s&lt;=0?o=St(r=t-1)+s:s&gt;St(t)?(r=t+1,o=s-St(t)):(r=t,o=s),{year:r,dayOfYear:o}}function jt(t,e,i){var n,a,r=Bt(t.year(),e,i),o=Math.floor((t.dayOfYear()-r-1)/7)+1;return o&lt;1?n=o+Ut(a=t.year()-1,e,i):o&gt;Ut(t.year(),e,i)?(n=o-Ut(t.year(),e,i),a=t.year()+1):(a=t.year(),n=o),{week:n,year:a}}function Ut(t,e,i){var n=Bt(t,e,i),a=Bt(t+1,e,i);return(St(t)-n+a)/7}j(\&#34;w\&#34;,[\&#34;ww\&#34;,2],\&#34;wo\&#34;,\&#34;week\&#34;),j(\&#34;W\&#34;,[\&#34;WW\&#34;,2],\&#34;Wo\&#34;,\&#34;isoWeek\&#34;),R(\&#34;week\&#34;,\&#34;w\&#34;),R(\&#34;isoWeek\&#34;,\&#34;W\&#34;),N(\&#34;week\&#34;,5),N(\&#34;isoWeek\&#34;,5),dt(\&#34;w\&#34;,$),dt(\&#34;ww\&#34;,$,Z),dt(\&#34;W\&#34;,$),dt(\&#34;WW\&#34;,$,Z),mt([\&#34;w\&#34;,\&#34;ww\&#34;,\&#34;W\&#34;,\&#34;WW\&#34;],function(t,e,i,n){e[n.substr(0,1)]=w(t)});j(\&#34;d\&#34;,0,\&#34;do\&#34;,\&#34;day\&#34;),j(\&#34;dd\&#34;,0,0,function(t){return this.localeData().weekdaysMin(this,t)}),j(\&#34;ddd\&#34;,0,0,function(t){return this.localeData().weekdaysShort(this,t)}),j(\&#34;dddd\&#34;,0,0,function(t){return this.localeData().weekdays(this,t)}),j(\&#34;e\&#34;,0,0,\&#34;weekday\&#34;),j(\&#34;E\&#34;,0,0,\&#34;isoWeekday\&#34;),R(\&#34;day\&#34;,\&#34;d\&#34;),R(\&#34;weekday\&#34;,\&#34;e\&#34;),R(\&#34;isoWeekday\&#34;,\&#34;E\&#34;),N(\&#34;day\&#34;,11),N(\&#34;weekday\&#34;,11),N(\&#34;isoWeekday\&#34;,11),dt(\&#34;d\&#34;,$),dt(\&#34;e\&#34;,$),dt(\&#34;E\&#34;,$),dt(\&#34;dd\&#34;,function(t,e){return e.weekdaysMinRegex(t)}),dt(\&#34;ddd\&#34;,function(t,e){return e.weekdaysShortRegex(t)}),dt(\&#34;dddd\&#34;,function(t,e){return e.weekdaysRegex(t)}),mt([\&#34;dd\&#34;,\&#34;ddd\&#34;,\&#34;dddd\&#34;],function(t,e,i,n){var a=i._locale.weekdaysParse(t,n,i._strict);null!=a?e.d=a:g(i).invalidWeekday=t}),mt([\&#34;d\&#34;,\&#34;e\&#34;,\&#34;E\&#34;],function(t,e,i,n){e[n]=w(t)});var qt=\&#34;Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\&#34;.split(\&#34;_\&#34;);var Gt=\&#34;Sun_Mon_Tue_Wed_Thu_Fri_Sat\&#34;.split(\&#34;_\&#34;);var Zt=\&#34;Su_Mo_Tu_We_Th_Fr_Sa\&#34;.split(\&#34;_\&#34;);var Xt=lt;var Jt=lt;var Kt=lt;function $t(){function t(t,e){return e.length-t.length}var e,i,n,a,r,o=[],s=[],l=[],u=[];for(e=0;e&lt;7;e++)i=f([2e3,1]).day(e),n=this.weekdaysMin(i,\&#34;\&#34;),a=this.weekdaysShort(i,\&#34;\&#34;),r=this.weekdays(i,\&#34;\&#34;),o.push(n),s.push(a),l.push(r),u.push(n),u.push(a),u.push(r);for(o.sort(t),s.sort(t),l.sort(t),u.sort(t),e=0;e&lt;7;e++)s[e]=ct(s[e]),l[e]=ct(l[e]),u[e]=ct(u[e]);this._weekdaysRegex=new RegExp(\&#34;^(\&#34;+u.join(\&#34;|\&#34;)+\&#34;)\&#34;,\&#34;i\&#34;),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp(\&#34;^(\&#34;+l.join(\&#34;|\&#34;)+\&#34;)\&#34;,\&#34;i\&#34;),this._weekdaysShortStrictRegex=new RegExp(\&#34;^(\&#34;+s.join(\&#34;|\&#34;)+\&#34;)\&#34;,\&#34;i\&#34;),this._weekdaysMinStrictRegex=new RegExp(\&#34;^(\&#34;+o.join(\&#34;|\&#34;)+\&#34;)\&#34;,\&#34;i\&#34;)}function Qt(){return this.hours()%12||12}function te(t,e){j(t,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)})}function ee(t,e){return e._meridiemParse}j(\&#34;H\&#34;,[\&#34;HH\&#34;,2],0,\&#34;hour\&#34;),j(\&#34;h\&#34;,[\&#34;hh\&#34;,2],0,Qt),j(\&#34;k\&#34;,[\&#34;kk\&#34;,2],0,function(){return this.hours()||24}),j(\&#34;hmm\&#34;,0,0,function(){return\&#34;\&#34;+Qt.apply(this)+z(this.minutes(),2)}),j(\&#34;hmmss\&#34;,0,0,function(){return\&#34;\&#34;+Qt.apply(this)+z(this.minutes(),2)+z(this.seconds(),2)}),j(\&#34;Hmm\&#34;,0,0,function(){return\&#34;\&#34;+this.hours()+z(this.minutes(),2)}),j(\&#34;Hmmss\&#34;,0,0,function(){return\&#34;\&#34;+this.hours()+z(this.minutes(),2)+z(this.seconds(),2)}),te(\&#34;a\&#34;,!0),te(\&#34;A\&#34;,!1),R(\&#34;hour\&#34;,\&#34;h\&#34;),N(\&#34;hour\&#34;,13),dt(\&#34;a\&#34;,ee),dt(\&#34;A\&#34;,ee),dt(\&#34;H\&#34;,$),dt(\&#34;h\&#34;,$),dt(\&#34;k\&#34;,$),dt(\&#34;HH\&#34;,$,Z),dt(\&#34;hh\&#34;,$,Z),dt(\&#34;kk\&#34;,$,Z),dt(\&#34;hmm\&#34;,Q),dt(\&#34;hmmss\&#34;,tt),dt(\&#34;Hmm\&#34;,Q),dt(\&#34;Hmmss\&#34;,tt),gt([\&#34;H\&#34;,\&#34;HH\&#34;],bt),gt([\&#34;k\&#34;,\&#34;kk\&#34;],function(t,e,i){var n=w(t);e[bt]=24===n?0:n}),gt([\&#34;a\&#34;,\&#34;A\&#34;],function(t,e,i){i._isPm=i._locale.isPM(t),i._meridiem=t}),gt([\&#34;h\&#34;,\&#34;hh\&#34;],function(t,e,i){e[bt]=w(t),g(i).bigHour=!0}),gt(\&#34;hmm\&#34;,function(t,e,i){var n=t.length-2;e[bt]=w(t.substr(0,n)),e[xt]=w(t.substr(n)),g(i).bigHour=!0}),gt(\&#34;hmmss\&#34;,function(t,e,i){var n=t.length-4,a=t.length-2;e[bt]=w(t.substr(0,n)),e[xt]=w(t.substr(n,2)),e[_t]=w(t.substr(a)),g(i).bigHour=!0}),gt(\&#34;Hmm\&#34;,function(t,e,i){var n=t.length-2;e[bt]=w(t.substr(0,n)),e[xt]=w(t.substr(n))}),gt(\&#34;Hmmss\&#34;,function(t,e,i){var n=t.length-4,a=t.length-2;e[bt]=w(t.substr(0,n)),e[xt]=w(t.substr(n,2)),e[_t]=w(t.substr(a))});var ie,ne=Tt(\&#34;Hours\&#34;,!0),ae={calendar:{sameDay:\&#34;[Today at] LT\&#34;,nextDay:\&#34;[Tomorrow at] LT\&#34;,nextWeek:\&#34;dddd [at] LT\&#34;,lastDay:\&#34;[Yesterday at] LT\&#34;,lastWeek:\&#34;[Last] dddd [at] LT\&#34;,sameElse:\&#34;L\&#34;},longDateFormat:{LTS:\&#34;h:mm:ss A\&#34;,LT:\&#34;h:mm A\&#34;,L:\&#34;MM/DD/YYYY\&#34;,LL:\&#34;MMMM D, YYYY\&#34;,LLL:\&#34;MMMM D, YYYY h:mm A\&#34;,LLLL:\&#34;dddd, MMMM D, YYYY h:mm A\&#34;},invalidDate:\&#34;Invalid date\&#34;,ordinal:\&#34;%d\&#34;,dayOfMonthOrdinalParse:/\\d{1,2}/,relativeTime:{future:\&#34;in %s\&#34;,past:\&#34;%s ago\&#34;,s:\&#34;a few seconds\&#34;,ss:\&#34;%d seconds\&#34;,m:\&#34;a minute\&#34;,mm:\&#34;%d minutes\&#34;,h:\&#34;an hour\&#34;,hh:\&#34;%d hours\&#34;,d:\&#34;a day\&#34;,dd:\&#34;%d days\&#34;,M:\&#34;a month\&#34;,MM:\&#34;%d months\&#34;,y:\&#34;a year\&#34;,yy:\&#34;%d years\&#34;},months:Rt,monthsShort:Lt,week:{dow:0,doy:6},weekdays:qt,weekdaysMin:Zt,weekdaysShort:Gt,meridiemParse:/[ap]\\.?m?\\.?/i},re={},oe={};function se(t){return t?t.toLowerCase().replace(\&#34;_\&#34;,\&#34;-\&#34;):t}function le(i){var n=null;if(!re[i]&amp;&amp;void 0!==e&amp;&amp;e&amp;&amp;e.exports)try{n=ie._abbr,t(\&#34;./locale/\&#34;+i),ue(n)}catch(t){}return re[i]}function ue(t,e){var i;return t&amp;&amp;(i=s(e)?he(t):de(t,e))&amp;&amp;(ie=i),ie._abbr}function de(t,e){if(null!==e){var i=ae;if(e.abbr=t,null!=re[t])T(\&#34;defineLocaleOverride\&#34;,\&#34;use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info.\&#34;),i=re[t]._config;else if(null!=e.parentLocale){if(null==re[e.parentLocale])return oe[e.parentLocale]||(oe[e.parentLocale]=[]),oe[e.parentLocale].push({name:t,config:e}),null;i=re[e.parentLocale]._config}return re[t]=new A(I(i,e)),oe[t]&amp;&amp;oe[t].forEach(function(t){de(t.name,t.config)}),ue(t),re[t]}return delete re[t],null}function he(t){var e;if(t&amp;&amp;t._locale&amp;&amp;t._locale._abbr&amp;&amp;(t=t._locale._abbr),!t)return ie;if(!r(t)){if(e=le(t))return e;t=[t]}return function(t){for(var e,i,n,a,r=0;r&lt;t.length;){for(e=(a=se(t[r]).split(\&#34;-\&#34;)).length,i=(i=se(t[r+1]))?i.split(\&#34;-\&#34;):null;e&gt;0;){if(n=le(a.slice(0,e).join(\&#34;-\&#34;)))return n;if(i&amp;&amp;i.length&gt;=e&amp;&amp;M(a,i,!0)&gt;=e-1)break;e--}r++}return null}(t)}function ce(t){var e,i=t._a;return i&amp;&amp;-2===g(t).overflow&amp;&amp;(e=i[vt]&lt;0||i[vt]&gt;11?vt:i[yt]&lt;1||i[yt]&gt;At(i[pt],i[vt])?yt:i[bt]&lt;0||i[bt]&gt;24||24===i[bt]&amp;&amp;(0!==i[xt]||0!==i[_t]||0!==i[kt])?bt:i[xt]&lt;0||i[xt]&gt;59?xt:i[_t]&lt;0||i[_t]&gt;59?_t:i[kt]&lt;0||i[kt]&gt;999?kt:-1,g(t)._overflowDayOfYear&amp;&amp;(e&lt;pt||e&gt;yt)&amp;&amp;(e=yt),g(t)._overflowWeeks&amp;&amp;-1===e&amp;&amp;(e=wt),g(t)._overflowWeekday&amp;&amp;-1===e&amp;&amp;(e=Mt),g(t).overflow=e),t}function fe(t,e,i){return null!=t?t:null!=e?e:i}function ge(t){var e,i,n,r,o,s=[];if(!t._d){var l,u;for(l=t,u=new Date(a.now()),n=l._useUTC?[u.getUTCFullYear(),u.getUTCMonth(),u.getUTCDate()]:[u.getFullYear(),u.getMonth(),u.getDate()],t._w&amp;&amp;null==t._a[yt]&amp;&amp;null==t._a[vt]&amp;&amp;function(t){var e,i,n,a,r,o,s,l;if(null!=(e=t._w).GG||null!=e.W||null!=e.E)r=1,o=4,i=fe(e.GG,t._a[pt],jt(Te(),1,4).year),n=fe(e.W,1),((a=fe(e.E,1))&lt;1||a&gt;7)&amp;&amp;(l=!0);else{r=t._locale._week.dow,o=t._locale._week.doy;var u=jt(Te(),r,o);i=fe(e.gg,t._a[pt],u.year),n=fe(e.w,u.week),null!=e.d?((a=e.d)&lt;0||a&gt;6)&amp;&amp;(l=!0):null!=e.e?(a=e.e+r,(e.e&lt;0||e.e&gt;6)&amp;&amp;(l=!0)):a=r}n&lt;1||n&gt;Ut(i,r,o)?g(t)._overflowWeeks=!0:null!=l?g(t)._overflowWeekday=!0:(s=Et(i,n,a,r,o),t._a[pt]=s.year,t._dayOfYear=s.dayOfYear)}(t),null!=t._dayOfYear&amp;&amp;(o=fe(t._a[pt],n[pt]),(t._dayOfYear&gt;St(o)||0===t._dayOfYear)&amp;&amp;(g(t)._overflowDayOfYear=!0),i=Vt(o,0,t._dayOfYear),t._a[vt]=i.getUTCMonth(),t._a[yt]=i.getUTCDate()),e=0;e&lt;3&amp;&amp;null==t._a[e];++e)t._a[e]=s[e]=n[e];for(;e&lt;7;e++)t._a[e]=s[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[bt]&amp;&amp;0===t._a[xt]&amp;&amp;0===t._a[_t]&amp;&amp;0===t._a[kt]&amp;&amp;(t._nextDay=!0,t._a[bt]=0),t._d=(t._useUTC?Vt:function(t,e,i,n,a,r,o){var s=new Date(t,e,i,n,a,r,o);return t&lt;100&amp;&amp;t&gt;=0&amp;&amp;isFinite(s.getFullYear())&amp;&amp;s.setFullYear(t),s}).apply(null,s),r=t._useUTC?t._d.getUTCDay():t._d.getDay(),null!=t._tzm&amp;&amp;t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&amp;&amp;(t._a[bt]=24),t._w&amp;&amp;void 0!==t._w.d&amp;&amp;t._w.d!==r&amp;&amp;(g(t).weekdayMismatch=!0)}}var me=/^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,pe=/^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,ve=/Z|[+-]\\d\\d(?::?\\d\\d)?/,ye=[[\&#34;YYYYYY-MM-DD\&#34;,/[+-]\\d{6}-\\d\\d-\\d\\d/],[\&#34;YYYY-MM-DD\&#34;,/\\d{4}-\\d\\d-\\d\\d/],[\&#34;GGGG-[W]WW-E\&#34;,/\\d{4}-W\\d\\d-\\d/],[\&#34;GGGG-[W]WW\&#34;,/\\d{4}-W\\d\\d/,!1],[\&#34;YYYY-DDD\&#34;,/\\d{4}-\\d{3}/],[\&#34;YYYY-MM\&#34;,/\\d{4}-\\d\\d/,!1],[\&#34;YYYYYYMMDD\&#34;,/[+-]\\d{10}/],[\&#34;YYYYMMDD\&#34;,/\\d{8}/],[\&#34;GGGG[W]WWE\&#34;,/\\d{4}W\\d{3}/],[\&#34;GGGG[W]WW\&#34;,/\\d{4}W\\d{2}/,!1],[\&#34;YYYYDDD\&#34;,/\\d{7}/]],be=[[\&#34;HH:mm:ss.SSSS\&#34;,/\\d\\d:\\d\\d:\\d\\d\\.\\d+/],[\&#34;HH:mm:ss,SSSS\&#34;,/\\d\\d:\\d\\d:\\d\\d,\\d+/],[\&#34;HH:mm:ss\&#34;,/\\d\\d:\\d\\d:\\d\\d/],[\&#34;HH:mm\&#34;,/\\d\\d:\\d\\d/],[\&#34;HHmmss.SSSS\&#34;,/\\d\\d\\d\\d\\d\\d\\.\\d+/],[\&#34;HHmmss,SSSS\&#34;,/\\d\\d\\d\\d\\d\\d,\\d+/],[\&#34;HHmmss\&#34;,/\\d\\d\\d\\d\\d\\d/],[\&#34;HHmm\&#34;,/\\d\\d\\d\\d/],[\&#34;HH\&#34;,/\\d\\d/]],xe=/^\\/?Date\\((\\-?\\d+)/i;function _e(t){var e,i,n,a,r,o,s=t._i,l=me.exec(s)||pe.exec(s);if(l){for(g(t).iso=!0,e=0,i=ye.length;e&lt;i;e++)if(ye[e][1].exec(l[1])){a=ye[e][0],n=!1!==ye[e][2];break}if(null==a)return void(t._isValid=!1);if(l[3]){for(e=0,i=be.length;e&lt;i;e++)if(be[e][1].exec(l[3])){r=(l[2]||\&#34; \&#34;)+be[e][0];break}if(null==r)return void(t._isValid=!1)}if(!n&amp;&amp;null!=r)return void(t._isValid=!1);if(l[4]){if(!ve.exec(l[4]))return void(t._isValid=!1);o=\&#34;Z\&#34;}t._f=a+(r||\&#34;\&#34;)+(o||\&#34;\&#34;),De(t)}else t._isValid=!1}var ke=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/;function we(t,e,i,n,a,r){var o=[function(t){var e=parseInt(t,10);{if(e&lt;=49)return 2e3+e;if(e&lt;=999)return 1900+e}return e}(t),Lt.indexOf(e),parseInt(i,10),parseInt(n,10),parseInt(a,10)];return r&amp;&amp;o.push(parseInt(r,10)),o}var Me={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function Se(t){var e,i,n,a=ke.exec(t._i.replace(/\\([^)]*\\)|[\\n\\t]/g,\&#34; \&#34;).replace(/(\\s\\s+)/g,\&#34; \&#34;).trim());if(a){var r=we(a[4],a[3],a[2],a[5],a[6],a[7]);if(e=a[1],i=r,n=t,e&amp;&amp;Gt.indexOf(e)!==new Date(i[0],i[1],i[2]).getDay()&amp;&amp;(g(n).weekdayMismatch=!0,n._isValid=!1,1))return;t._a=r,t._tzm=function(t,e,i){if(t)return Me[t];if(e)return 0;var n=parseInt(i,10),a=n%100;return(n-a)/100*60+a}(a[8],a[9],a[10]),t._d=Vt.apply(null,t._a),t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),g(t).rfc2822=!0}else t._isValid=!1}function De(t){if(t._f!==a.ISO_8601)if(t._f!==a.RFC_2822){t._a=[],g(t).empty=!0;var e,i,n,r,o,s,l,u,d=\&#34;\&#34;+t._i,c=d.length,f=0;for(n=q(t._f,t._locale).match(H)||[],e=0;e&lt;n.length;e++)r=n[e],(i=(d.match(ht(r,t))||[])[0])&amp;&amp;((o=d.substr(0,d.indexOf(i))).length&gt;0&amp;&amp;g(t).unusedInput.push(o),d=d.slice(d.indexOf(i)+i.length),f+=i.length),E[r]?(i?g(t).empty=!1:g(t).unusedTokens.push(r),s=r,u=t,null!=(l=i)&amp;&amp;h(ft,s)&amp;&amp;ft[s](l,u._a,u,s)):t._strict&amp;&amp;!i&amp;&amp;g(t).unusedTokens.push(r);g(t).charsLeftOver=c-f,d.length&gt;0&amp;&amp;g(t).unusedInput.push(d),t._a[bt]&lt;=12&amp;&amp;!0===g(t).bigHour&amp;&amp;t._a[bt]&gt;0&amp;&amp;(g(t).bigHour=void 0),g(t).parsedDateParts=t._a.slice(0),g(t).meridiem=t._meridiem,t._a[bt]=function(t,e,i){var n;if(null==i)return e;return null!=t.meridiemHour?t.meridiemHour(e,i):null!=t.isPM?((n=t.isPM(i))&amp;&amp;e&lt;12&amp;&amp;(e+=12),n||12!==e||(e=0),e):e}(t._locale,t._a[bt],t._meridiem),ge(t),ce(t)}else Se(t);else _e(t)}function Ce(t){var e,i,n,h,f=t._i,v=t._f;return t._locale=t._locale||he(t._l),null===f||void 0===v&amp;&amp;\&#34;\&#34;===f?p({nullInput:!0}):(\&#34;string\&#34;==typeof f&amp;&amp;(t._i=f=t._locale.preparse(f)),_(f)?new x(ce(f)):(u(f)?t._d=f:r(v)?function(t){var e,i,n,a,r;if(0===t._f.length)return g(t).invalidFormat=!0,void(t._d=new Date(NaN));for(a=0;a&lt;t._f.length;a++)r=0,e=y({},t),null!=t._useUTC&amp;&amp;(e._useUTC=t._useUTC),e._f=t._f[a],De(e),m(e)&amp;&amp;(r+=g(e).charsLeftOver,r+=10*g(e).unusedTokens.length,g(e).score=r,(null==n||r&lt;n)&amp;&amp;(n=r,i=e));c(t,i||e)}(t):v?De(t):s(i=(e=t)._i)?e._d=new Date(a.now()):u(i)?e._d=new Date(i.valueOf()):\&#34;string\&#34;==typeof i?(n=e,null===(h=xe.exec(n._i))?(_e(n),!1===n._isValid&amp;&amp;(delete n._isValid,Se(n),!1===n._isValid&amp;&amp;(delete n._isValid,a.createFromInputFallback(n)))):n._d=new Date(+h[1])):r(i)?(e._a=d(i.slice(0),function(t){return parseInt(t,10)}),ge(e)):o(i)?function(t){if(!t._d){var e=W(t._i);t._a=d([e.year,e.month,e.day||e.date,e.hour,e.minute,e.second,e.millisecond],function(t){return t&amp;&amp;parseInt(t,10)}),ge(t)}}(e):l(i)?e._d=new Date(i):a.createFromInputFallback(e),m(t)||(t._d=null),t))}function Pe(t,e,i,n,a){var s,l={};return!0!==i&amp;&amp;!1!==i||(n=i,i=void 0),(o(t)&amp;&amp;function(t){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(t).length;var e;for(e in t)if(t.hasOwnProperty(e))return!1;return!0}(t)||r(t)&amp;&amp;0===t.length)&amp;&amp;(t=void 0),l._isAMomentObject=!0,l._useUTC=l._isUTC=a,l._l=i,l._i=t,l._f=e,l._strict=n,(s=new x(ce(Ce(l))))._nextDay&amp;&amp;(s.add(1,\&#34;d\&#34;),s._nextDay=void 0),s}function Te(t,e,i,n){return Pe(t,e,i,n,!1)}a.createFromInputFallback=D(\&#34;value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.\&#34;,function(t){t._d=new Date(t._i+(t._useUTC?\&#34; UTC\&#34;:\&#34;\&#34;))}),a.ISO_8601=function(){},a.RFC_2822=function(){};var Oe=D(\&#34;moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/\&#34;,function(){var t=Te.apply(null,arguments);return this.isValid()&amp;&amp;t.isValid()?t&lt;this?this:t:p()}),Ie=D(\&#34;moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/\&#34;,function(){var t=Te.apply(null,arguments);return this.isValid()&amp;&amp;t.isValid()?t&gt;this?this:t:p()});function Ae(t,e){var i,n;if(1===e.length&amp;&amp;r(e[0])&amp;&amp;(e=e[0]),!e.length)return Te();for(i=e[0],n=1;n&lt;e.length;++n)e[n].isValid()&amp;&amp;!e[n][t](i)||(i=e[n]);return i}var Fe=[\&#34;year\&#34;,\&#34;quarter\&#34;,\&#34;month\&#34;,\&#34;week\&#34;,\&#34;day\&#34;,\&#34;hour\&#34;,\&#34;minute\&#34;,\&#34;second\&#34;,\&#34;millisecond\&#34;];function Re(t){var e=W(t),i=e.year||0,n=e.quarter||0,a=e.month||0,r=e.week||0,o=e.day||0,s=e.hour||0,l=e.minute||0,u=e.second||0,d=e.millisecond||0;this._isValid=function(t){for(var e in t)if(-1===Ct.call(Fe,e)||null!=t[e]&amp;&amp;isNaN(t[e]))return!1;for(var i=!1,n=0;n&lt;Fe.length;++n)if(t[Fe[n]]){if(i)return!1;parseFloat(t[Fe[n]])!==w(t[Fe[n]])&amp;&amp;(i=!0)}return!0}(e),this._milliseconds=+d+1e3*u+6e4*l+1e3*s*60*60,this._days=+o+7*r,this._months=+a+3*n+12*i,this._data={},this._locale=he(),this._bubble()}function Le(t){return t instanceof Re}function We(t){return t&lt;0?-1*Math.round(-1*t):Math.round(t)}function Ye(t,e){j(t,0,0,function(){var t=this.utcOffset(),i=\&#34;+\&#34;;return t&lt;0&amp;&amp;(t=-t,i=\&#34;-\&#34;),i+z(~~(t/60),2)+e+z(~~t%60,2)})}Ye(\&#34;Z\&#34;,\&#34;:\&#34;),Ye(\&#34;ZZ\&#34;,\&#34;\&#34;),dt(\&#34;Z\&#34;,st),dt(\&#34;ZZ\&#34;,st),gt([\&#34;Z\&#34;,\&#34;ZZ\&#34;],function(t,e,i){i._useUTC=!0,i._tzm=ze(st,t)});var Ne=/([\\+\\-]|\\d\\d)/gi;function ze(t,e){var i=(e||\&#34;\&#34;).match(t);if(null===i)return null;var n=((i[i.length-1]||[])+\&#34;\&#34;).match(Ne)||[\&#34;-\&#34;,0,0],a=60*n[1]+w(n[2]);return 0===a?0:\&#34;+\&#34;===n[0]?a:-a}function He(t,e){var i,n;return e._isUTC?(i=e.clone(),n=(_(t)||u(t)?t.valueOf():Te(t).valueOf())-i.valueOf(),i._d.setTime(i._d.valueOf()+n),a.updateOffset(i,!1),i):Te(t).local()}function Ve(t){return 15*-Math.round(t._d.getTimezoneOffset()/15)}function Be(){return!!this.isValid()&amp;&amp;(this._isUTC&amp;&amp;0===this._offset)}a.updateOffset=function(){};var Ee=/^(\\-|\\+)?(?:(\\d*)[. ])?(\\d+)\\:(\\d+)(?:\\:(\\d+)(\\.\\d*)?)?$/,je=/^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Ue(t,e){var i,n,a,r=t,o=null;return Le(t)?r={ms:t._milliseconds,d:t._days,M:t._months}:l(t)?(r={},e?r[e]=t:r.milliseconds=t):(o=Ee.exec(t))?(i=\&#34;-\&#34;===o[1]?-1:1,r={y:0,d:w(o[yt])*i,h:w(o[bt])*i,m:w(o[xt])*i,s:w(o[_t])*i,ms:w(We(1e3*o[kt]))*i}):(o=je.exec(t))?(i=\&#34;-\&#34;===o[1]?-1:(o[1],1),r={y:qe(o[2],i),M:qe(o[3],i),w:qe(o[4],i),d:qe(o[5],i),h:qe(o[6],i),m:qe(o[7],i),s:qe(o[8],i)}):null==r?r={}:\&#34;object\&#34;==typeof r&amp;&amp;(\&#34;from\&#34;in r||\&#34;to\&#34;in r)&amp;&amp;(a=function(t,e){var i;if(!t.isValid()||!e.isValid())return{milliseconds:0,months:0};e=He(e,t),t.isBefore(e)?i=Ge(t,e):((i=Ge(e,t)).milliseconds=-i.milliseconds,i.months=-i.months);return i}(Te(r.from),Te(r.to)),(r={}).ms=a.milliseconds,r.M=a.months),n=new Re(r),Le(t)&amp;&amp;h(t,\&#34;_locale\&#34;)&amp;&amp;(n._locale=t._locale),n}function qe(t,e){var i=t&amp;&amp;parseFloat(t.replace(\&#34;,\&#34;,\&#34;.\&#34;));return(isNaN(i)?0:i)*e}function Ge(t,e){var i={milliseconds:0,months:0};return i.months=e.month()-t.month()+12*(e.year()-t.year()),t.clone().add(i.months,\&#34;M\&#34;).isAfter(e)&amp;&amp;--i.months,i.milliseconds=+e-+t.clone().add(i.months,\&#34;M\&#34;),i}function Ze(t,e){return function(i,n){var a;return null===n||isNaN(+n)||(T(e,\&#34;moment().\&#34;+e+\&#34;(period, number) is deprecated. Please use moment().\&#34;+e+\&#34;(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.\&#34;),a=i,i=n,n=a),Xe(this,Ue(i=\&#34;string\&#34;==typeof i?+i:i,n),t),this}}function Xe(t,e,i,n){var r=e._milliseconds,o=We(e._days),s=We(e._months);t.isValid()&amp;&amp;(n=null==n||n,s&amp;&amp;Wt(t,Ot(t,\&#34;Month\&#34;)+s*i),o&amp;&amp;It(t,\&#34;Date\&#34;,Ot(t,\&#34;Date\&#34;)+o*i),r&amp;&amp;t._d.setTime(t._d.valueOf()+r*i),n&amp;&amp;a.updateOffset(t,o||s))}Ue.fn=Re.prototype,Ue.invalid=function(){return Ue(NaN)};var Je=Ze(1,\&#34;add\&#34;),Ke=Ze(-1,\&#34;subtract\&#34;);function $e(t,e){var i=12*(e.year()-t.year())+(e.month()-t.month()),n=t.clone().add(i,\&#34;months\&#34;);return-(i+(e-n&lt;0?(e-n)/(n-t.clone().add(i-1,\&#34;months\&#34;)):(e-n)/(t.clone().add(i+1,\&#34;months\&#34;)-n)))||0}function Qe(t){var e;return void 0===t?this._locale._abbr:(null!=(e=he(t))&amp;&amp;(this._locale=e),this)}a.defaultFormat=\&#34;YYYY-MM-DDTHH:mm:ssZ\&#34;,a.defaultFormatUtc=\&#34;YYYY-MM-DDTHH:mm:ss[Z]\&#34;;var ti=D(\&#34;moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.\&#34;,function(t){return void 0===t?this.localeData():this.locale(t)});function ei(){return this._locale}function ii(t,e){j(0,[t,t.length],0,e)}function ni(t,e,i,n,a){var r;return null==t?jt(this,n,a).year:(e&gt;(r=Ut(t,n,a))&amp;&amp;(e=r),function(t,e,i,n,a){var r=Et(t,e,i,n,a),o=Vt(r.year,0,r.dayOfYear);return this.year(o.getUTCFullYear()),this.month(o.getUTCMonth()),this.date(o.getUTCDate()),this}.call(this,t,e,i,n,a))}j(0,[\&#34;gg\&#34;,2],0,function(){return this.weekYear()%100}),j(0,[\&#34;GG\&#34;,2],0,function(){return this.isoWeekYear()%100}),ii(\&#34;gggg\&#34;,\&#34;weekYear\&#34;),ii(\&#34;ggggg\&#34;,\&#34;weekYear\&#34;),ii(\&#34;GGGG\&#34;,\&#34;isoWeekYear\&#34;),ii(\&#34;GGGGG\&#34;,\&#34;isoWeekYear\&#34;),R(\&#34;weekYear\&#34;,\&#34;gg\&#34;),R(\&#34;isoWeekYear\&#34;,\&#34;GG\&#34;),N(\&#34;weekYear\&#34;,1),N(\&#34;isoWeekYear\&#34;,1),dt(\&#34;G\&#34;,rt),dt(\&#34;g\&#34;,rt),dt(\&#34;GG\&#34;,$,Z),dt(\&#34;gg\&#34;,$,Z),dt(\&#34;GGGG\&#34;,it,J),dt(\&#34;gggg\&#34;,it,J),dt(\&#34;GGGGG\&#34;,nt,K),dt(\&#34;ggggg\&#34;,nt,K),mt([\&#34;gggg\&#34;,\&#34;ggggg\&#34;,\&#34;GGGG\&#34;,\&#34;GGGGG\&#34;],function(t,e,i,n){e[n.substr(0,2)]=w(t)}),mt([\&#34;gg\&#34;,\&#34;GG\&#34;],function(t,e,i,n){e[n]=a.parseTwoDigitYear(t)}),j(\&#34;Q\&#34;,0,\&#34;Qo\&#34;,\&#34;quarter\&#34;),R(\&#34;quarter\&#34;,\&#34;Q\&#34;),N(\&#34;quarter\&#34;,7),dt(\&#34;Q\&#34;,G),gt(\&#34;Q\&#34;,function(t,e){e[vt]=3*(w(t)-1)}),j(\&#34;D\&#34;,[\&#34;DD\&#34;,2],\&#34;Do\&#34;,\&#34;date\&#34;),R(\&#34;date\&#34;,\&#34;D\&#34;),N(\&#34;date\&#34;,9),dt(\&#34;D\&#34;,$),dt(\&#34;DD\&#34;,$,Z),dt(\&#34;Do\&#34;,function(t,e){return t?e._dayOfMonthOrdinalParse||e._ordinalParse:e._dayOfMonthOrdinalParseLenient}),gt([\&#34;D\&#34;,\&#34;DD\&#34;],yt),gt(\&#34;Do\&#34;,function(t,e){e[yt]=w(t.match($)[0])});var ai=Tt(\&#34;Date\&#34;,!0);j(\&#34;DDD\&#34;,[\&#34;DDDD\&#34;,3],\&#34;DDDo\&#34;,\&#34;dayOfYear\&#34;),R(\&#34;dayOfYear\&#34;,\&#34;DDD\&#34;),N(\&#34;dayOfYear\&#34;,4),dt(\&#34;DDD\&#34;,et),dt(\&#34;DDDD\&#34;,X),gt([\&#34;DDD\&#34;,\&#34;DDDD\&#34;],function(t,e,i){i._dayOfYear=w(t)}),j(\&#34;m\&#34;,[\&#34;mm\&#34;,2],0,\&#34;minute\&#34;),R(\&#34;minute\&#34;,\&#34;m\&#34;),N(\&#34;minute\&#34;,14),dt(\&#34;m\&#34;,$),dt(\&#34;mm\&#34;,$,Z),gt([\&#34;m\&#34;,\&#34;mm\&#34;],xt);var ri=Tt(\&#34;Minutes\&#34;,!1);j(\&#34;s\&#34;,[\&#34;ss\&#34;,2],0,\&#34;second\&#34;),R(\&#34;second\&#34;,\&#34;s\&#34;),N(\&#34;second\&#34;,15),dt(\&#34;s\&#34;,$),dt(\&#34;ss\&#34;,$,Z),gt([\&#34;s\&#34;,\&#34;ss\&#34;],_t);var oi,si=Tt(\&#34;Seconds\&#34;,!1);for(j(\&#34;S\&#34;,0,0,function(){return~~(this.millisecond()/100)}),j(0,[\&#34;SS\&#34;,2],0,function(){return~~(this.millisecond()/10)}),j(0,[\&#34;SSS\&#34;,3],0,\&#34;millisecond\&#34;),j(0,[\&#34;SSSS\&#34;,4],0,function(){return 10*this.millisecond()}),j(0,[\&#34;SSSSS\&#34;,5],0,function(){return 100*this.millisecond()}),j(0,[\&#34;SSSSSS\&#34;,6],0,function(){return 1e3*this.millisecond()}),j(0,[\&#34;SSSSSSS\&#34;,7],0,function(){return 1e4*this.millisecond()}),j(0,[\&#34;SSSSSSSS\&#34;,8],0,function(){return 1e5*this.millisecond()}),j(0,[\&#34;SSSSSSSSS\&#34;,9],0,function(){return 1e6*this.millisecond()}),R(\&#34;millisecond\&#34;,\&#34;ms\&#34;),N(\&#34;millisecond\&#34;,16),dt(\&#34;S\&#34;,et,G),dt(\&#34;SS\&#34;,et,Z),dt(\&#34;SSS\&#34;,et,X),oi=\&#34;SSSS\&#34;;oi.length&lt;=9;oi+=\&#34;S\&#34;)dt(oi,at);function li(t,e){e[kt]=w(1e3*(\&#34;0.\&#34;+t))}for(oi=\&#34;S\&#34;;oi.length&lt;=9;oi+=\&#34;S\&#34;)gt(oi,li);var ui=Tt(\&#34;Milliseconds\&#34;,!1);j(\&#34;z\&#34;,0,0,\&#34;zoneAbbr\&#34;),j(\&#34;zz\&#34;,0,0,\&#34;zoneName\&#34;);var di=x.prototype;function hi(t){return t}di.add=Je,di.calendar=function(t,e){var i=t||Te(),n=He(i,this).startOf(\&#34;day\&#34;),r=a.calendarFormat(this,n)||\&#34;sameElse\&#34;,o=e&amp;&amp;(O(e[r])?e[r].call(this,i):e[r]);return this.format(o||this.localeData().calendar(r,this,Te(i)))},di.clone=function(){return new x(this)},di.diff=function(t,e,i){var n,a,r;if(!this.isValid())return NaN;if(!(n=He(t,this)).isValid())return NaN;switch(a=6e4*(n.utcOffset()-this.utcOffset()),e=L(e)){case\&#34;year\&#34;:r=$e(this,n)/12;break;case\&#34;month\&#34;:r=$e(this,n);break;case\&#34;quarter\&#34;:r=$e(this,n)/3;break;case\&#34;second\&#34;:r=(this-n)/1e3;break;case\&#34;minute\&#34;:r=(this-n)/6e4;break;case\&#34;hour\&#34;:r=(this-n)/36e5;break;case\&#34;day\&#34;:r=(this-n-a)/864e5;break;case\&#34;week\&#34;:r=(this-n-a)/6048e5;break;default:r=this-n}return i?r:k(r)},di.endOf=function(t){return void 0===(t=L(t))||\&#34;millisecond\&#34;===t?this:(\&#34;date\&#34;===t&amp;&amp;(t=\&#34;day\&#34;),this.startOf(t).add(1,\&#34;isoWeek\&#34;===t?\&#34;week\&#34;:t).subtract(1,\&#34;ms\&#34;))},di.format=function(t){t||(t=this.isUtc()?a.defaultFormatUtc:a.defaultFormat);var e=U(this,t);return this.localeData().postformat(e)},di.from=function(t,e){return this.isValid()&amp;&amp;(_(t)&amp;&amp;t.isValid()||Te(t).isValid())?Ue({to:this,from:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()},di.fromNow=function(t){return this.from(Te(),t)},di.to=function(t,e){return this.isValid()&amp;&amp;(_(t)&amp;&amp;t.isValid()||Te(t).isValid())?Ue({from:this,to:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()},di.toNow=function(t){return this.to(Te(),t)},di.get=function(t){return O(this[t=L(t)])?this[t]():this},di.invalidAt=function(){return g(this).overflow},di.isAfter=function(t,e){var i=_(t)?t:Te(t);return!(!this.isValid()||!i.isValid())&amp;&amp;(\&#34;millisecond\&#34;===(e=L(s(e)?\&#34;millisecond\&#34;:e))?this.valueOf()&gt;i.valueOf():i.valueOf()&lt;this.clone().startOf(e).valueOf())},di.isBefore=function(t,e){var i=_(t)?t:Te(t);return!(!this.isValid()||!i.isValid())&amp;&amp;(\&#34;millisecond\&#34;===(e=L(s(e)?\&#34;millisecond\&#34;:e))?this.valueOf()&lt;i.valueOf():this.clone().endOf(e).valueOf()&lt;i.valueOf())},di.isBetween=function(t,e,i,n){return(\&#34;(\&#34;===(n=n||\&#34;()\&#34;)[0]?this.isAfter(t,i):!this.isBefore(t,i))&amp;&amp;(\&#34;)\&#34;===n[1]?this.isBefore(e,i):!this.isAfter(e,i))},di.isSame=function(t,e){var i,n=_(t)?t:Te(t);return!(!this.isValid()||!n.isValid())&amp;&amp;(\&#34;millisecond\&#34;===(e=L(e||\&#34;millisecond\&#34;))?this.valueOf()===n.valueOf():(i=n.valueOf(),this.clone().startOf(e).valueOf()&lt;=i&amp;&amp;i&lt;=this.clone().endOf(e).valueOf()))},di.isSameOrAfter=function(t,e){return this.isSame(t,e)||this.isAfter(t,e)},di.isSameOrBefore=function(t,e){return this.isSame(t,e)||this.isBefore(t,e)},di.isValid=function(){return m(this)},di.lang=ti,di.locale=Qe,di.localeData=ei,di.max=Ie,di.min=Oe,di.parsingFlags=function(){return c({},g(this))},di.set=function(t,e){if(\&#34;object\&#34;==typeof t)for(var i=function(t){var e=[];for(var i in t)e.push({unit:i,priority:Y[i]});return e.sort(function(t,e){return t.priority-e.priority}),e}(t=W(t)),n=0;n&lt;i.length;n++)this[i[n].unit](t[i[n].unit]);else if(O(this[t=L(t)]))return this[t](e);return this},di.startOf=function(t){switch(t=L(t)){case\&#34;year\&#34;:this.month(0);case\&#34;quarter\&#34;:case\&#34;month\&#34;:this.date(1);case\&#34;week\&#34;:case\&#34;isoWeek\&#34;:case\&#34;day\&#34;:case\&#34;date\&#34;:this.hours(0);case\&#34;hour\&#34;:this.minutes(0);case\&#34;minute\&#34;:this.seconds(0);case\&#34;second\&#34;:this.milliseconds(0)}return\&#34;week\&#34;===t&amp;&amp;this.weekday(0),\&#34;isoWeek\&#34;===t&amp;&amp;this.isoWeekday(1),\&#34;quarter\&#34;===t&amp;&amp;this.month(3*Math.floor(this.month()/3)),this},di.subtract=Ke,di.toArray=function(){var t=this;return[t.year(),t.month(),t.date(),t.hour(),t.minute(),t.second(),t.millisecond()]},di.toObject=function(){var t=this;return{years:t.year(),months:t.month(),date:t.date(),hours:t.hours(),minutes:t.minutes(),seconds:t.seconds(),milliseconds:t.milliseconds()}},di.toDate=function(){return new Date(this.valueOf())},di.toISOString=function(t){if(!this.isValid())return null;var e=!0!==t,i=e?this.clone().utc():this;return i.year()&lt;0||i.year()&gt;9999?U(i,e?\&#34;YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]\&#34;:\&#34;YYYYYY-MM-DD[T]HH:mm:ss.SSSZ\&#34;):O(Date.prototype.toISOString)?e?this.toDate().toISOString():new Date(this._d.valueOf()).toISOString().replace(\&#34;Z\&#34;,U(i,\&#34;Z\&#34;)):U(i,e?\&#34;YYYY-MM-DD[T]HH:mm:ss.SSS[Z]\&#34;:\&#34;YYYY-MM-DD[T]HH:mm:ss.SSSZ\&#34;)},di.inspect=function(){if(!this.isValid())return\&#34;moment.invalid(/* \&#34;+this._i+\&#34; */)\&#34;;var t=\&#34;moment\&#34;,e=\&#34;\&#34;;this.isLocal()||(t=0===this.utcOffset()?\&#34;moment.utc\&#34;:\&#34;moment.parseZone\&#34;,e=\&#34;Z\&#34;);var i=\&#34;[\&#34;+t+&#39;(\&#34;]&#39;,n=0&lt;=this.year()&amp;&amp;this.year()&lt;=9999?\&#34;YYYY\&#34;:\&#34;YYYYYY\&#34;,a=e+&#39;[\&#34;)]&#39;;return this.format(i+n+\&#34;-MM-DD[T]HH:mm:ss.SSS\&#34;+a)},di.toJSON=function(){return this.isValid()?this.toISOString():null},di.toString=function(){return this.clone().locale(\&#34;en\&#34;).format(\&#34;ddd MMM DD YYYY HH:mm:ss [GMT]ZZ\&#34;)},di.unix=function(){return Math.floor(this.valueOf()/1e3)},di.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},di.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},di.year=Pt,di.isLeapYear=function(){return Dt(this.year())},di.weekYear=function(t){return ni.call(this,t,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)},di.isoWeekYear=function(t){return ni.call(this,t,this.isoWeek(),this.isoWeekday(),1,4)},di.quarter=di.quarters=function(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)},di.month=Yt,di.daysInMonth=function(){return At(this.year(),this.month())},di.week=di.weeks=function(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),\&#34;d\&#34;)},di.isoWeek=di.isoWeeks=function(t){var e=jt(this,1,4).week;return null==t?e:this.add(7*(t-e),\&#34;d\&#34;)},di.weeksInYear=function(){var t=this.localeData()._week;return Ut(this.year(),t.dow,t.doy)},di.isoWeeksInYear=function(){return Ut(this.year(),1,4)},di.date=ai,di.day=di.days=function(t){if(!this.isValid())return null!=t?this:NaN;var e,i,n=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=t?(e=t,i=this.localeData(),t=\&#34;string\&#34;!=typeof e?e:isNaN(e)?\&#34;number\&#34;==typeof(e=i.weekdaysParse(e))?e:null:parseInt(e,10),this.add(t-n,\&#34;d\&#34;)):n},di.weekday=function(t){if(!this.isValid())return null!=t?this:NaN;var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,\&#34;d\&#34;)},di.isoWeekday=function(t){if(!this.isValid())return null!=t?this:NaN;if(null!=t){var e=(i=t,n=this.localeData(),\&#34;string\&#34;==typeof i?n.weekdaysParse(i)%7||7:isNaN(i)?null:i);return this.day(this.day()%7?e:e-7)}return this.day()||7;var i,n},di.dayOfYear=function(t){var e=Math.round((this.clone().startOf(\&#34;day\&#34;)-this.clone().startOf(\&#34;year\&#34;))/864e5)+1;return null==t?e:this.add(t-e,\&#34;d\&#34;)},di.hour=di.hours=ne,di.minute=di.minutes=ri,di.second=di.seconds=si,di.millisecond=di.milliseconds=ui,di.utcOffset=function(t,e,i){var n,r=this._offset||0;if(!this.isValid())return null!=t?this:NaN;if(null!=t){if(\&#34;string\&#34;==typeof t){if(null===(t=ze(st,t)))return this}else Math.abs(t)&lt;16&amp;&amp;!i&amp;&amp;(t*=60);return!this._isUTC&amp;&amp;e&amp;&amp;(n=Ve(this)),this._offset=t,this._isUTC=!0,null!=n&amp;&amp;this.add(n,\&#34;m\&#34;),r!==t&amp;&amp;(!e||this._changeInProgress?Xe(this,Ue(t-r,\&#34;m\&#34;),1,!1):this._changeInProgress||(this._changeInProgress=!0,a.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?r:Ve(this)},di.utc=function(t){return this.utcOffset(0,t)},di.local=function(t){return this._isUTC&amp;&amp;(this.utcOffset(0,t),this._isUTC=!1,t&amp;&amp;this.subtract(Ve(this),\&#34;m\&#34;)),this},di.parseZone=function(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if(\&#34;string\&#34;==typeof this._i){var t=ze(ot,this._i);null!=t?this.utcOffset(t):this.utcOffset(0,!0)}return this},di.hasAlignedHourOffset=function(t){return!!this.isValid()&amp;&amp;(t=t?Te(t).utcOffset():0,(this.utcOffset()-t)%60==0)},di.isDST=function(){return this.utcOffset()&gt;this.clone().month(0).utcOffset()||this.utcOffset()&gt;this.clone().month(5).utcOffset()},di.isLocal=function(){return!!this.isValid()&amp;&amp;!this._isUTC},di.isUtcOffset=function(){return!!this.isValid()&amp;&amp;this._isUTC},di.isUtc=Be,di.isUTC=Be,di.zoneAbbr=function(){return this._isUTC?\&#34;UTC\&#34;:\&#34;\&#34;},di.zoneName=function(){return this._isUTC?\&#34;Coordinated Universal Time\&#34;:\&#34;\&#34;},di.dates=D(\&#34;dates accessor is deprecated. Use date instead.\&#34;,ai),di.months=D(\&#34;months accessor is deprecated. Use month instead\&#34;,Yt),di.years=D(\&#34;years accessor is deprecated. Use year instead\&#34;,Pt),di.zone=D(\&#34;moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/\&#34;,function(t,e){return null!=t?(\&#34;string\&#34;!=typeof t&amp;&amp;(t=-t),this.utcOffset(t,e),this):-this.utcOffset()}),di.isDSTShifted=D(\&#34;isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information\&#34;,function(){if(!s(this._isDSTShifted))return this._isDSTShifted;var t={};if(y(t,this),(t=Ce(t))._a){var e=t._isUTC?f(t._a):Te(t._a);this._isDSTShifted=this.isValid()&amp;&amp;M(t._a,e.toArray())&gt;0}else this._isDSTShifted=!1;return this._isDSTShifted});var ci=A.prototype;function fi(t,e,i,n){var a=he(),r=f().set(n,e);return a[i](r,t)}function gi(t,e,i){if(l(t)&amp;&amp;(e=t,t=void 0),t=t||\&#34;\&#34;,null!=e)return fi(t,e,i,\&#34;month\&#34;);var n,a=[];for(n=0;n&lt;12;n++)a[n]=fi(t,n,i,\&#34;month\&#34;);return a}function mi(t,e,i,n){\&#34;boolean\&#34;==typeof t?(l(e)&amp;&amp;(i=e,e=void 0),e=e||\&#34;\&#34;):(i=e=t,t=!1,l(e)&amp;&amp;(i=e,e=void 0),e=e||\&#34;\&#34;);var a,r=he(),o=t?r._week.dow:0;if(null!=i)return fi(e,(i+o)%7,n,\&#34;day\&#34;);var s=[];for(a=0;a&lt;7;a++)s[a]=fi(e,(a+o)%7,n,\&#34;day\&#34;);return s}ci.calendar=function(t,e,i){var n=this._calendar[t]||this._calendar.sameElse;return O(n)?n.call(e,i):n},ci.longDateFormat=function(t){var e=this._longDateFormat[t],i=this._longDateFormat[t.toUpperCase()];return e||!i?e:(this._longDateFormat[t]=i.replace(/MMMM|MM|DD|dddd/g,function(t){return t.slice(1)}),this._longDateFormat[t])},ci.invalidDate=function(){return this._invalidDate},ci.ordinal=function(t){return this._ordinal.replace(\&#34;%d\&#34;,t)},ci.preparse=hi,ci.postformat=hi,ci.relativeTime=function(t,e,i,n){var a=this._relativeTime[i];return O(a)?a(t,e,i,n):a.replace(/%d/i,t)},ci.pastFuture=function(t,e){var i=this._relativeTime[t&gt;0?\&#34;future\&#34;:\&#34;past\&#34;];return O(i)?i(e):i.replace(/%s/i,e)},ci.set=function(t){var e,i;for(i in t)O(e=t[i])?this[i]=e:this[\&#34;_\&#34;+i]=e;this._config=t,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+\&#34;|\&#34;+/\\d{1,2}/.source)},ci.months=function(t,e){return t?r(this._months)?this._months[t.month()]:this._months[(this._months.isFormat||Ft).test(e)?\&#34;format\&#34;:\&#34;standalone\&#34;][t.month()]:r(this._months)?this._months:this._months.standalone},ci.monthsShort=function(t,e){return t?r(this._monthsShort)?this._monthsShort[t.month()]:this._monthsShort[Ft.test(e)?\&#34;format\&#34;:\&#34;standalone\&#34;][t.month()]:r(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},ci.monthsParse=function(t,e,i){var n,a,r;if(this._monthsParseExact)return function(t,e,i){var n,a,r,o=t.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],n=0;n&lt;12;++n)r=f([2e3,n]),this._shortMonthsParse[n]=this.monthsShort(r,\&#34;\&#34;).toLocaleLowerCase(),this._longMonthsParse[n]=this.months(r,\&#34;\&#34;).toLocaleLowerCase();return i?\&#34;MMM\&#34;===e?-1!==(a=Ct.call(this._shortMonthsParse,o))?a:null:-1!==(a=Ct.call(this._longMonthsParse,o))?a:null:\&#34;MMM\&#34;===e?-1!==(a=Ct.call(this._shortMonthsParse,o))?a:-1!==(a=Ct.call(this._longMonthsParse,o))?a:null:-1!==(a=Ct.call(this._longMonthsParse,o))?a:-1!==(a=Ct.call(this._shortMonthsParse,o))?a:null}.call(this,t,e,i);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),n=0;n&lt;12;n++){if(a=f([2e3,n]),i&amp;&amp;!this._longMonthsParse[n]&amp;&amp;(this._longMonthsParse[n]=new RegExp(\&#34;^\&#34;+this.months(a,\&#34;\&#34;).replace(\&#34;.\&#34;,\&#34;\&#34;)+\&#34;$\&#34;,\&#34;i\&#34;),this._shortMonthsParse[n]=new RegExp(\&#34;^\&#34;+this.monthsShort(a,\&#34;\&#34;).replace(\&#34;.\&#34;,\&#34;\&#34;)+\&#34;$\&#34;,\&#34;i\&#34;)),i||this._monthsParse[n]||(r=\&#34;^\&#34;+this.months(a,\&#34;\&#34;)+\&#34;|^\&#34;+this.monthsShort(a,\&#34;\&#34;),this._monthsParse[n]=new RegExp(r.replace(\&#34;.\&#34;,\&#34;\&#34;),\&#34;i\&#34;)),i&amp;&amp;\&#34;MMMM\&#34;===e&amp;&amp;this._longMonthsParse[n].test(t))return n;if(i&amp;&amp;\&#34;MMM\&#34;===e&amp;&amp;this._shortMonthsParse[n].test(t))return n;if(!i&amp;&amp;this._monthsParse[n].test(t))return n}},ci.monthsRegex=function(t){return this._monthsParseExact?(h(this,\&#34;_monthsRegex\&#34;)||Ht.call(this),t?this._monthsStrictRegex:this._monthsRegex):(h(this,\&#34;_monthsRegex\&#34;)||(this._monthsRegex=zt),this._monthsStrictRegex&amp;&amp;t?this._monthsStrictRegex:this._monthsRegex)},ci.monthsShortRegex=function(t){return this._monthsParseExact?(h(this,\&#34;_monthsRegex\&#34;)||Ht.call(this),t?this._monthsShortStrictRegex:this._monthsShortRegex):(h(this,\&#34;_monthsShortRegex\&#34;)||(this._monthsShortRegex=Nt),this._monthsShortStrictRegex&amp;&amp;t?this._monthsShortStrictRegex:this._monthsShortRegex)},ci.week=function(t){return jt(t,this._week.dow,this._week.doy).week},ci.firstDayOfYear=function(){return this._week.doy},ci.firstDayOfWeek=function(){return this._week.dow},ci.weekdays=function(t,e){return t?r(this._weekdays)?this._weekdays[t.day()]:this._weekdays[this._weekdays.isFormat.test(e)?\&#34;format\&#34;:\&#34;standalone\&#34;][t.day()]:r(this._weekdays)?this._weekdays:this._weekdays.standalone},ci.weekdaysMin=function(t){return t?this._weekdaysMin[t.day()]:this._weekdaysMin},ci.weekdaysShort=function(t){return t?this._weekdaysShort[t.day()]:this._weekdaysShort},ci.weekdaysParse=function(t,e,i){var n,a,r;if(this._weekdaysParseExact)return function(t,e,i){var n,a,r,o=t.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],n=0;n&lt;7;++n)r=f([2e3,1]).day(n),this._minWeekdaysParse[n]=this.weekdaysMin(r,\&#34;\&#34;).toLocaleLowerCase(),this._shortWeekdaysParse[n]=this.weekdaysShort(r,\&#34;\&#34;).toLocaleLowerCase(),this._weekdaysParse[n]=this.weekdays(r,\&#34;\&#34;).toLocaleLowerCase();return i?\&#34;dddd\&#34;===e?-1!==(a=Ct.call(this._weekdaysParse,o))?a:null:\&#34;ddd\&#34;===e?-1!==(a=Ct.call(this._shortWeekdaysParse,o))?a:null:-1!==(a=Ct.call(this._minWeekdaysParse,o))?a:null:\&#34;dddd\&#34;===e?-1!==(a=Ct.call(this._weekdaysParse,o))?a:-1!==(a=Ct.call(this._shortWeekdaysParse,o))?a:-1!==(a=Ct.call(this._minWeekdaysParse,o))?a:null:\&#34;ddd\&#34;===e?-1!==(a=Ct.call(this._shortWeekdaysParse,o))?a:-1!==(a=Ct.call(this._weekdaysParse,o))?a:-1!==(a=Ct.call(this._minWeekdaysParse,o))?a:null:-1!==(a=Ct.call(this._minWeekdaysParse,o))?a:-1!==(a=Ct.call(this._weekdaysParse,o))?a:-1!==(a=Ct.call(this._shortWeekdaysParse,o))?a:null}.call(this,t,e,i);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),n=0;n&lt;7;n++){if(a=f([2e3,1]).day(n),i&amp;&amp;!this._fullWeekdaysParse[n]&amp;&amp;(this._fullWeekdaysParse[n]=new RegExp(\&#34;^\&#34;+this.weekdays(a,\&#34;\&#34;).replace(\&#34;.\&#34;,\&#34;.?\&#34;)+\&#34;$\&#34;,\&#34;i\&#34;),this._shortWeekdaysParse[n]=new RegExp(\&#34;^\&#34;+this.weekdaysShort(a,\&#34;\&#34;).replace(\&#34;.\&#34;,\&#34;.?\&#34;)+\&#34;$\&#34;,\&#34;i\&#34;),this._minWeekdaysParse[n]=new RegExp(\&#34;^\&#34;+this.weekdaysMin(a,\&#34;\&#34;).replace(\&#34;.\&#34;,\&#34;.?\&#34;)+\&#34;$\&#34;,\&#34;i\&#34;)),this._weekdaysParse[n]||(r=\&#34;^\&#34;+this.weekdays(a,\&#34;\&#34;)+\&#34;|^\&#34;+this.weekdaysShort(a,\&#34;\&#34;)+\&#34;|^\&#34;+this.weekdaysMin(a,\&#34;\&#34;),this._weekdaysParse[n]=new RegExp(r.replace(\&#34;.\&#34;,\&#34;\&#34;),\&#34;i\&#34;)),i&amp;&amp;\&#34;dddd\&#34;===e&amp;&amp;this._fullWeekdaysParse[n].test(t))return n;if(i&amp;&amp;\&#34;ddd\&#34;===e&amp;&amp;this._shortWeekdaysParse[n].test(t))return n;if(i&amp;&amp;\&#34;dd\&#34;===e&amp;&amp;this._minWeekdaysParse[n].test(t))return n;if(!i&amp;&amp;this._weekdaysParse[n].test(t))return n}},ci.weekdaysRegex=function(t){return this._weekdaysParseExact?(h(this,\&#34;_weekdaysRegex\&#34;)||$t.call(this),t?this._weekdaysStrictRegex:this._weekdaysRegex):(h(this,\&#34;_weekdaysRegex\&#34;)||(this._weekdaysRegex=Xt),this._weekdaysStrictRegex&amp;&amp;t?this._weekdaysStrictRegex:this._weekdaysRegex)},ci.weekdaysShortRegex=function(t){return this._weekdaysParseExact?(h(this,\&#34;_weekdaysRegex\&#34;)||$t.call(this),t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(h(this,\&#34;_weekdaysShortRegex\&#34;)||(this._weekdaysShortRegex=Jt),this._weekdaysShortStrictRegex&amp;&amp;t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},ci.weekdaysMinRegex=function(t){return this._weekdaysParseExact?(h(this,\&#34;_weekdaysRegex\&#34;)||$t.call(this),t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(h(this,\&#34;_weekdaysMinRegex\&#34;)||(this._weekdaysMinRegex=Kt),this._weekdaysMinStrictRegex&amp;&amp;t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},ci.isPM=function(t){return\&#34;p\&#34;===(t+\&#34;\&#34;).toLowerCase().charAt(0)},ci.meridiem=function(t,e,i){return t&gt;11?i?\&#34;pm\&#34;:\&#34;PM\&#34;:i?\&#34;am\&#34;:\&#34;AM\&#34;},ue(\&#34;en\&#34;,{dayOfMonthOrdinalParse:/\\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10;return t+(1===w(t%100/10)?\&#34;th\&#34;:1===e?\&#34;st\&#34;:2===e?\&#34;nd\&#34;:3===e?\&#34;rd\&#34;:\&#34;th\&#34;)}}),a.lang=D(\&#34;moment.lang is deprecated. Use moment.locale instead.\&#34;,ue),a.langData=D(\&#34;moment.langData is deprecated. Use moment.localeData instead.\&#34;,he);var pi=Math.abs;function vi(t,e,i,n){var a=Ue(e,i);return t._milliseconds+=n*a._milliseconds,t._days+=n*a._days,t._months+=n*a._months,t._bubble()}function yi(t){return t&lt;0?Math.floor(t):Math.ceil(t)}function bi(t){return 4800*t/146097}function xi(t){return 146097*t/4800}function _i(t){return function(){return this.as(t)}}var ki=_i(\&#34;ms\&#34;),wi=_i(\&#34;s\&#34;),Mi=_i(\&#34;m\&#34;),Si=_i(\&#34;h\&#34;),Di=_i(\&#34;d\&#34;),Ci=_i(\&#34;w\&#34;),Pi=_i(\&#34;M\&#34;),Ti=_i(\&#34;y\&#34;);function Oi(t){return function(){return this.isValid()?this._data[t]:NaN}}var Ii=Oi(\&#34;milliseconds\&#34;),Ai=Oi(\&#34;seconds\&#34;),Fi=Oi(\&#34;minutes\&#34;),Ri=Oi(\&#34;hours\&#34;),Li=Oi(\&#34;days\&#34;),Wi=Oi(\&#34;months\&#34;),Yi=Oi(\&#34;years\&#34;);var Ni=Math.round,zi={ss:44,s:45,m:45,h:22,d:26,M:11};var Hi=Math.abs;function Vi(t){return(t&gt;0)-(t&lt;0)||+t}function Bi(){if(!this.isValid())return this.localeData().invalidDate();var t,e,i=Hi(this._milliseconds)/1e3,n=Hi(this._days),a=Hi(this._months);e=k((t=k(i/60))/60),i%=60,t%=60;var r=k(a/12),o=a%=12,s=n,l=e,u=t,d=i?i.toFixed(3).replace(/\\.?0+$/,\&#34;\&#34;):\&#34;\&#34;,h=this.asSeconds();if(!h)return\&#34;P0D\&#34;;var c=h&lt;0?\&#34;-\&#34;:\&#34;\&#34;,f=Vi(this._months)!==Vi(h)?\&#34;-\&#34;:\&#34;\&#34;,g=Vi(this._days)!==Vi(h)?\&#34;-\&#34;:\&#34;\&#34;,m=Vi(this._milliseconds)!==Vi(h)?\&#34;-\&#34;:\&#34;\&#34;;return c+\&#34;P\&#34;+(r?f+r+\&#34;Y\&#34;:\&#34;\&#34;)+(o?f+o+\&#34;M\&#34;:\&#34;\&#34;)+(s?g+s+\&#34;D\&#34;:\&#34;\&#34;)+(l||u||d?\&#34;T\&#34;:\&#34;\&#34;)+(l?m+l+\&#34;H\&#34;:\&#34;\&#34;)+(u?m+u+\&#34;M\&#34;:\&#34;\&#34;)+(d?m+d+\&#34;S\&#34;:\&#34;\&#34;)}var Ei=Re.prototype;return Ei.isValid=function(){return this._isValid},Ei.abs=function(){var t=this._data;return this._milliseconds=pi(this._milliseconds),this._days=pi(this._days),this._months=pi(this._months),t.milliseconds=pi(t.milliseconds),t.seconds=pi(t.seconds),t.minutes=pi(t.minutes),t.hours=pi(t.hours),t.months=pi(t.months),t.years=pi(t.years),this},Ei.add=function(t,e){return vi(this,t,e,1)},Ei.subtract=function(t,e){return vi(this,t,e,-1)},Ei.as=function(t){if(!this.isValid())return NaN;var e,i,n=this._milliseconds;if(\&#34;month\&#34;===(t=L(t))||\&#34;year\&#34;===t)return e=this._days+n/864e5,i=this._months+bi(e),\&#34;month\&#34;===t?i:i/12;switch(e=this._days+Math.round(xi(this._months)),t){case\&#34;week\&#34;:return e/7+n/6048e5;case\&#34;day\&#34;:return e+n/864e5;case\&#34;hour\&#34;:return 24*e+n/36e5;case\&#34;minute\&#34;:return 1440*e+n/6e4;case\&#34;second\&#34;:return 86400*e+n/1e3;case\&#34;millisecond\&#34;:return Math.floor(864e5*e)+n;default:throw new Error(\&#34;Unknown unit \&#34;+t)}},Ei.asMilliseconds=ki,Ei.asSeconds=wi,Ei.asMinutes=Mi,Ei.asHours=Si,Ei.asDays=Di,Ei.asWeeks=Ci,Ei.asMonths=Pi,Ei.asYears=Ti,Ei.valueOf=function(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*w(this._months/12):NaN},Ei._bubble=function(){var t,e,i,n,a,r=this._milliseconds,o=this._days,s=this._months,l=this._data;return r&gt;=0&amp;&amp;o&gt;=0&amp;&amp;s&gt;=0||r&lt;=0&amp;&amp;o&lt;=0&amp;&amp;s&lt;=0||(r+=864e5*yi(xi(s)+o),o=0,s=0),l.milliseconds=r%1e3,t=k(r/1e3),l.seconds=t%60,e=k(t/60),l.minutes=e%60,i=k(e/60),l.hours=i%24,s+=a=k(bi(o+=k(i/24))),o-=yi(xi(a)),n=k(s/12),s%=12,l.days=o,l.months=s,l.years=n,this},Ei.clone=function(){return Ue(this)},Ei.get=function(t){return t=L(t),this.isValid()?this[t+\&#34;s\&#34;]():NaN},Ei.milliseconds=Ii,Ei.seconds=Ai,Ei.minutes=Fi,Ei.hours=Ri,Ei.days=Li,Ei.weeks=function(){return k(this.days()/7)},Ei.months=Wi,Ei.years=Yi,Ei.humanize=function(t){if(!this.isValid())return this.localeData().invalidDate();var e,i,n,a,r,o,s,l,u,d,h,c=this.localeData(),f=(i=!t,n=c,a=Ue(e=this).abs(),r=Ni(a.as(\&#34;s\&#34;)),o=Ni(a.as(\&#34;m\&#34;)),s=Ni(a.as(\&#34;h\&#34;)),l=Ni(a.as(\&#34;d\&#34;)),u=Ni(a.as(\&#34;M\&#34;)),d=Ni(a.as(\&#34;y\&#34;)),(h=r&lt;=zi.ss&amp;&amp;[\&#34;s\&#34;,r]||r&lt;zi.s&amp;&amp;[\&#34;ss\&#34;,r]||o&lt;=1&amp;&amp;[\&#34;m\&#34;]||o&lt;zi.m&amp;&amp;[\&#34;mm\&#34;,o]||s&lt;=1&amp;&amp;[\&#34;h\&#34;]||s&lt;zi.h&amp;&amp;[\&#34;hh\&#34;,s]||l&lt;=1&amp;&amp;[\&#34;d\&#34;]||l&lt;zi.d&amp;&amp;[\&#34;dd\&#34;,l]||u&lt;=1&amp;&amp;[\&#34;M\&#34;]||u&lt;zi.M&amp;&amp;[\&#34;MM\&#34;,u]||d&lt;=1&amp;&amp;[\&#34;y\&#34;]||[\&#34;yy\&#34;,d])[2]=i,h[3]=+e&gt;0,h[4]=n,function(t,e,i,n,a){return a.relativeTime(e||1,!!i,t,n)}.apply(null,h));return t&amp;&amp;(f=c.pastFuture(+this,f)),c.postformat(f)},Ei.toISOString=Bi,Ei.toString=Bi,Ei.toJSON=Bi,Ei.locale=Qe,Ei.localeData=ei,Ei.toIsoString=D(\&#34;toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)\&#34;,Bi),Ei.lang=ti,j(\&#34;X\&#34;,0,0,\&#34;unix\&#34;),j(\&#34;x\&#34;,0,0,\&#34;valueOf\&#34;),dt(\&#34;x\&#34;,rt),dt(\&#34;X\&#34;,/[+-]?\\d+(\\.\\d{1,3})?/),gt(\&#34;X\&#34;,function(t,e,i){i._d=new Date(1e3*parseFloat(t,10))}),gt(\&#34;x\&#34;,function(t,e,i){i._d=new Date(w(t))}),a.version=\&#34;2.20.1\&#34;,i=Te,a.fn=di,a.min=function(){return Ae(\&#34;isBefore\&#34;,[].slice.call(arguments,0))},a.max=function(){return Ae(\&#34;isAfter\&#34;,[].slice.call(arguments,0))},a.now=function(){return Date.now?Date.now():+new Date},a.utc=f,a.unix=function(t){return Te(1e3*t)},a.months=function(t,e){return gi(t,e,\&#34;months\&#34;)},a.isDate=u,a.locale=ue,a.invalid=p,a.duration=Ue,a.isMoment=_,a.weekdays=function(t,e,i){return mi(t,e,i,\&#34;weekdays\&#34;)},a.parseZone=function(){return Te.apply(null,arguments).parseZone()},a.localeData=he,a.isDuration=Le,a.monthsShort=function(t,e){return gi(t,e,\&#34;monthsShort\&#34;)},a.weekdaysMin=function(t,e,i){return mi(t,e,i,\&#34;weekdaysMin\&#34;)},a.defineLocale=de,a.updateLocale=function(t,e){if(null!=e){var i,n,a=ae;null!=(n=le(t))&amp;&amp;(a=n._config),(i=new A(e=I(a,e))).parentLocale=re[t],re[t]=i,ue(t)}else null!=re[t]&amp;&amp;(null!=re[t].parentLocale?re[t]=re[t].parentLocale:null!=re[t]&amp;&amp;delete re[t]);return re[t]},a.locales=function(){return C(re)},a.weekdaysShort=function(t,e,i){return mi(t,e,i,\&#34;weekdaysShort\&#34;)},a.normalizeUnits=L,a.relativeTimeRounding=function(t){return void 0===t?Ni:\&#34;function\&#34;==typeof t&amp;&amp;(Ni=t,!0)},a.relativeTimeThreshold=function(t,e){return void 0!==zi[t]&amp;&amp;(void 0===e?zi[t]:(zi[t]=e,\&#34;s\&#34;===t&amp;&amp;(zi.ss=e-1),!0))},a.calendarFormat=function(t,e){var i=t.diff(e,\&#34;days\&#34;,!0);return i&lt;-6?\&#34;sameElse\&#34;:i&lt;-1?\&#34;lastWeek\&#34;:i&lt;0?\&#34;lastDay\&#34;:i&lt;1?\&#34;sameDay\&#34;:i&lt;2?\&#34;nextDay\&#34;:i&lt;7?\&#34;nextWeek\&#34;:\&#34;sameElse\&#34;},a.prototype=di,a.HTML5_FMT={DATETIME_LOCAL:\&#34;YYYY-MM-DDTHH:mm\&#34;,DATETIME_LOCAL_SECONDS:\&#34;YYYY-MM-DDTHH:mm:ss\&#34;,DATETIME_LOCAL_MS:\&#34;YYYY-MM-DDTHH:mm:ss.SSS\&#34;,DATE:\&#34;YYYY-MM-DD\&#34;,TIME:\&#34;HH:mm\&#34;,TIME_SECONDS:\&#34;HH:mm:ss\&#34;,TIME_MS:\&#34;HH:mm:ss.SSS\&#34;,WEEK:\&#34;YYYY-[W]WW\&#34;,MONTH:\&#34;YYYY-MM\&#34;},a},\&#34;object\&#34;==typeof i&amp;&amp;void 0!==e?e.exports=a():n.moment=a()},{}],7:[function(t,e,i){var n=t(29)();n.helpers=t(45),t(27)(n),n.defaults=t(25),n.Element=t(26),n.elements=t(40),n.Interaction=t(28),n.layouts=t(30),n.platform=t(48),n.plugins=t(31),n.Ticks=t(34),t(22)(n),t(23)(n),t(24)(n),t(33)(n),t(32)(n),t(35)(n),t(55)(n),t(53)(n),t(54)(n),t(56)(n),t(57)(n),t(58)(n),t(15)(n),t(16)(n),t(17)(n),t(18)(n),t(19)(n),t(20)(n),t(21)(n),t(8)(n),t(9)(n),t(10)(n),t(11)(n),t(12)(n),t(13)(n),t(14)(n);var a=t(49);for(var r in a)a.hasOwnProperty(r)&amp;&amp;n.plugins.register(a[r]);n.platform.initialize(),e.exports=n,\&#34;undefined\&#34;!=typeof window&amp;&amp;(window.Chart=n),n.Legend=a.legend._element,n.Title=a.title._element,n.pluginService=n.plugins,n.PluginBase=n.Element.extend({}),n.canvasHelpers=n.helpers.canvas,n.layoutService=n.layouts},{10:10,11:11,12:12,13:13,14:14,15:15,16:16,17:17,18:18,19:19,20:20,21:21,22:22,23:23,24:24,25:25,26:26,27:27,28:28,29:29,30:30,31:31,32:32,33:33,34:34,35:35,40:40,45:45,48:48,49:49,53:53,54:54,55:55,56:56,57:57,58:58,8:8,9:9}],8:[function(t,e,i){\&#34;use strict\&#34;;e.exports=function(t){t.Bar=function(e,i){return i.type=\&#34;bar\&#34;,new t(e,i)}}},{}],9:[function(t,e,i){\&#34;use strict\&#34;;e.exports=function(t){t.Bubble=function(e,i){return i.type=\&#34;bubble\&#34;,new t(e,i)}}},{}],10:[function(t,e,i){\&#34;use strict\&#34;;e.exports=function(t){t.Doughnut=function(e,i){return i.type=\&#34;doughnut\&#34;,new t(e,i)}}},{}],11:[function(t,e,i){\&#34;use strict\&#34;;e.exports=function(t){t.Line=function(e,i){return i.type=\&#34;line\&#34;,new t(e,i)}}},{}],12:[function(t,e,i){\&#34;use strict\&#34;;e.exports=function(t){t.PolarArea=function(e,i){return i.type=\&#34;polarArea\&#34;,new t(e,i)}}},{}],13:[function(t,e,i){\&#34;use strict\&#34;;e.exports=function(t){t.Radar=function(e,i){return i.type=\&#34;radar\&#34;,new t(e,i)}}},{}],14:[function(t,e,i){\&#34;use strict\&#34;;e.exports=function(t){t.Scatter=function(e,i){return i.type=\&#34;scatter\&#34;,new t(e,i)}}},{}],15:[function(t,e,i){\&#34;use strict\&#34;;var n=t(25),a=t(40),r=t(45);n._set(\&#34;bar\&#34;,{hover:{mode:\&#34;label\&#34;},scales:{xAxes:[{type:\&#34;category\&#34;,categoryPercentage:.8,barPercentage:.9,offset:!0,gridLines:{offsetGridLines:!0}}],yAxes:[{type:\&#34;linear\&#34;}]}}),n._set(\&#34;horizontalBar\&#34;,{hover:{mode:\&#34;index\&#34;,axis:\&#34;y\&#34;},scales:{xAxes:[{type:\&#34;linear\&#34;,position:\&#34;bottom\&#34;}],yAxes:[{position:\&#34;left\&#34;,type:\&#34;category\&#34;,categoryPercentage:.8,barPercentage:.9,offset:!0,gridLines:{offsetGridLines:!0}}]},elements:{rectangle:{borderSkipped:\&#34;left\&#34;}},tooltips:{callbacks:{title:function(t,e){var i=\&#34;\&#34;;return t.length&gt;0&amp;&amp;(t[0].yLabel?i=t[0].yLabel:e.labels.length&gt;0&amp;&amp;t[0].index&lt;e.labels.length&amp;&amp;(i=e.labels[t[0].index])),i},label:function(t,e){return(e.datasets[t.datasetIndex].label||\&#34;\&#34;)+\&#34;: \&#34;+t.xLabel}},mode:\&#34;index\&#34;,axis:\&#34;y\&#34;}}),e.exports=function(t){t.controllers.bar=t.DatasetController.extend({dataElementType:a.Rectangle,initialize:function(){var e;t.DatasetController.prototype.initialize.apply(this,arguments),(e=this.getMeta()).stack=this.getDataset().stack,e.bar=!0},update:function(t){var e,i,n=this.getMeta().data;for(this._ruler=this.getRuler(),e=0,i=n.length;e&lt;i;++e)this.updateElement(n[e],e,t)},updateElement:function(t,e,i){var n=this,a=n.chart,o=n.getMeta(),s=n.getDataset(),l=t.custom||{},u=a.options.elements.rectangle;t._xScale=n.getScaleForId(o.xAxisID),t._yScale=n.getScaleForId(o.yAxisID),t._datasetIndex=n.index,t._index=e,t._model={datasetLabel:s.label,label:a.data.labels[e],borderSkipped:l.borderSkipped?l.borderSkipped:u.borderSkipped,backgroundColor:l.backgroundColor?l.backgroundColor:r.valueAtIndexOrDefault(s.backgroundColor,e,u.backgroundColor),borderColor:l.borderColor?l.borderColor:r.valueAtIndexOrDefault(s.borderColor,e,u.borderColor),borderWidth:l.borderWidth?l.borderWidth:r.valueAtIndexOrDefault(s.borderWidth,e,u.borderWidth)},n.updateElementGeometry(t,e,i),t.pivot()},updateElementGeometry:function(t,e,i){var n=this,a=t._model,r=n.getValueScale(),o=r.getBasePixel(),s=r.isHorizontal(),l=n._ruler||n.getRuler(),u=n.calculateBarValuePixels(n.index,e),d=n.calculateBarIndexPixels(n.index,e,l);a.horizontal=s,a.base=i?o:u.base,a.x=s?i?o:u.head:d.center,a.y=s?d.center:i?o:u.head,a.height=s?d.size:void 0,a.width=s?void 0:d.size},getValueScaleId:function(){return this.getMeta().yAxisID},getIndexScaleId:function(){return this.getMeta().xAxisID},getValueScale:function(){return this.getScaleForId(this.getValueScaleId())},getIndexScale:function(){return this.getScaleForId(this.getIndexScaleId())},_getStacks:function(t){var e,i,n=this.chart,a=this.getIndexScale().options.stacked,r=void 0===t?n.data.datasets.length:t+1,o=[];for(e=0;e&lt;r;++e)(i=n.getDatasetMeta(e)).bar&amp;&amp;n.isDatasetVisible(e)&amp;&amp;(!1===a||!0===a&amp;&amp;-1===o.indexOf(i.stack)||void 0===a&amp;&amp;(void 0===i.stack||-1===o.indexOf(i.stack)))&amp;&amp;o.push(i.stack);return o},getStackCount:function(){return this._getStacks().length},getStackIndex:function(t,e){var i=this._getStacks(t),n=void 0!==e?i.indexOf(e):-1;return-1===n?i.length-1:n},getRuler:function(){var t,e,i=this.getIndexScale(),n=this.getStackCount(),a=this.index,o=i.isHorizontal(),s=o?i.left:i.top,l=s+(o?i.width:i.height),u=[];for(t=0,e=this.getMeta().data.length;t&lt;e;++t)u.push(i.getPixelForValue(null,t,a));return{min:r.isNullOrUndef(i.options.barThickness)?function(t,e){var i,n,a,r,o=t.isHorizontal()?t.width:t.height,s=t.getTicks();for(a=1,r=e.length;a&lt;r;++a)o=Math.min(o,e[a]-e[a-1]);for(a=0,r=s.length;a&lt;r;++a)n=t.getPixelForTick(a),o=a&gt;0?Math.min(o,n-i):o,i=n;return o}(i,u):-1,pixels:u,start:s,end:l,stackCount:n,scale:i}},calculateBarValuePixels:function(t,e){var i,n,a,r,o,s,l=this.chart,u=this.getMeta(),d=this.getValueScale(),h=l.data.datasets,c=d.getRightValue(h[t].data[e]),f=d.options.stacked,g=u.stack,m=0;if(f||void 0===f&amp;&amp;void 0!==g)for(i=0;i&lt;t;++i)(n=l.getDatasetMeta(i)).bar&amp;&amp;n.stack===g&amp;&amp;n.controller.getValueScaleId()===d.id&amp;&amp;l.isDatasetVisible(i)&amp;&amp;(a=d.getRightValue(h[i].data[e]),(c&lt;0&amp;&amp;a&lt;0||c&gt;=0&amp;&amp;a&gt;0)&amp;&amp;(m+=a));return r=d.getPixelForValue(m),{size:s=((o=d.getPixelForValue(m+c))-r)/2,base:r,head:o,center:o+s/2}},calculateBarIndexPixels:function(t,e,i){var n,a,o,s,l,u,d,h,c,f,g,m,p,v,y,b,x,_=i.scale.options,k=\&#34;flex\&#34;===_.barThickness?(c=e,g=_,p=(f=i).pixels,v=p[c],y=c&gt;0?p[c-1]:null,b=c&lt;p.length-1?p[c+1]:null,x=g.categoryPercentage,null===y&amp;&amp;(y=v-(null===b?f.end-v:b-v)),null===b&amp;&amp;(b=v+v-y),m=v-(v-y)/2*x,{chunk:(b-y)/2*x/f.stackCount,ratio:g.barPercentage,start:m}):(n=e,a=i,u=(o=_).barThickness,d=a.stackCount,h=a.pixels[n],r.isNullOrUndef(u)?(s=a.min*o.categoryPercentage,l=o.barPercentage):(s=u*d,l=1),{chunk:s/d,ratio:l,start:h-s/2}),w=this.getStackIndex(t,this.getMeta().stack),M=k.start+k.chunk*w+k.chunk/2,S=Math.min(r.valueOrDefault(_.maxBarThickness,1/0),k.chunk*k.ratio);return{base:M-S/2,head:M+S/2,center:M,size:S}},draw:function(){var t=this.chart,e=this.getValueScale(),i=this.getMeta().data,n=this.getDataset(),a=i.length,o=0;for(r.canvas.clipArea(t.ctx,t.chartArea);o&lt;a;++o)isNaN(e.getRightValue(n.data[o]))||i[o].draw();r.canvas.unclipArea(t.ctx)},setHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],i=t._index,n=t.custom||{},a=t._model;a.backgroundColor=n.hoverBackgroundColor?n.hoverBackgroundColor:r.valueAtIndexOrDefault(e.hoverBackgroundColor,i,r.getHoverColor(a.backgroundColor)),a.borderColor=n.hoverBorderColor?n.hoverBorderColor:r.valueAtIndexOrDefault(e.hoverBorderColor,i,r.getHoverColor(a.borderColor)),a.borderWidth=n.hoverBorderWidth?n.hoverBorderWidth:r.valueAtIndexOrDefault(e.hoverBorderWidth,i,a.borderWidth)},removeHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],i=t._index,n=t.custom||{},a=t._model,o=this.chart.options.elements.rectangle;a.backgroundColor=n.backgroundColor?n.backgroundColor:r.valueAtIndexOrDefault(e.backgroundColor,i,o.backgroundColor),a.borderColor=n.borderColor?n.borderColor:r.valueAtIndexOrDefault(e.borderColor,i,o.borderColor),a.borderWidth=n.borderWidth?n.borderWidth:r.valueAtIndexOrDefault(e.borderWidth,i,o.borderWidth)}}),t.controllers.horizontalBar=t.controllers.bar.extend({getValueScaleId:function(){return this.getMeta().xAxisID},getIndexScaleId:function(){return this.getMeta().yAxisID}})}},{25:25,40:40,45:45}],16:[function(t,e,i){\&#34;use strict\&#34;;var n=t(25),a=t(40),r=t(45);n._set(\&#34;bubble\&#34;,{hover:{mode:\&#34;single\&#34;},scales:{xAxes:[{type:\&#34;linear\&#34;,position:\&#34;bottom\&#34;,id:\&#34;x-axis-0\&#34;}],yAxes:[{type:\&#34;linear\&#34;,position:\&#34;left\&#34;,id:\&#34;y-axis-0\&#34;}]},tooltips:{callbacks:{title:function(){return\&#34;\&#34;},label:function(t,e){var i=e.datasets[t.datasetIndex].label||\&#34;\&#34;,n=e.datasets[t.datasetIndex].data[t.index];return i+\&#34;: (\&#34;+t.xLabel+\&#34;, \&#34;+t.yLabel+\&#34;, \&#34;+n.r+\&#34;)\&#34;}}}}),e.exports=function(t){t.controllers.bubble=t.DatasetController.extend({dataElementType:a.Point,update:function(t){var e=this,i=e.getMeta().data;r.each(i,function(i,n){e.updateElement(i,n,t)})},updateElement:function(t,e,i){var n=this,a=n.getMeta(),r=t.custom||{},o=n.getScaleForId(a.xAxisID),s=n.getScaleForId(a.yAxisID),l=n._resolveElementOptions(t,e),u=n.getDataset().data[e],d=n.index,h=i?o.getPixelForDecimal(.5):o.getPixelForValue(\&#34;object\&#34;==typeof u?u:NaN,e,d),c=i?s.getBasePixel():s.getPixelForValue(u,e,d);t._xScale=o,t._yScale=s,t._options=l,t._datasetIndex=d,t._index=e,t._model={backgroundColor:l.backgroundColor,borderColor:l.borderColor,borderWidth:l.borderWidth,hitRadius:l.hitRadius,pointStyle:l.pointStyle,radius:i?0:l.radius,skip:r.skip||isNaN(h)||isNaN(c),x:h,y:c},t.pivot()},setHoverStyle:function(t){var e=t._model,i=t._options;e.backgroundColor=r.valueOrDefault(i.hoverBackgroundColor,r.getHoverColor(i.backgroundColor)),e.borderColor=r.valueOrDefault(i.hoverBorderColor,r.getHoverColor(i.borderColor)),e.borderWidth=r.valueOrDefault(i.hoverBorderWidth,i.borderWidth),e.radius=i.radius+i.hoverRadius},removeHoverStyle:function(t){var e=t._model,i=t._options;e.backgroundColor=i.backgroundColor,e.borderColor=i.borderColor,e.borderWidth=i.borderWidth,e.radius=i.radius},_resolveElementOptions:function(t,e){var i,n,a,o=this.chart,s=o.data.datasets[this.index],l=t.custom||{},u=o.options.elements.point,d=r.options.resolve,h=s.data[e],c={},f={chart:o,dataIndex:e,dataset:s,datasetIndex:this.index},g=[\&#34;backgroundColor\&#34;,\&#34;borderColor\&#34;,\&#34;borderWidth\&#34;,\&#34;hoverBackgroundColor\&#34;,\&#34;hoverBorderColor\&#34;,\&#34;hoverBorderWidth\&#34;,\&#34;hoverRadius\&#34;,\&#34;hitRadius\&#34;,\&#34;pointStyle\&#34;];for(i=0,n=g.length;i&lt;n;++i)c[a=g[i]]=d([l[a],s[a],u[a]],f,e);return c.radius=d([l.radius,h?h.r:void 0,s.radius,u.radius],f,e),c}})}},{25:25,40:40,45:45}],17:[function(t,e,i){\&#34;use strict\&#34;;var n=t(25),a=t(40),r=t(45);n._set(\&#34;doughnut\&#34;,{animation:{animateRotate:!0,animateScale:!1},hover:{mode:\&#34;single\&#34;},legendCallback:function(t){var e=[];e.push(&#39;&lt;ul class=\&#34;&#39;+t.id+&#39;-legend\&#34;&gt;&#39;);var i=t.data,n=i.datasets,a=i.labels;if(n.length)for(var r=0;r&lt;n[0].data.length;++r)e.push(&#39;&lt;li&gt;&lt;span style=\&#34;background-color:&#39;+n[0].backgroundColor[r]+&#39;\&#34;&gt;&lt;/span&gt;&#39;),a[r]&amp;&amp;e.push(a[r]),e.push(\&#34;&lt;/li&gt;\&#34;);return e.push(\&#34;&lt;/ul&gt;\&#34;),e.join(\&#34;\&#34;)},legend:{labels:{generateLabels:function(t){var e=t.data;return e.labels.length&amp;&amp;e.datasets.length?e.labels.map(function(i,n){var a=t.getDatasetMeta(0),o=e.datasets[0],s=a.data[n],l=s&amp;&amp;s.custom||{},u=r.valueAtIndexOrDefault,d=t.options.elements.arc;return{text:i,fillStyle:l.backgroundColor?l.backgroundColor:u(o.backgroundColor,n,d.backgroundColor),strokeStyle:l.borderColor?l.borderColor:u(o.borderColor,n,d.borderColor),lineWidth:l.borderWidth?l.borderWidth:u(o.borderWidth,n,d.borderWidth),hidden:isNaN(o.data[n])||a.data[n].hidden,index:n}}):[]}},onClick:function(t,e){var i,n,a,r=e.index,o=this.chart;for(i=0,n=(o.data.datasets||[]).length;i&lt;n;++i)(a=o.getDatasetMeta(i)).data[r]&amp;&amp;(a.data[r].hidden=!a.data[r].hidden);o.update()}},cutoutPercentage:50,rotation:-.5*Math.PI,circumference:2*Math.PI,tooltips:{callbacks:{title:function(){return\&#34;\&#34;},label:function(t,e){var i=e.labels[t.index],n=\&#34;: \&#34;+e.datasets[t.datasetIndex].data[t.index];return r.isArray(i)?(i=i.slice())[0]+=n:i+=n,i}}}}),n._set(\&#34;pie\&#34;,r.clone(n.doughnut)),n._set(\&#34;pie\&#34;,{cutoutPercentage:0}),e.exports=function(t){t.controllers.doughnut=t.controllers.pie=t.DatasetController.extend({dataElementType:a.Arc,linkScales:r.noop,getRingIndex:function(t){for(var e=0,i=0;i&lt;t;++i)this.chart.isDatasetVisible(i)&amp;&amp;++e;return e},update:function(t){var e=this,i=e.chart,n=i.chartArea,a=i.options,o=a.elements.arc,s=n.right-n.left-o.borderWidth,l=n.bottom-n.top-o.borderWidth,u=Math.min(s,l),d={x:0,y:0},h=e.getMeta(),c=a.cutoutPercentage,f=a.circumference;if(f&lt;2*Math.PI){var g=a.rotation%(2*Math.PI),m=(g+=2*Math.PI*(g&gt;=Math.PI?-1:g&lt;-Math.PI?1:0))+f,p=Math.cos(g),v=Math.sin(g),y=Math.cos(m),b=Math.sin(m),x=g&lt;=0&amp;&amp;m&gt;=0||g&lt;=2*Math.PI&amp;&amp;2*Math.PI&lt;=m,_=g&lt;=.5*Math.PI&amp;&amp;.5*Math.PI&lt;=m||g&lt;=2.5*Math.PI&amp;&amp;2.5*Math.PI&lt;=m,k=g&lt;=-Math.PI&amp;&amp;-Math.PI&lt;=m||g&lt;=Math.PI&amp;&amp;Math.PI&lt;=m,w=g&lt;=.5*-Math.PI&amp;&amp;.5*-Math.PI&lt;=m||g&lt;=1.5*Math.PI&amp;&amp;1.5*Math.PI&lt;=m,M=c/100,S=k?-1:Math.min(p*(p&lt;0?1:M),y*(y&lt;0?1:M)),D=w?-1:Math.min(v*(v&lt;0?1:M),b*(b&lt;0?1:M)),C=x?1:Math.max(p*(p&gt;0?1:M),y*(y&gt;0?1:M)),P=_?1:Math.max(v*(v&gt;0?1:M),b*(b&gt;0?1:M)),T=.5*(C-S),O=.5*(P-D);u=Math.min(s/T,l/O),d={x:-.5*(C+S),y:-.5*(P+D)}}i.borderWidth=e.getMaxBorderWidth(h.data),i.outerRadius=Math.max((u-i.borderWidth)/2,0),i.innerRadius=Math.max(c?i.outerRadius/100*c:0,0),i.radiusLength=(i.outerRadius-i.innerRadius)/i.getVisibleDatasetCount(),i.offsetX=d.x*i.outerRadius,i.offsetY=d.y*i.outerRadius,h.total=e.calculateTotal(),e.outerRadius=i.outerRadius-i.radiusLength*e.getRingIndex(e.index),e.innerRadius=Math.max(e.outerRadius-i.radiusLength,0),r.each(h.data,function(i,n){e.updateElement(i,n,t)})},updateElement:function(t,e,i){var n=this,a=n.chart,o=a.chartArea,s=a.options,l=s.animation,u=(o.left+o.right)/2,d=(o.top+o.bottom)/2,h=s.rotation,c=s.rotation,f=n.getDataset(),g=i&amp;&amp;l.animateRotate?0:t.hidden?0:n.calculateCircumference(f.data[e])*(s.circumference/(2*Math.PI)),m=i&amp;&amp;l.animateScale?0:n.innerRadius,p=i&amp;&amp;l.animateScale?0:n.outerRadius,v=r.valueAtIndexOrDefault;r.extend(t,{_datasetIndex:n.index,_index:e,_model:{x:u+a.offsetX,y:d+a.offsetY,startAngle:h,endAngle:c,circumference:g,outerRadius:p,innerRadius:m,label:v(f.label,e,a.data.labels[e])}});var y=t._model;this.removeHoverStyle(t),i&amp;&amp;l.animateRotate||(y.startAngle=0===e?s.rotation:n.getMeta().data[e-1]._model.endAngle,y.endAngle=y.startAngle+y.circumference),t.pivot()},removeHoverStyle:function(e){t.DatasetController.prototype.removeHoverStyle.call(this,e,this.chart.options.elements.arc)},calculateTotal:function(){var t,e=this.getDataset(),i=this.getMeta(),n=0;return r.each(i.data,function(i,a){t=e.data[a],isNaN(t)||i.hidden||(n+=Math.abs(t))}),n},calculateCircumference:function(t){var e=this.getMeta().total;return e&gt;0&amp;&amp;!isNaN(t)?2*Math.PI*(Math.abs(t)/e):0},getMaxBorderWidth:function(t){for(var e,i,n=0,a=this.index,r=t.length,o=0;o&lt;r;o++)e=t[o]._model?t[o]._model.borderWidth:0,n=(i=t[o]._chart?t[o]._chart.config.data.datasets[a].hoverBorderWidth:0)&gt;(n=e&gt;n?e:n)?i:n;return n}})}},{25:25,40:40,45:45}],18:[function(t,e,i){\&#34;use strict\&#34;;var n=t(25),a=t(40),r=t(45);n._set(\&#34;line\&#34;,{showLines:!0,spanGaps:!1,hover:{mode:\&#34;label\&#34;},scales:{xAxes:[{type:\&#34;category\&#34;,id:\&#34;x-axis-0\&#34;}],yAxes:[{type:\&#34;linear\&#34;,id:\&#34;y-axis-0\&#34;}]}}),e.exports=function(t){function e(t,e){return r.valueOrDefault(t.showLine,e.showLines)}t.controllers.line=t.DatasetController.extend({datasetElementType:a.Line,dataElementType:a.Point,update:function(t){var i,n,a,o=this,s=o.getMeta(),l=s.dataset,u=s.data||[],d=o.chart.options,h=d.elements.line,c=o.getScaleForId(s.yAxisID),f=o.getDataset(),g=e(f,d);for(g&amp;&amp;(a=l.custom||{},void 0!==f.tension&amp;&amp;void 0===f.lineTension&amp;&amp;(f.lineTension=f.tension),l._scale=c,l._datasetIndex=o.index,l._children=u,l._model={spanGaps:f.spanGaps?f.spanGaps:d.spanGaps,tension:a.tension?a.tension:r.valueOrDefault(f.lineTension,h.tension),backgroundColor:a.backgroundColor?a.backgroundColor:f.backgroundColor||h.backgroundColor,borderWidth:a.borderWidth?a.borderWidth:f.borderWidth||h.borderWidth,borderColor:a.borderColor?a.borderColor:f.borderColor||h.borderColor,borderCapStyle:a.borderCapStyle?a.borderCapStyle:f.borderCapStyle||h.borderCapStyle,borderDash:a.borderDash?a.borderDash:f.borderDash||h.borderDash,borderDashOffset:a.borderDashOffset?a.borderDashOffset:f.borderDashOffset||h.borderDashOffset,borderJoinStyle:a.borderJoinStyle?a.borderJoinStyle:f.borderJoinStyle||h.borderJoinStyle,fill:a.fill?a.fill:void 0!==f.fill?f.fill:h.fill,steppedLine:a.steppedLine?a.steppedLine:r.valueOrDefault(f.steppedLine,h.stepped),cubicInterpolationMode:a.cubicInterpolationMode?a.cubicInterpolationMode:r.valueOrDefault(f.cubicInterpolationMode,h.cubicInterpolationMode)},l.pivot()),i=0,n=u.length;i&lt;n;++i)o.updateElement(u[i],i,t);for(g&amp;&amp;0!==l._model.tension&amp;&amp;o.updateBezierControlPoints(),i=0,n=u.length;i&lt;n;++i)u[i].pivot()},getPointBackgroundColor:function(t,e){var i=this.chart.options.elements.point.backgroundColor,n=this.getDataset(),a=t.custom||{};return a.backgroundColor?i=a.backgroundColor:n.pointBackgroundColor?i=r.valueAtIndexOrDefault(n.pointBackgroundColor,e,i):n.backgroundColor&amp;&amp;(i=n.backgroundColor),i},getPointBorderColor:function(t,e){var i=this.chart.options.elements.point.borderColor,n=this.getDataset(),a=t.custom||{};return a.borderColor?i=a.borderColor:n.pointBorderColor?i=r.valueAtIndexOrDefault(n.pointBorderColor,e,i):n.borderColor&amp;&amp;(i=n.borderColor),i},getPointBorderWidth:function(t,e){var i=this.chart.options.elements.point.borderWidth,n=this.getDataset(),a=t.custom||{};return isNaN(a.borderWidth)?!isNaN(n.pointBorderWidth)||r.isArray(n.pointBorderWidth)?i=r.valueAtIndexOrDefault(n.pointBorderWidth,e,i):isNaN(n.borderWidth)||(i=n.borderWidth):i=a.borderWidth,i},updateElement:function(t,e,i){var n,a,o=this,s=o.getMeta(),l=t.custom||{},u=o.getDataset(),d=o.index,h=u.data[e],c=o.getScaleForId(s.yAxisID),f=o.getScaleForId(s.xAxisID),g=o.chart.options.elements.point;void 0!==u.radius&amp;&amp;void 0===u.pointRadius&amp;&amp;(u.pointRadius=u.radius),void 0!==u.hitRadius&amp;&amp;void 0===u.pointHitRadius&amp;&amp;(u.pointHitRadius=u.hitRadius),n=f.getPixelForValue(\&#34;object\&#34;==typeof h?h:NaN,e,d),a=i?c.getBasePixel():o.calculatePointY(h,e,d),t._xScale=f,t._yScale=c,t._datasetIndex=d,t._index=e,t._model={x:n,y:a,skip:l.skip||isNaN(n)||isNaN(a),radius:l.radius||r.valueAtIndexOrDefault(u.pointRadius,e,g.radius),pointStyle:l.pointStyle||r.valueAtIndexOrDefault(u.pointStyle,e,g.pointStyle),backgroundColor:o.getPointBackgroundColor(t,e),borderColor:o.getPointBorderColor(t,e),borderWidth:o.getPointBorderWidth(t,e),tension:s.dataset._model?s.dataset._model.tension:0,steppedLine:!!s.dataset._model&amp;&amp;s.dataset._model.steppedLine,hitRadius:l.hitRadius||r.valueAtIndexOrDefault(u.pointHitRadius,e,g.hitRadius)}},calculatePointY:function(t,e,i){var n,a,r,o=this.chart,s=this.getMeta(),l=this.getScaleForId(s.yAxisID),u=0,d=0;if(l.options.stacked){for(n=0;n&lt;i;n++)if(a=o.data.datasets[n],\&#34;line\&#34;===(r=o.getDatasetMeta(n)).type&amp;&amp;r.yAxisID===l.id&amp;&amp;o.isDatasetVisible(n)){var h=Number(l.getRightValue(a.data[e]));h&lt;0?d+=h||0:u+=h||0}var c=Number(l.getRightValue(t));return c&lt;0?l.getPixelForValue(d+c):l.getPixelForValue(u+c)}return l.getPixelForValue(t)},updateBezierControlPoints:function(){var t,e,i,n,a=this.getMeta(),o=this.chart.chartArea,s=a.data||[];function l(t,e,i){return Math.max(Math.min(t,i),e)}if(a.dataset._model.spanGaps&amp;&amp;(s=s.filter(function(t){return!t._model.skip})),\&#34;monotone\&#34;===a.dataset._model.cubicInterpolationMode)r.splineCurveMonotone(s);else for(t=0,e=s.length;t&lt;e;++t)i=s[t]._model,n=r.splineCurve(r.previousItem(s,t)._model,i,r.nextItem(s,t)._model,a.dataset._model.tension),i.controlPointPreviousX=n.previous.x,i.controlPointPreviousY=n.previous.y,i.controlPointNextX=n.next.x,i.controlPointNextY=n.next.y;if(this.chart.options.elements.line.capBezierPoints)for(t=0,e=s.length;t&lt;e;++t)(i=s[t]._model).controlPointPreviousX=l(i.controlPointPreviousX,o.left,o.right),i.controlPointPreviousY=l(i.controlPointPreviousY,o.top,o.bottom),i.controlPointNextX=l(i.controlPointNextX,o.left,o.right),i.controlPointNextY=l(i.controlPointNextY,o.top,o.bottom)},draw:function(){var t=this.chart,i=this.getMeta(),n=i.data||[],a=t.chartArea,o=n.length,s=0;for(r.canvas.clipArea(t.ctx,a),e(this.getDataset(),t.options)&amp;&amp;i.dataset.draw(),r.canvas.unclipArea(t.ctx);s&lt;o;++s)n[s].draw(a)},setHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],i=t._index,n=t.custom||{},a=t._model;a.radius=n.hoverRadius||r.valueAtIndexOrDefault(e.pointHoverRadius,i,this.chart.options.elements.point.hoverRadius),a.backgroundColor=n.hoverBackgroundColor||r.valueAtIndexOrDefault(e.pointHoverBackgroundColor,i,r.getHoverColor(a.backgroundColor)),a.borderColor=n.hoverBorderColor||r.valueAtIndexOrDefault(e.pointHoverBorderColor,i,r.getHoverColor(a.borderColor)),a.borderWidth=n.hoverBorderWidth||r.valueAtIndexOrDefault(e.pointHoverBorderWidth,i,a.borderWidth)},removeHoverStyle:function(t){var e=this,i=e.chart.data.datasets[t._datasetIndex],n=t._index,a=t.custom||{},o=t._model;void 0!==i.radius&amp;&amp;void 0===i.pointRadius&amp;&amp;(i.pointRadius=i.radius),o.radius=a.radius||r.valueAtIndexOrDefault(i.pointRadius,n,e.chart.options.elements.point.radius),o.backgroundColor=e.getPointBackgroundColor(t,n),o.borderColor=e.getPointBorderColor(t,n),o.borderWidth=e.getPointBorderWidth(t,n)}})}},{25:25,40:40,45:45}],19:[function(t,e,i){\&#34;use strict\&#34;;var n=t(25),a=t(40),r=t(45);n._set(\&#34;polarArea\&#34;,{scale:{type:\&#34;radialLinear\&#34;,angleLines:{display:!1},gridLines:{circular:!0},pointLabels:{display:!1},ticks:{beginAtZero:!0}},animation:{animateRotate:!0,animateScale:!0},startAngle:-.5*Math.PI,legendCallback:function(t){var e=[];e.push(&#39;&lt;ul class=\&#34;&#39;+t.id+&#39;-legend\&#34;&gt;&#39;);var i=t.data,n=i.datasets,a=i.labels;if(n.length)for(var r=0;r&lt;n[0].data.length;++r)e.push(&#39;&lt;li&gt;&lt;span style=\&#34;background-color:&#39;+n[0].backgroundColor[r]+&#39;\&#34;&gt;&lt;/span&gt;&#39;),a[r]&amp;&amp;e.push(a[r]),e.push(\&#34;&lt;/li&gt;\&#34;);return e.push(\&#34;&lt;/ul&gt;\&#34;),e.join(\&#34;\&#34;)},legend:{labels:{generateLabels:function(t){var e=t.data;return e.labels.length&amp;&amp;e.datasets.length?e.labels.map(function(i,n){var a=t.getDatasetMeta(0),o=e.datasets[0],s=a.data[n].custom||{},l=r.valueAtIndexOrDefault,u=t.options.elements.arc;return{text:i,fillStyle:s.backgroundColor?s.backgroundColor:l(o.backgroundColor,n,u.backgroundColor),strokeStyle:s.borderColor?s.borderColor:l(o.borderColor,n,u.borderColor),lineWidth:s.borderWidth?s.borderWidth:l(o.borderWidth,n,u.borderWidth),hidden:isNaN(o.data[n])||a.data[n].hidden,index:n}}):[]}},onClick:function(t,e){var i,n,a,r=e.index,o=this.chart;for(i=0,n=(o.data.datasets||[]).length;i&lt;n;++i)(a=o.getDatasetMeta(i)).data[r].hidden=!a.data[r].hidden;o.update()}},tooltips:{callbacks:{title:function(){return\&#34;\&#34;},label:function(t,e){return e.labels[t.index]+\&#34;: \&#34;+t.yLabel}}}}),e.exports=function(t){t.controllers.polarArea=t.DatasetController.extend({dataElementType:a.Arc,linkScales:r.noop,update:function(t){var e=this,i=e.chart,n=i.chartArea,a=e.getMeta(),o=i.options,s=o.elements.arc,l=Math.min(n.right-n.left,n.bottom-n.top);i.outerRadius=Math.max((l-s.borderWidth/2)/2,0),i.innerRadius=Math.max(o.cutoutPercentage?i.outerRadius/100*o.cutoutPercentage:1,0),i.radiusLength=(i.outerRadius-i.innerRadius)/i.getVisibleDatasetCount(),e.outerRadius=i.outerRadius-i.radiusLength*e.index,e.innerRadius=e.outerRadius-i.radiusLength,a.count=e.countVisibleElements(),r.each(a.data,function(i,n){e.updateElement(i,n,t)})},updateElement:function(t,e,i){for(var n=this,a=n.chart,o=n.getDataset(),s=a.options,l=s.animation,u=a.scale,d=a.data.labels,h=n.calculateCircumference(o.data[e]),c=u.xCenter,f=u.yCenter,g=0,m=n.getMeta(),p=0;p&lt;e;++p)isNaN(o.data[p])||m.data[p].hidden||++g;var v=s.startAngle,y=t.hidden?0:u.getDistanceFromCenterForValue(o.data[e]),b=v+h*g,x=b+(t.hidden?0:h),_=l.animateScale?0:u.getDistanceFromCenterForValue(o.data[e]);r.extend(t,{_datasetIndex:n.index,_index:e,_scale:u,_model:{x:c,y:f,innerRadius:0,outerRadius:i?_:y,startAngle:i&amp;&amp;l.animateRotate?v:b,endAngle:i&amp;&amp;l.animateRotate?v:x,label:r.valueAtIndexOrDefault(d,e,d[e])}}),n.removeHoverStyle(t),t.pivot()},removeHoverStyle:function(e){t.DatasetController.prototype.removeHoverStyle.call(this,e,this.chart.options.elements.arc)},countVisibleElements:function(){var t=this.getDataset(),e=this.getMeta(),i=0;return r.each(e.data,function(e,n){isNaN(t.data[n])||e.hidden||i++}),i},calculateCircumference:function(t){var e=this.getMeta().count;return e&gt;0&amp;&amp;!isNaN(t)?2*Math.PI/e:0}})}},{25:25,40:40,45:45}],20:[function(t,e,i){\&#34;use strict\&#34;;var n=t(25),a=t(40),r=t(45);n._set(\&#34;radar\&#34;,{scale:{type:\&#34;radialLinear\&#34;},elements:{line:{tension:0}}}),e.exports=function(t){t.controllers.radar=t.DatasetController.extend({datasetElementType:a.Line,dataElementType:a.Point,linkScales:r.noop,update:function(t){var e=this,i=e.getMeta(),n=i.dataset,a=i.data,o=n.custom||{},s=e.getDataset(),l=e.chart.options.elements.line,u=e.chart.scale;void 0!==s.tension&amp;&amp;void 0===s.lineTension&amp;&amp;(s.lineTension=s.tension),r.extend(i.dataset,{_datasetIndex:e.index,_scale:u,_children:a,_loop:!0,_model:{tension:o.tension?o.tension:r.valueOrDefault(s.lineTension,l.tension),backgroundColor:o.backgroundColor?o.backgroundColor:s.backgroundColor||l.backgroundColor,borderWidth:o.borderWidth?o.borderWidth:s.borderWidth||l.borderWidth,borderColor:o.borderColor?o.borderColor:s.borderColor||l.borderColor,fill:o.fill?o.fill:void 0!==s.fill?s.fill:l.fill,borderCapStyle:o.borderCapStyle?o.borderCapStyle:s.borderCapStyle||l.borderCapStyle,borderDash:o.borderDash?o.borderDash:s.borderDash||l.borderDash,borderDashOffset:o.borderDashOffset?o.borderDashOffset:s.borderDashOffset||l.borderDashOffset,borderJoinStyle:o.borderJoinStyle?o.borderJoinStyle:s.borderJoinStyle||l.borderJoinStyle}}),i.dataset.pivot(),r.each(a,function(i,n){e.updateElement(i,n,t)},e),e.updateBezierControlPoints()},updateElement:function(t,e,i){var n=this,a=t.custom||{},o=n.getDataset(),s=n.chart.scale,l=n.chart.options.elements.point,u=s.getPointPositionForValue(e,o.data[e]);void 0!==o.radius&amp;&amp;void 0===o.pointRadius&amp;&amp;(o.pointRadius=o.radius),void 0!==o.hitRadius&amp;&amp;void 0===o.pointHitRadius&amp;&amp;(o.pointHitRadius=o.hitRadius),r.extend(t,{_datasetIndex:n.index,_index:e,_scale:s,_model:{x:i?s.xCenter:u.x,y:i?s.yCenter:u.y,tension:a.tension?a.tension:r.valueOrDefault(o.lineTension,n.chart.options.elements.line.tension),radius:a.radius?a.radius:r.valueAtIndexOrDefault(o.pointRadius,e,l.radius),backgroundColor:a.backgroundColor?a.backgroundColor:r.valueAtIndexOrDefault(o.pointBackgroundColor,e,l.backgroundColor),borderColor:a.borderColor?a.borderColor:r.valueAtIndexOrDefault(o.pointBorderColor,e,l.borderColor),borderWidth:a.borderWidth?a.borderWidth:r.valueAtIndexOrDefault(o.pointBorderWidth,e,l.borderWidth),pointStyle:a.pointStyle?a.pointStyle:r.valueAtIndexOrDefault(o.pointStyle,e,l.pointStyle),hitRadius:a.hitRadius?a.hitRadius:r.valueAtIndexOrDefault(o.pointHitRadius,e,l.hitRadius)}}),t._model.skip=a.skip?a.skip:isNaN(t._model.x)||isNaN(t._model.y)},updateBezierControlPoints:function(){var t=this.chart.chartArea,e=this.getMeta();r.each(e.data,function(i,n){var a=i._model,o=r.splineCurve(r.previousItem(e.data,n,!0)._model,a,r.nextItem(e.data,n,!0)._model,a.tension);a.controlPointPreviousX=Math.max(Math.min(o.previous.x,t.right),t.left),a.controlPointPreviousY=Math.max(Math.min(o.previous.y,t.bottom),t.top),a.controlPointNextX=Math.max(Math.min(o.next.x,t.right),t.left),a.controlPointNextY=Math.max(Math.min(o.next.y,t.bottom),t.top),i.pivot()})},setHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],i=t.custom||{},n=t._index,a=t._model;a.radius=i.hoverRadius?i.hoverRadius:r.valueAtIndexOrDefault(e.pointHoverRadius,n,this.chart.options.elements.point.hoverRadius),a.backgroundColor=i.hoverBackgroundColor?i.hoverBackgroundColor:r.valueAtIndexOrDefault(e.pointHoverBackgroundColor,n,r.getHoverColor(a.backgroundColor)),a.borderColor=i.hoverBorderColor?i.hoverBorderColor:r.valueAtIndexOrDefault(e.pointHoverBorderColor,n,r.getHoverColor(a.borderColor)),a.borderWidth=i.hoverBorderWidth?i.hoverBorderWidth:r.valueAtIndexOrDefault(e.pointHoverBorderWidth,n,a.borderWidth)},removeHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],i=t.custom||{},n=t._index,a=t._model,o=this.chart.options.elements.point;a.radius=i.radius?i.radius:r.valueAtIndexOrDefault(e.pointRadius,n,o.radius),a.backgroundColor=i.backgroundColor?i.backgroundColor:r.valueAtIndexOrDefault(e.pointBackgroundColor,n,o.backgroundColor),a.borderColor=i.borderColor?i.borderColor:r.valueAtIndexOrDefault(e.pointBorderColor,n,o.borderColor),a.borderWidth=i.borderWidth?i.borderWidth:r.valueAtIndexOrDefault(e.pointBorderWidth,n,o.borderWidth)}})}},{25:25,40:40,45:45}],21:[function(t,e,i){\&#34;use strict\&#34;;t(25)._set(\&#34;scatter\&#34;,{hover:{mode:\&#34;single\&#34;},scales:{xAxes:[{id:\&#34;x-axis-1\&#34;,type:\&#34;linear\&#34;,position:\&#34;bottom\&#34;}],yAxes:[{id:\&#34;y-axis-1\&#34;,type:\&#34;linear\&#34;,position:\&#34;left\&#34;}]},showLines:!1,tooltips:{callbacks:{title:function(){return\&#34;\&#34;},label:function(t){return\&#34;(\&#34;+t.xLabel+\&#34;, \&#34;+t.yLabel+\&#34;)\&#34;}}}}),e.exports=function(t){t.controllers.scatter=t.controllers.line}},{25:25}],22:[function(t,e,i){\&#34;use strict\&#34;;var n=t(25),a=t(26),r=t(45);n._set(\&#34;global\&#34;,{animation:{duration:1e3,easing:\&#34;easeOutQuart\&#34;,onProgress:r.noop,onComplete:r.noop}}),e.exports=function(t){t.Animation=a.extend({chart:null,currentStep:0,numSteps:60,easing:\&#34;\&#34;,render:null,onAnimationProgress:null,onAnimationComplete:null}),t.animationService={frameDuration:17,animations:[],dropFrames:0,request:null,addAnimation:function(t,e,i,n){var a,r,o=this.animations;for(e.chart=t,n||(t.animating=!0),a=0,r=o.length;a&lt;r;++a)if(o[a].chart===t)return void(o[a]=e);o.push(e),1===o.length&amp;&amp;this.requestAnimationFrame()},cancelAnimation:function(t){var e=r.findIndex(this.animations,function(e){return e.chart===t});-1!==e&amp;&amp;(this.animations.splice(e,1),t.animating=!1)},requestAnimationFrame:function(){var t=this;null===t.request&amp;&amp;(t.request=r.requestAnimFrame.call(window,function(){t.request=null,t.startDigest()}))},startDigest:function(){var t=this,e=Date.now(),i=0;t.dropFrames&gt;1&amp;&amp;(i=Math.floor(t.dropFrames),t.dropFrames=t.dropFrames%1),t.advance(1+i);var n=Date.now();t.dropFrames+=(n-e)/t.frameDuration,t.animations.length&gt;0&amp;&amp;t.requestAnimationFrame()},advance:function(t){for(var e,i,n=this.animations,a=0;a&lt;n.length;)i=(e=n[a]).chart,e.currentStep=(e.currentStep||0)+t,e.currentStep=Math.min(e.currentStep,e.numSteps),r.callback(e.render,[i,e],i),r.callback(e.onAnimationProgress,[e],i),e.currentStep&gt;=e.numSteps?(r.callback(e.onAnimationComplete,[e],i),i.animating=!1,n.splice(a,1)):++a}},Object.defineProperty(t.Animation.prototype,\&#34;animationObject\&#34;,{get:function(){return this}}),Object.defineProperty(t.Animation.prototype,\&#34;chartInstance\&#34;,{get:function(){return this.chart},set:function(t){this.chart=t}})}},{25:25,26:26,45:45}],23:[function(t,e,i){\&#34;use strict\&#34;;var n=t(25),a=t(45),r=t(28),o=t(30),s=t(48),l=t(31);e.exports=function(t){function e(t){return\&#34;top\&#34;===t||\&#34;bottom\&#34;===t}t.types={},t.instances={},t.controllers={},a.extend(t.prototype,{construct:function(e,i){var r,o,l=this;(o=(r=(r=i)||{}).data=r.data||{}).datasets=o.datasets||[],o.labels=o.labels||[],r.options=a.configMerge(n.global,n[r.type],r.options||{}),i=r;var u=s.acquireContext(e,i),d=u&amp;&amp;u.canvas,h=d&amp;&amp;d.height,c=d&amp;&amp;d.width;l.id=a.uid(),l.ctx=u,l.canvas=d,l.config=i,l.width=c,l.height=h,l.aspectRatio=h?c/h:null,l.options=i.options,l._bufferedRender=!1,l.chart=l,l.controller=l,t.instances[l.id]=l,Object.defineProperty(l,\&#34;data\&#34;,{get:function(){return l.config.data},set:function(t){l.config.data=t}}),u&amp;&amp;d?(l.initialize(),l.update()):console.error(\&#34;Failed to create chart: can&#39;t acquire context from the given item\&#34;)},initialize:function(){var t=this;return l.notify(t,\&#34;beforeInit\&#34;),a.retinaScale(t,t.options.devicePixelRatio),t.bindEvents(),t.options.responsive&amp;&amp;t.resize(!0),t.ensureScalesHaveIDs(),t.buildOrUpdateScales(),t.initToolTip(),l.notify(t,\&#34;afterInit\&#34;),t},clear:function(){return a.canvas.clear(this),this},stop:function(){return t.animationService.cancelAnimation(this),this},resize:function(t){var e=this,i=e.options,n=e.canvas,r=i.maintainAspectRatio&amp;&amp;e.aspectRatio||null,o=Math.max(0,Math.floor(a.getMaximumWidth(n))),s=Math.max(0,Math.floor(r?o/r:a.getMaximumHeight(n)));if((e.width!==o||e.height!==s)&amp;&amp;(n.width=e.width=o,n.height=e.height=s,n.style.width=o+\&#34;px\&#34;,n.style.height=s+\&#34;px\&#34;,a.retinaScale(e,i.devicePixelRatio),!t)){var u={width:o,height:s};l.notify(e,\&#34;resize\&#34;,[u]),e.options.onResize&amp;&amp;e.options.onResize(e,u),e.stop(),e.update(e.options.responsiveAnimationDuration)}},ensureScalesHaveIDs:function(){var t=this.options,e=t.scales||{},i=t.scale;a.each(e.xAxes,function(t,e){t.id=t.id||\&#34;x-axis-\&#34;+e}),a.each(e.yAxes,function(t,e){t.id=t.id||\&#34;y-axis-\&#34;+e}),i&amp;&amp;(i.id=i.id||\&#34;scale\&#34;)},buildOrUpdateScales:function(){var i=this,n=i.options,r=i.scales||{},o=[],s=Object.keys(r).reduce(function(t,e){return t[e]=!1,t},{});n.scales&amp;&amp;(o=o.concat((n.scales.xAxes||[]).map(function(t){return{options:t,dtype:\&#34;category\&#34;,dposition:\&#34;bottom\&#34;}}),(n.scales.yAxes||[]).map(function(t){return{options:t,dtype:\&#34;linear\&#34;,dposition:\&#34;left\&#34;}}))),n.scale&amp;&amp;o.push({options:n.scale,dtype:\&#34;radialLinear\&#34;,isDefault:!0,dposition:\&#34;chartArea\&#34;}),a.each(o,function(n){var o=n.options,l=o.id,u=a.valueOrDefault(o.type,n.dtype);e(o.position)!==e(n.dposition)&amp;&amp;(o.position=n.dposition),s[l]=!0;var d=null;if(l in r&amp;&amp;r[l].type===u)(d=r[l]).options=o,d.ctx=i.ctx,d.chart=i;else{var h=t.scaleService.getScaleConstructor(u);if(!h)return;d=new h({id:l,type:u,options:o,ctx:i.ctx,chart:i}),r[d.id]=d}d.mergeTicksOptions(),n.isDefault&amp;&amp;(i.scale=d)}),a.each(s,function(t,e){t||delete r[e]}),i.scales=r,t.scaleService.addScalesToLayout(this)},buildOrUpdateControllers:function(){var e=this,i=[],n=[];return a.each(e.data.datasets,function(a,r){var o=e.getDatasetMeta(r),s=a.type||e.config.type;if(o.type&amp;&amp;o.type!==s&amp;&amp;(e.destroyDatasetMeta(r),o=e.getDatasetMeta(r)),o.type=s,i.push(o.type),o.controller)o.controller.updateIndex(r),o.controller.linkScales();else{var l=t.controllers[o.type];if(void 0===l)throw new Error(&#39;\&#34;&#39;+o.type+&#39;\&#34; is not a chart type.&#39;);o.controller=new l(e,r),n.push(o.controller)}},e),n},resetElements:function(){var t=this;a.each(t.data.datasets,function(e,i){t.getDatasetMeta(i).controller.reset()},t)},reset:function(){this.resetElements(),this.tooltip.initialize()},update:function(e){var i,n,r=this;if(e&amp;&amp;\&#34;object\&#34;==typeof e||(e={duration:e,lazy:arguments[1]}),n=(i=r).options,a.each(i.scales,function(t){o.removeBox(i,t)}),n=a.configMerge(t.defaults.global,t.defaults[i.config.type],n),i.options=i.config.options=n,i.ensureScalesHaveIDs(),i.buildOrUpdateScales(),i.tooltip._options=n.tooltips,i.tooltip.initialize(),l._invalidate(r),!1!==l.notify(r,\&#34;beforeUpdate\&#34;)){r.tooltip._data=r.data;var s=r.buildOrUpdateControllers();a.each(r.data.datasets,function(t,e){r.getDatasetMeta(e).controller.buildOrUpdateElements()},r),r.updateLayout(),r.options.animation&amp;&amp;r.options.animation.duration&amp;&amp;a.each(s,function(t){t.reset()}),r.updateDatasets(),r.tooltip.initialize(),r.lastActive=[],l.notify(r,\&#34;afterUpdate\&#34;),r._bufferedRender?r._bufferedRequest={duration:e.duration,easing:e.easing,lazy:e.lazy}:r.render(e)}},updateLayout:function(){!1!==l.notify(this,\&#34;beforeLayout\&#34;)&amp;&amp;(o.update(this,this.width,this.height),l.notify(this,\&#34;afterScaleUpdate\&#34;),l.notify(this,\&#34;afterLayout\&#34;))},updateDatasets:function(){if(!1!==l.notify(this,\&#34;beforeDatasetsUpdate\&#34;)){for(var t=0,e=this.data.datasets.length;t&lt;e;++t)this.updateDataset(t);l.notify(this,\&#34;afterDatasetsUpdate\&#34;)}},updateDataset:function(t){var e=this.getDatasetMeta(t),i={meta:e,index:t};!1!==l.notify(this,\&#34;beforeDatasetUpdate\&#34;,[i])&amp;&amp;(e.controller.update(),l.notify(this,\&#34;afterDatasetUpdate\&#34;,[i]))},render:function(e){var i=this;e&amp;&amp;\&#34;object\&#34;==typeof e||(e={duration:e,lazy:arguments[1]});var n=e.duration,r=e.lazy;if(!1!==l.notify(i,\&#34;beforeRender\&#34;)){var o=i.options.animation,s=function(t){l.notify(i,\&#34;afterRender\&#34;),a.callback(o&amp;&amp;o.onComplete,[t],i)};if(o&amp;&amp;(void 0!==n&amp;&amp;0!==n||void 0===n&amp;&amp;0!==o.duration)){var u=new t.Animation({numSteps:(n||o.duration)/16.66,easing:e.easing||o.easing,render:function(t,e){var i=a.easing.effects[e.easing],n=e.currentStep,r=n/e.numSteps;t.draw(i(r),r,n)},onAnimationProgress:o.onProgress,onAnimationComplete:s});t.animationService.addAnimation(i,u,n,r)}else i.draw(),s(new t.Animation({numSteps:0,chart:i}));return i}},draw:function(t){var e=this;e.clear(),a.isNullOrUndef(t)&amp;&amp;(t=1),e.transition(t),!1!==l.notify(e,\&#34;beforeDraw\&#34;,[t])&amp;&amp;(a.each(e.boxes,function(t){t.draw(e.chartArea)},e),e.scale&amp;&amp;e.scale.draw(),e.drawDatasets(t),e._drawTooltip(t),l.notify(e,\&#34;afterDraw\&#34;,[t]))},transition:function(t){for(var e=0,i=(this.data.datasets||[]).length;e&lt;i;++e)this.isDatasetVisible(e)&amp;&amp;this.getDatasetMeta(e).controller.transition(t);this.tooltip.transition(t)},drawDatasets:function(t){var e=this;if(!1!==l.notify(e,\&#34;beforeDatasetsDraw\&#34;,[t])){for(var i=(e.data.datasets||[]).length-1;i&gt;=0;--i)e.isDatasetVisible(i)&amp;&amp;e.drawDataset(i,t);l.notify(e,\&#34;afterDatasetsDraw\&#34;,[t])}},drawDataset:function(t,e){var i=this.getDatasetMeta(t),n={meta:i,index:t,easingValue:e};!1!==l.notify(this,\&#34;beforeDatasetDraw\&#34;,[n])&amp;&amp;(i.controller.draw(e),l.notify(this,\&#34;afterDatasetDraw\&#34;,[n]))},_drawTooltip:function(t){var e=this.tooltip,i={tooltip:e,easingValue:t};!1!==l.notify(this,\&#34;beforeTooltipDraw\&#34;,[i])&amp;&amp;(e.draw(),l.notify(this,\&#34;afterTooltipDraw\&#34;,[i]))},getElementAtEvent:function(t){return r.modes.single(this,t)},getElementsAtEvent:function(t){return r.modes.label(this,t,{intersect:!0})},getElementsAtXAxis:function(t){return r.modes[\&#34;x-axis\&#34;](this,t,{intersect:!0})},getElementsAtEventForMode:function(t,e,i){var n=r.modes[e];return\&#34;function\&#34;==typeof n?n(this,t,i):[]},getDatasetAtEvent:function(t){return r.modes.dataset(this,t,{intersect:!0})},getDatasetMeta:function(t){var e=this.data.datasets[t];e._meta||(e._meta={});var i=e._meta[this.id];return i||(i=e._meta[this.id]={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null}),i},getVisibleDatasetCount:function(){for(var t=0,e=0,i=this.data.datasets.length;e&lt;i;++e)this.isDatasetVisible(e)&amp;&amp;t++;return t},isDatasetVisible:function(t){var e=this.getDatasetMeta(t);return\&#34;boolean\&#34;==typeof e.hidden?!e.hidden:!this.data.datasets[t].hidden},generateLegend:function(){return this.options.legendCallback(this)},destroyDatasetMeta:function(t){var e=this.id,i=this.data.datasets[t],n=i._meta&amp;&amp;i._meta[e];n&amp;&amp;(n.controller.destroy(),delete i._meta[e])},destroy:function(){var e,i,n=this,r=n.canvas;for(n.stop(),e=0,i=n.data.datasets.length;e&lt;i;++e)n.destroyDatasetMeta(e);r&amp;&amp;(n.unbindEvents(),a.canvas.clear(n),s.releaseContext(n.ctx),n.canvas=null,n.ctx=null),l.notify(n,\&#34;destroy\&#34;),delete t.instances[n.id]},toBase64Image:function(){return this.canvas.toDataURL.apply(this.canvas,arguments)},initToolTip:function(){var e=this;e.tooltip=new t.Tooltip({_chart:e,_chartInstance:e,_data:e.data,_options:e.options.tooltips},e)},bindEvents:function(){var t=this,e=t._listeners={},i=function(){t.eventHandler.apply(t,arguments)};a.each(t.options.events,function(n){s.addEventListener(t,n,i),e[n]=i}),t.options.responsive&amp;&amp;(i=function(){t.resize()},s.addEventListener(t,\&#34;resize\&#34;,i),e.resize=i)},unbindEvents:function(){var t=this,e=t._listeners;e&amp;&amp;(delete t._listeners,a.each(e,function(e,i){s.removeEventListener(t,i,e)}))},updateHoverStyle:function(t,e,i){var n,a,r,o=i?\&#34;setHoverStyle\&#34;:\&#34;removeHoverStyle\&#34;;for(a=0,r=t.length;a&lt;r;++a)(n=t[a])&amp;&amp;this.getDatasetMeta(n._datasetIndex).controller[o](n)},eventHandler:function(t){var e=this,i=e.tooltip;if(!1!==l.notify(e,\&#34;beforeEvent\&#34;,[t])){e._bufferedRender=!0,e._bufferedRequest=null;var n=e.handleEvent(t);i&amp;&amp;(n=i._start?i.handleEvent(t):n|i.handleEvent(t)),l.notify(e,\&#34;afterEvent\&#34;,[t]);var a=e._bufferedRequest;return a?e.render(a):n&amp;&amp;!e.animating&amp;&amp;(e.stop(),e.render(e.options.hover.animationDuration,!0)),e._bufferedRender=!1,e._bufferedRequest=null,e}},handleEvent:function(t){var e,i=this,n=i.options||{},r=n.hover;return i.lastActive=i.lastActive||[],\&#34;mouseout\&#34;===t.type?i.active=[]:i.active=i.getElementsAtEventForMode(t,r.mode,r),a.callback(n.onHover||n.hover.onHover,[t.native,i.active],i),\&#34;mouseup\&#34;!==t.type&amp;&amp;\&#34;click\&#34;!==t.type||n.onClick&amp;&amp;n.onClick.call(i,t.native,i.active),i.lastActive.length&amp;&amp;i.updateHoverStyle(i.lastActive,r.mode,!1),i.active.length&amp;&amp;r.mode&amp;&amp;i.updateHoverStyle(i.active,r.mode,!0),e=!a.arrayEquals(i.active,i.lastActive),i.lastActive=i.active,e}}),t.Controller=t}},{25:25,28:28,30:30,31:31,45:45,48:48}],24:[function(t,e,i){\&#34;use strict\&#34;;var n=t(45);e.exports=function(t){var e=[\&#34;push\&#34;,\&#34;pop\&#34;,\&#34;shift\&#34;,\&#34;splice\&#34;,\&#34;unshift\&#34;];function i(t,i){var n=t._chartjs;if(n){var a=n.listeners,r=a.indexOf(i);-1!==r&amp;&amp;a.splice(r,1),a.length&gt;0||(e.forEach(function(e){delete t[e]}),delete t._chartjs)}}t.DatasetController=function(t,e){this.initialize(t,e)},n.extend(t.DatasetController.prototype,{datasetElementType:null,dataElementType:null,initialize:function(t,e){this.chart=t,this.index=e,this.linkScales(),this.addElements()},updateIndex:function(t){this.index=t},linkScales:function(){var t=this,e=t.getMeta(),i=t.getDataset();null!==e.xAxisID&amp;&amp;e.xAxisID in t.chart.scales||(e.xAxisID=i.xAxisID||t.chart.options.scales.xAxes[0].id),null!==e.yAxisID&amp;&amp;e.yAxisID in t.chart.scales||(e.yAxisID=i.yAxisID||t.chart.options.scales.yAxes[0].id)},getDataset:function(){return this.chart.data.datasets[this.index]},getMeta:function(){return this.chart.getDatasetMeta(this.index)},getScaleForId:function(t){return this.chart.scales[t]},reset:function(){this.update(!0)},destroy:function(){this._data&amp;&amp;i(this._data,this)},createMetaDataset:function(){var t=this.datasetElementType;return t&amp;&amp;new t({_chart:this.chart,_datasetIndex:this.index})},createMetaData:function(t){var e=this.dataElementType;return e&amp;&amp;new e({_chart:this.chart,_datasetIndex:this.index,_index:t})},addElements:function(){var t,e,i=this.getMeta(),n=this.getDataset().data||[],a=i.data;for(t=0,e=n.length;t&lt;e;++t)a[t]=a[t]||this.createMetaData(t);i.dataset=i.dataset||this.createMetaDataset()},addElementAndReset:function(t){var e=this.createMetaData(t);this.getMeta().data.splice(t,0,e),this.updateElement(e,t,!0)},buildOrUpdateElements:function(){var t,a,r=this,o=r.getDataset(),s=o.data||(o.data=[]);r._data!==s&amp;&amp;(r._data&amp;&amp;i(r._data,r),a=r,(t=s)._chartjs?t._chartjs.listeners.push(a):(Object.defineProperty(t,\&#34;_chartjs\&#34;,{configurable:!0,enumerable:!1,value:{listeners:[a]}}),e.forEach(function(e){var i=\&#34;onData\&#34;+e.charAt(0).toUpperCase()+e.slice(1),a=t[e];Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value:function(){var e=Array.prototype.slice.call(arguments),r=a.apply(this,e);return n.each(t._chartjs.listeners,function(t){\&#34;function\&#34;==typeof t[i]&amp;&amp;t[i].apply(t,e)}),r}})})),r._data=s),r.resyncElements()},update:n.noop,transition:function(t){for(var e=this.getMeta(),i=e.data||[],n=i.length,a=0;a&lt;n;++a)i[a].transition(t);e.dataset&amp;&amp;e.dataset.transition(t)},draw:function(){var t=this.getMeta(),e=t.data||[],i=e.length,n=0;for(t.dataset&amp;&amp;t.dataset.draw();n&lt;i;++n)e[n].draw()},removeHoverStyle:function(t,e){var i=this.chart.data.datasets[t._datasetIndex],a=t._index,r=t.custom||{},o=n.valueAtIndexOrDefault,s=t._model;s.backgroundColor=r.backgroundColor?r.backgroundColor:o(i.backgroundColor,a,e.backgroundColor),s.borderColor=r.borderColor?r.borderColor:o(i.borderColor,a,e.borderColor),s.borderWidth=r.borderWidth?r.borderWidth:o(i.borderWidth,a,e.borderWidth)},setHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],i=t._index,a=t.custom||{},r=n.valueAtIndexOrDefault,o=n.getHoverColor,s=t._model;s.backgroundColor=a.hoverBackgroundColor?a.hoverBackgroundColor:r(e.hoverBackgroundColor,i,o(s.backgroundColor)),s.borderColor=a.hoverBorderColor?a.hoverBorderColor:r(e.hoverBorderColor,i,o(s.borderColor)),s.borderWidth=a.hoverBorderWidth?a.hoverBorderWidth:r(e.hoverBorderWidth,i,s.borderWidth)},resyncElements:function(){var t=this.getMeta(),e=this.getDataset().data,i=t.data.length,n=e.length;n&lt;i?t.data.splice(n,i-n):n&gt;i&amp;&amp;this.insertElements(i,n-i)},insertElements:function(t,e){for(var i=0;i&lt;e;++i)this.addElementAndReset(t+i)},onDataPush:function(){this.insertElements(this.getDataset().data.length-1,arguments.length)},onDataPop:function(){this.getMeta().data.pop()},onDataShift:function(){this.getMeta().data.shift()},onDataSplice:function(t,e){this.getMeta().data.splice(t,e),this.insertElements(t,arguments.length-2)},onDataUnshift:function(){this.insertElements(0,arguments.length)}}),t.DatasetController.extend=n.inherits}},{45:45}],25:[function(t,e,i){\&#34;use strict\&#34;;var n=t(45);e.exports={_set:function(t,e){return n.merge(this[t]||(this[t]={}),e)}}},{45:45}],26:[function(t,e,i){\&#34;use strict\&#34;;var n=t(2),a=t(45);var r=function(t){a.extend(this,t),this.initialize.apply(this,arguments)};a.extend(r.prototype,{initialize:function(){this.hidden=!1},pivot:function(){var t=this;return t._view||(t._view=a.clone(t._model)),t._start={},t},transition:function(t){var e=this,i=e._model,a=e._start,r=e._view;return i&amp;&amp;1!==t?(r||(r=e._view={}),a||(a=e._start={}),function(t,e,i,a){var r,o,s,l,u,d,h,c,f,g=Object.keys(i);for(r=0,o=g.length;r&lt;o;++r)if(d=i[s=g[r]],e.hasOwnProperty(s)||(e[s]=d),(l=e[s])!==d&amp;&amp;\&#34;_\&#34;!==s[0]){if(t.hasOwnProperty(s)||(t[s]=l),(h=typeof d)==typeof(u=t[s]))if(\&#34;string\&#34;===h){if((c=n(u)).valid&amp;&amp;(f=n(d)).valid){e[s]=f.mix(c,a).rgbString();continue}}else if(\&#34;number\&#34;===h&amp;&amp;isFinite(u)&amp;&amp;isFinite(d)){e[s]=u+(d-u)*a;continue}e[s]=d}}(a,r,i,t),e):(e._view=i,e._start=null,e)},tooltipPosition:function(){return{x:this._model.x,y:this._model.y}},hasValue:function(){return a.isNumber(this._model.x)&amp;&amp;a.isNumber(this._model.y)}}),r.extend=a.inherits,e.exports=r},{2:2,45:45}],27:[function(t,e,i){\&#34;use strict\&#34;;var n=t(2),a=t(25),r=t(45);e.exports=function(t){function e(t,e,i){var n;return\&#34;string\&#34;==typeof t?(n=parseInt(t,10),-1!==t.indexOf(\&#34;%\&#34;)&amp;&amp;(n=n/100*e.parentNode[i])):n=t,n}function i(t){return null!=t&amp;&amp;\&#34;none\&#34;!==t}function o(t,n,a){var r=document.defaultView,o=t.parentNode,s=r.getComputedStyle(t)[n],l=r.getComputedStyle(o)[n],u=i(s),d=i(l),h=Number.POSITIVE_INFINITY;return u||d?Math.min(u?e(s,t,a):h,d?e(l,o,a):h):\&#34;none\&#34;}r.configMerge=function(){return r.merge(r.clone(arguments[0]),[].slice.call(arguments,1),{merger:function(e,i,n,a){var o=i[e]||{},s=n[e];\&#34;scales\&#34;===e?i[e]=r.scaleMerge(o,s):\&#34;scale\&#34;===e?i[e]=r.merge(o,[t.scaleService.getScaleDefaults(s.type),s]):r._merger(e,i,n,a)}})},r.scaleMerge=function(){return r.merge(r.clone(arguments[0]),[].slice.call(arguments,1),{merger:function(e,i,n,a){if(\&#34;xAxes\&#34;===e||\&#34;yAxes\&#34;===e){var o,s,l,u=n[e].length;for(i[e]||(i[e]=[]),o=0;o&lt;u;++o)l=n[e][o],s=r.valueOrDefault(l.type,\&#34;xAxes\&#34;===e?\&#34;category\&#34;:\&#34;linear\&#34;),o&gt;=i[e].length&amp;&amp;i[e].push({}),!i[e][o].type||l.type&amp;&amp;l.type!==i[e][o].type?r.merge(i[e][o],[t.scaleService.getScaleDefaults(s),l]):r.merge(i[e][o],l)}else r._merger(e,i,n,a)}})},r.where=function(t,e){if(r.isArray(t)&amp;&amp;Array.prototype.filter)return t.filter(e);var i=[];return r.each(t,function(t){e(t)&amp;&amp;i.push(t)}),i},r.findIndex=Array.prototype.findIndex?function(t,e,i){return t.findIndex(e,i)}:function(t,e,i){i=void 0===i?t:i;for(var n=0,a=t.length;n&lt;a;++n)if(e.call(i,t[n],n,t))return n;return-1},r.findNextWhere=function(t,e,i){r.isNullOrUndef(i)&amp;&amp;(i=-1);for(var n=i+1;n&lt;t.length;n++){var a=t[n];if(e(a))return a}},r.findPreviousWhere=function(t,e,i){r.isNullOrUndef(i)&amp;&amp;(i=t.length);for(var n=i-1;n&gt;=0;n--){var a=t[n];if(e(a))return a}},r.isNumber=function(t){return!isNaN(parseFloat(t))&amp;&amp;isFinite(t)},r.almostEquals=function(t,e,i){return Math.abs(t-e)&lt;i},r.almostWhole=function(t,e){var i=Math.round(t);return i-e&lt;t&amp;&amp;i+e&gt;t},r.max=function(t){return t.reduce(function(t,e){return isNaN(e)?t:Math.max(t,e)},Number.NEGATIVE_INFINITY)},r.min=function(t){return t.reduce(function(t,e){return isNaN(e)?t:Math.min(t,e)},Number.POSITIVE_INFINITY)},r.sign=Math.sign?function(t){return Math.sign(t)}:function(t){return 0===(t=+t)||isNaN(t)?t:t&gt;0?1:-1},r.log10=Math.log10?function(t){return Math.log10(t)}:function(t){var e=Math.log(t)*Math.LOG10E,i=Math.round(e);return t===Math.pow(10,i)?i:e},r.toRadians=function(t){return t*(Math.PI/180)},r.toDegrees=function(t){return t*(180/Math.PI)},r.getAngleFromPoint=function(t,e){var i=e.x-t.x,n=e.y-t.y,a=Math.sqrt(i*i+n*n),r=Math.atan2(n,i);return r&lt;-.5*Math.PI&amp;&amp;(r+=2*Math.PI),{angle:r,distance:a}},r.distanceBetweenPoints=function(t,e){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))},r.aliasPixel=function(t){return t%2==0?0:.5},r.splineCurve=function(t,e,i,n){var a=t.skip?e:t,r=e,o=i.skip?e:i,s=Math.sqrt(Math.pow(r.x-a.x,2)+Math.pow(r.y-a.y,2)),l=Math.sqrt(Math.pow(o.x-r.x,2)+Math.pow(o.y-r.y,2)),u=s/(s+l),d=l/(s+l),h=n*(u=isNaN(u)?0:u),c=n*(d=isNaN(d)?0:d);return{previous:{x:r.x-h*(o.x-a.x),y:r.y-h*(o.y-a.y)},next:{x:r.x+c*(o.x-a.x),y:r.y+c*(o.y-a.y)}}},r.EPSILON=Number.EPSILON||1e-14,r.splineCurveMonotone=function(t){var e,i,n,a,o,s,l,u,d,h=(t||[]).map(function(t){return{model:t._model,deltaK:0,mK:0}}),c=h.length;for(e=0;e&lt;c;++e)if(!(n=h[e]).model.skip){if(i=e&gt;0?h[e-1]:null,(a=e&lt;c-1?h[e+1]:null)&amp;&amp;!a.model.skip){var f=a.model.x-n.model.x;n.deltaK=0!==f?(a.model.y-n.model.y)/f:0}!i||i.model.skip?n.mK=n.deltaK:!a||a.model.skip?n.mK=i.deltaK:this.sign(i.deltaK)!==this.sign(n.deltaK)?n.mK=0:n.mK=(i.deltaK+n.deltaK)/2}for(e=0;e&lt;c-1;++e)n=h[e],a=h[e+1],n.model.skip||a.model.skip||(r.almostEquals(n.deltaK,0,this.EPSILON)?n.mK=a.mK=0:(o=n.mK/n.deltaK,s=a.mK/n.deltaK,(u=Math.pow(o,2)+Math.pow(s,2))&lt;=9||(l=3/Math.sqrt(u),n.mK=o*l*n.deltaK,a.mK=s*l*n.deltaK)));for(e=0;e&lt;c;++e)(n=h[e]).model.skip||(i=e&gt;0?h[e-1]:null,a=e&lt;c-1?h[e+1]:null,i&amp;&amp;!i.model.skip&amp;&amp;(d=(n.model.x-i.model.x)/3,n.model.controlPointPreviousX=n.model.x-d,n.model.controlPointPreviousY=n.model.y-d*n.mK),a&amp;&amp;!a.model.skip&amp;&amp;(d=(a.model.x-n.model.x)/3,n.model.controlPointNextX=n.model.x+d,n.model.controlPointNextY=n.model.y+d*n.mK))},r.nextItem=function(t,e,i){return i?e&gt;=t.length-1?t[0]:t[e+1]:e&gt;=t.length-1?t[t.length-1]:t[e+1]},r.previousItem=function(t,e,i){return i?e&lt;=0?t[t.length-1]:t[e-1]:e&lt;=0?t[0]:t[e-1]},r.niceNum=function(t,e){var i=Math.floor(r.log10(t)),n=t/Math.pow(10,i);return(e?n&lt;1.5?1:n&lt;3?2:n&lt;7?5:10:n&lt;=1?1:n&lt;=2?2:n&lt;=5?5:10)*Math.pow(10,i)},r.requestAnimFrame=\&#34;undefined\&#34;==typeof window?function(t){t()}:window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){return window.setTimeout(t,1e3/60)},r.getRelativePosition=function(t,e){var i,n,a=t.originalEvent||t,o=t.currentTarget||t.srcElement,s=o.getBoundingClientRect(),l=a.touches;l&amp;&amp;l.length&gt;0?(i=l[0].clientX,n=l[0].clientY):(i=a.clientX,n=a.clientY);var u=parseFloat(r.getStyle(o,\&#34;padding-left\&#34;)),d=parseFloat(r.getStyle(o,\&#34;padding-top\&#34;)),h=parseFloat(r.getStyle(o,\&#34;padding-right\&#34;)),c=parseFloat(r.getStyle(o,\&#34;padding-bottom\&#34;)),f=s.right-s.left-u-h,g=s.bottom-s.top-d-c;return{x:i=Math.round((i-s.left-u)/f*o.width/e.currentDevicePixelRatio),y:n=Math.round((n-s.top-d)/g*o.height/e.currentDevicePixelRatio)}},r.getConstraintWidth=function(t){return o(t,\&#34;max-width\&#34;,\&#34;clientWidth\&#34;)},r.getConstraintHeight=function(t){return o(t,\&#34;max-height\&#34;,\&#34;clientHeight\&#34;)},r.getMaximumWidth=function(t){var e=t.parentNode;if(!e)return t.clientWidth;var i=parseInt(r.getStyle(e,\&#34;padding-left\&#34;),10),n=parseInt(r.getStyle(e,\&#34;padding-right\&#34;),10),a=e.clientWidth-i-n,o=r.getConstraintWidth(t);return isNaN(o)?a:Math.min(a,o)},r.getMaximumHeight=function(t){var e=t.parentNode;if(!e)return t.clientHeight;var i=parseInt(r.getStyle(e,\&#34;padding-top\&#34;),10),n=parseInt(r.getStyle(e,\&#34;padding-bottom\&#34;),10),a=e.clientHeight-i-n,o=r.getConstraintHeight(t);return isNaN(o)?a:Math.min(a,o)},r.getStyle=function(t,e){return t.currentStyle?t.currentStyle[e]:document.defaultView.getComputedStyle(t,null).getPropertyValue(e)},r.retinaScale=function(t,e){var i=t.currentDevicePixelRatio=e||window.devicePixelRatio||1;if(1!==i){var n=t.canvas,a=t.height,r=t.width;n.height=a*i,n.width=r*i,t.ctx.scale(i,i),n.style.height||n.style.width||(n.style.height=a+\&#34;px\&#34;,n.style.width=r+\&#34;px\&#34;)}},r.fontString=function(t,e,i){return e+\&#34; \&#34;+t+\&#34;px \&#34;+i},r.longestText=function(t,e,i,n){var a=(n=n||{}).data=n.data||{},o=n.garbageCollect=n.garbageCollect||[];n.font!==e&amp;&amp;(a=n.data={},o=n.garbageCollect=[],n.font=e),t.font=e;var s=0;r.each(i,function(e){null!=e&amp;&amp;!0!==r.isArray(e)?s=r.measureText(t,a,o,s,e):r.isArray(e)&amp;&amp;r.each(e,function(e){null==e||r.isArray(e)||(s=r.measureText(t,a,o,s,e))})});var l=o.length/2;if(l&gt;i.length){for(var u=0;u&lt;l;u++)delete a[o[u]];o.splice(0,l)}return s},r.measureText=function(t,e,i,n,a){var r=e[a];return r||(r=e[a]=t.measureText(a).width,i.push(a)),r&gt;n&amp;&amp;(n=r),n},r.numberOfLabelLines=function(t){var e=1;return r.each(t,function(t){r.isArray(t)&amp;&amp;t.length&gt;e&amp;&amp;(e=t.length)}),e},r.color=n?function(t){return t instanceof CanvasGradient&amp;&amp;(t=a.global.defaultColor),n(t)}:function(t){return console.error(\&#34;Color.js not found!\&#34;),t},r.getHoverColor=function(t){return t instanceof CanvasPattern?t:r.color(t).saturate(.5).darken(.1).rgbString()}}},{2:2,25:25,45:45}],28:[function(t,e,i){\&#34;use strict\&#34;;var n=t(45);function a(t,e){return t.native?{x:t.x,y:t.y}:n.getRelativePosition(t,e)}function r(t,e){var i,n,a,r,o;for(n=0,r=t.data.datasets.length;n&lt;r;++n)if(t.isDatasetVisible(n))for(a=0,o=(i=t.getDatasetMeta(n)).data.length;a&lt;o;++a){var s=i.data[a];s._view.skip||e(s)}}function o(t,e){var i=[];return r(t,function(t){t.inRange(e.x,e.y)&amp;&amp;i.push(t)}),i}function s(t,e,i,n){var a=Number.POSITIVE_INFINITY,o=[];return r(t,function(t){if(!i||t.inRange(e.x,e.y)){var r=t.getCenterPoint(),s=n(e,r);s&lt;a?(o=[t],a=s):s===a&amp;&amp;o.push(t)}}),o}function l(t){var e=-1!==t.indexOf(\&#34;x\&#34;),i=-1!==t.indexOf(\&#34;y\&#34;);return function(t,n){var a=e?Math.abs(t.x-n.x):0,r=i?Math.abs(t.y-n.y):0;return Math.sqrt(Math.pow(a,2)+Math.pow(r,2))}}function u(t,e,i){var n=a(e,t);i.axis=i.axis||\&#34;x\&#34;;var r=l(i.axis),u=i.intersect?o(t,n):s(t,n,!1,r),d=[];return u.length?(t.data.datasets.forEach(function(e,i){if(t.isDatasetVisible(i)){var n=t.getDatasetMeta(i).data[u[0]._index];n&amp;&amp;!n._view.skip&amp;&amp;d.push(n)}}),d):[]}e.exports={modes:{single:function(t,e){var i=a(e,t),n=[];return r(t,function(t){if(t.inRange(i.x,i.y))return n.push(t),n}),n.slice(0,1)},label:u,index:u,dataset:function(t,e,i){var n=a(e,t);i.axis=i.axis||\&#34;xy\&#34;;var r=l(i.axis),u=i.intersect?o(t,n):s(t,n,!1,r);return u.length&gt;0&amp;&amp;(u=t.getDatasetMeta(u[0]._datasetIndex).data),u},\&#34;x-axis\&#34;:function(t,e){return u(t,e,{intersect:!1})},point:function(t,e){return o(t,a(e,t))},nearest:function(t,e,i){var n=a(e,t);i.axis=i.axis||\&#34;xy\&#34;;var r=l(i.axis),o=s(t,n,i.intersect,r);return o.length&gt;1&amp;&amp;o.sort(function(t,e){var i=t.getArea()-e.getArea();return 0===i&amp;&amp;(i=t._datasetIndex-e._datasetIndex),i}),o.slice(0,1)},x:function(t,e,i){var n=a(e,t),o=[],s=!1;return r(t,function(t){t.inXRange(n.x)&amp;&amp;o.push(t),t.inRange(n.x,n.y)&amp;&amp;(s=!0)}),i.intersect&amp;&amp;!s&amp;&amp;(o=[]),o},y:function(t,e,i){var n=a(e,t),o=[],s=!1;return r(t,function(t){t.inYRange(n.y)&amp;&amp;o.push(t),t.inRange(n.x,n.y)&amp;&amp;(s=!0)}),i.intersect&amp;&amp;!s&amp;&amp;(o=[]),o}}}},{45:45}],29:[function(t,e,i){\&#34;use strict\&#34;;t(25)._set(\&#34;global\&#34;,{responsive:!0,responsiveAnimationDuration:0,maintainAspectRatio:!0,events:[\&#34;mousemove\&#34;,\&#34;mouseout\&#34;,\&#34;click\&#34;,\&#34;touchstart\&#34;,\&#34;touchmove\&#34;],hover:{onHover:null,mode:\&#34;nearest\&#34;,intersect:!0,animationDuration:400},onClick:null,defaultColor:\&#34;rgba(0,0,0,0.1)\&#34;,defaultFontColor:\&#34;#666\&#34;,defaultFontFamily:\&#34;&#39;Helvetica Neue&#39;, &#39;Helvetica&#39;, &#39;Arial&#39;, sans-serif\&#34;,defaultFontSize:12,defaultFontStyle:\&#34;normal\&#34;,showLines:!0,elements:{},layout:{padding:{top:0,right:0,bottom:0,left:0}}}),e.exports=function(){var t=function(t,e){return this.construct(t,e),this};return t.Chart=t,t}},{25:25}],30:[function(t,e,i){\&#34;use strict\&#34;;var n=t(45);function a(t,e){return n.where(t,function(t){return t.position===e})}function r(t,e){t.forEach(function(t,e){return t._tmpIndex_=e,t}),t.sort(function(t,i){var n=e?i:t,a=e?t:i;return n.weight===a.weight?n._tmpIndex_-a._tmpIndex_:n.weight-a.weight}),t.forEach(function(t){delete t._tmpIndex_})}e.exports={defaults:{},addBox:function(t,e){t.boxes||(t.boxes=[]),e.fullWidth=e.fullWidth||!1,e.position=e.position||\&#34;top\&#34;,e.weight=e.weight||0,t.boxes.push(e)},removeBox:function(t,e){var i=t.boxes?t.boxes.indexOf(e):-1;-1!==i&amp;&amp;t.boxes.splice(i,1)},configure:function(t,e,i){for(var n,a=[\&#34;fullWidth\&#34;,\&#34;position\&#34;,\&#34;weight\&#34;],r=a.length,o=0;o&lt;r;++o)n=a[o],i.hasOwnProperty(n)&amp;&amp;(e[n]=i[n])},update:function(t,e,i){if(t){var o=t.options.layout||{},s=n.options.toPadding(o.padding),l=s.left,u=s.right,d=s.top,h=s.bottom,c=a(t.boxes,\&#34;left\&#34;),f=a(t.boxes,\&#34;right\&#34;),g=a(t.boxes,\&#34;top\&#34;),m=a(t.boxes,\&#34;bottom\&#34;),p=a(t.boxes,\&#34;chartArea\&#34;);r(c,!0),r(f,!1),r(g,!0),r(m,!1);var v=e-l-u,y=i-d-h,b=y/2,x=(e-v/2)/(c.length+f.length),_=(i-b)/(g.length+m.length),k=v,w=y,M=[];n.each(c.concat(f,g,m),function(t){var e,i=t.isHorizontal();i?(e=t.update(t.fullWidth?v:k,_),w-=e.height):(e=t.update(x,w),k-=e.width),M.push({horizontal:i,minSize:e,box:t})});var S=0,D=0,C=0,P=0;n.each(g.concat(m),function(t){if(t.getPadding){var e=t.getPadding();S=Math.max(S,e.left),D=Math.max(D,e.right)}}),n.each(c.concat(f),function(t){if(t.getPadding){var e=t.getPadding();C=Math.max(C,e.top),P=Math.max(P,e.bottom)}});var T=l,O=u,I=d,A=h;n.each(c.concat(f),z),n.each(c,function(t){T+=t.width}),n.each(f,function(t){O+=t.width}),n.each(g.concat(m),z),n.each(g,function(t){I+=t.height}),n.each(m,function(t){A+=t.height}),n.each(c.concat(f),function(t){var e=n.findNextWhere(M,function(e){return e.box===t}),i={left:0,right:0,top:I,bottom:A};e&amp;&amp;t.update(e.minSize.width,w,i)}),T=l,O=u,I=d,A=h,n.each(c,function(t){T+=t.width}),n.each(f,function(t){O+=t.width}),n.each(g,function(t){I+=t.height}),n.each(m,function(t){A+=t.height});var F=Math.max(S-T,0);T+=F,O+=Math.max(D-O,0);var R=Math.max(C-I,0);I+=R,A+=Math.max(P-A,0);var L=i-I-A,W=e-T-O;W===k&amp;&amp;L===w||(n.each(c,function(t){t.height=L}),n.each(f,function(t){t.height=L}),n.each(g,function(t){t.fullWidth||(t.width=W)}),n.each(m,function(t){t.fullWidth||(t.width=W)}),w=L,k=W);var Y=l+F,N=d+R;n.each(c.concat(g),H),Y+=k,N+=w,n.each(f,H),n.each(m,H),t.chartArea={left:T,top:I,right:T+k,bottom:I+w},n.each(p,function(e){e.left=t.chartArea.left,e.top=t.chartArea.top,e.right=t.chartArea.right,e.bottom=t.chartArea.bottom,e.update(k,w)})}function z(t){var e=n.findNextWhere(M,function(e){return e.box===t});if(e)if(t.isHorizontal()){var i={left:Math.max(T,S),right:Math.max(O,D),top:0,bottom:0};t.update(t.fullWidth?v:k,y/2,i)}else t.update(e.minSize.width,w)}function H(t){t.isHorizontal()?(t.left=t.fullWidth?l:T,t.right=t.fullWidth?e-u:T+k,t.top=N,t.bottom=N+t.height,N=t.bottom):(t.left=Y,t.right=Y+t.width,t.top=I,t.bottom=I+w,Y=t.right)}}}},{45:45}],31:[function(t,e,i){\&#34;use strict\&#34;;var n=t(25),a=t(45);n._set(\&#34;global\&#34;,{plugins:{}}),e.exports={_plugins:[],_cacheId:0,register:function(t){var e=this._plugins;[].concat(t).forEach(function(t){-1===e.indexOf(t)&amp;&amp;e.push(t)}),this._cacheId++},unregister:function(t){var e=this._plugins;[].concat(t).forEach(function(t){var i=e.indexOf(t);-1!==i&amp;&amp;e.splice(i,1)}),this._cacheId++},clear:function(){this._plugins=[],this._cacheId++},count:function(){return this._plugins.length},getAll:function(){return this._plugins},notify:function(t,e,i){var n,a,r,o,s,l=this.descriptors(t),u=l.length;for(n=0;n&lt;u;++n)if(\&#34;function\&#34;==typeof(s=(r=(a=l[n]).plugin)[e])&amp;&amp;((o=[t].concat(i||[])).push(a.options),!1===s.apply(r,o)))return!1;return!0},descriptors:function(t){var e=t.$plugins||(t.$plugins={});if(e.id===this._cacheId)return e.descriptors;var i=[],r=[],o=t&amp;&amp;t.config||{},s=o.options&amp;&amp;o.options.plugins||{};return this._plugins.concat(o.plugins||[]).forEach(function(t){if(-1===i.indexOf(t)){var e=t.id,o=s[e];!1!==o&amp;&amp;(!0===o&amp;&amp;(o=a.clone(n.global.plugins[e])),i.push(t),r.push({plugin:t,options:o||{}}))}}),e.descriptors=r,e.id=this._cacheId,r},_invalidate:function(t){delete t.$plugins}}},{25:25,45:45}],32:[function(t,e,i){\&#34;use strict\&#34;;var n=t(25),a=t(26),r=t(45),o=t(34);function s(t){var e,i,n=[];for(e=0,i=t.length;e&lt;i;++e)n.push(t[e].label);return n}function l(t,e,i){var n=t.getPixelForTick(e);return i&amp;&amp;(n-=0===e?(t.getPixelForTick(1)-n)/2:(n-t.getPixelForTick(e-1))/2),n}n._set(\&#34;scale\&#34;,{display:!0,position:\&#34;left\&#34;,offset:!1,gridLines:{display:!0,color:\&#34;rgba(0, 0, 0, 0.1)\&#34;,lineWidth:1,drawBorder:!0,drawOnChartArea:!0,drawTicks:!0,tickMarkLength:10,zeroLineWidth:1,zeroLineColor:\&#34;rgba(0,0,0,0.25)\&#34;,zeroLineBorderDash:[],zeroLineBorderDashOffset:0,offsetGridLines:!1,borderDash:[],borderDashOffset:0},scaleLabel:{display:!1,labelString:\&#34;\&#34;,lineHeight:1.2,padding:{top:4,bottom:4}},ticks:{beginAtZero:!1,minRotation:0,maxRotation:50,mirror:!1,padding:0,reverse:!1,display:!0,autoSkip:!0,autoSkipPadding:0,labelOffset:0,callback:o.formatters.values,minor:{},major:{}}}),e.exports=function(t){function e(t,e,i){return r.isArray(e)?r.longestText(t,i,e):t.measureText(e).width}function i(t){var e=r.valueOrDefault,i=n.global,a=e(t.fontSize,i.defaultFontSize),o=e(t.fontStyle,i.defaultFontStyle),s=e(t.fontFamily,i.defaultFontFamily);return{size:a,style:o,family:s,font:r.fontString(a,o,s)}}function o(t){return r.options.toLineHeight(r.valueOrDefault(t.lineHeight,1.2),r.valueOrDefault(t.fontSize,n.global.defaultFontSize))}t.Scale=a.extend({getPadding:function(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}},getTicks:function(){return this._ticks},mergeTicksOptions:function(){var t=this.options.ticks;for(var e in!1===t.minor&amp;&amp;(t.minor={display:!1}),!1===t.major&amp;&amp;(t.major={display:!1}),t)\&#34;major\&#34;!==e&amp;&amp;\&#34;minor\&#34;!==e&amp;&amp;(void 0===t.minor[e]&amp;&amp;(t.minor[e]=t[e]),void 0===t.major[e]&amp;&amp;(t.major[e]=t[e]))},beforeUpdate:function(){r.callback(this.options.beforeUpdate,[this])},update:function(t,e,i){var n,a,o,s,l,u,d=this;for(d.beforeUpdate(),d.maxWidth=t,d.maxHeight=e,d.margins=r.extend({left:0,right:0,top:0,bottom:0},i),d.longestTextCache=d.longestTextCache||{},d.beforeSetDimensions(),d.setDimensions(),d.afterSetDimensions(),d.beforeDataLimits(),d.determineDataLimits(),d.afterDataLimits(),d.beforeBuildTicks(),l=d.buildTicks()||[],d.afterBuildTicks(),d.beforeTickToLabelConversion(),o=d.convertTicksToLabels(l)||d.ticks,d.afterTickToLabelConversion(),d.ticks=o,n=0,a=o.length;n&lt;a;++n)s=o[n],(u=l[n])?u.label=s:l.push(u={label:s,major:!1});return d._ticks=l,d.beforeCalculateTickRotation(),d.calculateTickRotation(),d.afterCalculateTickRotation(),d.beforeFit(),d.fit(),d.afterFit(),d.afterUpdate(),d.minSize},afterUpdate:function(){r.callback(this.options.afterUpdate,[this])},beforeSetDimensions:function(){r.callback(this.options.beforeSetDimensions,[this])},setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0},afterSetDimensions:function(){r.callback(this.options.afterSetDimensions,[this])},beforeDataLimits:function(){r.callback(this.options.beforeDataLimits,[this])},determineDataLimits:r.noop,afterDataLimits:function(){r.callback(this.options.afterDataLimits,[this])},beforeBuildTicks:function(){r.callback(this.options.beforeBuildTicks,[this])},buildTicks:r.noop,afterBuildTicks:function(){r.callback(this.options.afterBuildTicks,[this])},beforeTickToLabelConversion:function(){r.callback(this.options.beforeTickToLabelConversion,[this])},convertTicksToLabels:function(){var t=this.options.ticks;this.ticks=this.ticks.map(t.userCallback||t.callback,this)},afterTickToLabelConversion:function(){r.callback(this.options.afterTickToLabelConversion,[this])},beforeCalculateTickRotation:function(){r.callback(this.options.beforeCalculateTickRotation,[this])},calculateTickRotation:function(){var t=this,e=t.ctx,n=t.options.ticks,a=s(t._ticks),o=i(n);e.font=o.font;var l=n.minRotation||0;if(a.length&amp;&amp;t.options.display&amp;&amp;t.isHorizontal())for(var u,d=r.longestText(e,o.font,a,t.longestTextCache),h=d,c=t.getPixelForTick(1)-t.getPixelForTick(0)-6;h&gt;c&amp;&amp;l&lt;n.maxRotation;){var f=r.toRadians(l);if(u=Math.cos(f),Math.sin(f)*d&gt;t.maxHeight){l--;break}l++,h=u*d}t.labelRotation=l},afterCalculateTickRotation:function(){r.callback(this.options.afterCalculateTickRotation,[this])},beforeFit:function(){r.callback(this.options.beforeFit,[this])},fit:function(){var t=this,n=t.minSize={width:0,height:0},a=s(t._ticks),l=t.options,u=l.ticks,d=l.scaleLabel,h=l.gridLines,c=l.display,f=t.isHorizontal(),g=i(u),m=l.gridLines.tickMarkLength;if(n.width=f?t.isFullWidth()?t.maxWidth-t.margins.left-t.margins.right:t.maxWidth:c&amp;&amp;h.drawTicks?m:0,n.height=f?c&amp;&amp;h.drawTicks?m:0:t.maxHeight,d.display&amp;&amp;c){var p=o(d)+r.options.toPadding(d.padding).height;f?n.height+=p:n.width+=p}if(u.display&amp;&amp;c){var v=r.longestText(t.ctx,g.font,a,t.longestTextCache),y=r.numberOfLabelLines(a),b=.5*g.size,x=t.options.ticks.padding;if(f){t.longestLabelWidth=v;var _=r.toRadians(t.labelRotation),k=Math.cos(_),w=Math.sin(_)*v+g.size*y+b*(y-1)+b;n.height=Math.min(t.maxHeight,n.height+w+x),t.ctx.font=g.font;var M=e(t.ctx,a[0],g.font),S=e(t.ctx,a[a.length-1],g.font);0!==t.labelRotation?(t.paddingLeft=\&#34;bottom\&#34;===l.position?k*M+3:k*b+3,t.paddingRight=\&#34;bottom\&#34;===l.position?k*b+3:k*S+3):(t.paddingLeft=M/2+3,t.paddingRight=S/2+3)}else u.mirror?v=0:v+=x+b,n.width=Math.min(t.maxWidth,n.width+v),t.paddingTop=g.size/2,t.paddingBottom=g.size/2}t.handleMargins(),t.width=n.width,t.height=n.height},handleMargins:function(){var t=this;t.margins&amp;&amp;(t.paddingLeft=Math.max(t.paddingLeft-t.margins.left,0),t.paddingTop=Math.max(t.paddingTop-t.margins.top,0),t.paddingRight=Math.max(t.paddingRight-t.margins.right,0),t.paddingBottom=Math.max(t.paddingBottom-t.margins.bottom,0))},afterFit:function(){r.callback(this.options.afterFit,[this])},isHorizontal:function(){return\&#34;top\&#34;===this.options.position||\&#34;bottom\&#34;===this.options.position},isFullWidth:function(){return this.options.fullWidth},getRightValue:function(t){if(r.isNullOrUndef(t))return NaN;if(\&#34;number\&#34;==typeof t&amp;&amp;!isFinite(t))return NaN;if(t)if(this.isHorizontal()){if(void 0!==t.x)return this.getRightValue(t.x)}else if(void 0!==t.y)return this.getRightValue(t.y);return t},getLabelForIndex:r.noop,getPixelForValue:r.noop,getValueForPixel:r.noop,getPixelForTick:function(t){var e=this,i=e.options.offset;if(e.isHorizontal()){var n=(e.width-(e.paddingLeft+e.paddingRight))/Math.max(e._ticks.length-(i?0:1),1),a=n*t+e.paddingLeft;i&amp;&amp;(a+=n/2);var r=e.left+Math.round(a);return r+=e.isFullWidth()?e.margins.left:0}var o=e.height-(e.paddingTop+e.paddingBottom);return e.top+t*(o/(e._ticks.length-1))},getPixelForDecimal:function(t){var e=this;if(e.isHorizontal()){var i=(e.width-(e.paddingLeft+e.paddingRight))*t+e.paddingLeft,n=e.left+Math.round(i);return n+=e.isFullWidth()?e.margins.left:0}return e.top+t*e.height},getBasePixel:function(){return this.getPixelForValue(this.getBaseValue())},getBaseValue:function(){var t=this.min,e=this.max;return this.beginAtZero?0:t&lt;0&amp;&amp;e&lt;0?e:t&gt;0&amp;&amp;e&gt;0?t:0},_autoSkip:function(t){var e,i,n,a,o=this,s=o.isHorizontal(),l=o.options.ticks.minor,u=t.length,d=r.toRadians(o.labelRotation),h=Math.cos(d),c=o.longestLabelWidth*h,f=[];for(l.maxTicksLimit&amp;&amp;(a=l.maxTicksLimit),s&amp;&amp;(e=!1,(c+l.autoSkipPadding)*u&gt;o.width-(o.paddingLeft+o.paddingRight)&amp;&amp;(e=1+Math.floor((c+l.autoSkipPadding)*u/(o.width-(o.paddingLeft+o.paddingRight)))),a&amp;&amp;u&gt;a&amp;&amp;(e=Math.max(e,Math.floor(u/a)))),i=0;i&lt;u;i++)n=t[i],(e&gt;1&amp;&amp;i%e&gt;0||i%e==0&amp;&amp;i+e&gt;=u)&amp;&amp;i!==u-1&amp;&amp;delete n.label,f.push(n);return f},draw:function(t){var e=this,a=e.options;if(a.display){var s=e.ctx,u=n.global,d=a.ticks.minor,h=a.ticks.major||d,c=a.gridLines,f=a.scaleLabel,g=0!==e.labelRotation,m=e.isHorizontal(),p=d.autoSkip?e._autoSkip(e.getTicks()):e.getTicks(),v=r.valueOrDefault(d.fontColor,u.defaultFontColor),y=i(d),b=r.valueOrDefault(h.fontColor,u.defaultFontColor),x=i(h),_=c.drawTicks?c.tickMarkLength:0,k=r.valueOrDefault(f.fontColor,u.defaultFontColor),w=i(f),M=r.options.toPadding(f.padding),S=r.toRadians(e.labelRotation),D=[],C=e.options.gridLines.lineWidth,P=\&#34;right\&#34;===a.position?e.right:e.right-C-_,T=\&#34;right\&#34;===a.position?e.right+_:e.right,O=\&#34;bottom\&#34;===a.position?e.top+C:e.bottom-_-C,I=\&#34;bottom\&#34;===a.position?e.top+C+_:e.bottom+C;if(r.each(p,function(i,n){if(!r.isNullOrUndef(i.label)){var o,s,h,f,v,y,b,x,k,w,M,A,F,R,L=i.label;n===e.zeroLineIndex&amp;&amp;a.offset===c.offsetGridLines?(o=c.zeroLineWidth,s=c.zeroLineColor,h=c.zeroLineBorderDash,f=c.zeroLineBorderDashOffset):(o=r.valueAtIndexOrDefault(c.lineWidth,n),s=r.valueAtIndexOrDefault(c.color,n),h=r.valueOrDefault(c.borderDash,u.borderDash),f=r.valueOrDefault(c.borderDashOffset,u.borderDashOffset));var W=\&#34;middle\&#34;,Y=\&#34;middle\&#34;,N=d.padding;if(m){var z=_+N;\&#34;bottom\&#34;===a.position?(Y=g?\&#34;middle\&#34;:\&#34;top\&#34;,W=g?\&#34;right\&#34;:\&#34;center\&#34;,R=e.top+z):(Y=g?\&#34;middle\&#34;:\&#34;bottom\&#34;,W=g?\&#34;left\&#34;:\&#34;center\&#34;,R=e.bottom-z);var H=l(e,n,c.offsetGridLines&amp;&amp;p.length&gt;1);H&lt;e.left&amp;&amp;(s=\&#34;rgba(0,0,0,0)\&#34;),H+=r.aliasPixel(o),F=e.getPixelForTick(n)+d.labelOffset,v=b=k=M=H,y=O,x=I,w=t.top,A=t.bottom+C}else{var V,B=\&#34;left\&#34;===a.position;d.mirror?(W=B?\&#34;left\&#34;:\&#34;right\&#34;,V=N):(W=B?\&#34;right\&#34;:\&#34;left\&#34;,V=_+N),F=B?e.right-V:e.left+V;var E=l(e,n,c.offsetGridLines&amp;&amp;p.length&gt;1);E&lt;e.top&amp;&amp;(s=\&#34;rgba(0,0,0,0)\&#34;),E+=r.aliasPixel(o),R=e.getPixelForTick(n)+d.labelOffset,v=P,b=T,k=t.left,M=t.right+C,y=x=w=A=E}D.push({tx1:v,ty1:y,tx2:b,ty2:x,x1:k,y1:w,x2:M,y2:A,labelX:F,labelY:R,glWidth:o,glColor:s,glBorderDash:h,glBorderDashOffset:f,rotation:-1*S,label:L,major:i.major,textBaseline:Y,textAlign:W})}}),r.each(D,function(t){if(c.display&amp;&amp;(s.save(),s.lineWidth=t.glWidth,s.strokeStyle=t.glColor,s.setLineDash&amp;&amp;(s.setLineDash(t.glBorderDash),s.lineDashOffset=t.glBorderDashOffset),s.beginPath(),c.drawTicks&amp;&amp;(s.moveTo(t.tx1,t.ty1),s.lineTo(t.tx2,t.ty2)),c.drawOnChartArea&amp;&amp;(s.moveTo(t.x1,t.y1),s.lineTo(t.x2,t.y2)),s.stroke(),s.restore()),d.display){s.save(),s.translate(t.labelX,t.labelY),s.rotate(t.rotation),s.font=t.major?x.font:y.font,s.fillStyle=t.major?b:v,s.textBaseline=t.textBaseline,s.textAlign=t.textAlign;var i=t.label;if(r.isArray(i))for(var n=i.length,a=1.5*y.size,o=e.isHorizontal()?0:-a*(n-1)/2,l=0;l&lt;n;++l)s.fillText(\&#34;\&#34;+i[l],0,o),o+=a;else s.fillText(i,0,0);s.restore()}}),f.display){var A,F,R=0,L=o(f)/2;if(m)A=e.left+(e.right-e.left)/2,F=\&#34;bottom\&#34;===a.position?e.bottom-L-M.bottom:e.top+L+M.top;else{var W=\&#34;left\&#34;===a.position;A=W?e.left+L+M.top:e.right-L-M.top,F=e.top+(e.bottom-e.top)/2,R=W?-.5*Math.PI:.5*Math.PI}s.save(),s.translate(A,F),s.rotate(R),s.textAlign=\&#34;center\&#34;,s.textBaseline=\&#34;middle\&#34;,s.fillStyle=k,s.font=w.font,s.fillText(f.labelString,0,0),s.restore()}if(c.drawBorder){s.lineWidth=r.valueAtIndexOrDefault(c.lineWidth,0),s.strokeStyle=r.valueAtIndexOrDefault(c.color,0);var Y=e.left,N=e.right+C,z=e.top,H=e.bottom+C,V=r.aliasPixel(s.lineWidth);m?(z=H=\&#34;top\&#34;===a.position?e.bottom:e.top,z+=V,H+=V):(Y=N=\&#34;left\&#34;===a.position?e.right:e.left,Y+=V,N+=V),s.beginPath(),s.moveTo(Y,z),s.lineTo(N,H),s.stroke()}}}})}},{25:25,26:26,34:34,45:45}],33:[function(t,e,i){\&#34;use strict\&#34;;var n=t(25),a=t(45),r=t(30);e.exports=function(t){t.scaleService={constructors:{},defaults:{},registerScaleType:function(t,e,i){this.constructors[t]=e,this.defaults[t]=a.clone(i)},getScaleConstructor:function(t){return this.constructors.hasOwnProperty(t)?this.constructors[t]:void 0},getScaleDefaults:function(t){return this.defaults.hasOwnProperty(t)?a.merge({},[n.scale,this.defaults[t]]):{}},updateScaleDefaults:function(t,e){this.defaults.hasOwnProperty(t)&amp;&amp;(this.defaults[t]=a.extend(this.defaults[t],e))},addScalesToLayout:function(t){a.each(t.scales,function(e){e.fullWidth=e.options.fullWidth,e.position=e.options.position,e.weight=e.options.weight,r.addBox(t,e)})}}}},{25:25,30:30,45:45}],34:[function(t,e,i){\&#34;use strict\&#34;;var n=t(45);e.exports={formatters:{values:function(t){return n.isArray(t)?t:\&#34;\&#34;+t},linear:function(t,e,i){var a=i.length&gt;3?i[2]-i[1]:i[1]-i[0];Math.abs(a)&gt;1&amp;&amp;t!==Math.floor(t)&amp;&amp;(a=t-Math.floor(t));var r=n.log10(Math.abs(a)),o=\&#34;\&#34;;if(0!==t){var s=-1*Math.floor(r);s=Math.max(Math.min(s,20),0),o=t.toFixed(s)}else o=\&#34;0\&#34;;return o},logarithmic:function(t,e,i){var a=t/Math.pow(10,Math.floor(n.log10(t)));return 0===t?\&#34;0\&#34;:1===a||2===a||5===a||0===e||e===i.length-1?t.toExponential():\&#34;\&#34;}}}},{45:45}],35:[function(t,e,i){\&#34;use strict\&#34;;var n=t(25),a=t(26),r=t(45);n._set(\&#34;global\&#34;,{tooltips:{enabled:!0,custom:null,mode:\&#34;nearest\&#34;,position:\&#34;average\&#34;,intersect:!0,backgroundColor:\&#34;rgba(0,0,0,0.8)\&#34;,titleFontStyle:\&#34;bold\&#34;,titleSpacing:2,titleMarginBottom:6,titleFontColor:\&#34;#fff\&#34;,titleAlign:\&#34;left\&#34;,bodySpacing:2,bodyFontColor:\&#34;#fff\&#34;,bodyAlign:\&#34;left\&#34;,footerFontStyle:\&#34;bold\&#34;,footerSpacing:2,footerMarginTop:6,footerFontColor:\&#34;#fff\&#34;,footerAlign:\&#34;left\&#34;,yPadding:6,xPadding:6,caretPadding:2,caretSize:5,cornerRadius:6,multiKeyBackground:\&#34;#fff\&#34;,displayColors:!0,borderColor:\&#34;rgba(0,0,0,0)\&#34;,borderWidth:0,callbacks:{beforeTitle:r.noop,title:function(t,e){var i=\&#34;\&#34;,n=e.labels,a=n?n.length:0;if(t.length&gt;0){var r=t[0];r.xLabel?i=r.xLabel:a&gt;0&amp;&amp;r.index&lt;a&amp;&amp;(i=n[r.index])}return i},afterTitle:r.noop,beforeBody:r.noop,beforeLabel:r.noop,label:function(t,e){var i=e.datasets[t.datasetIndex].label||\&#34;\&#34;;return i&amp;&amp;(i+=\&#34;: \&#34;),i+=t.yLabel},labelColor:function(t,e){var i=e.getDatasetMeta(t.datasetIndex).data[t.index]._view;return{borderColor:i.borderColor,backgroundColor:i.backgroundColor}},labelTextColor:function(){return this._options.bodyFontColor},afterLabel:r.noop,afterBody:r.noop,beforeFooter:r.noop,footer:r.noop,afterFooter:r.noop}}}),e.exports=function(t){function e(t,e){var i=r.color(t);return i.alpha(e*i.alpha()).rgbaString()}function i(t,e){return e&amp;&amp;(r.isArray(e)?Array.prototype.push.apply(t,e):t.push(e)),t}function o(t){var e=n.global,i=r.valueOrDefault;return{xPadding:t.xPadding,yPadding:t.yPadding,xAlign:t.xAlign,yAlign:t.yAlign,bodyFontColor:t.bodyFontColor,_bodyFontFamily:i(t.bodyFontFamily,e.defaultFontFamily),_bodyFontStyle:i(t.bodyFontStyle,e.defaultFontStyle),_bodyAlign:t.bodyAlign,bodyFontSize:i(t.bodyFontSize,e.defaultFontSize),bodySpacing:t.bodySpacing,titleFontColor:t.titleFontColor,_titleFontFamily:i(t.titleFontFamily,e.defaultFontFamily),_titleFontStyle:i(t.titleFontStyle,e.defaultFontStyle),titleFontSize:i(t.titleFontSize,e.defaultFontSize),_titleAlign:t.titleAlign,titleSpacing:t.titleSpacing,titleMarginBottom:t.titleMarginBottom,footerFontColor:t.footerFontColor,_footerFontFamily:i(t.footerFontFamily,e.defaultFontFamily),_footerFontStyle:i(t.footerFontStyle,e.defaultFontStyle),footerFontSize:i(t.footerFontSize,e.defaultFontSize),_footerAlign:t.footerAlign,footerSpacing:t.footerSpacing,footerMarginTop:t.footerMarginTop,caretSize:t.caretSize,cornerRadius:t.cornerRadius,backgroundColor:t.backgroundColor,opacity:0,legendColorBackground:t.multiKeyBackground,displayColors:t.displayColors,borderColor:t.borderColor,borderWidth:t.borderWidth}}t.Tooltip=a.extend({initialize:function(){this._model=o(this._options),this._lastActive=[]},getTitle:function(){var t=this._options.callbacks,e=t.beforeTitle.apply(this,arguments),n=t.title.apply(this,arguments),a=t.afterTitle.apply(this,arguments),r=[];return r=i(r=i(r=i(r,e),n),a)},getBeforeBody:function(){var t=this._options.callbacks.beforeBody.apply(this,arguments);return r.isArray(t)?t:void 0!==t?[t]:[]},getBody:function(t,e){var n=this,a=n._options.callbacks,o=[];return r.each(t,function(t){var r={before:[],lines:[],after:[]};i(r.before,a.beforeLabel.call(n,t,e)),i(r.lines,a.label.call(n,t,e)),i(r.after,a.afterLabel.call(n,t,e)),o.push(r)}),o},getAfterBody:function(){var t=this._options.callbacks.afterBody.apply(this,arguments);return r.isArray(t)?t:void 0!==t?[t]:[]},getFooter:function(){var t=this._options.callbacks,e=t.beforeFooter.apply(this,arguments),n=t.footer.apply(this,arguments),a=t.afterFooter.apply(this,arguments),r=[];return r=i(r=i(r=i(r,e),n),a)},update:function(e){var i,n,a,s,l,u,d,h,c,f,g,m,p,v,y,b,x,_,k,w,M=this,S=M._options,D=M._model,C=M._model=o(S),P=M._active,T=M._data,O={xAlign:D.xAlign,yAlign:D.yAlign},I={x:D.x,y:D.y},A={width:D.width,height:D.height},F={x:D.caretX,y:D.caretY};if(P.length){C.opacity=1;var R=[],L=[];F=t.Tooltip.positioners[S.position].call(M,P,M._eventPosition);var W=[];for(i=0,n=P.length;i&lt;n;++i)W.push((b=P[i],x=void 0,_=void 0,void 0,void 0,x=b._xScale,_=b._yScale||b._scale,k=b._index,w=b._datasetIndex,{xLabel:x?x.getLabelForIndex(k,w):\&#34;\&#34;,yLabel:_?_.getLabelForIndex(k,w):\&#34;\&#34;,index:k,datasetIndex:w,x:b._model.x,y:b._model.y}));S.filter&amp;&amp;(W=W.filter(function(t){return S.filter(t,T)})),S.itemSort&amp;&amp;(W=W.sort(function(t,e){return S.itemSort(t,e,T)})),r.each(W,function(t){R.push(S.callbacks.labelColor.call(M,t,M._chart)),L.push(S.callbacks.labelTextColor.call(M,t,M._chart))}),C.title=M.getTitle(W,T),C.beforeBody=M.getBeforeBody(W,T),C.body=M.getBody(W,T),C.afterBody=M.getAfterBody(W,T),C.footer=M.getFooter(W,T),C.x=Math.round(F.x),C.y=Math.round(F.y),C.caretPadding=S.caretPadding,C.labelColors=R,C.labelTextColors=L,C.dataPoints=W,O=function(t,e){var i,n,a,r,o,s=t._model,l=t._chart,u=t._chart.chartArea,d=\&#34;center\&#34;,h=\&#34;center\&#34;;s.y&lt;e.height?h=\&#34;top\&#34;:s.y&gt;l.height-e.height&amp;&amp;(h=\&#34;bottom\&#34;);var c=(u.left+u.right)/2,f=(u.top+u.bottom)/2;\&#34;center\&#34;===h?(i=function(t){return t&lt;=c},n=function(t){return t&gt;c}):(i=function(t){return t&lt;=e.width/2},n=function(t){return t&gt;=l.width-e.width/2}),a=function(t){return t+e.width+s.caretSize+s.caretPadding&gt;l.width},r=function(t){return t-e.width-s.caretSize-s.caretPadding&lt;0},o=function(t){return t&lt;=f?\&#34;top\&#34;:\&#34;bottom\&#34;},i(s.x)?(d=\&#34;left\&#34;,a(s.x)&amp;&amp;(d=\&#34;center\&#34;,h=o(s.y))):n(s.x)&amp;&amp;(d=\&#34;right\&#34;,r(s.x)&amp;&amp;(d=\&#34;center\&#34;,h=o(s.y)));var g=t._options;return{xAlign:g.xAlign?g.xAlign:d,yAlign:g.yAlign?g.yAlign:h}}(this,A=function(t,e){var i=t._chart.ctx,n=2*e.yPadding,a=0,o=e.body,s=o.reduce(function(t,e){return t+e.before.length+e.lines.length+e.after.length},0);s+=e.beforeBody.length+e.afterBody.length;var l=e.title.length,u=e.footer.length,d=e.titleFontSize,h=e.bodyFontSize,c=e.footerFontSize;n+=l*d,n+=l?(l-1)*e.titleSpacing:0,n+=l?e.titleMarginBottom:0,n+=s*h,n+=s?(s-1)*e.bodySpacing:0,n+=u?e.footerMarginTop:0,n+=u*c,n+=u?(u-1)*e.footerSpacing:0;var f=0,g=function(t){a=Math.max(a,i.measureText(t).width+f)};return i.font=r.fontString(d,e._titleFontStyle,e._titleFontFamily),r.each(e.title,g),i.font=r.fontString(h,e._bodyFontStyle,e._bodyFontFamily),r.each(e.beforeBody.concat(e.afterBody),g),f=e.displayColors?h+2:0,r.each(o,function(t){r.each(t.before,g),r.each(t.lines,g),r.each(t.after,g)}),f=0,i.font=r.fontString(c,e._footerFontStyle,e._footerFontFamily),r.each(e.footer,g),{width:a+=2*e.xPadding,height:n}}(this,C)),a=C,s=A,l=O,u=M._chart,d=a.x,h=a.y,c=a.caretSize,f=a.caretPadding,g=a.cornerRadius,m=l.xAlign,p=l.yAlign,v=c+f,y=g+f,\&#34;right\&#34;===m?d-=s.width:\&#34;center\&#34;===m&amp;&amp;((d-=s.width/2)+s.width&gt;u.width&amp;&amp;(d=u.width-s.width),d&lt;0&amp;&amp;(d=0)),\&#34;top\&#34;===p?h+=v:h-=\&#34;bottom\&#34;===p?s.height+v:s.height/2,\&#34;center\&#34;===p?\&#34;left\&#34;===m?d+=v:\&#34;right\&#34;===m&amp;&amp;(d-=v):\&#34;left\&#34;===m?d-=y:\&#34;right\&#34;===m&amp;&amp;(d+=y),I={x:d,y:h}}else C.opacity=0;return C.xAlign=O.xAlign,C.yAlign=O.yAlign,C.x=I.x,C.y=I.y,C.width=A.width,C.height=A.height,C.caretX=F.x,C.caretY=F.y,M._model=C,e&amp;&amp;S.custom&amp;&amp;S.custom.call(M,C),M},drawCaret:function(t,e){var i=this._chart.ctx,n=this._view,a=this.getCaretPosition(t,e,n);i.lineTo(a.x1,a.y1),i.lineTo(a.x2,a.y2),i.lineTo(a.x3,a.y3)},getCaretPosition:function(t,e,i){var n,a,r,o,s,l,u=i.caretSize,d=i.cornerRadius,h=i.xAlign,c=i.yAlign,f=t.x,g=t.y,m=e.width,p=e.height;if(\&#34;center\&#34;===c)s=g+p/2,\&#34;left\&#34;===h?(a=(n=f)-u,r=n,o=s+u,l=s-u):(a=(n=f+m)+u,r=n,o=s-u,l=s+u);else if(\&#34;left\&#34;===h?(n=(a=f+d+u)-u,r=a+u):\&#34;right\&#34;===h?(n=(a=f+m-d-u)-u,r=a+u):(n=(a=i.caretX)-u,r=a+u),\&#34;top\&#34;===c)s=(o=g)-u,l=o;else{s=(o=g+p)+u,l=o;var v=r;r=n,n=v}return{x1:n,x2:a,x3:r,y1:o,y2:s,y3:l}},drawTitle:function(t,i,n,a){var o=i.title;if(o.length){n.textAlign=i._titleAlign,n.textBaseline=\&#34;top\&#34;;var s,l,u=i.titleFontSize,d=i.titleSpacing;for(n.fillStyle=e(i.titleFontColor,a),n.font=r.fontString(u,i._titleFontStyle,i._titleFontFamily),s=0,l=o.length;s&lt;l;++s)n.fillText(o[s],t.x,t.y),t.y+=u+d,s+1===o.length&amp;&amp;(t.y+=i.titleMarginBottom-d)}},drawBody:function(t,i,n,a){var o=i.bodyFontSize,s=i.bodySpacing,l=i.body;n.textAlign=i._bodyAlign,n.textBaseline=\&#34;top\&#34;,n.font=r.fontString(o,i._bodyFontStyle,i._bodyFontFamily);var u=0,d=function(e){n.fillText(e,t.x+u,t.y),t.y+=o+s};n.fillStyle=e(i.bodyFontColor,a),r.each(i.beforeBody,d);var h=i.displayColors;u=h?o+2:0,r.each(l,function(s,l){var u=e(i.labelTextColors[l],a);n.fillStyle=u,r.each(s.before,d),r.each(s.lines,function(r){h&amp;&amp;(n.fillStyle=e(i.legendColorBackground,a),n.fillRect(t.x,t.y,o,o),n.lineWidth=1,n.strokeStyle=e(i.labelColors[l].borderColor,a),n.strokeRect(t.x,t.y,o,o),n.fillStyle=e(i.labelColors[l].backgroundColor,a),n.fillRect(t.x+1,t.y+1,o-2,o-2),n.fillStyle=u),d(r)}),r.each(s.after,d)}),u=0,r.each(i.afterBody,d),t.y-=s},drawFooter:function(t,i,n,a){var o=i.footer;o.length&amp;&amp;(t.y+=i.footerMarginTop,n.textAlign=i._footerAlign,n.textBaseline=\&#34;top\&#34;,n.fillStyle=e(i.footerFontColor,a),n.font=r.fontString(i.footerFontSize,i._footerFontStyle,i._footerFontFamily),r.each(o,function(e){n.fillText(e,t.x,t.y),t.y+=i.footerFontSize+i.footerSpacing}))},drawBackground:function(t,i,n,a,r){n.fillStyle=e(i.backgroundColor,r),n.strokeStyle=e(i.borderColor,r),n.lineWidth=i.borderWidth;var o=i.xAlign,s=i.yAlign,l=t.x,u=t.y,d=a.width,h=a.height,c=i.cornerRadius;n.beginPath(),n.moveTo(l+c,u),\&#34;top\&#34;===s&amp;&amp;this.drawCaret(t,a),n.lineTo(l+d-c,u),n.quadraticCurveTo(l+d,u,l+d,u+c),\&#34;center\&#34;===s&amp;&amp;\&#34;right\&#34;===o&amp;&amp;this.drawCaret(t,a),n.lineTo(l+d,u+h-c),n.quadraticCurveTo(l+d,u+h,l+d-c,u+h),\&#34;bottom\&#34;===s&amp;&amp;this.drawCaret(t,a),n.lineTo(l+c,u+h),n.quadraticCurveTo(l,u+h,l,u+h-c),\&#34;center\&#34;===s&amp;&amp;\&#34;left\&#34;===o&amp;&amp;this.drawCaret(t,a),n.lineTo(l,u+c),n.quadraticCurveTo(l,u,l+c,u),n.closePath(),n.fill(),i.borderWidth&gt;0&amp;&amp;n.stroke()},draw:function(){var t=this._chart.ctx,e=this._view;if(0!==e.opacity){var i={width:e.width,height:e.height},n={x:e.x,y:e.y},a=Math.abs(e.opacity&lt;.001)?0:e.opacity,r=e.title.length||e.beforeBody.length||e.body.length||e.afterBody.length||e.footer.length;this._options.enabled&amp;&amp;r&amp;&amp;(this.drawBackground(n,e,t,i,a),n.x+=e.xPadding,n.y+=e.yPadding,this.drawTitle(n,e,t,a),this.drawBody(n,e,t,a),this.drawFooter(n,e,t,a))}},handleEvent:function(t){var e,i=this,n=i._options;return i._lastActive=i._lastActive||[],\&#34;mouseout\&#34;===t.type?i._active=[]:i._active=i._chart.getElementsAtEventForMode(t,n.mode,n),(e=!r.arrayEquals(i._active,i._lastActive))&amp;&amp;(i._lastActive=i._active,(n.enabled||n.custom)&amp;&amp;(i._eventPosition={x:t.x,y:t.y},i.update(!0),i.pivot())),e}}),t.Tooltip.positioners={average:function(t){if(!t.length)return!1;var e,i,n=0,a=0,r=0;for(e=0,i=t.length;e&lt;i;++e){var o=t[e];if(o&amp;&amp;o.hasValue()){var s=o.tooltipPosition();n+=s.x,a+=s.y,++r}}return{x:Math.round(n/r),y:Math.round(a/r)}},nearest:function(t,e){var i,n,a,o=e.x,s=e.y,l=Number.POSITIVE_INFINITY;for(i=0,n=t.length;i&lt;n;++i){var u=t[i];if(u&amp;&amp;u.hasValue()){var d=u.getCenterPoint(),h=r.distanceBetweenPoints(e,d);h&lt;l&amp;&amp;(l=h,a=u)}}if(a){var c=a.tooltipPosition();o=c.x,s=c.y}return{x:o,y:s}}}}},{25:25,26:26,45:45}],36:[function(t,e,i){\&#34;use strict\&#34;;var n=t(25),a=t(26),r=t(45);n._set(\&#34;global\&#34;,{elements:{arc:{backgroundColor:n.global.defaultColor,borderColor:\&#34;#fff\&#34;,borderWidth:2}}}),e.exports=a.extend({inLabelRange:function(t){var e=this._view;return!!e&amp;&amp;Math.pow(t-e.x,2)&lt;Math.pow(e.radius+e.hoverRadius,2)},inRange:function(t,e){var i=this._view;if(i){for(var n=r.getAngleFromPoint(i,{x:t,y:e}),a=n.angle,o=n.distance,s=i.startAngle,l=i.endAngle;l&lt;s;)l+=2*Math.PI;for(;a&gt;l;)a-=2*Math.PI;for(;a&lt;s;)a+=2*Math.PI;var u=a&gt;=s&amp;&amp;a&lt;=l,d=o&gt;=i.innerRadius&amp;&amp;o&lt;=i.outerRadius;return u&amp;&amp;d}return!1},getCenterPoint:function(){var t=this._view,e=(t.startAngle+t.endAngle)/2,i=(t.innerRadius+t.outerRadius)/2;return{x:t.x+Math.cos(e)*i,y:t.y+Math.sin(e)*i}},getArea:function(){var t=this._view;return Math.PI*((t.endAngle-t.startAngle)/(2*Math.PI))*(Math.pow(t.outerRadius,2)-Math.pow(t.innerRadius,2))},tooltipPosition:function(){var t=this._view,e=t.startAngle+(t.endAngle-t.startAngle)/2,i=(t.outerRadius-t.innerRadius)/2+t.innerRadius;return{x:t.x+Math.cos(e)*i,y:t.y+Math.sin(e)*i}},draw:function(){var t=this._chart.ctx,e=this._view,i=e.startAngle,n=e.endAngle;t.beginPath(),t.arc(e.x,e.y,e.outerRadius,i,n),t.arc(e.x,e.y,e.innerRadius,n,i,!0),t.closePath(),t.strokeStyle=e.borderColor,t.lineWidth=e.borderWidth,t.fillStyle=e.backgroundColor,t.fill(),t.lineJoin=\&#34;bevel\&#34;,e.borderWidth&amp;&amp;t.stroke()}})},{25:25,26:26,45:45}],37:[function(t,e,i){\&#34;use strict\&#34;;var n=t(25),a=t(26),r=t(45),o=n.global;n._set(\&#34;global\&#34;,{elements:{line:{tension:.4,backgroundColor:o.defaultColor,borderWidth:3,borderColor:o.defaultColor,borderCapStyle:\&#34;butt\&#34;,borderDash:[],borderDashOffset:0,borderJoinStyle:\&#34;miter\&#34;,capBezierPoints:!0,fill:!0}}}),e.exports=a.extend({draw:function(){var t,e,i,n,a=this._view,s=this._chart.ctx,l=a.spanGaps,u=this._children.slice(),d=o.elements.line,h=-1;for(this._loop&amp;&amp;u.length&amp;&amp;u.push(u[0]),s.save(),s.lineCap=a.borderCapStyle||d.borderCapStyle,s.setLineDash&amp;&amp;s.setLineDash(a.borderDash||d.borderDash),s.lineDashOffset=a.borderDashOffset||d.borderDashOffset,s.lineJoin=a.borderJoinStyle||d.borderJoinStyle,s.lineWidth=a.borderWidth||d.borderWidth,s.strokeStyle=a.borderColor||o.defaultColor,s.beginPath(),h=-1,t=0;t&lt;u.length;++t)e=u[t],i=r.previousItem(u,t),n=e._view,0===t?n.skip||(s.moveTo(n.x,n.y),h=t):(i=-1===h?i:u[h],n.skip||(h!==t-1&amp;&amp;!l||-1===h?s.moveTo(n.x,n.y):r.canvas.lineTo(s,i._view,e._view),h=t));s.stroke(),s.restore()}})},{25:25,26:26,45:45}],38:[function(t,e,i){\&#34;use strict\&#34;;var n=t(25),a=t(26),r=t(45),o=n.global.defaultColor;function s(t){var e=this._view;return!!e&amp;&amp;Math.abs(t-e.x)&lt;e.radius+e.hitRadius}n._set(\&#34;global\&#34;,{elements:{point:{radius:3,pointStyle:\&#34;circle\&#34;,backgroundColor:o,borderColor:o,borderWidth:1,hitRadius:1,hoverRadius:4,hoverBorderWidth:1}}}),e.exports=a.extend({inRange:function(t,e){var i=this._view;return!!i&amp;&amp;Math.pow(t-i.x,2)+Math.pow(e-i.y,2)&lt;Math.pow(i.hitRadius+i.radius,2)},inLabelRange:s,inXRange:s,inYRange:function(t){var e=this._view;return!!e&amp;&amp;Math.abs(t-e.y)&lt;e.radius+e.hitRadius},getCenterPoint:function(){var t=this._view;return{x:t.x,y:t.y}},getArea:function(){return Math.PI*Math.pow(this._view.radius,2)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y,padding:t.radius+t.borderWidth}},draw:function(t){var e=this._view,i=this._model,a=this._chart.ctx,s=e.pointStyle,l=e.radius,u=e.x,d=e.y,h=r.color,c=0;e.skip||(a.strokeStyle=e.borderColor||o,a.lineWidth=r.valueOrDefault(e.borderWidth,n.global.elements.point.borderWidth),a.fillStyle=e.backgroundColor||o,void 0!==t&amp;&amp;(i.x&lt;t.left||1.01*t.right&lt;i.x||i.y&lt;t.top||1.01*t.bottom&lt;i.y)&amp;&amp;(i.x&lt;t.left?c=(u-i.x)/(t.left-i.x):1.01*t.right&lt;i.x?c=(i.x-u)/(i.x-t.right):i.y&lt;t.top?c=(d-i.y)/(t.top-i.y):1.01*t.bottom&lt;i.y&amp;&amp;(c=(i.y-d)/(i.y-t.bottom)),c=Math.round(100*c)/100,a.strokeStyle=h(a.strokeStyle).alpha(c).rgbString(),a.fillStyle=h(a.fillStyle).alpha(c).rgbString()),r.canvas.drawPoint(a,s,l,u,d))}})},{25:25,26:26,45:45}],39:[function(t,e,i){\&#34;use strict\&#34;;var n=t(25),a=t(26);function r(t){return void 0!==t._view.width}function o(t){var e,i,n,a,o=t._view;if(r(t)){var s=o.width/2;e=o.x-s,i=o.x+s,n=Math.min(o.y,o.base),a=Math.max(o.y,o.base)}else{var l=o.height/2;e=Math.min(o.x,o.base),i=Math.max(o.x,o.base),n=o.y-l,a=o.y+l}return{left:e,top:n,right:i,bottom:a}}n._set(\&#34;global\&#34;,{elements:{rectangle:{backgroundColor:n.global.defaultColor,borderColor:n.global.defaultColor,borderSkipped:\&#34;bottom\&#34;,borderWidth:0}}}),e.exports=a.extend({draw:function(){var t,e,i,n,a,r,o,s=this._chart.ctx,l=this._view,u=l.borderWidth;if(l.horizontal?(t=l.base,e=l.x,i=l.y-l.height/2,n=l.y+l.height/2,a=e&gt;t?1:-1,r=1,o=l.borderSkipped||\&#34;left\&#34;):(t=l.x-l.width/2,e=l.x+l.width/2,i=l.y,a=1,r=(n=l.base)&gt;i?1:-1,o=l.borderSkipped||\&#34;bottom\&#34;),u){var d=Math.min(Math.abs(t-e),Math.abs(i-n)),h=(u=u&gt;d?d:u)/2,c=t+(\&#34;left\&#34;!==o?h*a:0),f=e+(\&#34;right\&#34;!==o?-h*a:0),g=i+(\&#34;top\&#34;!==o?h*r:0),m=n+(\&#34;bottom\&#34;!==o?-h*r:0);c!==f&amp;&amp;(i=g,n=m),g!==m&amp;&amp;(t=c,e=f)}s.beginPath(),s.fillStyle=l.backgroundColor,s.strokeStyle=l.borderColor,s.lineWidth=u;var p=[[t,n],[t,i],[e,i],[e,n]],v=[\&#34;bottom\&#34;,\&#34;left\&#34;,\&#34;top\&#34;,\&#34;right\&#34;].indexOf(o,0);function y(t){return p[(v+t)%4]}-1===v&amp;&amp;(v=0);var b=y(0);s.moveTo(b[0],b[1]);for(var x=1;x&lt;4;x++)b=y(x),s.lineTo(b[0],b[1]);s.fill(),u&amp;&amp;s.stroke()},height:function(){var t=this._view;return t.base-t.y},inRange:function(t,e){var i=!1;if(this._view){var n=o(this);i=t&gt;=n.left&amp;&amp;t&lt;=n.right&amp;&amp;e&gt;=n.top&amp;&amp;e&lt;=n.bottom}return i},inLabelRange:function(t,e){if(!this._view)return!1;var i=o(this);return r(this)?t&gt;=i.left&amp;&amp;t&lt;=i.right:e&gt;=i.top&amp;&amp;e&lt;=i.bottom},inXRange:function(t){var e=o(this);return t&gt;=e.left&amp;&amp;t&lt;=e.right},inYRange:function(t){var e=o(this);return t&gt;=e.top&amp;&amp;t&lt;=e.bottom},getCenterPoint:function(){var t,e,i=this._view;return r(this)?(t=i.x,e=(i.y+i.base)/2):(t=(i.x+i.base)/2,e=i.y),{x:t,y:e}},getArea:function(){var t=this._view;return t.width*Math.abs(t.y-t.base)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y}}})},{25:25,26:26}],40:[function(t,e,i){\&#34;use strict\&#34;;e.exports={},e.exports.Arc=t(36),e.exports.Line=t(37),e.exports.Point=t(38),e.exports.Rectangle=t(39)},{36:36,37:37,38:38,39:39}],41:[function(t,e,i){\&#34;use strict\&#34;;var n=t(42);i=e.exports={clear:function(t){t.ctx.clearRect(0,0,t.width,t.height)},roundedRect:function(t,e,i,n,a,r){if(r){var o=Math.min(r,n/2),s=Math.min(r,a/2);t.moveTo(e+o,i),t.lineTo(e+n-o,i),t.quadraticCurveTo(e+n,i,e+n,i+s),t.lineTo(e+n,i+a-s),t.quadraticCurveTo(e+n,i+a,e+n-o,i+a),t.lineTo(e+o,i+a),t.quadraticCurveTo(e,i+a,e,i+a-s),t.lineTo(e,i+s),t.quadraticCurveTo(e,i,e+o,i)}else t.rect(e,i,n,a)},drawPoint:function(t,e,i,n,a){var r,o,s,l,u,d;if(!e||\&#34;object\&#34;!=typeof e||\&#34;[object HTMLImageElement]\&#34;!==(r=e.toString())&amp;&amp;\&#34;[object HTMLCanvasElement]\&#34;!==r){if(!(isNaN(i)||i&lt;=0)){switch(e){default:t.beginPath(),t.arc(n,a,i,0,2*Math.PI),t.closePath(),t.fill();break;case\&#34;triangle\&#34;:t.beginPath(),u=(o=3*i/Math.sqrt(3))*Math.sqrt(3)/2,t.moveTo(n-o/2,a+u/3),t.lineTo(n+o/2,a+u/3),t.lineTo(n,a-2*u/3),t.closePath(),t.fill();break;case\&#34;rect\&#34;:d=1/Math.SQRT2*i,t.beginPath(),t.fillRect(n-d,a-d,2*d,2*d),t.strokeRect(n-d,a-d,2*d,2*d);break;case\&#34;rectRounded\&#34;:var h=i/Math.SQRT2,c=n-h,f=a-h,g=Math.SQRT2*i;t.beginPath(),this.roundedRect(t,c,f,g,g,i/2),t.closePath(),t.fill();break;case\&#34;rectRot\&#34;:d=1/Math.SQRT2*i,t.beginPath(),t.moveTo(n-d,a),t.lineTo(n,a+d),t.lineTo(n+d,a),t.lineTo(n,a-d),t.closePath(),t.fill();break;case\&#34;cross\&#34;:t.beginPath(),t.moveTo(n,a+i),t.lineTo(n,a-i),t.moveTo(n-i,a),t.lineTo(n+i,a),t.closePath();break;case\&#34;crossRot\&#34;:t.beginPath(),s=Math.cos(Math.PI/4)*i,l=Math.sin(Math.PI/4)*i,t.moveTo(n-s,a-l),t.lineTo(n+s,a+l),t.moveTo(n-s,a+l),t.lineTo(n+s,a-l),t.closePath();break;case\&#34;star\&#34;:t.beginPath(),t.moveTo(n,a+i),t.lineTo(n,a-i),t.moveTo(n-i,a),t.lineTo(n+i,a),s=Math.cos(Math.PI/4)*i,l=Math.sin(Math.PI/4)*i,t.moveTo(n-s,a-l),t.lineTo(n+s,a+l),t.moveTo(n-s,a+l),t.lineTo(n+s,a-l),t.closePath();break;case\&#34;line\&#34;:t.beginPath(),t.moveTo(n-i,a),t.lineTo(n+i,a),t.closePath();break;case\&#34;dash\&#34;:t.beginPath(),t.moveTo(n,a),t.lineTo(n+i,a),t.closePath()}t.stroke()}}else t.drawImage(e,n-e.width/2,a-e.height/2,e.width,e.height)},clipArea:function(t,e){t.save(),t.beginPath(),t.rect(e.left,e.top,e.right-e.left,e.bottom-e.top),t.clip()},unclipArea:function(t){t.restore()},lineTo:function(t,e,i,n){if(i.steppedLine)return\&#34;after\&#34;===i.steppedLine&amp;&amp;!n||\&#34;after\&#34;!==i.steppedLine&amp;&amp;n?t.lineTo(e.x,i.y):t.lineTo(i.x,e.y),void t.lineTo(i.x,i.y);i.tension?t.bezierCurveTo(n?e.controlPointPreviousX:e.controlPointNextX,n?e.controlPointPreviousY:e.controlPointNextY,n?i.controlPointNextX:i.controlPointPreviousX,n?i.controlPointNextY:i.controlPointPreviousY,i.x,i.y):t.lineTo(i.x,i.y)}};n.clear=i.clear,n.drawRoundedRectangle=function(t){t.beginPath(),i.roundedRect.apply(i,arguments),t.closePath()}},{42:42}],42:[function(t,e,i){\&#34;use strict\&#34;;var n,a={noop:function(){},uid:(n=0,function(){return n++}),isNullOrUndef:function(t){return null==t},isArray:Array.isArray?Array.isArray:function(t){return\&#34;[object Array]\&#34;===Object.prototype.toString.call(t)},isObject:function(t){return null!==t&amp;&amp;\&#34;[object Object]\&#34;===Object.prototype.toString.call(t)},valueOrDefault:function(t,e){return void 0===t?e:t},valueAtIndexOrDefault:function(t,e,i){return a.valueOrDefault(a.isArray(t)?t[e]:t,i)},callback:function(t,e,i){if(t&amp;&amp;\&#34;function\&#34;==typeof t.call)return t.apply(i,e)},each:function(t,e,i,n){var r,o,s;if(a.isArray(t))if(o=t.length,n)for(r=o-1;r&gt;=0;r--)e.call(i,t[r],r);else for(r=0;r&lt;o;r++)e.call(i,t[r],r);else if(a.isObject(t))for(o=(s=Object.keys(t)).length,r=0;r&lt;o;r++)e.call(i,t[s[r]],s[r])},arrayEquals:function(t,e){var i,n,r,o;if(!t||!e||t.length!==e.length)return!1;for(i=0,n=t.length;i&lt;n;++i)if(r=t[i],o=e[i],r instanceof Array&amp;&amp;o instanceof Array){if(!a.arrayEquals(r,o))return!1}else if(r!==o)return!1;return!0},clone:function(t){if(a.isArray(t))return t.map(a.clone);if(a.isObject(t)){for(var e={},i=Object.keys(t),n=i.length,r=0;r&lt;n;++r)e[i[r]]=a.clone(t[i[r]]);return e}return t},_merger:function(t,e,i,n){var r=e[t],o=i[t];a.isObject(r)&amp;&amp;a.isObject(o)?a.merge(r,o,n):e[t]=a.clone(o)},_mergerIf:function(t,e,i){var n=e[t],r=i[t];a.isObject(n)&amp;&amp;a.isObject(r)?a.mergeIf(n,r):e.hasOwnProperty(t)||(e[t]=a.clone(r))},merge:function(t,e,i){var n,r,o,s,l,u=a.isArray(e)?e:[e],d=u.length;if(!a.isObject(t))return t;for(n=(i=i||{}).merger||a._merger,r=0;r&lt;d;++r)if(e=u[r],a.isObject(e))for(l=0,s=(o=Object.keys(e)).length;l&lt;s;++l)n(o[l],t,e,i);return t},mergeIf:function(t,e){return a.merge(t,e,{merger:a._mergerIf})},extend:function(t){for(var e=function(e,i){t[i]=e},i=1,n=arguments.length;i&lt;n;++i)a.each(arguments[i],e);return t},inherits:function(t){var e=this,i=t&amp;&amp;t.hasOwnProperty(\&#34;constructor\&#34;)?t.constructor:function(){return e.apply(this,arguments)},n=function(){this.constructor=i};return n.prototype=e.prototype,i.prototype=new n,i.extend=a.inherits,t&amp;&amp;a.extend(i.prototype,t),i.__super__=e.prototype,i}};e.exports=a,a.callCallback=a.callback,a.indexOf=function(t,e,i){return Array.prototype.indexOf.call(t,e,i)},a.getValueOrDefault=a.valueOrDefault,a.getValueAtIndexOrDefault=a.valueAtIndexOrDefault},{}],43:[function(t,e,i){\&#34;use strict\&#34;;var n=t(42),a={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return-t*(t-2)},easeInOutQuad:function(t){return(t/=.5)&lt;1?.5*t*t:-.5*(--t*(t-2)-1)},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return(t-=1)*t*t+1},easeInOutCubic:function(t){return(t/=.5)&lt;1?.5*t*t*t:.5*((t-=2)*t*t+2)},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return-((t-=1)*t*t*t-1)},easeInOutQuart:function(t){return(t/=.5)&lt;1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return(t-=1)*t*t*t*t+1},easeInOutQuint:function(t){return(t/=.5)&lt;1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)},easeInSine:function(t){return 1-Math.cos(t*(Math.PI/2))},easeOutSine:function(t){return Math.sin(t*(Math.PI/2))},easeInOutSine:function(t){return-.5*(Math.cos(Math.PI*t)-1)},easeInExpo:function(t){return 0===t?0:Math.pow(2,10*(t-1))},easeOutExpo:function(t){return 1===t?1:1-Math.pow(2,-10*t)},easeInOutExpo:function(t){return 0===t?0:1===t?1:(t/=.5)&lt;1?.5*Math.pow(2,10*(t-1)):.5*(2-Math.pow(2,-10*--t))},easeInCirc:function(t){return t&gt;=1?t:-(Math.sqrt(1-t*t)-1)},easeOutCirc:function(t){return Math.sqrt(1-(t-=1)*t)},easeInOutCirc:function(t){return(t/=.5)&lt;1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},easeInElastic:function(t){var e=1.70158,i=0,n=1;return 0===t?0:1===t?1:(i||(i=.3),n&lt;1?(n=1,e=i/4):e=i/(2*Math.PI)*Math.asin(1/n),-n*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/i))},easeOutElastic:function(t){var e=1.70158,i=0,n=1;return 0===t?0:1===t?1:(i||(i=.3),n&lt;1?(n=1,e=i/4):e=i/(2*Math.PI)*Math.asin(1/n),n*Math.pow(2,-10*t)*Math.sin((t-e)*(2*Math.PI)/i)+1)},easeInOutElastic:function(t){var e=1.70158,i=0,n=1;return 0===t?0:2==(t/=.5)?1:(i||(i=.45),n&lt;1?(n=1,e=i/4):e=i/(2*Math.PI)*Math.asin(1/n),t&lt;1?n*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/i)*-.5:n*Math.pow(2,-10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/i)*.5+1)},easeInBack:function(t){return t*t*(2.70158*t-1.70158)},easeOutBack:function(t){return(t-=1)*t*(2.70158*t+1.70158)+1},easeInOutBack:function(t){var e=1.70158;return(t/=.5)&lt;1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:function(t){return 1-a.easeOutBounce(1-t)},easeOutBounce:function(t){return t&lt;1/2.75?7.5625*t*t:t&lt;2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t&lt;2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},easeInOutBounce:function(t){return t&lt;.5?.5*a.easeInBounce(2*t):.5*a.easeOutBounce(2*t-1)+.5}};e.exports={effects:a},n.easingEffects=a},{42:42}],44:[function(t,e,i){\&#34;use strict\&#34;;var n=t(42);e.exports={toLineHeight:function(t,e){var i=(\&#34;\&#34;+t).match(/^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/);if(!i||\&#34;normal\&#34;===i[1])return 1.2*e;switch(t=+i[2],i[3]){case\&#34;px\&#34;:return t;case\&#34;%\&#34;:t/=100}return e*t},toPadding:function(t){var e,i,a,r;return n.isObject(t)?(e=+t.top||0,i=+t.right||0,a=+t.bottom||0,r=+t.left||0):e=i=a=r=+t||0,{top:e,right:i,bottom:a,left:r,height:e+a,width:r+i}},resolve:function(t,e,i){var a,r,o;for(a=0,r=t.length;a&lt;r;++a)if(void 0!==(o=t[a])&amp;&amp;(void 0!==e&amp;&amp;\&#34;function\&#34;==typeof o&amp;&amp;(o=o(e)),void 0!==i&amp;&amp;n.isArray(o)&amp;&amp;(o=o[i]),void 0!==o))return o}}},{42:42}],45:[function(t,e,i){\&#34;use strict\&#34;;e.exports=t(42),e.exports.easing=t(43),e.exports.canvas=t(41),e.exports.options=t(44)},{41:41,42:42,43:43,44:44}],46:[function(t,e,i){e.exports={acquireContext:function(t){return t&amp;&amp;t.canvas&amp;&amp;(t=t.canvas),t&amp;&amp;t.getContext(\&#34;2d\&#34;)||null}}},{}],47:[function(t,e,i){\&#34;use strict\&#34;;var n=t(45),a=\&#34;$chartjs\&#34;,r=\&#34;chartjs-\&#34;,o=r+\&#34;render-monitor\&#34;,s=r+\&#34;render-animation\&#34;,l=[\&#34;animationstart\&#34;,\&#34;webkitAnimationStart\&#34;],u={touchstart:\&#34;mousedown\&#34;,touchmove:\&#34;mousemove\&#34;,touchend:\&#34;mouseup\&#34;,pointerenter:\&#34;mouseenter\&#34;,pointerdown:\&#34;mousedown\&#34;,pointermove:\&#34;mousemove\&#34;,pointerup:\&#34;mouseup\&#34;,pointerleave:\&#34;mouseout\&#34;,pointerout:\&#34;mouseout\&#34;};function d(t,e){var i=n.getStyle(t,e),a=i&amp;&amp;i.match(/^(\\d+)(\\.\\d+)?px$/);return a?Number(a[1]):void 0}var h=!!function(){var t=!1;try{var e=Object.defineProperty({},\&#34;passive\&#34;,{get:function(){t=!0}});window.addEventListener(\&#34;e\&#34;,null,e)}catch(t){}return t}()&amp;&amp;{passive:!0};function c(t,e,i){t.addEventListener(e,i,h)}function f(t,e,i){t.removeEventListener(e,i,h)}function g(t,e,i,n,a){return{type:t,chart:e,native:a||null,x:void 0!==i?i:null,y:void 0!==n?n:null}}function m(t,e,i){var u,d,h,f,m,p,v,y,b=t[a]||(t[a]={}),x=b.resizer=function(t){var e=document.createElement(\&#34;div\&#34;),i=r+\&#34;size-monitor\&#34;,n=\&#34;position:absolute;left:0;top:0;right:0;bottom:0;overflow:hidden;pointer-events:none;visibility:hidden;z-index:-1;\&#34;;e.style.cssText=n,e.className=i,e.innerHTML=&#39;&lt;div class=\&#34;&#39;+i+&#39;-expand\&#34; style=\&#34;&#39;+n+&#39;\&#34;&gt;&lt;div style=\&#34;position:absolute;width:1000000px;height:1000000px;left:0;top:0\&#34;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=\&#34;&#39;+i+&#39;-shrink\&#34; style=\&#34;&#39;+n+&#39;\&#34;&gt;&lt;div style=\&#34;position:absolute;width:200%;height:200%;left:0; top:0\&#34;&gt;&lt;/div&gt;&lt;/div&gt;&#39;;var a=e.childNodes[0],o=e.childNodes[1];e._reset=function(){a.scrollLeft=1e6,a.scrollTop=1e6,o.scrollLeft=1e6,o.scrollTop=1e6};var s=function(){e._reset(),t()};return c(a,\&#34;scroll\&#34;,s.bind(a,\&#34;expand\&#34;)),c(o,\&#34;scroll\&#34;,s.bind(o,\&#34;shrink\&#34;)),e}((u=function(){if(b.resizer)return e(g(\&#34;resize\&#34;,i))},h=!1,f=[],function(){f=Array.prototype.slice.call(arguments),d=d||this,h||(h=!0,n.requestAnimFrame.call(window,function(){h=!1,u.apply(d,f)}))}));p=function(){if(b.resizer){var e=t.parentNode;e&amp;&amp;e!==x.parentNode&amp;&amp;e.insertBefore(x,e.firstChild),x._reset()}},v=(m=t)[a]||(m[a]={}),y=v.renderProxy=function(t){t.animationName===s&amp;&amp;p()},n.each(l,function(t){c(m,t,y)}),v.reflow=!!m.offsetParent,m.classList.add(o)}function p(t){var e,i,r,s=t[a]||{},u=s.resizer;delete s.resizer,i=(e=t)[a]||{},(r=i.renderProxy)&amp;&amp;(n.each(l,function(t){f(e,t,r)}),delete i.renderProxy),e.classList.remove(o),u&amp;&amp;u.parentNode&amp;&amp;u.parentNode.removeChild(u)}e.exports={_enabled:\&#34;undefined\&#34;!=typeof window&amp;&amp;\&#34;undefined\&#34;!=typeof document,initialize:function(){var t,e,i,n=\&#34;from{opacity:0.99}to{opacity:1}\&#34;;e=\&#34;@-webkit-keyframes \&#34;+s+\&#34;{\&#34;+n+\&#34;}@keyframes \&#34;+s+\&#34;{\&#34;+n+\&#34;}.\&#34;+o+\&#34;{-webkit-animation:\&#34;+s+\&#34; 0.001s;animation:\&#34;+s+\&#34; 0.001s;}\&#34;,i=(t=this)._style||document.createElement(\&#34;style\&#34;),t._style||(t._style=i,e=\&#34;/* Chart.js */\\n\&#34;+e,i.setAttribute(\&#34;type\&#34;,\&#34;text/css\&#34;),document.getElementsByTagName(\&#34;head\&#34;)[0].appendChild(i)),i.appendChild(document.createTextNode(e))},acquireContext:function(t,e){\&#34;string\&#34;==typeof t?t=document.getElementById(t):t.length&amp;&amp;(t=t[0]),t&amp;&amp;t.canvas&amp;&amp;(t=t.canvas);var i=t&amp;&amp;t.getContext&amp;&amp;t.getContext(\&#34;2d\&#34;);return i&amp;&amp;i.canvas===t?(function(t,e){var i=t.style,n=t.getAttribute(\&#34;height\&#34;),r=t.getAttribute(\&#34;width\&#34;);if(t[a]={initial:{height:n,width:r,style:{display:i.display,height:i.height,width:i.width}}},i.display=i.display||\&#34;block\&#34;,null===r||\&#34;\&#34;===r){var o=d(t,\&#34;width\&#34;);void 0!==o&amp;&amp;(t.width=o)}if(null===n||\&#34;\&#34;===n)if(\&#34;\&#34;===t.style.height)t.height=t.width/(e.options.aspectRatio||2);else{var s=d(t,\&#34;height\&#34;);void 0!==o&amp;&amp;(t.height=s)}}(t,e),i):null},releaseContext:function(t){var e=t.canvas;if(e[a]){var i=e[a].initial;[\&#34;height\&#34;,\&#34;width\&#34;].forEach(function(t){var a=i[t];n.isNullOrUndef(a)?e.removeAttribute(t):e.setAttribute(t,a)}),n.each(i.style||{},function(t,i){e.style[i]=t}),e.width=e.width,delete e[a]}},addEventListener:function(t,e,i){var r=t.canvas;if(\&#34;resize\&#34;!==e){var o=i[a]||(i[a]={});c(r,e,(o.proxies||(o.proxies={}))[t.id+\&#34;_\&#34;+e]=function(e){var a,r,o,s;i((r=t,o=u[(a=e).type]||a.type,s=n.getRelativePosition(a,r),g(o,r,s.x,s.y,a)))})}else m(r,i,t)},removeEventListener:function(t,e,i){var n=t.canvas;if(\&#34;resize\&#34;!==e){var r=((i[a]||{}).proxies||{})[t.id+\&#34;_\&#34;+e];r&amp;&amp;f(n,e,r)}else p(n)}},n.addEvent=c,n.removeEvent=f},{45:45}],48:[function(t,e,i){\&#34;use strict\&#34;;var n=t(45),a=t(46),r=t(47),o=r._enabled?r:a;e.exports=n.extend({initialize:function(){},acquireContext:function(){},releaseContext:function(){},addEventListener:function(){},removeEventListener:function(){}},o)},{45:45,46:46,47:47}],49:[function(t,e,i){\&#34;use strict\&#34;;e.exports={},e.exports.filler=t(50),e.exports.legend=t(51),e.exports.title=t(52)},{50:50,51:51,52:52}],50:[function(t,e,i){\&#34;use strict\&#34;;var n=t(25),a=t(40),r=t(45);n._set(\&#34;global\&#34;,{plugins:{filler:{propagate:!0}}});var o={dataset:function(t){var e=t.fill,i=t.chart,n=i.getDatasetMeta(e),a=n&amp;&amp;i.isDatasetVisible(e)&amp;&amp;n.dataset._children||[],r=a.length||0;return r?function(t,e){return e&lt;r&amp;&amp;a[e]._view||null}:null},boundary:function(t){var e=t.boundary,i=e?e.x:null,n=e?e.y:null;return function(t){return{x:null===i?t.x:i,y:null===n?t.y:n}}}};function s(t,e,i){var n,a=t._model||{},r=a.fill;if(void 0===r&amp;&amp;(r=!!a.backgroundColor),!1===r||null===r)return!1;if(!0===r)return\&#34;origin\&#34;;if(n=parseFloat(r,10),isFinite(n)&amp;&amp;Math.floor(n)===n)return\&#34;-\&#34;!==r[0]&amp;&amp;\&#34;+\&#34;!==r[0]||(n=e+n),!(n===e||n&lt;0||n&gt;=i)&amp;&amp;n;switch(r){case\&#34;bottom\&#34;:return\&#34;start\&#34;;case\&#34;top\&#34;:return\&#34;end\&#34;;case\&#34;zero\&#34;:return\&#34;origin\&#34;;case\&#34;origin\&#34;:case\&#34;start\&#34;:case\&#34;end\&#34;:return r;default:return!1}}function l(t){var e,i=t.el._model||{},n=t.el._scale||{},a=t.fill,r=null;if(isFinite(a))return null;if(\&#34;start\&#34;===a?r=void 0===i.scaleBottom?n.bottom:i.scaleBottom:\&#34;end\&#34;===a?r=void 0===i.scaleTop?n.top:i.scaleTop:void 0!==i.scaleZero?r=i.scaleZero:n.getBasePosition?r=n.getBasePosition():n.getBasePixel&amp;&amp;(r=n.getBasePixel()),null!=r){if(void 0!==r.x&amp;&amp;void 0!==r.y)return r;if(\&#34;number\&#34;==typeof r&amp;&amp;isFinite(r))return{x:(e=n.isHorizontal())?r:null,y:e?null:r}}return null}function u(t,e,i){var n,a=t[e].fill,r=[e];if(!i)return a;for(;!1!==a&amp;&amp;-1===r.indexOf(a);){if(!isFinite(a))return a;if(!(n=t[a]))return!1;if(n.visible)return a;r.push(a),a=n.fill}return!1}function d(t){return t&amp;&amp;!t.skip}function h(t,e,i,n,a){var o;if(n&amp;&amp;a){for(t.moveTo(e[0].x,e[0].y),o=1;o&lt;n;++o)r.canvas.lineTo(t,e[o-1],e[o]);for(t.lineTo(i[a-1].x,i[a-1].y),o=a-1;o&gt;0;--o)r.canvas.lineTo(t,i[o],i[o-1],!0)}}e.exports={id:\&#34;filler\&#34;,afterDatasetsUpdate:function(t,e){var i,n,r,d,h,c,f,g=(t.data.datasets||[]).length,m=e.propagate,p=[];for(n=0;n&lt;g;++n)d=null,(r=(i=t.getDatasetMeta(n)).dataset)&amp;&amp;r._model&amp;&amp;r instanceof a.Line&amp;&amp;(d={visible:t.isDatasetVisible(n),fill:s(r,n,g),chart:t,el:r}),i.$filler=d,p.push(d);for(n=0;n&lt;g;++n)(d=p[n])&amp;&amp;(d.fill=u(p,n,m),d.boundary=l(d),d.mapper=(void 0,f=void 0,c=(h=d).fill,f=\&#34;dataset\&#34;,!1===c?null:(isFinite(c)||(f=\&#34;boundary\&#34;),o[f](h))))},beforeDatasetDraw:function(t,e){var i=e.meta.$filler;if(i){var a=t.ctx,o=i.el,s=o._view,l=o._children||[],u=i.mapper,c=s.backgroundColor||n.global.defaultColor;u&amp;&amp;c&amp;&amp;l.length&amp;&amp;(r.canvas.clipArea(a,t.chartArea),function(t,e,i,n,a,r){var o,s,l,u,c,f,g,m=e.length,p=n.spanGaps,v=[],y=[],b=0,x=0;for(t.beginPath(),o=0,s=m+!!r;o&lt;s;++o)c=i(u=e[l=o%m]._view,l,n),f=d(u),g=d(c),f&amp;&amp;g?(b=v.push(u),x=y.push(c)):b&amp;&amp;x&amp;&amp;(p?(f&amp;&amp;v.push(u),g&amp;&amp;y.push(c)):(h(t,v,y,b,x),b=x=0,v=[],y=[]));h(t,v,y,b,x),t.closePath(),t.fillStyle=a,t.fill()}(a,l,u,s,c,o._loop),r.canvas.unclipArea(a))}}}},{25:25,40:40,45:45}],51:[function(t,e,i){\&#34;use strict\&#34;;var n=t(25),a=t(26),r=t(45),o=t(30),s=r.noop;function l(t,e){return t.usePointStyle?e*Math.SQRT2:t.boxWidth}n._set(\&#34;global\&#34;,{legend:{display:!0,position:\&#34;top\&#34;,fullWidth:!0,reverse:!1,weight:1e3,onClick:function(t,e){var i=e.datasetIndex,n=this.chart,a=n.getDatasetMeta(i);a.hidden=null===a.hidden?!n.data.datasets[i].hidden:null,n.update()},onHover:null,labels:{boxWidth:40,padding:10,generateLabels:function(t){var e=t.data;return r.isArray(e.datasets)?e.datasets.map(function(e,i){return{text:e.label,fillStyle:r.isArray(e.backgroundColor)?e.backgroundColor[0]:e.backgroundColor,hidden:!t.isDatasetVisible(i),lineCap:e.borderCapStyle,lineDash:e.borderDash,lineDashOffset:e.borderDashOffset,lineJoin:e.borderJoinStyle,lineWidth:e.borderWidth,strokeStyle:e.borderColor,pointStyle:e.pointStyle,datasetIndex:i}},this):[]}}},legendCallback:function(t){var e=[];e.push(&#39;&lt;ul class=\&#34;&#39;+t.id+&#39;-legend\&#34;&gt;&#39;);for(var i=0;i&lt;t.data.datasets.length;i++)e.push(&#39;&lt;li&gt;&lt;span style=\&#34;background-color:&#39;+t.data.datasets[i].backgroundColor+&#39;\&#34;&gt;&lt;/span&gt;&#39;),t.data.datasets[i].label&amp;&amp;e.push(t.data.datasets[i].label),e.push(\&#34;&lt;/li&gt;\&#34;);return e.push(\&#34;&lt;/ul&gt;\&#34;),e.join(\&#34;\&#34;)}});var u=a.extend({initialize:function(t){r.extend(this,t),this.legendHitBoxes=[],this.doughnutMode=!1},beforeUpdate:s,update:function(t,e,i){var n=this;return n.beforeUpdate(),n.maxWidth=t,n.maxHeight=e,n.margins=i,n.beforeSetDimensions(),n.setDimensions(),n.afterSetDimensions(),n.beforeBuildLabels(),n.buildLabels(),n.afterBuildLabels(),n.beforeFit(),n.fit(),n.afterFit(),n.afterUpdate(),n.minSize},afterUpdate:s,beforeSetDimensions:s,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:s,beforeBuildLabels:s,buildLabels:function(){var t=this,e=t.options.labels||{},i=r.callback(e.generateLabels,[t.chart],t)||[];e.filter&amp;&amp;(i=i.filter(function(i){return e.filter(i,t.chart.data)})),t.options.reverse&amp;&amp;i.reverse(),t.legendItems=i},afterBuildLabels:s,beforeFit:s,fit:function(){var t=this,e=t.options,i=e.labels,a=e.display,o=t.ctx,s=n.global,u=r.valueOrDefault,d=u(i.fontSize,s.defaultFontSize),h=u(i.fontStyle,s.defaultFontStyle),c=u(i.fontFamily,s.defaultFontFamily),f=r.fontString(d,h,c),g=t.legendHitBoxes=[],m=t.minSize,p=t.isHorizontal();if(p?(m.width=t.maxWidth,m.height=a?10:0):(m.width=a?10:0,m.height=t.maxHeight),a)if(o.font=f,p){var v=t.lineWidths=[0],y=t.legendItems.length?d+i.padding:0;o.textAlign=\&#34;left\&#34;,o.textBaseline=\&#34;top\&#34;,r.each(t.legendItems,function(e,n){var a=l(i,d)+d/2+o.measureText(e.text).width;v[v.length-1]+a+i.padding&gt;=t.width&amp;&amp;(y+=d+i.padding,v[v.length]=t.left),g[n]={left:0,top:0,width:a,height:d},v[v.length-1]+=a+i.padding}),m.height+=y}else{var b=i.padding,x=t.columnWidths=[],_=i.padding,k=0,w=0,M=d+b;r.each(t.legendItems,function(t,e){var n=l(i,d)+d/2+o.measureText(t.text).width;w+M&gt;m.height&amp;&amp;(_+=k+i.padding,x.push(k),k=0,w=0),k=Math.max(k,n),w+=M,g[e]={left:0,top:0,width:n,height:d}}),_+=k,x.push(k),m.width+=_}t.width=m.width,t.height=m.height},afterFit:s,isHorizontal:function(){return\&#34;top\&#34;===this.options.position||\&#34;bottom\&#34;===this.options.position},draw:function(){var t=this,e=t.options,i=e.labels,a=n.global,o=a.elements.line,s=t.width,u=t.lineWidths;if(e.display){var d,h=t.ctx,c=r.valueOrDefault,f=c(i.fontColor,a.defaultFontColor),g=c(i.fontSize,a.defaultFontSize),m=c(i.fontStyle,a.defaultFontStyle),p=c(i.fontFamily,a.defaultFontFamily),v=r.fontString(g,m,p);h.textAlign=\&#34;left\&#34;,h.textBaseline=\&#34;middle\&#34;,h.lineWidth=.5,h.strokeStyle=f,h.fillStyle=f,h.font=v;var y=l(i,g),b=t.legendHitBoxes,x=t.isHorizontal();d=x?{x:t.left+(s-u[0])/2,y:t.top+i.padding,line:0}:{x:t.left+i.padding,y:t.top+i.padding,line:0};var _=g+i.padding;r.each(t.legendItems,function(n,l){var f,m,p,v,k,w=h.measureText(n.text).width,M=y+g/2+w,S=d.x,D=d.y;x?S+M&gt;=s&amp;&amp;(D=d.y+=_,d.line++,S=d.x=t.left+(s-u[d.line])/2):D+_&gt;t.bottom&amp;&amp;(S=d.x=S+t.columnWidths[d.line]+i.padding,D=d.y=t.top+i.padding,d.line++),function(t,i,n){if(!(isNaN(y)||y&lt;=0)){h.save(),h.fillStyle=c(n.fillStyle,a.defaultColor),h.lineCap=c(n.lineCap,o.borderCapStyle),h.lineDashOffset=c(n.lineDashOffset,o.borderDashOffset),h.lineJoin=c(n.lineJoin,o.borderJoinStyle),h.lineWidth=c(n.lineWidth,o.borderWidth),h.strokeStyle=c(n.strokeStyle,a.defaultColor);var s=0===c(n.lineWidth,o.borderWidth);if(h.setLineDash&amp;&amp;h.setLineDash(c(n.lineDash,o.borderDash)),e.labels&amp;&amp;e.labels.usePointStyle){var l=g*Math.SQRT2/2,u=l/Math.SQRT2,d=t+u,f=i+u;r.canvas.drawPoint(h,n.pointStyle,l,d,f)}else s||h.strokeRect(t,i,y,g),h.fillRect(t,i,y,g);h.restore()}}(S,D,n),b[l].left=S,b[l].top=D,f=n,m=w,v=y+(p=g/2)+S,k=D+p,h.fillText(f.text,v,k),f.hidden&amp;&amp;(h.beginPath(),h.lineWidth=2,h.moveTo(v,k),h.lineTo(v+m,k),h.stroke()),x?d.x+=M+i.padding:d.y+=_})}},handleEvent:function(t){var e=this,i=e.options,n=\&#34;mouseup\&#34;===t.type?\&#34;click\&#34;:t.type,a=!1;if(\&#34;mousemove\&#34;===n){if(!i.onHover)return}else{if(\&#34;click\&#34;!==n)return;if(!i.onClick)return}var r=t.x,o=t.y;if(r&gt;=e.left&amp;&amp;r&lt;=e.right&amp;&amp;o&gt;=e.top&amp;&amp;o&lt;=e.bottom)for(var s=e.legendHitBoxes,l=0;l&lt;s.length;++l){var u=s[l];if(r&gt;=u.left&amp;&amp;r&lt;=u.left+u.width&amp;&amp;o&gt;=u.top&amp;&amp;o&lt;=u.top+u.height){if(\&#34;click\&#34;===n){i.onClick.call(e,t.native,e.legendItems[l]),a=!0;break}if(\&#34;mousemove\&#34;===n){i.onHover.call(e,t.native,e.legendItems[l]),a=!0;break}}}return a}});function d(t,e){var i=new u({ctx:t.ctx,options:e,chart:t});o.configure(t,i,e),o.addBox(t,i),t.legend=i}e.exports={id:\&#34;legend\&#34;,_element:u,beforeInit:function(t){var e=t.options.legend;e&amp;&amp;d(t,e)},beforeUpdate:function(t){var e=t.options.legend,i=t.legend;e?(r.mergeIf(e,n.global.legend),i?(o.configure(t,i,e),i.options=e):d(t,e)):i&amp;&amp;(o.removeBox(t,i),delete t.legend)},afterEvent:function(t,e){var i=t.legend;i&amp;&amp;i.handleEvent(e)}}},{25:25,26:26,30:30,45:45}],52:[function(t,e,i){\&#34;use strict\&#34;;var n=t(25),a=t(26),r=t(45),o=t(30),s=r.noop;n._set(\&#34;global\&#34;,{title:{display:!1,fontStyle:\&#34;bold\&#34;,fullWidth:!0,lineHeight:1.2,padding:10,position:\&#34;top\&#34;,text:\&#34;\&#34;,weight:2e3}});var l=a.extend({initialize:function(t){r.extend(this,t),this.legendHitBoxes=[]},beforeUpdate:s,update:function(t,e,i){var n=this;return n.beforeUpdate(),n.maxWidth=t,n.maxHeight=e,n.margins=i,n.beforeSetDimensions(),n.setDimensions(),n.afterSetDimensions(),n.beforeBuildLabels(),n.buildLabels(),n.afterBuildLabels(),n.beforeFit(),n.fit(),n.afterFit(),n.afterUpdate(),n.minSize},afterUpdate:s,beforeSetDimensions:s,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:s,beforeBuildLabels:s,buildLabels:s,afterBuildLabels:s,beforeFit:s,fit:function(){var t=r.valueOrDefault,e=this.options,i=e.display,a=t(e.fontSize,n.global.defaultFontSize),o=this.minSize,s=r.isArray(e.text)?e.text.length:1,l=r.options.toLineHeight(e.lineHeight,a),u=i?s*l+2*e.padding:0;this.isHorizontal()?(o.width=this.maxWidth,o.height=u):(o.width=u,o.height=this.maxHeight),this.width=o.width,this.height=o.height},afterFit:s,isHorizontal:function(){var t=this.options.position;return\&#34;top\&#34;===t||\&#34;bottom\&#34;===t},draw:function(){var t=this.ctx,e=r.valueOrDefault,i=this.options,a=n.global;if(i.display){var o,s,l,u=e(i.fontSize,a.defaultFontSize),d=e(i.fontStyle,a.defaultFontStyle),h=e(i.fontFamily,a.defaultFontFamily),c=r.fontString(u,d,h),f=r.options.toLineHeight(i.lineHeight,u),g=f/2+i.padding,m=0,p=this.top,v=this.left,y=this.bottom,b=this.right;t.fillStyle=e(i.fontColor,a.defaultFontColor),t.font=c,this.isHorizontal()?(s=v+(b-v)/2,l=p+g,o=b-v):(s=\&#34;left\&#34;===i.position?v+g:b-g,l=p+(y-p)/2,o=y-p,m=Math.PI*(\&#34;left\&#34;===i.position?-.5:.5)),t.save(),t.translate(s,l),t.rotate(m),t.textAlign=\&#34;center\&#34;,t.textBaseline=\&#34;middle\&#34;;var x=i.text;if(r.isArray(x))for(var _=0,k=0;k&lt;x.length;++k)t.fillText(x[k],0,_,o),_+=f;else t.fillText(x,0,0,o);t.restore()}}});function u(t,e){var i=new l({ctx:t.ctx,options:e,chart:t});o.configure(t,i,e),o.addBox(t,i),t.titleBlock=i}e.exports={id:\&#34;title\&#34;,_element:l,beforeInit:function(t){var e=t.options.title;e&amp;&amp;u(t,e)},beforeUpdate:function(t){var e=t.options.title,i=t.titleBlock;e?(r.mergeIf(e,n.global.title),i?(o.configure(t,i,e),i.options=e):u(t,e)):i&amp;&amp;(o.removeBox(t,i),delete t.titleBlock)}}},{25:25,26:26,30:30,45:45}],53:[function(t,e,i){\&#34;use strict\&#34;;e.exports=function(t){var e=t.Scale.extend({getLabels:function(){var t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels},determineDataLimits:function(){var t,e=this,i=e.getLabels();e.minIndex=0,e.maxIndex=i.length-1,void 0!==e.options.ticks.min&amp;&amp;(t=i.indexOf(e.options.ticks.min),e.minIndex=-1!==t?t:e.minIndex),void 0!==e.options.ticks.max&amp;&amp;(t=i.indexOf(e.options.ticks.max),e.maxIndex=-1!==t?t:e.maxIndex),e.min=i[e.minIndex],e.max=i[e.maxIndex]},buildTicks:function(){var t=this.getLabels();this.ticks=0===this.minIndex&amp;&amp;this.maxIndex===t.length-1?t:t.slice(this.minIndex,this.maxIndex+1)},getLabelForIndex:function(t,e){var i=this.chart.data,n=this.isHorizontal();return i.yLabels&amp;&amp;!n?this.getRightValue(i.datasets[e].data[t]):this.ticks[t-this.minIndex]},getPixelForValue:function(t,e){var i,n=this,a=n.options.offset,r=Math.max(n.maxIndex+1-n.minIndex-(a?0:1),1);if(null!=t&amp;&amp;(i=n.isHorizontal()?t.x:t.y),void 0!==i||void 0!==t&amp;&amp;isNaN(e)){t=i||t;var o=n.getLabels().indexOf(t);e=-1!==o?o:e}if(n.isHorizontal()){var s=n.width/r,l=s*(e-n.minIndex);return a&amp;&amp;(l+=s/2),n.left+Math.round(l)}var u=n.height/r,d=u*(e-n.minIndex);return a&amp;&amp;(d+=u/2),n.top+Math.round(d)},getPixelForTick:function(t){return this.getPixelForValue(this.ticks[t],t+this.minIndex,null)},getValueForPixel:function(t){var e=this.options.offset,i=Math.max(this._ticks.length-(e?0:1),1),n=this.isHorizontal(),a=(n?this.width:this.height)/i;return t-=n?this.left:this.top,e&amp;&amp;(t-=a/2),(t&lt;=0?0:Math.round(t/a))+this.minIndex},getBasePixel:function(){return this.bottom}});t.scaleService.registerScaleType(\&#34;category\&#34;,e,{position:\&#34;bottom\&#34;})}},{}],54:[function(t,e,i){\&#34;use strict\&#34;;var n=t(25),a=t(45),r=t(34);e.exports=function(t){var e={position:\&#34;left\&#34;,ticks:{callback:r.formatters.linear}},i=t.LinearScaleBase.extend({determineDataLimits:function(){var t=this,e=t.options,i=t.chart,n=i.data.datasets,r=t.isHorizontal();function o(e){return r?e.xAxisID===t.id:e.yAxisID===t.id}t.min=null,t.max=null;var s=e.stacked;if(void 0===s&amp;&amp;a.each(n,function(t,e){if(!s){var n=i.getDatasetMeta(e);i.isDatasetVisible(e)&amp;&amp;o(n)&amp;&amp;void 0!==n.stack&amp;&amp;(s=!0)}}),e.stacked||s){var l={};a.each(n,function(n,r){var s=i.getDatasetMeta(r),u=[s.type,void 0===e.stacked&amp;&amp;void 0===s.stack?r:\&#34;\&#34;,s.stack].join(\&#34;.\&#34;);void 0===l[u]&amp;&amp;(l[u]={positiveValues:[],negativeValues:[]});var d=l[u].positiveValues,h=l[u].negativeValues;i.isDatasetVisible(r)&amp;&amp;o(s)&amp;&amp;a.each(n.data,function(i,n){var a=+t.getRightValue(i);isNaN(a)||s.data[n].hidden||(d[n]=d[n]||0,h[n]=h[n]||0,e.relativePoints?d[n]=100:a&lt;0?h[n]+=a:d[n]+=a)})}),a.each(l,function(e){var i=e.positiveValues.concat(e.negativeValues),n=a.min(i),r=a.max(i);t.min=null===t.min?n:Math.min(t.min,n),t.max=null===t.max?r:Math.max(t.max,r)})}else a.each(n,function(e,n){var r=i.getDatasetMeta(n);i.isDatasetVisible(n)&amp;&amp;o(r)&amp;&amp;a.each(e.data,function(e,i){var n=+t.getRightValue(e);isNaN(n)||r.data[i].hidden||(null===t.min?t.min=n:n&lt;t.min&amp;&amp;(t.min=n),null===t.max?t.max=n:n&gt;t.max&amp;&amp;(t.max=n))})});t.min=isFinite(t.min)&amp;&amp;!isNaN(t.min)?t.min:0,t.max=isFinite(t.max)&amp;&amp;!isNaN(t.max)?t.max:1,this.handleTickRangeOptions()},getTickLimit:function(){var t,e=this.options.ticks;if(this.isHorizontal())t=Math.min(e.maxTicksLimit?e.maxTicksLimit:11,Math.ceil(this.width/50));else{var i=a.valueOrDefault(e.fontSize,n.global.defaultFontSize);t=Math.min(e.maxTicksLimit?e.maxTicksLimit:11,Math.ceil(this.height/(2*i)))}return t},handleDirectionalChanges:function(){this.isHorizontal()||this.ticks.reverse()},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},getPixelForValue:function(t){var e=this.start,i=+this.getRightValue(t),n=this.end-e;return this.isHorizontal()?this.left+this.width/n*(i-e):this.bottom-this.height/n*(i-e)},getValueForPixel:function(t){var e=this.isHorizontal(),i=e?this.width:this.height,n=(e?t-this.left:this.bottom-t)/i;return this.start+(this.end-this.start)*n},getPixelForTick:function(t){return this.getPixelForValue(this.ticksAsNumbers[t])}});t.scaleService.registerScaleType(\&#34;linear\&#34;,i,e)}},{25:25,34:34,45:45}],55:[function(t,e,i){\&#34;use strict\&#34;;var n=t(45);e.exports=function(t){var e=n.noop;t.LinearScaleBase=t.Scale.extend({getRightValue:function(e){return\&#34;string\&#34;==typeof e?+e:t.Scale.prototype.getRightValue.call(this,e)},handleTickRangeOptions:function(){var t=this,e=t.options.ticks;if(e.beginAtZero){var i=n.sign(t.min),a=n.sign(t.max);i&lt;0&amp;&amp;a&lt;0?t.max=0:i&gt;0&amp;&amp;a&gt;0&amp;&amp;(t.min=0)}var r=void 0!==e.min||void 0!==e.suggestedMin,o=void 0!==e.max||void 0!==e.suggestedMax;void 0!==e.min?t.min=e.min:void 0!==e.suggestedMin&amp;&amp;(null===t.min?t.min=e.suggestedMin:t.min=Math.min(t.min,e.suggestedMin)),void 0!==e.max?t.max=e.max:void 0!==e.suggestedMax&amp;&amp;(null===t.max?t.max=e.suggestedMax:t.max=Math.max(t.max,e.suggestedMax)),r!==o&amp;&amp;t.min&gt;=t.max&amp;&amp;(r?t.max=t.min+1:t.min=t.max-1),t.min===t.max&amp;&amp;(t.max++,e.beginAtZero||t.min--)},getTickLimit:e,handleDirectionalChanges:e,buildTicks:function(){var t=this,e=t.options.ticks,i=t.getTickLimit(),a={maxTicks:i=Math.max(2,i),min:e.min,max:e.max,stepSize:n.valueOrDefault(e.fixedStepSize,e.stepSize)},r=t.ticks=function(t,e){var i,a=[];if(t.stepSize&amp;&amp;t.stepSize&gt;0)i=t.stepSize;else{var r=n.niceNum(e.max-e.min,!1);i=n.niceNum(r/(t.maxTicks-1),!0)}var o=Math.floor(e.min/i)*i,s=Math.ceil(e.max/i)*i;t.min&amp;&amp;t.max&amp;&amp;t.stepSize&amp;&amp;n.almostWhole((t.max-t.min)/t.stepSize,i/1e3)&amp;&amp;(o=t.min,s=t.max);var l=(s-o)/i;l=n.almostEquals(l,Math.round(l),i/1e3)?Math.round(l):Math.ceil(l);var u=1;i&lt;1&amp;&amp;(u=Math.pow(10,i.toString().length-2),o=Math.round(o*u)/u,s=Math.round(s*u)/u),a.push(void 0!==t.min?t.min:o);for(var d=1;d&lt;l;++d)a.push(Math.round((o+d*i)*u)/u);return a.push(void 0!==t.max?t.max:s),a}(a,t);t.handleDirectionalChanges(),t.max=n.max(r),t.min=n.min(r),e.reverse?(r.reverse(),t.start=t.max,t.end=t.min):(t.start=t.min,t.end=t.max)},convertTicksToLabels:function(){this.ticksAsNumbers=this.ticks.slice(),this.zeroLineIndex=this.ticks.indexOf(0),t.Scale.prototype.convertTicksToLabels.call(this)}})}},{45:45}],56:[function(t,e,i){\&#34;use strict\&#34;;var n=t(45),a=t(34);e.exports=function(t){var e={position:\&#34;left\&#34;,ticks:{callback:a.formatters.logarithmic}},i=t.Scale.extend({determineDataLimits:function(){var t=this,e=t.options,i=t.chart,a=i.data.datasets,r=t.isHorizontal();function o(e){return r?e.xAxisID===t.id:e.yAxisID===t.id}t.min=null,t.max=null,t.minNotZero=null;var s=e.stacked;if(void 0===s&amp;&amp;n.each(a,function(t,e){if(!s){var n=i.getDatasetMeta(e);i.isDatasetVisible(e)&amp;&amp;o(n)&amp;&amp;void 0!==n.stack&amp;&amp;(s=!0)}}),e.stacked||s){var l={};n.each(a,function(a,r){var s=i.getDatasetMeta(r),u=[s.type,void 0===e.stacked&amp;&amp;void 0===s.stack?r:\&#34;\&#34;,s.stack].join(\&#34;.\&#34;);i.isDatasetVisible(r)&amp;&amp;o(s)&amp;&amp;(void 0===l[u]&amp;&amp;(l[u]=[]),n.each(a.data,function(e,i){var n=l[u],a=+t.getRightValue(e);isNaN(a)||s.data[i].hidden||a&lt;0||(n[i]=n[i]||0,n[i]+=a)}))}),n.each(l,function(e){if(e.length&gt;0){var i=n.min(e),a=n.max(e);t.min=null===t.min?i:Math.min(t.min,i),t.max=null===t.max?a:Math.max(t.max,a)}})}else n.each(a,function(e,a){var r=i.getDatasetMeta(a);i.isDatasetVisible(a)&amp;&amp;o(r)&amp;&amp;n.each(e.data,function(e,i){var n=+t.getRightValue(e);isNaN(n)||r.data[i].hidden||n&lt;0||(null===t.min?t.min=n:n&lt;t.min&amp;&amp;(t.min=n),null===t.max?t.max=n:n&gt;t.max&amp;&amp;(t.max=n),0!==n&amp;&amp;(null===t.minNotZero||n&lt;t.minNotZero)&amp;&amp;(t.minNotZero=n))})});this.handleTickRangeOptions()},handleTickRangeOptions:function(){var t=this,e=t.options.ticks,i=n.valueOrDefault;t.min=i(e.min,t.min),t.max=i(e.max,t.max),t.min===t.max&amp;&amp;(0!==t.min&amp;&amp;null!==t.min?(t.min=Math.pow(10,Math.floor(n.log10(t.min))-1),t.max=Math.pow(10,Math.floor(n.log10(t.max))+1)):(t.min=1,t.max=10)),null===t.min&amp;&amp;(t.min=Math.pow(10,Math.floor(n.log10(t.max))-1)),null===t.max&amp;&amp;(t.max=0!==t.min?Math.pow(10,Math.floor(n.log10(t.min))+1):10),null===t.minNotZero&amp;&amp;(t.min&gt;0?t.minNotZero=t.min:t.max&lt;1?t.minNotZero=Math.pow(10,Math.floor(n.log10(t.max))):t.minNotZero=1)},buildTicks:function(){var t=this,e=t.options.ticks,i=!t.isHorizontal(),a={min:e.min,max:e.max},r=t.ticks=function(t,e){var i,a,r=[],o=n.valueOrDefault,s=o(t.min,Math.pow(10,Math.floor(n.log10(e.min)))),l=Math.floor(n.log10(e.max)),u=Math.ceil(e.max/Math.pow(10,l));0===s?(i=Math.floor(n.log10(e.minNotZero)),a=Math.floor(e.minNotZero/Math.pow(10,i)),r.push(s),s=a*Math.pow(10,i)):(i=Math.floor(n.log10(s)),a=Math.floor(s/Math.pow(10,i)));for(var d=i&lt;0?Math.pow(10,Math.abs(i)):1;r.push(s),10==++a&amp;&amp;(a=1,d=++i&gt;=0?1:d),s=Math.round(a*Math.pow(10,i)*d)/d,i&lt;l||i===l&amp;&amp;a&lt;u;);var h=o(t.max,s);return r.push(h),r}(a,t);t.max=n.max(r),t.min=n.min(r),e.reverse?(i=!i,t.start=t.max,t.end=t.min):(t.start=t.min,t.end=t.max),i&amp;&amp;r.reverse()},convertTicksToLabels:function(){this.tickValues=this.ticks.slice(),t.Scale.prototype.convertTicksToLabels.call(this)},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},getPixelForTick:function(t){return this.getPixelForValue(this.tickValues[t])},_getFirstTickValue:function(t){var e=Math.floor(n.log10(t));return Math.floor(t/Math.pow(10,e))*Math.pow(10,e)},getPixelForValue:function(e){var i,a,r,o,s,l=this,u=l.options.ticks.reverse,d=n.log10,h=l._getFirstTickValue(l.minNotZero),c=0;return e=+l.getRightValue(e),u?(r=l.end,o=l.start,s=-1):(r=l.start,o=l.end,s=1),l.isHorizontal()?(i=l.width,a=u?l.right:l.left):(i=l.height,s*=-1,a=u?l.top:l.bottom),e!==r&amp;&amp;(0===r&amp;&amp;(i-=c=n.getValueOrDefault(l.options.ticks.fontSize,t.defaults.global.defaultFontSize),r=h),0!==e&amp;&amp;(c+=i/(d(o)-d(r))*(d(e)-d(r))),a+=s*c),a},getValueForPixel:function(e){var i,a,r,o,s=this,l=s.options.ticks.reverse,u=n.log10,d=s._getFirstTickValue(s.minNotZero);if(l?(a=s.end,r=s.start):(a=s.start,r=s.end),s.isHorizontal()?(i=s.width,o=l?s.right-e:e-s.left):(i=s.height,o=l?e-s.top:s.bottom-e),o!==a){if(0===a){var h=n.getValueOrDefault(s.options.ticks.fontSize,t.defaults.global.defaultFontSize);o-=h,i-=h,a=d}o*=u(r)-u(a),o/=i,o=Math.pow(10,u(a)+o)}return o}});t.scaleService.registerScaleType(\&#34;logarithmic\&#34;,i,e)}},{34:34,45:45}],57:[function(t,e,i){\&#34;use strict\&#34;;var n=t(25),a=t(45),r=t(34);e.exports=function(t){var e=n.global,i={display:!0,animate:!0,position:\&#34;chartArea\&#34;,angleLines:{display:!0,color:\&#34;rgba(0, 0, 0, 0.1)\&#34;,lineWidth:1},gridLines:{circular:!1},ticks:{showLabelBackdrop:!0,backdropColor:\&#34;rgba(255,255,255,0.75)\&#34;,backdropPaddingY:2,backdropPaddingX:2,callback:r.formatters.linear},pointLabels:{display:!0,fontSize:10,callback:function(t){return t}}};function o(t){var e=t.options;return e.angleLines.display||e.pointLabels.display?t.chart.data.labels.length:0}function s(t){var i=t.options.pointLabels,n=a.valueOrDefault(i.fontSize,e.defaultFontSize),r=a.valueOrDefault(i.fontStyle,e.defaultFontStyle),o=a.valueOrDefault(i.fontFamily,e.defaultFontFamily);return{size:n,style:r,family:o,font:a.fontString(n,r,o)}}function l(t,e,i,n,a){return t===n||t===a?{start:e-i/2,end:e+i/2}:t&lt;n||t&gt;a?{start:e-i-5,end:e}:{start:e,end:e+i+5}}function u(t,e,i,n){if(a.isArray(e))for(var r=i.y,o=1.5*n,s=0;s&lt;e.length;++s)t.fillText(e[s],i.x,r),r+=o;else t.fillText(e,i.x,i.y)}function d(t){return a.isNumber(t)?t:0}var h=t.LinearScaleBase.extend({setDimensions:function(){var t=this,i=t.options,n=i.ticks;t.width=t.maxWidth,t.height=t.maxHeight,t.xCenter=Math.round(t.width/2),t.yCenter=Math.round(t.height/2);var r=a.min([t.height,t.width]),o=a.valueOrDefault(n.fontSize,e.defaultFontSize);t.drawingArea=i.display?r/2-(o/2+n.backdropPaddingY):r/2},determineDataLimits:function(){var t=this,e=t.chart,i=Number.POSITIVE_INFINITY,n=Number.NEGATIVE_INFINITY;a.each(e.data.datasets,function(r,o){if(e.isDatasetVisible(o)){var s=e.getDatasetMeta(o);a.each(r.data,function(e,a){var r=+t.getRightValue(e);isNaN(r)||s.data[a].hidden||(i=Math.min(r,i),n=Math.max(r,n))})}}),t.min=i===Number.POSITIVE_INFINITY?0:i,t.max=n===Number.NEGATIVE_INFINITY?0:n,t.handleTickRangeOptions()},getTickLimit:function(){var t=this.options.ticks,i=a.valueOrDefault(t.fontSize,e.defaultFontSize);return Math.min(t.maxTicksLimit?t.maxTicksLimit:11,Math.ceil(this.drawingArea/(1.5*i)))},convertTicksToLabels:function(){t.LinearScaleBase.prototype.convertTicksToLabels.call(this),this.pointLabels=this.chart.data.labels.map(this.options.pointLabels.callback,this)},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},fit:function(){var t,e;this.options.pointLabels.display?function(t){var e,i,n,r=s(t),u=Math.min(t.height/2,t.width/2),d={r:t.width,l:0,t:t.height,b:0},h={};t.ctx.font=r.font,t._pointLabelSizes=[];var c,f,g,m=o(t);for(e=0;e&lt;m;e++){n=t.getPointPosition(e,u),c=t.ctx,f=r.size,g=t.pointLabels[e]||\&#34;\&#34;,i=a.isArray(g)?{w:a.longestText(c,c.font,g),h:g.length*f+1.5*(g.length-1)*f}:{w:c.measureText(g).width,h:f},t._pointLabelSizes[e]=i;var p=t.getIndexAngle(e),v=a.toDegrees(p)%360,y=l(v,n.x,i.w,0,180),b=l(v,n.y,i.h,90,270);y.start&lt;d.l&amp;&amp;(d.l=y.start,h.l=p),y.end&gt;d.r&amp;&amp;(d.r=y.end,h.r=p),b.start&lt;d.t&amp;&amp;(d.t=b.start,h.t=p),b.end&gt;d.b&amp;&amp;(d.b=b.end,h.b=p)}t.setReductions(u,d,h)}(this):(t=this,e=Math.min(t.height/2,t.width/2),t.drawingArea=Math.round(e),t.setCenterPoint(0,0,0,0))},setReductions:function(t,e,i){var n=e.l/Math.sin(i.l),a=Math.max(e.r-this.width,0)/Math.sin(i.r),r=-e.t/Math.cos(i.t),o=-Math.max(e.b-this.height,0)/Math.cos(i.b);n=d(n),a=d(a),r=d(r),o=d(o),this.drawingArea=Math.min(Math.round(t-(n+a)/2),Math.round(t-(r+o)/2)),this.setCenterPoint(n,a,r,o)},setCenterPoint:function(t,e,i,n){var a=this,r=a.width-e-a.drawingArea,o=t+a.drawingArea,s=i+a.drawingArea,l=a.height-n-a.drawingArea;a.xCenter=Math.round((o+r)/2+a.left),a.yCenter=Math.round((s+l)/2+a.top)},getIndexAngle:function(t){return t*(2*Math.PI/o(this))+(this.chart.options&amp;&amp;this.chart.options.startAngle?this.chart.options.startAngle:0)*Math.PI*2/360},getDistanceFromCenterForValue:function(t){if(null===t)return 0;var e=this.drawingArea/(this.max-this.min);return this.options.ticks.reverse?(this.max-t)*e:(t-this.min)*e},getPointPosition:function(t,e){var i=this.getIndexAngle(t)-Math.PI/2;return{x:Math.round(Math.cos(i)*e)+this.xCenter,y:Math.round(Math.sin(i)*e)+this.yCenter}},getPointPositionForValue:function(t,e){return this.getPointPosition(t,this.getDistanceFromCenterForValue(e))},getBasePosition:function(){var t=this.min,e=this.max;return this.getPointPositionForValue(0,this.beginAtZero?0:t&lt;0&amp;&amp;e&lt;0?e:t&gt;0&amp;&amp;e&gt;0?t:0)},draw:function(){var t=this,i=t.options,n=i.gridLines,r=i.ticks,l=a.valueOrDefault;if(i.display){var d=t.ctx,h=this.getIndexAngle(0),c=l(r.fontSize,e.defaultFontSize),f=l(r.fontStyle,e.defaultFontStyle),g=l(r.fontFamily,e.defaultFontFamily),m=a.fontString(c,f,g);a.each(t.ticks,function(i,s){if(s&gt;0||r.reverse){var u=t.getDistanceFromCenterForValue(t.ticksAsNumbers[s]);if(n.display&amp;&amp;0!==s&amp;&amp;function(t,e,i,n){var r=t.ctx;if(r.strokeStyle=a.valueAtIndexOrDefault(e.color,n-1),r.lineWidth=a.valueAtIndexOrDefault(e.lineWidth,n-1),t.options.gridLines.circular)r.beginPath(),r.arc(t.xCenter,t.yCenter,i,0,2*Math.PI),r.closePath(),r.stroke();else{var s=o(t);if(0===s)return;r.beginPath();var l=t.getPointPosition(0,i);r.moveTo(l.x,l.y);for(var u=1;u&lt;s;u++)l=t.getPointPosition(u,i),r.lineTo(l.x,l.y);r.closePath(),r.stroke()}}(t,n,u,s),r.display){var f=l(r.fontColor,e.defaultFontColor);if(d.font=m,d.save(),d.translate(t.xCenter,t.yCenter),d.rotate(h),r.showLabelBackdrop){var g=d.measureText(i).width;d.fillStyle=r.backdropColor,d.fillRect(-g/2-r.backdropPaddingX,-u-c/2-r.backdropPaddingY,g+2*r.backdropPaddingX,c+2*r.backdropPaddingY)}d.textAlign=\&#34;center\&#34;,d.textBaseline=\&#34;middle\&#34;,d.fillStyle=f,d.fillText(i,0,-u),d.restore()}}}),(i.angleLines.display||i.pointLabels.display)&amp;&amp;function(t){var i=t.ctx,n=t.options,r=n.angleLines,l=n.pointLabels;i.lineWidth=r.lineWidth,i.strokeStyle=r.color;var d,h,c,f,g=t.getDistanceFromCenterForValue(n.ticks.reverse?t.min:t.max),m=s(t);i.textBaseline=\&#34;top\&#34;;for(var p=o(t)-1;p&gt;=0;p--){if(r.display){var v=t.getPointPosition(p,g);i.beginPath(),i.moveTo(t.xCenter,t.yCenter),i.lineTo(v.x,v.y),i.stroke(),i.closePath()}if(l.display){var y=t.getPointPosition(p,g+5),b=a.valueAtIndexOrDefault(l.fontColor,p,e.defaultFontColor);i.font=m.font,i.fillStyle=b;var x=t.getIndexAngle(p),_=a.toDegrees(x);i.textAlign=0===(f=_)||180===f?\&#34;center\&#34;:f&lt;180?\&#34;left\&#34;:\&#34;right\&#34;,d=_,h=t._pointLabelSizes[p],c=y,90===d||270===d?c.y-=h.h/2:(d&gt;270||d&lt;90)&amp;&amp;(c.y-=h.h),u(i,t.pointLabels[p]||\&#34;\&#34;,y,m.size)}}}(t)}}});t.scaleService.registerScaleType(\&#34;radialLinear\&#34;,h,i)}},{25:25,34:34,45:45}],58:[function(t,e,i){\&#34;use strict\&#34;;var n=t(6);n=\&#34;function\&#34;==typeof n?n:window.moment;var a=t(25),r=t(45),o=Number.MIN_SAFE_INTEGER||-9007199254740991,s=Number.MAX_SAFE_INTEGER||9007199254740991,l={millisecond:{common:!0,size:1,steps:[1,2,5,10,20,50,100,250,500]},second:{common:!0,size:1e3,steps:[1,2,5,10,30]},minute:{common:!0,size:6e4,steps:[1,2,5,10,30]},hour:{common:!0,size:36e5,steps:[1,2,3,6,12]},day:{common:!0,size:864e5,steps:[1,2,5]},week:{common:!1,size:6048e5,steps:[1,2,3,4]},month:{common:!0,size:2628e6,steps:[1,2,3]},quarter:{common:!1,size:7884e6,steps:[1,2,3,4]},year:{common:!0,size:3154e7}},u=Object.keys(l);function d(t,e){return t-e}function h(t){var e,i,n,a={},r=[];for(e=0,i=t.length;e&lt;i;++e)a[n=t[e]]||(a[n]=!0,r.push(n));return r}function c(t,e,i,n){var a=function(t,e,i){for(var n,a,r,o=0,s=t.length-1;o&gt;=0&amp;&amp;o&lt;=s;){if(a=t[(n=o+s&gt;&gt;1)-1]||null,r=t[n],!a)return{lo:null,hi:r};if(r[e]&lt;i)o=n+1;else{if(!(a[e]&gt;i))return{lo:a,hi:r};s=n-1}}return{lo:r,hi:null}}(t,e,i),r=a.lo?a.hi?a.lo:t[t.length-2]:t[0],o=a.lo?a.hi?a.hi:t[t.length-1]:t[1],s=o[e]-r[e],l=s?(i-r[e])/s:0,u=(o[n]-r[n])*l;return r[n]+u}function f(t,e){var i=e.parser,a=e.parser||e.format;return\&#34;function\&#34;==typeof i?i(t):\&#34;string\&#34;==typeof t&amp;&amp;\&#34;string\&#34;==typeof a?n(t,a):(t instanceof n||(t=n(t)),t.isValid()?t:\&#34;function\&#34;==typeof a?a(t):t)}function g(t,e){if(r.isNullOrUndef(t))return null;var i=e.options.time,n=f(e.getRightValue(t),i);return n.isValid()?(i.round&amp;&amp;n.startOf(i.round),n.valueOf()):null}function m(t){for(var e=u.indexOf(t)+1,i=u.length;e&lt;i;++e)if(l[u[e]].common)return u[e]}function p(t,e,i,a){var o,d=a.time,h=d.unit||function(t,e,i,n){var a,r,o,d=u.length;for(a=u.indexOf(t);a&lt;d-1;++a)if(o=(r=l[u[a]]).steps?r.steps[r.steps.length-1]:s,r.common&amp;&amp;Math.ceil((i-e)/(o*r.size))&lt;=n)return u[a];return u[d-1]}(d.minUnit,t,e,i),c=m(h),f=r.valueOrDefault(d.stepSize,d.unitStepSize),g=\&#34;week\&#34;===h&amp;&amp;d.isoWeekday,p=a.ticks.major.enabled,v=l[h],y=n(t),b=n(e),x=[];for(f||(f=function(t,e,i,n){var a,r,o,s=e-t,u=l[i],d=u.size,h=u.steps;if(!h)return Math.ceil(s/(n*d));for(a=0,r=h.length;a&lt;r&amp;&amp;(o=h[a],!(Math.ceil(s/(d*o))&lt;=n));++a);return o}(t,e,h,i)),g&amp;&amp;(y=y.isoWeekday(g),b=b.isoWeekday(g)),y=y.startOf(g?\&#34;day\&#34;:h),(b=b.startOf(g?\&#34;day\&#34;:h))&lt;e&amp;&amp;b.add(1,h),o=n(y),p&amp;&amp;c&amp;&amp;!g&amp;&amp;!d.round&amp;&amp;(o.startOf(c),o.add(~~((y-o)/(v.size*f))*f,h));o&lt;b;o.add(f,h))x.push(+o);return x.push(+o),x}e.exports=function(t){var e=t.Scale.extend({initialize:function(){if(!n)throw new Error(\&#34;Chart.js - Moment.js could not be found! You must include it before Chart.js to use the time scale. Download at https://momentjs.com\&#34;);this.mergeTicksOptions(),t.Scale.prototype.initialize.call(this)},update:function(){var e=this.options;return e.time&amp;&amp;e.time.format&amp;&amp;console.warn(\&#34;options.time.format is deprecated and replaced by options.time.parser.\&#34;),t.Scale.prototype.update.apply(this,arguments)},getRightValue:function(e){return e&amp;&amp;void 0!==e.t&amp;&amp;(e=e.t),t.Scale.prototype.getRightValue.call(this,e)},determineDataLimits:function(){var t,e,i,a,l,u,c=this,f=c.chart,m=c.options.time,p=m.unit||\&#34;day\&#34;,v=s,y=o,b=[],x=[],_=[];for(t=0,i=f.data.labels.length;t&lt;i;++t)_.push(g(f.data.labels[t],c));for(t=0,i=(f.data.datasets||[]).length;t&lt;i;++t)if(f.isDatasetVisible(t))if(l=f.data.datasets[t].data,r.isObject(l[0]))for(x[t]=[],e=0,a=l.length;e&lt;a;++e)u=g(l[e],c),b.push(u),x[t][e]=u;else b.push.apply(b,_),x[t]=_.slice(0);else x[t]=[];_.length&amp;&amp;(_=h(_).sort(d),v=Math.min(v,_[0]),y=Math.max(y,_[_.length-1])),b.length&amp;&amp;(b=h(b).sort(d),v=Math.min(v,b[0]),y=Math.max(y,b[b.length-1])),v=g(m.min,c)||v,y=g(m.max,c)||y,v=v===s?+n().startOf(p):v,y=y===o?+n().endOf(p)+1:y,c.min=Math.min(v,y),c.max=Math.max(v+1,y),c._horizontal=c.isHorizontal(),c._table=[],c._timestamps={data:b,datasets:x,labels:_}},buildTicks:function(){var t,e,i,a,r,o,s,d,h,v,y,b,x=this,_=x.min,k=x.max,w=x.options,M=w.time,S=[],D=[];switch(w.ticks.source){case\&#34;data\&#34;:S=x._timestamps.data;break;case\&#34;labels\&#34;:S=x._timestamps.labels;break;case\&#34;auto\&#34;:default:S=p(_,k,x.getLabelCapacity(_),w)}for(\&#34;ticks\&#34;===w.bounds&amp;&amp;S.length&amp;&amp;(_=S[0],k=S[S.length-1]),_=g(M.min,x)||_,k=g(M.max,x)||k,t=0,e=S.length;t&lt;e;++t)(i=S[t])&gt;=_&amp;&amp;i&lt;=k&amp;&amp;D.push(i);return x.min=_,x.max=k,x._unit=M.unit||function(t,e,i,a){var r,o,s=n.duration(n(a).diff(n(i)));for(r=u.length-1;r&gt;=u.indexOf(e);r--)if(o=u[r],l[o].common&amp;&amp;s.as(o)&gt;=t.length)return o;return u[e?u.indexOf(e):0]}(D,M.minUnit,x.min,x.max),x._majorUnit=m(x._unit),x._table=function(t,e,i,n){if(\&#34;linear\&#34;===n||!t.length)return[{time:e,pos:0},{time:i,pos:1}];var a,r,o,s,l,u=[],d=[e];for(a=0,r=t.length;a&lt;r;++a)(s=t[a])&gt;e&amp;&amp;s&lt;i&amp;&amp;d.push(s);for(d.push(i),a=0,r=d.length;a&lt;r;++a)l=d[a+1],o=d[a-1],s=d[a],void 0!==o&amp;&amp;void 0!==l&amp;&amp;Math.round((l+o)/2)===s||u.push({time:s,pos:a/(r-1)});return u}(x._timestamps.data,_,k,w.distribution),x._offsets=(a=x._table,r=D,o=_,s=k,y=0,b=0,(d=w).offset&amp;&amp;r.length&amp;&amp;(d.time.min||(h=r.length&gt;1?r[1]:s,v=r[0],y=(c(a,\&#34;time\&#34;,h,\&#34;pos\&#34;)-c(a,\&#34;time\&#34;,v,\&#34;pos\&#34;))/2),d.time.max||(h=r[r.length-1],v=r.length&gt;1?r[r.length-2]:o,b=(c(a,\&#34;time\&#34;,h,\&#34;pos\&#34;)-c(a,\&#34;time\&#34;,v,\&#34;pos\&#34;))/2)),{left:y,right:b}),x._labelFormat=function(t,e){var i,n,a,r=t.length;for(i=0;i&lt;r;i++){if(0!==(n=f(t[i],e)).millisecond())return\&#34;MMM D, YYYY h:mm:ss.SSS a\&#34;;0===n.second()&amp;&amp;0===n.minute()&amp;&amp;0===n.hour()||(a=!0)}return a?\&#34;MMM D, YYYY h:mm:ss a\&#34;:\&#34;MMM D, YYYY\&#34;}(x._timestamps.data,M),function(t,e){var i,a,r,o,s=[];for(i=0,a=t.length;i&lt;a;++i)r=t[i],o=!!e&amp;&amp;r===+n(r).startOf(e),s.push({value:r,major:o});return s}(D,x._majorUnit)},getLabelForIndex:function(t,e){var i=this.chart.data,n=this.options.time,a=i.labels&amp;&amp;t&lt;i.labels.length?i.labels[t]:\&#34;\&#34;,o=i.datasets[e].data[t];return r.isObject(o)&amp;&amp;(a=this.getRightValue(o)),n.tooltipFormat?f(a,n).format(n.tooltipFormat):\&#34;string\&#34;==typeof a?a:f(a,n).format(this._labelFormat)},tickFormatFunction:function(t,e,i,n){var a=this.options,o=t.valueOf(),s=a.time.displayFormats,l=s[this._unit],u=this._majorUnit,d=s[u],h=t.clone().startOf(u).valueOf(),c=a.ticks.major,f=c.enabled&amp;&amp;u&amp;&amp;d&amp;&amp;o===h,g=t.format(n||(f?d:l)),m=f?c:a.ticks.minor,p=r.valueOrDefault(m.callback,m.userCallback);return p?p(g,e,i):g},convertTicksToLabels:function(t){var e,i,a=[];for(e=0,i=t.length;e&lt;i;++e)a.push(this.tickFormatFunction(n(t[e].value),e,t));return a},getPixelForOffset:function(t){var e=this,i=e._horizontal?e.width:e.height,n=e._horizontal?e.left:e.top,a=c(e._table,\&#34;time\&#34;,t,\&#34;pos\&#34;);return n+i*(e._offsets.left+a)/(e._offsets.left+1+e._offsets.right)},getPixelForValue:function(t,e,i){var n=null;if(void 0!==e&amp;&amp;void 0!==i&amp;&amp;(n=this._timestamps.datasets[i][e]),null===n&amp;&amp;(n=g(t,this)),null!==n)return this.getPixelForOffset(n)},getPixelForTick:function(t){var e=this.getTicks();return t&gt;=0&amp;&amp;t&lt;e.length?this.getPixelForOffset(e[t].value):null},getValueForPixel:function(t){var e=this,i=e._horizontal?e.width:e.height,a=e._horizontal?e.left:e.top,r=(i?(t-a)/i:0)*(e._offsets.left+1+e._offsets.left)-e._offsets.right,o=c(e._table,\&#34;pos\&#34;,r,\&#34;time\&#34;);return n(o)},getLabelWidth:function(t){var e=this.options.ticks,i=this.ctx.measureText(t).width,n=r.toRadians(e.maxRotation),o=Math.cos(n),s=Math.sin(n);return i*o+r.valueOrDefault(e.fontSize,a.global.defaultFontSize)*s},getLabelCapacity:function(t){var e=this.options.time.displayFormats.millisecond,i=this.tickFormatFunction(n(t),0,[],e),a=this.getLabelWidth(i),r=this.isHorizontal()?this.width:this.height,o=Math.floor(r/a);return o&gt;0?o:1}});t.scaleService.registerScaleType(\&#34;time\&#34;,e,{position:\&#34;bottom\&#34;,distribution:\&#34;linear\&#34;,bounds:\&#34;data\&#34;,time:{parser:!1,format:!1,unit:!1,round:!1,displayFormat:!1,isoWeekday:!1,minUnit:\&#34;millisecond\&#34;,displayFormats:{millisecond:\&#34;h:mm:ss.SSS a\&#34;,second:\&#34;h:mm:ss a\&#34;,minute:\&#34;h:mm a\&#34;,hour:\&#34;hA\&#34;,day:\&#34;MMM D\&#34;,week:\&#34;ll\&#34;,month:\&#34;MMM YYYY\&#34;,quarter:\&#34;[Q]Q - YYYY\&#34;,year:\&#34;YYYY\&#34;}},ticks:{autoSkip:!1,source:\&#34;auto\&#34;,major:{enabled:!1}}})}},{25:25,45:45,6:6}]},{},[7])(7)});&#34;),</pre></code></td></tr><tr><td>71</td><td><code><pre> }</pre></code></td></tr><tr><td>72</td><td><code><pre> file8 := &amp;embedded.EmbeddedFile{</pre></code></td></tr><tr><td>73</td><td><code><pre> Filename: &#34;bootstrap.min.js&#34;,</pre></code></td></tr><tr><td>74</td><td><code><pre> FileModTime: time.Unix(1528732500, 0),</pre></code></td></tr><tr><td>75</td><td><code><pre> Content: string(&#34;/*!\n * Bootstrap v4.1.0 (https://getbootstrap.com/)\n * Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n!function(t,e){\&#34;object\&#34;==typeof exports&amp;&amp;\&#34;undefined\&#34;!=typeof module?e(exports,require(\&#34;jquery\&#34;),require(\&#34;popper.js\&#34;)):\&#34;function\&#34;==typeof define&amp;&amp;define.amd?define([\&#34;exports\&#34;,\&#34;jquery\&#34;,\&#34;popper.js\&#34;],e):e(t.bootstrap={},t.jQuery,t.Popper)}(this,function(t,e,c){\&#34;use strict\&#34;;function i(t,e){for(var n=0;n&lt;e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,\&#34;value\&#34;in i&amp;&amp;(i.writable=!0),Object.defineProperty(t,i.key,i)}}function o(t,e,n){return e&amp;&amp;i(t.prototype,e),n&amp;&amp;i(t,n),t}function h(r){for(var t=1;t&lt;arguments.length;t++){var s=null!=arguments[t]?arguments[t]:{},e=Object.keys(s);\&#34;function\&#34;==typeof Object.getOwnPropertySymbols&amp;&amp;(e=e.concat(Object.getOwnPropertySymbols(s).filter(function(t){return Object.getOwnPropertyDescriptor(s,t).enumerable}))),e.forEach(function(t){var e,n,i;e=r,i=s[n=t],n in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i})}return r}e=e&amp;&amp;e.hasOwnProperty(\&#34;default\&#34;)?e.default:e,c=c&amp;&amp;c.hasOwnProperty(\&#34;default\&#34;)?c.default:c;var r,n,s,a,l,u,f,d,_,g,m,p,v,E,y,T,C,I,A,D,b,S,w,N,O,k,P,L,j,R,H,W,M,x,U,K,F,V,Q,B,Y,G,q,z,X,J,Z,$,tt,et,nt,it,rt,st,ot,at,lt,ht,ct,ut,ft,dt,_t,gt,mt,pt,vt,Et,yt,Tt,Ct,It,At,Dt,bt,St,wt,Nt,Ot,kt,Pt,Lt,jt,Rt,Ht,Wt,Mt,xt,Ut,Kt,Ft,Vt,Qt,Bt,Yt,Gt,qt,zt,Xt,Jt,Zt,$t,te,ee,ne,ie,re,se,oe,ae,le,he,ce,ue,fe,de,_e,ge,me,pe,ve,Ee,ye,Te,Ce,Ie,Ae,De,be,Se,we,Ne,Oe,ke,Pe,Le,je,Re,He,We,Me,xe,Ue,Ke,Fe,Ve,Qe,Be,Ye,Ge,qe,ze,Xe,Je,Ze,$e,tn,en,nn,rn,sn,on,an,ln,hn,cn,un,fn,dn,_n,gn,mn,pn,vn,En,yn,Tn,Cn=function(i){var e=\&#34;transitionend\&#34;;function t(t){var e=this,n=!1;return i(this).one(l.TRANSITION_END,function(){n=!0}),setTimeout(function(){n||l.triggerTransitionEnd(e)},t),this}var l={TRANSITION_END:\&#34;bsTransitionEnd\&#34;,getUID:function(t){for(;t+=~~(1e6*Math.random()),document.getElementById(t););return t},getSelectorFromElement:function(t){var e=t.getAttribute(\&#34;data-target\&#34;);e&amp;&amp;\&#34;#\&#34;!==e||(e=t.getAttribute(\&#34;href\&#34;)||\&#34;\&#34;);try{return 0&lt;i(document).find(e).length?e:null}catch(t){return null}},getTransitionDurationFromElement:function(t){if(!t)return 0;var e=i(t).css(\&#34;transition-duration\&#34;);return parseFloat(e)?(e=e.split(\&#34;,\&#34;)[0],1e3*parseFloat(e)):0},reflow:function(t){return t.offsetHeight},triggerTransitionEnd:function(t){i(t).trigger(e)},supportsTransitionEnd:function(){return Boolean(e)},isElement:function(t){return(t[0]||t).nodeType},typeCheckConfig:function(t,e,n){for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)){var r=n[i],s=e[i],o=s&amp;&amp;l.isElement(s)?\&#34;element\&#34;:(a=s,{}.toString.call(a).match(/\\s([a-z]+)/i)[1].toLowerCase());if(!new RegExp(r).test(o))throw new Error(t.toUpperCase()+&#39;: Option \&#34;&#39;+i+&#39;\&#34; provided type \&#34;&#39;+o+&#39;\&#34; but expected type \&#34;&#39;+r+&#39;\&#34;.&#39;)}var a}};return i.fn.emulateTransitionEnd=t,i.event.special[l.TRANSITION_END]={bindType:e,delegateType:e,handle:function(t){if(i(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}},l}(e),In=(n=\&#34;alert\&#34;,a=\&#34;.\&#34;+(s=\&#34;bs.alert\&#34;),l=(r=e).fn[n],u={CLOSE:\&#34;close\&#34;+a,CLOSED:\&#34;closed\&#34;+a,CLICK_DATA_API:\&#34;click\&#34;+a+\&#34;.data-api\&#34;},f=\&#34;alert\&#34;,d=\&#34;fade\&#34;,_=\&#34;show\&#34;,g=function(){function i(t){this._element=t}var t=i.prototype;return t.close=function(t){t=t||this._element;var e=this._getRootElement(t);this._triggerCloseEvent(e).isDefaultPrevented()||this._removeElement(e)},t.dispose=function(){r.removeData(this._element,s),this._element=null},t._getRootElement=function(t){var e=Cn.getSelectorFromElement(t),n=!1;return e&amp;&amp;(n=r(e)[0]),n||(n=r(t).closest(\&#34;.\&#34;+f)[0]),n},t._triggerCloseEvent=function(t){var e=r.Event(u.CLOSE);return r(t).trigger(e),e},t._removeElement=function(e){var n=this;if(r(e).removeClass(_),r(e).hasClass(d)){var t=Cn.getTransitionDurationFromElement(e);r(e).one(Cn.TRANSITION_END,function(t){return n._destroyElement(e,t)}).emulateTransitionEnd(t)}else this._destroyElement(e)},t._destroyElement=function(t){r(t).detach().trigger(u.CLOSED).remove()},i._jQueryInterface=function(n){return this.each(function(){var t=r(this),e=t.data(s);e||(e=new i(this),t.data(s,e)),\&#34;close\&#34;===n&amp;&amp;e[n](this)})},i._handleDismiss=function(e){return function(t){t&amp;&amp;t.preventDefault(),e.close(this)}},o(i,null,[{key:\&#34;VERSION\&#34;,get:function(){return\&#34;4.1.0\&#34;}}]),i}(),r(document).on(u.CLICK_DATA_API,&#39;[data-dismiss=\&#34;alert\&#34;]&#39;,g._handleDismiss(new g)),r.fn[n]=g._jQueryInterface,r.fn[n].Constructor=g,r.fn[n].noConflict=function(){return r.fn[n]=l,g._jQueryInterface},g),An=(p=\&#34;button\&#34;,E=\&#34;.\&#34;+(v=\&#34;bs.button\&#34;),y=\&#34;.data-api\&#34;,T=(m=e).fn[p],C=\&#34;active\&#34;,I=\&#34;btn\&#34;,D=&#39;[data-toggle^=\&#34;button\&#34;]&#39;,b=&#39;[data-toggle=\&#34;buttons\&#34;]&#39;,S=\&#34;input\&#34;,w=\&#34;.active\&#34;,N=\&#34;.btn\&#34;,O={CLICK_DATA_API:\&#34;click\&#34;+E+y,FOCUS_BLUR_DATA_API:(A=\&#34;focus\&#34;)+E+y+\&#34; blur\&#34;+E+y},k=function(){function n(t){this._element=t}var t=n.prototype;return t.toggle=function(){var t=!0,e=!0,n=m(this._element).closest(b)[0];if(n){var i=m(this._element).find(S)[0];if(i){if(\&#34;radio\&#34;===i.type)if(i.checked&amp;&amp;m(this._element).hasClass(C))t=!1;else{var r=m(n).find(w)[0];r&amp;&amp;m(r).removeClass(C)}if(t){if(i.hasAttribute(\&#34;disabled\&#34;)||n.hasAttribute(\&#34;disabled\&#34;)||i.classList.contains(\&#34;disabled\&#34;)||n.classList.contains(\&#34;disabled\&#34;))return;i.checked=!m(this._element).hasClass(C),m(i).trigger(\&#34;change\&#34;)}i.focus(),e=!1}}e&amp;&amp;this._element.setAttribute(\&#34;aria-pressed\&#34;,!m(this._element).hasClass(C)),t&amp;&amp;m(this._element).toggleClass(C)},t.dispose=function(){m.removeData(this._element,v),this._element=null},n._jQueryInterface=function(e){return this.each(function(){var t=m(this).data(v);t||(t=new n(this),m(this).data(v,t)),\&#34;toggle\&#34;===e&amp;&amp;t[e]()})},o(n,null,[{key:\&#34;VERSION\&#34;,get:function(){return\&#34;4.1.0\&#34;}}]),n}(),m(document).on(O.CLICK_DATA_API,D,function(t){t.preventDefault();var e=t.target;m(e).hasClass(I)||(e=m(e).closest(N)),k._jQueryInterface.call(m(e),\&#34;toggle\&#34;)}).on(O.FOCUS_BLUR_DATA_API,D,function(t){var e=m(t.target).closest(N)[0];m(e).toggleClass(A,/^focus(in)?$/.test(t.type))}),m.fn[p]=k._jQueryInterface,m.fn[p].Constructor=k,m.fn[p].noConflict=function(){return m.fn[p]=T,k._jQueryInterface},k),Dn=(L=\&#34;carousel\&#34;,R=\&#34;.\&#34;+(j=\&#34;bs.carousel\&#34;),H=\&#34;.data-api\&#34;,W=(P=e).fn[L],M={interval:5e3,keyboard:!0,slide:!1,pause:\&#34;hover\&#34;,wrap:!0},x={interval:\&#34;(number|boolean)\&#34;,keyboard:\&#34;boolean\&#34;,slide:\&#34;(boolean|string)\&#34;,pause:\&#34;(string|boolean)\&#34;,wrap:\&#34;boolean\&#34;},U=\&#34;next\&#34;,K=\&#34;prev\&#34;,F=\&#34;left\&#34;,V=\&#34;right\&#34;,Q={SLIDE:\&#34;slide\&#34;+R,SLID:\&#34;slid\&#34;+R,KEYDOWN:\&#34;keydown\&#34;+R,MOUSEENTER:\&#34;mouseenter\&#34;+R,MOUSELEAVE:\&#34;mouseleave\&#34;+R,TOUCHEND:\&#34;touchend\&#34;+R,LOAD_DATA_API:\&#34;load\&#34;+R+H,CLICK_DATA_API:\&#34;click\&#34;+R+H},B=\&#34;carousel\&#34;,Y=\&#34;active\&#34;,G=\&#34;slide\&#34;,q=\&#34;carousel-item-right\&#34;,z=\&#34;carousel-item-left\&#34;,X=\&#34;carousel-item-next\&#34;,J=\&#34;carousel-item-prev\&#34;,Z={ACTIVE:\&#34;.active\&#34;,ACTIVE_ITEM:\&#34;.active.carousel-item\&#34;,ITEM:\&#34;.carousel-item\&#34;,NEXT_PREV:\&#34;.carousel-item-next, .carousel-item-prev\&#34;,INDICATORS:\&#34;.carousel-indicators\&#34;,DATA_SLIDE:\&#34;[data-slide], [data-slide-to]\&#34;,DATA_RIDE:&#39;[data-ride=\&#34;carousel\&#34;]&#39;},$=function(){function s(t,e){this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this._config=this._getConfig(e),this._element=P(t)[0],this._indicatorsElement=P(this._element).find(Z.INDICATORS)[0],this._addEventListeners()}var t=s.prototype;return t.next=function(){this._isSliding||this._slide(U)},t.nextWhenVisible=function(){!document.hidden&amp;&amp;P(this._element).is(\&#34;:visible\&#34;)&amp;&amp;\&#34;hidden\&#34;!==P(this._element).css(\&#34;visibility\&#34;)&amp;&amp;this.next()},t.prev=function(){this._isSliding||this._slide(K)},t.pause=function(t){t||(this._isPaused=!0),P(this._element).find(Z.NEXT_PREV)[0]&amp;&amp;(Cn.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null},t.cycle=function(t){t||(this._isPaused=!1),this._interval&amp;&amp;(clearInterval(this._interval),this._interval=null),this._config.interval&amp;&amp;!this._isPaused&amp;&amp;(this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))},t.to=function(t){var e=this;this._activeElement=P(this._element).find(Z.ACTIVE_ITEM)[0];var n=this._getItemIndex(this._activeElement);if(!(t&gt;this._items.length-1||t&lt;0))if(this._isSliding)P(this._element).one(Q.SLID,function(){return e.to(t)});else{if(n===t)return this.pause(),void this.cycle();var i=n&lt;t?U:K;this._slide(i,this._items[t])}},t.dispose=function(){P(this._element).off(R),P.removeData(this._element,j),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},t._getConfig=function(t){return t=h({},M,t),Cn.typeCheckConfig(L,t,x),t},t._addEventListeners=function(){var e=this;this._config.keyboard&amp;&amp;P(this._element).on(Q.KEYDOWN,function(t){return e._keydown(t)}),\&#34;hover\&#34;===this._config.pause&amp;&amp;(P(this._element).on(Q.MOUSEENTER,function(t){return e.pause(t)}).on(Q.MOUSELEAVE,function(t){return e.cycle(t)}),\&#34;ontouchstart\&#34;in document.documentElement&amp;&amp;P(this._element).on(Q.TOUCHEND,function(){e.pause(),e.touchTimeout&amp;&amp;clearTimeout(e.touchTimeout),e.touchTimeout=setTimeout(function(t){return e.cycle(t)},500+e._config.interval)}))},t._keydown=function(t){if(!/input|textarea/i.test(t.target.tagName))switch(t.which){case 37:t.preventDefault(),this.prev();break;case 39:t.preventDefault(),this.next()}},t._getItemIndex=function(t){return this._items=P.makeArray(P(t).parent().find(Z.ITEM)),this._items.indexOf(t)},t._getItemByDirection=function(t,e){var n=t===U,i=t===K,r=this._getItemIndex(e),s=this._items.length-1;if((i&amp;&amp;0===r||n&amp;&amp;r===s)&amp;&amp;!this._config.wrap)return e;var o=(r+(t===K?-1:1))%this._items.length;return-1===o?this._items[this._items.length-1]:this._items[o]},t._triggerSlideEvent=function(t,e){var n=this._getItemIndex(t),i=this._getItemIndex(P(this._element).find(Z.ACTIVE_ITEM)[0]),r=P.Event(Q.SLIDE,{relatedTarget:t,direction:e,from:i,to:n});return P(this._element).trigger(r),r},t._setActiveIndicatorElement=function(t){if(this._indicatorsElement){P(this._indicatorsElement).find(Z.ACTIVE).removeClass(Y);var e=this._indicatorsElement.children[this._getItemIndex(t)];e&amp;&amp;P(e).addClass(Y)}},t._slide=function(t,e){var n,i,r,s=this,o=P(this._element).find(Z.ACTIVE_ITEM)[0],a=this._getItemIndex(o),l=e||o&amp;&amp;this._getItemByDirection(t,o),h=this._getItemIndex(l),c=Boolean(this._interval);if(t===U?(n=z,i=X,r=F):(n=q,i=J,r=V),l&amp;&amp;P(l).hasClass(Y))this._isSliding=!1;else if(!this._triggerSlideEvent(l,r).isDefaultPrevented()&amp;&amp;o&amp;&amp;l){this._isSliding=!0,c&amp;&amp;this.pause(),this._setActiveIndicatorElement(l);var u=P.Event(Q.SLID,{relatedTarget:l,direction:r,from:a,to:h});if(P(this._element).hasClass(G)){P(l).addClass(i),Cn.reflow(l),P(o).addClass(n),P(l).addClass(n);var f=Cn.getTransitionDurationFromElement(o);P(o).one(Cn.TRANSITION_END,function(){P(l).removeClass(n+\&#34; \&#34;+i).addClass(Y),P(o).removeClass(Y+\&#34; \&#34;+i+\&#34; \&#34;+n),s._isSliding=!1,setTimeout(function(){return P(s._element).trigger(u)},0)}).emulateTransitionEnd(f)}else P(o).removeClass(Y),P(l).addClass(Y),this._isSliding=!1,P(this._element).trigger(u);c&amp;&amp;this.cycle()}},s._jQueryInterface=function(i){return this.each(function(){var t=P(this).data(j),e=h({},M,P(this).data());\&#34;object\&#34;==typeof i&amp;&amp;(e=h({},e,i));var n=\&#34;string\&#34;==typeof i?i:e.slide;if(t||(t=new s(this,e),P(this).data(j,t)),\&#34;number\&#34;==typeof i)t.to(i);else if(\&#34;string\&#34;==typeof n){if(\&#34;undefined\&#34;==typeof t[n])throw new TypeError(&#39;No method named \&#34;&#39;+n+&#39;\&#34;&#39;);t[n]()}else e.interval&amp;&amp;(t.pause(),t.cycle())})},s._dataApiClickHandler=function(t){var e=Cn.getSelectorFromElement(this);if(e){var n=P(e)[0];if(n&amp;&amp;P(n).hasClass(B)){var i=h({},P(n).data(),P(this).data()),r=this.getAttribute(\&#34;data-slide-to\&#34;);r&amp;&amp;(i.interval=!1),s._jQueryInterface.call(P(n),i),r&amp;&amp;P(n).data(j).to(r),t.preventDefault()}}},o(s,null,[{key:\&#34;VERSION\&#34;,get:function(){return\&#34;4.1.0\&#34;}},{key:\&#34;Default\&#34;,get:function(){return M}}]),s}(),P(document).on(Q.CLICK_DATA_API,Z.DATA_SLIDE,$._dataApiClickHandler),P(window).on(Q.LOAD_DATA_API,function(){P(Z.DATA_RIDE).each(function(){var t=P(this);$._jQueryInterface.call(t,t.data())})}),P.fn[L]=$._jQueryInterface,P.fn[L].Constructor=$,P.fn[L].noConflict=function(){return P.fn[L]=W,$._jQueryInterface},$),bn=(et=\&#34;collapse\&#34;,it=\&#34;.\&#34;+(nt=\&#34;bs.collapse\&#34;),rt=(tt=e).fn[et],st={toggle:!0,parent:\&#34;\&#34;},ot={toggle:\&#34;boolean\&#34;,parent:\&#34;(string|element)\&#34;},at={SHOW:\&#34;show\&#34;+it,SHOWN:\&#34;shown\&#34;+it,HIDE:\&#34;hide\&#34;+it,HIDDEN:\&#34;hidden\&#34;+it,CLICK_DATA_API:\&#34;click\&#34;+it+\&#34;.data-api\&#34;},lt=\&#34;show\&#34;,ht=\&#34;collapse\&#34;,ct=\&#34;collapsing\&#34;,ut=\&#34;collapsed\&#34;,ft=\&#34;width\&#34;,dt=\&#34;height\&#34;,_t={ACTIVES:\&#34;.show, .collapsing\&#34;,DATA_TOGGLE:&#39;[data-toggle=\&#34;collapse\&#34;]&#39;},gt=function(){function a(t,e){this._isTransitioning=!1,this._element=t,this._config=this._getConfig(e),this._triggerArray=tt.makeArray(tt(&#39;[data-toggle=\&#34;collapse\&#34;][href=\&#34;#&#39;+t.id+&#39;\&#34;],[data-toggle=\&#34;collapse\&#34;][data-target=\&#34;#&#39;+t.id+&#39;\&#34;]&#39;));for(var n=tt(_t.DATA_TOGGLE),i=0;i&lt;n.length;i++){var r=n[i],s=Cn.getSelectorFromElement(r);null!==s&amp;&amp;0&lt;tt(s).filter(t).length&amp;&amp;(this._selector=s,this._triggerArray.push(r))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&amp;&amp;this.toggle()}var t=a.prototype;return t.toggle=function(){tt(this._element).hasClass(lt)?this.hide():this.show()},t.show=function(){var t,e,n=this;if(!this._isTransitioning&amp;&amp;!tt(this._element).hasClass(lt)&amp;&amp;(this._parent&amp;&amp;0===(t=tt.makeArray(tt(this._parent).find(_t.ACTIVES).filter(&#39;[data-parent=\&#34;&#39;+this._config.parent+&#39;\&#34;]&#39;))).length&amp;&amp;(t=null),!(t&amp;&amp;(e=tt(t).not(this._selector).data(nt))&amp;&amp;e._isTransitioning))){var i=tt.Event(at.SHOW);if(tt(this._element).trigger(i),!i.isDefaultPrevented()){t&amp;&amp;(a._jQueryInterface.call(tt(t).not(this._selector),\&#34;hide\&#34;),e||tt(t).data(nt,null));var r=this._getDimension();tt(this._element).removeClass(ht).addClass(ct),(this._element.style[r]=0)&lt;this._triggerArray.length&amp;&amp;tt(this._triggerArray).removeClass(ut).attr(\&#34;aria-expanded\&#34;,!0),this.setTransitioning(!0);var s=\&#34;scroll\&#34;+(r[0].toUpperCase()+r.slice(1)),o=Cn.getTransitionDurationFromElement(this._element);tt(this._element).one(Cn.TRANSITION_END,function(){tt(n._element).removeClass(ct).addClass(ht).addClass(lt),n._element.style[r]=\&#34;\&#34;,n.setTransitioning(!1),tt(n._element).trigger(at.SHOWN)}).emulateTransitionEnd(o),this._element.style[r]=this._element[s]+\&#34;px\&#34;}}},t.hide=function(){var t=this;if(!this._isTransitioning&amp;&amp;tt(this._element).hasClass(lt)){var e=tt.Event(at.HIDE);if(tt(this._element).trigger(e),!e.isDefaultPrevented()){var n=this._getDimension();if(this._element.style[n]=this._element.getBoundingClientRect()[n]+\&#34;px\&#34;,Cn.reflow(this._element),tt(this._element).addClass(ct).removeClass(ht).removeClass(lt),0&lt;this._triggerArray.length)for(var i=0;i&lt;this._triggerArray.length;i++){var r=this._triggerArray[i],s=Cn.getSelectorFromElement(r);if(null!==s)tt(s).hasClass(lt)||tt(r).addClass(ut).attr(\&#34;aria-expanded\&#34;,!1)}this.setTransitioning(!0);this._element.style[n]=\&#34;\&#34;;var o=Cn.getTransitionDurationFromElement(this._element);tt(this._element).one(Cn.TRANSITION_END,function(){t.setTransitioning(!1),tt(t._element).removeClass(ct).addClass(ht).trigger(at.HIDDEN)}).emulateTransitionEnd(o)}}},t.setTransitioning=function(t){this._isTransitioning=t},t.dispose=function(){tt.removeData(this._element,nt),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null},t._getConfig=function(t){return(t=h({},st,t)).toggle=Boolean(t.toggle),Cn.typeCheckConfig(et,t,ot),t},t._getDimension=function(){return tt(this._element).hasClass(ft)?ft:dt},t._getParent=function(){var n=this,t=null;Cn.isElement(this._config.parent)?(t=this._config.parent,\&#34;undefined\&#34;!=typeof this._config.parent.jquery&amp;&amp;(t=this._config.parent[0])):t=tt(this._config.parent)[0];var e=&#39;[data-toggle=\&#34;collapse\&#34;][data-parent=\&#34;&#39;+this._config.parent+&#39;\&#34;]&#39;;return tt(t).find(e).each(function(t,e){n._addAriaAndCollapsedClass(a._getTargetFromElement(e),[e])}),t},t._addAriaAndCollapsedClass=function(t,e){if(t){var n=tt(t).hasClass(lt);0&lt;e.length&amp;&amp;tt(e).toggleClass(ut,!n).attr(\&#34;aria-expanded\&#34;,n)}},a._getTargetFromElement=function(t){var e=Cn.getSelectorFromElement(t);return e?tt(e)[0]:null},a._jQueryInterface=function(i){return this.each(function(){var t=tt(this),e=t.data(nt),n=h({},st,t.data(),\&#34;object\&#34;==typeof i&amp;&amp;i);if(!e&amp;&amp;n.toggle&amp;&amp;/show|hide/.test(i)&amp;&amp;(n.toggle=!1),e||(e=new a(this,n),t.data(nt,e)),\&#34;string\&#34;==typeof i){if(\&#34;undefined\&#34;==typeof e[i])throw new TypeError(&#39;No method named \&#34;&#39;+i+&#39;\&#34;&#39;);e[i]()}})},o(a,null,[{key:\&#34;VERSION\&#34;,get:function(){return\&#34;4.1.0\&#34;}},{key:\&#34;Default\&#34;,get:function(){return st}}]),a}(),tt(document).on(at.CLICK_DATA_API,_t.DATA_TOGGLE,function(t){\&#34;A\&#34;===t.currentTarget.tagName&amp;&amp;t.preventDefault();var n=tt(this),e=Cn.getSelectorFromElement(this);tt(e).each(function(){var t=tt(this),e=t.data(nt)?\&#34;toggle\&#34;:n.data();gt._jQueryInterface.call(t,e)})}),tt.fn[et]=gt._jQueryInterface,tt.fn[et].Constructor=gt,tt.fn[et].noConflict=function(){return tt.fn[et]=rt,gt._jQueryInterface},gt),Sn=(pt=\&#34;dropdown\&#34;,Et=\&#34;.\&#34;+(vt=\&#34;bs.dropdown\&#34;),yt=\&#34;.data-api\&#34;,Tt=(mt=e).fn[pt],Ct=new RegExp(\&#34;38|40|27\&#34;),It={HIDE:\&#34;hide\&#34;+Et,HIDDEN:\&#34;hidden\&#34;+Et,SHOW:\&#34;show\&#34;+Et,SHOWN:\&#34;shown\&#34;+Et,CLICK:\&#34;click\&#34;+Et,CLICK_DATA_API:\&#34;click\&#34;+Et+yt,KEYDOWN_DATA_API:\&#34;keydown\&#34;+Et+yt,KEYUP_DATA_API:\&#34;keyup\&#34;+Et+yt},At=\&#34;disabled\&#34;,Dt=\&#34;show\&#34;,bt=\&#34;dropup\&#34;,St=\&#34;dropright\&#34;,wt=\&#34;dropleft\&#34;,Nt=\&#34;dropdown-menu-right\&#34;,Ot=\&#34;position-static\&#34;,kt=&#39;[data-toggle=\&#34;dropdown\&#34;]&#39;,Pt=\&#34;.dropdown form\&#34;,Lt=\&#34;.dropdown-menu\&#34;,jt=\&#34;.navbar-nav\&#34;,Rt=\&#34;.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)\&#34;,Ht=\&#34;top-start\&#34;,Wt=\&#34;top-end\&#34;,Mt=\&#34;bottom-start\&#34;,xt=\&#34;bottom-end\&#34;,Ut=\&#34;right-start\&#34;,Kt=\&#34;left-start\&#34;,Ft={offset:0,flip:!0,boundary:\&#34;scrollParent\&#34;,reference:\&#34;toggle\&#34;,display:\&#34;dynamic\&#34;},Vt={offset:\&#34;(number|string|function)\&#34;,flip:\&#34;boolean\&#34;,boundary:\&#34;(string|element)\&#34;,reference:\&#34;(string|element)\&#34;,display:\&#34;string\&#34;},Qt=function(){function l(t,e){this._element=t,this._popper=null,this._config=this._getConfig(e),this._menu=this._getMenuElement(),this._inNavbar=this._detectNavbar(),this._addEventListeners()}var t=l.prototype;return t.toggle=function(){if(!this._element.disabled&amp;&amp;!mt(this._element).hasClass(At)){var t=l._getParentFromElement(this._element),e=mt(this._menu).hasClass(Dt);if(l._clearMenus(),!e){var n={relatedTarget:this._element},i=mt.Event(It.SHOW,n);if(mt(t).trigger(i),!i.isDefaultPrevented()){if(!this._inNavbar){if(\&#34;undefined\&#34;==typeof c)throw new TypeError(\&#34;Bootstrap dropdown require Popper.js (https://popper.js.org)\&#34;);var r=this._element;\&#34;parent\&#34;===this._config.reference?r=t:Cn.isElement(this._config.reference)&amp;&amp;(r=this._config.reference,\&#34;undefined\&#34;!=typeof this._config.reference.jquery&amp;&amp;(r=this._config.reference[0])),\&#34;scrollParent\&#34;!==this._config.boundary&amp;&amp;mt(t).addClass(Ot),this._popper=new c(r,this._menu,this._getPopperConfig())}\&#34;ontouchstart\&#34;in document.documentElement&amp;&amp;0===mt(t).closest(jt).length&amp;&amp;mt(document.body).children().on(\&#34;mouseover\&#34;,null,mt.noop),this._element.focus(),this._element.setAttribute(\&#34;aria-expanded\&#34;,!0),mt(this._menu).toggleClass(Dt),mt(t).toggleClass(Dt).trigger(mt.Event(It.SHOWN,n))}}}},t.dispose=function(){mt.removeData(this._element,vt),mt(this._element).off(Et),this._element=null,(this._menu=null)!==this._popper&amp;&amp;(this._popper.destroy(),this._popper=null)},t.update=function(){this._inNavbar=this._detectNavbar(),null!==this._popper&amp;&amp;this._popper.scheduleUpdate()},t._addEventListeners=function(){var e=this;mt(this._element).on(It.CLICK,function(t){t.preventDefault(),t.stopPropagation(),e.toggle()})},t._getConfig=function(t){return t=h({},this.constructor.Default,mt(this._element).data(),t),Cn.typeCheckConfig(pt,t,this.constructor.DefaultType),t},t._getMenuElement=function(){if(!this._menu){var t=l._getParentFromElement(this._element);this._menu=mt(t).find(Lt)[0]}return this._menu},t._getPlacement=function(){var t=mt(this._element).parent(),e=Mt;return t.hasClass(bt)?(e=Ht,mt(this._menu).hasClass(Nt)&amp;&amp;(e=Wt)):t.hasClass(St)?e=Ut:t.hasClass(wt)?e=Kt:mt(this._menu).hasClass(Nt)&amp;&amp;(e=xt),e},t._detectNavbar=function(){return 0&lt;mt(this._element).closest(\&#34;.navbar\&#34;).length},t._getPopperConfig=function(){var e=this,t={};\&#34;function\&#34;==typeof this._config.offset?t.fn=function(t){return t.offsets=h({},t.offsets,e._config.offset(t.offsets)||{}),t}:t.offset=this._config.offset;var n={placement:this._getPlacement(),modifiers:{offset:t,flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return\&#34;static\&#34;===this._config.display&amp;&amp;(n.modifiers.applyStyle={enabled:!1}),n},l._jQueryInterface=function(e){return this.each(function(){var t=mt(this).data(vt);if(t||(t=new l(this,\&#34;object\&#34;==typeof e?e:null),mt(this).data(vt,t)),\&#34;string\&#34;==typeof e){if(\&#34;undefined\&#34;==typeof t[e])throw new TypeError(&#39;No method named \&#34;&#39;+e+&#39;\&#34;&#39;);t[e]()}})},l._clearMenus=function(t){if(!t||3!==t.which&amp;&amp;(\&#34;keyup\&#34;!==t.type||9===t.which))for(var e=mt.makeArray(mt(kt)),n=0;n&lt;e.length;n++){var i=l._getParentFromElement(e[n]),r=mt(e[n]).data(vt),s={relatedTarget:e[n]};if(r){var o=r._menu;if(mt(i).hasClass(Dt)&amp;&amp;!(t&amp;&amp;(\&#34;click\&#34;===t.type&amp;&amp;/input|textarea/i.test(t.target.tagName)||\&#34;keyup\&#34;===t.type&amp;&amp;9===t.which)&amp;&amp;mt.contains(i,t.target))){var a=mt.Event(It.HIDE,s);mt(i).trigger(a),a.isDefaultPrevented()||(\&#34;ontouchstart\&#34;in document.documentElement&amp;&amp;mt(document.body).children().off(\&#34;mouseover\&#34;,null,mt.noop),e[n].setAttribute(\&#34;aria-expanded\&#34;,\&#34;false\&#34;),mt(o).removeClass(Dt),mt(i).removeClass(Dt).trigger(mt.Event(It.HIDDEN,s)))}}}},l._getParentFromElement=function(t){var e,n=Cn.getSelectorFromElement(t);return n&amp;&amp;(e=mt(n)[0]),e||t.parentNode},l._dataApiKeydownHandler=function(t){if((/input|textarea/i.test(t.target.tagName)?!(32===t.which||27!==t.which&amp;&amp;(40!==t.which&amp;&amp;38!==t.which||mt(t.target).closest(Lt).length)):Ct.test(t.which))&amp;&amp;(t.preventDefault(),t.stopPropagation(),!this.disabled&amp;&amp;!mt(this).hasClass(At))){var e=l._getParentFromElement(this),n=mt(e).hasClass(Dt);if((n||27===t.which&amp;&amp;32===t.which)&amp;&amp;(!n||27!==t.which&amp;&amp;32!==t.which)){var i=mt(e).find(Rt).get();if(0!==i.length){var r=i.indexOf(t.target);38===t.which&amp;&amp;0&lt;r&amp;&amp;r--,40===t.which&amp;&amp;r&lt;i.length-1&amp;&amp;r++,r&lt;0&amp;&amp;(r=0),i[r].focus()}}else{if(27===t.which){var s=mt(e).find(kt)[0];mt(s).trigger(\&#34;focus\&#34;)}mt(this).trigger(\&#34;click\&#34;)}}},o(l,null,[{key:\&#34;VERSION\&#34;,get:function(){return\&#34;4.1.0\&#34;}},{key:\&#34;Default\&#34;,get:function(){return Ft}},{key:\&#34;DefaultType\&#34;,get:function(){return Vt}}]),l}(),mt(document).on(It.KEYDOWN_DATA_API,kt,Qt._dataApiKeydownHandler).on(It.KEYDOWN_DATA_API,Lt,Qt._dataApiKeydownHandler).on(It.CLICK_DATA_API+\&#34; \&#34;+It.KEYUP_DATA_API,Qt._clearMenus).on(It.CLICK_DATA_API,kt,function(t){t.preventDefault(),t.stopPropagation(),Qt._jQueryInterface.call(mt(this),\&#34;toggle\&#34;)}).on(It.CLICK_DATA_API,Pt,function(t){t.stopPropagation()}),mt.fn[pt]=Qt._jQueryInterface,mt.fn[pt].Constructor=Qt,mt.fn[pt].noConflict=function(){return mt.fn[pt]=Tt,Qt._jQueryInterface},Qt),wn=(Yt=\&#34;modal\&#34;,qt=\&#34;.\&#34;+(Gt=\&#34;bs.modal\&#34;),zt=(Bt=e).fn[Yt],Xt={backdrop:!0,keyboard:!0,focus:!0,show:!0},Jt={backdrop:\&#34;(boolean|string)\&#34;,keyboard:\&#34;boolean\&#34;,focus:\&#34;boolean\&#34;,show:\&#34;boolean\&#34;},Zt={HIDE:\&#34;hide\&#34;+qt,HIDDEN:\&#34;hidden\&#34;+qt,SHOW:\&#34;show\&#34;+qt,SHOWN:\&#34;shown\&#34;+qt,FOCUSIN:\&#34;focusin\&#34;+qt,RESIZE:\&#34;resize\&#34;+qt,CLICK_DISMISS:\&#34;click.dismiss\&#34;+qt,KEYDOWN_DISMISS:\&#34;keydown.dismiss\&#34;+qt,MOUSEUP_DISMISS:\&#34;mouseup.dismiss\&#34;+qt,MOUSEDOWN_DISMISS:\&#34;mousedown.dismiss\&#34;+qt,CLICK_DATA_API:\&#34;click\&#34;+qt+\&#34;.data-api\&#34;},$t=\&#34;modal-scrollbar-measure\&#34;,te=\&#34;modal-backdrop\&#34;,ee=\&#34;modal-open\&#34;,ne=\&#34;fade\&#34;,ie=\&#34;show\&#34;,re={DIALOG:\&#34;.modal-dialog\&#34;,DATA_TOGGLE:&#39;[data-toggle=\&#34;modal\&#34;]&#39;,DATA_DISMISS:&#39;[data-dismiss=\&#34;modal\&#34;]&#39;,FIXED_CONTENT:\&#34;.fixed-top, .fixed-bottom, .is-fixed, .sticky-top\&#34;,STICKY_CONTENT:\&#34;.sticky-top\&#34;,NAVBAR_TOGGLER:\&#34;.navbar-toggler\&#34;},se=function(){function r(t,e){this._config=this._getConfig(e),this._element=t,this._dialog=Bt(t).find(re.DIALOG)[0],this._backdrop=null,this._isShown=!1,this._isBodyOverflowing=!1,this._ignoreBackdropClick=!1,this._scrollbarWidth=0}var t=r.prototype;return t.toggle=function(t){return this._isShown?this.hide():this.show(t)},t.show=function(t){var e=this;if(!this._isTransitioning&amp;&amp;!this._isShown){Bt(this._element).hasClass(ne)&amp;&amp;(this._isTransitioning=!0);var n=Bt.Event(Zt.SHOW,{relatedTarget:t});Bt(this._element).trigger(n),this._isShown||n.isDefaultPrevented()||(this._isShown=!0,this._checkScrollbar(),this._setScrollbar(),this._adjustDialog(),Bt(document.body).addClass(ee),this._setEscapeEvent(),this._setResizeEvent(),Bt(this._element).on(Zt.CLICK_DISMISS,re.DATA_DISMISS,function(t){return e.hide(t)}),Bt(this._dialog).on(Zt.MOUSEDOWN_DISMISS,function(){Bt(e._element).one(Zt.MOUSEUP_DISMISS,function(t){Bt(t.target).is(e._element)&amp;&amp;(e._ignoreBackdropClick=!0)})}),this._showBackdrop(function(){return e._showElement(t)}))}},t.hide=function(t){var e=this;if(t&amp;&amp;t.preventDefault(),!this._isTransitioning&amp;&amp;this._isShown){var n=Bt.Event(Zt.HIDE);if(Bt(this._element).trigger(n),this._isShown&amp;&amp;!n.isDefaultPrevented()){this._isShown=!1;var i=Bt(this._element).hasClass(ne);if(i&amp;&amp;(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),Bt(document).off(Zt.FOCUSIN),Bt(this._element).removeClass(ie),Bt(this._element).off(Zt.CLICK_DISMISS),Bt(this._dialog).off(Zt.MOUSEDOWN_DISMISS),i){var r=Cn.getTransitionDurationFromElement(this._element);Bt(this._element).one(Cn.TRANSITION_END,function(t){return e._hideModal(t)}).emulateTransitionEnd(r)}else this._hideModal()}}},t.dispose=function(){Bt.removeData(this._element,Gt),Bt(window,document,this._element,this._backdrop).off(qt),this._config=null,this._element=null,this._dialog=null,this._backdrop=null,this._isShown=null,this._isBodyOverflowing=null,this._ignoreBackdropClick=null,this._scrollbarWidth=null},t.handleUpdate=function(){this._adjustDialog()},t._getConfig=function(t){return t=h({},Xt,t),Cn.typeCheckConfig(Yt,t,Jt),t},t._showElement=function(t){var e=this,n=Bt(this._element).hasClass(ne);this._element.parentNode&amp;&amp;this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.appendChild(this._element),this._element.style.display=\&#34;block\&#34;,this._element.removeAttribute(\&#34;aria-hidden\&#34;),this._element.scrollTop=0,n&amp;&amp;Cn.reflow(this._element),Bt(this._element).addClass(ie),this._config.focus&amp;&amp;this._enforceFocus();var i=Bt.Event(Zt.SHOWN,{relatedTarget:t}),r=function(){e._config.focus&amp;&amp;e._element.focus(),e._isTransitioning=!1,Bt(e._element).trigger(i)};if(n){var s=Cn.getTransitionDurationFromElement(this._element);Bt(this._dialog).one(Cn.TRANSITION_END,r).emulateTransitionEnd(s)}else r()},t._enforceFocus=function(){var e=this;Bt(document).off(Zt.FOCUSIN).on(Zt.FOCUSIN,function(t){document!==t.target&amp;&amp;e._element!==t.target&amp;&amp;0===Bt(e._element).has(t.target).length&amp;&amp;e._element.focus()})},t._setEscapeEvent=function(){var e=this;this._isShown&amp;&amp;this._config.keyboard?Bt(this._element).on(Zt.KEYDOWN_DISMISS,function(t){27===t.which&amp;&amp;(t.preventDefault(),e.hide())}):this._isShown||Bt(this._element).off(Zt.KEYDOWN_DISMISS)},t._setResizeEvent=function(){var e=this;this._isShown?Bt(window).on(Zt.RESIZE,function(t){return e.handleUpdate(t)}):Bt(window).off(Zt.RESIZE)},t._hideModal=function(){var t=this;this._element.style.display=\&#34;none\&#34;,this._element.setAttribute(\&#34;aria-hidden\&#34;,!0),this._isTransitioning=!1,this._showBackdrop(function(){Bt(document.body).removeClass(ee),t._resetAdjustments(),t._resetScrollbar(),Bt(t._element).trigger(Zt.HIDDEN)})},t._removeBackdrop=function(){this._backdrop&amp;&amp;(Bt(this._backdrop).remove(),this._backdrop=null)},t._showBackdrop=function(t){var e=this,n=Bt(this._element).hasClass(ne)?ne:\&#34;\&#34;;if(this._isShown&amp;&amp;this._config.backdrop){if(this._backdrop=document.createElement(\&#34;div\&#34;),this._backdrop.className=te,n&amp;&amp;Bt(this._backdrop).addClass(n),Bt(this._backdrop).appendTo(document.body),Bt(this._element).on(Zt.CLICK_DISMISS,function(t){e._ignoreBackdropClick?e._ignoreBackdropClick=!1:t.target===t.currentTarget&amp;&amp;(\&#34;static\&#34;===e._config.backdrop?e._element.focus():e.hide())}),n&amp;&amp;Cn.reflow(this._backdrop),Bt(this._backdrop).addClass(ie),!t)return;if(!n)return void t();var i=Cn.getTransitionDurationFromElement(this._backdrop);Bt(this._backdrop).one(Cn.TRANSITION_END,t).emulateTransitionEnd(i)}else if(!this._isShown&amp;&amp;this._backdrop){Bt(this._backdrop).removeClass(ie);var r=function(){e._removeBackdrop(),t&amp;&amp;t()};if(Bt(this._element).hasClass(ne)){var s=Cn.getTransitionDurationFromElement(this._backdrop);Bt(this._backdrop).one(Cn.TRANSITION_END,r).emulateTransitionEnd(s)}else r()}else t&amp;&amp;t()},t._adjustDialog=function(){var t=this._element.scrollHeight&gt;document.documentElement.clientHeight;!this._isBodyOverflowing&amp;&amp;t&amp;&amp;(this._element.style.paddingLeft=this._scrollbarWidth+\&#34;px\&#34;),this._isBodyOverflowing&amp;&amp;!t&amp;&amp;(this._element.style.paddingRight=this._scrollbarWidth+\&#34;px\&#34;)},t._resetAdjustments=function(){this._element.style.paddingLeft=\&#34;\&#34;,this._element.style.paddingRight=\&#34;\&#34;},t._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=t.left+t.right&lt;window.innerWidth,this._scrollbarWidth=this._getScrollbarWidth()},t._setScrollbar=function(){var r=this;if(this._isBodyOverflowing){Bt(re.FIXED_CONTENT).each(function(t,e){var n=Bt(e)[0].style.paddingRight,i=Bt(e).css(\&#34;padding-right\&#34;);Bt(e).data(\&#34;padding-right\&#34;,n).css(\&#34;padding-right\&#34;,parseFloat(i)+r._scrollbarWidth+\&#34;px\&#34;)}),Bt(re.STICKY_CONTENT).each(function(t,e){var n=Bt(e)[0].style.marginRight,i=Bt(e).css(\&#34;margin-right\&#34;);Bt(e).data(\&#34;margin-right\&#34;,n).css(\&#34;margin-right\&#34;,parseFloat(i)-r._scrollbarWidth+\&#34;px\&#34;)}),Bt(re.NAVBAR_TOGGLER).each(function(t,e){var n=Bt(e)[0].style.marginRight,i=Bt(e).css(\&#34;margin-right\&#34;);Bt(e).data(\&#34;margin-right\&#34;,n).css(\&#34;margin-right\&#34;,parseFloat(i)+r._scrollbarWidth+\&#34;px\&#34;)});var t=document.body.style.paddingRight,e=Bt(document.body).css(\&#34;padding-right\&#34;);Bt(document.body).data(\&#34;padding-right\&#34;,t).css(\&#34;padding-right\&#34;,parseFloat(e)+this._scrollbarWidth+\&#34;px\&#34;)}},t._resetScrollbar=function(){Bt(re.FIXED_CONTENT).each(function(t,e){var n=Bt(e).data(\&#34;padding-right\&#34;);\&#34;undefined\&#34;!=typeof n&amp;&amp;Bt(e).css(\&#34;padding-right\&#34;,n).removeData(\&#34;padding-right\&#34;)}),Bt(re.STICKY_CONTENT+\&#34;, \&#34;+re.NAVBAR_TOGGLER).each(function(t,e){var n=Bt(e).data(\&#34;margin-right\&#34;);\&#34;undefined\&#34;!=typeof n&amp;&amp;Bt(e).css(\&#34;margin-right\&#34;,n).removeData(\&#34;margin-right\&#34;)});var t=Bt(document.body).data(\&#34;padding-right\&#34;);\&#34;undefined\&#34;!=typeof t&amp;&amp;Bt(document.body).css(\&#34;padding-right\&#34;,t).removeData(\&#34;padding-right\&#34;)},t._getScrollbarWidth=function(){var t=document.createElement(\&#34;div\&#34;);t.className=$t,document.body.appendChild(t);var e=t.getBoundingClientRect().width-t.clientWidth;return document.body.removeChild(t),e},r._jQueryInterface=function(n,i){return this.each(function(){var t=Bt(this).data(Gt),e=h({},r.Default,Bt(this).data(),\&#34;object\&#34;==typeof n&amp;&amp;n);if(t||(t=new r(this,e),Bt(this).data(Gt,t)),\&#34;string\&#34;==typeof n){if(\&#34;undefined\&#34;==typeof t[n])throw new TypeError(&#39;No method named \&#34;&#39;+n+&#39;\&#34;&#39;);t[n](i)}else e.show&amp;&amp;t.show(i)})},o(r,null,[{key:\&#34;VERSION\&#34;,get:function(){return\&#34;4.1.0\&#34;}},{key:\&#34;Default\&#34;,get:function(){return Xt}}]),r}(),Bt(document).on(Zt.CLICK_DATA_API,re.DATA_TOGGLE,function(t){var e,n=this,i=Cn.getSelectorFromElement(this);i&amp;&amp;(e=Bt(i)[0]);var r=Bt(e).data(Gt)?\&#34;toggle\&#34;:h({},Bt(e).data(),Bt(this).data());\&#34;A\&#34;!==this.tagName&amp;&amp;\&#34;AREA\&#34;!==this.tagName||t.preventDefault();var s=Bt(e).one(Zt.SHOW,function(t){t.isDefaultPrevented()||s.one(Zt.HIDDEN,function(){Bt(n).is(\&#34;:visible\&#34;)&amp;&amp;n.focus()})});se._jQueryInterface.call(Bt(e),r,this)}),Bt.fn[Yt]=se._jQueryInterface,Bt.fn[Yt].Constructor=se,Bt.fn[Yt].noConflict=function(){return Bt.fn[Yt]=zt,se._jQueryInterface},se),Nn=(ae=\&#34;tooltip\&#34;,he=\&#34;.\&#34;+(le=\&#34;bs.tooltip\&#34;),ce=(oe=e).fn[ae],ue=\&#34;bs-tooltip\&#34;,fe=new RegExp(\&#34;(^|\\\\s)\&#34;+ue+\&#34;\\\\S+\&#34;,\&#34;g\&#34;),ge={animation:!0,template:&#39;&lt;div class=\&#34;tooltip\&#34; role=\&#34;tooltip\&#34;&gt;&lt;div class=\&#34;arrow\&#34;&gt;&lt;/div&gt;&lt;div class=\&#34;tooltip-inner\&#34;&gt;&lt;/div&gt;&lt;/div&gt;&#39;,trigger:\&#34;hover focus\&#34;,title:\&#34;\&#34;,delay:0,html:!(_e={AUTO:\&#34;auto\&#34;,TOP:\&#34;top\&#34;,RIGHT:\&#34;right\&#34;,BOTTOM:\&#34;bottom\&#34;,LEFT:\&#34;left\&#34;}),selector:!(de={animation:\&#34;boolean\&#34;,template:\&#34;string\&#34;,title:\&#34;(string|element|function)\&#34;,trigger:\&#34;string\&#34;,delay:\&#34;(number|object)\&#34;,html:\&#34;boolean\&#34;,selector:\&#34;(string|boolean)\&#34;,placement:\&#34;(string|function)\&#34;,offset:\&#34;(number|string)\&#34;,container:\&#34;(string|element|boolean)\&#34;,fallbackPlacement:\&#34;(string|array)\&#34;,boundary:\&#34;(string|element)\&#34;}),placement:\&#34;top\&#34;,offset:0,container:!1,fallbackPlacement:\&#34;flip\&#34;,boundary:\&#34;scrollParent\&#34;},pe=\&#34;out\&#34;,ve={HIDE:\&#34;hide\&#34;+he,HIDDEN:\&#34;hidden\&#34;+he,SHOW:(me=\&#34;show\&#34;)+he,SHOWN:\&#34;shown\&#34;+he,INSERTED:\&#34;inserted\&#34;+he,CLICK:\&#34;click\&#34;+he,FOCUSIN:\&#34;focusin\&#34;+he,FOCUSOUT:\&#34;focusout\&#34;+he,MOUSEENTER:\&#34;mouseenter\&#34;+he,MOUSELEAVE:\&#34;mouseleave\&#34;+he},Ee=\&#34;fade\&#34;,ye=\&#34;show\&#34;,Te=\&#34;.tooltip-inner\&#34;,Ce=\&#34;.arrow\&#34;,Ie=\&#34;hover\&#34;,Ae=\&#34;focus\&#34;,De=\&#34;click\&#34;,be=\&#34;manual\&#34;,Se=function(){function i(t,e){if(\&#34;undefined\&#34;==typeof c)throw new TypeError(\&#34;Bootstrap tooltips require Popper.js (https://popper.js.org)\&#34;);this._isEnabled=!0,this._timeout=0,this._hoverState=\&#34;\&#34;,this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var t=i.prototype;return t.enable=function(){this._isEnabled=!0},t.disable=function(){this._isEnabled=!1},t.toggleEnabled=function(){this._isEnabled=!this._isEnabled},t.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=oe(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),oe(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(oe(this.getTipElement()).hasClass(ye))return void this._leave(null,this);this._enter(null,this)}},t.dispose=function(){clearTimeout(this._timeout),oe.removeData(this.element,this.constructor.DATA_KEY),oe(this.element).off(this.constructor.EVENT_KEY),oe(this.element).closest(\&#34;.modal\&#34;).off(\&#34;hide.bs.modal\&#34;),this.tip&amp;&amp;oe(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,(this._activeTrigger=null)!==this._popper&amp;&amp;this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},t.show=function(){var e=this;if(\&#34;none\&#34;===oe(this.element).css(\&#34;display\&#34;))throw new Error(\&#34;Please use show on visible elements\&#34;);var t=oe.Event(this.constructor.Event.SHOW);if(this.isWithContent()&amp;&amp;this._isEnabled){oe(this.element).trigger(t);var n=oe.contains(this.element.ownerDocument.documentElement,this.element);if(t.isDefaultPrevented()||!n)return;var i=this.getTipElement(),r=Cn.getUID(this.constructor.NAME);i.setAttribute(\&#34;id\&#34;,r),this.element.setAttribute(\&#34;aria-describedby\&#34;,r),this.setContent(),this.config.animation&amp;&amp;oe(i).addClass(Ee);var s=\&#34;function\&#34;==typeof this.config.placement?this.config.placement.call(this,i,this.element):this.config.placement,o=this._getAttachment(s);this.addAttachmentClass(o);var a=!1===this.config.container?document.body:oe(this.config.container);oe(i).data(this.constructor.DATA_KEY,this),oe.contains(this.element.ownerDocument.documentElement,this.tip)||oe(i).appendTo(a),oe(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new c(this.element,i,{placement:o,modifiers:{offset:{offset:this.config.offset},flip:{behavior:this.config.fallbackPlacement},arrow:{element:Ce},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&amp;&amp;e._handlePopperPlacementChange(t)},onUpdate:function(t){e._handlePopperPlacementChange(t)}}),oe(i).addClass(ye),\&#34;ontouchstart\&#34;in document.documentElement&amp;&amp;oe(document.body).children().on(\&#34;mouseover\&#34;,null,oe.noop);var l=function(){e.config.animation&amp;&amp;e._fixTransition();var t=e._hoverState;e._hoverState=null,oe(e.element).trigger(e.constructor.Event.SHOWN),t===pe&amp;&amp;e._leave(null,e)};if(oe(this.tip).hasClass(Ee)){var h=Cn.getTransitionDurationFromElement(this.tip);oe(this.tip).one(Cn.TRANSITION_END,l).emulateTransitionEnd(h)}else l()}},t.hide=function(t){var e=this,n=this.getTipElement(),i=oe.Event(this.constructor.Event.HIDE),r=function(){e._hoverState!==me&amp;&amp;n.parentNode&amp;&amp;n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute(\&#34;aria-describedby\&#34;),oe(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&amp;&amp;e._popper.destroy(),t&amp;&amp;t()};if(oe(this.element).trigger(i),!i.isDefaultPrevented()){if(oe(n).removeClass(ye),\&#34;ontouchstart\&#34;in document.documentElement&amp;&amp;oe(document.body).children().off(\&#34;mouseover\&#34;,null,oe.noop),this._activeTrigger[De]=!1,this._activeTrigger[Ae]=!1,this._activeTrigger[Ie]=!1,oe(this.tip).hasClass(Ee)){var s=Cn.getTransitionDurationFromElement(n);oe(n).one(Cn.TRANSITION_END,r).emulateTransitionEnd(s)}else r();this._hoverState=\&#34;\&#34;}},t.update=function(){null!==this._popper&amp;&amp;this._popper.scheduleUpdate()},t.isWithContent=function(){return Boolean(this.getTitle())},t.addAttachmentClass=function(t){oe(this.getTipElement()).addClass(ue+\&#34;-\&#34;+t)},t.getTipElement=function(){return this.tip=this.tip||oe(this.config.template)[0],this.tip},t.setContent=function(){var t=oe(this.getTipElement());this.setElementContent(t.find(Te),this.getTitle()),t.removeClass(Ee+\&#34; \&#34;+ye)},t.setElementContent=function(t,e){var n=this.config.html;\&#34;object\&#34;==typeof e&amp;&amp;(e.nodeType||e.jquery)?n?oe(e).parent().is(t)||t.empty().append(e):t.text(oe(e).text()):t[n?\&#34;html\&#34;:\&#34;text\&#34;](e)},t.getTitle=function(){var t=this.element.getAttribute(\&#34;data-original-title\&#34;);return t||(t=\&#34;function\&#34;==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},t._getAttachment=function(t){return _e[t.toUpperCase()]},t._setListeners=function(){var i=this;this.config.trigger.split(\&#34; \&#34;).forEach(function(t){if(\&#34;click\&#34;===t)oe(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(t){return i.toggle(t)});else if(t!==be){var e=t===Ie?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=t===Ie?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;oe(i.element).on(e,i.config.selector,function(t){return i._enter(t)}).on(n,i.config.selector,function(t){return i._leave(t)})}oe(i.element).closest(\&#34;.modal\&#34;).on(\&#34;hide.bs.modal\&#34;,function(){return i.hide()})}),this.config.selector?this.config=h({},this.config,{trigger:\&#34;manual\&#34;,selector:\&#34;\&#34;}):this._fixTitle()},t._fixTitle=function(){var t=typeof this.element.getAttribute(\&#34;data-original-title\&#34;);(this.element.getAttribute(\&#34;title\&#34;)||\&#34;string\&#34;!==t)&amp;&amp;(this.element.setAttribute(\&#34;data-original-title\&#34;,this.element.getAttribute(\&#34;title\&#34;)||\&#34;\&#34;),this.element.setAttribute(\&#34;title\&#34;,\&#34;\&#34;))},t._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||oe(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),oe(t.currentTarget).data(n,e)),t&amp;&amp;(e._activeTrigger[\&#34;focusin\&#34;===t.type?Ae:Ie]=!0),oe(e.getTipElement()).hasClass(ye)||e._hoverState===me?e._hoverState=me:(clearTimeout(e._timeout),e._hoverState=me,e.config.delay&amp;&amp;e.config.delay.show?e._timeout=setTimeout(function(){e._hoverState===me&amp;&amp;e.show()},e.config.delay.show):e.show())},t._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||oe(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),oe(t.currentTarget).data(n,e)),t&amp;&amp;(e._activeTrigger[\&#34;focusout\&#34;===t.type?Ae:Ie]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=pe,e.config.delay&amp;&amp;e.config.delay.hide?e._timeout=setTimeout(function(){e._hoverState===pe&amp;&amp;e.hide()},e.config.delay.hide):e.hide())},t._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},t._getConfig=function(t){return\&#34;number\&#34;==typeof(t=h({},this.constructor.Default,oe(this.element).data(),t)).delay&amp;&amp;(t.delay={show:t.delay,hide:t.delay}),\&#34;number\&#34;==typeof t.title&amp;&amp;(t.title=t.title.toString()),\&#34;number\&#34;==typeof t.content&amp;&amp;(t.content=t.content.toString()),Cn.typeCheckConfig(ae,t,this.constructor.DefaultType),t},t._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&amp;&amp;(t[e]=this.config[e]);return t},t._cleanTipClass=function(){var t=oe(this.getTipElement()),e=t.attr(\&#34;class\&#34;).match(fe);null!==e&amp;&amp;0&lt;e.length&amp;&amp;t.removeClass(e.join(\&#34;\&#34;))},t._handlePopperPlacementChange=function(t){this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},t._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute(\&#34;x-placement\&#34;)&amp;&amp;(oe(t).removeClass(Ee),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},i._jQueryInterface=function(n){return this.each(function(){var t=oe(this).data(le),e=\&#34;object\&#34;==typeof n&amp;&amp;n;if((t||!/dispose|hide/.test(n))&amp;&amp;(t||(t=new i(this,e),oe(this).data(le,t)),\&#34;string\&#34;==typeof n)){if(\&#34;undefined\&#34;==typeof t[n])throw new TypeError(&#39;No method named \&#34;&#39;+n+&#39;\&#34;&#39;);t[n]()}})},o(i,null,[{key:\&#34;VERSION\&#34;,get:function(){return\&#34;4.1.0\&#34;}},{key:\&#34;Default\&#34;,get:function(){return ge}},{key:\&#34;NAME\&#34;,get:function(){return ae}},{key:\&#34;DATA_KEY\&#34;,get:function(){return le}},{key:\&#34;Event\&#34;,get:function(){return ve}},{key:\&#34;EVENT_KEY\&#34;,get:function(){return he}},{key:\&#34;DefaultType\&#34;,get:function(){return de}}]),i}(),oe.fn[ae]=Se._jQueryInterface,oe.fn[ae].Constructor=Se,oe.fn[ae].noConflict=function(){return oe.fn[ae]=ce,Se._jQueryInterface},Se),On=(Ne=\&#34;popover\&#34;,ke=\&#34;.\&#34;+(Oe=\&#34;bs.popover\&#34;),Pe=(we=e).fn[Ne],Le=\&#34;bs-popover\&#34;,je=new RegExp(\&#34;(^|\\\\s)\&#34;+Le+\&#34;\\\\S+\&#34;,\&#34;g\&#34;),Re=h({},Nn.Default,{placement:\&#34;right\&#34;,trigger:\&#34;click\&#34;,content:\&#34;\&#34;,template:&#39;&lt;div class=\&#34;popover\&#34; role=\&#34;tooltip\&#34;&gt;&lt;div class=\&#34;arrow\&#34;&gt;&lt;/div&gt;&lt;h3 class=\&#34;popover-header\&#34;&gt;&lt;/h3&gt;&lt;div class=\&#34;popover-body\&#34;&gt;&lt;/div&gt;&lt;/div&gt;&#39;}),He=h({},Nn.DefaultType,{content:\&#34;(string|element|function)\&#34;}),We=\&#34;fade\&#34;,xe=\&#34;.popover-header\&#34;,Ue=\&#34;.popover-body\&#34;,Ke={HIDE:\&#34;hide\&#34;+ke,HIDDEN:\&#34;hidden\&#34;+ke,SHOW:(Me=\&#34;show\&#34;)+ke,SHOWN:\&#34;shown\&#34;+ke,INSERTED:\&#34;inserted\&#34;+ke,CLICK:\&#34;click\&#34;+ke,FOCUSIN:\&#34;focusin\&#34;+ke,FOCUSOUT:\&#34;focusout\&#34;+ke,MOUSEENTER:\&#34;mouseenter\&#34;+ke,MOUSELEAVE:\&#34;mouseleave\&#34;+ke},Fe=function(t){var e,n;function i(){return t.apply(this,arguments)||this}n=t,(e=i).prototype=Object.create(n.prototype),(e.prototype.constructor=e).__proto__=n;var r=i.prototype;return r.isWithContent=function(){return this.getTitle()||this._getContent()},r.addAttachmentClass=function(t){we(this.getTipElement()).addClass(Le+\&#34;-\&#34;+t)},r.getTipElement=function(){return this.tip=this.tip||we(this.config.template)[0],this.tip},r.setContent=function(){var t=we(this.getTipElement());this.setElementContent(t.find(xe),this.getTitle());var e=this._getContent();\&#34;function\&#34;==typeof e&amp;&amp;(e=e.call(this.element)),this.setElementContent(t.find(Ue),e),t.removeClass(We+\&#34; \&#34;+Me)},r._getContent=function(){return this.element.getAttribute(\&#34;data-content\&#34;)||this.config.content},r._cleanTipClass=function(){var t=we(this.getTipElement()),e=t.attr(\&#34;class\&#34;).match(je);null!==e&amp;&amp;0&lt;e.length&amp;&amp;t.removeClass(e.join(\&#34;\&#34;))},i._jQueryInterface=function(n){return this.each(function(){var t=we(this).data(Oe),e=\&#34;object\&#34;==typeof n?n:null;if((t||!/destroy|hide/.test(n))&amp;&amp;(t||(t=new i(this,e),we(this).data(Oe,t)),\&#34;string\&#34;==typeof n)){if(\&#34;undefined\&#34;==typeof t[n])throw new TypeError(&#39;No method named \&#34;&#39;+n+&#39;\&#34;&#39;);t[n]()}})},o(i,null,[{key:\&#34;VERSION\&#34;,get:function(){return\&#34;4.1.0\&#34;}},{key:\&#34;Default\&#34;,get:function(){return Re}},{key:\&#34;NAME\&#34;,get:function(){return Ne}},{key:\&#34;DATA_KEY\&#34;,get:function(){return Oe}},{key:\&#34;Event\&#34;,get:function(){return Ke}},{key:\&#34;EVENT_KEY\&#34;,get:function(){return ke}},{key:\&#34;DefaultType\&#34;,get:function(){return He}}]),i}(Nn),we.fn[Ne]=Fe._jQueryInterface,we.fn[Ne].Constructor=Fe,we.fn[Ne].noConflict=function(){return we.fn[Ne]=Pe,Fe._jQueryInterface},Fe),kn=(Qe=\&#34;scrollspy\&#34;,Ye=\&#34;.\&#34;+(Be=\&#34;bs.scrollspy\&#34;),Ge=(Ve=e).fn[Qe],qe={offset:10,method:\&#34;auto\&#34;,target:\&#34;\&#34;},ze={offset:\&#34;number\&#34;,method:\&#34;string\&#34;,target:\&#34;(string|element)\&#34;},Xe={ACTIVATE:\&#34;activate\&#34;+Ye,SCROLL:\&#34;scroll\&#34;+Ye,LOAD_DATA_API:\&#34;load\&#34;+Ye+\&#34;.data-api\&#34;},Je=\&#34;dropdown-item\&#34;,Ze=\&#34;active\&#34;,$e={DATA_SPY:&#39;[data-spy=\&#34;scroll\&#34;]&#39;,ACTIVE:\&#34;.active\&#34;,NAV_LIST_GROUP:\&#34;.nav, .list-group\&#34;,NAV_LINKS:\&#34;.nav-link\&#34;,NAV_ITEMS:\&#34;.nav-item\&#34;,LIST_ITEMS:\&#34;.list-group-item\&#34;,DROPDOWN:\&#34;.dropdown\&#34;,DROPDOWN_ITEMS:\&#34;.dropdown-item\&#34;,DROPDOWN_TOGGLE:\&#34;.dropdown-toggle\&#34;},tn=\&#34;offset\&#34;,en=\&#34;position\&#34;,nn=function(){function n(t,e){var n=this;this._element=t,this._scrollElement=\&#34;BODY\&#34;===t.tagName?window:t,this._config=this._getConfig(e),this._selector=this._config.target+\&#34; \&#34;+$e.NAV_LINKS+\&#34;,\&#34;+this._config.target+\&#34; \&#34;+$e.LIST_ITEMS+\&#34;,\&#34;+this._config.target+\&#34; \&#34;+$e.DROPDOWN_ITEMS,this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,Ve(this._scrollElement).on(Xe.SCROLL,function(t){return n._process(t)}),this.refresh(),this._process()}var t=n.prototype;return t.refresh=function(){var e=this,t=this._scrollElement===this._scrollElement.window?tn:en,r=\&#34;auto\&#34;===this._config.method?t:this._config.method,s=r===en?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),Ve.makeArray(Ve(this._selector)).map(function(t){var e,n=Cn.getSelectorFromElement(t);if(n&amp;&amp;(e=Ve(n)[0]),e){var i=e.getBoundingClientRect();if(i.width||i.height)return[Ve(e)[r]().top+s,n]}return null}).filter(function(t){return t}).sort(function(t,e){return t[0]-e[0]}).forEach(function(t){e._offsets.push(t[0]),e._targets.push(t[1])})},t.dispose=function(){Ve.removeData(this._element,Be),Ve(this._scrollElement).off(Ye),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},t._getConfig=function(t){if(\&#34;string\&#34;!=typeof(t=h({},qe,t)).target){var e=Ve(t.target).attr(\&#34;id\&#34;);e||(e=Cn.getUID(Qe),Ve(t.target).attr(\&#34;id\&#34;,e)),t.target=\&#34;#\&#34;+e}return Cn.typeCheckConfig(Qe,t,ze),t},t._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},t._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},t._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},t._process=function(){var t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),n=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&amp;&amp;this.refresh(),n&lt;=t){var i=this._targets[this._targets.length-1];this._activeTarget!==i&amp;&amp;this._activate(i)}else{if(this._activeTarget&amp;&amp;t&lt;this._offsets[0]&amp;&amp;0&lt;this._offsets[0])return this._activeTarget=null,void this._clear();for(var r=this._offsets.length;r--;){this._activeTarget!==this._targets[r]&amp;&amp;t&gt;=this._offsets[r]&amp;&amp;(\&#34;undefined\&#34;==typeof this._offsets[r+1]||t&lt;this._offsets[r+1])&amp;&amp;this._activate(this._targets[r])}}},t._activate=function(e){this._activeTarget=e,this._clear();var t=this._selector.split(\&#34;,\&#34;);t=t.map(function(t){return t+&#39;[data-target=\&#34;&#39;+e+&#39;\&#34;],&#39;+t+&#39;[href=\&#34;&#39;+e+&#39;\&#34;]&#39;});var n=Ve(t.join(\&#34;,\&#34;));n.hasClass(Je)?(n.closest($e.DROPDOWN).find($e.DROPDOWN_TOGGLE).addClass(Ze),n.addClass(Ze)):(n.addClass(Ze),n.parents($e.NAV_LIST_GROUP).prev($e.NAV_LINKS+\&#34;, \&#34;+$e.LIST_ITEMS).addClass(Ze),n.parents($e.NAV_LIST_GROUP).prev($e.NAV_ITEMS).children($e.NAV_LINKS).addClass(Ze)),Ve(this._scrollElement).trigger(Xe.ACTIVATE,{relatedTarget:e})},t._clear=function(){Ve(this._selector).filter($e.ACTIVE).removeClass(Ze)},n._jQueryInterface=function(e){return this.each(function(){var t=Ve(this).data(Be);if(t||(t=new n(this,\&#34;object\&#34;==typeof e&amp;&amp;e),Ve(this).data(Be,t)),\&#34;string\&#34;==typeof e){if(\&#34;undefined\&#34;==typeof t[e])throw new TypeError(&#39;No method named \&#34;&#39;+e+&#39;\&#34;&#39;);t[e]()}})},o(n,null,[{key:\&#34;VERSION\&#34;,get:function(){return\&#34;4.1.0\&#34;}},{key:\&#34;Default\&#34;,get:function(){return qe}}]),n}(),Ve(window).on(Xe.LOAD_DATA_API,function(){for(var t=Ve.makeArray(Ve($e.DATA_SPY)),e=t.length;e--;){var n=Ve(t[e]);nn._jQueryInterface.call(n,n.data())}}),Ve.fn[Qe]=nn._jQueryInterface,Ve.fn[Qe].Constructor=nn,Ve.fn[Qe].noConflict=function(){return Ve.fn[Qe]=Ge,nn._jQueryInterface},nn),Pn=(on=\&#34;.\&#34;+(sn=\&#34;bs.tab\&#34;),an=(rn=e).fn.tab,ln={HIDE:\&#34;hide\&#34;+on,HIDDEN:\&#34;hidden\&#34;+on,SHOW:\&#34;show\&#34;+on,SHOWN:\&#34;shown\&#34;+on,CLICK_DATA_API:\&#34;click\&#34;+on+\&#34;.data-api\&#34;},hn=\&#34;dropdown-menu\&#34;,cn=\&#34;active\&#34;,un=\&#34;disabled\&#34;,fn=\&#34;fade\&#34;,dn=\&#34;show\&#34;,_n=\&#34;.dropdown\&#34;,gn=\&#34;.nav, .list-group\&#34;,mn=\&#34;.active\&#34;,pn=\&#34;&gt; li &gt; .active\&#34;,vn=&#39;[data-toggle=\&#34;tab\&#34;], [data-toggle=\&#34;pill\&#34;], [data-toggle=\&#34;list\&#34;]&#39;,En=\&#34;.dropdown-toggle\&#34;,yn=\&#34;&gt; .dropdown-menu .active\&#34;,Tn=function(){function i(t){this._element=t}var t=i.prototype;return t.show=function(){var n=this;if(!(this._element.parentNode&amp;&amp;this._element.parentNode.nodeType===Node.ELEMENT_NODE&amp;&amp;rn(this._element).hasClass(cn)||rn(this._element).hasClass(un))){var t,i,e=rn(this._element).closest(gn)[0],r=Cn.getSelectorFromElement(this._element);if(e){var s=\&#34;UL\&#34;===e.nodeName?pn:mn;i=(i=rn.makeArray(rn(e).find(s)))[i.length-1]}var o=rn.Event(ln.HIDE,{relatedTarget:this._element}),a=rn.Event(ln.SHOW,{relatedTarget:i});if(i&amp;&amp;rn(i).trigger(o),rn(this._element).trigger(a),!a.isDefaultPrevented()&amp;&amp;!o.isDefaultPrevented()){r&amp;&amp;(t=rn(r)[0]),this._activate(this._element,e);var l=function(){var t=rn.Event(ln.HIDDEN,{relatedTarget:n._element}),e=rn.Event(ln.SHOWN,{relatedTarget:i});rn(i).trigger(t),rn(n._element).trigger(e)};t?this._activate(t,t.parentNode,l):l()}}},t.dispose=function(){rn.removeData(this._element,sn),this._element=null},t._activate=function(t,e,n){var i=this,r=(\&#34;UL\&#34;===e.nodeName?rn(e).find(pn):rn(e).children(mn))[0],s=n&amp;&amp;r&amp;&amp;rn(r).hasClass(fn),o=function(){return i._transitionComplete(t,r,n)};if(r&amp;&amp;s){var a=Cn.getTransitionDurationFromElement(r);rn(r).one(Cn.TRANSITION_END,o).emulateTransitionEnd(a)}else o()},t._transitionComplete=function(t,e,n){if(e){rn(e).removeClass(dn+\&#34; \&#34;+cn);var i=rn(e.parentNode).find(yn)[0];i&amp;&amp;rn(i).removeClass(cn),\&#34;tab\&#34;===e.getAttribute(\&#34;role\&#34;)&amp;&amp;e.setAttribute(\&#34;aria-selected\&#34;,!1)}if(rn(t).addClass(cn),\&#34;tab\&#34;===t.getAttribute(\&#34;role\&#34;)&amp;&amp;t.setAttribute(\&#34;aria-selected\&#34;,!0),Cn.reflow(t),rn(t).addClass(dn),t.parentNode&amp;&amp;rn(t.parentNode).hasClass(hn)){var r=rn(t).closest(_n)[0];r&amp;&amp;rn(r).find(En).addClass(cn),t.setAttribute(\&#34;aria-expanded\&#34;,!0)}n&amp;&amp;n()},i._jQueryInterface=function(n){return this.each(function(){var t=rn(this),e=t.data(sn);if(e||(e=new i(this),t.data(sn,e)),\&#34;string\&#34;==typeof n){if(\&#34;undefined\&#34;==typeof e[n])throw new TypeError(&#39;No method named \&#34;&#39;+n+&#39;\&#34;&#39;);e[n]()}})},o(i,null,[{key:\&#34;VERSION\&#34;,get:function(){return\&#34;4.1.0\&#34;}}]),i}(),rn(document).on(ln.CLICK_DATA_API,vn,function(t){t.preventDefault(),Tn._jQueryInterface.call(rn(this),\&#34;show\&#34;)}),rn.fn.tab=Tn._jQueryInterface,rn.fn.tab.Constructor=Tn,rn.fn.tab.noConflict=function(){return rn.fn.tab=an,Tn._jQueryInterface},Tn);!function(t){if(\&#34;undefined\&#34;==typeof t)throw new TypeError(\&#34;Bootstrap&#39;s JavaScript requires jQuery. jQuery must be included before Bootstrap&#39;s JavaScript.\&#34;);var e=t.fn.jquery.split(\&#34; \&#34;)[0].split(\&#34;.\&#34;);if(e[0]&lt;2&amp;&amp;e[1]&lt;9||1===e[0]&amp;&amp;9===e[1]&amp;&amp;e[2]&lt;1||4&lt;=e[0])throw new Error(\&#34;Bootstrap&#39;s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0\&#34;)}(e),t.Util=Cn,t.Alert=In,t.Button=An,t.Carousel=Dn,t.Collapse=bn,t.Dropdown=Sn,t.Modal=wn,t.Popover=On,t.Scrollspy=kn,t.Tab=Pn,t.Tooltip=Nn,Object.defineProperty(t,\&#34;__esModule\&#34;,{value:!0})});\n//# sourceMappingURL=bootstrap.min.js.map&#34;),</pre></code></td></tr><tr><td>76</td><td><code><pre> }</pre></code></td></tr><tr><td>77</td><td><code><pre> file9 := &amp;embedded.EmbeddedFile{</pre></code></td></tr><tr><td>78</td><td><code><pre> Filename: &#34;chart_index.js&#34;,</pre></code></td></tr><tr><td>79</td><td><code><pre> FileModTime: time.Unix(1538522004, 0),</pre></code></td></tr><tr><td>80</td><td><code><pre> Content: string(&#34;{{define \&#34;chartIndex\&#34;}}\nvar ctx_{{js .Id}} = document.getElementById(\&#34;service_{{js .Id}}\&#34;).getContext(&#39;2d&#39;);\nvar chartdata_{{js .Id}} = new Chart(ctx_{{js .Id}}, {\n type: &#39;line&#39;,\n data: {\n datasets: [{\n label: &#39;Response Time (Milliseconds)&#39;,\n data: [],\n backgroundColor: [&#39;{{if .Online}}rgba(47, 206, 30, 0.92){{else}}rgb(221, 53, 69){{end}}&#39;],\n borderColor: [&#39;{{if .Online}}rgb(47, 171, 34){{else}}rgb(183, 32, 47){{end}}&#39;],\n borderWidth: 1\n }]\n },\n options: {\n maintainAspectRatio: !1,\n scaleShowValues: !0,\n layout: {\n padding: {\n left: 0,\n right: 0,\n top: 0,\n bottom: -10\n }\n },\n hover: {\n animationDuration: 0,\n },\n responsiveAnimationDuration: 0,\n animation: {\n duration: 3500,\n onComplete: function() {\n var chartInstance = this.chart,\n ctx = chartInstance.ctx;\n var controller = this.chart.controller;\n var xAxis = controller.scales[&#39;x-axis-0&#39;];\n var yAxis = controller.scales[&#39;y-axis-0&#39;];\n ctx.font = Chart.helpers.fontString(Chart.defaults.global.defaultFontSize, Chart.defaults.global.defaultFontStyle, Chart.defaults.global.defaultFontFamily);\n ctx.textAlign = &#39;center&#39;;\n ctx.textBaseline = &#39;bottom&#39;;\n var numTicks = xAxis.ticks.length;\n var yOffsetStart = xAxis.width / numTicks;\n var halfBarWidth = (xAxis.width / (numTicks * 2));\n xAxis.ticks.forEach(function(value, index) {\n var xOffset = 20;\n var yOffset = (yOffsetStart * index) + halfBarWidth;\n ctx.fillStyle = &#39;#e2e2e2&#39;;\n ctx.fillText(value, yOffset, xOffset)\n });\n this.data.datasets.forEach(function(dataset, i) {\n var meta = chartInstance.controller.getDatasetMeta(i);\n var hxH = 0;\n var hyH = 0;\n var hxL = 0;\n var hyL = 0;\n var highestNum = 0;\n var lowestnum = 999999999999;\n meta.data.forEach(function(bar, index) {\n var data = dataset.data[index];\n if (lowestnum &gt; data.y) {\n lowestnum = data.y;\n hxL = bar._model.x;\n hyL = bar._model.y\n }\n if (data.y &gt; highestNum) {\n highestNum = data.y;\n hxH = bar._model.x;\n hyH = bar._model.y\n }\n });\n if (hxH &gt;= 820) {\n hxH = 820\n } else if (50 &gt;= hxH) {\n hxH = 50\n }\n if (hxL &gt;= 820) {\n hxL = 820\n } else if (70 &gt;= hxL) {\n hxL = 70\n }\n ctx.fillStyle = &#39;#ffa7a2&#39;;\n ctx.fillText(highestNum + \&#34;ms\&#34;, hxH - 40, hyH + 15);\n ctx.fillStyle = &#39;#45d642&#39;;\n ctx.fillText(lowestnum + \&#34;ms\&#34;, hxL, hyL + 10);\n })\n }\n },\n legend: {\n display: !1\n },\n tooltips: {\n enabled: !1\n },\n scales: {\n yAxes: [{\n display: !1,\n ticks: {\n fontSize: 20,\n display: !1,\n beginAtZero: !1\n },\n gridLines: {\n display: !1\n }\n }],\n xAxes: [{\n type: &#39;time&#39;,\n distribution: &#39;series&#39;,\n autoSkip: !1,\n time: {\n displayFormats: {\n &#39;hour&#39;: &#39;MMM DD hA&#39;\n },\n source: &#39;auto&#39;\n },\n gridLines: {\n display: !1\n },\n ticks: {\n source: &#39;auto&#39;,\n stepSize: 1,\n min: 0,\n fontColor: \&#34;white\&#34;,\n fontSize: 20,\n display: !1\n }\n }]\n },\n elements: {\n point: {\n radius: 0\n }\n }\n }\n});\n\nAjaxChart(chartdata_{{js .Id}},{{js .Id}},0,99999999999,\&#34;hour\&#34;);\n{{end}}\n&#34;),</pre></code></td></tr><tr><td>81</td><td><code><pre> }</pre></code></td></tr><tr><td>82</td><td><code><pre> filea := &amp;embedded.EmbeddedFile{</pre></code></td></tr><tr><td>83</td><td><code><pre> Filename: &#34;charts.js&#34;,</pre></code></td></tr><tr><td>84</td><td><code><pre> FileModTime: time.Unix(1538579801, 0),</pre></code></td></tr><tr><td>85</td><td><code><pre> Content: string(&#34;{{define \&#34;charts\&#34;}}\n{{$start := .Start}}\n{{$end := .End}}\n{{ range .Services }}\nvar ctx_{{js .Id}} = document.getElementById(\&#34;service_{{js .Id}}\&#34;).getContext(&#39;2d&#39;);\nvar chartdata_{{js .Id}} = new Chart(ctx_{{js .Id}}, {\n type: &#39;line&#39;,\n data: {\n datasets: [{\n label: &#39;Response Time (Milliseconds)&#39;,\n data: [],\n backgroundColor: [&#39;{{if .Online}}rgba(47, 206, 30, 0.92){{else}}rgb(221, 53, 69){{end}}&#39;],\n borderColor: [&#39;{{if .Online}}rgb(47, 171, 34){{else}}rgb(183, 32, 47){{end}}&#39;],\n borderWidth: 1\n }]\n },\n options: {\n maintainAspectRatio: !1,\n scaleShowValues: !0,\n layout: {\n padding: {\n left: 0,\n right: 0,\n top: 0,\n bottom: -10\n }\n },\n hover: {\n animationDuration: 0,\n },\n responsiveAnimationDuration: 0,\n animation: {\n duration: 3500,\n onComplete: function() {\n var chartInstance = this.chart,\n ctx = chartInstance.ctx;\n var controller = this.chart.controller;\n var xAxis = controller.scales[&#39;x-axis-0&#39;];\n var yAxis = controller.scales[&#39;y-axis-0&#39;];\n ctx.font = Chart.helpers.fontString(Chart.defaults.global.defaultFontSize, Chart.defaults.global.defaultFontStyle, Chart.defaults.global.defaultFontFamily);\n ctx.textAlign = &#39;center&#39;;\n ctx.textBaseline = &#39;bottom&#39;;\n var numTicks = xAxis.ticks.length;\n var yOffsetStart = xAxis.width / numTicks;\n var halfBarWidth = (xAxis.width / (numTicks * 2));\n xAxis.ticks.forEach(function(value, index) {\n var xOffset = 20;\n var yOffset = (yOffsetStart * index) + halfBarWidth;\n ctx.fillStyle = &#39;#e2e2e2&#39;;\n ctx.fillText(value, yOffset, xOffset)\n });\n this.data.datasets.forEach(function(dataset, i) {\n var meta = chartInstance.controller.getDatasetMeta(i);\n var hxH = 0;\n var hyH = 0;\n var hxL = 0;\n var hyL = 0;\n var highestNum = 0;\n var lowestnum = 999999999999;\n meta.data.forEach(function(bar, index) {\n var data = dataset.data[index];\n if (lowestnum &gt; data.y) {\n lowestnum = data.y;\n hxL = bar._model.x;\n hyL = bar._model.y\n }\n if (data.y &gt; highestNum) {\n highestNum = data.y;\n hxH = bar._model.x;\n hyH = bar._model.y\n }\n });\n if (hxH &gt;= 820) {\n hxH = 820\n } else if (50 &gt;= hxH) {\n hxH = 50\n }\n if (hxL &gt;= 820) {\n hxL = 820\n } else if (70 &gt;= hxL) {\n hxL = 70\n }\n ctx.fillStyle = &#39;#ffa7a2&#39;;\n ctx.fillText(highestNum + \&#34;ms\&#34;, hxH - 40, hyH + 15);\n ctx.fillStyle = &#39;#45d642&#39;;\n ctx.fillText(lowestnum + \&#34;ms\&#34;, hxL, hyL + 10);\n })\n }\n },\n legend: {\n display: !1\n },\n tooltips: {\n enabled: !1\n },\n scales: {\n yAxes: [{\n display: !1,\n ticks: {\n fontSize: 20,\n display: !1,\n beginAtZero: !1\n },\n gridLines: {\n display: !1\n }\n }],\n xAxes: [{\n type: &#39;time&#39;,\n distribution: &#39;series&#39;,\n autoSkip: !1,\n time: {\n displayFormats: {\n &#39;hour&#39;: &#39;MMM DD hA&#39;\n },\n source: &#39;auto&#39;\n },\n gridLines: {\n display: !1\n },\n ticks: {\n source: &#39;auto&#39;,\n stepSize: 1,\n min: 0,\n fontColor: \&#34;white\&#34;,\n fontSize: 20,\n display: !1\n }\n }]\n },\n elements: {\n point: {\n radius: 0\n }\n }\n }\n});\n\nAjaxChart(chartdata_{{js .Id}},{{js .Id}},{{$start}},{{$end}},\&#34;hour\&#34;);\n{{end}}{{end}}\n&#34;),</pre></code></td></tr><tr><td>86</td><td><code><pre> }</pre></code></td></tr><tr><td>87</td><td><code><pre> fileb := &amp;embedded.EmbeddedFile{</pre></code></td></tr><tr><td>88</td><td><code><pre> Filename: &#34;jquery-3.3.1.min.js&#34;,</pre></code></td></tr><tr><td>89</td><td><code><pre> FileModTime: time.Unix(1534926456, 0),</pre></code></td></tr><tr><td>90</td><td><code><pre> Content: string(&#34;/*! jQuery v3.3.1 | (c) JS Foundation and other contributors | jquery.org/license */\n!function(e,t){\&#34;use strict\&#34;;\&#34;object\&#34;==typeof module&amp;&amp;\&#34;object\&#34;==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error(\&#34;jQuery requires a window with a document\&#34;);return t(e)}:t(e)}(\&#34;undefined\&#34;!=typeof window?window:this,function(e,t){\&#34;use strict\&#34;;var n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,s=n.push,u=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,p=f.toString,d=p.call(Object),h={},g=function e(t){return\&#34;function\&#34;==typeof t&amp;&amp;\&#34;number\&#34;!=typeof t.nodeType},y=function e(t){return null!=t&amp;&amp;t===t.window},v={type:!0,src:!0,noModule:!0};function m(e,t,n){var i,o=(t=t||r).createElement(\&#34;script\&#34;);if(o.text=e,n)for(i in v)n[i]&amp;&amp;(o[i]=n[i]);t.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+\&#34;\&#34;:\&#34;object\&#34;==typeof e||\&#34;function\&#34;==typeof e?l[c.call(e)]||\&#34;object\&#34;:typeof e}var b=\&#34;3.3.1\&#34;,w=function(e,t){return new w.fn.init(e,t)},T=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;w.fn=w.prototype={jquery:\&#34;3.3.1\&#34;,constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e&lt;0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e&lt;0?t:0);return this.pushStack(n&gt;=0&amp;&amp;n&lt;t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:s,sort:n.sort,splice:n.splice},w.extend=w.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for(\&#34;boolean\&#34;==typeof a&amp;&amp;(l=a,a=arguments[s]||{},s++),\&#34;object\&#34;==typeof a||g(a)||(a={}),s===u&amp;&amp;(a=this,s--);s&lt;u;s++)if(null!=(e=arguments[s]))for(t in e)n=a[t],a!==(r=e[t])&amp;&amp;(l&amp;&amp;r&amp;&amp;(w.isPlainObject(r)||(i=Array.isArray(r)))?(i?(i=!1,o=n&amp;&amp;Array.isArray(n)?n:[]):o=n&amp;&amp;w.isPlainObject(n)?n:{},a[t]=w.extend(l,o,r)):void 0!==r&amp;&amp;(a[t]=r));return a},w.extend({expando:\&#34;jQuery\&#34;+(\&#34;3.3.1\&#34;+Math.random()).replace(/\\D/g,\&#34;\&#34;),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||\&#34;[object Object]\&#34;!==c.call(e))&amp;&amp;(!(t=i(e))||\&#34;function\&#34;==typeof(n=f.call(t,\&#34;constructor\&#34;)&amp;&amp;t.constructor)&amp;&amp;p.call(n)===d)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e){m(e)},each:function(e,t){var n,r=0;if(C(e)){for(n=e.length;r&lt;n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},trim:function(e){return null==e?\&#34;\&#34;:(e+\&#34;\&#34;).replace(T,\&#34;\&#34;)},makeArray:function(e,t){var n=t||[];return null!=e&amp;&amp;(C(Object(e))?w.merge(n,\&#34;string\&#34;==typeof e?[e]:e):s.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:u.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r&lt;n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r,i=[],o=0,a=e.length,s=!n;o&lt;a;o++)(r=!t(e[o],o))!==s&amp;&amp;i.push(e[o]);return i},map:function(e,t,n){var r,i,o=0,s=[];if(C(e))for(r=e.length;o&lt;r;o++)null!=(i=t(e[o],o,n))&amp;&amp;s.push(i);else for(o in e)null!=(i=t(e[o],o,n))&amp;&amp;s.push(i);return a.apply([],s)},guid:1,support:h}),\&#34;function\&#34;==typeof Symbol&amp;&amp;(w.fn[Symbol.iterator]=n[Symbol.iterator]),w.each(\&#34;Boolean Number String Function Array Date RegExp Object Error Symbol\&#34;.split(\&#34; \&#34;),function(e,t){l[\&#34;[object \&#34;+t+\&#34;]\&#34;]=t.toLowerCase()});function C(e){var t=!!e&amp;&amp;\&#34;length\&#34;in e&amp;&amp;e.length,n=x(e);return!g(e)&amp;&amp;!y(e)&amp;&amp;(\&#34;array\&#34;===n||0===t||\&#34;number\&#34;==typeof t&amp;&amp;t&gt;0&amp;&amp;t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b=\&#34;sizzle\&#34;+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&amp;&amp;(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n&lt;r;n++)if(e[n]===t)return n;return-1},P=\&#34;checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\&#34;,M=\&#34;[\\\\x20\\\\t\\\\r\\\\n\\\\f]\&#34;,R=\&#34;(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\&#34;,I=\&#34;\\\\[\&#34;+M+\&#34;*(\&#34;+R+\&#34;)(?:\&#34;+M+\&#34;*([*^$|!~]?=)\&#34;+M+\&#34;*(?:&#39;((?:\\\\\\\\.|[^\\\\\\\\&#39;])*)&#39;|\\\&#34;((?:\\\\\\\\.|[^\\\\\\\\\\\&#34;])*)\\\&#34;|(\&#34;+R+\&#34;))|)\&#34;+M+\&#34;*\\\\]\&#34;,W=\&#34;:(\&#34;+R+\&#34;)(?:\\\\(((&#39;((?:\\\\\\\\.|[^\\\\\\\\&#39;])*)&#39;|\\\&#34;((?:\\\\\\\\.|[^\\\\\\\\\\\&#34;])*)\\\&#34;)|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\&#34;+I+\&#34;)*)|.*)\\\\)|)\&#34;,$=new RegExp(M+\&#34;+\&#34;,\&#34;g\&#34;),B=new RegExp(\&#34;^\&#34;+M+\&#34;+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\&#34;+M+\&#34;+$\&#34;,\&#34;g\&#34;),F=new RegExp(\&#34;^\&#34;+M+\&#34;*,\&#34;+M+\&#34;*\&#34;),_=new RegExp(\&#34;^\&#34;+M+\&#34;*([&gt;+~]|\&#34;+M+\&#34;)\&#34;+M+\&#34;*\&#34;),z=new RegExp(\&#34;=\&#34;+M+\&#34;*([^\\\\]&#39;\\\&#34;]*?)\&#34;+M+\&#34;*\\\\]\&#34;,\&#34;g\&#34;),X=new RegExp(W),U=new RegExp(\&#34;^\&#34;+R+\&#34;$\&#34;),V={ID:new RegExp(\&#34;^#(\&#34;+R+\&#34;)\&#34;),CLASS:new RegExp(\&#34;^\\\\.(\&#34;+R+\&#34;)\&#34;),TAG:new RegExp(\&#34;^(\&#34;+R+\&#34;|[*])\&#34;),ATTR:new RegExp(\&#34;^\&#34;+I),PSEUDO:new RegExp(\&#34;^\&#34;+W),CHILD:new RegExp(\&#34;^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\&#34;+M+\&#34;*(even|odd|(([+-]|)(\\\\d*)n|)\&#34;+M+\&#34;*(?:([+-]|)\&#34;+M+\&#34;*(\\\\d+)|))\&#34;+M+\&#34;*\\\\)|)\&#34;,\&#34;i\&#34;),bool:new RegExp(\&#34;^(?:\&#34;+P+\&#34;)$\&#34;,\&#34;i\&#34;),needsContext:new RegExp(\&#34;^\&#34;+M+\&#34;*[&gt;+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\&#34;+M+\&#34;*((?:-\\\\d)?\\\\d*)\&#34;+M+\&#34;*\\\\)|)(?=[^-]|$)\&#34;,\&#34;i\&#34;)},G=/^(?:input|select|textarea|button)$/i,Y=/^h\\d$/i,Q=/^[^{]+\\{\\s*\\[native \\w/,J=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,K=/[+~]/,Z=new RegExp(\&#34;\\\\\\\\([\\\\da-f]{1,6}\&#34;+M+\&#34;?|(\&#34;+M+\&#34;)|.)\&#34;,\&#34;ig\&#34;),ee=function(e,t,n){var r=\&#34;0x\&#34;+t-65536;return r!==r||n?t:r&lt;0?String.fromCharCode(r+65536):String.fromCharCode(r&gt;&gt;10|55296,1023&amp;r|56320)},te=/([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,ne=function(e,t){return t?\&#34;\\0\&#34;===e?\&#34;\\ufffd\&#34;:e.slice(0,-1)+\&#34;\\\\\&#34;+e.charCodeAt(e.length-1).toString(16)+\&#34; \&#34;:\&#34;\\\\\&#34;+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&amp;&amp;(\&#34;form\&#34;in e||\&#34;label\&#34;in e)},{dir:\&#34;parentNode\&#34;,next:\&#34;legend\&#34;});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&amp;&amp;t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],\&#34;string\&#34;!=typeof e||!e||1!==T&amp;&amp;9!==T&amp;&amp;11!==T)return r;if(!i&amp;&amp;((t?t.ownerDocument||t:w)!==d&amp;&amp;p(t),t=t||d,g)){if(11!==T&amp;&amp;(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&amp;&amp;(l=m.getElementById(o))&amp;&amp;x(t,l)&amp;&amp;l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&amp;&amp;n.getElementsByClassName&amp;&amp;t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&amp;&amp;!S[e+\&#34; \&#34;]&amp;&amp;(!y||!y.test(e))){if(1!==T)m=t,v=e;else if(\&#34;object\&#34;!==t.nodeName.toLowerCase()){(c=t.getAttribute(\&#34;id\&#34;))?c=c.replace(te,ne):t.setAttribute(\&#34;id\&#34;,c=b),s=(h=a(e)).length;while(s--)h[s]=\&#34;#\&#34;+c+\&#34; \&#34;+ve(h[s]);v=h.join(\&#34;,\&#34;),m=K.test(e)&amp;&amp;ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&amp;&amp;t.removeAttribute(\&#34;id\&#34;)}}}return u(e.replace(B,\&#34;$1\&#34;),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+\&#34; \&#34;)&gt;r.cacheLength&amp;&amp;delete t[e.shift()],t[n+\&#34; \&#34;]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement(\&#34;fieldset\&#34;);try{return!!e(t)}catch(e){return!1}finally{t.parentNode&amp;&amp;t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split(\&#34;|\&#34;),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&amp;&amp;e,r=n&amp;&amp;1===e.nodeType&amp;&amp;1===t.nodeType&amp;&amp;e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return\&#34;input\&#34;===t.nodeName.toLowerCase()&amp;&amp;t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return(\&#34;input\&#34;===n||\&#34;button\&#34;===n)&amp;&amp;t.type===e}}function de(e){return function(t){return\&#34;form\&#34;in t?t.parentNode&amp;&amp;!1===t.disabled?\&#34;label\&#34;in t?\&#34;label\&#34;in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&amp;&amp;ie(t)===e:t.disabled===e:\&#34;label\&#34;in t&amp;&amp;t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&amp;&amp;(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&amp;&amp;\&#34;undefined\&#34;!=typeof e.getElementsByTagName&amp;&amp;e}n=oe.support={},o=oe.isXML=function(e){var t=e&amp;&amp;(e.ownerDocument||e).documentElement;return!!t&amp;&amp;\&#34;HTML\&#34;!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&amp;&amp;9===a.nodeType&amp;&amp;a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&amp;&amp;(i=d.defaultView)&amp;&amp;i.top!==i&amp;&amp;(i.addEventListener?i.addEventListener(\&#34;unload\&#34;,re,!1):i.attachEvent&amp;&amp;i.attachEvent(\&#34;onunload\&#34;,re)),n.attributes=ue(function(e){return e.className=\&#34;i\&#34;,!e.getAttribute(\&#34;className\&#34;)}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment(\&#34;\&#34;)),!e.getElementsByTagName(\&#34;*\&#34;).length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute(\&#34;id\&#34;)===t}},r.find.ID=function(e,t){if(\&#34;undefined\&#34;!=typeof t.getElementById&amp;&amp;g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n=\&#34;undefined\&#34;!=typeof e.getAttributeNode&amp;&amp;e.getAttributeNode(\&#34;id\&#34;);return n&amp;&amp;n.value===t}},r.find.ID=function(e,t){if(\&#34;undefined\&#34;!=typeof t.getElementById&amp;&amp;g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode(\&#34;id\&#34;))&amp;&amp;n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode(\&#34;id\&#34;))&amp;&amp;n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return\&#34;undefined\&#34;!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if(\&#34;*\&#34;===e){while(n=o[i++])1===n.nodeType&amp;&amp;r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&amp;&amp;function(e,t){if(\&#34;undefined\&#34;!=typeof t.getElementsByClassName&amp;&amp;g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&amp;&amp;(ue(function(e){h.appendChild(e).innerHTML=\&#34;&lt;a id=&#39;\&#34;+b+\&#34;&#39;&gt;&lt;/a&gt;&lt;select id=&#39;\&#34;+b+\&#34;-\\r\\\\&#39; msallowcapture=&#39;&#39;&gt;&lt;option selected=&#39;&#39;&gt;&lt;/option&gt;&lt;/select&gt;\&#34;,e.querySelectorAll(\&#34;[msallowcapture^=&#39;&#39;]\&#34;).length&amp;&amp;y.push(\&#34;[*^$]=\&#34;+M+\&#34;*(?:&#39;&#39;|\\\&#34;\\\&#34;)\&#34;),e.querySelectorAll(\&#34;[selected]\&#34;).length||y.push(\&#34;\\\\[\&#34;+M+\&#34;*(?:value|\&#34;+P+\&#34;)\&#34;),e.querySelectorAll(\&#34;[id~=\&#34;+b+\&#34;-]\&#34;).length||y.push(\&#34;~=\&#34;),e.querySelectorAll(\&#34;:checked\&#34;).length||y.push(\&#34;:checked\&#34;),e.querySelectorAll(\&#34;a#\&#34;+b+\&#34;+*\&#34;).length||y.push(\&#34;.#.+[+~]\&#34;)}),ue(function(e){e.innerHTML=\&#34;&lt;a href=&#39;&#39; disabled=&#39;disabled&#39;&gt;&lt;/a&gt;&lt;select disabled=&#39;disabled&#39;&gt;&lt;option/&gt;&lt;/select&gt;\&#34;;var t=d.createElement(\&#34;input\&#34;);t.setAttribute(\&#34;type\&#34;,\&#34;hidden\&#34;),e.appendChild(t).setAttribute(\&#34;name\&#34;,\&#34;D\&#34;),e.querySelectorAll(\&#34;[name=d]\&#34;).length&amp;&amp;y.push(\&#34;name\&#34;+M+\&#34;*[*^$|!~]?=\&#34;),2!==e.querySelectorAll(\&#34;:enabled\&#34;).length&amp;&amp;y.push(\&#34;:enabled\&#34;,\&#34;:disabled\&#34;),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(\&#34;:disabled\&#34;).length&amp;&amp;y.push(\&#34;:enabled\&#34;,\&#34;:disabled\&#34;),e.querySelectorAll(\&#34;*,:x\&#34;),y.push(\&#34;,.*:\&#34;)})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&amp;&amp;ue(function(e){n.disconnectedMatch=m.call(e,\&#34;*\&#34;),m.call(e,\&#34;[s!=&#39;&#39;]:x\&#34;),v.push(\&#34;!=\&#34;,W)}),y=y.length&amp;&amp;new RegExp(y.join(\&#34;|\&#34;)),v=v.length&amp;&amp;new RegExp(v.join(\&#34;|\&#34;)),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&amp;&amp;t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&amp;&amp;16&amp;e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&amp;(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&amp;&amp;t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&amp;&amp;x(w,e)?-1:t===d||t.ownerDocument===w&amp;&amp;x(w,t)?1:c?O(c,e)-O(c,t):0:4&amp;r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&amp;&amp;p(e),t=t.replace(z,\&#34;=&#39;$1&#39;]\&#34;),n.matchesSelector&amp;&amp;g&amp;&amp;!S[t+\&#34; \&#34;]&amp;&amp;(!v||!v.test(t))&amp;&amp;(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&amp;&amp;11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length&gt;0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&amp;&amp;p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&amp;&amp;p(e);var i=r.attrHandle[t.toLowerCase()],o=i&amp;&amp;N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&amp;&amp;o.specified?o.value:null},oe.escape=function(e){return(e+\&#34;\&#34;).replace(te,ne)},oe.error=function(e){throw new Error(\&#34;Syntax error, unrecognized expression: \&#34;+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&amp;&amp;e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&amp;&amp;(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n=\&#34;\&#34;,r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if(\&#34;string\&#34;==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,attrHandle:{},find:{},relative:{\&#34;&gt;\&#34;:{dir:\&#34;parentNode\&#34;,first:!0},\&#34; \&#34;:{dir:\&#34;parentNode\&#34;},\&#34;+\&#34;:{dir:\&#34;previousSibling\&#34;,first:!0},\&#34;~\&#34;:{dir:\&#34;previousSibling\&#34;}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||\&#34;\&#34;).replace(Z,ee),\&#34;~=\&#34;===e[2]&amp;&amp;(e[3]=\&#34; \&#34;+e[3]+\&#34; \&#34;),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),\&#34;nth\&#34;===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*(\&#34;even\&#34;===e[3]||\&#34;odd\&#34;===e[3])),e[5]=+(e[7]+e[8]||\&#34;odd\&#34;===e[3])):e[3]&amp;&amp;oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&amp;&amp;e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||\&#34;\&#34;:n&amp;&amp;X.test(n)&amp;&amp;(t=a(n,!0))&amp;&amp;(t=n.indexOf(\&#34;)\&#34;,n.length-t)-n.length)&amp;&amp;(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return\&#34;*\&#34;===e?function(){return!0}:function(e){return e.nodeName&amp;&amp;e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+\&#34; \&#34;];return t||(t=new RegExp(\&#34;(^|\&#34;+M+\&#34;)\&#34;+e+\&#34;(\&#34;+M+\&#34;|$)\&#34;))&amp;&amp;E(e,function(e){return t.test(\&#34;string\&#34;==typeof e.className&amp;&amp;e.className||\&#34;undefined\&#34;!=typeof e.getAttribute&amp;&amp;e.getAttribute(\&#34;class\&#34;)||\&#34;\&#34;)})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?\&#34;!=\&#34;===t:!t||(i+=\&#34;\&#34;,\&#34;=\&#34;===t?i===n:\&#34;!=\&#34;===t?i!==n:\&#34;^=\&#34;===t?n&amp;&amp;0===i.indexOf(n):\&#34;*=\&#34;===t?n&amp;&amp;i.indexOf(n)&gt;-1:\&#34;$=\&#34;===t?n&amp;&amp;i.slice(-n.length)===n:\&#34;~=\&#34;===t?(\&#34; \&#34;+i.replace($,\&#34; \&#34;)+\&#34; \&#34;).indexOf(n)&gt;-1:\&#34;|=\&#34;===t&amp;&amp;(i===n||i.slice(0,n.length+1)===n+\&#34;-\&#34;))}},CHILD:function(e,t,n,r,i){var o=\&#34;nth\&#34;!==e.slice(0,3),a=\&#34;last\&#34;!==e.slice(-4),s=\&#34;of-type\&#34;===t;return 1===r&amp;&amp;0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?\&#34;nextSibling\&#34;:\&#34;previousSibling\&#34;,y=t.parentNode,v=s&amp;&amp;t.nodeName.toLowerCase(),m=!u&amp;&amp;!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g=\&#34;only\&#34;===e&amp;&amp;!h&amp;&amp;\&#34;nextSibling\&#34;}return!0}if(h=[a?y.firstChild:y.lastChild],a&amp;&amp;m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&amp;&amp;l[1])&amp;&amp;l[2],p=d&amp;&amp;y.childNodes[d];while(p=++d&amp;&amp;p&amp;&amp;p[g]||(x=d=0)||h.pop())if(1===p.nodeType&amp;&amp;++x&amp;&amp;p===t){c[e]=[T,d,x];break}}else if(m&amp;&amp;(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&amp;&amp;l[1]),!1===x)while(p=++d&amp;&amp;p&amp;&amp;p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&amp;&amp;++x&amp;&amp;(m&amp;&amp;((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&amp;&amp;x/r&gt;=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error(\&#34;unsupported pseudo: \&#34;+e);return i[b]?i(t):i.length&gt;1?(n=[e,e,\&#34;\&#34;,t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,\&#34;$1\&#34;));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&amp;&amp;(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length&gt;0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)&gt;-1}}),lang:se(function(e){return U.test(e||\&#34;\&#34;)||oe.error(\&#34;unsupported lang: \&#34;+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute(\&#34;xml:lang\&#34;)||t.getAttribute(\&#34;lang\&#34;))return(n=n.toLowerCase())===e||0===n.indexOf(e+\&#34;-\&#34;)}while((t=t.parentNode)&amp;&amp;1===t.nodeType);return!1}}),target:function(t){var n=e.location&amp;&amp;e.location.hash;return n&amp;&amp;n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&amp;&amp;(!d.hasFocus||d.hasFocus())&amp;&amp;!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return\&#34;input\&#34;===t&amp;&amp;!!e.checked||\&#34;option\&#34;===t&amp;&amp;!!e.selected},selected:function(e){return e.parentNode&amp;&amp;e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType&lt;6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return\&#34;input\&#34;===t&amp;&amp;\&#34;button\&#34;===e.type||\&#34;button\&#34;===t},text:function(e){var t;return\&#34;input\&#34;===e.nodeName.toLowerCase()&amp;&amp;\&#34;text\&#34;===e.type&amp;&amp;(null==(t=e.getAttribute(\&#34;type\&#34;))||\&#34;text\&#34;===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n&lt;0?n+t:n]}),even:he(function(e,t){for(var n=0;n&lt;t;n+=2)e.push(n);return e}),odd:he(function(e,t){for(var n=1;n&lt;t;n+=2)e.push(n);return e}),lt:he(function(e,t,n){for(var r=n&lt;0?n+t:n;--r&gt;=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n&lt;0?n+t:n;++r&lt;t;)e.push(r);return e})}}).pseudos.nth=r.pseudos.eq;for(t in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})r.pseudos[t]=fe(t);for(t in{submit:!0,reset:!0})r.pseudos[t]=pe(t);function ye(){}ye.prototype=r.filters=r.pseudos,r.setFilters=new ye,a=oe.tokenize=function(e,t){var n,i,o,a,s,u,l,c=k[e+\&#34; \&#34;];if(c)return t?0:c.slice(0);s=e,u=[],l=r.preFilter;while(s){n&amp;&amp;!(i=F.exec(s))||(i&amp;&amp;(s=s.slice(i[0].length)||s),u.push(o=[])),n=!1,(i=_.exec(s))&amp;&amp;(n=i.shift(),o.push({value:n,type:i[0].replace(B,\&#34; \&#34;)}),s=s.slice(n.length));for(a in r.filter)!(i=V[a].exec(s))||l[a]&amp;&amp;!(i=l[a](i))||(n=i.shift(),o.push({value:n,type:a,matches:i}),s=s.slice(n.length));if(!n)break}return t?s.length:s?oe.error(e):k(e,u).slice(0)};function ve(e){for(var t=0,n=e.length,r=\&#34;\&#34;;t&lt;n;t++)r+=e[t].value;return r}function me(e,t,n){var r=t.dir,i=t.next,o=i||r,a=n&amp;&amp;\&#34;parentNode\&#34;===o,s=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||a)return e(t,n,i);return!1}:function(t,n,u){var l,c,f,p=[T,s];if(u){while(t=t[r])if((1===t.nodeType||a)&amp;&amp;e(t,n,u))return!0}else while(t=t[r])if(1===t.nodeType||a)if(f=t[b]||(t[b]={}),c=f[t.uniqueID]||(f[t.uniqueID]={}),i&amp;&amp;i===t.nodeName.toLowerCase())t=t[r]||t;else{if((l=c[o])&amp;&amp;l[0]===T&amp;&amp;l[1]===s)return p[2]=l[2];if(c[o]=p,p[2]=e(t,n,u))return!0}return!1}}function xe(e){return e.length&gt;1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r&lt;i;r++)oe(e,t[r],n);return n}function we(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s&lt;u;s++)(o=e[s])&amp;&amp;(n&amp;&amp;!n(o,r,i)||(a.push(o),l&amp;&amp;t.push(s)));return a}function Te(e,t,n,r,i,o){return r&amp;&amp;!r[b]&amp;&amp;(r=Te(r)),i&amp;&amp;!i[b]&amp;&amp;(i=Te(i,o)),se(function(o,a,s,u){var l,c,f,p=[],d=[],h=a.length,g=o||be(t||\&#34;*\&#34;,s.nodeType?[s]:s,[]),y=!e||!o&amp;&amp;t?g:we(g,p,e,s,u),v=n?i||(o?e:h||r)?[]:a:y;if(n&amp;&amp;n(y,v,s,u),r){l=we(v,d),r(l,[],s,u),c=l.length;while(c--)(f=l[c])&amp;&amp;(v[d[c]]=!(y[d[c]]=f))}if(o){if(i||e){if(i){l=[],c=v.length;while(c--)(f=v[c])&amp;&amp;l.push(y[c]=f);i(null,v=[],l,u)}c=v.length;while(c--)(f=v[c])&amp;&amp;(l=i?O(o,f):p[c])&gt;-1&amp;&amp;(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[\&#34; \&#34;],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)&gt;-1},s,!0),p=[function(e,n,r){var i=!a&amp;&amp;(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u&lt;o;u++)if(n=r.relative[e[u].type])p=[me(xe(p),n)];else{if((n=r.filter[e[u].type].apply(null,e[u].matches))[b]){for(i=++u;i&lt;o;i++)if(r.relative[e[i].type])break;return Te(u&gt;1&amp;&amp;xe(p),u&gt;1&amp;&amp;ve(e.slice(0,u-1).concat({value:\&#34; \&#34;===e[u-2].type?\&#34;*\&#34;:\&#34;\&#34;})).replace(B,\&#34;$1\&#34;),n,u&lt;i&amp;&amp;Ce(e.slice(u,i)),i&lt;o&amp;&amp;Ce(e=e.slice(i)),i&lt;o&amp;&amp;ve(e))}p.push(n)}return xe(p)}function Ee(e,t){var n=t.length&gt;0,i=e.length&gt;0,o=function(o,a,s,u,c){var f,h,y,v=0,m=\&#34;0\&#34;,x=o&amp;&amp;[],b=[],w=l,C=o||i&amp;&amp;r.find.TAG(\&#34;*\&#34;,c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&amp;&amp;(l=a===d||a||c);m!==k&amp;&amp;null!=(f=C[m]);m++){if(i&amp;&amp;f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&amp;&amp;(T=E)}n&amp;&amp;((f=!y&amp;&amp;f)&amp;&amp;v--,o&amp;&amp;x.push(f))}if(v+=m,n&amp;&amp;m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v&gt;0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&amp;&amp;!o&amp;&amp;b.length&gt;0&amp;&amp;v+t.length&gt;1&amp;&amp;oe.uniqueSort(u)}return c&amp;&amp;(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+\&#34; \&#34;];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p=\&#34;function\&#34;==typeof e&amp;&amp;e,d=!i&amp;&amp;a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length&gt;2&amp;&amp;\&#34;ID\&#34;===(l=u[0]).type&amp;&amp;9===t.nodeType&amp;&amp;g&amp;&amp;r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&amp;&amp;(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&amp;&amp;(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&amp;&amp;ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&amp;&amp;ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&amp;&amp;ge(t.parentNode)||t),n},n.sortStable=b.split(\&#34;\&#34;).sort(D).join(\&#34;\&#34;)===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&amp;e.compareDocumentPosition(d.createElement(\&#34;fieldset\&#34;))}),ue(function(e){return e.innerHTML=\&#34;&lt;a href=&#39;#&#39;&gt;&lt;/a&gt;\&#34;,\&#34;#\&#34;===e.firstChild.getAttribute(\&#34;href\&#34;)})||le(\&#34;type|href|height|width\&#34;,function(e,t,n){if(!n)return e.getAttribute(t,\&#34;type\&#34;===t.toLowerCase()?1:2)}),n.attributes&amp;&amp;ue(function(e){return e.innerHTML=\&#34;&lt;input/&gt;\&#34;,e.firstChild.setAttribute(\&#34;value\&#34;,\&#34;\&#34;),\&#34;\&#34;===e.firstChild.getAttribute(\&#34;value\&#34;)})||le(\&#34;value\&#34;,function(e,t,n){if(!n&amp;&amp;\&#34;input\&#34;===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute(\&#34;disabled\&#34;)})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&amp;&amp;r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[\&#34;:\&#34;]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&amp;&amp;9!==e.nodeType)if(1===e.nodeType){if(i&amp;&amp;w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&amp;&amp;e!==t&amp;&amp;n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&amp;&amp;e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^&lt;([a-z][^\\/\\0&gt;:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?&gt;(?:&lt;\\/\\1&gt;|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):\&#34;string\&#34;!=typeof t?w.grep(e,function(e){return u.call(t,e)&gt;-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&amp;&amp;(e=\&#34;:not(\&#34;+e+\&#34;)\&#34;),1===t.length&amp;&amp;1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if(\&#34;string\&#34;!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t&lt;r;t++)if(w.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t&lt;r;t++)w.find(e,i[t],n);return r&gt;1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,\&#34;string\&#34;==typeof e&amp;&amp;D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\\s*(&lt;[\\w\\W]+&gt;)[^&gt;]*|#([\\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,\&#34;string\&#34;==typeof e){if(!(i=\&#34;&lt;\&#34;===e[0]&amp;&amp;\&#34;&gt;\&#34;===e[e.length-1]&amp;&amp;e.length&gt;=3?[null,e,null]:L.exec(e))||!i[1]&amp;&amp;t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&amp;&amp;t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&amp;&amp;w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&amp;&amp;(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e&lt;n;e++)if(w.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a=\&#34;string\&#34;!=typeof e&amp;&amp;w(e);if(!D.test(e))for(;r&lt;i;r++)for(n=this[r];n&amp;&amp;n!==t;n=n.parentNode)if(n.nodeType&lt;11&amp;&amp;(a?a.index(n)&gt;-1:1===n.nodeType&amp;&amp;w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length&gt;1?w.uniqueSort(o):o)},index:function(e){return e?\&#34;string\&#34;==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&amp;&amp;this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&amp;&amp;1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&amp;&amp;11!==t.nodeType?t:null},parents:function(e){return k(e,\&#34;parentNode\&#34;)},parentsUntil:function(e,t,n){return k(e,\&#34;parentNode\&#34;,n)},next:function(e){return P(e,\&#34;nextSibling\&#34;)},prev:function(e){return P(e,\&#34;previousSibling\&#34;)},nextAll:function(e){return k(e,\&#34;nextSibling\&#34;)},prevAll:function(e){return k(e,\&#34;previousSibling\&#34;)},nextUntil:function(e,t,n){return k(e,\&#34;nextSibling\&#34;,n)},prevUntil:function(e,t,n){return k(e,\&#34;previousSibling\&#34;,n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,\&#34;iframe\&#34;)?e.contentDocument:(N(e,\&#34;template\&#34;)&amp;&amp;(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return\&#34;Until\&#34;!==e.slice(-5)&amp;&amp;(r=n),r&amp;&amp;\&#34;string\&#34;==typeof r&amp;&amp;(i=w.filter(r,i)),this.length&gt;1&amp;&amp;(O[e]||w.uniqueSort(i),H.test(e)&amp;&amp;i.reverse()),this.pushStack(i)}});var M=/[^\\x20\\t\\r\\n\\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e=\&#34;string\&#34;==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s&lt;o.length)!1===o[s].apply(n[0],n[1])&amp;&amp;e.stopOnFalse&amp;&amp;(s=o.length,n=!1)}e.memory||(n=!1),t=!1,i&amp;&amp;(o=n?[]:\&#34;\&#34;)},l={add:function(){return o&amp;&amp;(n&amp;&amp;!t&amp;&amp;(s=o.length-1,a.push(n)),function t(n){w.each(n,function(n,r){g(r)?e.unique&amp;&amp;l.has(r)||o.push(r):r&amp;&amp;r.length&amp;&amp;\&#34;string\&#34;!==x(r)&amp;&amp;t(r)})}(arguments),n&amp;&amp;!t&amp;&amp;u()),this},remove:function(){return w.each(arguments,function(e,t){var n;while((n=w.inArray(t,o,n))&gt;-1)o.splice(n,1),n&lt;=s&amp;&amp;s--}),this},has:function(e){return e?w.inArray(e,o)&gt;-1:o.length&gt;0},empty:function(){return o&amp;&amp;(o=[]),this},disable:function(){return i=a=[],o=n=\&#34;\&#34;,this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=\&#34;\&#34;),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&amp;&amp;g(i=e.promise)?i.call(e).done(t).fail(n):e&amp;&amp;g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[[\&#34;notify\&#34;,\&#34;progress\&#34;,w.Callbacks(\&#34;memory\&#34;),w.Callbacks(\&#34;memory\&#34;),2],[\&#34;resolve\&#34;,\&#34;done\&#34;,w.Callbacks(\&#34;once memory\&#34;),w.Callbacks(\&#34;once memory\&#34;),0,\&#34;resolved\&#34;],[\&#34;reject\&#34;,\&#34;fail\&#34;,w.Callbacks(\&#34;once memory\&#34;),w.Callbacks(\&#34;once memory\&#34;),1,\&#34;rejected\&#34;]],r=\&#34;pending\&#34;,i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},\&#34;catch\&#34;:function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&amp;&amp;e[r[4]];o[r[1]](function(){var e=i&amp;&amp;i.apply(this,arguments);e&amp;&amp;g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+\&#34;With\&#34;](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t&lt;o)){if((e=r.apply(s,u))===n.promise())throw new TypeError(\&#34;Thenable self-resolution\&#34;);l=e&amp;&amp;(\&#34;object\&#34;==typeof e||\&#34;function\&#34;==typeof e)&amp;&amp;e.then,g(l)?i?l.call(e,a(o,n,I,i),a(o,n,W,i)):(o++,l.call(e,a(o,n,I,i),a(o,n,W,i),a(o,n,I,n.notifyWith))):(r!==I&amp;&amp;(s=void 0,u=[e]),(i||n.resolveWith)(s,u))}},c=i?l:function(){try{l()}catch(e){w.Deferred.exceptionHook&amp;&amp;w.Deferred.exceptionHook(e,c.stackTrace),t+1&gt;=o&amp;&amp;(r!==W&amp;&amp;(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&amp;&amp;(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&amp;&amp;a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+\&#34;With\&#34;](this===o?void 0:this,arguments),this},o[t[0]+\&#34;With\&#34;]=a.fireWith}),i.promise(o),t&amp;&amp;t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length&gt;1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t&lt;=1&amp;&amp;($(e,a.done(s(n)).resolve,a.reject,!t),\&#34;pending\&#34;===a.state()||g(i[n]&amp;&amp;i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&amp;&amp;e.console.warn&amp;&amp;t&amp;&amp;B.test(t.name)&amp;&amp;e.console.warn(\&#34;jQuery.Deferred exception: \&#34;+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)[\&#34;catch\&#34;](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&amp;&amp;--w.readyWait&gt;0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener(\&#34;DOMContentLoaded\&#34;,_),e.removeEventListener(\&#34;load\&#34;,_),w.ready()}\&#34;complete\&#34;===r.readyState||\&#34;loading\&#34;!==r.readyState&amp;&amp;!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener(\&#34;DOMContentLoaded\&#34;,_),e.addEventListener(\&#34;load\&#34;,_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if(\&#34;object\&#34;===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&amp;&amp;(i=!0,g(r)||(a=!0),l&amp;&amp;(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;s&lt;u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},X=/^-ms-/,U=/-([a-z])/g;function V(e,t){return t.toUpperCase()}function G(e){return e.replace(X,\&#34;ms-\&#34;).replace(U,V)}var Y=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function Q(){this.expando=w.expando+Q.uid++}Q.uid=1,Q.prototype={cache:function(e){var t=e[this.expando];return t||(t={},Y(e)&amp;&amp;(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if(\&#34;string\&#34;==typeof t)i[G(t)]=n;else for(r in t)i[G(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&amp;&amp;e[this.expando][G(t)]},access:function(e,t,n){return void 0===t||t&amp;&amp;\&#34;string\&#34;==typeof t&amp;&amp;void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(G):(t=G(t))in r?[t]:t.match(M)||[]).length;while(n--)delete r[t[n]]}(void 0===t||w.isEmptyObject(r))&amp;&amp;(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&amp;&amp;!w.isEmptyObject(t)}};var J=new Q,K=new Q,Z=/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,ee=/[A-Z]/g;function te(e){return\&#34;true\&#34;===e||\&#34;false\&#34;!==e&amp;&amp;(\&#34;null\&#34;===e?null:e===+e+\&#34;\&#34;?+e:Z.test(e)?JSON.parse(e):e)}function ne(e,t,n){var r;if(void 0===n&amp;&amp;1===e.nodeType)if(r=\&#34;data-\&#34;+t.replace(ee,\&#34;-$&amp;\&#34;).toLowerCase(),\&#34;string\&#34;==typeof(n=e.getAttribute(r))){try{n=te(n)}catch(e){}K.set(e,t,n)}else n=void 0;return n}w.extend({hasData:function(e){return K.hasData(e)||J.hasData(e)},data:function(e,t,n){return K.access(e,t,n)},removeData:function(e,t){K.remove(e,t)},_data:function(e,t,n){return J.access(e,t,n)},_removeData:function(e,t){J.remove(e,t)}}),w.fn.extend({data:function(e,t){var n,r,i,o=this[0],a=o&amp;&amp;o.attributes;if(void 0===e){if(this.length&amp;&amp;(i=K.get(o),1===o.nodeType&amp;&amp;!J.get(o,\&#34;hasDataAttrs\&#34;))){n=a.length;while(n--)a[n]&amp;&amp;0===(r=a[n].name).indexOf(\&#34;data-\&#34;)&amp;&amp;(r=G(r.slice(5)),ne(o,r,i[r]));J.set(o,\&#34;hasDataAttrs\&#34;,!0)}return i}return\&#34;object\&#34;==typeof e?this.each(function(){K.set(this,e)}):z(this,function(t){var n;if(o&amp;&amp;void 0===t){if(void 0!==(n=K.get(o,e)))return n;if(void 0!==(n=ne(o,e)))return n}else this.each(function(){K.set(this,e,t)})},null,t,arguments.length&gt;1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||\&#34;fx\&#34;)+\&#34;queue\&#34;,r=J.get(e,t),n&amp;&amp;(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||\&#34;fx\&#34;;var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};\&#34;inprogress\&#34;===i&amp;&amp;(i=n.shift(),r--),i&amp;&amp;(\&#34;fx\&#34;===t&amp;&amp;n.unshift(\&#34;inprogress\&#34;),delete o.stop,i.call(e,a,o)),!r&amp;&amp;o&amp;&amp;o.empty.fire()},_queueHooks:function(e,t){var n=t+\&#34;queueHooks\&#34;;return J.get(e,n)||J.access(e,n,{empty:w.Callbacks(\&#34;once memory\&#34;).add(function(){J.remove(e,[t+\&#34;queue\&#34;,n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return\&#34;string\&#34;!=typeof e&amp;&amp;(t=e,e=\&#34;fx\&#34;,n--),arguments.length&lt;n?w.queue(this[0],e):void 0===t?this:this.each(function(){var n=w.queue(this,e,t);w._queueHooks(this,e),\&#34;fx\&#34;===e&amp;&amp;\&#34;inprogress\&#34;!==n[0]&amp;&amp;w.dequeue(this,e)})},dequeue:function(e){return this.each(function(){w.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||\&#34;fx\&#34;,[])},promise:function(e,t){var n,r=1,i=w.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};\&#34;string\&#34;!=typeof e&amp;&amp;(t=e,e=void 0),e=e||\&#34;fx\&#34;;while(a--)(n=J.get(o[a],e+\&#34;queueHooks\&#34;))&amp;&amp;n.empty&amp;&amp;(r++,n.empty.add(s));return s(),i.promise(t)}});var re=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,ie=new RegExp(\&#34;^(?:([+-])=|)(\&#34;+re+\&#34;)([a-z%]*)$\&#34;,\&#34;i\&#34;),oe=[\&#34;Top\&#34;,\&#34;Right\&#34;,\&#34;Bottom\&#34;,\&#34;Left\&#34;],ae=function(e,t){return\&#34;none\&#34;===(e=t||e).style.display||\&#34;\&#34;===e.style.display&amp;&amp;w.contains(e.ownerDocument,e)&amp;&amp;\&#34;none\&#34;===w.css(e,\&#34;display\&#34;)},se=function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i};function ue(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return w.css(e,t,\&#34;\&#34;)},u=s(),l=n&amp;&amp;n[3]||(w.cssNumber[t]?\&#34;\&#34;:\&#34;px\&#34;),c=(w.cssNumber[t]||\&#34;px\&#34;!==l&amp;&amp;+u)&amp;&amp;ie.exec(w.css(e,t));if(c&amp;&amp;c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)w.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))&lt;=0&amp;&amp;(a=0),c/=o;c*=2,w.style(e,t,c+l),n=n||[]}return n&amp;&amp;(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&amp;&amp;(r.unit=l,r.start=c,r.end=i)),i}var le={};function ce(e){var t,n=e.ownerDocument,r=e.nodeName,i=le[r];return i||(t=n.body.appendChild(n.createElement(r)),i=w.css(t,\&#34;display\&#34;),t.parentNode.removeChild(t),\&#34;none\&#34;===i&amp;&amp;(i=\&#34;block\&#34;),le[r]=i,i)}function fe(e,t){for(var n,r,i=[],o=0,a=e.length;o&lt;a;o++)(r=e[o]).style&amp;&amp;(n=r.style.display,t?(\&#34;none\&#34;===n&amp;&amp;(i[o]=J.get(r,\&#34;display\&#34;)||null,i[o]||(r.style.display=\&#34;\&#34;)),\&#34;\&#34;===r.style.display&amp;&amp;ae(r)&amp;&amp;(i[o]=ce(r))):\&#34;none\&#34;!==n&amp;&amp;(i[o]=\&#34;none\&#34;,J.set(r,\&#34;display\&#34;,n)));for(o=0;o&lt;a;o++)null!=i[o]&amp;&amp;(e[o].style.display=i[o]);return e}w.fn.extend({show:function(){return fe(this,!0)},hide:function(){return fe(this)},toggle:function(e){return\&#34;boolean\&#34;==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?w(this).show():w(this).hide()})}});var pe=/^(?:checkbox|radio)$/i,de=/&lt;([a-z][^\\/\\0&gt;\\x20\\t\\r\\n\\f]+)/i,he=/^$|^module$|\\/(?:java|ecma)script/i,ge={option:[1,\&#34;&lt;select multiple=&#39;multiple&#39;&gt;\&#34;,\&#34;&lt;/select&gt;\&#34;],thead:[1,\&#34;&lt;table&gt;\&#34;,\&#34;&lt;/table&gt;\&#34;],col:[2,\&#34;&lt;table&gt;&lt;colgroup&gt;\&#34;,\&#34;&lt;/colgroup&gt;&lt;/table&gt;\&#34;],tr:[2,\&#34;&lt;table&gt;&lt;tbody&gt;\&#34;,\&#34;&lt;/tbody&gt;&lt;/table&gt;\&#34;],td:[3,\&#34;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;\&#34;,\&#34;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;\&#34;],_default:[0,\&#34;\&#34;,\&#34;\&#34;]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n=\&#34;undefined\&#34;!=typeof e.getElementsByTagName?e.getElementsByTagName(t||\&#34;*\&#34;):\&#34;undefined\&#34;!=typeof e.querySelectorAll?e.querySelectorAll(t||\&#34;*\&#34;):[],void 0===t||t&amp;&amp;N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n&lt;r;n++)J.set(e[n],\&#34;globalEval\&#34;,!t||J.get(t[n],\&#34;globalEval\&#34;))}var me=/&lt;|&amp;#?\\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d&lt;h;d++)if((o=e[d])||0===o)if(\&#34;object\&#34;===x(o))w.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement(\&#34;div\&#34;)),s=(de.exec(o)||[\&#34;\&#34;,\&#34;\&#34;])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+w.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;w.merge(p,a.childNodes),(a=f.firstChild).textContent=\&#34;\&#34;}else p.push(t.createTextNode(o));f.textContent=\&#34;\&#34;,d=0;while(o=p[d++])if(r&amp;&amp;w.inArray(o,r)&gt;-1)i&amp;&amp;i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),\&#34;script\&#34;),l&amp;&amp;ve(a),n){c=0;while(o=a[c++])he.test(o.type||\&#34;\&#34;)&amp;&amp;n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement(\&#34;div\&#34;)),t=r.createElement(\&#34;input\&#34;);t.setAttribute(\&#34;type\&#34;,\&#34;radio\&#34;),t.setAttribute(\&#34;checked\&#34;,\&#34;checked\&#34;),t.setAttribute(\&#34;name\&#34;,\&#34;t\&#34;),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML=\&#34;&lt;textarea&gt;x&lt;/textarea&gt;\&#34;,h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if(\&#34;object\&#34;==typeof t){\&#34;string\&#34;!=typeof n&amp;&amp;(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&amp;&amp;null==i?(i=n,r=n=void 0):null==i&amp;&amp;(\&#34;string\&#34;==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&amp;&amp;(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&amp;&amp;(n=(o=n).handler,i=o.selector),i&amp;&amp;w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return\&#34;undefined\&#34;!=typeof w&amp;&amp;w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||\&#34;\&#34;).match(M)||[\&#34;\&#34;]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||\&#34;\&#34;).split(\&#34;.\&#34;).sort(),d&amp;&amp;(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&amp;&amp;w.expr.match.needsContext.test(i),namespace:h.join(\&#34;.\&#34;)},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&amp;&amp;!1!==f.setup.call(e,r,h,a)||e.addEventListener&amp;&amp;e.addEventListener(d,a)),f.add&amp;&amp;(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&amp;&amp;J.get(e);if(y&amp;&amp;(u=y.events)){l=(t=(t||\&#34;\&#34;).match(M)||[\&#34;\&#34;]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||\&#34;\&#34;).split(\&#34;.\&#34;).sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&amp;&amp;new RegExp(\&#34;(^|\\\\.)\&#34;+h.join(\&#34;\\\\.(?:.*\\\\.|)\&#34;)+\&#34;(\\\\.|$)\&#34;),a=o=p.length;while(o--)c=p[o],!i&amp;&amp;g!==c.origType||n&amp;&amp;n.guid!==c.guid||s&amp;&amp;!s.test(c.namespace)||r&amp;&amp;r!==c.selector&amp;&amp;(\&#34;**\&#34;!==r||!c.selector)||(p.splice(o,1),c.selector&amp;&amp;p.delegateCount--,f.remove&amp;&amp;f.remove.call(e,c));a&amp;&amp;!p.length&amp;&amp;(f.teardown&amp;&amp;!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&amp;&amp;J.remove(e,\&#34;handle events\&#34;)}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,\&#34;events\&#34;)||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n&lt;arguments.length;n++)u[n]=arguments[n];if(t.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,t)){s=w.event.handlers.call(this,t,l),n=0;while((o=s[n++])&amp;&amp;!t.isPropagationStopped()){t.currentTarget=o.elem,r=0;while((a=o.handlers[r++])&amp;&amp;!t.isImmediatePropagationStopped())t.rnamespace&amp;&amp;!t.rnamespace.test(a.namespace)||(t.handleObj=a,t.data=a.data,void 0!==(i=((w.event.special[a.origType]||{}).handle||a.handler).apply(o.elem,u))&amp;&amp;!1===(t.result=i)&amp;&amp;(t.preventDefault(),t.stopPropagation()))}return c.postDispatch&amp;&amp;c.postDispatch.call(this,t),t.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&amp;&amp;l.nodeType&amp;&amp;!(\&#34;click\&#34;===e.type&amp;&amp;e.button&gt;=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&amp;&amp;(\&#34;click\&#34;!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n&lt;u;n++)void 0===a[i=(r=t[n]).selector+\&#34; \&#34;]&amp;&amp;(a[i]=r.needsContext?w(i,this).index(l)&gt;-1:w.find(i,this,null,[l]).length),a[i]&amp;&amp;o.push(r);o.length&amp;&amp;s.push({elem:l,handlers:o})}return l=this,u&lt;t.length&amp;&amp;s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(e,t){Object.defineProperty(w.Event.prototype,e,{enumerable:!0,configurable:!0,get:g(t)?function(){if(this.originalEvent)return t(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[e]},set:function(t){Object.defineProperty(this,e,{enumerable:!0,configurable:!0,writable:!0,value:t})}})},fix:function(e){return e[w.expando]?e:new w.Event(e)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==Se()&amp;&amp;this.focus)return this.focus(),!1},delegateType:\&#34;focusin\&#34;},blur:{trigger:function(){if(this===Se()&amp;&amp;this.blur)return this.blur(),!1},delegateType:\&#34;focusout\&#34;},click:{trigger:function(){if(\&#34;checkbox\&#34;===this.type&amp;&amp;this.click&amp;&amp;N(this,\&#34;input\&#34;))return this.click(),!1},_default:function(e){return N(e.target,\&#34;a\&#34;)}},beforeunload:{postDispatch:function(e){void 0!==e.result&amp;&amp;e.originalEvent&amp;&amp;(e.originalEvent.returnValue=e.result)}}}},w.removeEvent=function(e,t,n){e.removeEventListener&amp;&amp;e.removeEventListener(t,n)},w.Event=function(e,t){if(!(this instanceof w.Event))return new w.Event(e,t);e&amp;&amp;e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&amp;&amp;!1===e.returnValue?Ee:ke,this.target=e.target&amp;&amp;3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&amp;&amp;w.extend(this,t),this.timeStamp=e&amp;&amp;e.timeStamp||Date.now(),this[w.expando]=!0},w.Event.prototype={constructor:w.Event,isDefaultPrevented:ke,isPropagationStopped:ke,isImmediatePropagationStopped:ke,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ee,e&amp;&amp;!this.isSimulated&amp;&amp;e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ee,e&amp;&amp;!this.isSimulated&amp;&amp;e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ee,e&amp;&amp;!this.isSimulated&amp;&amp;e.stopImmediatePropagation(),this.stopPropagation()}},w.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,\&#34;char\&#34;:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&amp;&amp;we.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&amp;&amp;void 0!==t&amp;&amp;Te.test(e.type)?1&amp;t?1:2&amp;t?3:4&amp;t?2:0:e.which}},w.event.addProp),w.each({mouseenter:\&#34;mouseover\&#34;,mouseleave:\&#34;mouseout\&#34;,pointerenter:\&#34;pointerover\&#34;,pointerleave:\&#34;pointerout\&#34;},function(e,t){w.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return i&amp;&amp;(i===r||w.contains(r,i))||(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),w.fn.extend({on:function(e,t,n,r){return De(this,e,t,n,r)},one:function(e,t,n,r){return De(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&amp;&amp;e.preventDefault&amp;&amp;e.handleObj)return r=e.handleObj,w(e.delegateTarget).off(r.namespace?r.origType+\&#34;.\&#34;+r.namespace:r.origType,r.selector,r.handler),this;if(\&#34;object\&#34;==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&amp;&amp;\&#34;function\&#34;!=typeof t||(n=t,t=void 0),!1===n&amp;&amp;(n=ke),this.each(function(){w.event.remove(this,e,n,t)})}});var Ne=/&lt;(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0&gt;\\x20\\t\\r\\n\\f]*)[^&gt;]*)\\/&gt;/gi,Ae=/&lt;script|&lt;style|&lt;link/i,je=/checked\\s*(?:[^=]|=\\s*.checked.)/i,qe=/^\\s*&lt;!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)&gt;\\s*$/g;function Le(e,t){return N(e,\&#34;table\&#34;)&amp;&amp;N(11!==t.nodeType?t:t.firstChild,\&#34;tr\&#34;)?w(e).children(\&#34;tbody\&#34;)[0]||e:e}function He(e){return e.type=(null!==e.getAttribute(\&#34;type\&#34;))+\&#34;/\&#34;+e.type,e}function Oe(e){return\&#34;true/\&#34;===(e.type||\&#34;\&#34;).slice(0,5)?e.type=e.type.slice(5):e.removeAttribute(\&#34;type\&#34;),e}function Pe(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(J.hasData(e)&amp;&amp;(o=J.access(e),a=J.set(t,o),l=o.events)){delete a.handle,a.events={};for(i in l)for(n=0,r=l[i].length;n&lt;r;n++)w.event.add(t,i,l[i][n])}K.hasData(e)&amp;&amp;(s=K.access(e),u=w.extend({},s),K.set(t,u))}}function Me(e,t){var n=t.nodeName.toLowerCase();\&#34;input\&#34;===n&amp;&amp;pe.test(e.type)?t.checked=e.checked:\&#34;input\&#34;!==n&amp;&amp;\&#34;textarea\&#34;!==n||(t.defaultValue=e.defaultValue)}function Re(e,t,n,r){t=a.apply([],t);var i,o,s,u,l,c,f=0,p=e.length,d=p-1,y=t[0],v=g(y);if(v||p&gt;1&amp;&amp;\&#34;string\&#34;==typeof y&amp;&amp;!h.checkClone&amp;&amp;je.test(y))return e.each(function(i){var o=e.eq(i);v&amp;&amp;(t[0]=y.call(this,i,o.html())),Re(o,t,n,r)});if(p&amp;&amp;(i=xe(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&amp;&amp;(i=o),o||r)){for(u=(s=w.map(ye(i,\&#34;script\&#34;),He)).length;f&lt;p;f++)l=i,f!==d&amp;&amp;(l=w.clone(l,!0,!0),u&amp;&amp;w.merge(s,ye(l,\&#34;script\&#34;))),n.call(e[f],l,f);if(u)for(c=s[s.length-1].ownerDocument,w.map(s,Oe),f=0;f&lt;u;f++)l=s[f],he.test(l.type||\&#34;\&#34;)&amp;&amp;!J.access(l,\&#34;globalEval\&#34;)&amp;&amp;w.contains(c,l)&amp;&amp;(l.src&amp;&amp;\&#34;module\&#34;!==(l.type||\&#34;\&#34;).toLowerCase()?w._evalUrl&amp;&amp;w._evalUrl(l.src):m(l.textContent.replace(qe,\&#34;\&#34;),c,l))}return e}function Ie(e,t,n){for(var r,i=t?w.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||w.cleanData(ye(r)),r.parentNode&amp;&amp;(n&amp;&amp;w.contains(r.ownerDocument,r)&amp;&amp;ve(ye(r,\&#34;script\&#34;)),r.parentNode.removeChild(r));return e}w.extend({htmlPrefilter:function(e){return e.replace(Ne,\&#34;&lt;$1&gt;&lt;/$2&gt;\&#34;)},clone:function(e,t,n){var r,i,o,a,s=e.cloneNode(!0),u=w.contains(e.ownerDocument,e);if(!(h.noCloneChecked||1!==e.nodeType&amp;&amp;11!==e.nodeType||w.isXMLDoc(e)))for(a=ye(s),r=0,i=(o=ye(e)).length;r&lt;i;r++)Me(o[r],a[r]);if(t)if(n)for(o=o||ye(e),a=a||ye(s),r=0,i=o.length;r&lt;i;r++)Pe(o[r],a[r]);else Pe(e,s);return(a=ye(s,\&#34;script\&#34;)).length&gt;0&amp;&amp;ve(a,!u&amp;&amp;ye(e,\&#34;script\&#34;)),s},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[K.expando]&amp;&amp;(n[K.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return z(this,function(e){return void 0===e?w.text(this):this.empty().each(function(){1!==this.nodeType&amp;&amp;11!==this.nodeType&amp;&amp;9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Re(this,arguments,function(e){1!==this.nodeType&amp;&amp;11!==this.nodeType&amp;&amp;9!==this.nodeType||Le(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Le(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&amp;&amp;this.parentNode.insertBefore(e,this)})},after:function(){return Re(this,arguments,function(e){this.parentNode&amp;&amp;this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&amp;&amp;(w.cleanData(ye(e,!1)),e.textContent=\&#34;\&#34;);return this},clone:function(e,t){return e=null!=e&amp;&amp;e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return z(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&amp;&amp;1===t.nodeType)return t.innerHTML;if(\&#34;string\&#34;==typeof e&amp;&amp;!Ae.test(e)&amp;&amp;!ge[(de.exec(e)||[\&#34;\&#34;,\&#34;\&#34;])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n&lt;r;n++)1===(t=this[n]||{}).nodeType&amp;&amp;(w.cleanData(ye(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&amp;&amp;this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=[];return Re(this,arguments,function(t){var n=this.parentNode;w.inArray(this,e)&lt;0&amp;&amp;(w.cleanData(ye(this)),n&amp;&amp;n.replaceChild(t,this))},e)}}),w.each({appendTo:\&#34;append\&#34;,prependTo:\&#34;prepend\&#34;,insertBefore:\&#34;before\&#34;,insertAfter:\&#34;after\&#34;,replaceAll:\&#34;replaceWith\&#34;},function(e,t){w.fn[e]=function(e){for(var n,r=[],i=w(e),o=i.length-1,a=0;a&lt;=o;a++)n=a===o?this:this.clone(!0),w(i[a])[t](n),s.apply(r,n.get());return this.pushStack(r)}});var We=new RegExp(\&#34;^(\&#34;+re+\&#34;)(?!px)[a-z%]+$\&#34;,\&#34;i\&#34;),$e=function(t){var n=t.ownerDocument.defaultView;return n&amp;&amp;n.opener||(n=e),n.getComputedStyle(t)},Be=new RegExp(oe.join(\&#34;|\&#34;),\&#34;i\&#34;);!function(){function t(){if(c){l.style.cssText=\&#34;position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0\&#34;,c.style.cssText=\&#34;position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%\&#34;,be.appendChild(l).appendChild(c);var t=e.getComputedStyle(c);i=\&#34;1%\&#34;!==t.top,u=12===n(t.marginLeft),c.style.right=\&#34;60%\&#34;,s=36===n(t.right),o=36===n(t.width),c.style.position=\&#34;absolute\&#34;,a=36===c.offsetWidth||\&#34;absolute\&#34;,be.removeChild(l),c=null}}function n(e){return Math.round(parseFloat(e))}var i,o,a,s,u,l=r.createElement(\&#34;div\&#34;),c=r.createElement(\&#34;div\&#34;);c.style&amp;&amp;(c.style.backgroundClip=\&#34;content-box\&#34;,c.cloneNode(!0).style.backgroundClip=\&#34;\&#34;,h.clearCloneStyle=\&#34;content-box\&#34;===c.style.backgroundClip,w.extend(h,{boxSizingReliable:function(){return t(),o},pixelBoxStyles:function(){return t(),s},pixelPosition:function(){return t(),i},reliableMarginLeft:function(){return t(),u},scrollboxSize:function(){return t(),a}}))}();function Fe(e,t,n){var r,i,o,a,s=e.style;return(n=n||$e(e))&amp;&amp;(\&#34;\&#34;!==(a=n.getPropertyValue(t)||n[t])||w.contains(e.ownerDocument,e)||(a=w.style(e,t)),!h.pixelBoxStyles()&amp;&amp;We.test(a)&amp;&amp;Be.test(t)&amp;&amp;(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+\&#34;\&#34;:a}function _e(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}var ze=/^(none|table(?!-c[ea]).+)/,Xe=/^--/,Ue={position:\&#34;absolute\&#34;,visibility:\&#34;hidden\&#34;,display:\&#34;block\&#34;},Ve={letterSpacing:\&#34;0\&#34;,fontWeight:\&#34;400\&#34;},Ge=[\&#34;Webkit\&#34;,\&#34;Moz\&#34;,\&#34;ms\&#34;],Ye=r.createElement(\&#34;div\&#34;).style;function Qe(e){if(e in Ye)return e;var t=e[0].toUpperCase()+e.slice(1),n=Ge.length;while(n--)if((e=Ge[n]+t)in Ye)return e}function Je(e){var t=w.cssProps[e];return t||(t=w.cssProps[e]=Qe(e)||e),t}function Ke(e,t,n){var r=ie.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||\&#34;px\&#34;):t}function Ze(e,t,n,r,i,o){var a=\&#34;width\&#34;===t?1:0,s=0,u=0;if(n===(r?\&#34;border\&#34;:\&#34;content\&#34;))return 0;for(;a&lt;4;a+=2)\&#34;margin\&#34;===n&amp;&amp;(u+=w.css(e,n+oe[a],!0,i)),r?(\&#34;content\&#34;===n&amp;&amp;(u-=w.css(e,\&#34;padding\&#34;+oe[a],!0,i)),\&#34;margin\&#34;!==n&amp;&amp;(u-=w.css(e,\&#34;border\&#34;+oe[a]+\&#34;Width\&#34;,!0,i))):(u+=w.css(e,\&#34;padding\&#34;+oe[a],!0,i),\&#34;padding\&#34;!==n?u+=w.css(e,\&#34;border\&#34;+oe[a]+\&#34;Width\&#34;,!0,i):s+=w.css(e,\&#34;border\&#34;+oe[a]+\&#34;Width\&#34;,!0,i));return!r&amp;&amp;o&gt;=0&amp;&amp;(u+=Math.max(0,Math.ceil(e[\&#34;offset\&#34;+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=$e(e),i=Fe(e,t,r),o=\&#34;border-box\&#34;===w.css(e,\&#34;boxSizing\&#34;,!1,r),a=o;if(We.test(i)){if(!n)return i;i=\&#34;auto\&#34;}return a=a&amp;&amp;(h.boxSizingReliable()||i===e.style[t]),(\&#34;auto\&#34;===i||!parseFloat(i)&amp;&amp;\&#34;inline\&#34;===w.css(e,\&#34;display\&#34;,!1,r))&amp;&amp;(i=e[\&#34;offset\&#34;+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?\&#34;border\&#34;:\&#34;content\&#34;),a,r,i)+\&#34;px\&#34;}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Fe(e,\&#34;opacity\&#34;);return\&#34;\&#34;===n?\&#34;1\&#34;:n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&amp;&amp;3!==e.nodeType&amp;&amp;8!==e.nodeType&amp;&amp;e.style){var i,o,a,s=G(t),u=Xe.test(t),l=e.style;if(u||(t=Je(s)),a=w.cssHooks[t]||w.cssHooks[s],void 0===n)return a&amp;&amp;\&#34;get\&#34;in a&amp;&amp;void 0!==(i=a.get(e,!1,r))?i:l[t];\&#34;string\&#34;==(o=typeof n)&amp;&amp;(i=ie.exec(n))&amp;&amp;i[1]&amp;&amp;(n=ue(e,t,i),o=\&#34;number\&#34;),null!=n&amp;&amp;n===n&amp;&amp;(\&#34;number\&#34;===o&amp;&amp;(n+=i&amp;&amp;i[3]||(w.cssNumber[s]?\&#34;\&#34;:\&#34;px\&#34;)),h.clearCloneStyle||\&#34;\&#34;!==n||0!==t.indexOf(\&#34;background\&#34;)||(l[t]=\&#34;inherit\&#34;),a&amp;&amp;\&#34;set\&#34;in a&amp;&amp;void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=G(t);return Xe.test(t)||(t=Je(s)),(a=w.cssHooks[t]||w.cssHooks[s])&amp;&amp;\&#34;get\&#34;in a&amp;&amp;(i=a.get(e,!0,n)),void 0===i&amp;&amp;(i=Fe(e,t,r)),\&#34;normal\&#34;===i&amp;&amp;t in Ve&amp;&amp;(i=Ve[t]),\&#34;\&#34;===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each([\&#34;height\&#34;,\&#34;width\&#34;],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!ze.test(w.css(e,\&#34;display\&#34;))||e.getClientRects().length&amp;&amp;e.getBoundingClientRect().width?et(e,t,r):se(e,Ue,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=$e(e),a=\&#34;border-box\&#34;===w.css(e,\&#34;boxSizing\&#34;,!1,o),s=r&amp;&amp;Ze(e,t,r,a,o);return a&amp;&amp;h.scrollboxSize()===o.position&amp;&amp;(s-=Math.ceil(e[\&#34;offset\&#34;+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,\&#34;border\&#34;,!1,o)-.5)),s&amp;&amp;(i=ie.exec(n))&amp;&amp;\&#34;px\&#34;!==(i[3]||\&#34;px\&#34;)&amp;&amp;(e.style[t]=n,n=w.css(e,t)),Ke(e,n,s)}}}),w.cssHooks.marginLeft=_e(h.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Fe(e,\&#34;marginLeft\&#34;))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+\&#34;px\&#34;}),w.each({margin:\&#34;\&#34;,padding:\&#34;\&#34;,border:\&#34;Width\&#34;},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o=\&#34;string\&#34;==typeof n?n.split(\&#34; \&#34;):[n];r&lt;4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},\&#34;margin\&#34;!==e&amp;&amp;(w.cssHooks[e+t].set=Ke)}),w.fn.extend({css:function(e,t){return z(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$e(e),i=t.length;a&lt;i;a++)o[t[a]]=w.css(e,t[a],!1,r);return o}return void 0!==n?w.style(e,t,n):w.css(e,t)},e,t,arguments.length&gt;1)}});function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}w.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(w.cssNumber[n]?\&#34;\&#34;:\&#34;px\&#34;)},cur:function(){var e=tt.propHooks[this.prop];return e&amp;&amp;e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&amp;&amp;this.options.step.call(this.elem,this.now,this),n&amp;&amp;n.set?n.set(this):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&amp;&amp;null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,\&#34;\&#34;))&amp;&amp;\&#34;auto\&#34;!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[w.cssProps[e.prop]]&amp;&amp;!w.cssHooks[e.prop]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&amp;&amp;e.elem.parentNode&amp;&amp;(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:\&#34;swing\&#34;},w.fx=tt.prototype.init,w.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&amp;&amp;(!1===r.hidden&amp;&amp;e.requestAnimationFrame?e.requestAnimationFrame(at):e.setTimeout(at,w.fx.interval),w.fx.tick())}function st(){return e.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r&lt;4;r+=2-t)i[\&#34;margin\&#34;+(n=oe[r])]=i[\&#34;padding\&#34;+n]=e;return t&amp;&amp;(i.opacity=i.width=e),i}function lt(e,t,n){for(var r,i=(pt.tweeners[t]||[]).concat(pt.tweeners[\&#34;*\&#34;]),o=0,a=i.length;o&lt;a;o++)if(r=i[o].call(n,t,e))return r}function ct(e,t,n){var r,i,o,a,s,u,l,c,f=\&#34;width\&#34;in t||\&#34;height\&#34;in t,p=this,d={},h=e.style,g=e.nodeType&amp;&amp;ae(e),y=J.get(e,\&#34;fxshow\&#34;);n.queue||(null==(a=w._queueHooks(e,\&#34;fx\&#34;)).unqueued&amp;&amp;(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,w.queue(e,\&#34;fx\&#34;).length||a.empty.fire()})}));for(r in t)if(i=t[r],it.test(i)){if(delete t[r],o=o||\&#34;toggle\&#34;===i,i===(g?\&#34;hide\&#34;:\&#34;show\&#34;)){if(\&#34;show\&#34;!==i||!y||void 0===y[r])continue;g=!0}d[r]=y&amp;&amp;y[r]||w.style(e,r)}if((u=!w.isEmptyObject(t))||!w.isEmptyObject(d)){f&amp;&amp;1===e.nodeType&amp;&amp;(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=y&amp;&amp;y.display)&amp;&amp;(l=J.get(e,\&#34;display\&#34;)),\&#34;none\&#34;===(c=w.css(e,\&#34;display\&#34;))&amp;&amp;(l?c=l:(fe([e],!0),l=e.style.display||l,c=w.css(e,\&#34;display\&#34;),fe([e]))),(\&#34;inline\&#34;===c||\&#34;inline-block\&#34;===c&amp;&amp;null!=l)&amp;&amp;\&#34;none\&#34;===w.css(e,\&#34;float\&#34;)&amp;&amp;(u||(p.done(function(){h.display=l}),null==l&amp;&amp;(c=h.display,l=\&#34;none\&#34;===c?\&#34;\&#34;:c)),h.display=\&#34;inline-block\&#34;)),n.overflow&amp;&amp;(h.overflow=\&#34;hidden\&#34;,p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1;for(r in d)u||(y?\&#34;hidden\&#34;in y&amp;&amp;(g=y.hidden):y=J.access(e,\&#34;fxshow\&#34;,{display:l}),o&amp;&amp;(y.hidden=!g),g&amp;&amp;fe([e],!0),p.done(function(){g||fe([e]),J.remove(e,\&#34;fxshow\&#34;);for(r in d)w.style(e,r,d[r])})),u=lt(g?y[r]:0,r,p),r in y||(y[r]=u.start,g&amp;&amp;(u.end=u.start,u.start=0))}}function ft(e,t){var n,r,i,o,a;for(n in e)if(r=G(n),i=t[r],o=e[n],Array.isArray(o)&amp;&amp;(i=o[1],o=e[n]=o[0]),n!==r&amp;&amp;(e[r]=o,delete e[n]),(a=w.cssHooks[r])&amp;&amp;\&#34;expand\&#34;in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}function pt(e,t,n){var r,i,o=0,a=pt.prefilters.length,s=w.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;for(var t=nt||st(),n=Math.max(0,l.startTime+l.duration-t),r=1-(n/l.duration||0),o=0,a=l.tweens.length;o&lt;a;o++)l.tweens[o].run(r);return s.notifyWith(e,[l,r,n]),r&lt;1&amp;&amp;a?n:(a||s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:w.extend({},t),opts:w.extend(!0,{specialEasing:{},easing:w.easing._default},n),originalProperties:t,originalOptions:n,startTime:nt||st(),duration:n.duration,tweens:[],createTween:function(t,n){var r=w.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;n&lt;r;n++)l.tweens[n].run(1);return t?(s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l,t])):s.rejectWith(e,[l,t]),this}}),c=l.props;for(ft(c,l.opts.specialEasing);o&lt;a;o++)if(r=pt.prefilters[o].call(l,e,c,l.opts))return g(r.stop)&amp;&amp;(w._queueHooks(l.elem,l.opts.queue).stop=r.stop.bind(r)),r;return w.map(c,lt,l),g(l.opts.start)&amp;&amp;l.opts.start.call(e,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),w.fx.timer(w.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l}w.Animation=w.extend(pt,{tweeners:{\&#34;*\&#34;:[function(e,t){var n=this.createTween(e,t);return ue(n.elem,e,ie.exec(t),n),n}]},tweener:function(e,t){g(e)?(t=e,e=[\&#34;*\&#34;]):e=e.match(M);for(var n,r=0,i=e.length;r&lt;i;r++)n=e[r],pt.tweeners[n]=pt.tweeners[n]||[],pt.tweeners[n].unshift(t)},prefilters:[ct],prefilter:function(e,t){t?pt.prefilters.unshift(e):pt.prefilters.push(e)}}),w.speed=function(e,t,n){var r=e&amp;&amp;\&#34;object\&#34;==typeof e?w.extend({},e):{complete:n||!n&amp;&amp;t||g(e)&amp;&amp;e,duration:e,easing:n&amp;&amp;t||t&amp;&amp;!g(t)&amp;&amp;t};return w.fx.off?r.duration=0:\&#34;number\&#34;!=typeof r.duration&amp;&amp;(r.duration in w.fx.speeds?r.duration=w.fx.speeds[r.duration]:r.duration=w.fx.speeds._default),null!=r.queue&amp;&amp;!0!==r.queue||(r.queue=\&#34;fx\&#34;),r.old=r.complete,r.complete=function(){g(r.old)&amp;&amp;r.old.call(this),r.queue&amp;&amp;w.dequeue(this,r.queue)},r},w.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css(\&#34;opacity\&#34;,0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=w.isEmptyObject(e),o=w.speed(t,n,r),a=function(){var t=pt(this,w.extend({},e),o);(i||J.get(this,\&#34;finish\&#34;))&amp;&amp;t.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(e,t,n){var r=function(e){var t=e.stop;delete e.stop,t(n)};return\&#34;string\&#34;!=typeof e&amp;&amp;(n=t,t=e,e=void 0),t&amp;&amp;!1!==e&amp;&amp;this.queue(e||\&#34;fx\&#34;,[]),this.each(function(){var t=!0,i=null!=e&amp;&amp;e+\&#34;queueHooks\&#34;,o=w.timers,a=J.get(this);if(i)a[i]&amp;&amp;a[i].stop&amp;&amp;r(a[i]);else for(i in a)a[i]&amp;&amp;a[i].stop&amp;&amp;ot.test(i)&amp;&amp;r(a[i]);for(i=o.length;i--;)o[i].elem!==this||null!=e&amp;&amp;o[i].queue!==e||(o[i].anim.stop(n),t=!1,o.splice(i,1));!t&amp;&amp;n||w.dequeue(this,e)})},finish:function(e){return!1!==e&amp;&amp;(e=e||\&#34;fx\&#34;),this.each(function(){var t,n=J.get(this),r=n[e+\&#34;queue\&#34;],i=n[e+\&#34;queueHooks\&#34;],o=w.timers,a=r?r.length:0;for(n.finish=!0,w.queue(this,e,[]),i&amp;&amp;i.stop&amp;&amp;i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&amp;&amp;o[t].queue===e&amp;&amp;(o[t].anim.stop(!0),o.splice(t,1));for(t=0;t&lt;a;t++)r[t]&amp;&amp;r[t].finish&amp;&amp;r[t].finish.call(this);delete n.finish})}}),w.each([\&#34;toggle\&#34;,\&#34;show\&#34;,\&#34;hide\&#34;],function(e,t){var n=w.fn[t];w.fn[t]=function(e,r,i){return null==e||\&#34;boolean\&#34;==typeof e?n.apply(this,arguments):this.animate(ut(t,!0),e,r,i)}}),w.each({slideDown:ut(\&#34;show\&#34;),slideUp:ut(\&#34;hide\&#34;),slideToggle:ut(\&#34;toggle\&#34;),fadeIn:{opacity:\&#34;show\&#34;},fadeOut:{opacity:\&#34;hide\&#34;},fadeToggle:{opacity:\&#34;toggle\&#34;}},function(e,t){w.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),w.timers=[],w.fx.tick=function(){var e,t=0,n=w.timers;for(nt=Date.now();t&lt;n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||w.fx.stop(),nt=void 0},w.fx.timer=function(e){w.timers.push(e),w.fx.start()},w.fx.interval=13,w.fx.start=function(){rt||(rt=!0,at())},w.fx.stop=function(){rt=null},w.fx.speeds={slow:600,fast:200,_default:400},w.fn.delay=function(t,n){return t=w.fx?w.fx.speeds[t]||t:t,n=n||\&#34;fx\&#34;,this.queue(n,function(n,r){var i=e.setTimeout(n,t);r.stop=function(){e.clearTimeout(i)}})},function(){var e=r.createElement(\&#34;input\&#34;),t=r.createElement(\&#34;select\&#34;).appendChild(r.createElement(\&#34;option\&#34;));e.type=\&#34;checkbox\&#34;,h.checkOn=\&#34;\&#34;!==e.value,h.optSelected=t.selected,(e=r.createElement(\&#34;input\&#34;)).value=\&#34;t\&#34;,e.type=\&#34;radio\&#34;,h.radioValue=\&#34;t\&#34;===e.value}();var dt,ht=w.expr.attrHandle;w.fn.extend({attr:function(e,t){return z(this,w.attr,e,t,arguments.length&gt;1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&amp;&amp;8!==o&amp;&amp;2!==o)return\&#34;undefined\&#34;==typeof e.getAttribute?w.prop(e,t,n):(1===o&amp;&amp;w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):i&amp;&amp;\&#34;set\&#34;in i&amp;&amp;void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+\&#34;\&#34;),n):i&amp;&amp;\&#34;get\&#34;in i&amp;&amp;null!==(r=i.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&amp;&amp;\&#34;radio\&#34;===t&amp;&amp;N(e,\&#34;input\&#34;)){var n=e.value;return e.setAttribute(\&#34;type\&#34;,t),n&amp;&amp;(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&amp;&amp;t.match(M);if(i&amp;&amp;1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\\w+/g),function(e,t){var n=ht[t]||w.find.attr;ht[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=ht[a],ht[a]=i,i=null!=n(e,t,r)?a:null,ht[a]=o),i}});var gt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;w.fn.extend({prop:function(e,t){return z(this,w.prop,e,t,arguments.length&gt;1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&amp;&amp;8!==o&amp;&amp;2!==o)return 1===o&amp;&amp;w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.propHooks[t]),void 0!==n?i&amp;&amp;\&#34;set\&#34;in i&amp;&amp;void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&amp;&amp;\&#34;get\&#34;in i&amp;&amp;null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,\&#34;tabindex\&#34;);return t?parseInt(t,10):gt.test(e.nodeName)||yt.test(e.nodeName)&amp;&amp;e.href?0:-1}}},propFix:{\&#34;for\&#34;:\&#34;htmlFor\&#34;,\&#34;class\&#34;:\&#34;className\&#34;}}),h.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&amp;&amp;t.parentNode&amp;&amp;t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&amp;&amp;(t.selectedIndex,t.parentNode&amp;&amp;t.parentNode.selectedIndex)}}),w.each([\&#34;tabIndex\&#34;,\&#34;readOnly\&#34;,\&#34;maxLength\&#34;,\&#34;cellSpacing\&#34;,\&#34;cellPadding\&#34;,\&#34;rowSpan\&#34;,\&#34;colSpan\&#34;,\&#34;useMap\&#34;,\&#34;frameBorder\&#34;,\&#34;contentEditable\&#34;],function(){w.propFix[this.toLowerCase()]=this});function vt(e){return(e.match(M)||[]).join(\&#34; \&#34;)}function mt(e){return e.getAttribute&amp;&amp;e.getAttribute(\&#34;class\&#34;)||\&#34;\&#34;}function xt(e){return Array.isArray(e)?e:\&#34;string\&#34;==typeof e?e.match(M)||[]:[]}w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).addClass(e.call(this,t,mt(this)))});if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&amp;&amp;\&#34; \&#34;+vt(i)+\&#34; \&#34;){a=0;while(o=t[a++])r.indexOf(\&#34; \&#34;+o+\&#34; \&#34;)&lt;0&amp;&amp;(r+=o+\&#34; \&#34;);i!==(s=vt(r))&amp;&amp;n.setAttribute(\&#34;class\&#34;,s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).removeClass(e.call(this,t,mt(this)))});if(!arguments.length)return this.attr(\&#34;class\&#34;,\&#34;\&#34;);if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&amp;&amp;\&#34; \&#34;+vt(i)+\&#34; \&#34;){a=0;while(o=t[a++])while(r.indexOf(\&#34; \&#34;+o+\&#34; \&#34;)&gt;-1)r=r.replace(\&#34; \&#34;+o+\&#34; \&#34;,\&#34; \&#34;);i!==(s=vt(r))&amp;&amp;n.setAttribute(\&#34;class\&#34;,s)}return this},toggleClass:function(e,t){var n=typeof e,r=\&#34;string\&#34;===n||Array.isArray(e);return\&#34;boolean\&#34;==typeof t&amp;&amp;r?t?this.addClass(e):this.removeClass(e):g(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,mt(this),t),t)}):this.each(function(){var t,i,o,a;if(r){i=0,o=w(this),a=xt(e);while(t=a[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else void 0!==e&amp;&amp;\&#34;boolean\&#34;!==n||((t=mt(this))&amp;&amp;J.set(this,\&#34;__className__\&#34;,t),this.setAttribute&amp;&amp;this.setAttribute(\&#34;class\&#34;,t||!1===e?\&#34;\&#34;:J.get(this,\&#34;__className__\&#34;)||\&#34;\&#34;))})},hasClass:function(e){var t,n,r=0;t=\&#34; \&#34;+e+\&#34; \&#34;;while(n=this[r++])if(1===n.nodeType&amp;&amp;(\&#34; \&#34;+vt(mt(n))+\&#34; \&#34;).indexOf(t)&gt;-1)return!0;return!1}});var bt=/\\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=g(e),this.each(function(n){var i;1===this.nodeType&amp;&amp;(null==(i=r?e.call(this,n,w(this).val()):e)?i=\&#34;\&#34;:\&#34;number\&#34;==typeof i?i+=\&#34;\&#34;:Array.isArray(i)&amp;&amp;(i=w.map(i,function(e){return null==e?\&#34;\&#34;:e+\&#34;\&#34;})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&amp;&amp;\&#34;set\&#34;in t&amp;&amp;void 0!==t.set(this,i,\&#34;value\&#34;)||(this.value=i))});if(i)return(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&amp;&amp;\&#34;get\&#34;in t&amp;&amp;void 0!==(n=t.get(i,\&#34;value\&#34;))?n:\&#34;string\&#34;==typeof(n=i.value)?n.replace(bt,\&#34;\&#34;):null==n?\&#34;\&#34;:n}}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,\&#34;value\&#34;);return null!=t?t:vt(w.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a=\&#34;select-one\&#34;===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o&lt;0?u:a?o:0;r&lt;u;r++)if(((n=i[r]).selected||r===o)&amp;&amp;!n.disabled&amp;&amp;(!n.parentNode.disabled||!N(n.parentNode,\&#34;optgroup\&#34;))){if(t=w(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=w.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=w.inArray(w.valHooks.option.get(r),o)&gt;-1)&amp;&amp;(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each([\&#34;radio\&#34;,\&#34;checkbox\&#34;],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)&gt;-1}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute(\&#34;value\&#34;)?\&#34;on\&#34;:e.value})}),h.focusin=\&#34;onfocusin\&#34;in e;var wt=/^(?:focusinfocus|focusoutblur)$/,Tt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,o){var a,s,u,l,c,p,d,h,v=[i||r],m=f.call(t,\&#34;type\&#34;)?t.type:t,x=f.call(t,\&#34;namespace\&#34;)?t.namespace.split(\&#34;.\&#34;):[];if(s=h=u=i=i||r,3!==i.nodeType&amp;&amp;8!==i.nodeType&amp;&amp;!wt.test(m+w.event.triggered)&amp;&amp;(m.indexOf(\&#34;.\&#34;)&gt;-1&amp;&amp;(m=(x=m.split(\&#34;.\&#34;)).shift(),x.sort()),c=m.indexOf(\&#34;:\&#34;)&lt;0&amp;&amp;\&#34;on\&#34;+m,t=t[w.expando]?t:new w.Event(m,\&#34;object\&#34;==typeof t&amp;&amp;t),t.isTrigger=o?2:3,t.namespace=x.join(\&#34;.\&#34;),t.rnamespace=t.namespace?new RegExp(\&#34;(^|\\\\.)\&#34;+x.join(\&#34;\\\\.(?:.*\\\\.|)\&#34;)+\&#34;(\\\\.|$)\&#34;):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[m]||{},o||!d.trigger||!1!==d.trigger.apply(i,n))){if(!o&amp;&amp;!d.noBubble&amp;&amp;!y(i)){for(l=d.delegateType||m,wt.test(l+m)||(s=s.parentNode);s;s=s.parentNode)v.push(s),u=s;u===(i.ownerDocument||r)&amp;&amp;v.push(u.defaultView||u.parentWindow||e)}a=0;while((s=v[a++])&amp;&amp;!t.isPropagationStopped())h=s,t.type=a&gt;1?l:d.bindType||m,(p=(J.get(s,\&#34;events\&#34;)||{})[t.type]&amp;&amp;J.get(s,\&#34;handle\&#34;))&amp;&amp;p.apply(s,n),(p=c&amp;&amp;s[c])&amp;&amp;p.apply&amp;&amp;Y(s)&amp;&amp;(t.result=p.apply(s,n),!1===t.result&amp;&amp;t.preventDefault());return t.type=m,o||t.isDefaultPrevented()||d._default&amp;&amp;!1!==d._default.apply(v.pop(),n)||!Y(i)||c&amp;&amp;g(i[m])&amp;&amp;!y(i)&amp;&amp;((u=i[c])&amp;&amp;(i[c]=null),w.event.triggered=m,t.isPropagationStopped()&amp;&amp;h.addEventListener(m,Tt),i[m](),t.isPropagationStopped()&amp;&amp;h.removeEventListener(m,Tt),w.event.triggered=void 0,u&amp;&amp;(i[c]=u)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:\&#34;focusin\&#34;,blur:\&#34;focusout\&#34;},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=J.access(r,t);i||r.addEventListener(e,n,!0),J.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=J.access(r,t)-1;i?J.access(r,t,i):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var Ct=e.location,Et=Date.now(),kt=/\\?/;w.parseXML=function(t){var n;if(!t||\&#34;string\&#34;!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,\&#34;text/xml\&#34;)}catch(e){n=void 0}return n&amp;&amp;!n.getElementsByTagName(\&#34;parsererror\&#34;).length||w.error(\&#34;Invalid XML: \&#34;+t),n};var St=/\\[\\]$/,Dt=/\\r?\\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;function jt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,function(t,i){n||St.test(e)?r(e,i):jt(e+\&#34;[\&#34;+(\&#34;object\&#34;==typeof i&amp;&amp;null!=i?t:\&#34;\&#34;)+\&#34;]\&#34;,i,n,r)});else if(n||\&#34;object\&#34;!==x(t))r(e,t);else for(i in t)jt(e+\&#34;[\&#34;+i+\&#34;]\&#34;,t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=g(t)?t():t;r[r.length]=encodeURIComponent(e)+\&#34;=\&#34;+encodeURIComponent(null==n?\&#34;\&#34;:n)};if(Array.isArray(e)||e.jquery&amp;&amp;!w.isPlainObject(e))w.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join(\&#34;&amp;\&#34;)},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,\&#34;elements\&#34;);return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&amp;&amp;!w(this).is(\&#34;:disabled\&#34;)&amp;&amp;At.test(this.nodeName)&amp;&amp;!Nt.test(e)&amp;&amp;(this.checked||!pe.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(Dt,\&#34;\\r\\n\&#34;)}}):{name:t.name,value:n.replace(Dt,\&#34;\\r\\n\&#34;)}}).get()}});var qt=/%20/g,Lt=/#.*$/,Ht=/([?&amp;])_=[^&amp;]*/,Ot=/^(.*?):[ \\t]*([^\\r\\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mt=/^(?:GET|HEAD)$/,Rt=/^\\/\\//,It={},Wt={},$t=\&#34;*/\&#34;.concat(\&#34;*\&#34;),Bt=r.createElement(\&#34;a\&#34;);Bt.href=Ct.href;function Ft(e){return function(t,n){\&#34;string\&#34;!=typeof t&amp;&amp;(n=t,t=\&#34;*\&#34;);var r,i=0,o=t.toLowerCase().match(M)||[];if(g(n))while(r=o[i++])\&#34;+\&#34;===r[0]?(r=r.slice(1)||\&#34;*\&#34;,(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function _t(e,t,n,r){var i={},o=e===Wt;function a(s){var u;return i[s]=!0,w.each(e[s]||[],function(e,s){var l=s(t,n,r);return\&#34;string\&#34;!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)}),u}return a(t.dataTypes[0])||!i[\&#34;*\&#34;]&amp;&amp;a(\&#34;*\&#34;)}function zt(e,t){var n,r,i=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&amp;&amp;((i[n]?e:r||(r={}))[n]=t[n]);return r&amp;&amp;w.extend(!0,e,r),e}function Xt(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while(\&#34;*\&#34;===u[0])u.shift(),void 0===r&amp;&amp;(r=e.mimeType||t.getResponseHeader(\&#34;Content-Type\&#34;));if(r)for(i in s)if(s[i]&amp;&amp;s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+\&#34; \&#34;+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&amp;&amp;u.unshift(o),n[o]}function Ut(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&amp;&amp;(n[e.responseFields[o]]=t),!u&amp;&amp;r&amp;&amp;e.dataFilter&amp;&amp;(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if(\&#34;*\&#34;===o)o=u;else if(\&#34;*\&#34;!==u&amp;&amp;u!==o){if(!(a=l[u+\&#34; \&#34;+o]||l[\&#34;* \&#34;+o]))for(i in l)if((s=i.split(\&#34; \&#34;))[1]===o&amp;&amp;(a=l[u+\&#34; \&#34;+s[0]]||l[\&#34;* \&#34;+s[0]])){!0===a?a=l[i]:!0!==l[i]&amp;&amp;(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&amp;&amp;e[\&#34;throws\&#34;])t=a(t);else try{t=a(t)}catch(e){return{state:\&#34;parsererror\&#34;,error:a?e:\&#34;No conversion from \&#34;+u+\&#34; to \&#34;+o}}}return{state:\&#34;success\&#34;,data:t}}w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:\&#34;GET\&#34;,isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:\&#34;application/x-www-form-urlencoded; charset=UTF-8\&#34;,accepts:{\&#34;*\&#34;:$t,text:\&#34;text/plain\&#34;,html:\&#34;text/html\&#34;,xml:\&#34;application/xml, text/xml\&#34;,json:\&#34;application/json, text/javascript\&#34;},contents:{xml:/\\bxml\\b/,html:/\\bhtml/,json:/\\bjson\\b/},responseFields:{xml:\&#34;responseXML\&#34;,text:\&#34;responseText\&#34;,json:\&#34;responseJSON\&#34;},converters:{\&#34;* text\&#34;:String,\&#34;text html\&#34;:!0,\&#34;text json\&#34;:JSON.parse,\&#34;text xml\&#34;:w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,w.ajaxSettings),t):zt(w.ajaxSettings,e)},ajaxPrefilter:Ft(It),ajaxTransport:Ft(Wt),ajax:function(t,n){\&#34;object\&#34;==typeof t&amp;&amp;(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,p,d,h=w.ajaxSetup({},n),g=h.context||h,y=h.context&amp;&amp;(g.nodeType||g.jquery)?w(g):w.event,v=w.Deferred(),m=w.Callbacks(\&#34;once memory\&#34;),x=h.statusCode||{},b={},T={},C=\&#34;canceled\&#34;,E={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s){s={};while(t=Ot.exec(a))s[t[1].toLowerCase()]=t[2]}t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&amp;&amp;(e=T[e.toLowerCase()]=T[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&amp;&amp;(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)E.always(e[E.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||C;return i&amp;&amp;i.abort(t),k(0,t),this}};if(v.promise(E),h.url=((t||h.url||Ct.href)+\&#34;\&#34;).replace(Rt,Ct.protocol+\&#34;//\&#34;),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||\&#34;*\&#34;).toLowerCase().match(M)||[\&#34;\&#34;],null==h.crossDomain){l=r.createElement(\&#34;a\&#34;);try{l.href=h.url,l.href=l.href,h.crossDomain=Bt.protocol+\&#34;//\&#34;+Bt.host!=l.protocol+\&#34;//\&#34;+l.host}catch(e){h.crossDomain=!0}}if(h.data&amp;&amp;h.processData&amp;&amp;\&#34;string\&#34;!=typeof h.data&amp;&amp;(h.data=w.param(h.data,h.traditional)),_t(It,h,n,E),c)return E;(f=w.event&amp;&amp;h.global)&amp;&amp;0==w.active++&amp;&amp;w.event.trigger(\&#34;ajaxStart\&#34;),h.type=h.type.toUpperCase(),h.hasContent=!Mt.test(h.type),o=h.url.replace(Lt,\&#34;\&#34;),h.hasContent?h.data&amp;&amp;h.processData&amp;&amp;0===(h.contentType||\&#34;\&#34;).indexOf(\&#34;application/x-www-form-urlencoded\&#34;)&amp;&amp;(h.data=h.data.replace(qt,\&#34;+\&#34;)):(d=h.url.slice(o.length),h.data&amp;&amp;(h.processData||\&#34;string\&#34;==typeof h.data)&amp;&amp;(o+=(kt.test(o)?\&#34;&amp;\&#34;:\&#34;?\&#34;)+h.data,delete h.data),!1===h.cache&amp;&amp;(o=o.replace(Ht,\&#34;$1\&#34;),d=(kt.test(o)?\&#34;&amp;\&#34;:\&#34;?\&#34;)+\&#34;_=\&#34;+Et+++d),h.url=o+d),h.ifModified&amp;&amp;(w.lastModified[o]&amp;&amp;E.setRequestHeader(\&#34;If-Modified-Since\&#34;,w.lastModified[o]),w.etag[o]&amp;&amp;E.setRequestHeader(\&#34;If-None-Match\&#34;,w.etag[o])),(h.data&amp;&amp;h.hasContent&amp;&amp;!1!==h.contentType||n.contentType)&amp;&amp;E.setRequestHeader(\&#34;Content-Type\&#34;,h.contentType),E.setRequestHeader(\&#34;Accept\&#34;,h.dataTypes[0]&amp;&amp;h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+(\&#34;*\&#34;!==h.dataTypes[0]?\&#34;, \&#34;+$t+\&#34;; q=0.01\&#34;:\&#34;\&#34;):h.accepts[\&#34;*\&#34;]);for(p in h.headers)E.setRequestHeader(p,h.headers[p]);if(h.beforeSend&amp;&amp;(!1===h.beforeSend.call(g,E,h)||c))return E.abort();if(C=\&#34;abort\&#34;,m.add(h.complete),E.done(h.success),E.fail(h.error),i=_t(Wt,h,n,E)){if(E.readyState=1,f&amp;&amp;y.trigger(\&#34;ajaxSend\&#34;,[E,h]),c)return E;h.async&amp;&amp;h.timeout&gt;0&amp;&amp;(u=e.setTimeout(function(){E.abort(\&#34;timeout\&#34;)},h.timeout));try{c=!1,i.send(b,k)}catch(e){if(c)throw e;k(-1,e)}}else k(-1,\&#34;No Transport\&#34;);function k(t,n,r,s){var l,p,d,b,T,C=n;c||(c=!0,u&amp;&amp;e.clearTimeout(u),i=void 0,a=s||\&#34;\&#34;,E.readyState=t&gt;0?4:0,l=t&gt;=200&amp;&amp;t&lt;300||304===t,r&amp;&amp;(b=Xt(h,E,r)),b=Ut(h,b,E,l),l?(h.ifModified&amp;&amp;((T=E.getResponseHeader(\&#34;Last-Modified\&#34;))&amp;&amp;(w.lastModified[o]=T),(T=E.getResponseHeader(\&#34;etag\&#34;))&amp;&amp;(w.etag[o]=T)),204===t||\&#34;HEAD\&#34;===h.type?C=\&#34;nocontent\&#34;:304===t?C=\&#34;notmodified\&#34;:(C=b.state,p=b.data,l=!(d=b.error))):(d=C,!t&amp;&amp;C||(C=\&#34;error\&#34;,t&lt;0&amp;&amp;(t=0))),E.status=t,E.statusText=(n||C)+\&#34;\&#34;,l?v.resolveWith(g,[p,C,E]):v.rejectWith(g,[E,C,d]),E.statusCode(x),x=void 0,f&amp;&amp;y.trigger(l?\&#34;ajaxSuccess\&#34;:\&#34;ajaxError\&#34;,[E,h,l?p:d]),m.fireWith(g,[E,C]),f&amp;&amp;(y.trigger(\&#34;ajaxComplete\&#34;,[E,h]),--w.active||w.event.trigger(\&#34;ajaxStop\&#34;)))}return E},getJSON:function(e,t,n){return w.get(e,t,n,\&#34;json\&#34;)},getScript:function(e,t){return w.get(e,void 0,t,\&#34;script\&#34;)}}),w.each([\&#34;get\&#34;,\&#34;post\&#34;],function(e,t){w[t]=function(e,n,r,i){return g(n)&amp;&amp;(i=i||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)&amp;&amp;e))}}),w._evalUrl=function(e){return w.ajax({url:e,type:\&#34;GET\&#34;,dataType:\&#34;script\&#34;,cache:!0,async:!1,global:!1,\&#34;throws\&#34;:!0})},w.fn.extend({wrapAll:function(e){var t;return this[0]&amp;&amp;(g(e)&amp;&amp;(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&amp;&amp;t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return g(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=g(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not(\&#34;body\&#34;).each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Vt={0:200,1223:204},Gt=w.ajaxSettings.xhr();h.cors=!!Gt&amp;&amp;\&#34;withCredentials\&#34;in Gt,h.ajax=Gt=!!Gt,w.ajaxTransport(function(t){var n,r;if(h.cors||Gt&amp;&amp;!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&amp;&amp;s.overrideMimeType&amp;&amp;s.overrideMimeType(t.mimeType),t.crossDomain||i[\&#34;X-Requested-With\&#34;]||(i[\&#34;X-Requested-With\&#34;]=\&#34;XMLHttpRequest\&#34;);for(a in i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&amp;&amp;(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,\&#34;abort\&#34;===e?s.abort():\&#34;error\&#34;===e?\&#34;number\&#34;!=typeof s.status?o(0,\&#34;error\&#34;):o(s.status,s.statusText):o(Vt[s.status]||s.status,s.statusText,\&#34;text\&#34;!==(s.responseType||\&#34;text\&#34;)||\&#34;string\&#34;!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n(\&#34;error\&#34;),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&amp;&amp;e.setTimeout(function(){n&amp;&amp;r()})},n=n(\&#34;abort\&#34;);try{s.send(t.hasContent&amp;&amp;t.data||null)}catch(e){if(n)throw e}},abort:function(){n&amp;&amp;n()}}}),w.ajaxPrefilter(function(e){e.crossDomain&amp;&amp;(e.contents.script=!1)}),w.ajaxSetup({accepts:{script:\&#34;text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\&#34;},contents:{script:/\\b(?:java|ecma)script\\b/},converters:{\&#34;text script\&#34;:function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter(\&#34;script\&#34;,function(e){void 0===e.cache&amp;&amp;(e.cache=!1),e.crossDomain&amp;&amp;(e.type=\&#34;GET\&#34;)}),w.ajaxTransport(\&#34;script\&#34;,function(e){if(e.crossDomain){var t,n;return{send:function(i,o){t=w(\&#34;&lt;script&gt;\&#34;).prop({charset:e.scriptCharset,src:e.url}).on(\&#34;load error\&#34;,n=function(e){t.remove(),n=null,e&amp;&amp;o(\&#34;error\&#34;===e.type?404:200,e.type)}),r.head.appendChild(t[0])},abort:function(){n&amp;&amp;n()}}}});var Yt=[],Qt=/(=)\\?(?=&amp;|$)|\\?\\?/;w.ajaxSetup({jsonp:\&#34;callback\&#34;,jsonpCallback:function(){var e=Yt.pop()||w.expando+\&#34;_\&#34;+Et++;return this[e]=!0,e}}),w.ajaxPrefilter(\&#34;json jsonp\&#34;,function(t,n,r){var i,o,a,s=!1!==t.jsonp&amp;&amp;(Qt.test(t.url)?\&#34;url\&#34;:\&#34;string\&#34;==typeof t.data&amp;&amp;0===(t.contentType||\&#34;\&#34;).indexOf(\&#34;application/x-www-form-urlencoded\&#34;)&amp;&amp;Qt.test(t.data)&amp;&amp;\&#34;data\&#34;);if(s||\&#34;jsonp\&#34;===t.dataTypes[0])return i=t.jsonpCallback=g(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,s?t[s]=t[s].replace(Qt,\&#34;$1\&#34;+i):!1!==t.jsonp&amp;&amp;(t.url+=(kt.test(t.url)?\&#34;&amp;\&#34;:\&#34;?\&#34;)+t.jsonp+\&#34;=\&#34;+i),t.converters[\&#34;script json\&#34;]=function(){return a||w.error(i+\&#34; was not called\&#34;),a[0]},t.dataTypes[0]=\&#34;json\&#34;,o=e[i],e[i]=function(){a=arguments},r.always(function(){void 0===o?w(e).removeProp(i):e[i]=o,t[i]&amp;&amp;(t.jsonpCallback=n.jsonpCallback,Yt.push(i)),a&amp;&amp;g(o)&amp;&amp;o(a[0]),a=o=void 0}),\&#34;script\&#34;}),h.createHTMLDocument=function(){var e=r.implementation.createHTMLDocument(\&#34;\&#34;).body;return e.innerHTML=\&#34;&lt;form&gt;&lt;/form&gt;&lt;form&gt;&lt;/form&gt;\&#34;,2===e.childNodes.length}(),w.parseHTML=function(e,t,n){if(\&#34;string\&#34;!=typeof e)return[];\&#34;boolean\&#34;==typeof t&amp;&amp;(n=t,t=!1);var i,o,a;return t||(h.createHTMLDocument?((i=(t=r.implementation.createHTMLDocument(\&#34;\&#34;)).createElement(\&#34;base\&#34;)).href=r.location.href,t.head.appendChild(i)):t=r),o=A.exec(e),a=!n&amp;&amp;[],o?[t.createElement(o[1])]:(o=xe([e],t,a),a&amp;&amp;a.length&amp;&amp;w(a).remove(),w.merge([],o.childNodes))},w.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(\&#34; \&#34;);return s&gt;-1&amp;&amp;(r=vt(e.slice(s)),e=e.slice(0,s)),g(t)?(n=t,t=void 0):t&amp;&amp;\&#34;object\&#34;==typeof t&amp;&amp;(i=\&#34;POST\&#34;),a.length&gt;0&amp;&amp;w.ajax({url:e,type:i||\&#34;GET\&#34;,dataType:\&#34;html\&#34;,data:t}).done(function(e){o=arguments,a.html(r?w(\&#34;&lt;div&gt;\&#34;).append(w.parseHTML(e)).find(r):e)}).always(n&amp;&amp;function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},w.each([\&#34;ajaxStart\&#34;,\&#34;ajaxStop\&#34;,\&#34;ajaxComplete\&#34;,\&#34;ajaxError\&#34;,\&#34;ajaxSuccess\&#34;,\&#34;ajaxSend\&#34;],function(e,t){w.fn[t]=function(e){return this.on(t,e)}}),w.expr.pseudos.animated=function(e){return w.grep(w.timers,function(t){return e===t.elem}).length},w.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l,c=w.css(e,\&#34;position\&#34;),f=w(e),p={};\&#34;static\&#34;===c&amp;&amp;(e.style.position=\&#34;relative\&#34;),s=f.offset(),o=w.css(e,\&#34;top\&#34;),u=w.css(e,\&#34;left\&#34;),(l=(\&#34;absolute\&#34;===c||\&#34;fixed\&#34;===c)&amp;&amp;(o+u).indexOf(\&#34;auto\&#34;)&gt;-1)?(a=(r=f.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),g(t)&amp;&amp;(t=t.call(e,n,w.extend({},s))),null!=t.top&amp;&amp;(p.top=t.top-s.top+a),null!=t.left&amp;&amp;(p.left=t.left-s.left+i),\&#34;using\&#34;in t?t.using.call(e,p):f.css(p)}},w.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each(function(t){w.offset.setOffset(this,e,t)});var t,n,r=this[0];if(r)return r.getClientRects().length?(t=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:t.top+n.pageYOffset,left:t.left+n.pageXOffset}):{top:0,left:0}},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if(\&#34;fixed\&#34;===w.css(r,\&#34;position\&#34;))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&amp;&amp;(e===n.body||e===n.documentElement)&amp;&amp;\&#34;static\&#34;===w.css(e,\&#34;position\&#34;))e=e.parentNode;e&amp;&amp;e!==r&amp;&amp;1===e.nodeType&amp;&amp;((i=w(e).offset()).top+=w.css(e,\&#34;borderTopWidth\&#34;,!0),i.left+=w.css(e,\&#34;borderLeftWidth\&#34;,!0))}return{top:t.top-i.top-w.css(r,\&#34;marginTop\&#34;,!0),left:t.left-i.left-w.css(r,\&#34;marginLeft\&#34;,!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&amp;&amp;\&#34;static\&#34;===w.css(e,\&#34;position\&#34;))e=e.offsetParent;return e||be})}}),w.each({scrollLeft:\&#34;pageXOffset\&#34;,scrollTop:\&#34;pageYOffset\&#34;},function(e,t){var n=\&#34;pageYOffset\&#34;===t;w.fn[e]=function(r){return z(this,function(e,r,i){var o;if(y(e)?o=e:9===e.nodeType&amp;&amp;(o=e.defaultView),void 0===i)return o?o[t]:e[r];o?o.scrollTo(n?o.pageXOffset:i,n?i:o.pageYOffset):e[r]=i},e,r,arguments.length)}}),w.each([\&#34;top\&#34;,\&#34;left\&#34;],function(e,t){w.cssHooks[t]=_e(h.pixelPosition,function(e,n){if(n)return n=Fe(e,t),We.test(n)?w(e).position()[t]+\&#34;px\&#34;:n})}),w.each({Height:\&#34;height\&#34;,Width:\&#34;width\&#34;},function(e,t){w.each({padding:\&#34;inner\&#34;+e,content:t,\&#34;\&#34;:\&#34;outer\&#34;+e},function(n,r){w.fn[r]=function(i,o){var a=arguments.length&amp;&amp;(n||\&#34;boolean\&#34;!=typeof i),s=n||(!0===i||!0===o?\&#34;margin\&#34;:\&#34;border\&#34;);return z(this,function(t,n,i){var o;return y(t)?0===r.indexOf(\&#34;outer\&#34;)?t[\&#34;inner\&#34;+e]:t.document.documentElement[\&#34;client\&#34;+e]:9===t.nodeType?(o=t.documentElement,Math.max(t.body[\&#34;scroll\&#34;+e],o[\&#34;scroll\&#34;+e],t.body[\&#34;offset\&#34;+e],o[\&#34;offset\&#34;+e],o[\&#34;client\&#34;+e])):void 0===i?w.css(t,n,s):w.style(t,n,i,s)},t,a?i:void 0,a)}})}),w.each(\&#34;blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu\&#34;.split(\&#34; \&#34;),function(e,t){w.fn[t]=function(e,n){return arguments.length&gt;0?this.on(t,null,e,n):this.trigger(t)}}),w.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),w.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,\&#34;**\&#34;):this.off(t,e||\&#34;**\&#34;,n)}}),w.proxy=function(e,t){var n,r,i;if(\&#34;string\&#34;==typeof t&amp;&amp;(n=e[t],t=e,e=n),g(e))return r=o.call(arguments,2),i=function(){return e.apply(t||this,r.concat(o.call(arguments)))},i.guid=e.guid=e.guid||w.guid++,i},w.holdReady=function(e){e?w.readyWait++:w.ready(!0)},w.isArray=Array.isArray,w.parseJSON=JSON.parse,w.nodeName=N,w.isFunction=g,w.isWindow=y,w.camelCase=G,w.type=x,w.now=Date.now,w.isNumeric=function(e){var t=w.type(e);return(\&#34;number\&#34;===t||\&#34;string\&#34;===t)&amp;&amp;!isNaN(e-parseFloat(e))},\&#34;function\&#34;==typeof define&amp;&amp;define.amd&amp;&amp;define(\&#34;jquery\&#34;,[],function(){return w});var Jt=e.jQuery,Kt=e.$;return w.noConflict=function(t){return e.$===w&amp;&amp;(e.$=Kt),t&amp;&amp;e.jQuery===w&amp;&amp;(e.jQuery=Jt),w},t||(e.jQuery=e.$=w),w});&#34;),</pre></code></td></tr><tr><td>91</td><td><code><pre> }</pre></code></td></tr><tr><td>92</td><td><code><pre> filec := &amp;embedded.EmbeddedFile{</pre></code></td></tr><tr><td>93</td><td><code><pre> Filename: &#34;main.js&#34;,</pre></code></td></tr><tr><td>94</td><td><code><pre> FileModTime: time.Unix(1538894434, 0),</pre></code></td></tr><tr><td>95</td><td><code><pre> Content: string(&#34;/*\n * Statup\n * Copyright (C) 2018. Hunter Long and the project contributors\n * Written by Hunter Long &lt;info@socialeck.com&gt; and the project contributors\n *\n * https://github.com/hunterlong/statup\n *\n * The licenses for most software and other practical works are designed\n * to take away your freedom to share and change the works. By contrast,\n * the GNU General Public License is intended to guarantee your freedom to\n * share and change all versions of a program--to make sure it remains free\n * software for all its users.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.\n */\n\n\n$(&#39;.service_li&#39;).on(&#39;click&#39;, function() {\n var id = $(this).attr(&#39;data-id&#39;);\n var position = $(&#39;#service_id_&#39; + id).offset();\n window.scroll(0, position.top - 23);\n return false;\n});\n\n$(&#39;.test_notifier&#39;).on(&#39;click&#39;, function(e) {\n var btn = $(this);\n var form = $(this).parents(&#39;form:first&#39;);\n var values = form.serialize();\n var notifier = form.find(&#39;input[name=notifier]&#39;).val();\n var success = $(&#39;#&#39;+notifier+&#39;-success&#39;);\n var error = $(&#39;#&#39;+notifier+&#39;-error&#39;);\n btn.prop(\&#34;disabled\&#34;, true);\n $.ajax({\n url: form.attr(\&#34;action\&#34;)+\&#34;/test\&#34;,\n type: &#39;POST&#39;,\n data: values,\n success: function(data) {\n if (data === &#39;ok&#39;) {\n success.removeClass(&#39;d-none&#39;);\n setTimeout(function() {\n success.addClass(&#39;d-none&#39;);\n }, 5000)\n } else {\n error.removeClass(&#39;d-none&#39;);\n error.html(data);\n setTimeout(function() {\n error.addClass(&#39;d-none&#39;);\n }, 8000)\n }\n btn.prop(\&#34;disabled\&#34;, false);\n }\n });\n e.preventDefault();\n});\n\n$(&#39;form&#39;).submit(function() {\n console.log(this);\n $(this).find(&#39;button[type=submit]&#39;).prop(&#39;disabled&#39;, true);\n});\n\n$(&#39;select#service_type&#39;).on(&#39;change&#39;, function() {\n var selected = $(&#39;#service_type option:selected&#39;).val();\n var typeLabel = $(&#39;#service_type_label&#39;);\n if (selected === &#39;tcp&#39; || selected === &#39;udp&#39;) {\n if (selected === &#39;tcp&#39;) {\n typeLabel.html(&#39;TCP Port&#39;)\n } else {\n typeLabel.html(&#39;UDP Port&#39;)\n }\n $(&#39;#service_port&#39;).parent().parent().removeClass(&#39;d-none&#39;);\n $(&#39;#service_check_type&#39;).parent().parent().addClass(&#39;d-none&#39;);\n $(&#39;#service_url&#39;).attr(&#39;placeholder&#39;, &#39;localhost&#39;);\n $(&#39;#post_data&#39;).parent().parent().addClass(&#39;d-none&#39;);\n $(&#39;#service_response&#39;).parent().parent().addClass(&#39;d-none&#39;);\n $(&#39;#service_response_code&#39;).parent().parent().addClass(&#39;d-none&#39;);\n } else {\n $(&#39;#post_data&#39;).parent().parent().removeClass(&#39;d-none&#39;);\n $(&#39;#service_response&#39;).parent().parent().removeClass(&#39;d-none&#39;);\n $(&#39;#service_response_code&#39;).parent().parent().removeClass(&#39;d-none&#39;);\n $(&#39;#service_check_type&#39;).parent().parent().removeClass(&#39;d-none&#39;);\n $(&#39;#service_url&#39;).attr(&#39;placeholder&#39;, &#39;https://google.com&#39;);\n $(&#39;#service_port&#39;).parent().parent().addClass(&#39;d-none&#39;);\n }\n});\n\nfunction AjaxChart(chart, service, start=0, end=9999999999, group=\&#34;hour\&#34;) {\n $.ajax({\n url: \&#34;/api/services/\&#34;+service+\&#34;/data?start=\&#34;+start+\&#34;&amp;end=\&#34;+end+\&#34;&amp;group=\&#34;+group,\n type: &#39;GET&#39;,\n success: function(data) {\n chart.data.labels.pop();\n data.data.forEach(function(d) {\n chart.data.datasets[0].data.push(d);\n });\n chart.update();\n }\n });\n}\n\nfunction PingAjaxChart(chart, service, start=0, end=9999999999, group=\&#34;hour\&#34;) {\n $.ajax({\n url: \&#34;/api/services/\&#34;+service+\&#34;/ping?start=\&#34;+start+\&#34;&amp;end=\&#34;+end+\&#34;&amp;group=\&#34;+group,\n type: &#39;GET&#39;,\n success: function(data) {\n chart.data.labels.pop();\n chart.data.datasets.push({\n label: \&#34;Ping Time\&#34;,\n backgroundColor: \&#34;#bababa\&#34;\n });\n chart.update();\n data.data.forEach(function(d) {\n chart.data.datasets[1].data.push(d);\n });\n chart.update();\n }\n });\n}\n\n$(&#39;select#service_check_type&#39;).on(&#39;change&#39;, function() {\n var selected = $(&#39;#service_check_type option:selected&#39;).val();\n if (selected === &#39;POST&#39;) {\n $(&#39;#post_data&#39;).parent().parent().removeClass(&#39;d-none&#39;);\n } else {\n $(&#39;#post_data&#39;).parent().parent().addClass(&#39;d-none&#39;);\n }\n});\n\n\n$(function() {\n var pathname = window.location.pathname;\n if (pathname === &#39;/logs&#39;) {\n var lastline;\n var logArea = $(&#39;#live_logs&#39;);\n setInterval(function() {\n $.get(&#39;/logs/line&#39;, function(data, status) {\n if (lastline !== data) {\n var curr = $.trim(logArea.text());\n var line = data.replace(/(\\r\\n|\\n|\\r)/gm, &#39; &#39;);\n line = line + &#39;\\n&#39;;\n logArea.text(line + curr);\n lastline = data;\n }\n });\n }, 200);\n }\n});\n\n\n$(&#39;.confirm-btn&#39;).on(&#39;click&#39;, function() {\n var r = confirm(&#39;Are you sure you want to delete?&#39;);\n if (r === true) {\n return true;\n } else {\n return false;\n }\n});\n\n\n$(&#39;.select-input&#39;).on(&#39;click&#39;, function() {\n $(this).select();\n});\n\n\n// $(&#39;input[name=password], input[name=password_confirm]&#39;).on(&#39;change keyup input paste&#39;, function() {\n// var password = $(&#39;input[name=password]&#39;),\n// repassword = $(&#39;input[name=password_confirm]&#39;),\n// both = password.add(repassword).removeClass(&#39;is-valid is-invalid&#39;);\n//\n// var btn = $(this).parents(&#39;form:first&#39;).find(&#39;button[type=submit]&#39;);\n// password.addClass(\n// password.val().length &gt; 0 ? &#39;is-valid&#39; : &#39;is-invalid&#39;\n// );\n// repassword.addClass(\n// password.val().length &gt; 0 ? &#39;is-valid&#39; : &#39;is-invalid&#39;\n// );\n//\n// if (password.val() !== repassword.val()) {\n// both.addClass(&#39;is-invalid&#39;);\n// btn.prop(&#39;disabled&#39;, true);\n// } else {\n// btn.prop(&#39;disabled&#39;, false);\n// }\n// });\n\n\nvar ranVar = false;\nvar ranTheme = false;\nvar ranMobile = false;\n$(&#39;a[data-toggle=pill]&#39;).on(&#39;shown.bs.tab&#39;, function(e) {\n var target = $(e.target).attr(&#39;href&#39;);\n if (target === &#39;#v-pills-style&#39; &amp;&amp; !ranVar) {\n var sass_vars = CodeMirror.fromTextArea(document.getElementById(&#39;sass_vars&#39;), {\n lineNumbers: true,\n matchBrackets: true,\n mode: &#39;text/x-scss&#39;,\n colorpicker: true\n });\n sass_vars.setSize(null, 900);\n ranVar = true;\n } else if (target === &#39;#pills-theme&#39; &amp;&amp; !ranTheme) {\n var theme_css = CodeMirror.fromTextArea(document.getElementById(&#39;theme_css&#39;), {\n lineNumbers: true,\n matchBrackets: true,\n mode: &#39;text/x-scss&#39;,\n colorpicker: true\n });\n theme_css.setSize(null, 900);\n ranTheme = true;\n } else if (target === &#39;#pills-mobile&#39; &amp;&amp; !ranMobile) {\n var mobile_css = CodeMirror.fromTextArea(document.getElementById(&#39;mobile_css&#39;), {\n lineNumbers: true,\n matchBrackets: true,\n mode: &#39;text/x-scss&#39;,\n colorpicker: true\n });\n mobile_css.setSize(null, 900);\n ranMobile = true;\n }\n});\n&#34;),</pre></code></td></tr><tr><td>96</td><td><code><pre> }</pre></code></td></tr><tr><td>97</td><td><code><pre> filed := &amp;embedded.EmbeddedFile{</pre></code></td></tr><tr><td>98</td><td><code><pre> Filename: &#34;pikaday.js&#34;,</pre></code></td></tr><tr><td>99</td><td><code><pre> FileModTime: time.Unix(1537243030, 0),</pre></code></td></tr><tr><td>100</td><td><code><pre> Content: string(&#34;/*!\n * Pikaday\n *\n * Copyright © 2014 David Bushell | BSD &amp; MIT license | https://github.com/dbushell/Pikaday\n */\n\n(function (root, factory)\n{\n &#39;use strict&#39;;\n\n var moment;\n if (typeof exports === &#39;object&#39;) {\n // CommonJS module\n // Load moment.js as an optional dependency\n try { moment = require(&#39;moment&#39;); } catch (e) {}\n module.exports = factory(moment);\n } else if (typeof define === &#39;function&#39; &amp;&amp; define.amd) {\n // AMD. Register as an anonymous module.\n define(function (req)\n {\n // Load moment.js as an optional dependency\n var id = &#39;moment&#39;;\n try { moment = req(id); } catch (e) {}\n return factory(moment);\n });\n } else {\n root.Pikaday = factory(root.moment);\n }\n}(this, function (moment)\n{\n &#39;use strict&#39;;\n\n /**\n * feature detection and helper functions\n */\n var hasMoment = typeof moment === &#39;function&#39;,\n\n hasEventListeners = !!window.addEventListener,\n\n document = window.document,\n\n sto = window.setTimeout,\n\n addEvent = function(el, e, callback, capture)\n {\n if (hasEventListeners) {\n el.addEventListener(e, callback, !!capture);\n } else {\n el.attachEvent(&#39;on&#39; + e, callback);\n }\n },\n\n removeEvent = function(el, e, callback, capture)\n {\n if (hasEventListeners) {\n el.removeEventListener(e, callback, !!capture);\n } else {\n el.detachEvent(&#39;on&#39; + e, callback);\n }\n },\n\n trim = function(str)\n {\n return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g,&#39;&#39;);\n },\n\n hasClass = function(el, cn)\n {\n return (&#39; &#39; + el.className + &#39; &#39;).indexOf(&#39; &#39; + cn + &#39; &#39;) !== -1;\n },\n\n addClass = function(el, cn)\n {\n if (!hasClass(el, cn)) {\n el.className = (el.className === &#39;&#39;) ? cn : el.className + &#39; &#39; + cn;\n }\n },\n\n removeClass = function(el, cn)\n {\n el.className = trim((&#39; &#39; + el.className + &#39; &#39;).replace(&#39; &#39; + cn + &#39; &#39;, &#39; &#39;));\n },\n\n isArray = function(obj)\n {\n return (/Array/).test(Object.prototype.toString.call(obj));\n },\n\n isDate = function(obj)\n {\n return (/Date/).test(Object.prototype.toString.call(obj)) &amp;&amp; !isNaN(obj.getTime());\n },\n\n isWeekend = function(date)\n {\n var day = date.getDay();\n return day === 0 || day === 6;\n },\n\n isLeapYear = function(year)\n {\n // solution by Matti Virkkunen: http://stackoverflow.com/a/4881951\n return year % 4 === 0 &amp;&amp; year % 100 !== 0 || year % 400 === 0;\n },\n\n getDaysInMonth = function(year, month)\n {\n return [31, isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n },\n\n setToStartOfDay = function(date)\n {\n if (isDate(date)) date.setHours(0,0,0,0);\n },\n\n compareDates = function(a,b)\n {\n // weak date comparison (use setToStartOfDay(date) to ensure correct result)\n return a.getTime() === b.getTime();\n },\n\n extend = function(to, from, overwrite)\n {\n var prop, hasProp;\n for (prop in from) {\n hasProp = to[prop] !== undefined;\n if (hasProp &amp;&amp; typeof from[prop] === &#39;object&#39; &amp;&amp; from[prop] !== null &amp;&amp; from[prop].nodeName === undefined) {\n if (isDate(from[prop])) {\n if (overwrite) {\n to[prop] = new Date(from[prop].getTime());\n }\n }\n else if (isArray(from[prop])) {\n if (overwrite) {\n to[prop] = from[prop].slice(0);\n }\n } else {\n to[prop] = extend({}, from[prop], overwrite);\n }\n } else if (overwrite || !hasProp) {\n to[prop] = from[prop];\n }\n }\n return to;\n },\n\n fireEvent = function(el, eventName, data)\n {\n var ev;\n\n if (document.createEvent) {\n ev = document.createEvent(&#39;HTMLEvents&#39;);\n ev.initEvent(eventName, true, false);\n ev = extend(ev, data);\n el.dispatchEvent(ev);\n } else if (document.createEventObject) {\n ev = document.createEventObject();\n ev = extend(ev, data);\n el.fireEvent(&#39;on&#39; + eventName, ev);\n }\n },\n\n adjustCalendar = function(calendar) {\n if (calendar.month &lt; 0) {\n calendar.year -= Math.ceil(Math.abs(calendar.month)/12);\n calendar.month += 12;\n }\n if (calendar.month &gt; 11) {\n calendar.year += Math.floor(Math.abs(calendar.month)/12);\n calendar.month -= 12;\n }\n return calendar;\n },\n\n /**\n * defaults and localisation\n */\n defaults = {\n\n // bind the picker to a form field\n field: null,\n\n // automatically show/hide the picker on `field` focus (default `true` if `field` is set)\n bound: undefined,\n\n // data-attribute on the input field with an aria assistance tekst (only applied when `bound` is set)\n ariaLabel: &#39;Use the arrow keys to pick a date&#39;,\n\n // position of the datepicker, relative to the field (default to bottom &amp; left)\n // (&#39;bottom&#39; &amp; &#39;left&#39; keywords are not used, &#39;top&#39; &amp; &#39;right&#39; are modifier on the bottom/left position)\n position: &#39;bottom left&#39;,\n\n // automatically fit in the viewport even if it means repositioning from the position option\n reposition: true,\n\n // the default output format for `.toString()` and `field` value\n format: &#39;YYYY-MM-DD&#39;,\n\n // the toString function which gets passed a current date object and format\n // and returns a string\n toString: null,\n\n // used to create date object from current input string\n parse: null,\n\n // the initial date to view when first opened\n defaultDate: null,\n\n // make the `defaultDate` the initial selected value\n setDefaultDate: false,\n\n // first day of week (0: Sunday, 1: Monday etc)\n firstDay: 0,\n\n // the default flag for moment&#39;s strict date parsing\n formatStrict: false,\n\n // the minimum/earliest date that can be selected\n minDate: null,\n // the maximum/latest date that can be selected\n maxDate: null,\n\n // number of years either side, or array of upper/lower range\n yearRange: 10,\n\n // show week numbers at head of row\n showWeekNumber: false,\n\n // Week picker mode\n pickWholeWeek: false,\n\n // used internally (don&#39;t config outside)\n minYear: 0,\n maxYear: 9999,\n minMonth: undefined,\n maxMonth: undefined,\n\n startRange: null,\n endRange: null,\n\n isRTL: false,\n\n // Additional text to append to the year in the calendar title\n yearSuffix: &#39;&#39;,\n\n // Render the month after year in the calendar title\n showMonthAfterYear: false,\n\n // Render days of the calendar grid that fall in the next or previous month\n showDaysInNextAndPreviousMonths: false,\n\n // Allows user to select days that fall in the next or previous month\n enableSelectionDaysInNextAndPreviousMonths: false,\n\n // how many months are visible\n numberOfMonths: 1,\n\n // when numberOfMonths is used, this will help you to choose where the main calendar will be (default `left`, can be set to `right`)\n // only used for the first display or when a selected date is not visible\n mainCalendar: &#39;left&#39;,\n\n // Specify a DOM element to render the calendar in\n container: undefined,\n\n // Blur field when date is selected\n blurFieldOnSelect : true,\n\n // internationalization\n i18n: {\n previousMonth : &#39;Previous Month&#39;,\n nextMonth : &#39;Next Month&#39;,\n months : [&#39;January&#39;,&#39;February&#39;,&#39;March&#39;,&#39;April&#39;,&#39;May&#39;,&#39;June&#39;,&#39;July&#39;,&#39;August&#39;,&#39;September&#39;,&#39;October&#39;,&#39;November&#39;,&#39;December&#39;],\n weekdays : [&#39;Sunday&#39;,&#39;Monday&#39;,&#39;Tuesday&#39;,&#39;Wednesday&#39;,&#39;Thursday&#39;,&#39;Friday&#39;,&#39;Saturday&#39;],\n weekdaysShort : [&#39;Sun&#39;,&#39;Mon&#39;,&#39;Tue&#39;,&#39;Wed&#39;,&#39;Thu&#39;,&#39;Fri&#39;,&#39;Sat&#39;]\n },\n\n // Theme Classname\n theme: null,\n\n // events array\n events: [],\n\n // callback function\n onSelect: null,\n onOpen: null,\n onClose: null,\n onDraw: null,\n\n // Enable keyboard input\n keyboardInput: true\n },\n\n\n /**\n * templating functions to abstract HTML rendering\n */\n renderDayName = function(opts, day, abbr)\n {\n day += opts.firstDay;\n while (day &gt;= 7) {\n day -= 7;\n }\n return abbr ? opts.i18n.weekdaysShort[day] : opts.i18n.weekdays[day];\n },\n\n renderDay = function(opts)\n {\n var arr = [];\n var ariaSelected = &#39;false&#39;;\n if (opts.isEmpty) {\n if (opts.showDaysInNextAndPreviousMonths) {\n arr.push(&#39;is-outside-current-month&#39;);\n\n if(!opts.enableSelectionDaysInNextAndPreviousMonths) {\n arr.push(&#39;is-selection-disabled&#39;);\n }\n\n } else {\n return &#39;&lt;td class=\&#34;is-empty\&#34;&gt;&lt;/td&gt;&#39;;\n }\n }\n if (opts.isDisabled) {\n arr.push(&#39;is-disabled&#39;);\n }\n if (opts.isToday) {\n arr.push(&#39;is-today&#39;);\n }\n if (opts.isSelected) {\n arr.push(&#39;is-selected&#39;);\n ariaSelected = &#39;true&#39;;\n }\n if (opts.hasEvent) {\n arr.push(&#39;has-event&#39;);\n }\n if (opts.isInRange) {\n arr.push(&#39;is-inrange&#39;);\n }\n if (opts.isStartRange) {\n arr.push(&#39;is-startrange&#39;);\n }\n if (opts.isEndRange) {\n arr.push(&#39;is-endrange&#39;);\n }\n return &#39;&lt;td data-day=\&#34;&#39; + opts.day + &#39;\&#34; class=\&#34;&#39; + arr.join(&#39; &#39;) + &#39;\&#34; aria-selected=\&#34;&#39; + ariaSelected + &#39;\&#34;&gt;&#39; +\n &#39;&lt;button class=\&#34;pika-button pika-day\&#34; type=\&#34;button\&#34; &#39; +\n &#39;data-pika-year=\&#34;&#39; + opts.year + &#39;\&#34; data-pika-month=\&#34;&#39; + opts.month + &#39;\&#34; data-pika-day=\&#34;&#39; + opts.day + &#39;\&#34;&gt;&#39; +\n opts.day +\n &#39;&lt;/button&gt;&#39; +\n &#39;&lt;/td&gt;&#39;;\n },\n\n renderWeek = function (d, m, y) {\n // Lifted from http://javascript.about.com/library/blweekyear.htm, lightly modified.\n var onejan = new Date(y, 0, 1),\n weekNum = Math.ceil((((new Date(y, m, d) - onejan) / 86400000) + onejan.getDay()+1)/7);\n return &#39;&lt;td class=\&#34;pika-week\&#34;&gt;&#39; + weekNum + &#39;&lt;/td&gt;&#39;;\n },\n\n renderRow = function(days, isRTL, pickWholeWeek, isRowSelected)\n {\n return &#39;&lt;tr class=\&#34;pika-row&#39; + (pickWholeWeek ? &#39; pick-whole-week&#39; : &#39;&#39;) + (isRowSelected ? &#39; is-selected&#39; : &#39;&#39;) + &#39;\&#34;&gt;&#39; + (isRTL ? days.reverse() : days).join(&#39;&#39;) + &#39;&lt;/tr&gt;&#39;;\n },\n\n renderBody = function(rows)\n {\n return &#39;&lt;tbody&gt;&#39; + rows.join(&#39;&#39;) + &#39;&lt;/tbody&gt;&#39;;\n },\n\n renderHead = function(opts)\n {\n var i, arr = [];\n if (opts.showWeekNumber) {\n arr.push(&#39;&lt;th&gt;&lt;/th&gt;&#39;);\n }\n for (i = 0; i &lt; 7; i++) {\n arr.push(&#39;&lt;th scope=\&#34;col\&#34;&gt;&lt;abbr title=\&#34;&#39; + renderDayName(opts, i) + &#39;\&#34;&gt;&#39; + renderDayName(opts, i, true) + &#39;&lt;/abbr&gt;&lt;/th&gt;&#39;);\n }\n return &#39;&lt;thead&gt;&lt;tr&gt;&#39; + (opts.isRTL ? arr.reverse() : arr).join(&#39;&#39;) + &#39;&lt;/tr&gt;&lt;/thead&gt;&#39;;\n },\n\n renderTitle = function(instance, c, year, month, refYear, randId)\n {\n var i, j, arr,\n opts = instance._o,\n isMinYear = year === opts.minYear,\n isMaxYear = year === opts.maxYear,\n html = &#39;&lt;div id=\&#34;&#39; + randId + &#39;\&#34; class=\&#34;pika-title\&#34; role=\&#34;heading\&#34; aria-live=\&#34;assertive\&#34;&gt;&#39;,\n monthHtml,\n yearHtml,\n prev = true,\n next = true;\n\n for (arr = [], i = 0; i &lt; 12; i++) {\n arr.push(&#39;&lt;option value=\&#34;&#39; + (year === refYear ? i - c : 12 + i - c) + &#39;\&#34;&#39; +\n (i === month ? &#39; selected=\&#34;selected\&#34;&#39;: &#39;&#39;) +\n ((isMinYear &amp;&amp; i &lt; opts.minMonth) || (isMaxYear &amp;&amp; i &gt; opts.maxMonth) ? &#39;disabled=\&#34;disabled\&#34;&#39; : &#39;&#39;) + &#39;&gt;&#39; +\n opts.i18n.months[i] + &#39;&lt;/option&gt;&#39;);\n }\n\n monthHtml = &#39;&lt;div class=\&#34;pika-label\&#34;&gt;&#39; + opts.i18n.months[month] + &#39;&lt;select class=\&#34;pika-select pika-select-month\&#34; tabindex=\&#34;-1\&#34;&gt;&#39; + arr.join(&#39;&#39;) + &#39;&lt;/select&gt;&lt;/div&gt;&#39;;\n\n if (isArray(opts.yearRange)) {\n i = opts.yearRange[0];\n j = opts.yearRange[1] + 1;\n } else {\n i = year - opts.yearRange;\n j = 1 + year + opts.yearRange;\n }\n\n for (arr = []; i &lt; j &amp;&amp; i &lt;= opts.maxYear; i++) {\n if (i &gt;= opts.minYear) {\n arr.push(&#39;&lt;option value=\&#34;&#39; + i + &#39;\&#34;&#39; + (i === year ? &#39; selected=\&#34;selected\&#34;&#39;: &#39;&#39;) + &#39;&gt;&#39; + (i) + &#39;&lt;/option&gt;&#39;);\n }\n }\n yearHtml = &#39;&lt;div class=\&#34;pika-label\&#34;&gt;&#39; + year + opts.yearSuffix + &#39;&lt;select class=\&#34;pika-select pika-select-year\&#34; tabindex=\&#34;-1\&#34;&gt;&#39; + arr.join(&#39;&#39;) + &#39;&lt;/select&gt;&lt;/div&gt;&#39;;\n\n if (opts.showMonthAfterYear) {\n html += yearHtml + monthHtml;\n } else {\n html += monthHtml + yearHtml;\n }\n\n if (isMinYear &amp;&amp; (month === 0 || opts.minMonth &gt;= month)) {\n prev = false;\n }\n\n if (isMaxYear &amp;&amp; (month === 11 || opts.maxMonth &lt;= month)) {\n next = false;\n }\n\n if (c === 0) {\n html += &#39;&lt;button class=\&#34;pika-prev&#39; + (prev ? &#39;&#39; : &#39; is-disabled&#39;) + &#39;\&#34; type=\&#34;button\&#34;&gt;&#39; + opts.i18n.previousMonth + &#39;&lt;/button&gt;&#39;;\n }\n if (c === (instance._o.numberOfMonths - 1) ) {\n html += &#39;&lt;button class=\&#34;pika-next&#39; + (next ? &#39;&#39; : &#39; is-disabled&#39;) + &#39;\&#34; type=\&#34;button\&#34;&gt;&#39; + opts.i18n.nextMonth + &#39;&lt;/button&gt;&#39;;\n }\n\n return html += &#39;&lt;/div&gt;&#39;;\n },\n\n renderTable = function(opts, data, randId)\n {\n return &#39;&lt;table cellpadding=\&#34;0\&#34; cellspacing=\&#34;0\&#34; class=\&#34;pika-table\&#34; role=\&#34;grid\&#34; aria-labelledby=\&#34;&#39; + randId + &#39;\&#34;&gt;&#39; + renderHead(opts) + renderBody(data) + &#39;&lt;/table&gt;&#39;;\n },\n\n\n /**\n * Pikaday constructor\n */\n Pikaday = function(options)\n {\n var self = this,\n opts = self.config(options);\n\n self._onMouseDown = function(e)\n {\n if (!self._v) {\n return;\n }\n e = e || window.event;\n var target = e.target || e.srcElement;\n if (!target) {\n return;\n }\n\n if (!hasClass(target, &#39;is-disabled&#39;)) {\n if (hasClass(target, &#39;pika-button&#39;) &amp;&amp; !hasClass(target, &#39;is-empty&#39;) &amp;&amp; !hasClass(target.parentNode, &#39;is-disabled&#39;)) {\n self.setDate(new Date(target.getAttribute(&#39;data-pika-year&#39;), target.getAttribute(&#39;data-pika-month&#39;), target.getAttribute(&#39;data-pika-day&#39;)));\n if (opts.bound) {\n sto(function() {\n self.hide();\n if (opts.blurFieldOnSelect &amp;&amp; opts.field) {\n opts.field.blur();\n }\n }, 100);\n }\n }\n else if (hasClass(target, &#39;pika-prev&#39;)) {\n self.prevMonth();\n }\n else if (hasClass(target, &#39;pika-next&#39;)) {\n self.nextMonth();\n }\n }\n if (!hasClass(target, &#39;pika-select&#39;)) {\n // if this is touch event prevent mouse events emulation\n if (e.preventDefault) {\n e.preventDefault();\n } else {\n e.returnValue = false;\n return false;\n }\n } else {\n self._c = true;\n }\n };\n\n self._onChange = function(e)\n {\n e = e || window.event;\n var target = e.target || e.srcElement;\n if (!target) {\n return;\n }\n if (hasClass(target, &#39;pika-select-month&#39;)) {\n self.gotoMonth(target.value);\n }\n else if (hasClass(target, &#39;pika-select-year&#39;)) {\n self.gotoYear(target.value);\n }\n };\n\n self._onKeyChange = function(e)\n {\n e = e || window.event;\n\n if (self.isVisible()) {\n\n switch(e.keyCode){\n case 13:\n case 27:\n if (opts.field) {\n opts.field.blur();\n }\n break;\n case 37:\n e.preventDefault();\n self.adjustDate(&#39;subtract&#39;, 1);\n break;\n case 38:\n self.adjustDate(&#39;subtract&#39;, 7);\n break;\n case 39:\n self.adjustDate(&#39;add&#39;, 1);\n break;\n case 40:\n self.adjustDate(&#39;add&#39;, 7);\n break;\n }\n }\n };\n\n self._onInputChange = function(e)\n {\n var date;\n\n if (e.firedBy === self) {\n return;\n }\n if (opts.parse) {\n date = opts.parse(opts.field.value, opts.format);\n } else if (hasMoment) {\n date = moment(opts.field.value, opts.format, opts.formatStrict);\n date = (date &amp;&amp; date.isValid()) ? date.toDate() : null;\n }\n else {\n date = new Date(Date.parse(opts.field.value));\n }\n if (isDate(date)) {\n self.setDate(date);\n }\n if (!self._v) {\n self.show();\n }\n };\n\n self._onInputFocus = function()\n {\n self.show();\n };\n\n self._onInputClick = function()\n {\n self.show();\n };\n\n self._onInputBlur = function()\n {\n // IE allows pika div to gain focus; catch blur the input field\n var pEl = document.activeElement;\n do {\n if (hasClass(pEl, &#39;pika-single&#39;)) {\n return;\n }\n }\n while ((pEl = pEl.parentNode));\n\n if (!self._c) {\n self._b = sto(function() {\n self.hide();\n }, 50);\n }\n self._c = false;\n };\n\n self._onClick = function(e)\n {\n e = e || window.event;\n var target = e.target || e.srcElement,\n pEl = target;\n if (!target) {\n return;\n }\n if (!hasEventListeners &amp;&amp; hasClass(target, &#39;pika-select&#39;)) {\n if (!target.onchange) {\n target.setAttribute(&#39;onchange&#39;, &#39;return;&#39;);\n addEvent(target, &#39;change&#39;, self._onChange);\n }\n }\n do {\n if (hasClass(pEl, &#39;pika-single&#39;) || pEl === opts.trigger) {\n return;\n }\n }\n while ((pEl = pEl.parentNode));\n if (self._v &amp;&amp; target !== opts.trigger &amp;&amp; pEl !== opts.trigger) {\n self.hide();\n }\n };\n\n self.el = document.createElement(&#39;div&#39;);\n self.el.className = &#39;pika-single&#39; + (opts.isRTL ? &#39; is-rtl&#39; : &#39;&#39;) + (opts.theme ? &#39; &#39; + opts.theme : &#39;&#39;);\n\n addEvent(self.el, &#39;mousedown&#39;, self._onMouseDown, true);\n addEvent(self.el, &#39;touchend&#39;, self._onMouseDown, true);\n addEvent(self.el, &#39;change&#39;, self._onChange);\n\n if (opts.keyboardInput) {\n addEvent(document, &#39;keydown&#39;, self._onKeyChange);\n }\n\n if (opts.field) {\n if (opts.container) {\n opts.container.appendChild(self.el);\n } else if (opts.bound) {\n document.body.appendChild(self.el);\n } else {\n opts.field.parentNode.insertBefore(self.el, opts.field.nextSibling);\n }\n addEvent(opts.field, &#39;change&#39;, self._onInputChange);\n\n if (!opts.defaultDate) {\n if (hasMoment &amp;&amp; opts.field.value) {\n opts.defaultDate = moment(opts.field.value, opts.format).toDate();\n } else {\n opts.defaultDate = new Date(Date.parse(opts.field.value));\n }\n opts.setDefaultDate = true;\n }\n }\n\n var defDate = opts.defaultDate;\n\n if (isDate(defDate)) {\n if (opts.setDefaultDate) {\n self.setDate(defDate, true);\n } else {\n self.gotoDate(defDate);\n }\n } else {\n self.gotoDate(new Date());\n }\n\n if (opts.bound) {\n this.hide();\n self.el.className += &#39; is-bound&#39;;\n addEvent(opts.trigger, &#39;click&#39;, self._onInputClick);\n addEvent(opts.trigger, &#39;focus&#39;, self._onInputFocus);\n addEvent(opts.trigger, &#39;blur&#39;, self._onInputBlur);\n } else {\n this.show();\n }\n };\n\n\n /**\n * public Pikaday API\n */\n Pikaday.prototype = {\n\n\n /**\n * configure functionality\n */\n config: function(options)\n {\n if (!this._o) {\n this._o = extend({}, defaults, true);\n }\n\n var opts = extend(this._o, options, true);\n\n opts.isRTL = !!opts.isRTL;\n\n opts.field = (opts.field &amp;&amp; opts.field.nodeName) ? opts.field : null;\n\n opts.theme = (typeof opts.theme) === &#39;string&#39; &amp;&amp; opts.theme ? opts.theme : null;\n\n opts.bound = !!(opts.bound !== undefined ? opts.field &amp;&amp; opts.bound : opts.field);\n\n opts.trigger = (opts.trigger &amp;&amp; opts.trigger.nodeName) ? opts.trigger : opts.field;\n\n opts.disableWeekends = !!opts.disableWeekends;\n\n opts.disableDayFn = (typeof opts.disableDayFn) === &#39;function&#39; ? opts.disableDayFn : null;\n\n var nom = parseInt(opts.numberOfMonths, 10) || 1;\n opts.numberOfMonths = nom &gt; 4 ? 4 : nom;\n\n if (!isDate(opts.minDate)) {\n opts.minDate = false;\n }\n if (!isDate(opts.maxDate)) {\n opts.maxDate = false;\n }\n if ((opts.minDate &amp;&amp; opts.maxDate) &amp;&amp; opts.maxDate &lt; opts.minDate) {\n opts.maxDate = opts.minDate = false;\n }\n if (opts.minDate) {\n this.setMinDate(opts.minDate);\n }\n if (opts.maxDate) {\n this.setMaxDate(opts.maxDate);\n }\n\n if (isArray(opts.yearRange)) {\n var fallback = new Date().getFullYear() - 10;\n opts.yearRange[0] = parseInt(opts.yearRange[0], 10) || fallback;\n opts.yearRange[1] = parseInt(opts.yearRange[1], 10) || fallback;\n } else {\n opts.yearRange = Math.abs(parseInt(opts.yearRange, 10)) || defaults.yearRange;\n if (opts.yearRange &gt; 100) {\n opts.yearRange = 100;\n }\n }\n\n return opts;\n },\n\n /**\n * return a formatted string of the current selection (using Moment.js if available)\n */\n toString: function(format)\n {\n format = format || this._o.format;\n if (!isDate(this._d)) {\n return &#39;&#39;;\n }\n if (this._o.toString) {\n return this._o.toString(this._d, format);\n }\n if (hasMoment) {\n return moment(this._d).format(format);\n }\n return this._d.toDateString();\n },\n\n /**\n * return a Moment.js object of the current selection (if available)\n */\n getMoment: function()\n {\n return hasMoment ? moment(this._d) : null;\n },\n\n /**\n * set the current selection from a Moment.js object (if available)\n */\n setMoment: function(date, preventOnSelect)\n {\n if (hasMoment &amp;&amp; moment.isMoment(date)) {\n this.setDate(date.toDate(), preventOnSelect);\n }\n },\n\n /**\n * return a Date object of the current selection\n */\n getDate: function()\n {\n return isDate(this._d) ? new Date(this._d.getTime()) : null;\n },\n\n /**\n * set the current selection\n */\n setDate: function(date, preventOnSelect)\n {\n if (!date) {\n this._d = null;\n\n if (this._o.field) {\n this._o.field.value = &#39;&#39;;\n fireEvent(this._o.field, &#39;change&#39;, { firedBy: this });\n }\n\n return this.draw();\n }\n if (typeof date === &#39;string&#39;) {\n date = new Date(Date.parse(date));\n }\n if (!isDate(date)) {\n return;\n }\n\n var min = this._o.minDate,\n max = this._o.maxDate;\n\n if (isDate(min) &amp;&amp; date &lt; min) {\n date = min;\n } else if (isDate(max) &amp;&amp; date &gt; max) {\n date = max;\n }\n\n this._d = new Date(date.getTime());\n setToStartOfDay(this._d);\n this.gotoDate(this._d);\n\n if (this._o.field) {\n this._o.field.value = this.toString();\n fireEvent(this._o.field, &#39;change&#39;, { firedBy: this });\n }\n if (!preventOnSelect &amp;&amp; typeof this._o.onSelect === &#39;function&#39;) {\n this._o.onSelect.call(this, this.getDate());\n }\n },\n\n /**\n * change view to a specific date\n */\n gotoDate: function(date)\n {\n var newCalendar = true;\n\n if (!isDate(date)) {\n return;\n }\n\n if (this.calendars) {\n var firstVisibleDate = new Date(this.calendars[0].year, this.calendars[0].month, 1),\n lastVisibleDate = new Date(this.calendars[this.calendars.length-1].year, this.calendars[this.calendars.length-1].month, 1),\n visibleDate = date.getTime();\n // get the end of the month\n lastVisibleDate.setMonth(lastVisibleDate.getMonth()+1);\n lastVisibleDate.setDate(lastVisibleDate.getDate()-1);\n newCalendar = (visibleDate &lt; firstVisibleDate.getTime() || lastVisibleDate.getTime() &lt; visibleDate);\n }\n\n if (newCalendar) {\n this.calendars = [{\n month: date.getMonth(),\n year: date.getFullYear()\n }];\n if (this._o.mainCalendar === &#39;right&#39;) {\n this.calendars[0].month += 1 - this._o.numberOfMonths;\n }\n }\n\n this.adjustCalendars();\n },\n\n adjustDate: function(sign, days) {\n\n var day = this.getDate() || new Date();\n var difference = parseInt(days)*24*60*60*1000;\n\n var newDay;\n\n if (sign === &#39;add&#39;) {\n newDay = new Date(day.valueOf() + difference);\n } else if (sign === &#39;subtract&#39;) {\n newDay = new Date(day.valueOf() - difference);\n }\n\n this.setDate(newDay);\n },\n\n adjustCalendars: function() {\n this.calendars[0] = adjustCalendar(this.calendars[0]);\n for (var c = 1; c &lt; this._o.numberOfMonths; c++) {\n this.calendars[c] = adjustCalendar({\n month: this.calendars[0].month + c,\n year: this.calendars[0].year\n });\n }\n this.draw();\n },\n\n gotoToday: function()\n {\n this.gotoDate(new Date());\n },\n\n /**\n * change view to a specific month (zero-index, e.g. 0: January)\n */\n gotoMonth: function(month)\n {\n if (!isNaN(month)) {\n this.calendars[0].month = parseInt(month, 10);\n this.adjustCalendars();\n }\n },\n\n nextMonth: function()\n {\n this.calendars[0].month++;\n this.adjustCalendars();\n },\n\n prevMonth: function()\n {\n this.calendars[0].month--;\n this.adjustCalendars();\n },\n\n /**\n * change view to a specific full year (e.g. \&#34;2012\&#34;)\n */\n gotoYear: function(year)\n {\n if (!isNaN(year)) {\n this.calendars[0].year = parseInt(year, 10);\n this.adjustCalendars();\n }\n },\n\n /**\n * change the minDate\n */\n setMinDate: function(value)\n {\n if(value instanceof Date) {\n setToStartOfDay(value);\n this._o.minDate = value;\n this._o.minYear = value.getFullYear();\n this._o.minMonth = value.getMonth();\n } else {\n this._o.minDate = defaults.minDate;\n this._o.minYear = defaults.minYear;\n this._o.minMonth = defaults.minMonth;\n this._o.startRange = defaults.startRange;\n }\n\n this.draw();\n },\n\n /**\n * change the maxDate\n */\n setMaxDate: function(value)\n {\n if(value instanceof Date) {\n setToStartOfDay(value);\n this._o.maxDate = value;\n this._o.maxYear = value.getFullYear();\n this._o.maxMonth = value.getMonth();\n } else {\n this._o.maxDate = defaults.maxDate;\n this._o.maxYear = defaults.maxYear;\n this._o.maxMonth = defaults.maxMonth;\n this._o.endRange = defaults.endRange;\n }\n\n this.draw();\n },\n\n setStartRange: function(value)\n {\n this._o.startRange = value;\n },\n\n setEndRange: function(value)\n {\n this._o.endRange = value;\n },\n\n /**\n * refresh the HTML\n */\n draw: function(force)\n {\n if (!this._v &amp;&amp; !force) {\n return;\n }\n var opts = this._o,\n minYear = opts.minYear,\n maxYear = opts.maxYear,\n minMonth = opts.minMonth,\n maxMonth = opts.maxMonth,\n html = &#39;&#39;,\n randId;\n\n if (this._y &lt;= minYear) {\n this._y = minYear;\n if (!isNaN(minMonth) &amp;&amp; this._m &lt; minMonth) {\n this._m = minMonth;\n }\n }\n if (this._y &gt;= maxYear) {\n this._y = maxYear;\n if (!isNaN(maxMonth) &amp;&amp; this._m &gt; maxMonth) {\n this._m = maxMonth;\n }\n }\n\n randId = &#39;pika-title-&#39; + Math.random().toString(36).replace(/[^a-z]+/g, &#39;&#39;).substr(0, 2);\n\n for (var c = 0; c &lt; opts.numberOfMonths; c++) {\n html += &#39;&lt;div class=\&#34;pika-lendar\&#34;&gt;&#39; + renderTitle(this, c, this.calendars[c].year, this.calendars[c].month, this.calendars[0].year, randId) + this.render(this.calendars[c].year, this.calendars[c].month, randId) + &#39;&lt;/div&gt;&#39;;\n }\n\n this.el.innerHTML = html;\n\n if (opts.bound) {\n if(opts.field.type !== &#39;hidden&#39;) {\n sto(function() {\n opts.trigger.focus();\n }, 1);\n }\n }\n\n if (typeof this._o.onDraw === &#39;function&#39;) {\n this._o.onDraw(this);\n }\n\n if (opts.bound) {\n // let the screen reader user know to use arrow keys\n opts.field.setAttribute(&#39;aria-label&#39;, opts.ariaLabel);\n }\n },\n\n adjustPosition: function()\n {\n var field, pEl, width, height, viewportWidth, viewportHeight, scrollTop, left, top, clientRect, leftAligned, bottomAligned;\n\n if (this._o.container) return;\n\n this.el.style.position = &#39;absolute&#39;;\n\n field = this._o.trigger;\n pEl = field;\n width = this.el.offsetWidth;\n height = this.el.offsetHeight;\n viewportWidth = window.innerWidth || document.documentElement.clientWidth;\n viewportHeight = window.innerHeight || document.documentElement.clientHeight;\n scrollTop = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop;\n leftAligned = true;\n bottomAligned = true;\n\n if (typeof field.getBoundingClientRect === &#39;function&#39;) {\n clientRect = field.getBoundingClientRect();\n left = clientRect.left + window.pageXOffset;\n top = clientRect.bottom + window.pageYOffset;\n } else {\n left = pEl.offsetLeft;\n top = pEl.offsetTop + pEl.offsetHeight;\n while((pEl = pEl.offsetParent)) {\n left += pEl.offsetLeft;\n top += pEl.offsetTop;\n }\n }\n\n // default position is bottom &amp; left\n if ((this._o.reposition &amp;&amp; left + width &gt; viewportWidth) ||\n (\n this._o.position.indexOf(&#39;right&#39;) &gt; -1 &amp;&amp;\n left - width + field.offsetWidth &gt; 0\n )\n ) {\n left = left - width + field.offsetWidth;\n leftAligned = false;\n }\n if ((this._o.reposition &amp;&amp; top + height &gt; viewportHeight + scrollTop) ||\n (\n this._o.position.indexOf(&#39;top&#39;) &gt; -1 &amp;&amp;\n top - height - field.offsetHeight &gt; 0\n )\n ) {\n top = top - height - field.offsetHeight;\n bottomAligned = false;\n }\n\n this.el.style.left = left + &#39;px&#39;;\n this.el.style.top = top + &#39;px&#39;;\n\n addClass(this.el, leftAligned ? &#39;left-aligned&#39; : &#39;right-aligned&#39;);\n addClass(this.el, bottomAligned ? &#39;bottom-aligned&#39; : &#39;top-aligned&#39;);\n removeClass(this.el, !leftAligned ? &#39;left-aligned&#39; : &#39;right-aligned&#39;);\n removeClass(this.el, !bottomAligned ? &#39;bottom-aligned&#39; : &#39;top-aligned&#39;);\n },\n\n /**\n * render HTML for a particular month\n */\n render: function(year, month, randId)\n {\n var opts = this._o,\n now = new Date(),\n days = getDaysInMonth(year, month),\n before = new Date(year, month, 1).getDay(),\n data = [],\n row = [];\n setToStartOfDay(now);\n if (opts.firstDay &gt; 0) {\n before -= opts.firstDay;\n if (before &lt; 0) {\n before += 7;\n }\n }\n var previousMonth = month === 0 ? 11 : month - 1,\n nextMonth = month === 11 ? 0 : month + 1,\n yearOfPreviousMonth = month === 0 ? year - 1 : year,\n yearOfNextMonth = month === 11 ? year + 1 : year,\n daysInPreviousMonth = getDaysInMonth(yearOfPreviousMonth, previousMonth);\n var cells = days + before,\n after = cells;\n while(after &gt; 7) {\n after -= 7;\n }\n cells += 7 - after;\n var isWeekSelected = false;\n for (var i = 0, r = 0; i &lt; cells; i++)\n {\n var day = new Date(year, month, 1 + (i - before)),\n isSelected = isDate(this._d) ? compareDates(day, this._d) : false,\n isToday = compareDates(day, now),\n hasEvent = opts.events.indexOf(day.toDateString()) !== -1 ? true : false,\n isEmpty = i &lt; before || i &gt;= (days + before),\n dayNumber = 1 + (i - before),\n monthNumber = month,\n yearNumber = year,\n isStartRange = opts.startRange &amp;&amp; compareDates(opts.startRange, day),\n isEndRange = opts.endRange &amp;&amp; compareDates(opts.endRange, day),\n isInRange = opts.startRange &amp;&amp; opts.endRange &amp;&amp; opts.startRange &lt; day &amp;&amp; day &lt; opts.endRange,\n isDisabled = (opts.minDate &amp;&amp; day &lt; opts.minDate) ||\n (opts.maxDate &amp;&amp; day &gt; opts.maxDate) ||\n (opts.disableWeekends &amp;&amp; isWeekend(day)) ||\n (opts.disableDayFn &amp;&amp; opts.disableDayFn(day));\n\n if (isEmpty) {\n if (i &lt; before) {\n dayNumber = daysInPreviousMonth + dayNumber;\n monthNumber = previousMonth;\n yearNumber = yearOfPreviousMonth;\n } else {\n dayNumber = dayNumber - days;\n monthNumber = nextMonth;\n yearNumber = yearOfNextMonth;\n }\n }\n\n var dayConfig = {\n day: dayNumber,\n month: monthNumber,\n year: yearNumber,\n hasEvent: hasEvent,\n isSelected: isSelected,\n isToday: isToday,\n isDisabled: isDisabled,\n isEmpty: isEmpty,\n isStartRange: isStartRange,\n isEndRange: isEndRange,\n isInRange: isInRange,\n showDaysInNextAndPreviousMonths: opts.showDaysInNextAndPreviousMonths,\n enableSelectionDaysInNextAndPreviousMonths: opts.enableSelectionDaysInNextAndPreviousMonths\n };\n\n if (opts.pickWholeWeek &amp;&amp; isSelected) {\n isWeekSelected = true;\n }\n\n row.push(renderDay(dayConfig));\n\n if (++r === 7) {\n if (opts.showWeekNumber) {\n row.unshift(renderWeek(i - before, month, year));\n }\n data.push(renderRow(row, opts.isRTL, opts.pickWholeWeek, isWeekSelected));\n row = [];\n r = 0;\n isWeekSelected = false;\n }\n }\n return renderTable(opts, data, randId);\n },\n\n isVisible: function()\n {\n return this._v;\n },\n\n show: function()\n {\n if (!this.isVisible()) {\n this._v = true;\n this.draw();\n removeClass(this.el, &#39;is-hidden&#39;);\n if (this._o.bound) {\n addEvent(document, &#39;click&#39;, this._onClick);\n this.adjustPosition();\n }\n if (typeof this._o.onOpen === &#39;function&#39;) {\n this._o.onOpen.call(this);\n }\n }\n },\n\n hide: function()\n {\n var v = this._v;\n if (v !== false) {\n if (this._o.bound) {\n removeEvent(document, &#39;click&#39;, this._onClick);\n }\n this.el.style.position = &#39;static&#39;; // reset\n this.el.style.left = &#39;auto&#39;;\n this.el.style.top = &#39;auto&#39;;\n addClass(this.el, &#39;is-hidden&#39;);\n this._v = false;\n if (v !== undefined &amp;&amp; typeof this._o.onClose === &#39;function&#39;) {\n this._o.onClose.call(this);\n }\n }\n },\n\n /**\n * GAME OVER\n */\n destroy: function()\n {\n var opts = this._o;\n\n this.hide();\n removeEvent(this.el, &#39;mousedown&#39;, this._onMouseDown, true);\n removeEvent(this.el, &#39;touchend&#39;, this._onMouseDown, true);\n removeEvent(this.el, &#39;change&#39;, this._onChange);\n if (opts.keyboardInput) {\n removeEvent(document, &#39;keydown&#39;, this._onKeyChange);\n }\n if (opts.field) {\n removeEvent(opts.field, &#39;change&#39;, this._onInputChange);\n if (opts.bound) {\n removeEvent(opts.trigger, &#39;click&#39;, this._onInputClick);\n removeEvent(opts.trigger, &#39;focus&#39;, this._onInputFocus);\n removeEvent(opts.trigger, &#39;blur&#39;, this._onInputBlur);\n }\n }\n if (this.el.parentNode) {\n this.el.parentNode.removeChild(this.el);\n }\n }\n\n };\n\n return Pikaday;\n}));\n&#34;),</pre></code></td></tr><tr><td>101</td><td><code><pre> }</pre></code></td></tr><tr><td>102</td><td><code><pre> filee := &amp;embedded.EmbeddedFile{</pre></code></td></tr><tr><td>103</td><td><code><pre> Filename: &#34;setup.js&#34;,</pre></code></td></tr><tr><td>104</td><td><code><pre> FileModTime: time.Unix(1534396043, 0),</pre></code></td></tr><tr><td>105</td><td><code><pre> Content: string(&#34;/*\n * Statup\n * Copyright (C) 2018. Hunter Long and the project contributors\n * Written by Hunter Long &lt;info@socialeck.com&gt; and the project contributors\n *\n * https://github.com/hunterlong/statup\n *\n * The licenses for most software and other practical works are designed\n * to take away your freedom to share and change the works. By contrast,\n * the GNU General Public License is intended to guarantee your freedom to\n * share and change all versions of a program--to make sure it remains free\n * software for all its users.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.\n */\n\nvar currentLocation = window.location;\n$(\&#34;#domain_input\&#34;).val(currentLocation.origin);\n\n$(&#39;select#database_type&#39;).on(&#39;change&#39;, function(){\n var selected = $(&#39;#database_type option:selected&#39;).val();\n if (selected==\&#34;sqlite\&#34;) {\n $(\&#34;#db_host\&#34;).hide();\n $(\&#34;#db_password\&#34;).hide();\n $(\&#34;#db_port\&#34;).hide();\n $(\&#34;#db_user\&#34;).hide();\n $(\&#34;#db_database\&#34;).hide();\n } else {\n $(\&#34;#db_host\&#34;).show();\n $(\&#34;#db_password\&#34;).show();\n $(\&#34;#db_port\&#34;).show();\n $(\&#34;#db_user\&#34;).show();\n $(\&#34;#db_database\&#34;).show();\n }\n if (selected==\&#34;mysql\&#34;) {\n $(\&#34;#db_port_in\&#34;).val(&#39;3306&#39;);\n } else if (selected==\&#34;postgres\&#34;) {\n $(\&#34;#db_port_in\&#34;).val(&#39;5432&#39;);\n }\n\n});\n\n$(\&#34;#setup_form\&#34;).submit(function() {\n $(\&#34;#setup_button\&#34;).prop(\&#34;disabled\&#34;, true);\n $(\&#34;#setup_button\&#34;).text(\&#34;Creating Statup...\&#34;);\n return true;\n});\n\n\n$(&#39;form&#39;).submit(function() {\n $(this).find(\&#34;button[type=&#39;submit&#39;]\&#34;).prop(&#39;disabled&#39;,true);\n $(this).find(\&#34;button[type=&#39;submit&#39;]\&#34;).text(&#39;Loading...&#39;);\n});&#34;),</pre></code></td></tr><tr><td>106</td><td><code><pre> }</pre></code></td></tr><tr><td>107</td><td><code><pre> filef := &amp;embedded.EmbeddedFile{</pre></code></td></tr><tr><td>108</td><td><code><pre> Filename: &#34;sortable.min.js&#34;,</pre></code></td></tr><tr><td>109</td><td><code><pre> FileModTime: time.Unix(1538283453, 0),</pre></code></td></tr><tr><td>110</td><td><code><pre> Content: string(&#34;var sortable=function(){\&#34;use strict\&#34;;function d(e,t,n){if(void 0===n)return e&amp;&amp;e.h5s&amp;&amp;e.h5s.data&amp;&amp;e.h5s.data[t];e.h5s=e.h5s||{},e.h5s.data=e.h5s.data||{},e.h5s.data[t]=n}function u(e,t){if(!(e instanceof NodeList||e instanceof HTMLCollection||e instanceof Array))throw new Error(\&#34;You must provide a nodeList/HTMLCollection/Array of elements to be filtered.\&#34;);return\&#34;string\&#34;!=typeof t?Array.from(e):Array.from(e).filter(function(e){return 1===e.nodeType&amp;&amp;e.matches(t)})}var p=new Map,t=function(){function e(){this._config=new Map,this._placeholder=void 0,this._data=new Map}return Object.defineProperty(e.prototype,\&#34;config\&#34;,{get:function(){var n={};return this._config.forEach(function(e,t){n[t]=e}),n},set:function(e){if(\&#34;object\&#34;!=typeof e)throw new Error(\&#34;You must provide a valid configuration object to the config setter.\&#34;);var t=Object.assign({},e);this._config=new Map(Object.entries(t))},enumerable:!0,configurable:!0}),e.prototype.setConfig=function(e,t){if(!this._config.has(e))throw new Error(\&#34;Trying to set invalid configuration item: \&#34;+e);this._config.set(e,t)},e.prototype.getConfig=function(e){if(!this._config.has(e))throw new Error(\&#34;Invalid configuration item requested: \&#34;+e);return this._config.get(e)},Object.defineProperty(e.prototype,\&#34;placeholder\&#34;,{get:function(){return this._placeholder},set:function(e){if(!(e instanceof HTMLElement)&amp;&amp;null!==e)throw new Error(\&#34;A placeholder must be an html element or null.\&#34;);this._placeholder=e},enumerable:!0,configurable:!0}),e.prototype.setData=function(e,t){if(\&#34;string\&#34;!=typeof e)throw new Error(\&#34;The key must be a string.\&#34;);this._data.set(e,t)},e.prototype.getData=function(e){if(\&#34;string\&#34;!=typeof e)throw new Error(\&#34;The key must be a string.\&#34;);return this._data.get(e)},e.prototype.deleteData=function(e){if(\&#34;string\&#34;!=typeof e)throw new Error(\&#34;The key must be a string.\&#34;);return this._data.delete(e)},e}();function m(e){if(!(e instanceof HTMLElement))throw new Error(\&#34;Please provide a sortable to the store function.\&#34;);return p.has(e)||p.set(e,new t),p.get(e)}function g(e,t,n){if(e instanceof Array)for(var r=0;r&lt;e.length;++r)g(e[r],t,n);else e.addEventListener(t,n),m(e).setData(\&#34;event\&#34;+t,n)}function l(e,t){if(e instanceof Array)for(var n=0;n&lt;e.length;++n)l(e[n],t);else e.removeEventListener(t,m(e).getData(\&#34;event\&#34;+t)),m(e).deleteData(\&#34;event\&#34;+t)}function h(e,t,n){if(e instanceof Array)for(var r=0;r&lt;e.length;++r)h(e[r],t,n);else e.setAttribute(t,n)}function s(e,t){if(e instanceof Array)for(var n=0;n&lt;e.length;++n)s(e[n],t);else e.removeAttribute(t)}function v(e){if(!e.parentElement||0===e.getClientRects().length)throw new Error(\&#34;target element must be part of the dom\&#34;);var t=e.getClientRects()[0];return{left:t.left+window.scrollX,right:t.right+window.scrollX,top:t.top+window.scrollY,bottom:t.bottom+window.scrollY}}function y(e,t){if(!(e instanceof HTMLElement&amp;&amp;(t instanceof NodeList||t instanceof HTMLCollection||t instanceof Array)))throw new Error(\&#34;You must provide an element and a list of elements.\&#34;);return Array.from(t).indexOf(e)}function E(e){if(!(e instanceof HTMLElement))throw new Error(\&#34;Element is not a node element.\&#34;);return null!==e.parentNode}var n=function(e,t,n){if(!(e instanceof HTMLElement&amp;&amp;e.parentElement instanceof HTMLElement))throw new Error(\&#34;target and element must be a node\&#34;);e.parentElement.insertBefore(t,\&#34;before\&#34;===n?e:e.nextElementSibling)},b=function(e,t){return n(e,t,\&#34;before\&#34;)},w=function(e,t){return n(e,t,\&#34;after\&#34;)};function T(e){if(!(e instanceof HTMLElement))throw new Error(\&#34;You must provide a valid dom element\&#34;);var n=window.getComputedStyle(e);return[\&#34;height\&#34;,\&#34;padding-top\&#34;,\&#34;padding-bottom\&#34;].map(function(e){var t=parseInt(n.getPropertyValue(e),10);return isNaN(t)?0:t}).reduce(function(e,t){return e+t})}function c(e,t){if(!(e instanceof Array))throw new Error(\&#34;You must provide a Array of HTMLElements to be filtered.\&#34;);return\&#34;string\&#34;!=typeof t?e:e.filter(function(e){return e.querySelector(t)instanceof HTMLElement}).map(function(e){return e.querySelector(t)})}var C=function(e,t,n){return{element:e,posX:n.pageX-t.left,posY:n.pageY-t.top}};function L(e,t){if(!0===e.isSortable){var n=m(e).getConfig(\&#34;acceptFrom\&#34;);if(null!==n&amp;&amp;!1!==n&amp;&amp;\&#34;string\&#34;!=typeof n)throw new Error(&#39;HTML5Sortable: Wrong argument, \&#34;acceptFrom\&#34; must be \&#34;null\&#34;, \&#34;false\&#34;, or a valid selector string.&#39;);if(null!==n)return!1!==n&amp;&amp;0&lt;n.split(\&#34;,\&#34;).filter(function(e){return 0&lt;e.length&amp;&amp;t.matches(e)}).length;if(e===t)return!0;if(void 0!==m(e).getConfig(\&#34;connectWith\&#34;)&amp;&amp;null!==m(e).getConfig(\&#34;connectWith\&#34;))return m(e).getConfig(\&#34;connectWith\&#34;)===m(t).getConfig(\&#34;connectWith\&#34;)}return!1}var M,x,D,A,H,I,S,Y={items:null,connectWith:null,disableIEFix:null,acceptFrom:null,copy:!1,placeholder:null,placeholderClass:\&#34;sortable-placeholder\&#34;,draggingClass:\&#34;sortable-dragging\&#34;,hoverClass:!1,debounce:0,throttleTime:100,maxItems:0,itemSerializer:void 0,containerSerializer:void 0,customDragImage:null};function _(e,t){if(\&#34;string\&#34;==typeof m(e).getConfig(\&#34;hoverClass\&#34;)){var o=m(e).getConfig(\&#34;hoverClass\&#34;).split(\&#34; \&#34;);!0===t?(g(e,\&#34;mousemove\&#34;,function(r,o){var i=this;if(void 0===o&amp;&amp;(o=250),\&#34;function\&#34;!=typeof r)throw new Error(\&#34;You must provide a function as the first argument for throttle.\&#34;);if(\&#34;number\&#34;!=typeof o)throw new Error(\&#34;You must provide a number as the second argument for throttle.\&#34;);var a=null;return function(){for(var e=[],t=0;t&lt;arguments.length;t++)e[t-0]=arguments[t];var n=Date.now();(null===a||o&lt;=n-a)&amp;&amp;(a=n,r.apply(i,e))}}(function(r){0===r.buttons&amp;&amp;u(e.children,m(e).getConfig(\&#34;items\&#34;)).forEach(function(e){var t,n;e!==r.target?(t=e.classList).remove.apply(t,o):(n=e.classList).add.apply(n,o)})},m(e).getConfig(\&#34;throttleTime\&#34;))),g(e,\&#34;mouseleave\&#34;,function(){u(e.children,m(e).getConfig(\&#34;items\&#34;)).forEach(function(e){var t;(t=e.classList).remove.apply(t,o)})})):(l(e,\&#34;mousemove\&#34;),l(e,\&#34;mouseleave\&#34;))}}var f=function(e){l(e,\&#34;dragstart\&#34;),l(e,\&#34;dragend\&#34;),l(e,\&#34;dragover\&#34;),l(e,\&#34;dragenter\&#34;),l(e,\&#34;drop\&#34;),l(e,\&#34;mouseenter\&#34;),l(e,\&#34;mouseleave\&#34;)},O=function(e,t){var n=e;return!0===m(t).getConfig(\&#34;copy\&#34;)&amp;&amp;(h(n=e.cloneNode(!0),\&#34;aria-copied\&#34;,\&#34;true\&#34;),e.parentElement.appendChild(n),n.style.display=\&#34;none\&#34;,n.oldDisplay=e.style.display),n};function F(e){for(;!0!==e.isSortable;)e=e.parentElement;return e}function W(e,t){var n=d(e,\&#34;opts\&#34;),r=u(e.children,n.items).filter(function(e){return e.contains(t)});return 0&lt;r.length?r[0]:t}var r=function(e){var t,n,r,o=d(e,\&#34;opts\&#34;)||{},i=u(e.children,o.items),a=c(i,o.handle);l(e,\&#34;dragover\&#34;),l(e,\&#34;dragenter\&#34;),l(e,\&#34;drop\&#34;),(n=t=e).h5s&amp;&amp;delete n.h5s.data,s(t,\&#34;aria-dropeffect\&#34;),l(a,\&#34;mousedown\&#34;),f(i),s(r=i,\&#34;aria-grabbed\&#34;),s(r,\&#34;aria-copied\&#34;),s(r,\&#34;draggable\&#34;),s(r,\&#34;role\&#34;)},j=function(e){var t=d(e,\&#34;opts\&#34;),n=u(e.children,t.items),r=c(n,t.handle);(h(e,\&#34;aria-dropeffect\&#34;,\&#34;move\&#34;),d(e,\&#34;_disabled\&#34;,\&#34;false\&#34;),h(r,\&#34;draggable\&#34;,\&#34;true\&#34;),!1===t.disableIEFix)&amp;&amp;(\&#34;function\&#34;==typeof(document||window.document).createElement(\&#34;span\&#34;).dragDrop&amp;&amp;g(r,\&#34;mousedown\&#34;,function(){if(-1!==n.indexOf(this))this.dragDrop();else{for(var e=this.parentElement;-1===n.indexOf(e);)e=e.parentElement;e.dragDrop()}}))},z=function(e){var t=d(e,\&#34;opts\&#34;),n=u(e.children,t.items),r=c(n,t.handle);d(e,\&#34;_disabled\&#34;,\&#34;false\&#34;),f(n),l(r,\&#34;mousedown\&#34;),l(e,\&#34;dragover\&#34;),l(e,\&#34;dragenter\&#34;),l(e,\&#34;drop\&#34;)};function N(e,f){var c=String(f);return f=Object.assign({connectWith:null,acceptFrom:null,copy:!1,placeholder:null,disableIEFix:null,placeholderClass:\&#34;sortable-placeholder\&#34;,draggingClass:\&#34;sortable-dragging\&#34;,hoverClass:!1,debounce:0,maxItems:0,itemSerializer:void 0,containerSerializer:void 0,customDragImage:null,items:null},\&#34;object\&#34;==typeof f?f:{}),\&#34;string\&#34;==typeof e&amp;&amp;(e=document.querySelectorAll(e)),e instanceof HTMLElement&amp;&amp;(e=[e]),e=Array.prototype.slice.call(e),/serialize/.test(c)?e.map(function(e){var t=d(e,\&#34;opts\&#34;);return function(t,n,e){if(void 0===n&amp;&amp;(n=function(e,t){return e}),void 0===e&amp;&amp;(e=function(e){return e}),!(t instanceof HTMLElement)||1==!t.isSortable)throw new Error(\&#34;You need to provide a sortableContainer to be serialized.\&#34;);if(\&#34;function\&#34;!=typeof n||\&#34;function\&#34;!=typeof e)throw new Error(\&#34;You need to provide a valid serializer for items and the container.\&#34;);var r=d(t,\&#34;opts\&#34;).items,o=u(t.children,r),i=o.map(function(e){return{parent:t,node:e,html:e.outerHTML,index:y(e,o)}});return{container:e({node:t,itemCount:i.length}),items:i.map(function(e){return n(e,t)})}}(e,t.itemSerializer,t.containerSerializer)}):(e.forEach(function(s){if(/enable|disable|destroy/.test(c))return N[c](s);[\&#34;connectWith\&#34;,\&#34;disableIEFix\&#34;].forEach(function(e){f.hasOwnProperty(e)&amp;&amp;null!==f[e]&amp;&amp;console.warn(&#39;HTML5Sortable: You are using the deprecated configuration \&#34;&#39;+e+&#39;\&#34;. This will be removed in an upcoming version, make sure to migrate to the new options when updating.&#39;)}),f=Object.assign({},Y,f),m(s).config=f,f=d(s,\&#34;opts\&#34;)||f,d(s,\&#34;opts\&#34;,f),s.isSortable=!0,z(s);var e,t=u(s.children,f.items);if(null!==f.placeholder&amp;&amp;void 0!==f.placeholder){var n=document.createElement(s.tagName);n.innerHTML=f.placeholder,e=n.children[0]}m(s).placeholder=function(e,t,n){if(void 0===n&amp;&amp;(n=\&#34;sortable-placeholder\&#34;),!(e instanceof HTMLElement))throw new Error(\&#34;You must provide a valid element as a sortable.\&#34;);if(!(t instanceof HTMLElement)&amp;&amp;void 0!==t)throw new Error(\&#34;You must provide a valid element as a placeholder or set ot to undefined.\&#34;);return void 0===t&amp;&amp;([\&#34;UL\&#34;,\&#34;OL\&#34;].includes(e.tagName)?t=document.createElement(\&#34;li\&#34;):[\&#34;TABLE\&#34;,\&#34;TBODY\&#34;].includes(e.tagName)?(t=document.createElement(\&#34;tr\&#34;)).innerHTML=&#39;&lt;td colspan=\&#34;100\&#34;&gt;&lt;/td&gt;&#39;:t=document.createElement(\&#34;div\&#34;)),\&#34;string\&#34;==typeof n&amp;&amp;(r=t.classList).add.apply(r,n.split(\&#34; \&#34;)),t;var r}(s,e,f.placeholderClass),d(s,\&#34;items\&#34;,f.items),f.acceptFrom?d(s,\&#34;acceptFrom\&#34;,f.acceptFrom):f.connectWith&amp;&amp;d(s,\&#34;connectWith\&#34;,f.connectWith),j(s),h(t,\&#34;role\&#34;,\&#34;option\&#34;),h(t,\&#34;aria-grabbed\&#34;,\&#34;false\&#34;),_(s,!0),g(s,\&#34;dragstart\&#34;,function(e){if(!0!==e.target.isSortable&amp;&amp;(e.stopImmediatePropagation(),(!f.handle||e.target.matches(f.handle))&amp;&amp;\&#34;false\&#34;!==e.target.getAttribute(\&#34;draggable\&#34;))){var t=F(e.target),n=W(t,e.target);I=u(t.children,f.items),A=I.indexOf(n),H=y(n,t.children),D=t,function(e,t,n){if(!(e instanceof Event))throw new Error(\&#34;setDragImage requires a DragEvent as the first argument.\&#34;);if(!(t instanceof HTMLElement))throw new Error(\&#34;setDragImage requires the dragged element as the second argument.\&#34;);if(n||(n=C),e.dataTransfer&amp;&amp;e.dataTransfer.setDragImage){var r=n(t,v(t),e);if(!(r.element instanceof HTMLElement)||\&#34;number\&#34;!=typeof r.posX||\&#34;number\&#34;!=typeof r.posY)throw new Error(\&#34;The customDragImage function you provided must return and object with the properties element[string], posX[integer], posY[integer].\&#34;);e.dataTransfer.effectAllowed=\&#34;copyMove\&#34;,e.dataTransfer.setData(\&#34;text/plain\&#34;,e.target.id),e.dataTransfer.setDragImage(r.element,r.posX,r.posY)}}(e,n,f.customDragImage),x=T(n),n.classList.add(f.draggingClass),h(M=O(n,t),\&#34;aria-grabbed\&#34;,\&#34;true\&#34;),t.dispatchEvent(new CustomEvent(\&#34;sortstart\&#34;,{detail:{origin:{elementIndex:H,index:A,container:D},item:M}}))}}),g(s,\&#34;dragenter\&#34;,function(e){if(!0!==e.target.isSortable){var t=F(e.target);S=u(t.children,d(t,\&#34;items\&#34;)).filter(function(e){return e!==m(s).placeholder})}}),g(s,\&#34;dragend\&#34;,function(e){if(M){M.classList.remove(f.draggingClass),h(M,\&#34;aria-grabbed\&#34;,\&#34;false\&#34;),\&#34;true\&#34;===M.getAttribute(\&#34;aria-copied\&#34;)&amp;&amp;\&#34;true\&#34;!==d(M,\&#34;dropped\&#34;)&amp;&amp;M.remove(),M.style.display=M.oldDisplay,delete M.oldDisplay;var t=Array.from(p.values()).map(function(e){return e.placeholder}).filter(function(e){return e instanceof HTMLElement}).filter(E)[0];t&amp;&amp;t.remove(),s.dispatchEvent(new CustomEvent(\&#34;sortstop\&#34;,{detail:{origin:{elementIndex:H,index:A,container:D},item:M}})),x=M=null}}),g(s,\&#34;drop\&#34;,function(e){if(L(s,M.parentElement)){e.preventDefault(),e.stopPropagation(),d(M,\&#34;dropped\&#34;,\&#34;true\&#34;);var t=Array.from(p.values()).map(function(e){return e.placeholder}).filter(function(e){return e instanceof HTMLElement}).filter(E)[0];w(t,M),t.remove(),s.dispatchEvent(new CustomEvent(\&#34;sortstop\&#34;,{detail:{origin:{elementIndex:H,index:A,container:D},item:M}}));var n=m(s).placeholder,r=u(D.children,f.items).filter(function(e){return e!==n}),o=!0===this.isSortable?this:this.parentElement,i=u(o.children,d(o,\&#34;items\&#34;)).filter(function(e){return e!==n}),a=y(M,Array.from(M.parentElement.children).filter(function(e){return e!==n})),l=y(M,i);H===a&amp;&amp;D===o||s.dispatchEvent(new CustomEvent(\&#34;sortupdate\&#34;,{detail:{origin:{elementIndex:H,index:A,container:D,itemsBeforeUpdate:I,items:r},destination:{index:l,elementIndex:a,container:o,itemsBeforeUpdate:S,items:i},item:M}}))}});var r,o,i,a=(r=function(t,e,n){if(M)if(f.forcePlaceholderSize&amp;&amp;(m(t).placeholder.style.height=x+\&#34;px\&#34;),-1&lt;Array.from(t.children).indexOf(e)){var r=T(e),o=y(m(t).placeholder,e.parentElement.children),i=y(e,e.parentElement.children);if(x&lt;r){var a=r-x,l=v(e).top;if(o&lt;i&amp;&amp;n&lt;l)return;if(i&lt;o&amp;&amp;l+r-a&lt;n)return}void 0===M.oldDisplay&amp;&amp;(M.oldDisplay=M.style.display),\&#34;none\&#34;!==M.style.display&amp;&amp;(M.style.display=\&#34;none\&#34;);var s=!1;try{s=v(e).top+e.offsetHeight/2&lt;=n}catch(e){s=o&lt;i}s?w(e,m(t).placeholder):b(e,m(t).placeholder),Array.from(p.values()).filter(function(e){return void 0!==e.placeholder}).forEach(function(e){e.placeholder!==m(t).placeholder&amp;&amp;e.placeholder.remove()})}else{var c=Array.from(p.values()).filter(function(e){return void 0!==e.placeholder}).map(function(e){return e.placeholder});-1!==c.indexOf(e)||t!==e||u(e.children,f.items).length||(c.forEach(function(e){return e.remove()}),e.appendChild(m(t).placeholder))}},void 0===(o=f.debounce)&amp;&amp;(o=0),function(){for(var e=[],t=0;t&lt;arguments.length;t++)e[t-0]=arguments[t];clearTimeout(i),i=setTimeout(function(){r.apply(void 0,e)},o)}),l=function(e){var t=e.target,n=!0===t.isSortable?t:F(t);if(t=W(n,t),M&amp;&amp;L(n,M.parentElement)&amp;&amp;\&#34;true\&#34;!==d(n,\&#34;_disabled\&#34;)){var r=d(n,\&#34;opts\&#34;);parseInt(r.maxItems)&amp;&amp;u(n.children,d(n,\&#34;items\&#34;)).length&gt;=parseInt(r.maxItems)&amp;&amp;M.parentElement!==n||(e.preventDefault(),e.stopPropagation(),e.dataTransfer.dropEffect=!0===m(n).getConfig(\&#34;copy\&#34;)?\&#34;copy\&#34;:\&#34;move\&#34;,a(n,t,e.pageY))}};g(t.concat(s),\&#34;dragover\&#34;,l),g(t.concat(s),\&#34;dragenter\&#34;,l)}),e)}return N.destroy=function(e){r(e)},N.enable=function(e){j(e)},N.disable=function(e){var t,n,r;n=d(t=e,\&#34;opts\&#34;),r=c(u(t.children,n.items),n.handle),h(t,\&#34;aria-dropeffect\&#34;,\&#34;none\&#34;),d(t,\&#34;_disabled\&#34;,\&#34;true\&#34;),h(r,\&#34;draggable\&#34;,\&#34;false\&#34;),l(r,\&#34;mousedown\&#34;)},N}();\n//# sourceMappingURL=html5sortable.min.js.map\n&#34;),</pre></code></td></tr><tr><td>111</td><td><code><pre> }</pre></code></td></tr><tr><td>112</td><td><code><pre></pre></code></td></tr><tr><td>113</td><td><code><pre> // define dirs</pre></code></td></tr><tr><td>114</td><td><code><pre> dir6 := &amp;embedded.EmbeddedDir{</pre></code></td></tr><tr><td>115</td><td><code><pre> Filename: &#34;&#34;,</pre></code></td></tr><tr><td>116</td><td><code><pre> DirModTime: time.Unix(1538894434, 0),</pre></code></td></tr><tr><td>117</td><td><code><pre> ChildFiles: []*embedded.EmbeddedFile{</pre></code></td></tr><tr><td>118</td><td><code><pre> file7, // &#34;Chart.bundle.min.js&#34;</pre></code></td></tr><tr><td>119</td><td><code><pre> file8, // &#34;bootstrap.min.js&#34;</pre></code></td></tr><tr><td>120</td><td><code><pre> file9, // &#34;chart_index.js&#34;</pre></code></td></tr><tr><td>121</td><td><code><pre> filea, // &#34;charts.js&#34;</pre></code></td></tr><tr><td>122</td><td><code><pre> fileb, // &#34;jquery-3.3.1.min.js&#34;</pre></code></td></tr><tr><td>123</td><td><code><pre> filec, // &#34;main.js&#34;</pre></code></td></tr><tr><td>124</td><td><code><pre> filed, // &#34;pikaday.js&#34;</pre></code></td></tr><tr><td>125</td><td><code><pre> filee, // &#34;setup.js&#34;</pre></code></td></tr><tr><td>126</td><td><code><pre> filef, // &#34;sortable.min.js&#34;</pre></code></td></tr><tr><td>127</td><td><code><pre></pre></code></td></tr><tr><td>128</td><td><code><pre> },</pre></code></td></tr><tr><td>129</td><td><code><pre> }</pre></code></td></tr><tr><td>130</td><td><code><pre></pre></code></td></tr><tr><td>131</td><td><code><pre> // link ChildDirs</pre></code></td></tr><tr><td>132</td><td><code><pre> dir6.ChildDirs = []*embedded.EmbeddedDir{}</pre></code></td></tr><tr><td>133</td><td><code><pre></pre></code></td></tr><tr><td>134</td><td><code><pre> // register embeddedBox</pre></code></td></tr><tr><td>135</td><td><code><pre> embedded.RegisterEmbeddedBox(`js`, &amp;embedded.EmbeddedBox{</pre></code></td></tr><tr><td>136</td><td><code><pre> Name: `js`,</pre></code></td></tr><tr><td>137</td><td><code><pre> Time: time.Unix(1538894434, 0),</pre></code></td></tr><tr><td>138</td><td><code><pre> Dirs: map[string]*embedded.EmbeddedDir{</pre></code></td></tr><tr><td>139</td><td><code><pre> &#34;&#34;: dir6,</pre></code></td></tr><tr><td>140</td><td><code><pre> },</pre></code></td></tr><tr><td>141</td><td><code><pre> Files: map[string]*embedded.EmbeddedFile{</pre></code></td></tr><tr><td>142</td><td><code><pre> &#34;Chart.bundle.min.js&#34;: file7,</pre></code></td></tr><tr><td>143</td><td><code><pre> &#34;bootstrap.min.js&#34;: file8,</pre></code></td></tr><tr><td>144</td><td><code><pre> &#34;chart_index.js&#34;: file9,</pre></code></td></tr><tr><td>145</td><td><code><pre> &#34;charts.js&#34;: filea,</pre></code></td></tr><tr><td>146</td><td><code><pre> &#34;jquery-3.3.1.min.js&#34;: fileb,</pre></code></td></tr><tr><td>147</td><td><code><pre> &#34;main.js&#34;: filec,</pre></code></td></tr><tr><td>148</td><td><code><pre> &#34;pikaday.js&#34;: filed,</pre></code></td></tr><tr><td>149</td><td><code><pre> &#34;setup.js&#34;: filee,</pre></code></td></tr><tr><td>150</td><td><code><pre> &#34;sortable.min.js&#34;: filef,</pre></code></td></tr><tr><td>151</td><td><code><pre> },</pre></code></td></tr><tr><td>152</td><td><code><pre> })</pre></code></td></tr><tr><td>153</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_init">func init</div><div class="info"><a href="#s_fn_init">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/source/rice-box.go</code>:</p></div><table class="listing">
<tr><td>8</td><td><code><pre>func init() {</pre></code></td></tr><tr><td>9</td><td><code><pre></pre></code></td></tr><tr><td>10</td><td><code><pre> // define files</pre></code></td></tr><tr><td>11</td><td><code><pre> file2 := &amp;embedded.EmbeddedFile{</pre></code></td></tr><tr><td>12</td><td><code><pre> Filename: &#34;base.scss&#34;,</pre></code></td></tr><tr><td>13</td><td><code><pre> FileModTime: time.Unix(1538106377, 0),</pre></code></td></tr><tr><td>14</td><td><code><pre> Content: string(&#34;/*!\n * Statup\n * Copyright (C) 2018. Hunter Long and the project contributors\n * Written by Hunter Long &lt;info@socialeck.com&gt; and the project contributors\n *\n * https://github.com/hunterlong/statup\n *\n * The licenses for most software and other practical works are designed\n * to take away your freedom to share and change the works. By contrast,\n * the GNU General Public License is intended to guarantee your freedom to\n * share and change all versions of a program--to make sure it remains free\n * software for all its users.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.\n */\n\n@import &#39;variables&#39;;\n\n\nHTML,BODY {\n background-color: $background-color;\n}\n\n.container {\n padding-top: 20px;\n padding-bottom: 20px;\n max-width: $max-width;\n}\n\n.header-title {\n color: $title-color;\n}\n\n.header-desc {\n color: $description-color;\n}\n\n.btn {\n border-radius: $global-border-radius;\n}\n\n.online_list .badge {\n margin-top: 0.2rem;\n}\n\n.navbar {\n margin-bottom: 30px;\n}\n\n.btn-sm {\n line-height: 1.3;\n font-size: 0.75rem;\n}\n\n.view_service_btn {\n position: absolute;\n bottom: -40px;\n right: 40px;\n}\n\n.service_lower_info {\n position: absolute;\n bottom: -40px;\n left: 40px;\n color: #d1ffca;\n font-size: 0.85rem;\n}\n\n.lg_number {\n font-size: $service-stats-size;\n font-weight: bold;\n display: block;\n color: $service-stats-color;\n}\n\n.stats_area {\n text-align: center;\n color: #a5a5a5;\n}\n\n.lower_canvas {\n height: 3.4rem;\n width: 100%;\n background-color: #48d338;\n padding: 15px 10px;\n margin-left: 0px !important;\n margin-right: 0px !important;\n}\n\n.lower_canvas SPAN {\n font-size: 1rem;\n color: $service-description-color\n}\n\n.footer {\n text-decoration: none;\n margin-top: 20px;\n}\n\n.footer A {\n color: $footer-text-color;\n text-decoration: none;\n}\n\n.footer A:HOVER {\n color: #6d6d6d;\n}\n\n.badge {\n color: white;\n border-radius: $global-border-radius;\n}\n\n.btn-group {\n height: 25px;\n\n &amp; A {\n padding: 0.1rem .75rem;\n font-size: 0.8rem;\n }\n}\n\n.card-body .badge {\n color: #fff;\n}\n\n.nav-pills .nav-link {\n border-radius: $global-border-radius;\n}\n\n.form-control {\n border-radius: $global-border-radius;\n}\n\n.card {\n background-color: $service-background;\n border: $service-border;\n}\n\n.card-body {\n overflow: hidden;\n}\n\n.card-body H4 A {\n color: $service-title;\n text-decoration: none;\n}\n\n.chart-container {\n position: relative;\n height: 170px;\n width: 100%;\n}\n\n.service-chart-container {\n position: relative;\n height: 400px;\n width: 100%;\n}\n\n@mixin dynamic-color-hov($color) {\n &amp;.dyn-dark {\n background-color: darken($color, 12%) !important;\n border-color: darken($color, 17%) !important;\n }\n &amp;.dyn-dark:HOVER {\n background-color: darken($color, 17%) !important;\n border-color: darken($color, 20%) !important;\n }\n &amp;.dyn-light {\n background-color: lighten($color, 12%) !important;\n border-color: lighten($color, 17%) !important;\n }\n &amp;.dyn-light:HOVER {\n background-color: lighten($color, 17%) !important;\n border-color: lighten($color, 20%) !important;\n }\n}\n\n@mixin dynamic-color($color) {\n &amp;.dyn-dark {\n background-color: darken($color, 12%) !important;\n border-color: darken($color, 17%) !important;\n }\n &amp;.dyn-light {\n background-color: lighten($color, 12%) !important;\n border-color: lighten($color, 17%) !important;\n }\n}\n\n\n.btn-primary {\n background-color: $primary-color;\n border-color: darken($primary-color, 17%);\n color: white;\n @include dynamic-color($success-color);\n}\n\n.btn-success {\n background-color: $success-color;\n @include dynamic-color($success-color);\n}\n\n.btn-danger {\n background-color: $danger-color;\n @include dynamic-color($danger-color);\n}\n\n.bg-success {\n background-color: $success-color !important;\n}\n\n.bg-danger {\n background-color: $danger-color !important;\n}\n\n.bg-success .dyn-dark {\n background-color: darken($success-color, 10%) !important;\n}\n\n.bg-danger .dyn-dark {\n background-color: darken($danger-color, 10%) !important;\n}\n\n.nav-pills .nav-link.active, .nav-pills .show&gt;.nav-link {\n background-color: $nav-tab-color;\n}\n\n.nav-pills A {\n color: #424242;\n}\n\n\n.CodeMirror {\n /* Bootstrap Settings */\n box-sizing: border-box;\n margin: 0;\n font: inherit;\n overflow: auto;\n font-family: inherit;\n display: block;\n width: 100%;\n padding: 0px;\n font-size: 14px;\n line-height: 1.5;\n color: #555;\n background-color: #fff;\n background-image: none;\n border: 1px solid #ccc;\n border-radius: 4px;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n /* Code Mirror Settings */\n font-family: monospace;\n position: relative;\n overflow: hidden;\n height:80vh;\n}\n\n.CodeMirror-focused {\n /* Bootstrap Settings */\n border-color: #66afe9;\n outline: 0;\n box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);\n transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n\n.switch {\n font-size: 1rem;\n position: relative;\n}\n.switch input {\n position: absolute;\n height: 1px;\n width: 1px;\n background: none;\n border: 0;\n clip: rect(0 0 0 0);\n clip-path: inset(50%);\n overflow: hidden;\n padding: 0;\n}\n.switch input + label {\n position: relative;\n min-width: calc(calc(2.375rem * .8) * 2);\n border-radius: calc(2.375rem * .8);\n height: calc(2.375rem * .8);\n line-height: calc(2.375rem * .8);\n display: inline-block;\n cursor: pointer;\n outline: none;\n user-select: none;\n vertical-align: middle;\n text-indent: calc(calc(calc(2.375rem * .8) * 2) + .5rem);\n}\n.switch input + label::before,\n.switch input + label::after {\n content: &#39;&#39;;\n position: absolute;\n top: 0;\n left: 0;\n width: calc(calc(2.375rem * .8) * 2);\n bottom: 0;\n display: block;\n}\n.switch input + label::before {\n right: 0;\n background-color: #dee2e6;\n border-radius: calc(2.375rem * .8);\n transition: 0.2s all;\n}\n.switch input + label::after {\n top: 2px;\n left: 2px;\n width: calc(calc(2.375rem * .8) - calc(2px * 2));\n height: calc(calc(2.375rem * .8) - calc(2px * 2));\n border-radius: 50%;\n background-color: white;\n transition: 0.2s all;\n}\n.switch input:checked + label::before {\n background-color: #08d;\n}\n.switch input:checked + label::after {\n margin-left: calc(2.375rem * .8);\n}\n.switch input:focus + label::before {\n outline: none;\n box-shadow: 0 0 0 0.2rem rgba(0, 136, 221, 0.25);\n}\n.switch input:disabled + label {\n color: #868e96;\n cursor: not-allowed;\n}\n.switch input:disabled + label::before {\n background-color: #e9ecef;\n}\n.switch.switch-sm {\n font-size: 0.875rem;\n}\n.switch.switch-sm input + label {\n min-width: calc(calc(1.9375rem * .8) * 2);\n height: calc(1.9375rem * .8);\n line-height: calc(1.9375rem * .8);\n text-indent: calc(calc(calc(1.9375rem * .8) * 2) + .5rem);\n}\n.switch.switch-sm input + label::before {\n width: calc(calc(1.9375rem * .8) * 2);\n}\n.switch.switch-sm input + label::after {\n width: calc(calc(1.9375rem * .8) - calc(2px * 2));\n height: calc(calc(1.9375rem * .8) - calc(2px * 2));\n}\n.switch.switch-sm input:checked + label::after {\n margin-left: calc(1.9375rem * .8);\n}\n.switch.switch-lg {\n font-size: 1.25rem;\n}\n.switch.switch-lg input + label {\n min-width: calc(calc(3rem * .8) * 2);\n height: calc(3rem * .8);\n line-height: calc(3rem * .8);\n text-indent: calc(calc(calc(3rem * .8) * 2) + .5rem);\n}\n.switch.switch-lg input + label::before {\n width: calc(calc(3rem * .8) * 2);\n}\n.switch.switch-lg input + label::after {\n width: calc(calc(3rem * .8) - calc(2px * 2));\n height: calc(calc(3rem * .8) - calc(2px * 2));\n}\n.switch.switch-lg input:checked + label::after {\n margin-left: calc(3rem * .8);\n}\n.switch + .switch {\n margin-left: 1rem;\n}\n\n\n@keyframes pulse_animation {\n 0% { transform: scale(1); }\n 30% { transform: scale(1); }\n 40% { transform: scale(1.02); }\n 50% { transform: scale(1); }\n 60% { transform: scale(1); }\n 70% { transform: scale(1.05); }\n 80% { transform: scale(1); }\n 100% { transform: scale(1); }\n}\n\n.pulse {\n animation-name: pulse_animation;\n animation-duration: 1500ms;\n transform-origin:70% 70%;\n animation-iteration-count: infinite;\n animation-timing-function: linear;\n}\n\n\n@keyframes glow-grow {\n 0% {\n opacity: 0;\n transform: scale(1);\n }\n 80% {\n opacity: 1;\n }\n 100% {\n transform: scale(2);\n opacity: 0;\n }\n}\n.pulse-glow {\n animation-name: glow-grown;\n animation-duration: 100ms;\n transform-origin: 70% 30%;\n animation-iteration-count: infinite;\n animation-timing-function: linear;\n}\n\n.pulse-glow:before,\n.pulse-glow:after {\n position: absolute;\n content: &#39;&#39;;\n height: 0.5rem;\n width: 1.75rem;\n top: 1.2rem;\n right: 2.15rem;\n border-radius: 0;\n box-shadow: 0 0 7px #47d337;\n animation: glow-grow 2s ease-out infinite;\n}\n\n.sortable_drag {\n background-color: #0000000f;\n}\n\n.drag_icon {\n cursor: move; /* fallback if grab cursor is unsupported */\n cursor: grab;\n cursor: -moz-grab;\n cursor: -webkit-grab;\n width: 25px;\n height: 25px;\n display: inline-block;\n margin-right: 5px;\n margin-left: -10px;\n text-align: center;\n color: #b1b1b1;\n}\n\n/* (Optional) Apply a \&#34;closed-hand\&#34; cursor during drag operation. */\n.drag_icon:active {\n cursor: grabbing;\n cursor: -moz-grabbing;\n cursor: -webkit-grabbing;\n}\n\n.switch_btn {\n float: right;\n margin: -1px 0px 0px 0px;\n display: block;\n}\n\n#start_container {\n position: absolute;\n z-index: 99999;\n margin-top: 20px;\n}\n\n#end_container {\n position: absolute;\n z-index: 99999;\n margin-top: 20px;\n right: 0;\n}\n\n.pointer {\n cursor: pointer;\n}\n\n@import &#39;./pikaday&#39;;\n\n@import &#39;./mobile&#39;;\n&#34;),</pre></code></td></tr><tr><td>15</td><td><code><pre> }</pre></code></td></tr><tr><td>16</td><td><code><pre> file3 := &amp;embedded.EmbeddedFile{</pre></code></td></tr><tr><td>17</td><td><code><pre> Filename: &#34;mobile.scss&#34;,</pre></code></td></tr><tr><td>18</td><td><code><pre> FileModTime: time.Unix(1538106377, 0),</pre></code></td></tr><tr><td>19</td><td><code><pre> Content: string(&#34;/*!\n * Statup\n * Copyright (C) 2018. Hunter Long and the project contributors\n * Written by Hunter Long &lt;info@socialeck.com&gt; and the project contributors\n *\n * https://github.com/hunterlong/statup\n *\n * The licenses for most software and other practical works are designed\n * to take away your freedom to share and change the works. By contrast,\n * the GNU General Public License is intended to guarantee your freedom to\n * share and change all versions of a program--to make sure it remains free\n * software for all its users.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.\n */\n\n@media (max-width: 767px) {\n\n HTML,BODY {\n background-color: $sm-background-color;\n }\n\n .sm-container {\n margin-top: 40px !important;\n padding: 0 !important;\n }\n\n .list-group-item H5 {\n font-size: 0.9rem;\n }\n\n .container {\n padding: 0 !important;\n }\n\n .navbar {\n margin-left: 0px;\n margin-top: 0px;\n width: 100%;\n margin-bottom: 0;\n }\n\n .btn-sm {\n line-height: 0.9rem;\n font-size: 0.65rem;\n }\n\n .full-col-12 {\n padding-left: 0px;\n padding-right: 0px;\n }\n\n .card {\n border: 0;\n border-radius: $sm-border-radius;\n padding: $sm-padding;\n background-color: $sm-service-background;\n }\n\n .card-body {\n font-size: 6pt;\n padding: 5px 5px;\n }\n\n .lg_number {\n font-size: 7.8vw;\n }\n\n .stats_area {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n\n .stats_area .col-4 {\n padding-left: 0;\n padding-right: 0;\n font-size: 0.6rem;\n }\n\n .list-group-item {\n border-top: 1px solid #e4e4e4;\n border: 0px;\n }\n\n .list-group-item:first-child {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n\n .list-group-item:last-child {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n }\n\n .list-group-item P {\n font-size: 0.7rem;\n }\n\n .service-chart-container {\n height: 200px;\n }\n}\n&#34;),</pre></code></td></tr><tr><td>20</td><td><code><pre> }</pre></code></td></tr><tr><td>21</td><td><code><pre> file4 := &amp;embedded.EmbeddedFile{</pre></code></td></tr><tr><td>22</td><td><code><pre> Filename: &#34;pikaday.scss&#34;,</pre></code></td></tr><tr><td>23</td><td><code><pre> FileModTime: time.Unix(1537243356, 0),</pre></code></td></tr><tr><td>24</td><td><code><pre> Content: string(&#34;/*!\n * Pikaday\n * Copyright © 2014 David Bushell | BSD &amp; MIT license | http://dbushell.com/\n */\n\n// Variables\n// Declare any of these variables before importing this SCSS file to easily override defaults\n// Variables are namespaced with the pd (pikaday) prefix\n\n// Colours\n$pd-text-color: #333 !default;\n$pd-title-color: #333 !default;\n$pd-title-bg: #fff !default;\n$pd-picker-bg: #fff !default;\n$pd-picker-border: #ccc !default;\n$pd-picker-border-bottom: #bbb !default;\n$pd-picker-shadow: rgba(0,0,0,.5) !default;\n$pd-th-color: #999 !default;\n$pd-day-color: #666 !default;\n$pd-day-bg: #f5f5f5 !default;\n$pd-day-hover-color: #fff !default;\n$pd-day-hover-bg: #ff8000 !default;\n$pd-day-today-color: #33aaff !default;\n$pd-day-selected-color: #fff !default;\n$pd-day-selected-bg: #33aaff !default;\n$pd-day-selected-shadow: #178fe5 !default;\n$pd-day-disabled-color: #999 !default;\n$pd-week-color: #999 !default;\n\n// Font\n$pd-font-family: \&#34;Helvetica Neue\&#34;, Helvetica, Arial, sans-serif !default;\n\n\n.pika-single {\n z-index: 9999;\n display: block;\n position: relative;\n color: $pd-text-color;\n background: $pd-picker-bg;\n border: 1px solid $pd-picker-border;\n border-bottom-color: $pd-picker-border-bottom;\n font-family: $pd-font-family;\n\n &amp;.is-hidden {\n display: none;\n }\n\n &amp;.is-bound {\n position: absolute;\n box-shadow: 0 5px 15px -5px $pd-picker-shadow;\n }\n}\n\n// clear child float (pika-lendar), using the famous micro clearfix hack\n// http://nicolasgallagher.com/micro-clearfix-hack/\n.pika-single {\n *zoom: 1;\n\n &amp;:before,\n &amp;:after {\n content: \&#34; \&#34;;\n display: table;\n }\n\n &amp;:after { clear: both }\n}\n\n.pika-lendar {\n float: left;\n width: 240px;\n margin: 8px;\n}\n\n.pika-title {\n position: relative;\n text-align: center;\n\n select {\n cursor: pointer;\n position: absolute;\n z-index: 9998;\n margin: 0;\n left: 0;\n top: 5px;\n filter: alpha(opacity=0);\n opacity: 0;\n }\n}\n\n.pika-label {\n display: inline-block;\n *display: inline;\n position: relative;\n z-index: 9999;\n overflow: hidden;\n margin: 0;\n padding: 5px 3px;\n font-size: 14px;\n line-height: 20px;\n font-weight: bold;\n color: $pd-title-color;\n background-color: $pd-title-bg;\n}\n\n.pika-prev,\n.pika-next {\n display: block;\n cursor: pointer;\n position: relative;\n outline: none;\n border: 0;\n padding: 0;\n width: 20px;\n height: 30px;\n text-indent: 20px; // hide text using text-indent trick, using width value (it&#39;s enough)\n white-space: nowrap;\n overflow: hidden;\n background-color: transparent;\n background-position: center center;\n background-repeat: no-repeat;\n background-size: 75% 75%;\n opacity: .5;\n *position: absolute;\n *top: 0;\n\n &amp;:hover {\n opacity: 1;\n }\n\n &amp;.is-disabled {\n cursor: default;\n opacity: .2;\n }\n}\n\n.pika-prev,\n.is-rtl .pika-next {\n float: left;\n background-image: url(&#39;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg==&#39;);\n *left: 0;\n}\n\n.pika-next,\n.is-rtl .pika-prev {\n float: right;\n background-image: url(&#39;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII=&#39;);\n *right: 0;\n}\n\n.pika-select {\n display: inline-block;\n *display: inline;\n}\n\n.pika-table {\n width: 100%;\n border-collapse: collapse;\n border-spacing: 0;\n border: 0;\n\n th,\n td {\n width: 14.285714285714286%;\n padding: 0;\n }\n\n th {\n color: $pd-th-color;\n font-size: 12px;\n line-height: 25px;\n font-weight: bold;\n text-align: center;\n }\n\n abbr {\n border-bottom: none;\n cursor: help;\n }\n}\n\n.pika-button {\n cursor: pointer;\n display: block;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n outline: none;\n border: 0;\n margin: 0;\n width: 100%;\n padding: 5px;\n color: $pd-day-color;\n font-size: 12px;\n line-height: 15px;\n text-align: right;\n background: $pd-day-bg;\n\n .is-today &amp; {\n color: $pd-day-today-color;\n font-weight: bold;\n }\n\n .is-selected &amp; {\n color: $pd-day-selected-color;\n font-weight: bold;\n background: $pd-day-selected-bg;\n box-shadow: inset 0 1px 3px $pd-day-selected-shadow;\n border-radius: 3px;\n }\n\n .is-disabled &amp;,\n .is-outside-current-month &amp; { \n color: $pd-day-disabled-color;\n opacity: .3;\n }\n\n .is-disabled &amp; {\n pointer-events: none;\n cursor: default;\n }\n\n &amp;:hover {\n color: $pd-day-hover-color;\n background: $pd-day-hover-bg;\n box-shadow: none;\n border-radius: 3px;\n }\n\n .is-selection-disabled {\n pointer-events: none;\n cursor: default;\n }\n}\n\n.pika-week {\n font-size: 11px;\n color: $pd-week-color;\n}\n\n.is-inrange .pika-button {\n background: #D5E9F7;\n}\n\n.is-startrange .pika-button {\n color: #fff;\n background: #6CB31D;\n box-shadow: none;\n border-radius: 3px;\n}\n\n.is-endrange .pika-button {\n color: #fff;\n background: #33aaff;\n box-shadow: none;\n border-radius: 3px;\n}&#34;),</pre></code></td></tr><tr><td>25</td><td><code><pre> }</pre></code></td></tr><tr><td>26</td><td><code><pre> file5 := &amp;embedded.EmbeddedFile{</pre></code></td></tr><tr><td>27</td><td><code><pre> Filename: &#34;variables.scss&#34;,</pre></code></td></tr><tr><td>28</td><td><code><pre> FileModTime: time.Unix(1537299527, 0),</pre></code></td></tr><tr><td>29</td><td><code><pre> Content: string(&#34;/*!\n * Statup\n * Copyright (C) 2018. Hunter Long and the project contributors\n * Written by Hunter Long &lt;info@socialeck.com&gt; and the project contributors\n *\n * https://github.com/hunterlong/statup\n *\n * The licenses for most software and other practical works are designed\n * to take away your freedom to share and change the works. By contrast,\n * the GNU General Public License is intended to guarantee your freedom to\n * share and change all versions of a program--to make sure it remains free\n * software for all its users.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.\n */\n\n/* Index Page */\n$background-color: #fcfcfc;\n$max-width: 860px;\n$title-color: #464646;\n$description-color: #939393;\n\n/* Status Container */\n$service-background: #ffffff;\n$service-border: 1px solid rgba(0,0,0,.125);\n$service-title: #444444;\n$service-stats-color: #4f4f4f;\n$service-description-color: #fff;\n$service-stats-size: 2.3rem;\n\n/* Button Colors */\n$success-color: #47d337;\n$danger-color: #dd3545;\n$primary-color: #3e9bff;\n\n/* Footer Settings */\n$footer-text-color: #8d8d8d;\n$nav-tab-color: #13a00d;\n$footer-display: block;\n\n/* Global Settings */\n$global-border-radius: 0.2rem;\n\n\n/* Mobile Settings */\n$sm-background-color: #fcfcfc;\n$sm-border-radius: 0rem;\n\n/* Mobile Service Container */\n$sm-service-background: #ffffff;\n$sm-padding: 0;\n$sm-service-stats-size: 1.5rem;\n&#34;),</pre></code></td></tr><tr><td>30</td><td><code><pre> }</pre></code></td></tr><tr><td>31</td><td><code><pre></pre></code></td></tr><tr><td>32</td><td><code><pre> // define dirs</pre></code></td></tr><tr><td>33</td><td><code><pre> dir1 := &amp;embedded.EmbeddedDir{</pre></code></td></tr><tr><td>34</td><td><code><pre> Filename: &#34;&#34;,</pre></code></td></tr><tr><td>35</td><td><code><pre> DirModTime: time.Unix(1538106377, 0),</pre></code></td></tr><tr><td>36</td><td><code><pre> ChildFiles: []*embedded.EmbeddedFile{</pre></code></td></tr><tr><td>37</td><td><code><pre> file2, // &#34;base.scss&#34;</pre></code></td></tr><tr><td>38</td><td><code><pre> file3, // &#34;mobile.scss&#34;</pre></code></td></tr><tr><td>39</td><td><code><pre> file4, // &#34;pikaday.scss&#34;</pre></code></td></tr><tr><td>40</td><td><code><pre> file5, // &#34;variables.scss&#34;</pre></code></td></tr><tr><td>41</td><td><code><pre></pre></code></td></tr><tr><td>42</td><td><code><pre> },</pre></code></td></tr><tr><td>43</td><td><code><pre> }</pre></code></td></tr><tr><td>44</td><td><code><pre></pre></code></td></tr><tr><td>45</td><td><code><pre> // link ChildDirs</pre></code></td></tr><tr><td>46</td><td><code><pre> dir1.ChildDirs = []*embedded.EmbeddedDir{}</pre></code></td></tr><tr><td>47</td><td><code><pre></pre></code></td></tr><tr><td>48</td><td><code><pre> // register embeddedBox</pre></code></td></tr><tr><td>49</td><td><code><pre> embedded.RegisterEmbeddedBox(`scss`, &amp;embedded.EmbeddedBox{</pre></code></td></tr><tr><td>50</td><td><code><pre> Name: `scss`,</pre></code></td></tr><tr><td>51</td><td><code><pre> Time: time.Unix(1538106377, 0),</pre></code></td></tr><tr><td>52</td><td><code><pre> Dirs: map[string]*embedded.EmbeddedDir{</pre></code></td></tr><tr><td>53</td><td><code><pre> &#34;&#34;: dir1,</pre></code></td></tr><tr><td>54</td><td><code><pre> },</pre></code></td></tr><tr><td>55</td><td><code><pre> Files: map[string]*embedded.EmbeddedFile{</pre></code></td></tr><tr><td>56</td><td><code><pre> &#34;base.scss&#34;: file2,</pre></code></td></tr><tr><td>57</td><td><code><pre> &#34;mobile.scss&#34;: file3,</pre></code></td></tr><tr><td>58</td><td><code><pre> &#34;pikaday.scss&#34;: file4,</pre></code></td></tr><tr><td>59</td><td><code><pre> &#34;variables.scss&#34;: file5,</pre></code></td></tr><tr><td>60</td><td><code><pre> },</pre></code></td></tr><tr><td>61</td><td><code><pre> })</pre></code></td></tr><tr><td>62</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_init">func init</div><div class="info"><a href="#s_fn_init">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/source/rice-box.go</code>:</p></div><table class="listing">
<tr><td>365</td><td><code><pre>func init() {</pre></code></td></tr><tr><td>366</td><td><code><pre></pre></code></td></tr><tr><td>367</td><td><code><pre> // define files</pre></code></td></tr><tr><td>368</td><td><code><pre> file18 := &amp;embedded.EmbeddedFile{</pre></code></td></tr><tr><td>369</td><td><code><pre> Filename: &#34;base.css&#34;,</pre></code></td></tr><tr><td>370</td><td><code><pre> FileModTime: time.Unix(1539641084, 0),</pre></code></td></tr><tr><td>371</td><td><code><pre> Content: string(&#34;@charset \&#34;UTF-8\&#34;;\n/*!\n * Statup\n * Copyright (C) 2018. Hunter Long and the project contributors\n * Written by Hunter Long &lt;info@socialeck.com&gt; and the project contributors\n *\n * https://github.com/hunterlong/statup\n *\n * The licenses for most software and other practical works are designed\n * to take away your freedom to share and change the works. By contrast,\n * the GNU General Public License is intended to guarantee your freedom to\n * share and change all versions of a program--to make sure it remains free\n * software for all its users.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.\n */\n/*!\n * Statup\n * Copyright (C) 2018. Hunter Long and the project contributors\n * Written by Hunter Long &lt;info@socialeck.com&gt; and the project contributors\n *\n * https://github.com/hunterlong/statup\n *\n * The licenses for most software and other practical works are designed\n * to take away your freedom to share and change the works. By contrast,\n * the GNU General Public License is intended to guarantee your freedom to\n * share and change all versions of a program--to make sure it remains free\n * software for all its users.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.\n */\n/* Index Page */\n/* Status Container */\n/* Button Colors */\n/* Footer Settings */\n/* Global Settings */\n/* Mobile Settings */\n/* Mobile Service Container */\nHTML, BODY {\n background-color: #fcfcfc; }\n\n.container {\n padding-top: 20px;\n padding-bottom: 20px;\n max-width: 860px; }\n\n.header-title {\n color: #464646; }\n\n.header-desc {\n color: #939393; }\n\n.btn {\n border-radius: 0.2rem; }\n\n.online_list .badge {\n margin-top: 0.2rem; }\n\n.navbar {\n margin-bottom: 30px; }\n\n.btn-sm {\n line-height: 1.3;\n font-size: 0.75rem; }\n\n.view_service_btn {\n position: absolute;\n bottom: -40px;\n right: 40px; }\n\n.service_lower_info {\n position: absolute;\n bottom: -40px;\n left: 40px;\n color: #d1ffca;\n font-size: 0.85rem; }\n\n.lg_number {\n font-size: 2.3rem;\n font-weight: bold;\n display: block;\n color: #4f4f4f; }\n\n.stats_area {\n text-align: center;\n color: #a5a5a5; }\n\n.lower_canvas {\n height: 3.4rem;\n width: 100%;\n background-color: #48d338;\n padding: 15px 10px;\n margin-left: 0px !important;\n margin-right: 0px !important; }\n\n.lower_canvas SPAN {\n font-size: 1rem;\n color: #fff; }\n\n.footer {\n text-decoration: none;\n margin-top: 20px; }\n\n.footer A {\n color: #8d8d8d;\n text-decoration: none; }\n\n.footer A:HOVER {\n color: #6d6d6d; }\n\n.badge {\n color: white;\n border-radius: 0.2rem; }\n\n.btn-group {\n height: 25px; }\n .btn-group A {\n padding: 0.1rem .75rem;\n font-size: 0.8rem; }\n\n.card-body .badge {\n color: #fff; }\n\n.nav-pills .nav-link {\n border-radius: 0.2rem; }\n\n.form-control {\n border-radius: 0.2rem; }\n\n.card {\n background-color: #ffffff;\n border: 1px solid rgba(0, 0, 0, 0.125); }\n\n.card-body {\n overflow: hidden; }\n\n.card-body H4 A {\n color: #444444;\n text-decoration: none; }\n\n.chart-container {\n position: relative;\n height: 170px;\n width: 100%; }\n\n.service-chart-container {\n position: relative;\n height: 400px;\n width: 100%; }\n\n.btn-primary {\n background-color: #3e9bff;\n border-color: #006fe6;\n color: white; }\n .btn-primary.dyn-dark {\n background-color: #32a825 !important;\n border-color: #2c9320 !important; }\n .btn-primary.dyn-light {\n background-color: #75de69 !important;\n border-color: #88e37e !important; }\n\n.btn-success {\n background-color: #47d337; }\n .btn-success.dyn-dark {\n background-color: #32a825 !important;\n border-color: #2c9320 !important; }\n .btn-success.dyn-light {\n background-color: #75de69 !important;\n border-color: #88e37e !important; }\n\n.btn-danger {\n background-color: #dd3545; }\n .btn-danger.dyn-dark {\n background-color: #b61f2d !important;\n border-color: #a01b28 !important; }\n .btn-danger.dyn-light {\n background-color: #e66975 !important;\n border-color: #e97f89 !important; }\n\n.bg-success {\n background-color: #47d337 !important; }\n\n.bg-danger {\n background-color: #dd3545 !important; }\n\n.bg-success .dyn-dark {\n background-color: #35b027 !important; }\n\n.bg-danger .dyn-dark {\n background-color: #bf202f !important; }\n\n.nav-pills .nav-link.active, .nav-pills .show &gt; .nav-link {\n background-color: #13a00d; }\n\n.nav-pills A {\n color: #424242; }\n\n.CodeMirror {\n /* Bootstrap Settings */\n box-sizing: border-box;\n margin: 0;\n font: inherit;\n overflow: auto;\n font-family: inherit;\n display: block;\n width: 100%;\n padding: 0px;\n font-size: 14px;\n line-height: 1.5;\n color: #555;\n background-color: #fff;\n background-image: none;\n border: 1px solid #ccc;\n border-radius: 4px;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n /* Code Mirror Settings */\n font-family: monospace;\n position: relative;\n overflow: hidden;\n height: 80vh; }\n\n.CodeMirror-focused {\n /* Bootstrap Settings */\n border-color: #66afe9;\n outline: 0;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);\n transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; }\n\n.switch {\n font-size: 1rem;\n position: relative; }\n\n.switch input {\n position: absolute;\n height: 1px;\n width: 1px;\n background: none;\n border: 0;\n clip: rect(0 0 0 0);\n clip-path: inset(50%);\n overflow: hidden;\n padding: 0; }\n\n.switch input + label {\n position: relative;\n min-width: calc(calc(2.375rem * .8) * 2);\n border-radius: calc(2.375rem * .8);\n height: calc(2.375rem * .8);\n line-height: calc(2.375rem * .8);\n display: inline-block;\n cursor: pointer;\n outline: none;\n user-select: none;\n vertical-align: middle;\n text-indent: calc(calc(calc(2.375rem * .8) * 2) + .5rem); }\n\n.switch input + label::before,\n.switch input + label::after {\n content: &#39;&#39;;\n position: absolute;\n top: 0;\n left: 0;\n width: calc(calc(2.375rem * .8) * 2);\n bottom: 0;\n display: block; }\n\n.switch input + label::before {\n right: 0;\n background-color: #dee2e6;\n border-radius: calc(2.375rem * .8);\n transition: 0.2s all; }\n\n.switch input + label::after {\n top: 2px;\n left: 2px;\n width: calc(calc(2.375rem * .8) - calc(2px * 2));\n height: calc(calc(2.375rem * .8) - calc(2px * 2));\n border-radius: 50%;\n background-color: white;\n transition: 0.2s all; }\n\n.switch input:checked + label::before {\n background-color: #08d; }\n\n.switch input:checked + label::after {\n margin-left: calc(2.375rem * .8); }\n\n.switch input:focus + label::before {\n outline: none;\n box-shadow: 0 0 0 0.2rem rgba(0, 136, 221, 0.25); }\n\n.switch input:disabled + label {\n color: #868e96;\n cursor: not-allowed; }\n\n.switch input:disabled + label::before {\n background-color: #e9ecef; }\n\n.switch.switch-sm {\n font-size: 0.875rem; }\n\n.switch.switch-sm input + label {\n min-width: calc(calc(1.9375rem * .8) * 2);\n height: calc(1.9375rem * .8);\n line-height: calc(1.9375rem * .8);\n text-indent: calc(calc(calc(1.9375rem * .8) * 2) + .5rem); }\n\n.switch.switch-sm input + label::before {\n width: calc(calc(1.9375rem * .8) * 2); }\n\n.switch.switch-sm input + label::after {\n width: calc(calc(1.9375rem * .8) - calc(2px * 2));\n height: calc(calc(1.9375rem * .8) - calc(2px * 2)); }\n\n.switch.switch-sm input:checked + label::after {\n margin-left: calc(1.9375rem * .8); }\n\n.switch.switch-lg {\n font-size: 1.25rem; }\n\n.switch.switch-lg input + label {\n min-width: calc(calc(3rem * .8) * 2);\n height: calc(3rem * .8);\n line-height: calc(3rem * .8);\n text-indent: calc(calc(calc(3rem * .8) * 2) + .5rem); }\n\n.switch.switch-lg input + label::before {\n width: calc(calc(3rem * .8) * 2); }\n\n.switch.switch-lg input + label::after {\n width: calc(calc(3rem * .8) - calc(2px * 2));\n height: calc(calc(3rem * .8) - calc(2px * 2)); }\n\n.switch.switch-lg input:checked + label::after {\n margin-left: calc(3rem * .8); }\n\n.switch + .switch {\n margin-left: 1rem; }\n\n@keyframes pulse_animation {\n 0% {\n transform: scale(1); }\n 30% {\n transform: scale(1); }\n 40% {\n transform: scale(1.02); }\n 50% {\n transform: scale(1); }\n 60% {\n transform: scale(1); }\n 70% {\n transform: scale(1.05); }\n 80% {\n transform: scale(1); }\n 100% {\n transform: scale(1); } }\n.pulse {\n animation-name: pulse_animation;\n animation-duration: 1500ms;\n transform-origin: 70% 70%;\n animation-iteration-count: infinite;\n animation-timing-function: linear; }\n\n@keyframes glow-grow {\n 0% {\n opacity: 0;\n transform: scale(1); }\n 80% {\n opacity: 1; }\n 100% {\n transform: scale(2);\n opacity: 0; } }\n.pulse-glow {\n animation-name: glow-grown;\n animation-duration: 100ms;\n transform-origin: 70% 30%;\n animation-iteration-count: infinite;\n animation-timing-function: linear; }\n\n.pulse-glow:before,\n.pulse-glow:after {\n position: absolute;\n content: &#39;&#39;;\n height: 0.5rem;\n width: 1.75rem;\n top: 1.2rem;\n right: 2.15rem;\n border-radius: 0;\n box-shadow: 0 0 7px #47d337;\n animation: glow-grow 2s ease-out infinite; }\n\n.sortable_drag {\n background-color: #0000000f; }\n\n.drag_icon {\n cursor: move;\n /* fallback if grab cursor is unsupported */\n cursor: grab;\n cursor: -moz-grab;\n cursor: -webkit-grab;\n width: 25px;\n height: 25px;\n display: inline-block;\n margin-right: 5px;\n margin-left: -10px;\n text-align: center;\n color: #b1b1b1; }\n\n/* (Optional) Apply a \&#34;closed-hand\&#34; cursor during drag operation. */\n.drag_icon:active {\n cursor: grabbing;\n cursor: -moz-grabbing;\n cursor: -webkit-grabbing; }\n\n.switch_btn {\n float: right;\n margin: -1px 0px 0px 0px;\n display: block; }\n\n#start_container {\n position: absolute;\n z-index: 99999;\n margin-top: 20px; }\n\n#end_container {\n position: absolute;\n z-index: 99999;\n margin-top: 20px;\n right: 0; }\n\n.pointer {\n cursor: pointer; }\n\n/*!\n * Pikaday\n * Copyright © 2014 David Bushell | BSD &amp; MIT license | http://dbushell.com/\n */\n.pika-single {\n z-index: 9999;\n display: block;\n position: relative;\n color: #333;\n background: #fff;\n border: 1px solid #ccc;\n border-bottom-color: #bbb;\n font-family: \&#34;Helvetica Neue\&#34;, Helvetica, Arial, sans-serif; }\n .pika-single.is-hidden {\n display: none; }\n .pika-single.is-bound {\n position: absolute;\n box-shadow: 0 5px 15px -5px rgba(0, 0, 0, 0.5); }\n\n.pika-single {\n *zoom: 1; }\n .pika-single:before, .pika-single:after {\n content: \&#34; \&#34;;\n display: table; }\n .pika-single:after {\n clear: both; }\n\n.pika-lendar {\n float: left;\n width: 240px;\n margin: 8px; }\n\n.pika-title {\n position: relative;\n text-align: center; }\n .pika-title select {\n cursor: pointer;\n position: absolute;\n z-index: 9998;\n margin: 0;\n left: 0;\n top: 5px;\n filter: alpha(opacity=0);\n opacity: 0; }\n\n.pika-label {\n display: inline-block;\n *display: inline;\n position: relative;\n z-index: 9999;\n overflow: hidden;\n margin: 0;\n padding: 5px 3px;\n font-size: 14px;\n line-height: 20px;\n font-weight: bold;\n color: #333;\n background-color: #fff; }\n\n.pika-prev,\n.pika-next {\n display: block;\n cursor: pointer;\n position: relative;\n outline: none;\n border: 0;\n padding: 0;\n width: 20px;\n height: 30px;\n text-indent: 20px;\n white-space: nowrap;\n overflow: hidden;\n background-color: transparent;\n background-position: center center;\n background-repeat: no-repeat;\n background-size: 75% 75%;\n opacity: .5;\n *position: absolute;\n *top: 0; }\n .pika-prev:hover,\n .pika-next:hover {\n opacity: 1; }\n .pika-prev.is-disabled,\n .pika-next.is-disabled {\n cursor: default;\n opacity: .2; }\n\n.pika-prev,\n.is-rtl .pika-next {\n float: left;\n background-image: url(\&#34;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg==\&#34;);\n *left: 0; }\n\n.pika-next,\n.is-rtl .pika-prev {\n float: right;\n background-image: url(\&#34;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII=\&#34;);\n *right: 0; }\n\n.pika-select {\n display: inline-block;\n *display: inline; }\n\n.pika-table {\n width: 100%;\n border-collapse: collapse;\n border-spacing: 0;\n border: 0; }\n .pika-table th,\n .pika-table td {\n width: 14.285714285714286%;\n padding: 0; }\n .pika-table th {\n color: #999;\n font-size: 12px;\n line-height: 25px;\n font-weight: bold;\n text-align: center; }\n .pika-table abbr {\n border-bottom: none;\n cursor: help; }\n\n.pika-button {\n cursor: pointer;\n display: block;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n outline: none;\n border: 0;\n margin: 0;\n width: 100%;\n padding: 5px;\n color: #666;\n font-size: 12px;\n line-height: 15px;\n text-align: right;\n background: #f5f5f5; }\n .is-today .pika-button {\n color: #33aaff;\n font-weight: bold; }\n .is-selected .pika-button {\n color: #fff;\n font-weight: bold;\n background: #33aaff;\n box-shadow: inset 0 1px 3px #178fe5;\n border-radius: 3px; }\n .is-disabled .pika-button, .is-outside-current-month .pika-button {\n color: #999;\n opacity: .3; }\n .is-disabled .pika-button {\n pointer-events: none;\n cursor: default; }\n .pika-button:hover {\n color: #fff;\n background: #ff8000;\n box-shadow: none;\n border-radius: 3px; }\n .pika-button .is-selection-disabled {\n pointer-events: none;\n cursor: default; }\n\n.pika-week {\n font-size: 11px;\n color: #999; }\n\n.is-inrange .pika-button {\n background: #D5E9F7; }\n\n.is-startrange .pika-button {\n color: #fff;\n background: #6CB31D;\n box-shadow: none;\n border-radius: 3px; }\n\n.is-endrange .pika-button {\n color: #fff;\n background: #33aaff;\n box-shadow: none;\n border-radius: 3px; }\n\n/*!\n * Statup\n * Copyright (C) 2018. Hunter Long and the project contributors\n * Written by Hunter Long &lt;info@socialeck.com&gt; and the project contributors\n *\n * https://github.com/hunterlong/statup\n *\n * The licenses for most software and other practical works are designed\n * to take away your freedom to share and change the works. By contrast,\n * the GNU General Public License is intended to guarantee your freedom to\n * share and change all versions of a program--to make sure it remains free\n * software for all its users.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.\n */\n@media (max-width: 767px) {\n HTML, BODY {\n background-color: #fcfcfc; }\n\n .sm-container {\n margin-top: 40px !important;\n padding: 0 !important; }\n\n .list-group-item H5 {\n font-size: 0.9rem; }\n\n .container {\n padding: 0 !important; }\n\n .navbar {\n margin-left: 0px;\n margin-top: 0px;\n width: 100%;\n margin-bottom: 0; }\n\n .btn-sm {\n line-height: 0.9rem;\n font-size: 0.65rem; }\n\n .full-col-12 {\n padding-left: 0px;\n padding-right: 0px; }\n\n .card {\n border: 0;\n border-radius: 0rem;\n padding: 0;\n background-color: #ffffff; }\n\n .card-body {\n font-size: 6pt;\n padding: 5px 5px; }\n\n .lg_number {\n font-size: 7.8vw; }\n\n .stats_area {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important; }\n\n .stats_area .col-4 {\n padding-left: 0;\n padding-right: 0;\n font-size: 0.6rem; }\n\n .list-group-item {\n border-top: 1px solid #e4e4e4;\n border: 0px; }\n\n .list-group-item:first-child {\n border-top-left-radius: 0;\n border-top-right-radius: 0; }\n\n .list-group-item:last-child {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0; }\n\n .list-group-item P {\n font-size: 0.7rem; }\n\n .service-chart-container {\n height: 200px; } }\n\n/*# sourceMappingURL=base.css.map */\n&#34;),</pre></code></td></tr><tr><td>372</td><td><code><pre> }</pre></code></td></tr><tr><td>373</td><td><code><pre> file19 := &amp;embedded.EmbeddedFile{</pre></code></td></tr><tr><td>374</td><td><code><pre> Filename: &#34;base.css.map&#34;,</pre></code></td></tr><tr><td>375</td><td><code><pre> FileModTime: time.Unix(1539641085, 0),</pre></code></td></tr><tr><td>376</td><td><code><pre> Content: string(&#34;{\n\&#34;version\&#34;: 3,\n\&#34;mappings\&#34;: \&#34;;AAAA;;;;;;;;;;;;;;;GAeG;ACfH;;;;;;;;;;;;;;;GAeG;AAEH,wBAAwB;AAMxB,2BAA2B;AAQ3B,2BAA2B;AAK3B,yBAAyB;AAKzB,uBAAuB;AAIvB,yBAAyB;AAIzB,kCAAkC;AD7BlC,UAAU;EACN,gBAAgB,ECHD,OAAO;;ADM1B,UAAW;EACP,WAAW,EAAE,IAAI;EACjB,cAAc,EAAE,IAAI;EACpB,SAAS,ECRD,KAAK;;ADWjB,aAAc;EACV,KAAK,ECXK,OAAO;;ADcrB,YAAa;EACT,KAAK,ECdW,OAAO;;ADiB3B,IAAK;EACD,aAAa,ECGM,MAAM;;ADA7B,mBAAoB;EAChB,UAAU,EAAE,MAAM;;AAGtB,OAAQ;EACJ,aAAa,EAAE,IAAI;;AAGvB,OAAQ;EACJ,WAAW,EAAE,GAAG;EAChB,SAAS,EAAE,OAAO;;AAGtB,iBAAkB;EACd,QAAQ,EAAE,QAAQ;EAClB,MAAM,EAAE,KAAK;EACb,KAAK,EAAE,IAAI;;AAGf,mBAAoB;EAChB,QAAQ,EAAE,QAAQ;EAClB,MAAM,EAAE,KAAK;EACb,IAAI,EAAE,IAAI;EACV,KAAK,EAAE,OAAO;EACd,SAAS,EAAE,OAAO;;AAGtB,UAAW;EACP,SAAS,ECzCQ,MAAM;ED0CvB,WAAW,EAAE,IAAI;EACjB,OAAO,EAAE,KAAK;EACd,KAAK,EC9Ca,OAAO;;ADiD7B,WAAY;EACR,UAAU,EAAE,MAAM;EAClB,KAAK,EAAE,OAAO;;AAGlB,aAAc;EACV,MAAM,EAAE,MAAM;EACd,KAAK,EAAE,IAAI;EACX,gBAAgB,EAAE,OAAO;EACzB,OAAO,EAAE,SAAS;EAClB,WAAW,EAAE,cAAc;EAC3B,YAAY,EAAE,cAAc;;AAGhC,kBAAmB;EACf,SAAS,EAAE,IAAI;EACf,KAAK,EChEmB,IAAI;;ADmEhC,OAAQ;EACJ,eAAe,EAAE,IAAI;EACrB,UAAU,EAAE,IAAI;;AAGpB,SAAU;EACN,KAAK,EChEW,OAAO;EDiEvB,eAAe,EAAE,IAAI;;AAGzB,eAAgB;EACZ,KAAK,EAAE,OAAO;;AAGlB,MAAO;EACH,KAAK,EAAE,KAAK;EACZ,aAAa,ECrEM,MAAM;;ADwE7B,UAAW;EACP,MAAM,EAAE,IAAI;EAEZ,YAAI;IACA,OAAO,EAAE,aAAa;IACtB,SAAS,EAAE,MAAM;;AAIzB,iBAAkB;EACd,KAAK,EAAE,IAAI;;AAGf,oBAAqB;EACjB,aAAa,ECtFM,MAAM;;ADyF7B,aAAc;EACV,aAAa,EC1FM,MAAM;;AD6F7B,KAAM;EACF,gBAAgB,EChHC,OAAO;EDiHxB,MAAM,EChHO,8BAA0B;;ADmH3C,UAAW;EACP,QAAQ,EAAE,MAAM;;AAGpB,eAAgB;EACZ,KAAK,ECvHO,OAAO;EDwHnB,eAAe,EAAE,IAAI;;AAGzB,gBAAiB;EACf,QAAQ,EAAE,QAAQ;EAClB,MAAM,EAAE,KAAK;EACb,KAAK,EAAE,IAAI;;AAGb,wBAAyB;EACvB,QAAQ,EAAE,QAAQ;EAClB,MAAM,EAAE,KAAK;EACb,KAAK,EAAE,IAAI;;AAkCb,YAAa;EACT,gBAAgB,EC/JJ,OAAO;EDgKnB,YAAY,EAAE,OAA2B;EACzC,KAAK,EAAE,KAAK;EAdZ,qBAAW;IACP,gBAAgB,EAAE,kBAA8B;IAChD,YAAY,EAAE,kBAA8B;EAEhD,sBAAY;IACR,gBAAgB,EAAE,kBAA+B;IACjD,YAAY,EAAE,kBAA+B;;AAYrD,YAAa;EACT,gBAAgB,ECxKJ,OAAO;EDqJnB,qBAAW;IACP,gBAAgB,EAAE,kBAA8B;IAChD,YAAY,EAAE,kBAA8B;EAEhD,sBAAY;IACR,gBAAgB,EAAE,kBAA+B;IACjD,YAAY,EAAE,kBAA+B;;AAiBrD,WAAY;EACR,gBAAgB,EC5KL,OAAO;EDoJlB,oBAAW;IACP,gBAAgB,EAAE,kBAA8B;IAChD,YAAY,EAAE,kBAA8B;EAEhD,qBAAY;IACR,gBAAgB,EAAE,kBAA+B;IACjD,YAAY,EAAE,kBAA+B;;AAsBrD,WAAY;EACR,gBAAgB,EAAE,kBAAyB;;AAG/C,UAAW;EACP,gBAAgB,EAAE,kBAAwB;;AAG9C,qBAAsB;EAClB,gBAAgB,EAAE,kBAAsC;;AAG5D,oBAAqB;EACjB,gBAAgB,EAAE,kBAAqC;;AAG3D,yDAAwD;EACpD,gBAAgB,EC5LJ,OAAO;;AD+LvB,YAAa;EACT,KAAK,EAAE,OAAO;;AAIlB,WAAY;EACV,wBAAwB;EACxB,UAAU,EAAE,UAAU;EACtB,MAAM,EAAE,CAAC;EACT,IAAI,EAAE,OAAO;EACb,QAAQ,EAAE,IAAI;EACd,WAAW,EAAE,OAAO;EACpB,OAAO,EAAE,KAAK;EACd,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,GAAG;EACZ,SAAS,EAAE,IAAI;EACf,WAAW,EAAE,GAAG;EAChB,KAAK,EAAE,IAAI;EACX,gBAAgB,EAAE,IAAI;EACtB,gBAAgB,EAAE,IAAI;EACtB,MAAM,EAAE,cAAc;EACtB,aAAa,EAAE,GAAG;EAClB,UAAU,EAAE,oCAAmC;EAC/C,UAAU,EAAE,0DAA0D;EACtE,0BAA0B;EAC1B,WAAW,EAAE,SAAS;EACtB,QAAQ,EAAE,QAAQ;EAClB,QAAQ,EAAE,MAAM;EAChB,MAAM,EAAC,IAAI;;AAGb,mBAAoB;EAClB,wBAAwB;EACxB,YAAY,EAAE,OAAO;EACrB,OAAO,EAAE,CAAC;EACV,UAAU,EAAE,sEAAiE;EAC7E,UAAU,EAAE,0DAA0D;;AAGxE,OAAQ;EACN,SAAS,EAAE,IAAI;EACf,QAAQ,EAAE,QAAQ;;AAEpB,aAAc;EACZ,QAAQ,EAAE,QAAQ;EAClB,MAAM,EAAE,GAAG;EACX,KAAK,EAAE,GAAG;EACV,UAAU,EAAE,IAAI;EAChB,MAAM,EAAE,CAAC;EACT,IAAI,EAAE,aAAa;EACnB,SAAS,EAAE,UAAU;EACrB,QAAQ,EAAE,MAAM;EAChB,OAAO,EAAE,CAAC;;AAEZ,qBAAsB;EACpB,QAAQ,EAAE,QAAQ;EAClB,SAAS,EAAE,6BAA6B;EACxC,aAAa,EAAE,mBAAmB;EAClC,MAAM,EAAE,mBAAmB;EAC3B,WAAW,EAAE,mBAAmB;EAChC,OAAO,EAAE,YAAY;EACrB,MAAM,EAAE,OAAO;EACf,OAAO,EAAE,IAAI;EACb,WAAW,EAAE,IAAI;EACjB,cAAc,EAAE,MAAM;EACtB,WAAW,EAAE,2CAA2C;;AAE1D;4BAC6B;EAC3B,OAAO,EAAE,EAAE;EACX,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,CAAC;EACN,IAAI,EAAE,CAAC;EACP,KAAK,EAAE,6BAA6B;EACpC,MAAM,EAAE,CAAC;EACT,OAAO,EAAE,KAAK;;AAEhB,6BAA8B;EAC5B,KAAK,EAAE,CAAC;EACR,gBAAgB,EAAE,OAAO;EACzB,aAAa,EAAE,mBAAmB;EAClC,UAAU,EAAE,QAAQ;;AAEtB,4BAA6B;EAC3B,GAAG,EAAE,GAAG;EACR,IAAI,EAAE,GAAG;EACT,KAAK,EAAE,yCAAyC;EAChD,MAAM,EAAE,yCAAyC;EACjD,aAAa,EAAE,GAAG;EAClB,gBAAgB,EAAE,KAAK;EACvB,UAAU,EAAE,QAAQ;;AAEtB,qCAAsC;EACpC,gBAAgB,EAAE,IAAI;;AAExB,oCAAqC;EACnC,WAAW,EAAE,mBAAmB;;AAElC,mCAAoC;EAClC,OAAO,EAAE,IAAI;EACb,UAAU,EAAE,oCAAoC;;AAElD,8BAA+B;EAC7B,KAAK,EAAE,OAAO;EACd,MAAM,EAAE,WAAW;;AAErB,sCAAuC;EACrC,gBAAgB,EAAE,OAAO;;AAE3B,iBAAkB;EAChB,SAAS,EAAE,QAAQ;;AAErB,+BAAgC;EAC9B,SAAS,EAAE,8BAA8B;EACzC,MAAM,EAAE,oBAAoB;EAC5B,WAAW,EAAE,oBAAoB;EACjC,WAAW,EAAE,4CAA4C;;AAE3D,uCAAwC;EACtC,KAAK,EAAE,8BAA8B;;AAEvC,sCAAuC;EACrC,KAAK,EAAE,0CAA0C;EACjD,MAAM,EAAE,0CAA0C;;AAEpD,8CAA+C;EAC7C,WAAW,EAAE,oBAAoB;;AAEnC,iBAAkB;EAChB,SAAS,EAAE,OAAO;;AAEpB,+BAAgC;EAC9B,SAAS,EAAE,yBAAyB;EACpC,MAAM,EAAE,eAAe;EACvB,WAAW,EAAE,eAAe;EAC5B,WAAW,EAAE,uCAAuC;;AAEtD,uCAAwC;EACtC,KAAK,EAAE,yBAAyB;;AAElC,sCAAuC;EACrC,KAAK,EAAE,qCAAqC;EAC5C,MAAM,EAAE,qCAAqC;;AAE/C,8CAA+C;EAC7C,WAAW,EAAE,eAAe;;AAE9B,iBAAkB;EAChB,WAAW,EAAE,IAAI;;AAInB,0BASC;EARG,EAAG;IAAE,SAAS,EAAE,QAAQ;EACxB,GAAI;IAAE,SAAS,EAAE,QAAQ;EACzB,GAAI;IAAE,SAAS,EAAE,WAAW;EAC5B,GAAI;IAAE,SAAS,EAAE,QAAQ;EACzB,GAAI;IAAE,SAAS,EAAE,QAAQ;EACzB,GAAI;IAAE,SAAS,EAAE,WAAW;EAC5B,GAAI;IAAE,SAAS,EAAE,QAAQ;EACzB,IAAK;IAAE,SAAS,EAAE,QAAQ;AAG9B,MAAO;EACH,cAAc,EAAE,eAAe;EAC/B,kBAAkB,EAAE,MAAM;EAC1B,gBAAgB,EAAC,OAAO;EACxB,yBAAyB,EAAE,QAAQ;EACnC,yBAAyB,EAAE,MAAM;;AAIrC,oBAYC;EAXC,EAAG;IACD,OAAO,EAAE,CAAC;IACV,SAAS,EAAE,QAAQ;EAErB,GAAI;IACF,OAAO,EAAE,CAAC;EAEZ,IAAK;IACH,SAAS,EAAE,QAAQ;IACnB,OAAO,EAAE,CAAC;AAGd,WAAY;EACR,cAAc,EAAE,UAAU;EAC1B,kBAAkB,EAAE,KAAK;EACzB,gBAAgB,EAAE,OAAO;EACzB,yBAAyB,EAAE,QAAQ;EACnC,yBAAyB,EAAE,MAAM;;AAGrC;iBACkB;EACd,QAAQ,EAAE,QAAQ;EAClB,OAAO,EAAE,EAAE;EACX,MAAM,EAAE,MAAM;EACd,KAAK,EAAE,OAAO;EACd,GAAG,EAAE,MAAM;EACX,KAAK,EAAE,OAAO;EACd,aAAa,EAAE,CAAC;EAChB,UAAU,EAAE,eAAe;EAC3B,SAAS,EAAE,8BAA8B;;AAG7C,cAAe;EACb,gBAAgB,EAAE,SAAS;;AAG7B,UAAW;EACT,MAAM,EAAE,IAAI;EAAE,4CAA4C;EAC1D,MAAM,EAAE,IAAI;EACZ,MAAM,EAAE,SAAS;EACjB,MAAM,EAAE,YAAY;EACpB,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,OAAO,EAAE,YAAY;EACrB,YAAY,EAAE,GAAG;EACjB,WAAW,EAAE,KAAK;EAClB,UAAU,EAAE,MAAM;EAClB,KAAK,EAAE,OAAO;;AAGhB,oEAAoE;AACpE,iBAAkB;EAChB,MAAM,EAAE,QAAQ;EAChB,MAAM,EAAE,aAAa;EACrB,MAAM,EAAE,gBAAgB;;AAG1B,WAAY;EACV,KAAK,EAAE,KAAK;EACZ,MAAM,EAAE,gBAAgB;EACxB,OAAO,EAAE,KAAK;;AAGhB,gBAAiB;EACf,QAAQ,EAAE,QAAQ;EAClB,OAAO,EAAE,KAAK;EACd,UAAU,EAAE,IAAI;;AAGlB,cAAe;EACb,QAAQ,EAAE,QAAQ;EAClB,OAAO,EAAE,KAAK;EACd,UAAU,EAAE,IAAI;EAChB,KAAK,EAAE,CAAC;;AAGV,QAAS;EACP,MAAM,EAAE,OAAO;;AEhejB;;;GAGG;AA8BH,YAAa;EACT,OAAO,EAAE,IAAI;EACb,OAAO,EAAE,KAAK;EACd,QAAQ,EAAE,QAAQ;EAClB,KAAK,EA3BO,IAAI;EA4BhB,UAAU,EAzBC,IAAI;EA0Bf,MAAM,EAAE,cAA2B;EACnC,mBAAmB,EAzBG,IAAI;EA0B1B,WAAW,EAXE,8CAA8C;EAa3D,sBAAY;IACR,OAAO,EAAE,IAAI;EAGjB,qBAAW;IACP,QAAQ,EAAE,QAAQ;IAClB,UAAU,EAAE,kCAAiC;;AAMrD,YAAa;EACT,KAAK,EAAE,CAAC;EAER,uCACQ;IACJ,OAAO,EAAE,GAAG;IACZ,OAAO,EAAE,KAAK;EAGlB,kBAAQ;IAAE,KAAK,EAAE,IAAI;;AAGzB,YAAa;EACT,KAAK,EAAE,IAAI;EACX,KAAK,EAAE,KAAK;EACZ,MAAM,EAAE,GAAG;;AAGf,WAAY;EACR,QAAQ,EAAE,QAAQ;EAClB,UAAU,EAAE,MAAM;EAElB,kBAAO;IACH,MAAM,EAAE,OAAO;IACf,QAAQ,EAAE,QAAQ;IAClB,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,CAAC;IACT,IAAI,EAAE,CAAC;IACP,GAAG,EAAE,GAAG;IACR,MAAM,EAAE,gBAAgB;IACxB,OAAO,EAAE,CAAC;;AAIlB,WAAY;EACR,OAAO,EAAE,YAAY;EACrB,QAAQ,EAAE,MAAM;EAChB,QAAQ,EAAE,QAAQ;EAClB,OAAO,EAAE,IAAI;EACb,QAAQ,EAAE,MAAM;EAChB,MAAM,EAAE,CAAC;EACT,OAAO,EAAE,OAAO;EAChB,SAAS,EAAE,IAAI;EACf,WAAW,EAAE,IAAI;EACjB,WAAW,EAAE,IAAI;EACjB,KAAK,EAzFQ,IAAI;EA0FjB,gBAAgB,EAzFN,IAAI;;AA4FlB;UACW;EACP,OAAO,EAAE,KAAK;EACd,MAAM,EAAE,OAAO;EACf,QAAQ,EAAE,QAAQ;EAClB,OAAO,EAAE,IAAI;EACb,MAAM,EAAE,CAAC;EACT,OAAO,EAAE,CAAC;EACV,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,WAAW,EAAE,IAAI;EACjB,WAAW,EAAE,MAAM;EACnB,QAAQ,EAAE,MAAM;EAChB,gBAAgB,EAAE,WAAW;EAC7B,mBAAmB,EAAE,aAAa;EAClC,iBAAiB,EAAE,SAAS;EAC5B,eAAe,EAAE,OAAO;EACxB,OAAO,EAAE,EAAE;EACX,SAAS,EAAE,QAAQ;EACnB,IAAI,EAAE,CAAC;EAEP;kBAAQ;IACJ,OAAO,EAAE,CAAC;EAGd;wBAAc;IACV,MAAM,EAAE,OAAO;IACf,OAAO,EAAE,EAAE;;AAInB;kBACmB;EACf,KAAK,EAAE,IAAI;EACX,gBAAgB,EAAE,yNAAyN;EAC3O,KAAK,EAAE,CAAC;;AAGZ;kBACmB;EACf,KAAK,EAAE,KAAK;EACZ,gBAAgB,EAAE,yNAAyN;EAC3O,MAAM,EAAE,CAAC;;AAGb,YAAa;EACT,OAAO,EAAE,YAAY;EACrB,QAAQ,EAAE,MAAM;;AAGpB,WAAY;EACR,KAAK,EAAE,IAAI;EACX,eAAe,EAAE,QAAQ;EACzB,cAAc,EAAE,CAAC;EACjB,MAAM,EAAE,CAAC;EAET;gBACG;IACC,KAAK,EAAE,mBAAmB;IAC1B,OAAO,EAAE,CAAC;EAGd,cAAG;IACC,KAAK,EAtJC,IAAI;IAuJV,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,IAAI;IACjB,WAAW,EAAE,IAAI;IACjB,UAAU,EAAE,MAAM;EAGtB,gBAAK;IACD,aAAa,EAAE,IAAI;IACnB,MAAM,EAAE,IAAI;;AAIpB,YAAa;EACT,MAAM,EAAE,OAAO;EACf,OAAO,EAAE,KAAK;EACd,eAAe,EAAE,UAAU;EAC3B,UAAU,EAAE,UAAU;EACtB,OAAO,EAAE,IAAI;EACb,MAAM,EAAE,CAAC;EACT,MAAM,EAAE,CAAC;EACT,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,GAAG;EACZ,KAAK,EA5KM,IAAI;EA6Kf,SAAS,EAAE,IAAI;EACf,WAAW,EAAE,IAAI;EACjB,UAAU,EAAE,KAAK;EACjB,UAAU,EA/KF,OAAO;EAiLf,sBAAY;IACR,KAAK,EA/KQ,OAAO;IAgLpB,WAAW,EAAE,IAAI;EAGrB,yBAAe;IACX,KAAK,EAnLW,IAAI;IAoLpB,WAAW,EAAE,IAAI;IACjB,UAAU,EApLG,OAAO;IAqLpB,UAAU,EAAE,uBAAuC;IACnD,aAAa,EAAE,GAAG;EAGtB,iEAC4B;IACxB,KAAK,EAzLW,IAAI;IA0LpB,OAAO,EAAE,EAAE;EAGf,yBAAe;IACX,cAAc,EAAE,IAAI;IACpB,MAAM,EAAE,OAAO;EAGnB,kBAAQ;IACJ,KAAK,EAzMQ,IAAI;IA0MjB,UAAU,EAzMA,OAAO;IA0MjB,UAAU,EAAE,IAAI;IAChB,aAAa,EAAE,GAAG;EAGtB,mCAAuB;IACnB,cAAc,EAAE,IAAI;IACpB,MAAM,EAAE,OAAO;;AAIvB,UAAW;EACP,SAAS,EAAE,IAAI;EACf,KAAK,EAhNO,IAAI;;AAmNpB,wBAAyB;EACrB,UAAU,EAAE,OAAO;;AAGvB,2BAA4B;EACxB,KAAK,EAAE,IAAI;EACX,UAAU,EAAE,OAAO;EACnB,UAAU,EAAE,IAAI;EAChB,aAAa,EAAE,GAAG;;AAGtB,yBAA0B;EACtB,KAAK,EAAE,IAAI;EACX,UAAU,EAAE,OAAO;EACnB,UAAU,EAAE,IAAI;EAChB,aAAa,EAAE,GAAG;;AC7PtB;;;;;;;;;;;;;;;GAeG;AAEH,yBAA0B;EAEtB,UAAU;IACN,gBAAgB,EF0BF,OAAO;;EEvBzB,aAAc;IACV,UAAU,EAAE,eAAe;IAC3B,OAAO,EAAE,YAAY;;EAGzB,mBAAoB;IAChB,SAAS,EAAE,MAAM;;EAGrB,UAAW;IACP,OAAO,EAAE,YAAY;;EAGzB,OAAQ;IACJ,WAAW,EAAE,GAAG;IAChB,UAAU,EAAE,GAAG;IACf,KAAK,EAAE,IAAI;IACX,aAAa,EAAE,CAAC;;EAGpB,OAAQ;IACJ,WAAW,EAAE,MAAM;IACnB,SAAS,EAAE,OAAO;;EAGtB,YAAa;IACT,YAAY,EAAE,GAAG;IACjB,aAAa,EAAE,GAAG;;EAGtB,KAAM;IACF,MAAM,EAAE,CAAC;IACT,aAAa,EFRF,IAAI;IESf,OAAO,EFLF,CAAC;IEMN,gBAAgB,EFPA,OAAO;;EEU3B,UAAW;IACP,SAAS,EAAE,GAAG;IACd,OAAO,EAAE,OAAO;;EAGpB,UAAW;IACP,SAAS,EAAE,KAAK;;EAGpB,WAAY;IACR,UAAU,EAAE,iBAAiB;IAC7B,aAAa,EAAE,iBAAiB;;EAGpC,kBAAmB;IACf,YAAY,EAAE,CAAC;IACf,aAAa,EAAE,CAAC;IAChB,SAAS,EAAE,MAAM;;EAGrB,gBAAiB;IACb,UAAU,EAAE,iBAAiB;IAC7B,MAAM,EAAE,GAAG;;EAGf,4BAA6B;IACzB,sBAAsB,EAAE,CAAC;IACzB,uBAAuB,EAAE,CAAC;;EAG9B,2BAA4B;IACxB,0BAA0B,EAAE,CAAC;IAC7B,yBAAyB,EAAE,CAAC;;EAGhC,kBAAmB;IACf,SAAS,EAAE,MAAM;;EAGrB,wBAAyB;IACrB,MAAM,EAAE,KAAK\&#34;,\n\&#34;sources\&#34;: [\&#34;../scss/base.scss\&#34;,\&#34;../scss/variables.scss\&#34;,\&#34;../scss/pikaday.scss\&#34;,\&#34;../scss/mobile.scss\&#34;],\n\&#34;names\&#34;: [],\n\&#34;file\&#34;: \&#34;base.css\&#34;\n}\n&#34;),</pre></code></td></tr><tr><td>377</td><td><code><pre> }</pre></code></td></tr><tr><td>378</td><td><code><pre> file1a := &amp;embedded.EmbeddedFile{</pre></code></td></tr><tr><td>379</td><td><code><pre> Filename: &#34;bootstrap.min.css&#34;,</pre></code></td></tr><tr><td>380</td><td><code><pre> FileModTime: time.Unix(1530208361, 0),</pre></code></td></tr><tr><td>381</td><td><code><pre> Content: string(&#34;/*!\n * Bootstrap v4.1.1 (https://getbootstrap.com/)\n * Copyright 2011-2018 The Bootstrap Authors\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,\&#34;Segoe UI\&#34;,Roboto,\&#34;Helvetica Neue\&#34;,Arial,sans-serif,\&#34;Apple Color Emoji\&#34;,\&#34;Segoe UI Emoji\&#34;,\&#34;Segoe UI Symbol\&#34;;--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,\&#34;Liberation Mono\&#34;,\&#34;Courier New\&#34;,monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,\&#34;Segoe UI\&#34;,Roboto,\&#34;Helvetica Neue\&#34;,Arial,sans-serif,\&#34;Apple Color Emoji\&#34;,\&#34;Segoe UI Emoji\&#34;,\&#34;Segoe UI Symbol\&#34;;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex=\&#34;-1\&#34;]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,\&#34;Liberation Mono\&#34;,\&#34;Courier New\&#34;,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:inherit}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:\&#34;\\2014 \\00A0\&#34;}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a&gt;code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters&gt;.col,.no-gutters&gt;[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;max-width:100%;margin-bottom:1rem;background-color:transparent}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary&gt;td,.table-primary&gt;th{background-color:#b8daff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover&gt;td,.table-hover .table-primary:hover&gt;th{background-color:#9fcdff}.table-secondary,.table-secondary&gt;td,.table-secondary&gt;th{background-color:#d6d8db}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover&gt;td,.table-hover .table-secondary:hover&gt;th{background-color:#c8cbcf}.table-success,.table-success&gt;td,.table-success&gt;th{background-color:#c3e6cb}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover&gt;td,.table-hover .table-success:hover&gt;th{background-color:#b1dfbb}.table-info,.table-info&gt;td,.table-info&gt;th{background-color:#bee5eb}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover&gt;td,.table-hover .table-info:hover&gt;th{background-color:#abdde5}.table-warning,.table-warning&gt;td,.table-warning&gt;th{background-color:#ffeeba}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover&gt;td,.table-hover .table-warning:hover&gt;th{background-color:#ffe8a1}.table-danger,.table-danger&gt;td,.table-danger&gt;th{background-color:#f5c6cb}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover&gt;td,.table-hover .table-danger:hover&gt;th{background-color:#f1b0b7}.table-light,.table-light&gt;td,.table-light&gt;th{background-color:#fdfdfe}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover&gt;td,.table-hover .table-light:hover&gt;th{background-color:#ececf6}.table-dark,.table-dark&gt;td,.table-dark&gt;th{background-color:#c6c8ca}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover&gt;td,.table-hover .table-dark:hover&gt;th{background-color:#b9bbbe}.table-active,.table-active&gt;td,.table-active&gt;th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover&gt;td,.table-hover .table-active:hover&gt;th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm&gt;.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md&gt;.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg&gt;.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl&gt;.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive&gt;.table-bordered{border:0}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:not([size]):not([multiple]){height:calc(2.25rem + 2px)}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm,.input-group-lg&gt;.form-control-plaintext.form-control,.input-group-lg&gt;.input-group-append&gt;.form-control-plaintext.btn,.input-group-lg&gt;.input-group-append&gt;.form-control-plaintext.input-group-text,.input-group-lg&gt;.input-group-prepend&gt;.form-control-plaintext.btn,.input-group-lg&gt;.input-group-prepend&gt;.form-control-plaintext.input-group-text,.input-group-sm&gt;.form-control-plaintext.form-control,.input-group-sm&gt;.input-group-append&gt;.form-control-plaintext.btn,.input-group-sm&gt;.input-group-append&gt;.form-control-plaintext.input-group-text,.input-group-sm&gt;.input-group-prepend&gt;.form-control-plaintext.btn,.input-group-sm&gt;.input-group-prepend&gt;.form-control-plaintext.input-group-text{padding-right:0;padding-left:0}.form-control-sm,.input-group-sm&gt;.form-control,.input-group-sm&gt;.input-group-append&gt;.btn,.input-group-sm&gt;.input-group-append&gt;.input-group-text,.input-group-sm&gt;.input-group-prepend&gt;.btn,.input-group-sm&gt;.input-group-prepend&gt;.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-sm&gt;.input-group-append&gt;select.btn:not([size]):not([multiple]),.input-group-sm&gt;.input-group-append&gt;select.input-group-text:not([size]):not([multiple]),.input-group-sm&gt;.input-group-prepend&gt;select.btn:not([size]):not([multiple]),.input-group-sm&gt;.input-group-prepend&gt;select.input-group-text:not([size]):not([multiple]),.input-group-sm&gt;select.form-control:not([size]):not([multiple]),select.form-control-sm:not([size]):not([multiple]){height:calc(1.8125rem + 2px)}.form-control-lg,.input-group-lg&gt;.form-control,.input-group-lg&gt;.input-group-append&gt;.btn,.input-group-lg&gt;.input-group-append&gt;.input-group-text,.input-group-lg&gt;.input-group-prepend&gt;.btn,.input-group-lg&gt;.input-group-prepend&gt;.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-lg&gt;.input-group-append&gt;select.btn:not([size]):not([multiple]),.input-group-lg&gt;.input-group-append&gt;select.input-group-text:not([size]):not([multiple]),.input-group-lg&gt;.input-group-prepend&gt;select.btn:not([size]):not([multiple]),.input-group-lg&gt;.input-group-prepend&gt;select.input-group-text:not([size]):not([multiple]),.input-group-lg&gt;select.form-control:not([size]):not([multiple]),select.form-control-lg:not([size]):not([multiple]){height:calc(2.875rem + 2px)}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row&gt;.col,.form-row&gt;[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(40,167,69,.8);border-radius:.2rem}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#28a745}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{background-color:#71dd8a}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(40,167,69,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label::before,.was-validated .custom-file-input:valid~.custom-file-label::before{border-color:inherit}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(220,53,69,.8);border-radius:.2rem}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#dc3545}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{background-color:#efa2a9}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,.25)}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label::before,.was-validated .custom-file-input:invalid~.custom-file-label::before{border-color:inherit}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}.btn:not(:disabled):not(.disabled).active,.btn:not(:disabled):not(.disabled):active{background-image:none}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show&gt;.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show&gt;.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show&gt;.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show&gt;.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show&gt;.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show&gt;.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show&gt;.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show&gt;.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show&gt;.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show&gt;.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show&gt;.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show&gt;.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show&gt;.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show&gt;.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show&gt;.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show&gt;.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-primary{color:#007bff;background-color:transparent;background-image:none;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show&gt;.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show&gt;.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;background-color:transparent;background-image:none;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show&gt;.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show&gt;.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;background-color:transparent;background-image:none;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show&gt;.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show&gt;.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;background-color:transparent;background-image:none;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show&gt;.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show&gt;.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;background-color:transparent;background-image:none;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show&gt;.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show&gt;.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;background-color:transparent;background-image:none;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show&gt;.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show&gt;.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show&gt;.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show&gt;.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show&gt;.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show&gt;.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;background-color:transparent}.btn-link:hover{color:#0056b3;text-decoration:underline;background-color:transparent;border-color:transparent}.btn-link.focus,.btn-link:focus{text-decoration:underline;border-color:transparent;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg&gt;.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm&gt;.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media screen and (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media screen and (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\&#34;\&#34;;border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-right{right:0;left:auto}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\&#34;\&#34;;border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\&#34;\&#34;;border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\&#34;\&#34;}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:\&#34;\&#34;;border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical&gt;.btn,.btn-group&gt;.btn{position:relative;-ms-flex:0 1 auto;flex:0 1 auto}.btn-group-vertical&gt;.btn:hover,.btn-group&gt;.btn:hover{z-index:1}.btn-group-vertical&gt;.btn.active,.btn-group-vertical&gt;.btn:active,.btn-group-vertical&gt;.btn:focus,.btn-group&gt;.btn.active,.btn-group&gt;.btn:active,.btn-group&gt;.btn:focus{z-index:1}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group&gt;.btn:first-child{margin-left:0}.btn-group&gt;.btn-group:not(:last-child)&gt;.btn,.btn-group&gt;.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group&gt;.btn-group:not(:first-child)&gt;.btn,.btn-group&gt;.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm&gt;.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg&gt;.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical&gt;.btn+.btn,.btn-group-vertical&gt;.btn+.btn-group,.btn-group-vertical&gt;.btn-group+.btn,.btn-group-vertical&gt;.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical&gt;.btn-group:not(:last-child)&gt;.btn,.btn-group-vertical&gt;.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical&gt;.btn-group:not(:first-child)&gt;.btn,.btn-group-vertical&gt;.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle&gt;.btn,.btn-group-toggle&gt;.btn-group&gt;.btn{margin-bottom:0}.btn-group-toggle&gt;.btn input[type=checkbox],.btn-group-toggle&gt;.btn input[type=radio],.btn-group-toggle&gt;.btn-group&gt;.btn input[type=checkbox],.btn-group-toggle&gt;.btn-group&gt;.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group&gt;.custom-file,.input-group&gt;.custom-select,.input-group&gt;.form-control{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group&gt;.custom-file+.custom-file,.input-group&gt;.custom-file+.custom-select,.input-group&gt;.custom-file+.form-control,.input-group&gt;.custom-select+.custom-file,.input-group&gt;.custom-select+.custom-select,.input-group&gt;.custom-select+.form-control,.input-group&gt;.form-control+.custom-file,.input-group&gt;.form-control+.custom-select,.input-group&gt;.form-control+.form-control{margin-left:-1px}.input-group&gt;.custom-file .custom-file-input:focus~.custom-file-label,.input-group&gt;.custom-select:focus,.input-group&gt;.form-control:focus{z-index:3}.input-group&gt;.custom-select:not(:last-child),.input-group&gt;.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group&gt;.custom-select:not(:first-child),.input-group&gt;.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group&gt;.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group&gt;.custom-file:not(:last-child) .custom-file-label,.input-group&gt;.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group&gt;.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group&gt;.input-group-append:last-child&gt;.btn:not(:last-child):not(.dropdown-toggle),.input-group&gt;.input-group-append:last-child&gt;.input-group-text:not(:last-child),.input-group&gt;.input-group-append:not(:last-child)&gt;.btn,.input-group&gt;.input-group-append:not(:last-child)&gt;.input-group-text,.input-group&gt;.input-group-prepend&gt;.btn,.input-group&gt;.input-group-prepend&gt;.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group&gt;.input-group-append&gt;.btn,.input-group&gt;.input-group-append&gt;.input-group-text,.input-group&gt;.input-group-prepend:first-child&gt;.btn:not(:first-child),.input-group&gt;.input-group-prepend:first-child&gt;.input-group-text:not(:first-child),.input-group&gt;.input-group-prepend:not(:first-child)&gt;.btn,.input-group&gt;.input-group-prepend:not(:first-child)&gt;.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:active~.custom-control-label::before{color:#fff;background-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:\&#34;\&#34;;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#dee2e6}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:\&#34;\&#34;;background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url(\&#34;data:image/svg+xml;charset=utf8,%3Csvg xmlns=&#39;http://www.w3.org/2000/svg&#39; viewBox=&#39;0 0 8 8&#39;%3E%3Cpath fill=&#39;%23fff&#39; d=&#39;M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z&#39;/%3E%3C/svg%3E\&#34;)}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url(\&#34;data:image/svg+xml;charset=utf8,%3Csvg xmlns=&#39;http://www.w3.org/2000/svg&#39; viewBox=&#39;0 0 4 4&#39;%3E%3Cpath stroke=&#39;%23fff&#39; d=&#39;M0 2h4&#39;/%3E%3C/svg%3E\&#34;)}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url(\&#34;data:image/svg+xml;charset=utf8,%3Csvg xmlns=&#39;http://www.w3.org/2000/svg&#39; viewBox=&#39;-4 -4 8 8&#39;%3E%3Ccircle r=&#39;3&#39; fill=&#39;%23fff&#39;/%3E%3C/svg%3E\&#34;)}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url(\&#34;data:image/svg+xml;charset=utf8,%3Csvg xmlns=&#39;http://www.w3.org/2000/svg&#39; viewBox=&#39;0 0 4 5&#39;%3E%3Cpath fill=&#39;%23343a40&#39; d=&#39;M2 0L0 2h4zm0 5L0 3h4z&#39;/%3E%3C/svg%3E\&#34;) no-repeat right .75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(128,189,255,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size=\&#34;1\&#34;]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-select-lg{height:calc(2.875rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:125%}.custom-file{position:relative;display:inline-block;width:100%;height:calc(2.25rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(2.25rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:focus~.custom-file-label::after{border-color:#80bdff}.custom-file-input:disabled~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:\&#34;Browse\&#34;}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(2.25rem + 2px);padding:.375rem .75rem;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:2.25rem;padding:.375rem .75rem;line-height:1.5;color:#495057;content:\&#34;Browse\&#34;;background-color:#e9ecef;border-left:1px solid #ced4da;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;padding-left:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:focus{outline:0;box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:focus{outline:0;box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:focus{outline:0;box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show&gt;.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content&gt;.tab-pane{display:none}.tab-content&gt;.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar&gt;.container,.navbar&gt;.container-fluid{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:\&#34;\&#34;;background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm&gt;.container,.navbar-expand-sm&gt;.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm&gt;.container,.navbar-expand-sm&gt;.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md&gt;.container,.navbar-expand-md&gt;.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md&gt;.container,.navbar-expand-md&gt;.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg&gt;.container,.navbar-expand-lg&gt;.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg&gt;.container,.navbar-expand-lg&gt;.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl&gt;.container,.navbar-expand-xl&gt;.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl&gt;.container,.navbar-expand-xl&gt;.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand&gt;.container,.navbar-expand&gt;.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand&gt;.container,.navbar-expand&gt;.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active&gt;.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show&gt;.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url(\&#34;data:image/svg+xml;charset=utf8,%3Csvg viewBox=&#39;0 0 30 30&#39; xmlns=&#39;http://www.w3.org/2000/svg&#39;%3E%3Cpath stroke=&#39;rgba(0, 0, 0, 0.5)&#39; stroke-width=&#39;2&#39; stroke-linecap=&#39;round&#39; stroke-miterlimit=&#39;10&#39; d=&#39;M4 7h22M4 15h22M4 23h22&#39;/%3E%3C/svg%3E\&#34;)}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active&gt;.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show&gt;.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url(\&#34;data:image/svg+xml;charset=utf8,%3Csvg viewBox=&#39;0 0 30 30&#39; xmlns=&#39;http://www.w3.org/2000/svg&#39;%3E%3Cpath stroke=&#39;rgba(255, 255, 255, 0.5)&#39; stroke-width=&#39;2&#39; stroke-linecap=&#39;round&#39; stroke-miterlimit=&#39;10&#39; d=&#39;M4 7h22M4 15h22M4 23h22&#39;/%3E%3C/svg%3E\&#34;)}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card&gt;hr{margin-right:0;margin-left:0}.card&gt;.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card&gt;.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-ms-flexbox;display:flex;-ms-flex:1 0 0%;flex:1 0 0%;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-group&gt;.card{margin-bottom:15px}@media (min-width:576px){.card-group{-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group&gt;.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group&gt;.card+.card{margin-left:0;border-left:0}.card-group&gt;.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group&gt;.card:first-child .card-header,.card-group&gt;.card:first-child .card-img-top{border-top-right-radius:0}.card-group&gt;.card:first-child .card-footer,.card-group&gt;.card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group&gt;.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group&gt;.card:last-child .card-header,.card-group&gt;.card:last-child .card-img-top{border-top-left-radius:0}.card-group&gt;.card:last-child .card-footer,.card-group&gt;.card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group&gt;.card:only-child{border-radius:.25rem}.card-group&gt;.card:only-child .card-header,.card-group&gt;.card:only-child .card-img-top{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group&gt;.card:only-child .card-footer,.card-group&gt;.card:only-child .card-img-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group&gt;.card:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group&gt;.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group&gt;.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group&gt;.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group&gt;.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion .card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion .card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion .card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion .card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:\&#34;/\&#34;}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}.badge-primary[href]:focus,.badge-primary[href]:hover{color:#fff;text-decoration:none;background-color:#0062cc}.badge-secondary{color:#fff;background-color:#6c757d}.badge-secondary[href]:focus,.badge-secondary[href]:hover{color:#fff;text-decoration:none;background-color:#545b62}.badge-success{color:#fff;background-color:#28a745}.badge-success[href]:focus,.badge-success[href]:hover{color:#fff;text-decoration:none;background-color:#1e7e34}.badge-info{color:#fff;background-color:#17a2b8}.badge-info[href]:focus,.badge-info[href]:hover{color:#fff;text-decoration:none;background-color:#117a8b}.badge-warning{color:#212529;background-color:#ffc107}.badge-warning[href]:focus,.badge-warning[href]:hover{color:#212529;text-decoration:none;background-color:#d39e00}.badge-danger{color:#fff;background-color:#dc3545}.badge-danger[href]:focus,.badge-danger[href]:hover{color:#fff;text-decoration:none;background-color:#bd2130}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:focus,.badge-light[href]:hover{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:focus,.badge-dark[href]:hover{color:#fff;text-decoration:none;background-color:#1d2124}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media screen and (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:not(:disabled):not(.disabled){cursor:pointer}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{color:#000;text-decoration:none;opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-25%);transform:translate(0,-25%)}@media screen and (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - (.5rem * 2))}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer&gt;:not(:first-child){margin-left:.25rem}.modal-footer&gt;:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - (1.75rem * 2))}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,\&#34;Segoe UI\&#34;,Roboto,\&#34;Helvetica Neue\&#34;,Arial,sans-serif,\&#34;Apple Color Emoji\&#34;,\&#34;Segoe UI Emoji\&#34;,\&#34;Segoe UI Symbol\&#34;;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:\&#34;\&#34;;border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,\&#34;Segoe UI\&#34;,Roboto,\&#34;Helvetica Neue\&#34;,Arial,sans-serif,\&#34;Apple Color Emoji\&#34;,\&#34;Segoe UI Emoji\&#34;,\&#34;Segoe UI Symbol\&#34;;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:\&#34;\&#34;;border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top] .arrow,.bs-popover-top .arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-top .arrow::before{border-width:.5rem .5rem 0}.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::before{bottom:0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-top .arrow::after{bottom:1px;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right] .arrow,.bs-popover-right .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-right .arrow::before{border-width:.5rem .5rem .5rem 0}.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::before{left:0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-right .arrow::after{left:1px;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom] .arrow,.bs-popover-bottom .arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-bottom .arrow::before{border-width:0 .5rem .5rem .5rem}.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-bottom .arrow::after{top:1px;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:\&#34;\&#34;;border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left] .arrow,.bs-popover-left .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-left .arrow::before{border-width:.5rem 0 .5rem .5rem}.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-left .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;-ms-flex-align:center;align-items:center;width:100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block;transition:-webkit-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease}@media screen and (prefers-reduced-motion:reduce){.carousel-item-next,.carousel-item-prev,.carousel-item.active{transition:none}}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.active.carousel-item-right,.carousel-item-next{-webkit-transform:translateX(100%);transform:translateX(100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-right,.carousel-item-next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translateX(-100%);transform:translateX(-100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.carousel-fade .carousel-item{opacity:0;transition-duration:.6s;transition-property:opacity}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{opacity:0}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev,.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev,.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url(\&#34;data:image/svg+xml;charset=utf8,%3Csvg xmlns=&#39;http://www.w3.org/2000/svg&#39; fill=&#39;%23fff&#39; viewBox=&#39;0 0 8 8&#39;%3E%3Cpath d=&#39;M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z&#39;/%3E%3C/svg%3E\&#34;)}.carousel-control-next-icon{background-image:url(\&#34;data:image/svg+xml;charset=utf8,%3Csvg xmlns=&#39;http://www.w3.org/2000/svg&#39; fill=&#39;%23fff&#39; viewBox=&#39;0 0 8 8&#39;%3E%3Cpath d=&#39;M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z&#39;/%3E%3C/svg%3E\&#34;)}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:rgba(255,255,255,.5)}.carousel-indicators li::before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:\&#34;\&#34;}.carousel-indicators li::after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:\&#34;\&#34;}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:\&#34;\&#34;}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:\&#34;\&#34;}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,\&#34;Liberation Mono\&#34;,\&#34;Courier New\&#34;,monospace}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0062cc!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#545b62!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#1e7e34!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#117a8b!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#d39e00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#bd2130!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#dae0e5!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#1d2124!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:\&#34; (\&#34; attr(title) \&#34;)\&#34;}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}}\n/*# sourceMappingURL=bootstrap.min.css.map */&#34;),</pre></code></td></tr><tr><td>382</td><td><code><pre> }</pre></code></td></tr><tr><td>383</td><td><code><pre></pre></code></td></tr><tr><td>384</td><td><code><pre> // define dirs</pre></code></td></tr><tr><td>385</td><td><code><pre> dir17 := &amp;embedded.EmbeddedDir{</pre></code></td></tr><tr><td>386</td><td><code><pre> Filename: &#34;&#34;,</pre></code></td></tr><tr><td>387</td><td><code><pre> DirModTime: time.Unix(1538106376, 0),</pre></code></td></tr><tr><td>388</td><td><code><pre> ChildFiles: []*embedded.EmbeddedFile{</pre></code></td></tr><tr><td>389</td><td><code><pre> file18, // &#34;base.css&#34;</pre></code></td></tr><tr><td>390</td><td><code><pre> file19, // &#34;base.css.map&#34;</pre></code></td></tr><tr><td>391</td><td><code><pre> file1a, // &#34;bootstrap.min.css&#34;</pre></code></td></tr><tr><td>392</td><td><code><pre></pre></code></td></tr><tr><td>393</td><td><code><pre> },</pre></code></td></tr><tr><td>394</td><td><code><pre> }</pre></code></td></tr><tr><td>395</td><td><code><pre></pre></code></td></tr><tr><td>396</td><td><code><pre> // link ChildDirs</pre></code></td></tr><tr><td>397</td><td><code><pre> dir17.ChildDirs = []*embedded.EmbeddedDir{}</pre></code></td></tr><tr><td>398</td><td><code><pre></pre></code></td></tr><tr><td>399</td><td><code><pre> // register embeddedBox</pre></code></td></tr><tr><td>400</td><td><code><pre> embedded.RegisterEmbeddedBox(`css`, &amp;embedded.EmbeddedBox{</pre></code></td></tr><tr><td>401</td><td><code><pre> Name: `css`,</pre></code></td></tr><tr><td>402</td><td><code><pre> Time: time.Unix(1538106376, 0),</pre></code></td></tr><tr><td>403</td><td><code><pre> Dirs: map[string]*embedded.EmbeddedDir{</pre></code></td></tr><tr><td>404</td><td><code><pre> &#34;&#34;: dir17,</pre></code></td></tr><tr><td>405</td><td><code><pre> },</pre></code></td></tr><tr><td>406</td><td><code><pre> Files: map[string]*embedded.EmbeddedFile{</pre></code></td></tr><tr><td>407</td><td><code><pre> &#34;base.css&#34;: file18,</pre></code></td></tr><tr><td>408</td><td><code><pre> &#34;base.css.map&#34;: file19,</pre></code></td></tr><tr><td>409</td><td><code><pre> &#34;bootstrap.min.css&#34;: file1a,</pre></code></td></tr><tr><td>410</td><td><code><pre> },</pre></code></td></tr><tr><td>411</td><td><code><pre> })</pre></code></td></tr><tr><td>412</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Assets">func Assets</div><div class="info"><a href="#s_fn_Assets">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/source/source.go</code>:</p></div><table class="listing">
<tr><td>38</td><td><code><pre>func Assets() {</pre></code></td></tr><tr><td>39</td><td><code><pre> CssBox = rice.MustFindBox(&#34;css&#34;)</pre></code></td></tr><tr><td>40</td><td><code><pre> ScssBox = rice.MustFindBox(&#34;scss&#34;)</pre></code></td></tr><tr><td>41</td><td><code><pre> JsBox = rice.MustFindBox(&#34;js&#34;)</pre></code></td></tr><tr><td>42</td><td><code><pre> TmplBox = rice.MustFindBox(&#34;tmpl&#34;)</pre></code></td></tr><tr><td>43</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_@79:5">func @79:5</div><div class="info"><a href="#s_fn_@79:5">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/source/source.go</code>:</p></div><table class="listing">
<tr><td>79</td><td><code><pre>func() {</pre></code></td></tr><tr><td>80</td><td><code><pre> stdout, errStdout = copyAndCapture(os.Stdout, stdoutIn)</pre></code></td></tr><tr><td>81</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_@83:5">func @83:5</div><div class="info"><a href="#s_fn_@83:5">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/source/source.go</code>:</p></div><table class="listing">
<tr><td>83</td><td><code><pre>func() {</pre></code></td></tr><tr><td>84</td><td><code><pre> stderr, errStderr = copyAndCapture(os.Stderr, stderrIn)</pre></code></td></tr><tr><td>85</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_CompileSASS">func CompileSASS</div><div class="info"><a href="#s_fn_CompileSASS">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/source/source.go</code>:</p></div><table class="listing">
<tr><td>57</td><td><code><pre>func CompileSASS(folder string) error {</pre></code></td></tr><tr><td>58</td><td><code><pre> sassBin := os.Getenv(&#34;SASS&#34;)</pre></code></td></tr><tr><td>59</td><td><code><pre> if sassBin == &#34;&#34; {</pre></code></td></tr><tr class="miss"><td>60</td><td><code><pre> sassBin = &#34;sass&#34;</pre></code></td></tr><tr><td>61</td><td><code><pre> }</pre></code></td></tr><tr><td>62</td><td><code><pre></pre></code></td></tr><tr><td>63</td><td><code><pre> scssFile := fmt.Sprintf(&#34;%v/%v&#34;, folder, &#34;assets/scss/base.scss&#34;)</pre></code></td></tr><tr><td>64</td><td><code><pre> baseFile := fmt.Sprintf(&#34;%v/%v&#34;, folder, &#34;assets/css/base.css&#34;)</pre></code></td></tr><tr><td>65</td><td><code><pre></pre></code></td></tr><tr><td>66</td><td><code><pre> utils.Log(1, fmt.Sprintf(&#34;Compiling SASS %v into %v&#34;, scssFile, baseFile))</pre></code></td></tr><tr><td>67</td><td><code><pre> command := fmt.Sprintf(&#34;%v %v %v&#34;, sassBin, scssFile, baseFile)</pre></code></td></tr><tr><td>68</td><td><code><pre></pre></code></td></tr><tr><td>69</td><td><code><pre> utils.Log(1, fmt.Sprintf(&#34;Command: sh -c %v&#34;, command))</pre></code></td></tr><tr><td>70</td><td><code><pre></pre></code></td></tr><tr><td>71</td><td><code><pre> testCmd := exec.Command(&#34;sh&#34;, &#34;-c&#34;, command)</pre></code></td></tr><tr><td>72</td><td><code><pre></pre></code></td></tr><tr><td>73</td><td><code><pre> var stdout, stderr []byte</pre></code></td></tr><tr><td>74</td><td><code><pre> var errStdout, errStderr error</pre></code></td></tr><tr><td>75</td><td><code><pre> stdoutIn, _ := testCmd.StdoutPipe()</pre></code></td></tr><tr><td>76</td><td><code><pre> stderrIn, _ := testCmd.StderrPipe()</pre></code></td></tr><tr><td>77</td><td><code><pre> testCmd.Start()</pre></code></td></tr><tr><td>78</td><td><code><pre></pre></code></td></tr><tr><td>79</td><td><code><pre> go func() {</pre></code></td></tr><tr><td>80</td><td><code><pre> stdout, errStdout = copyAndCapture(os.Stdout, stdoutIn)</pre></code></td></tr><tr><td>81</td><td><code><pre> }()</pre></code></td></tr><tr><td>82</td><td><code><pre></pre></code></td></tr><tr><td>83</td><td><code><pre> go func() {</pre></code></td></tr><tr><td>84</td><td><code><pre> stderr, errStderr = copyAndCapture(os.Stderr, stderrIn)</pre></code></td></tr><tr><td>85</td><td><code><pre> }()</pre></code></td></tr><tr><td>86</td><td><code><pre></pre></code></td></tr><tr><td>87</td><td><code><pre> err := testCmd.Wait()</pre></code></td></tr><tr><td>88</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>89</td><td><code><pre> utils.Log(3, err)</pre></code></td></tr><tr class="miss"><td>90</td><td><code><pre> return err</pre></code></td></tr><tr><td>91</td><td><code><pre> }</pre></code></td></tr><tr><td>92</td><td><code><pre></pre></code></td></tr><tr><td>93</td><td><code><pre> if errStdout != nil || errStderr != nil {</pre></code></td></tr><tr class="miss"><td>94</td><td><code><pre> utils.Log(3, fmt.Sprintf(&#34;Failed to compile assets with SASS %v&#34;, err))</pre></code></td></tr><tr class="miss"><td>95</td><td><code><pre> return errors.New(&#34;failed to capture stdout or stderr&#34;)</pre></code></td></tr><tr><td>96</td><td><code><pre> }</pre></code></td></tr><tr><td>97</td><td><code><pre></pre></code></td></tr><tr><td>98</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>99</td><td><code><pre> utils.Log(3, fmt.Sprintf(&#34;Failed to compile assets with SASS %v&#34;, err))</pre></code></td></tr><tr class="miss"><td>100</td><td><code><pre> utils.Log(3, fmt.Sprintf(&#34;bash -c %v %v %v&#34;, sassBin, scssFile, baseFile))</pre></code></td></tr><tr class="miss"><td>101</td><td><code><pre> return err</pre></code></td></tr><tr><td>102</td><td><code><pre> }</pre></code></td></tr><tr><td>103</td><td><code><pre></pre></code></td></tr><tr><td>104</td><td><code><pre> outStr, errStr := string(stdout), string(stderr)</pre></code></td></tr><tr><td>105</td><td><code><pre> utils.Log(1, fmt.Sprintf(&#34;out: %v | error: %v&#34;, outStr, errStr))</pre></code></td></tr><tr><td>106</td><td><code><pre> utils.Log(1, &#34;SASS Compiling is complete!&#34;)</pre></code></td></tr><tr><td>107</td><td><code><pre> return err</pre></code></td></tr><tr><td>108</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_MakePublicFolder">func MakePublicFolder</div><div class="info"><a href="#s_fn_MakePublicFolder">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/source/source.go</code>:</p></div><table class="listing">
<tr><td>207</td><td><code><pre>func MakePublicFolder(folder string) error {</pre></code></td></tr><tr><td>208</td><td><code><pre> utils.Log(1, fmt.Sprintf(&#34;Creating folder &#39;%v&#39;&#34;, folder))</pre></code></td></tr><tr><td>209</td><td><code><pre> if _, err := os.Stat(folder); os.IsNotExist(err) {</pre></code></td></tr><tr><td>210</td><td><code><pre> err = os.MkdirAll(folder, 0777)</pre></code></td></tr><tr><td>211</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>212</td><td><code><pre> utils.Log(3, fmt.Sprintf(&#34;Failed to created %v directory, %v&#34;, folder, err))</pre></code></td></tr><tr class="miss"><td>213</td><td><code><pre> return err</pre></code></td></tr><tr><td>214</td><td><code><pre> }</pre></code></td></tr><tr><td>215</td><td><code><pre> }</pre></code></td></tr><tr><td>216</td><td><code><pre> return nil</pre></code></td></tr><tr><td>217</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_SaveAsset">func SaveAsset</div><div class="info"><a href="#s_fn_SaveAsset">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/source/source.go</code>:</p></div><table class="listing">
<tr><td>131</td><td><code><pre>func SaveAsset(data []byte, folder, file string) error {</pre></code></td></tr><tr><td>132</td><td><code><pre> utils.Log(1, fmt.Sprintf(&#34;Saving %v/%v into assets folder&#34;, folder, file))</pre></code></td></tr><tr><td>133</td><td><code><pre> err := ioutil.WriteFile(folder+&#34;/assets/&#34;+file, data, 0744)</pre></code></td></tr><tr><td>134</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>135</td><td><code><pre> utils.Log(3, fmt.Sprintf(&#34;Failed to save %v/%v, %v&#34;, folder, file, err))</pre></code></td></tr><tr class="miss"><td>136</td><td><code><pre> return err</pre></code></td></tr><tr><td>137</td><td><code><pre> }</pre></code></td></tr><tr><td>138</td><td><code><pre> return nil</pre></code></td></tr><tr><td>139</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_DeleteAllAssets">func DeleteAllAssets</div><div class="info"><a href="#s_fn_DeleteAllAssets">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/source/source.go</code>:</p></div><table class="listing">
<tr><td>179</td><td><code><pre>func DeleteAllAssets(folder string) error {</pre></code></td></tr><tr><td>180</td><td><code><pre> err := os.RemoveAll(folder + &#34;/assets&#34;)</pre></code></td></tr><tr><td>181</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>182</td><td><code><pre> utils.Log(1, fmt.Sprintf(&#34;There was an issue deleting Statup Assets, %v&#34;, err))</pre></code></td></tr><tr class="miss"><td>183</td><td><code><pre> return err</pre></code></td></tr><tr><td>184</td><td><code><pre> }</pre></code></td></tr><tr><td>185</td><td><code><pre> utils.Log(1, &#34;Statup assets have been deleted&#34;)</pre></code></td></tr><tr><td>186</td><td><code><pre> return err</pre></code></td></tr><tr><td>187</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_copyAndCapture">func copyAndCapture</div><div class="info"><a href="#s_fn_copyAndCapture">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/source/source.go</code>:</p></div><table class="listing">
<tr><td>220</td><td><code><pre>func copyAndCapture(w io.Writer, r io.Reader) ([]byte, error) {</pre></code></td></tr><tr><td>221</td><td><code><pre> var out []byte</pre></code></td></tr><tr><td>222</td><td><code><pre> buf := make([]byte, 1024, 1024)</pre></code></td></tr><tr><td>223</td><td><code><pre> for {</pre></code></td></tr><tr><td>224</td><td><code><pre> n, err := r.Read(buf[:])</pre></code></td></tr><tr><td>225</td><td><code><pre> if n &gt; 0 {</pre></code></td></tr><tr class="miss"><td>226</td><td><code><pre> d := buf[:n]</pre></code></td></tr><tr class="miss"><td>227</td><td><code><pre> out = append(out, d...)</pre></code></td></tr><tr class="miss"><td>228</td><td><code><pre> _, err := w.Write(d)</pre></code></td></tr><tr class="miss"><td>229</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>230</td><td><code><pre> return out, err</pre></code></td></tr><tr><td>231</td><td><code><pre> }</pre></code></td></tr><tr><td>232</td><td><code><pre> }</pre></code></td></tr><tr><td>233</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>234</td><td><code><pre> // Read returns io.EOF at the end of file, which is not an error for us</pre></code></td></tr><tr><td>235</td><td><code><pre> if err == io.EOF {</pre></code></td></tr><tr><td>236</td><td><code><pre> err = nil</pre></code></td></tr><tr><td>237</td><td><code><pre> }</pre></code></td></tr><tr><td>238</td><td><code><pre> return out, err</pre></code></td></tr><tr><td>239</td><td><code><pre> }</pre></code></td></tr><tr><td>240</td><td><code><pre> }</pre></code></td></tr><tr><td>241</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_CopyToPublic">func CopyToPublic</div><div class="info"><a href="#s_fn_CopyToPublic">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/source/source.go</code>:</p></div><table class="listing">
<tr><td>190</td><td><code><pre>func CopyToPublic(box *rice.Box, folder, file string) error {</pre></code></td></tr><tr><td>191</td><td><code><pre> assetFolder := fmt.Sprintf(&#34;%v/%v&#34;, folder, file)</pre></code></td></tr><tr><td>192</td><td><code><pre> utils.Log(1, fmt.Sprintf(&#34;Copying %v to %v&#34;, file, assetFolder))</pre></code></td></tr><tr><td>193</td><td><code><pre> base, err := box.String(file)</pre></code></td></tr><tr><td>194</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>195</td><td><code><pre> utils.Log(3, fmt.Sprintf(&#34;Failed to copy %v to %v, %v.&#34;, file, assetFolder, err))</pre></code></td></tr><tr class="miss"><td>196</td><td><code><pre> return err</pre></code></td></tr><tr><td>197</td><td><code><pre> }</pre></code></td></tr><tr><td>198</td><td><code><pre> err = ioutil.WriteFile(assetFolder, []byte(base), 0744)</pre></code></td></tr><tr><td>199</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>200</td><td><code><pre> utils.Log(3, fmt.Sprintf(&#34;Failed to write file %v to %v, %v.&#34;, file, assetFolder, err))</pre></code></td></tr><tr class="miss"><td>201</td><td><code><pre> return err</pre></code></td></tr><tr><td>202</td><td><code><pre> }</pre></code></td></tr><tr><td>203</td><td><code><pre> return nil</pre></code></td></tr><tr><td>204</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_OpenAsset">func OpenAsset</div><div class="info"><a href="#s_fn_OpenAsset">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/source/source.go</code>:</p></div><table class="listing">
<tr><td>142</td><td><code><pre>func OpenAsset(folder, file string) string {</pre></code></td></tr><tr><td>143</td><td><code><pre> dat, err := ioutil.ReadFile(folder + &#34;/assets/&#34; + file)</pre></code></td></tr><tr><td>144</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>145</td><td><code><pre> utils.Log(3, fmt.Sprintf(&#34;Failed to open %v, %v&#34;, file, err))</pre></code></td></tr><tr class="miss"><td>146</td><td><code><pre> return &#34;&#34;</pre></code></td></tr><tr><td>147</td><td><code><pre> }</pre></code></td></tr><tr><td>148</td><td><code><pre> return string(dat)</pre></code></td></tr><tr><td>149</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_UsingAssets">func UsingAssets</div><div class="info"><a href="#s_fn_UsingAssets">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/source/source.go</code>:</p></div><table class="listing">
<tr><td>111</td><td><code><pre>func UsingAssets(folder string) bool {</pre></code></td></tr><tr><td>112</td><td><code><pre> if _, err := os.Stat(folder + &#34;/assets&#34;); err == nil {</pre></code></td></tr><tr><td>113</td><td><code><pre> return true</pre></code></td></tr><tr><td>114</td><td><code><pre> } else {</pre></code></td></tr><tr><td>115</td><td><code><pre> if os.Getenv(&#34;USE_ASSETS&#34;) == &#34;true&#34; {</pre></code></td></tr><tr class="miss"><td>116</td><td><code><pre> utils.Log(1, &#34;Environment variable USE_ASSETS was found.&#34;)</pre></code></td></tr><tr class="miss"><td>117</td><td><code><pre> CreateAllAssets(folder)</pre></code></td></tr><tr class="miss"><td>118</td><td><code><pre> err := CompileSASS(folder)</pre></code></td></tr><tr class="miss"><td>119</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>120</td><td><code><pre> CopyToPublic(CssBox, folder+&#34;/css&#34;, &#34;base.css&#34;)</pre></code></td></tr><tr class="miss"><td>121</td><td><code><pre> utils.Log(2, &#34;Default &#39;base.css&#39; was insert because SASS did not work.&#34;)</pre></code></td></tr><tr class="miss"><td>122</td><td><code><pre> return true</pre></code></td></tr><tr><td>123</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>124</td><td><code><pre> return true</pre></code></td></tr><tr><td>125</td><td><code><pre> }</pre></code></td></tr><tr><td>126</td><td><code><pre> }</pre></code></td></tr><tr><td>127</td><td><code><pre> return false</pre></code></td></tr><tr><td>128</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_HelpMarkdown">func HelpMarkdown</div><div class="info"><a href="#s_fn_HelpMarkdown">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/source/source.go</code>:</p></div><table class="listing">
<tr><td>46</td><td><code><pre>func HelpMarkdown() string {</pre></code></td></tr><tr class="miss"><td>47</td><td><code><pre> helpSrc, err := TmplBox.Bytes(&#34;help.md&#34;)</pre></code></td></tr><tr class="miss"><td>48</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>49</td><td><code><pre> utils.Log(4, err)</pre></code></td></tr><tr class="miss"><td>50</td><td><code><pre> return &#34;error generating markdown&#34;</pre></code></td></tr><tr><td>51</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>52</td><td><code><pre> output := blackfriday.Run(helpSrc)</pre></code></td></tr><tr class="miss"><td>53</td><td><code><pre> return string(output)</pre></code></td></tr><tr><td>54</td><td><code><pre>}</pre></code></td></tr></table>
<!-- Can be parsed by external script
PACKAGE:github.com/hunterlong/statup/source DONE:77.71
-->
<div id="pkg_github.com/hunterlong/statup/utils" class="funcname">Package Overview: github.com/hunterlong/statup/utils <span class="packageTotal">54.76%</span></div><p>This is a coverage report created after analysis of the <code>github.com/hunterlong/statup/utils</code> package. It
has been generated with the following command:</p><pre class="cmd">gocov test github.com/hunterlong/statup/utils | gocov-html</pre> <p>Here are the stats. Please select a function name to view its implementation and see what's left for testing.</p><table class="overview">
<tr id="s_fn_Log"><td><code><a href="#fn_Log">Log(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/log.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>16/16</code></td></tr>
<tr id="s_fn_UnderScoreString"><td><code><a href="#fn_UnderScoreString">UnderScoreString(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/utils.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>10/10</code></td></tr>
<tr id="s_fn_NewSHA1Hash"><td><code><a href="#fn_NewSHA1Hash">NewSHA1Hash(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/encryption.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>8/8</code></td></tr>
<tr id="s_fn_RandomString"><td><code><a href="#fn_RandomString">RandomString(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/encryption.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>5/5</code></td></tr>
<tr id="s_fn_DeleteFile"><td><code><a href="#fn_DeleteFile">DeleteFile(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/utils.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>5/5</code></td></tr>
<tr id="s_fn_newLogRow"><td><code><a href="#fn_newLogRow">newLogRow(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/log.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>4/4</code></td></tr>
<tr id="s_fn_Http"><td><code><a href="#fn_Http">Http(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/log.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>4/4</code></td></tr>
<tr id="s_fn_Timezoner"><td><code><a href="#fn_Timezoner">Timezoner(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/utils.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>4/4</code></td></tr>
<tr id="s_fn_rotate"><td><code><a href="#fn_rotate">rotate(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/log.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
<tr id="s_fn_@84:5"><td><code><a href="#fn_@84:5">@84:5(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/log.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
<tr id="s_fn_Timestamp.Ago"><td><code><a href="#fn_Timestamp.Ago">Timestamp.Ago(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/utils.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
<tr id="s_fn_StringInt"><td><code><a href="#fn_StringInt">StringInt(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/utils.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
<tr id="s_fn_HashPassword"><td><code><a href="#fn_HashPassword">HashPassword(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/encryption.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
<tr id="s_fn_DeleteDirectory"><td><code><a href="#fn_DeleteDirectory">DeleteDirectory(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/utils.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_rev"><td><code><a href="#fn_rev">rev(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/time.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_pushLastLine"><td><code><a href="#fn_pushLastLine">pushLastLine(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/log.go</code></td><td class="percent"><code>80.00%</code></td><td class="linecount"><code>4/5</code></td></tr>
<tr id="s_fn_InitLogs"><td><code><a href="#fn_InitLogs">InitLogs(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/log.go</code></td><td class="percent"><code>76.92%</code></td><td class="linecount"><code>10/13</code></td></tr>
<tr id="s_fn_init"><td><code><a href="#fn_init">init(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/utils.go</code></td><td class="percent"><code>66.67%</code></td><td class="linecount"><code>2/3</code></td></tr>
<tr id="s_fn_createLog"><td><code><a href="#fn_createLog">createLog(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/log.go</code></td><td class="percent"><code>63.64%</code></td><td class="linecount"><code>7/11</code></td></tr>
<tr id="s_fn_FileExists"><td><code><a href="#fn_FileExists">FileExists(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/utils.go</code></td><td class="percent"><code>50.00%</code></td><td class="linecount"><code>2/4</code></td></tr>
<tr id="s_fn_DurationReadable"><td><code><a href="#fn_DurationReadable">DurationReadable(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/utils.go</code></td><td class="percent"><code>42.86%</code></td><td class="linecount"><code>3/7</code></td></tr>
<tr id="s_fn_FormatDuration"><td><code><a href="#fn_FormatDuration">FormatDuration(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/time.go</code></td><td class="percent"><code>37.50%</code></td><td class="linecount"><code>15/40</code></td></tr>
<tr id="s_fn_ToString"><td><code><a href="#fn_ToString">ToString(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/utils.go</code></td><td class="percent"><code>25.00%</code></td><td class="linecount"><code>2/8</code></td></tr>
<tr id="s_fn_Command"><td><code><a href="#fn_Command">Command(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/utils.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/16</code></td></tr>
<tr id="s_fn_copyAndCapture"><td><code><a href="#fn_copyAndCapture">copyAndCapture(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/utils.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/14</code></td></tr>
<tr id="s_fn_GetLastLine"><td><code><a href="#fn_GetLastLine">GetLastLine(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/log.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/5</code></td></tr>
<tr id="s_fn_LogRow.lineAsString"><td><code><a href="#fn_LogRow.lineAsString">LogRow.lineAsString(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/log.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/5</code></td></tr>
<tr id="s_fn_dir"><td><code><a href="#fn_dir">dir(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/utils.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/4</code></td></tr>
<tr id="s_fn_SaveFile"><td><code><a href="#fn_SaveFile">SaveFile(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/utils.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/2</code></td></tr>
<tr id="s_fn_@164:5"><td><code><a href="#fn_@164:5">@164:5(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/utils.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
<tr id="s_fn_@168:5"><td><code><a href="#fn_@168:5">@168:5(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/utils.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
<tr id="s_fn_LogRow.FormatForHtml"><td><code><a href="#fn_LogRow.FormatForHtml">LogRow.FormatForHtml(...)</a></code></td><td><code>github.com/hunterlong/statup/utils/log.go</code></td><td class="percent"><code>0.00%</code></td><td class="linecount"><code>0/1</code></td></tr>
<tr><td colspan="2"><code>github.com/hunterlong/statup/utils</code></td><td class="percent"><code>54.76%</code></td><td class="linecount"><code>115/210</code></td></tr>
</table>
<div class="funcname" id="fn_Log">func Log</div><div class="info"><a href="#s_fn_Log">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/log.go</code>:</p></div><table class="listing">
<tr><td>93</td><td><code><pre>func Log(level int, err interface{}) error {</pre></code></td></tr><tr><td>94</td><td><code><pre> pushLastLine(err)</pre></code></td></tr><tr><td>95</td><td><code><pre> var outErr error</pre></code></td></tr><tr><td>96</td><td><code><pre> switch level {</pre></code></td></tr><tr><td>97</td><td><code><pre> case 5:</pre></code></td></tr><tr><td>98</td><td><code><pre> _, outErr = fmt.Printf(&#34;PANIC: %v\n&#34;, err)</pre></code></td></tr><tr><td>99</td><td><code><pre> fmtLogs.Printf(&#34;PANIC: %v\n&#34;, err)</pre></code></td></tr><tr><td>100</td><td><code><pre> case 4:</pre></code></td></tr><tr><td>101</td><td><code><pre> _, outErr = fmt.Printf(&#34;FATAL: %v\n&#34;, err)</pre></code></td></tr><tr><td>102</td><td><code><pre> fmtLogs.Printf(&#34;FATAL: %v\n&#34;, err)</pre></code></td></tr><tr><td>103</td><td><code><pre> //color.Red(&#34;ERROR: %v\n&#34;, err)</pre></code></td></tr><tr><td>104</td><td><code><pre> //os.Exit(2)</pre></code></td></tr><tr><td>105</td><td><code><pre> case 3:</pre></code></td></tr><tr><td>106</td><td><code><pre> _, outErr = fmt.Printf(&#34;ERROR: %v\n&#34;, err)</pre></code></td></tr><tr><td>107</td><td><code><pre> fmtLogs.Printf(&#34;ERROR: %v\n&#34;, err)</pre></code></td></tr><tr><td>108</td><td><code><pre> //color.Red(&#34;ERROR: %v\n&#34;, err)</pre></code></td></tr><tr><td>109</td><td><code><pre> case 2:</pre></code></td></tr><tr><td>110</td><td><code><pre> _, outErr = fmt.Printf(&#34;WARNING: %v\n&#34;, err)</pre></code></td></tr><tr><td>111</td><td><code><pre> fmtLogs.Printf(&#34;WARNING: %v\n&#34;, err)</pre></code></td></tr><tr><td>112</td><td><code><pre> //color.Yellow(&#34;WARNING: %v\n&#34;, err)</pre></code></td></tr><tr><td>113</td><td><code><pre> case 1:</pre></code></td></tr><tr><td>114</td><td><code><pre> _, outErr = fmt.Printf(&#34;INFO: %v\n&#34;, err)</pre></code></td></tr><tr><td>115</td><td><code><pre> fmtLogs.Printf(&#34;INFO: %v\n&#34;, err)</pre></code></td></tr><tr><td>116</td><td><code><pre> //color.Blue(&#34;INFO: %v\n&#34;, err)</pre></code></td></tr><tr><td>117</td><td><code><pre> case 0:</pre></code></td></tr><tr><td>118</td><td><code><pre> _, outErr = fmt.Printf(&#34;%v\n&#34;, err)</pre></code></td></tr><tr><td>119</td><td><code><pre> fmtLogs.Printf(&#34;%v\n&#34;, err)</pre></code></td></tr><tr><td>120</td><td><code><pre> //color.White(&#34;%v\n&#34;, err)</pre></code></td></tr><tr><td>121</td><td><code><pre> }</pre></code></td></tr><tr><td>122</td><td><code><pre> return outErr</pre></code></td></tr><tr><td>123</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_UnderScoreString">func UnderScoreString</div><div class="info"><a href="#s_fn_UnderScoreString">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/utils.go</code>:</p></div><table class="listing">
<tr><td>102</td><td><code><pre>func UnderScoreString(str string) string {</pre></code></td></tr><tr><td>103</td><td><code><pre></pre></code></td></tr><tr><td>104</td><td><code><pre> // convert every letter to lower case</pre></code></td></tr><tr><td>105</td><td><code><pre> newStr := strings.ToLower(str)</pre></code></td></tr><tr><td>106</td><td><code><pre></pre></code></td></tr><tr><td>107</td><td><code><pre> // convert all spaces/tab to underscore</pre></code></td></tr><tr><td>108</td><td><code><pre> regExp := regexp.MustCompile(&#34;[[:space:][:blank:]]&#34;)</pre></code></td></tr><tr><td>109</td><td><code><pre> newStrByte := regExp.ReplaceAll([]byte(newStr), []byte(&#34;_&#34;))</pre></code></td></tr><tr><td>110</td><td><code><pre></pre></code></td></tr><tr><td>111</td><td><code><pre> regExp = regexp.MustCompile(&#34;`[^a-z0-9]`i&#34;)</pre></code></td></tr><tr><td>112</td><td><code><pre> newStrByte = regExp.ReplaceAll(newStrByte, []byte(&#34;_&#34;))</pre></code></td></tr><tr><td>113</td><td><code><pre></pre></code></td></tr><tr><td>114</td><td><code><pre> regExp = regexp.MustCompile(&#34;[!/&#39;]&#34;)</pre></code></td></tr><tr><td>115</td><td><code><pre> newStrByte = regExp.ReplaceAll(newStrByte, []byte(&#34;_&#34;))</pre></code></td></tr><tr><td>116</td><td><code><pre></pre></code></td></tr><tr><td>117</td><td><code><pre> // and remove underscore from beginning and ending</pre></code></td></tr><tr><td>118</td><td><code><pre></pre></code></td></tr><tr><td>119</td><td><code><pre> newStr = strings.TrimPrefix(string(newStrByte), &#34;_&#34;)</pre></code></td></tr><tr><td>120</td><td><code><pre> newStr = strings.TrimSuffix(newStr, &#34;_&#34;)</pre></code></td></tr><tr><td>121</td><td><code><pre></pre></code></td></tr><tr><td>122</td><td><code><pre> return newStr</pre></code></td></tr><tr><td>123</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_NewSHA1Hash">func NewSHA1Hash</div><div class="info"><a href="#s_fn_NewSHA1Hash">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/encryption.go</code>:</p></div><table class="listing">
<tr><td>33</td><td><code><pre>func NewSHA1Hash(n ...int) string {</pre></code></td></tr><tr><td>34</td><td><code><pre> noRandomCharacters := 32</pre></code></td></tr><tr><td>35</td><td><code><pre> if len(n) &gt; 0 {</pre></code></td></tr><tr><td>36</td><td><code><pre> noRandomCharacters = n[0]</pre></code></td></tr><tr><td>37</td><td><code><pre> }</pre></code></td></tr><tr><td>38</td><td><code><pre> randString := RandomString(noRandomCharacters)</pre></code></td></tr><tr><td>39</td><td><code><pre> hash := sha1.New()</pre></code></td></tr><tr><td>40</td><td><code><pre> hash.Write([]byte(randString))</pre></code></td></tr><tr><td>41</td><td><code><pre> bs := hash.Sum(nil)</pre></code></td></tr><tr><td>42</td><td><code><pre> return fmt.Sprintf(&#34;%x&#34;, bs)</pre></code></td></tr><tr><td>43</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_RandomString">func RandomString</div><div class="info"><a href="#s_fn_RandomString">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/encryption.go</code>:</p></div><table class="listing">
<tr><td>48</td><td><code><pre>func RandomString(n int) string {</pre></code></td></tr><tr><td>49</td><td><code><pre> b := make([]rune, n)</pre></code></td></tr><tr><td>50</td><td><code><pre> rand.Seed(time.Now().UnixNano())</pre></code></td></tr><tr><td>51</td><td><code><pre> for i := range b {</pre></code></td></tr><tr><td>52</td><td><code><pre> b[i] = characterRunes[rand.Intn(len(characterRunes))]</pre></code></td></tr><tr><td>53</td><td><code><pre> }</pre></code></td></tr><tr><td>54</td><td><code><pre> return string(b)</pre></code></td></tr><tr><td>55</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_DeleteFile">func DeleteFile</div><div class="info"><a href="#s_fn_DeleteFile">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/utils.go</code>:</p></div><table class="listing">
<tr><td>138</td><td><code><pre>func DeleteFile(file string) error {</pre></code></td></tr><tr><td>139</td><td><code><pre> Log(1, &#34;deleting file: &#34;+file)</pre></code></td></tr><tr><td>140</td><td><code><pre> err := os.Remove(file)</pre></code></td></tr><tr><td>141</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>142</td><td><code><pre> return err</pre></code></td></tr><tr><td>143</td><td><code><pre> }</pre></code></td></tr><tr><td>144</td><td><code><pre> return nil</pre></code></td></tr><tr><td>145</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_newLogRow">func newLogRow</div><div class="info"><a href="#s_fn_newLogRow">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/log.go</code>:</p></div><table class="listing">
<tr><td>158</td><td><code><pre>func newLogRow(line interface{}) (logRow *LogRow) {</pre></code></td></tr><tr><td>159</td><td><code><pre> logRow = new(LogRow)</pre></code></td></tr><tr><td>160</td><td><code><pre> logRow.Date = time.Now()</pre></code></td></tr><tr><td>161</td><td><code><pre> logRow.Line = line</pre></code></td></tr><tr><td>162</td><td><code><pre> return</pre></code></td></tr><tr><td>163</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Http">func Http</div><div class="info"><a href="#s_fn_Http">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/log.go</code>:</p></div><table class="listing">
<tr><td>126</td><td><code><pre>func Http(r *http.Request) string {</pre></code></td></tr><tr><td>127</td><td><code><pre> msg := fmt.Sprintf(&#34;%v (%v) | IP: %v&#34;, r.RequestURI, r.Method, r.Host)</pre></code></td></tr><tr><td>128</td><td><code><pre> fmt.Printf(&#34;WEB: %v\n&#34;, msg)</pre></code></td></tr><tr><td>129</td><td><code><pre> pushLastLine(msg)</pre></code></td></tr><tr><td>130</td><td><code><pre> return msg</pre></code></td></tr><tr><td>131</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Timezoner">func Timezoner</div><div class="info"><a href="#s_fn_Timezoner">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/utils.go</code>:</p></div><table class="listing">
<tr><td>72</td><td><code><pre>func Timezoner(t time.Time, zone float32) time.Time {</pre></code></td></tr><tr><td>73</td><td><code><pre> zoneInt := float32(3600) * (zone + 1)</pre></code></td></tr><tr><td>74</td><td><code><pre> loc := time.FixedZone(&#34;&#34;, int(zoneInt))</pre></code></td></tr><tr><td>75</td><td><code><pre> timez := t.In(loc)</pre></code></td></tr><tr><td>76</td><td><code><pre> return timez</pre></code></td></tr><tr><td>77</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_rotate">func rotate</div><div class="info"><a href="#s_fn_rotate">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/log.go</code>:</p></div><table class="listing">
<tr><td>81</td><td><code><pre>func rotate() {</pre></code></td></tr><tr><td>82</td><td><code><pre> c := make(chan os.Signal, 1)</pre></code></td></tr><tr><td>83</td><td><code><pre> signal.Notify(c, syscall.SIGHUP)</pre></code></td></tr><tr><td>84</td><td><code><pre> go func() {</pre></code></td></tr><tr><td>85</td><td><code><pre> for {</pre></code></td></tr><tr><td>86</td><td><code><pre> &lt;-c</pre></code></td></tr><tr><td>87</td><td><code><pre> ljLogger.Rotate()</pre></code></td></tr><tr><td>88</td><td><code><pre> }</pre></code></td></tr><tr><td>89</td><td><code><pre> }()</pre></code></td></tr><tr><td>90</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_@84:5">func @84:5</div><div class="info"><a href="#s_fn_@84:5">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/log.go</code>:</p></div><table class="listing">
<tr><td>84</td><td><code><pre>func() {</pre></code></td></tr><tr><td>85</td><td><code><pre> for {</pre></code></td></tr><tr><td>86</td><td><code><pre> &lt;-c</pre></code></td></tr><tr><td>87</td><td><code><pre> ljLogger.Rotate()</pre></code></td></tr><tr><td>88</td><td><code><pre> }</pre></code></td></tr><tr><td>89</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_Timestamp.Ago">func Timestamp.Ago</div><div class="info"><a href="#s_fn_Timestamp.Ago">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/utils.go</code>:</p></div><table class="listing">
<tr><td>94</td><td><code><pre>func (t Timestamp) Ago() string {</pre></code></td></tr><tr><td>95</td><td><code><pre> got, _ := timeago.TimeAgoWithTime(time.Now(), time.Time(t))</pre></code></td></tr><tr><td>96</td><td><code><pre> return got</pre></code></td></tr><tr><td>97</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_StringInt">func StringInt</div><div class="info"><a href="#s_fn_StringInt">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/utils.go</code>:</p></div><table class="listing">
<tr><td>47</td><td><code><pre>func StringInt(s string) int64 {</pre></code></td></tr><tr><td>48</td><td><code><pre> num, _ := strconv.Atoi(s)</pre></code></td></tr><tr><td>49</td><td><code><pre> return int64(num)</pre></code></td></tr><tr><td>50</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_HashPassword">func HashPassword</div><div class="info"><a href="#s_fn_HashPassword">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/encryption.go</code>:</p></div><table class="listing">
<tr><td>27</td><td><code><pre>func HashPassword(password string) string {</pre></code></td></tr><tr><td>28</td><td><code><pre> bytes, _ := bcrypt.GenerateFromPassword([]byte(password), 14)</pre></code></td></tr><tr><td>29</td><td><code><pre> return string(bytes)</pre></code></td></tr><tr><td>30</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_DeleteDirectory">func DeleteDirectory</div><div class="info"><a href="#s_fn_DeleteDirectory">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/utils.go</code>:</p></div><table class="listing">
<tr><td>149</td><td><code><pre>func DeleteDirectory(directory string) error {</pre></code></td></tr><tr><td>150</td><td><code><pre> return os.RemoveAll(directory)</pre></code></td></tr><tr><td>151</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_rev">func rev</div><div class="info"><a href="#s_fn_rev">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/time.go</code>:</p></div><table class="listing">
<tr><td>77</td><td><code><pre>func rev(f float64) float64 {</pre></code></td></tr><tr><td>78</td><td><code><pre> return f * -1</pre></code></td></tr><tr><td>79</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_pushLastLine">func pushLastLine</div><div class="info"><a href="#s_fn_pushLastLine">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/log.go</code>:</p></div><table class="listing">
<tr><td>133</td><td><code><pre>func pushLastLine(line interface{}) {</pre></code></td></tr><tr><td>134</td><td><code><pre> LockLines.Lock()</pre></code></td></tr><tr><td>135</td><td><code><pre> defer LockLines.Unlock()</pre></code></td></tr><tr><td>136</td><td><code><pre> LastLines = append(LastLines, newLogRow(line))</pre></code></td></tr><tr><td>137</td><td><code><pre> // We want to store max 1000 lines in memory (for /logs page).</pre></code></td></tr><tr><td>138</td><td><code><pre> for len(LastLines) &gt; 1000 {</pre></code></td></tr><tr class="miss"><td>139</td><td><code><pre> LastLines = LastLines[1:]</pre></code></td></tr><tr><td>140</td><td><code><pre> }</pre></code></td></tr><tr><td>141</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_InitLogs">func InitLogs</div><div class="info"><a href="#s_fn_InitLogs">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/log.go</code>:</p></div><table class="listing">
<tr><td>58</td><td><code><pre>func InitLogs() error {</pre></code></td></tr><tr><td>59</td><td><code><pre> err := createLog(Directory)</pre></code></td></tr><tr><td>60</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>61</td><td><code><pre> return err</pre></code></td></tr><tr><td>62</td><td><code><pre> }</pre></code></td></tr><tr><td>63</td><td><code><pre> logFile, err = os.OpenFile(Directory+&#34;/logs/statup.log&#34;, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0755)</pre></code></td></tr><tr><td>64</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>65</td><td><code><pre> log.Printf(&#34;ERROR opening file: %v&#34;, err)</pre></code></td></tr><tr class="miss"><td>66</td><td><code><pre> return err</pre></code></td></tr><tr><td>67</td><td><code><pre> }</pre></code></td></tr><tr><td>68</td><td><code><pre> ljLogger = &amp;lumberjack.Logger{</pre></code></td></tr><tr><td>69</td><td><code><pre> Filename: Directory + &#34;/logs/statup.log&#34;,</pre></code></td></tr><tr><td>70</td><td><code><pre> MaxSize: 16,</pre></code></td></tr><tr><td>71</td><td><code><pre> MaxBackups: 3,</pre></code></td></tr><tr><td>72</td><td><code><pre> MaxAge: 28,</pre></code></td></tr><tr><td>73</td><td><code><pre> }</pre></code></td></tr><tr><td>74</td><td><code><pre> fmtLogs = log.New(logFile, &#34;&#34;, log.Ldate|log.Ltime)</pre></code></td></tr><tr><td>75</td><td><code><pre> log.SetOutput(ljLogger)</pre></code></td></tr><tr><td>76</td><td><code><pre> rotate()</pre></code></td></tr><tr><td>77</td><td><code><pre> LastLines = make([]*LogRow, 0)</pre></code></td></tr><tr><td>78</td><td><code><pre> return err</pre></code></td></tr><tr><td>79</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_init">func init</div><div class="info"><a href="#s_fn_init">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/utils.go</code>:</p></div><table class="listing">
<tr><td>38</td><td><code><pre>func init() {</pre></code></td></tr><tr><td>39</td><td><code><pre> if os.Getenv(&#34;STATUP_DIR&#34;) != &#34;&#34; {</pre></code></td></tr><tr><td>40</td><td><code><pre> Directory = os.Getenv(&#34;STATUP_DIR&#34;)</pre></code></td></tr><tr><td>41</td><td><code><pre> } else {</pre></code></td></tr><tr class="miss"><td>42</td><td><code><pre> Directory = dir()</pre></code></td></tr><tr><td>43</td><td><code><pre> }</pre></code></td></tr><tr><td>44</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_createLog">func createLog</div><div class="info"><a href="#s_fn_createLog">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/log.go</code>:</p></div><table class="listing">
<tr><td>39</td><td><code><pre>func createLog(dir string) error {</pre></code></td></tr><tr><td>40</td><td><code><pre> var err error</pre></code></td></tr><tr><td>41</td><td><code><pre> _, err = os.Stat(dir + &#34;/logs&#34;)</pre></code></td></tr><tr><td>42</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>43</td><td><code><pre> if os.IsNotExist(err) {</pre></code></td></tr><tr class="miss"><td>44</td><td><code><pre> os.Mkdir(dir+&#34;/logs&#34;, 0777)</pre></code></td></tr><tr><td>45</td><td><code><pre> } else {</pre></code></td></tr><tr class="miss"><td>46</td><td><code><pre> return err</pre></code></td></tr><tr><td>47</td><td><code><pre> }</pre></code></td></tr><tr><td>48</td><td><code><pre> }</pre></code></td></tr><tr><td>49</td><td><code><pre> file, err := os.Create(dir + &#34;/logs/statup.log&#34;)</pre></code></td></tr><tr><td>50</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>51</td><td><code><pre> return err</pre></code></td></tr><tr><td>52</td><td><code><pre> }</pre></code></td></tr><tr><td>53</td><td><code><pre> defer file.Close()</pre></code></td></tr><tr><td>54</td><td><code><pre> return err</pre></code></td></tr><tr><td>55</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_FileExists">func FileExists</div><div class="info"><a href="#s_fn_FileExists">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/utils.go</code>:</p></div><table class="listing">
<tr><td>127</td><td><code><pre>func FileExists(name string) bool {</pre></code></td></tr><tr><td>128</td><td><code><pre> if _, err := os.Stat(name); err != nil {</pre></code></td></tr><tr class="miss"><td>129</td><td><code><pre> if os.IsNotExist(err) {</pre></code></td></tr><tr class="miss"><td>130</td><td><code><pre> return false</pre></code></td></tr><tr><td>131</td><td><code><pre> }</pre></code></td></tr><tr><td>132</td><td><code><pre> }</pre></code></td></tr><tr><td>133</td><td><code><pre> return true</pre></code></td></tr><tr><td>134</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_DurationReadable">func DurationReadable</div><div class="info"><a href="#s_fn_DurationReadable">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/utils.go</code>:</p></div><table class="listing">
<tr><td>213</td><td><code><pre>func DurationReadable(d time.Duration) string {</pre></code></td></tr><tr><td>214</td><td><code><pre> if d.Hours() &gt;= 1 {</pre></code></td></tr><tr class="miss"><td>215</td><td><code><pre> return fmt.Sprintf(&#34;%0.0f hours&#34;, d.Hours())</pre></code></td></tr><tr><td>216</td><td><code><pre> } else if d.Minutes() &gt;= 1 {</pre></code></td></tr><tr><td>217</td><td><code><pre> return fmt.Sprintf(&#34;%0.0f minutes&#34;, d.Minutes())</pre></code></td></tr><tr class="miss"><td>218</td><td><code><pre> } else if d.Seconds() &gt;= 1 {</pre></code></td></tr><tr class="miss"><td>219</td><td><code><pre> return fmt.Sprintf(&#34;%0.0f seconds&#34;, d.Seconds())</pre></code></td></tr><tr><td>220</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>221</td><td><code><pre> return d.String()</pre></code></td></tr><tr><td>222</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_FormatDuration">func FormatDuration</div><div class="info"><a href="#s_fn_FormatDuration">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/time.go</code>:</p></div><table class="listing">
<tr><td>24</td><td><code><pre>func FormatDuration(d time.Duration) string {</pre></code></td></tr><tr><td>25</td><td><code><pre> var out string</pre></code></td></tr><tr><td>26</td><td><code><pre> if d.Hours() &gt;= 24 {</pre></code></td></tr><tr class="miss"><td>27</td><td><code><pre> out = fmt.Sprintf(&#34;%0.0f day&#34;, d.Hours()/24)</pre></code></td></tr><tr class="miss"><td>28</td><td><code><pre> if (d.Hours() / 24) &gt;= 2 {</pre></code></td></tr><tr class="miss"><td>29</td><td><code><pre> out += &#34;s&#34;</pre></code></td></tr><tr><td>30</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>31</td><td><code><pre> return out</pre></code></td></tr><tr><td>32</td><td><code><pre> } else if d.Hours() &gt;= 1 {</pre></code></td></tr><tr class="miss"><td>33</td><td><code><pre> out = fmt.Sprintf(&#34;%0.0f hour&#34;, d.Hours())</pre></code></td></tr><tr class="miss"><td>34</td><td><code><pre> if d.Hours() &gt;= 2 {</pre></code></td></tr><tr class="miss"><td>35</td><td><code><pre> out += &#34;s&#34;</pre></code></td></tr><tr><td>36</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>37</td><td><code><pre> return out</pre></code></td></tr><tr><td>38</td><td><code><pre> } else if d.Minutes() &gt;= 1 {</pre></code></td></tr><tr><td>39</td><td><code><pre> out = fmt.Sprintf(&#34;%0.0f minute&#34;, d.Minutes())</pre></code></td></tr><tr><td>40</td><td><code><pre> if d.Minutes() &gt;= 2 {</pre></code></td></tr><tr><td>41</td><td><code><pre> out += &#34;s&#34;</pre></code></td></tr><tr><td>42</td><td><code><pre> }</pre></code></td></tr><tr><td>43</td><td><code><pre> return out</pre></code></td></tr><tr><td>44</td><td><code><pre> } else if d.Seconds() &gt;= 1 {</pre></code></td></tr><tr class="miss"><td>45</td><td><code><pre> out = fmt.Sprintf(&#34;%0.0f second&#34;, d.Seconds())</pre></code></td></tr><tr class="miss"><td>46</td><td><code><pre> if d.Seconds() &gt;= 2 {</pre></code></td></tr><tr class="miss"><td>47</td><td><code><pre> out += &#34;s&#34;</pre></code></td></tr><tr><td>48</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>49</td><td><code><pre> return out</pre></code></td></tr><tr><td>50</td><td><code><pre> } else if rev(d.Hours()) &gt;= 24 {</pre></code></td></tr><tr class="miss"><td>51</td><td><code><pre> out = fmt.Sprintf(&#34;%0.0f day&#34;, rev(d.Hours()/24))</pre></code></td></tr><tr class="miss"><td>52</td><td><code><pre> if rev(d.Hours()/24) &gt;= 2 {</pre></code></td></tr><tr class="miss"><td>53</td><td><code><pre> out += &#34;s&#34;</pre></code></td></tr><tr><td>54</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>55</td><td><code><pre> return out</pre></code></td></tr><tr><td>56</td><td><code><pre> } else if rev(d.Hours()) &gt;= 1 {</pre></code></td></tr><tr class="miss"><td>57</td><td><code><pre> out = fmt.Sprintf(&#34;%0.0f hour&#34;, rev(d.Hours()))</pre></code></td></tr><tr class="miss"><td>58</td><td><code><pre> if rev(d.Hours()) &gt;= 2 {</pre></code></td></tr><tr class="miss"><td>59</td><td><code><pre> out += &#34;s&#34;</pre></code></td></tr><tr><td>60</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>61</td><td><code><pre> return out</pre></code></td></tr><tr><td>62</td><td><code><pre> } else if rev(d.Minutes()) &gt;= 1 {</pre></code></td></tr><tr><td>63</td><td><code><pre> out = fmt.Sprintf(&#34;%0.0f minute&#34;, rev(d.Minutes()))</pre></code></td></tr><tr><td>64</td><td><code><pre> if rev(d.Minutes()) &gt;= 2 {</pre></code></td></tr><tr class="miss"><td>65</td><td><code><pre> out += &#34;s&#34;</pre></code></td></tr><tr><td>66</td><td><code><pre> }</pre></code></td></tr><tr><td>67</td><td><code><pre> return out</pre></code></td></tr><tr><td>68</td><td><code><pre> } else {</pre></code></td></tr><tr class="miss"><td>69</td><td><code><pre> out = fmt.Sprintf(&#34;%0.0f second&#34;, rev(d.Seconds()))</pre></code></td></tr><tr class="miss"><td>70</td><td><code><pre> if rev(d.Seconds()) &gt;= 2 {</pre></code></td></tr><tr class="miss"><td>71</td><td><code><pre> out += &#34;s&#34;</pre></code></td></tr><tr><td>72</td><td><code><pre> }</pre></code></td></tr><tr><td>73</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>74</td><td><code><pre> return out</pre></code></td></tr><tr><td>75</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_ToString">func ToString</div><div class="info"><a href="#s_fn_ToString">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/utils.go</code>:</p></div><table class="listing">
<tr><td>53</td><td><code><pre>func ToString(s interface{}) string {</pre></code></td></tr><tr><td>54</td><td><code><pre> switch v := s.(type) {</pre></code></td></tr><tr><td>55</td><td><code><pre> case int, int32, int64:</pre></code></td></tr><tr><td>56</td><td><code><pre> return fmt.Sprintf(&#34;%v&#34;, v)</pre></code></td></tr><tr><td>57</td><td><code><pre> case float32, float64:</pre></code></td></tr><tr class="miss"><td>58</td><td><code><pre> return fmt.Sprintf(&#34;%v&#34;, v)</pre></code></td></tr><tr><td>59</td><td><code><pre> case []byte:</pre></code></td></tr><tr class="miss"><td>60</td><td><code><pre> return string(v)</pre></code></td></tr><tr><td>61</td><td><code><pre> case bool:</pre></code></td></tr><tr class="miss"><td>62</td><td><code><pre> if v {</pre></code></td></tr><tr class="miss"><td>63</td><td><code><pre> return &#34;true&#34;</pre></code></td></tr><tr><td>64</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>65</td><td><code><pre> return &#34;false&#34;</pre></code></td></tr><tr><td>66</td><td><code><pre> default:</pre></code></td></tr><tr class="miss"><td>67</td><td><code><pre> return fmt.Sprintf(&#34;%v&#34;, v)</pre></code></td></tr><tr><td>68</td><td><code><pre> }</pre></code></td></tr><tr><td>69</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Command">func Command</div><div class="info"><a href="#s_fn_Command">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/utils.go</code>:</p></div><table class="listing">
<tr><td>155</td><td><code><pre>func Command(cmd string) (string, string, error) {</pre></code></td></tr><tr class="miss"><td>156</td><td><code><pre> Log(1, &#34;running command: &#34;+cmd)</pre></code></td></tr><tr class="miss"><td>157</td><td><code><pre> testCmd := exec.Command(&#34;sh&#34;, &#34;-c&#34;, cmd)</pre></code></td></tr><tr class="miss"><td>158</td><td><code><pre> var stdout, stderr []byte</pre></code></td></tr><tr class="miss"><td>159</td><td><code><pre> var errStdout, errStderr error</pre></code></td></tr><tr class="miss"><td>160</td><td><code><pre> stdoutIn, _ := testCmd.StdoutPipe()</pre></code></td></tr><tr class="miss"><td>161</td><td><code><pre> stderrIn, _ := testCmd.StderrPipe()</pre></code></td></tr><tr class="miss"><td>162</td><td><code><pre> testCmd.Start()</pre></code></td></tr><tr><td>163</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>164</td><td><code><pre> go func() {</pre></code></td></tr><tr><td>165</td><td><code><pre> stdout, errStdout = copyAndCapture(os.Stdout, stdoutIn)</pre></code></td></tr><tr><td>166</td><td><code><pre> }()</pre></code></td></tr><tr><td>167</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>168</td><td><code><pre> go func() {</pre></code></td></tr><tr><td>169</td><td><code><pre> stderr, errStderr = copyAndCapture(os.Stderr, stderrIn)</pre></code></td></tr><tr><td>170</td><td><code><pre> }()</pre></code></td></tr><tr><td>171</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>172</td><td><code><pre> err := testCmd.Wait()</pre></code></td></tr><tr class="miss"><td>173</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>174</td><td><code><pre> return &#34;&#34;, &#34;&#34;, err</pre></code></td></tr><tr><td>175</td><td><code><pre> }</pre></code></td></tr><tr><td>176</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>177</td><td><code><pre> if errStdout != nil || errStderr != nil {</pre></code></td></tr><tr class="miss"><td>178</td><td><code><pre> return &#34;&#34;, &#34;&#34;, errors.New(&#34;failed to capture stdout or stderr&#34;)</pre></code></td></tr><tr><td>179</td><td><code><pre> }</pre></code></td></tr><tr><td>180</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>181</td><td><code><pre> outStr, errStr := string(stdout), string(stderr)</pre></code></td></tr><tr class="miss"><td>182</td><td><code><pre> return outStr, errStr, err</pre></code></td></tr><tr><td>183</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_copyAndCapture">func copyAndCapture</div><div class="info"><a href="#s_fn_copyAndCapture">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/utils.go</code>:</p></div><table class="listing">
<tr><td>186</td><td><code><pre>func copyAndCapture(w io.Writer, r io.Reader) ([]byte, error) {</pre></code></td></tr><tr class="miss"><td>187</td><td><code><pre> var out []byte</pre></code></td></tr><tr class="miss"><td>188</td><td><code><pre> buf := make([]byte, 1024, 1024)</pre></code></td></tr><tr class="miss"><td>189</td><td><code><pre> for {</pre></code></td></tr><tr class="miss"><td>190</td><td><code><pre> n, err := r.Read(buf[:])</pre></code></td></tr><tr class="miss"><td>191</td><td><code><pre> if n &gt; 0 {</pre></code></td></tr><tr class="miss"><td>192</td><td><code><pre> d := buf[:n]</pre></code></td></tr><tr class="miss"><td>193</td><td><code><pre> out = append(out, d...)</pre></code></td></tr><tr class="miss"><td>194</td><td><code><pre> _, err := w.Write(d)</pre></code></td></tr><tr class="miss"><td>195</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>196</td><td><code><pre> return out, err</pre></code></td></tr><tr><td>197</td><td><code><pre> }</pre></code></td></tr><tr><td>198</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>199</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>200</td><td><code><pre> // Read returns io.EOF at the end of file, which is not an error for us</pre></code></td></tr><tr class="miss"><td>201</td><td><code><pre> if err == io.EOF {</pre></code></td></tr><tr class="miss"><td>202</td><td><code><pre> err = nil</pre></code></td></tr><tr><td>203</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>204</td><td><code><pre> return out, err</pre></code></td></tr><tr><td>205</td><td><code><pre> }</pre></code></td></tr><tr><td>206</td><td><code><pre> }</pre></code></td></tr><tr><td>207</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_GetLastLine">func GetLastLine</div><div class="info"><a href="#s_fn_GetLastLine">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/log.go</code>:</p></div><table class="listing">
<tr><td>144</td><td><code><pre>func GetLastLine() *LogRow {</pre></code></td></tr><tr class="miss"><td>145</td><td><code><pre> LockLines.Lock()</pre></code></td></tr><tr class="miss"><td>146</td><td><code><pre> defer LockLines.Unlock()</pre></code></td></tr><tr class="miss"><td>147</td><td><code><pre> if len(LastLines) &gt; 0 {</pre></code></td></tr><tr class="miss"><td>148</td><td><code><pre> return LastLines[len(LastLines)-1]</pre></code></td></tr><tr><td>149</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>150</td><td><code><pre> return nil</pre></code></td></tr><tr><td>151</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_LogRow.lineAsString">func LogRow.lineAsString</div><div class="info"><a href="#s_fn_LogRow.lineAsString">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/log.go</code>:</p></div><table class="listing">
<tr><td>165</td><td><code><pre>func (o *LogRow) lineAsString() string {</pre></code></td></tr><tr class="miss"><td>166</td><td><code><pre> switch v := o.Line.(type) {</pre></code></td></tr><tr><td>167</td><td><code><pre> case string:</pre></code></td></tr><tr class="miss"><td>168</td><td><code><pre> return v</pre></code></td></tr><tr><td>169</td><td><code><pre> case error:</pre></code></td></tr><tr class="miss"><td>170</td><td><code><pre> return v.Error()</pre></code></td></tr><tr><td>171</td><td><code><pre> case []byte:</pre></code></td></tr><tr class="miss"><td>172</td><td><code><pre> return string(v)</pre></code></td></tr><tr><td>173</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>174</td><td><code><pre> return &#34;&#34;</pre></code></td></tr><tr><td>175</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_dir">func dir</div><div class="info"><a href="#s_fn_dir">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/utils.go</code>:</p></div><table class="listing">
<tr><td>80</td><td><code><pre>func dir() string {</pre></code></td></tr><tr class="miss"><td>81</td><td><code><pre> dir, err := os.Getwd()</pre></code></td></tr><tr class="miss"><td>82</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>83</td><td><code><pre> return &#34;.&#34;</pre></code></td></tr><tr><td>84</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>85</td><td><code><pre> return dir</pre></code></td></tr><tr><td>86</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_SaveFile">func SaveFile</div><div class="info"><a href="#s_fn_SaveFile">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/utils.go</code>:</p></div><table class="listing">
<tr><td>226</td><td><code><pre>func SaveFile(filename string, data []byte) error {</pre></code></td></tr><tr class="miss"><td>227</td><td><code><pre> err := ioutil.WriteFile(filename, data, 0644)</pre></code></td></tr><tr class="miss"><td>228</td><td><code><pre> return err</pre></code></td></tr><tr><td>229</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_@164:5">func @164:5</div><div class="info"><a href="#s_fn_@164:5">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/utils.go</code>:</p></div><table class="listing">
<tr><td>164</td><td><code><pre>func() {</pre></code></td></tr><tr class="miss"><td>165</td><td><code><pre> stdout, errStdout = copyAndCapture(os.Stdout, stdoutIn)</pre></code></td></tr><tr><td>166</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_@168:5">func @168:5</div><div class="info"><a href="#s_fn_@168:5">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/utils.go</code>:</p></div><table class="listing">
<tr><td>168</td><td><code><pre>func() {</pre></code></td></tr><tr class="miss"><td>169</td><td><code><pre> stderr, errStderr = copyAndCapture(os.Stderr, stderrIn)</pre></code></td></tr><tr><td>170</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_LogRow.FormatForHtml">func LogRow.FormatForHtml</div><div class="info"><a href="#s_fn_LogRow.FormatForHtml">Back</a><p>In <code>/Users/hunterlong/go/src/github.com/hunterlong/statup/utils/log.go</code>:</p></div><table class="listing">
<tr><td>177</td><td><code><pre>func (o *LogRow) FormatForHtml() string {</pre></code></td></tr><tr class="miss"><td>178</td><td><code><pre> return fmt.Sprintf(&#34;%s: %s&#34;, o.Date.Format(&#34;2006-01-02 15:04:05&#34;), o.lineAsString())</pre></code></td></tr><tr><td>179</td><td><code><pre>}</pre></code></td></tr></table>
<!-- Can be parsed by external script
PACKAGE:github.com/hunterlong/statup/utils DONE:54.76
-->
<div id="summaryWrapper"><div class="package">Report Total</div>
<div id="totalcov">54.53%</div>
</div>
</body>