LoadTesting

Remove .pyc

6/4/2018 2:12:59 PM

Details

.gitignore 1(+1 -0)

diff --git a/.gitignore b/.gitignore
index 1397432..7934ec3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
 *.pkl
+*.pyc

_reporting/process.py 113(+113 -0)

diff --git a/_reporting/process.py b/_reporting/process.py
new file mode 100644
index 0000000..605b41c
--- /dev/null
+++ b/_reporting/process.py
@@ -0,0 +1,113 @@
+import numpy as np
+import pickle
+from datetime import tzinfo, timedelta, datetime
+from bokeh.layouts import gridplot
+from bokeh.plotting import figure, show, output_file
+from bokeh.sampledata.stocks import AAPL, GOOG, IBM, MSFT
+from bokeh.charts import Step
+from bokeh.models import Span
+
+
+
+class FixedOffset(tzinfo):
+    """Fixed offset in minutes east from UTC."""
+
+    def __init__(self, offset, name):
+        self.__offset = timedelta(minutes = offset)
+        self.__name = name
+
+    def utcoffset(self, dt):
+        return self.__offset
+
+    def tzname(self, dt):
+        return self.__name
+
+    def dst(self, dt):
+        return ZERO
+
+f = open('../results/P15_PerfMon.csv', 'r')
+l = f.readline()
+l = f.readline()
+perfMonTimes = []
+anonUsers = []
+while l:
+	v = l.split(",")
+	if len(v) >= 13:
+		timeStr = v[0].replace("\"",'')
+		myTime = datetime.strptime(timeStr, "%m/%d/%Y %H:%M:%S.%f")
+		myTime.replace(tzinfo=FixedOffset(-7, 'PDT'))
+		val = float(v[12].replace("\"",''))
+		perfMonTimes.append((myTime - datetime(1970,1,1)).total_seconds())
+		anonUsers.append(val)
+		l = f.readline()
+f.close()
+
+p5 = figure()
+p5.line(perfMonTimes, anonUsers)
+
+
+
+
+
+def np_datetime(x):
+	return x
+    #return np.array(x, dtype=np.datetime64)
+
+f = open('../results/P15_LocustCustom_U11Mx2000Mn1000H0.05_results.pkl', 'rb')
+results = pickle.load(f)
+print len(results['req_errors'])
+
+times = []
+rates = []
+for r in results['throughput']:
+	times.append(r['time'])
+	rates.append(r['rate'])
+
+
+# p1 = figure(x_axis_type="datetime", title="Throughput")
+# p1.grid.grid_line_alpha=0.3
+# p1.xaxis.axis_label = 'Time'
+# p1.yaxis.axis_label = 'Transfer Rate Bytes/sec'
+
+# p1.line(np_datetime(times), rates, color='#A6CEE3', legend='Throughput Bytes/sec')
+
+#p2 = Step(results['downloads'],y=['downloads'],x='time')
+
+times2 = []
+lens = []
+for r in results['req_success']:
+	times2.append(r['time'])
+	lens.append(r['len'])
+
+p3 = figure(x_axis_type="datetime", title="request rates")
+p3.circle(np_datetime(times2), lens)
+
+
+
+times3 = []
+lens = []
+for r in results['req_success']:
+	times3.append(r['timestamp'])
+	lens.append(r['time'])
+
+p4 = figure(x_axis_type="datetime", title="request rates")
+p4.circle(np_datetime(times3), lens)
+# times2 = []
+# dls = []
+# for r in results['downloads']:
+# 	times2.append(r['time'])
+# 	dls.append(r['downloads'])
+
+# p2 = figure(x_axis_type="datetime", title="Concurrent Downloads")
+# p2.xaxis.axis_label = 'Time'
+# p2.yaxis.axis_label = 'Number of Concurrent Downloads'
+# p2.line(times2, dls)
+# p2.circle(aapl_dates, aapl, size=4, legend='close',
+#           color='darkgrey', alpha=0.2)
+
+# p2.line(aapl_dates, aapl_avg, legend='avg', color='navy')
+# p2.legend.location = "top_left"
+print "Will save"
+output_file("results.html", title="stocks.py example")
+
+show(gridplot([[p3,p4]], plot_width=400, plot_height=400))  # open a browser
\ No newline at end of file
diff --git a/_reporting/process2.py b/_reporting/process2.py
new file mode 100644
index 0000000..0ee8214
--- /dev/null
+++ b/_reporting/process2.py
@@ -0,0 +1,11 @@
+import numpy as np
+import pickle
+from datetime import tzinfo, timedelta, datetime
+from bokeh.layouts import gridplot
+from bokeh.plotting import figure, show, output_file
+from bokeh.sampledata.stocks import AAPL, GOOG, IBM, MSFT
+from bokeh.charts import Step
+from bokeh.models import Span
+
+f = open('../results/1496774562_results.pkl', 'rb')
+results = pickle.load(f)
diff --git a/_reporting/process3.py b/_reporting/process3.py
new file mode 100644
index 0000000..2c90fe7
--- /dev/null
+++ b/_reporting/process3.py
@@ -0,0 +1,91 @@
+import numpy as np
+import pickle
+from datetime import tzinfo, timedelta, datetime
+from bokeh.layouts import gridplot
+from bokeh.plotting import figure, show, output_file
+from bokeh.sampledata.stocks import AAPL, GOOG, IBM, MSFT
+from bokeh.charts import Step
+from bokeh.models import LinearAxis, Range1d
+
+#This does overlay plot
+
+
+class FixedOffset(tzinfo):
+    """Fixed offset in minutes east from UTC."""
+
+    def __init__(self, offset, name):
+        self.__offset = timedelta(minutes = offset)
+        self.__name = name
+
+    def utcoffset(self, dt):
+        return self.__offset
+
+    def tzname(self, dt):
+        return self.__name
+
+    def dst(self, dt):
+        return ZERO
+
+f = open('../results/P15_PerfMon.csv', 'r')
+l = f.readline()
+l = f.readline()
+perfMon = {'timestamp':[],'anonUsers':[]}
+
+while l:
+	v = l.split(",")
+	if len(v) >= 13:
+		timeStr = v[0].replace("\"",'')
+		myTime = datetime.strptime(timeStr, "%m/%d/%Y %H:%M:%S.%f") + timedelta(hours=7)
+		#myTime.replace(tzinfo=FixedOffset(-7, 'PDT'))
+		val = float(v[12].replace("\"",''))
+		perfMon['timestamp'].append((myTime - datetime(1970,1,1)).total_seconds())
+		perfMon['anonUsers'].append(val)
+	l = f.readline()
+f.close()
+
+
+f = open('../results/P15_LocustCustom_queries only slow climb_U11Mx2000Mn1000H0.05_results.pkl', 'rb')
+results = pickle.load(f)
+f.close()
+print len(results['req_errors'])
+
+throughput = {'time':[], 'rate':[]}
+for r in results['throughput']:
+	throughput['time'].append(r['time'])
+	throughput['rate'].append(r['rate'])
+
+req_success = {'timestamp':[],'req_len':[],'req_duration':[]}
+for r in results['req_success']:
+	req_success['req_duration'].append(r['time'])
+	req_success['req_len'].append(r['len'])
+	req_success['timestamp'].append(r['timestamp'])
+
+
+s1 = figure(plot_width=1000, plot_height=600, y_axis_label='Request Duration')
+s1.circle(req_success['timestamp'],req_success['req_duration'], size=4, legend='Request Duration', color='darkgrey', alpha=0.2)
+
+s1.extra_y_ranges = {"User Count": Range1d(start=0, end= max(perfMon['anonUsers']))}
+s1.line(perfMon['timestamp'],perfMon['anonUsers'], legend="Anon Users", y_range_name='User Count')
+s1.add_layout(LinearAxis(y_range_name="User Count", axis_label='Anon Users'), 'left')
+
+s1.legend.click_policy="hide"
+
+# times2 = []
+# dls = []
+# for r in results['downloads']:
+# 	times2.append(r['time'])
+# 	dls.append(r['downloads'])
+
+# p2 = figure(x_axis_type="datetime", title="Concurrent Downloads")
+# p2.xaxis.axis_label = 'Time'
+# p2.yaxis.axis_label = 'Number of Concurrent Downloads'
+# p2.line(, dls)
+# p2.circle(aapl_dates, aapl, size=4, legend='close',
+#           color='darkgrey', alpha=0.2)
+
+# p2.line(aapl_dates, aapl_avg, legend='avg', color='navy')
+# p2.legend.location = "top_left"
+print "Will save"
+output_file("results.html", title="Load Test Measurements")
+
+show(s1)  # open a browser
\ No newline at end of file

_reporting/process4.py 187(+187 -0)

diff --git a/_reporting/process4.py b/_reporting/process4.py
new file mode 100644
index 0000000..0f349f6
--- /dev/null
+++ b/_reporting/process4.py
@@ -0,0 +1,187 @@
+import numpy as np
+import pickle
+from datetime import tzinfo, timedelta, datetime
+from bokeh.layouts import gridplot, widgetbox
+from bokeh.plotting import figure, show, output_file
+from bokeh.sampledata.stocks import AAPL, GOOG, IBM, MSFT
+from bokeh.charts import Step
+from bokeh.models import LinearAxis, Range1d, Span, Label
+from bokeh.models.widgets import Paragraph
+from bokeh.io import reset_output
+import json
+import glob
+
+
+
+
+def generateReport(jsonFileName):
+	f = open(jsonFileName,"rb")
+	data = json.load(f)
+	f.close()
+
+	pwidth = data.get('pwidth',400)
+	pheight = data.get('pheight',500)
+	perfMonFile=data.get('perfMonFile','')
+	dataFile = data.get('locustFile','')
+
+
+	perfMon = {'timestamp':[],'anonUsers':[]}
+	if perfMonFile != "":
+		f = open(perfMonFile, 'r')
+		l = f.readline()
+		l = f.readline()
+
+		while l:
+			v = l.split(",")
+			if len(v) >= 13:
+				timeStr = v[0].replace("\"",'')
+				myTime = datetime.strptime(timeStr, "%m/%d/%Y %H:%M:%S.%f") + timedelta(hours=7)
+				#myTime.replace(tzinfo=FixedOffset(-7, 'PDT'))
+				val = float(v[12].replace("\"",''))
+				perfMon['timestamp'].append((myTime - datetime(1970,1,1)).total_seconds())
+				perfMon['anonUsers'].append(val)
+			l = f.readline()
+		f.close()
+
+	throughput = {'time':[], 'rate':[], 'mean':[], 'median':[]}
+	req_success = {'timestamp':[],'req_len':[],'req_duration':[], 'mean':[], 'median':[], 'rate':[]}
+	downloads = {'time':[], 'downloads':[]}
+
+	if dataFile != "":
+		f = open(dataFile, 'rb')
+		results = pickle.load(f)
+		f.close()
+		print len(results['req_errors'])
+
+		for r in results['throughput']:
+			throughput['time'].append(r['time'])
+			throughput['rate'].append(r['rate']/1024.0)
+		if len(throughput['time'])>1:
+			throughput['time'].pop(0)
+			throughput['rate'].pop(0)
+
+		for r in results['req_success']:
+			req_success['req_duration'].append(r['time']/1000.0)
+			req_success['req_len'].append(r['len']/1024.0)
+			req_success['timestamp'].append(r['timestamp'])
+			req_success['rate'].append(req_success['req_len'][-1] / req_success['req_duration'][-1])
+
+
+		if len(results['downloads']) > 0:
+			for i in range(len(results['downloads'])):
+				r = results['downloads'][i]
+				downloads['time'].append(r['time'])
+				downloads['downloads'].append(r['downloads'])
+				if i < len(results['downloads'])-1:
+					downloads['time'].append(results['downloads'][i+1]['time'])
+					downloads['downloads'].append(r['downloads'])
+			downloads['time'].append(max(req_success['timestamp']))
+			downloads['downloads'].append(results['downloads'][-1]['downloads'])
+
+	minTime = 9999999999999
+	if len(perfMon['timestamp'] )>0:
+		minTime = min(perfMon['timestamp'])
+	if len(throughput['time'])>0:
+		minTime = min(minTime, min(throughput['time']))
+	if len(req_success['timestamp'])>0:
+		minTime = min(minTime, min(req_success['timestamp']))
+	if len(downloads['time'])>0:
+		minTime = min(minTime, min(downloads['time']))
+
+	#shift times
+	for i in range(len(perfMon['timestamp'])):
+		perfMon['timestamp'][i] -= minTime
+	for r in range(len(throughput['time'])):
+		throughput['time'][r] -= minTime
+	for r in range(len(downloads['time'])):
+		downloads['time'][r]-= minTime
+	for r in range(len(req_success['timestamp'])):
+		req_success['timestamp'][r] -= minTime
+
+
+	row1 = []
+	kwargs={'plot_width':pwidth,'plot_height':pheight}
+	if len(req_success['timestamp'])>0:
+		# s5 = figure( x_axis_label='Size (KB)', y_axis_label='Duration (sec)', **kwargs)
+		# s5.circle(req_success['req_len'],req_success['req_duration'])
+
+
+		s1 = figure( y_axis_label='Duration (sec)', title='Request Duration', x_axis_label='Test Time (s)',**kwargs)
+		
+		for i in range(1, len(req_success['req_duration'])):
+			mean = np.mean(req_success['req_duration'][0:i])
+			req_success['mean'].append(mean)
+			median = np.median(req_success['req_duration'][0:i])
+			req_success['median'].append(median)
+
+		#mean = np.mean(req_success['req_duration'])
+		#median = np.median(req_success['req_duration'])
+		#meanSpan = Span(location=mean, dimension='width', line_color='green',line_dash='dashed',line_width=1, name="Mean")
+		#meanLabel = Label(x=s1.x_range.start, y=mean, text="Mean")
+		#medianSpan = Span(location=median, dimension='width', line_color='blue',line_dash='dashed',line_width=2, name="Median")
+		#s1.add_layout(meanSpan)
+		#s1.add_layout(meanLabel)
+		#s1.add_layout(medianSpan)
+
+		s1.circle(req_success['timestamp'],req_success['req_duration'], size=4, legend='Request Duration', color='darkgrey', alpha=0.2)
+		s1.line(req_success['timestamp'],req_success['mean'], legend='Mean', line_width=2, line_color="green", line_dash='dotted')
+		s1.line(req_success['timestamp'],req_success['median'], legend='Median', line_width=2, line_color="blue", line_dash='dotted')
+		if not kwargs.has_key('x_range'): 
+			kwargs['x_range']=s1.x_range
+
+		s5 = figure(y_axis_label='Request Bytes/Sec', x_axis_label='Test Time(s)', **kwargs)
+		s5.circle(req_success['timestamp'], req_success['rate'], size=4, legend='Request Rate', color='darkgrey', alpha=0.2)
+
+
+		row1.append(s1)
+		row1.append(s5)
+
+	if len(perfMon['timestamp'])>0:	
+		s2 = figure(y_axis_label="Users", title='Connected Anonymous Users', x_axis_label='Test Time (s)', **kwargs)
+		s2.line(perfMon['timestamp'],perfMon['anonUsers'])
+		if not kwargs.has_key('x_range'): 
+			kwargs['x_range']=s2.x_range
+		row1.append(s2)
+
+	row2=[]
+	if len(downloads['time'])>0:
+		s3 = figure(y_axis_label='# Downloads', title='Concurrent Downloads', x_axis_label='Test Time (s)', **kwargs)
+		s3.line(downloads['time'],downloads['downloads'])
+		if not kwargs.has_key('x_range'): 
+			kwargs['x_range']=s3.x_range
+		row2.append(s3)
+
+	if len(throughput['time'])>0:
+		for i in range(1, len(throughput['rate'])):
+			mean = np.mean(throughput['rate'][0:i])
+			throughput['mean'].append(mean)
+			median = np.median(throughput['rate'][0:i])
+			throughput['median'].append(median)
+
+		s4 = figure(y_axis_label='Download Rate (KB/s)', title='Throughput', x_axis_label='Test Time (s)',**kwargs)
+		s4.line(throughput['time'],throughput['rate'])
+		#s4.line(throughput['time'],throughput['mean'], legend='Mean', line_width=2, line_color="green", line_dash='dotted')
+		#s4.line(throughput['time'],throughput['median'], legend='Median', line_width=2, line_color="blue", line_dash='dotted')
+		if not kwargs.has_key('x_range'): 
+			kwargs['x_range']=s4.x_range
+		row2.append(s4)
+
+	row3 = []
+	p = Paragraph(text=data['description'],width=pwidth,height=pheight)
+	row3.append(p)
+
+	grid = []
+	if len(row1)>0: grid.append(row1)
+	if len(row2)>0: grid.append(row2)
+	grid.append(row3)
+
+	print "Will save"
+	output_file(data["outFile"], title=data["title"])
+
+	show(gridplot(grid))  # open a browser
+	reset_output()
+
+
+jsons = glob.glob('../results/P11*.json')
+for j in jsons:
+	generateReport(j)
\ No newline at end of file
diff --git a/_reporting/results.html b/_reporting/results.html
new file mode 100644
index 0000000..876f1d6
--- /dev/null
+++ b/_reporting/results.html
@@ -0,0 +1,48 @@
+
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <title>Load Test Measurements</title>
+        
+<link rel="stylesheet" href="https://cdn.pydata.org/bokeh/release/bokeh-0.12.5.min.css" type="text/css" />
+        
+<script type="text/javascript" src="https://cdn.pydata.org/bokeh/release/bokeh-0.12.5.min.js"></script>
+<script type="text/javascript">
+    Bokeh.set_log_level("info");
+</script>
+        <style>
+          html {
+            width: 100%;
+            height: 100%;
+          }
+          body {
+            width: 90%;
+            height: 100%;
+            margin: auto;
+          }
+        </style>
+    </head>
+    <body>
+        
+        <div class="bk-root">
+            <div class="bk-plotdiv" id="ca07f653-2e2d-4fcd-b299-b03c2989bc76"></div>
+        </div>
+        
+        <script type="text/javascript">
+            (function() {
+          var fn = function() {
+            Bokeh.safely(function() {
+              var docs_json = {"5c65556b-4365-45e6-990e-4ba95d100566":{"roots":{"references":[{"attributes":{"axis_label":"Test Time (s)","formatter":{"id":"605b74af-9928-4f43-8b01-cdb5360464dd","type":"BasicTickFormatter"},"plot":{"id":"10cf8600-1be0-403a-9b14-e2ec96f60ef3","subtype":"Figure","type":"Plot"},"ticker":{"id":"6ce1186c-3fd3-4d27-82ad-9f0999e7d305","type":"BasicTicker"}},"id":"fc0cd46c-f397-49cc-991b-a5180cb820a2","type":"LinearAxis"},{"attributes":{"line_alpha":{"value":0.1},"line_color":{"value":"#1f77b4"},"x":{"field":"x"},"y":{"field":"y"}},"id":"b38ad040-f249-43d5-9a62-2a1285adf477","type":"Line"},{"attributes":{"axis_label":"Users","formatter":{"id":"85c5f15a-287b-4723-afc6-49736d6270c8","type":"BasicTickFormatter"},"plot":{"id":"76c1b9eb-34da-4be0-ac36-98d8cfea23b2","subtype":"Figure","type":"Plot"},"ticker":{"id":"734be3bd-227f-464d-9362-ffb97b879c1e","type":"BasicTicker"}},"id":"17814308-caca-4719-93e4-17efd848cb95","type":"LinearAxis"},{"attributes":{},"id":"fc600392-1718-423e-b187-4abe1ec4bd45","type":"BasicTickFormatter"},{"attributes":{"axis_label":"Duration (sec)","formatter":{"id":"d2933dc5-5921-416e-9c41-9edd16c30489","type":"BasicTickFormatter"},"plot":{"id":"10cf8600-1be0-403a-9b14-e2ec96f60ef3","subtype":"Figure","type":"Plot"},"ticker":{"id":"43cc66c9-a789-45e6-af5b-cdcd4db288a2","type":"BasicTicker"}},"id":"3fab322e-47e4-41ab-88d9-67890a0324e5","type":"LinearAxis"},{"attributes":{"plot":{"id":"0be16057-9c19-4e3e-a2ae-8308c6cd3392","subtype":"Figure","type":"Plot"},"ticker":{"id":"4108e171-4ef2-430c-ab14-d967dcf28938","type":"BasicTicker"}},"id":"eeb8b368-4347-439f-8cfd-66fe8e370bda","type":"Grid"},{"attributes":{"children":[{"id":"40fe6c2d-ae4e-4c4e-92d2-40d6caf3d603","type":"Row"},{"id":"450d08db-f4af-4ff6-9b56-d0721bb243fd","type":"Row"}]},"id":"9bca145b-ebf5-4631-b5f6-12e7a05002e6","type":"Column"},{"attributes":{"overlay":{"id":"1a891c98-e1e6-46c9-9ab7-501a0a26a66e","type":"BoxAnnotation"},"plot":{"id":"0be16057-9c19-4e3e-a2ae-8308c6cd3392","subtype":"Figure","type":"Plot"}},"id":"c8534f35-e5eb-4610-a11e-79eaeb71a77c","type":"BoxZoomTool"},{"attributes":{"plot":{"id":"76c1b9eb-34da-4be0-ac36-98d8cfea23b2","subtype":"Figure","type":"Plot"}},"id":"98913a7a-1230-424b-a439-6ce4895a7b86","type":"HelpTool"},{"attributes":{"line_color":{"value":"#1f77b4"},"x":{"field":"x"},"y":{"field":"y"}},"id":"012d4351-70a4-4b1d-925d-ade4f36987b6","type":"Line"},{"attributes":{},"id":"8acd15ca-8ee6-45c5-a016-3518a258dde5","type":"ToolEvents"},{"attributes":{"dimension":1,"plot":{"id":"0be16057-9c19-4e3e-a2ae-8308c6cd3392","subtype":"Figure","type":"Plot"},"ticker":{"id":"521247d2-5efb-4e63-8e60-3ee9f10d2983","type":"BasicTicker"}},"id":"48cbc37c-350a-429c-85ce-ff6bb7d915e0","type":"Grid"},{"attributes":{"children":[{"id":"10cf8600-1be0-403a-9b14-e2ec96f60ef3","subtype":"Figure","type":"Plot"},{"id":"76c1b9eb-34da-4be0-ac36-98d8cfea23b2","subtype":"Figure","type":"Plot"}]},"id":"40fe6c2d-ae4e-4c4e-92d2-40d6caf3d603","type":"Row"},{"attributes":{"plot":null,"text":"Throughput"},"id":"84e9e2b2-064a-49c3-b958-fb362920423f","type":"Title"},{"attributes":{},"id":"34b18e15-73c8-4037-a4c1-f467ee61c43b","type":"BasicTickFormatter"},{"attributes":{"plot":null,"text":"Concurrent Downloads"},"id":"41e3c3a8-6717-48eb-87fb-e6a30ec407a4","type":"Title"},{"attributes":{"children":[{"id":"99f80785-8b39-487b-b4a3-c53a0d6d1d0b","type":"ToolbarBox"},{"id":"9bca145b-ebf5-4631-b5f6-12e7a05002e6","type":"Column"}]},"id":"b36f54e1-2bfb-4dea-89ab-a962f3cf5d04","type":"Column"},{"attributes":{"axis_label":"Download Rate (KB/s)","formatter":{"id":"34b18e15-73c8-4037-a4c1-f467ee61c43b","type":"BasicTickFormatter"},"plot":{"id":"c01b093f-4497-4b21-be7f-ef24dcf8413a","subtype":"Figure","type":"Plot"},"ticker":{"id":"88b7c374-7698-49cf-8ea5-76ac9d33fe80","type":"BasicTicker"}},"id":"64fade14-4169-4d4e-8146-2159cb345945","type":"LinearAxis"},{"attributes":{"axis_label":"Test Time (s)","formatter":{"id":"5f9ac53e-80bc-4082-a36c-8d6db25b9344","type":"BasicTickFormatter"},"plot":{"id":"c01b093f-4497-4b21-be7f-ef24dcf8413a","subtype":"Figure","type":"Plot"},"ticker":{"id":"a8107256-7e4c-48c7-a957-f162b7df642f","type":"BasicTicker"}},"id":"fd6f48de-0458-472b-aa5e-a70d79c0dc2a","type":"LinearAxis"},{"attributes":{"callback":null},"id":"4fffb556-969e-414d-9ef8-af6f863a86f1","type":"DataRange1d"},{"attributes":{},"id":"4108e171-4ef2-430c-ab14-d967dcf28938","type":"BasicTicker"},{"attributes":{"active_drag":"auto","active_scroll":"auto","active_tap":"auto","tools":[{"id":"e5c7897b-58d2-42d4-a3bd-f4a1d6d1102a","type":"PanTool"},{"id":"7eb9a00e-3324-4217-84ea-d43a4432e844","type":"WheelZoomTool"},{"id":"684949e2-2d2c-48db-822b-940452f17ec1","type":"BoxZoomTool"},{"id":"be08dbf8-7789-455e-9c22-46e52a51f7d9","type":"SaveTool"},{"id":"2e178f09-8256-42e8-9e22-fa5a12ec5f33","type":"ResetTool"},{"id":"86daa402-282c-43f1-92cd-2b4b9979a3b2","type":"HelpTool"}]},"id":"78b7f196-66b0-4176-a0b1-a228c5a2b2fb","type":"Toolbar"},{"attributes":{"line_color":{"value":"#1f77b4"},"x":{"field":"x"},"y":{"field":"y"}},"id":"a9961095-7e60-4806-99cb-5c0c38152a46","type":"Line"},{"attributes":{"below":[{"id":"75050a2c-7b38-4814-8357-02649abc7a2d","type":"LinearAxis"}],"left":[{"id":"15f3dbbc-0245-4368-9ddc-f9bcfd6246f5","type":"LinearAxis"}],"plot_height":400,"plot_width":400,"renderers":[{"id":"75050a2c-7b38-4814-8357-02649abc7a2d","type":"LinearAxis"},{"id":"eeb8b368-4347-439f-8cfd-66fe8e370bda","type":"Grid"},{"id":"15f3dbbc-0245-4368-9ddc-f9bcfd6246f5","type":"LinearAxis"},{"id":"48cbc37c-350a-429c-85ce-ff6bb7d915e0","type":"Grid"},{"id":"1a891c98-e1e6-46c9-9ab7-501a0a26a66e","type":"BoxAnnotation"},{"id":"c07ea708-f8e3-4b35-981c-c81b382f6bc0","type":"GlyphRenderer"}],"title":{"id":"41e3c3a8-6717-48eb-87fb-e6a30ec407a4","type":"Title"},"tool_events":{"id":"8acd15ca-8ee6-45c5-a016-3518a258dde5","type":"ToolEvents"},"toolbar":{"id":"1bdd30e6-adf9-4509-b410-c807371ac796","type":"Toolbar"},"toolbar_location":null,"x_range":{"id":"4fffb556-969e-414d-9ef8-af6f863a86f1","type":"DataRange1d"},"y_range":{"id":"c34969ac-d396-49b8-beab-b3523e4dad86","type":"DataRange1d"}},"id":"0be16057-9c19-4e3e-a2ae-8308c6cd3392","subtype":"Figure","type":"Plot"},{"attributes":{"bottom_units":"screen","fill_alpha":{"value":0.5},"fill_color":{"value":"lightgrey"},"left_units":"screen","level":"overlay","line_alpha":{"value":1.0},"line_color":{"value":"black"},"line_dash":[4,4],"line_width":{"value":2},"plot":null,"render_mode":"css","right_units":"screen","top_units":"screen"},"id":"fa7bb00e-0be2-40a3-ab7e-84058dd33669","type":"BoxAnnotation"},{"attributes":{"plot":{"id":"10cf8600-1be0-403a-9b14-e2ec96f60ef3","subtype":"Figure","type":"Plot"},"ticker":{"id":"6ce1186c-3fd3-4d27-82ad-9f0999e7d305","type":"BasicTicker"}},"id":"2ff45789-ab08-4f7b-bc58-0e44491af726","type":"Grid"},{"attributes":{"plot":{"id":"c01b093f-4497-4b21-be7f-ef24dcf8413a","subtype":"Figure","type":"Plot"}},"id":"86daa402-282c-43f1-92cd-2b4b9979a3b2","type":"HelpTool"},{"attributes":{"axis_label":"Test Time (s)","formatter":{"id":"c0d9171c-1f26-4792-ae7f-f05e89a4e327","type":"BasicTickFormatter"},"plot":{"id":"76c1b9eb-34da-4be0-ac36-98d8cfea23b2","subtype":"Figure","type":"Plot"},"ticker":{"id":"635434e7-22ed-4b1f-9997-cf6f8f89c609","type":"BasicTicker"}},"id":"64f70a24-e275-4a04-ae39-d9be0b2b867e","type":"LinearAxis"},{"attributes":{"callback":null,"column_names":["y","x"],"data":{"x":[10.829869985580444,10.832948923110962,10.837414979934692,10.845955848693848,10.84923791885376,10.862591028213501,10.88716983795166,10.891211032867432,10.932116985321045,10.943948030471802,10.950861930847168,10.954494953155518,10.96538782119751,10.98346996307373,10.997282981872559,11.023857831954956,11.026142835617065,11.03916883468628,11.054795980453491,11.067258834838867,11.086468935012817,11.101485967636108,11.118510961532593,11.139825820922852,11.153889894485474,11.164616823196411,11.173998832702637,11.191304922103882,11.201229810714722,11.217344999313354,11.22095799446106,11.233420848846436,11.254204034805298,11.282565832138062,11.28517484664917,11.310097932815552,11.36412787437439,11.370360851287842,11.37305998802185,11.375319004058838,11.38576602935791,11.456878900527954,11.460579872131348,11.46343183517456,11.466279983520508,11.473554849624634,11.492831945419312,11.50430703163147,11.50807785987854,11.522727012634277,11.535807847976685,11.56781792640686,11.570343971252441,11.577630043029785,11.592211961746216,11.607435941696167,11.629907846450806,11.65576696395874,11.666189908981323,11.679229974746704,11.694398880004883,11.697173833847046,11.720093965530396,11.752336978912354,11.764350891113281,11.766652822494507,11.931201934814453,11.936686038970947,11.940704822540283,11.943790912628174,11.947938919067383,11.960494995117188,12.007125854492188,12.160308837890625,12.356099843978882,14.974354982376099,15.014997005462646,15.569062948226929,16.858356952667236,18.142040014266968,18.25299096107483,18.951056957244873,19.414007902145386,20.49425983428955,20.603363037109375,20.757784843444824,20.95067596435547,21.168993949890137,21.219867944717407,21.767748832702637,22.092648029327393,22.687965869903564,22.930564880371094,23.36637592315674,23.557663917541504,23.710623025894165,23.927215814590454,24.367055892944336,24.64443302154541,24.64622402191162,24.671052932739258,24.695775032043457,24.868489027023315,25.493633031845093,25.500351905822754,26.30554699897766,26.865319967269897,26.882263898849487,27.06083583831787,27.68272590637207,27.69399881362915,29.175180912017822,29.317742824554443,30.238942861557007,30.318663835525513,30.591672897338867,31.256717920303345,31.569110870361328,31.6493558883667,33.184720039367676,33.2231810092926,33.322530031204224,33.548255920410156,33.98938298225403,34.115922927856445,34.21820688247681,34.33711099624634,34.496816873550415,34.607560873031616,35.89627385139465,36.75695991516113,36.99165892601013,37.2198920249939,37.75089502334595,38.63853693008423,38.912598848342896,40.490131855010986,40.509440898895264,41.15294003486633,41.681471824645996,42.17853903770447,42.51760983467102,43.337836027145386,44.57594895362854,44.74410891532898,44.76132297515869,44.78162693977356,45.773547887802124,45.96322798728943,46.03805184364319,46.55330181121826,46.692848920822144,47.04774284362793,47.84018802642822,48.576297998428345,50.546926975250244,50.616868019104004,50.64271402359009,50.70529890060425,50.73577404022217,53.266053915023804,53.64051604270935,53.659188985824585,54.603941917419434,54.79602003097534,54.83998990058899,55.69267988204956,55.943275928497314,55.99599099159241,56.29273200035095,56.387178897857666,56.430014848709106,56.52347993850708,56.897382974624634,57.066996812820435,57.16693687438965,57.328635931015015,57.63608503341675,58.0569908618927,58.35289001464844,59.105533838272095,59.439788818359375,60.10999393463135,60.15138292312622,60.245795011520386,60.29329991340637,60.766716957092285,60.79439091682434,61.18899202346802,61.46479392051697,61.66426992416382,62.04992699623108,62.208680868148804,62.58662700653076,63.536550998687744,63.76056385040283,63.860625982284546,63.894120931625366,63.98038196563721,64.11328983306885,64.48618197441101,65.23387289047241,65.7549479007721,65.76050996780396,65.8259859085083,65.85037684440613,65.87338304519653,65.90001797676086,65.90200901031494,65.92808985710144,66.18441390991211,66.20048999786377,66.23528003692627,66.32618284225464,66.59309887886047,66.73207783699036,66.8105149269104,66.89668393135071,66.93622088432312,67.6868188381195,68.09198188781738,68.12503600120544,68.37024784088135,68.44975185394287,68.82864284515381,69.00294899940491,69.08043384552002,69.16405081748962,69.5313458442688,69.56111001968384,69.73091888427734,70.81732988357544,71.4644980430603,71.49485683441162,71.80162787437439,72.07020092010498,72.48910284042358,72.50178599357605,72.5931088924408,72.61523389816284,72.7515299320221,72.77308392524719,73.06580400466919,74.27452683448792,74.462397813797,74.6190869808197,74.63392996788025,75.37749481201172,75.70227384567261,76.82948589324951,77.90012884140015,77.92814302444458,78.03423285484314,78.4433708190918,78.93239903450012,79.5171468257904,79.7214138507843,79.74697804450989,79.82555484771729,79.99795603752136,80.00255298614502,80.13717699050903,80.31964492797852,80.78796792030334,81.3433108329773,83.0744559764862,83.34829998016357,84.05725193023682,84.0840790271759,84.55735802650452,84.58068490028381,84.58687996864319,85.46806287765503,85.68745994567871,86.1420578956604,86.88877487182617,87.6575379371643,87.67694687843323,87.8371798992157,87.95676302909851,87.98308300971985,88.03674387931824,88.16989302635193,88.20305681228638,88.53739380836487,90.25462484359741,90.74213695526123,90.99168181419373,91.07589602470398,91.61740589141846,91.80947399139404,91.82715201377869,92.06689095497131,92.16996693611145,92.1859860420227,92.2172179222107,92.68991184234619,92.82949304580688,92.99264597892761,93.16537690162659,93.18560290336609,93.27631688117981,93.63932681083679,93.8062310218811,94.75767588615417,94.99257302284241,96.56543183326721,97.46923184394836,97.88143682479858,98.23249292373657,98.41864204406738,100.2568290233612,100.65058493614197,102.4633629322052,102.48432493209839,102.67315697669983,102.76234889030457,103.25025391578674,103.63843894004822,105.00486493110657,105.53242993354797,105.68195796012878,105.69680500030518,106.28301882743835,107.05532789230347,107.11847996711731,107.29037404060364,108.96773791313171,110.09569597244263,110.51236581802368,110.56077885627747,110.60063695907593,110.74700593948364,111.28233981132507,112.39261984825134,112.71001982688904,114.56921982765198,114.64558482170105,116.42430782318115,116.55329203605652,118.96901202201843,119.37304997444153,120.95494294166565,121.2031979560852,121.40787196159363,121.41116285324097,122.13236594200134,122.53616690635681,122.72896003723145,123.73603582382202,124.0038959980011,124.56475782394409,124.87107300758362,125.11075901985168,125.2035129070282,125.76114296913147,125.7862548828125,127.16256284713745,127.25960493087769,127.33187294006348,127.33592700958252,127.43171381950378,127.63288688659668,128.19067192077637,128.35314393043518,128.63338994979858,129.52779603004456,129.95285296440125,129.9897060394287,130.2134358882904,130.46869492530823,130.52138781547546,131.29185390472412,132.01050686836243,132.1827449798584,132.25792694091797,132.31210684776306,132.33535504341125,132.4904420375824,133.1856369972229,133.59585094451904,133.97732186317444,134.25736904144287,134.31755304336548,135.70913195610046,135.84157800674438,135.89627194404602,135.93366599082947,136.61758995056152,136.86149096488953,136.89581203460693,136.93809700012207,137.44263195991516,137.49909496307373,139.3273479938507,139.94913601875305,142.28311491012573,143.29018092155457,143.2947700023651,144.16106486320496,144.40707802772522,144.4322099685669,144.45886182785034,145.2998559474945,145.75595903396606,145.8137288093567,145.88878393173218,147.18784403800964,147.88871383666992,148.22917485237122,148.43424487113953,149.08878087997437,149.80037903785706,149.8678798675537,150.04056882858276,150.28805994987488,150.72174882888794,151.05215287208557,151.8080699443817,152.6802179813385,152.97458696365356,154.22995901107788,156.19230198860168,159.08537197113037,159.1108319759369,159.56531190872192,159.69599294662476,159.72809195518494,159.9889030456543],"y":[0.237,0.109,0.097,0.139,0.092,0.09,0.097,0.053,0.11,0.137,0.109,0.096,0.091,0.088,0.09,0.1,0.192,0.099,0.095,0.091,0.093,0.092,0.09,0.095,0.092,0.318,0.096,0.097,0.089,0.089,0.046,0.088,0.092,0.103,0.089,0.097,0.103,0.125,0.144,0.097,0.09,0.126,0.113,0.149,0.098,0.093,0.094,0.099,0.093,0.092,0.087,0.097,0.087,0.041,0.092,0.092,0.096,0.106,0.101,0.098,0.806,0.099,0.106,0.117,1.106,0.116,1.29,1.328,1.266,1.253,1.322,1.097,0.062,1.33,1.506,3.99,4.082,4.571,5.834,7.19,7.197,7.832,8.346,9.392,9.463,9.603,9.749,0.056,10.132,10.546,10.838,11.454,11.986,11.993,12.274,0.069,12.641,12.981,13.273,0.117,13.207,13.32,13.394,14.027,14.043,14.995,15.356,15.926,15.696,16.643,16.171,17.597,17.747,18.608,18.825,18.983,19.577,0.051,20.683,0.072,21.458,21.73,21.781,22.797,22.459,22.281,22.396,22.776,22.854,23.888,25.059,25.423,24.553,25.214,25.085,27.694,24.42,23.778,22.926,22.162,1.437,25.707,31.406,32.627,23.574,30.661,22.65,23.434,34.296,25.238,23.898,33.582,24.498,0.053,0.211,39.086,26.905,26.701,25.994,0.068,27.367,26.951,27.451,27.24,26.737,28.667,31.11,26.395,27.856,25.451,24.817,24.186,27.155,29.958,23.881,0.048,27.004,32.192,29.795,32.069,26.132,30.719,37.056,28.234,24.909,24.898,24.97,24.533,23.347,26.368,0.046,26.591,48.6,26.181,25.235,40.573,21.681,21.432,22.16,25.011,20.841,26.102,0.045,25.734,19.3,18.704,18.688,18.059,19.334,18.022,21.042,14.161,0.055,0.049,23.479,14.398,18.625,20.709,20.74,15.244,0.11,0.048,12.949,13.772,13.863,11.196,0.194,12.707,12.783,11.989,11.921,14.843,36.955,36.915,13.565,12.645,13.477,14.303,35.517,12.121,11.445,11.108,14.314,14.84,12.458,22.535,15.219,13.459,17.039,16.12,13.833,14.816,16.237,0.237,13.715,15.462,36.356,13.991,0.06,16.821,14.545,21.96,14.743,15.452,61.48,18.095,16.418,16.425,16.34,0.049,16.797,22.672,17.375,17.561,18.029,17.6,19.887,19.316,17.818,17.344,17.097,20.201,20.944,18.121,17.489,20.741,19.705,22.697,23.204,0.056,18.882,18.502,19.087,18.541,18.34,17.785,29.04,19.198,0.056,18.567,17.423,26.357,27.167,19.29,18.82,0.049,22.21,21.123,19.437,18.999,22.633,22.674,27.938,21.483,21.261,23.209,21.219,22.484,23.398,35.554,30.954,23.632,24.11,23.912,22.005,0.084,0.051,23.145,24.691,23.461,22.472,21.571,23.584,26.152,0.05,25.727,32.769,0.049,27.238,39.467,35.853,30.084,0.062,29.585,28.63,28.418,32.829,32.521,29.215,30.511,0.049,45.317,30.817,32.076,31.592,31.014,30.793,28.676,27.385,31.728,28.097,25.293,27.404,32.357,39.276,39.225,34.369,40.255,34.891,31.741,41.031,37.071,36.715,38.529,28.0,27.575,0.053,28.057,40.69,47.291,29.757,31.607,27.438,0.055,29.214,23.448,27.435,25.329,25.397,20.888,0.056,0.056,24.54,29.329,26.862,27.583,29.757,36.55,22.339,23.663,21.31,20.427,20.316,41.545,22.98,0.045,20.083,0.054,43.931,21.52,21.0,21.777,21.187,27.247,25.141,21.436,22.229,26.547,0.047,23.382,22.811,28.341,29.74,27.328,27.192,30.497,29.136,27.415,42.257]}},"id":"a0065755-12a4-41fd-8d6b-a00e4eb092a6","type":"ColumnDataSource"},{"attributes":{"plot":{"id":"10cf8600-1be0-403a-9b14-e2ec96f60ef3","subtype":"Figure","type":"Plot"}},"id":"b85712bf-d6e6-4824-8e58-bd6a5076f6b1","type":"SaveTool"},{"attributes":{"plot":null,"text":"Request Duration"},"id":"3e1c3c35-6259-4e99-87f4-730a1bfeaeb8","type":"Title"},{"attributes":{"callback":null,"column_names":["y","x"],"data":{"x":[12.840848922729492,14.643368005752563,16.500470876693726,18.973798990249634,20.2057888507843,21.54291796684265,23.117547035217285,24.7373628616333,27.74566388130188,30.458155870437622,32.39343285560608,34.53872084617615,35.82954788208008,37.239359855651855,38.236860036849976,39.16638994216919,41.11440086364746,43.2963080406189,44.51106381416321,45.633424043655396,47.08440089225769,48.92037582397461,49.826740026474,51.18876099586487,52.72954201698303,52.96829104423523,54.25616002082825,54.44577503204346,55.56331992149353,55.71477389335632,56.68932580947876,57.21395993232727,57.989184856414795,58.05121994018555,58.98587393760681,59.81182098388672,59.84614181518555,60.75348091125488,61.69016981124878,62.251521825790405,62.61512899398804,63.7736029624939,64.72277784347534,65.53450393676758,66.34792494773865,67.21589684486389,67.98991894721985,68.00274991989136,69.30510091781616,69.45603799819946,69.73552584648132,71.0598418712616,71.06515502929688,71.23048186302185,71.389328956604,71.81627297401428,72.51412582397461,73.1876380443573,73.28364396095276,73.28694987297058,73.75324988365173,74.3429388999939,74.36864590644836,74.4496419429779,75.10652804374695,75.12085390090942,75.87739086151123,76.45151782035828,76.51279997825623,77.01689887046814,77.37066197395325,77.4639630317688,78.65163993835449,79.14664697647095,79.27262496948242,79.43930697441101,79.64792704582214,80.44418501853943,80.52064394950867,80.56434202194214,80.65431594848633,80.76880598068237,81.52363586425781,81.88535499572754,82.32232189178467,82.50803089141846,82.60244393348694,82.78338885307312,82.85707402229309,83.31999087333679,83.57772898674011,83.74506282806396,83.82226181030273,83.85074090957642,83.98166489601135,84.29541397094727,84.40456295013428,85.16366291046143,85.36587190628052,85.44359397888184,85.52602100372314,85.67902898788452,86.10895586013794,86.43082284927368,86.71442484855652,87.10457992553711,87.55832481384277,87.77384781837463,87.93237280845642,87.97862887382507,88.01942300796509,88.69151902198792,88.91464400291443,88.99136400222778,89.14510297775269,89.24323987960815,89.68288493156433,90.1500449180603,90.99939584732056,91.0222909450531,91.37102484703064,91.76160287857056,91.77525496482849,92.8355438709259,93.00781083106995,93.07142686843872,93.16643190383911,93.71831583976746,93.90931487083435,94.12364792823792,94.61277604103088,94.81559896469116,95.58516788482666,95.83843302726746,96.26701998710632,96.2914628982544,96.66338992118835,96.68560886383057,97.14333701133728,97.50523090362549,97.80159401893616,97.8792929649353,98.03743100166321,98.55025696754456,98.96885085105896,98.9789068698883,99.24982285499573,99.82885885238647,100.04675698280334,100.08475589752197,100.12188482284546,100.19678902626038,100.78830885887146,101.0433988571167,101.0904929637909,101.23762488365173,101.32239699363708,101.43482494354248,101.94955897331238,101.99714589118958,102.33523488044739,102.91776490211487,103.13379192352295,103.17538285255432,103.44448781013489,103.79566788673401,103.90397095680237,104.29003596305847,104.44632887840271,104.44696187973022,104.67398500442505,105.16690587997437,105.1877670288086,105.43704795837402,105.60367393493652,106.0343370437622,106.18350982666016,106.76069402694702,107.37560391426086,107.41711688041687,107.57261800765991,107.88261294364929,108.36147499084473,108.38366985321045,108.65366291999817,109.21769499778748,109.40464901924133,109.47791004180908,109.57270383834839,109.76354384422302,109.98006296157837,110.45362281799316,110.60771083831787,110.880686044693,111.1650550365448,111.4870388507843,111.49172401428223,111.50435781478882,111.5826768875122,112.12861490249634,112.43596196174622,112.55886697769165,112.62097692489624,112.6286768913269,112.80660796165466,113.30967783927917,113.3475079536438,113.45833396911621,113.51616287231445,113.63881993293762,113.929682970047,113.99529600143433,114.01560282707214,114.28416991233826,114.72377300262451,114.7254798412323,114.9387309551239,115.41935992240906,115.69486498832703,115.77311992645264,115.77416396141052,116.15958881378174,116.18220901489258,116.29074597358704,117.27585983276367,117.31837582588196,117.53163504600525,117.67404103279114,117.7932288646698,118.03892803192139,118.10054087638855,118.41936302185059,118.7177209854126,118.75889992713928,118.97795581817627,119.09405398368835,119.15146899223328,119.19407081604004,119.4317319393158,119.51496291160583,119.64723086357117,119.90117383003235,119.9743378162384,120.18183398246765,120.30611896514893,120.60181093215942,120.79015588760376,121.17867088317871,121.23014903068542,121.73830485343933,121.92587995529175,122.016037940979,122.13675785064697,122.78815293312073,122.96931886672974,122.99541401863098,123.11389398574829,123.59471392631531,123.65066504478455,123.80708694458008,123.91966485977173,124.01277995109558,124.30758500099182,124.4719660282135,124.63937187194824,124.78105688095093,125.20015597343445,125.72654700279236,126.04964685440063,126.06473898887634,126.37639594078064,127.03845691680908,127.11521100997925,127.29818296432495,128.02162981033325,128.06585383415222,128.30673384666443,128.75364995002747,128.84144282341003,129.22177600860596,129.53419589996338,129.67007899284363,129.8085069656372,130.55520701408386,130.62418293952942,131.40858483314514,131.48631381988525,131.64893198013306,132.0289168357849,132.57168197631836,132.7481348514557,132.83370685577393,133.11675691604614,133.41827583312988,133.54277300834656,133.98242592811584,134.0519049167633,134.48385000228882,134.9152238368988,134.9158878326416,135.07014298439026,135.39095282554626,135.72093987464905,135.74248385429382,135.88643097877502,136.1987738609314,136.5826919078827,136.66070103645325,136.91364693641663,136.9418888092041,137.33277988433838,137.49469685554504,137.5348629951477,137.68788981437683,138.07468700408936,138.25935196876526,138.4126238822937,138.5690200328827,139.14587783813477,139.59269404411316,139.603276014328,139.76571583747864,139.77398896217346,139.82516384124756,140.1031630039215,140.4529538154602,140.4954149723053,140.5009479522705,141.00599002838135,141.31751799583435,141.55037689208984,141.93005394935608,142.15768599510193,142.2443699836731,142.3745880126953,142.544175863266,142.83877682685852,142.93104696273804,143.3389768600464,144.19076085090637,144.34535694122314,144.52969884872437,144.5837619304657,144.86974096298218,144.89438390731812,145.20877504348755,145.32914185523987,145.3384268283844,145.94953799247742,145.95002388954163,146.08562397956848,146.1865038871765,146.54425287246704,146.81869983673096,146.83207893371582,147.0313470363617,147.23177695274353,147.50416684150696,147.76039600372314,148.0715229511261,148.10916996002197,148.15692400932312,148.4372398853302,149.27705788612366,149.30681586265564,149.4574580192566,149.50266981124878,150.12781381607056,150.18271684646606,150.32998299598694,150.72428584098816,150.8584258556366,150.90065598487854,151.05576086044312,151.33816504478455,151.61293482780457,151.79681301116943,151.83020401000977,151.96228885650635,152.15485095977783,152.4700539112091,152.5125298500061,153.1616849899292,153.21291089057922,153.23249888420105,153.27109289169312,153.2719428539276,153.50774788856506,153.9783878326416,154.4703528881073,154.6638560295105,155.01630282402039,155.01939487457275,155.14443397521973,155.32030987739563,155.38054490089417,155.5767388343811,155.9067509174347,155.94965887069702,155.97941899299622,156.1116189956665,156.3524329662323,156.6198649406433,156.85186982154846,156.93781781196594,156.983402967453,157.2345678806305,157.27568984031677,157.5456919670105,157.54946899414062,158.02591800689697,158.22720098495483,158.3057370185852,158.45628094673157,158.47793698310852,158.55214190483093,158.55920791625977,159.21609091758728,159.2926938533783,159.67483687400818,159.75875997543335,159.8378529548645,159.95048785209656],"y":[766.2153536454199,652.4437349961484,614.8884739864642,548.3698857734915,588.4112670696737,612.0423485229372,617.2311191638162,619.0601415020827,567.4434821914826,540.261994722097,539.2302219217763,533.464706507406,547.2523522670073,557.0630138025942,574.5822740790179,592.2928456030074,587.9093311700402,579.77002901347,589.4565435393413,600.0765136214005,604.3843816639338,602.0955385381292,614.57660135861,619.2866688703939,620.9801991603775,612.6435935626166,614.6159222103221,617.1106371979606,621.6604293136613,626.4550520231246,634.7227805444805,634.2640350803476,644.4157503365016,647.1373319542877,654.0534129950423,662.7515732679265,659.8671395035611,667.15852216783,663.3516161012697,663.8421186873428,670.388388159595,674.2666533917968,664.572681146985,662.4225417917127,661.6681058806438,660.4269420957804,658.5832669429865,657.7022434022361,659.9044609351316,654.1008199906868,652.6287012726709,651.1466364177489,653.0504115235811,648.5932055975969,645.9561629822607,652.0437784311802,654.1394231222571,650.1505010772155,647.9242482330745,648.6753900099861,650.9704321435003,654.4396153696209,656.9968542799164,659.5929842230435,664.7901069068023,669.9840323770742,666.1087670509338,667.4280029080759,664.1100033503238,666.5952789458305,670.3877882209363,665.3665569195085,661.8334013568195,660.51372049756,659.0646993248553,654.2515188599137,657.3538593826869,660.3587169901779,661.3124151421666,662.6711720394964,665.5365184234153,668.6925380341168,671.0784790734051,671.9235062063191,670.7119550969978,669.0457772768284,667.5264655799714,668.885467612107,671.641934522229,675.1485084158178,676.4293247831567,679.4829735788031,681.7605452484609,682.9880099563233,687.0285116671295,690.7590136432327,694.7346025356162,695.5096160468019,697.4323712195234,699.4771598863273,699.0968939170278,697.2670252432368,700.627558059773,701.5247277107105,702.7685160449082,701.8420477514014,699.9576896362586,701.7498620937405,700.1469766700092,699.7761159431135,702.1470895778211,705.5434508614125,705.9525642229212,707.627606361121,708.822868756613,708.7182422259698,710.6245741342835,711.484830532628,709.1298522651241,707.3615877515728,706.3917383630619,705.7456846593665,701.4963381429072,700.128979027098,700.9584446382761,700.047361340003,697.4033528059726,695.6461119749059,697.9769516909386,698.6325813553325,698.7031224913906,697.4693249433534,696.0481693200343,694.434975435049,693.8087933435432,691.4254778426584,692.8008968441628,694.95040175752,692.0640439381366,692.8715670497572,694.0029015672098,693.6315564411683,694.0407268484532,694.2644086058958,694.3011528336477,696.0252608201288,698.5175996575848,696.9635142150823,698.2437250798124,695.661125015843,696.6607949319571,698.2951022556964,699.8765554288709,701.5630557219239,702.9734878566903,704.2622243205407,704.8129838010309,707.2976270729674,709.5657890463347,711.0730519767678,711.6724566610615,711.1948898949205,711.9703841740331,711.0591493067978,712.050686092473,714.3734055027004,712.9631681952546,713.1522803467358,715.4674606414494,716.7303389167008,716.5252034582634,717.0100063645921,719.0084748407818,720.2703327712732,720.5832842082655,720.7582602601063,721.9183721650186,721.4768607125094,721.6985685675006,720.1161443011406,718.5890996597961,717.8305529991178,719.0444724504395,719.4810627519787,720.4173670549806,717.6064135772659,717.3507466946949,715.6618687811218,716.3023818301733,717.1464249381789,716.6450969588988,717.8308263308794,718.4139134311711,719.2155944895721,717.8618866481103,716.6113832633054,718.0012968901975,718.9571752414109,718.5051145633081,718.9522135298173,719.3375376705487,720.2301814976943,720.9924742932328,721.9250374055398,722.1705634657346,723.9971744902571,725.7022869766307,725.9034097796879,727.6337330219455,728.4407727878352,728.2247868389152,729.9892143115983,731.788380206645,733.1925114664698,733.9541567371937,734.4071464258703,736.2071377871177,737.8992666102909,737.1429124592668,737.9675146944342,737.0760486285867,735.0725137314494,735.4266161350326,736.6571502504823,736.2076807556917,737.0594911778538,736.1998781295305,735.0178738491436,734.5163072330591,733.406458846151,734.8054408881325,736.2817287936188,736.747090624886,738.4079464188546,738.8660169535561,737.8907816011067,738.5087761983325,739.8805769239801,741.474759321653,742.7833908183935,744.3725842187769,745.645969180763,746.8778471899167,748.4530251865959,749.0253165259772,749.4643999248531,749.9608259541344,750.3177296788833,750.3967571493215,749.9749003578554,750.4777999914642,751.6300136259586,751.253877900506,748.833625882881,749.1267713367259,748.2749722260384,748.6591960995097,748.4679223105603,747.9056211752003,749.3284512579057,749.8225793713473,750.553188472857,750.6078207033587,752.0682088901765,752.7293870454268,753.207901777313,753.3719529133771,752.6394087479866,752.8285676471999,752.352107250948,750.9112573996607,749.9519456543181,750.5861118571017,747.9957116941964,747.4471427713074,745.5359510733297,745.8927360103662,743.3002996185824,742.4783214754702,741.4330373842749,741.2664260188279,741.3008189129307,740.532637151908,739.7437319688102,738.9973341848058,738.5977214313177,737.5491316174727,735.638021126886,733.8743884125363,732.8743358618133,732.9783455050175,733.0675403840221,730.9873881065646,730.334014511259,731.4081789501535,731.3892645270067,730.2951191366551,729.8619902691333,729.1745973546571,729.0130574480537,728.8014890266387,728.7955252552346,728.798558761224,728.3117497901787,728.3175366345384,728.5259987674315,729.4452997895496,729.1304611481141,728.1337930601377,727.8923429137702,727.587155237735,727.254482169567,728.0075178293802,727.8715053766166,727.8596988690724,728.0061051019725,728.5399483167118,728.1041102564848,726.7663199009328,726.5906212880103,725.5335899813108,725.8764777930777,724.8021442074884,723.3520067987228,722.6794523830943,721.7054972506269,721.8133369183997,722.8879168159383,723.1614390073332,722.683817608041,722.6371741383717,721.2424784180162,720.8080264937873,720.3179855484632,719.6265488362951,717.6810733231141,717.0756446467801,716.8001676625299,716.2676738355804,715.5070107417897,714.3995800248002,712.7039678042778,711.5886908927622,710.8711712062827,709.572279736964,708.966458156797,709.6185523023466,708.1285917645248,707.6900757408386,708.2373008301757,709.0322639347312,708.8112463666238,708.0200366038127,707.9602075531648,708.7391904091684,707.7528867742408,708.1651329157743,707.1818728097302,707.8896869196916,707.7799861217579,707.1356614222892,706.1128966487094,705.8871516624621,704.8259103641767,703.999918634607,703.3410195492802,702.9642031217475,702.1787957599711,701.3769166890866,700.815487140797,700.8719163902509,700.7167821034145,699.072153635112,698.9594360978616,698.4309701471738,699.1634277369317,698.9047187461841,699.7774664281477,699.3787371224254,699.5896397278427,698.7421977932462,699.1057644726674,699.4365663418221,699.2674547645742,699.3444827646885,698.2249800273735,698.2144345679228,698.353968155798,698.3545094754984,697.7029924926428,697.7233422149737,698.2449021942358,697.7712526281348,697.2353528386404,696.5384042297193,696.0569780222307,695.0648681583839,695.3380387113097,695.330186023475,696.0837292966359,696.5273937397067,696.6890283205357,696.9602253850395,697.817247434585,698.4154743639332,698.8727873171171,699.0841614300925,698.5106138289358,697.9254065942139,698.5496999568244,699.0409367258608,698.566472427226,698.6794871315444,699.3235226452244,699.1373738934831,699.6632782711882,699.869743684261,699.2770292438057,699.5022891686552,699.6101473806142,699.5330817419456,699.6262434475277,700.4513073106361]}},"id":"e298239e-4695-4570-a0a5-65e6c9b25c4f","type":"ColumnDataSource"},{"attributes":{"bottom_units":"screen","fill_alpha":{"value":0.5},"fill_color":{"value":"lightgrey"},"left_units":"screen","level":"overlay","line_alpha":{"value":1.0},"line_color":{"value":"black"},"line_dash":[4,4],"line_width":{"value":2},"plot":null,"render_mode":"css","right_units":"screen","top_units":"screen"},"id":"402c07ab-934b-4614-b75c-eeac9b390566","type":"BoxAnnotation"},{"attributes":{"bottom_units":"screen","fill_alpha":{"value":0.5},"fill_color":{"value":"lightgrey"},"left_units":"screen","level":"overlay","line_alpha":{"value":1.0},"line_color":{"value":"black"},"line_dash":[4,4],"line_width":{"value":2},"plot":null,"render_mode":"css","right_units":"screen","top_units":"screen"},"id":"22a90dbe-081e-4b5c-a39b-8ca848518738","type":"BoxAnnotation"},{"attributes":{"plot":{"id":"0be16057-9c19-4e3e-a2ae-8308c6cd3392","subtype":"Figure","type":"Plot"}},"id":"38371574-3412-4fb4-a064-e4c36942851d","type":"ResetTool"},{"attributes":{"line_color":{"value":"#1f77b4"},"x":{"field":"x"},"y":{"field":"y"}},"id":"cca47d44-0104-4f71-a068-688a2369e432","type":"Line"},{"attributes":{"plot":{"id":"0be16057-9c19-4e3e-a2ae-8308c6cd3392","subtype":"Figure","type":"Plot"}},"id":"85d698e9-e101-4394-88ee-c276922df44c","type":"PanTool"},{"attributes":{"data_source":{"id":"a0065755-12a4-41fd-8d6b-a00e4eb092a6","type":"ColumnDataSource"},"glyph":{"id":"9730163c-777f-49b0-91c3-22a85fc9a1a2","type":"Circle"},"hover_glyph":null,"muted_glyph":null,"nonselection_glyph":{"id":"098be562-a10b-4624-9e60-221fcb69cf20","type":"Circle"},"selection_glyph":null},"id":"975e57af-7575-4a02-a996-f7c97869cd0f","type":"GlyphRenderer"},{"attributes":{"sizing_mode":"scale_width","toolbar_location":"above","tools":[{"id":"1e6f66d2-8b32-47bf-aaf4-a56dc021a483","type":"PanTool"},{"id":"3f5686ee-fa79-4ae9-980e-9e8e7dcee558","type":"WheelZoomTool"},{"id":"78f42d08-9903-4ef1-b87b-750c58d4f1f2","type":"BoxZoomTool"},{"id":"b85712bf-d6e6-4824-8e58-bd6a5076f6b1","type":"SaveTool"},{"id":"bc12f967-28a0-44a3-b482-00c3c57d30fa","type":"ResetTool"},{"id":"521867ec-49e7-4953-9e1d-e95c9e7e3ae3","type":"HelpTool"},{"id":"a64e2d13-1769-4c15-8582-4edae55e303b","type":"PanTool"},{"id":"0d9794c8-e3e1-4c67-b447-ad4a1ee36567","type":"WheelZoomTool"},{"id":"f3017984-2d85-4a91-be90-8a08f5c5e44e","type":"BoxZoomTool"},{"id":"10f8ec34-cc35-4df2-93a0-6698c238071b","type":"SaveTool"},{"id":"64d905f0-469d-480f-ad3c-cf79ae662cff","type":"ResetTool"},{"id":"98913a7a-1230-424b-a439-6ce4895a7b86","type":"HelpTool"},{"id":"85d698e9-e101-4394-88ee-c276922df44c","type":"PanTool"},{"id":"f27042df-16c2-453d-8d9d-0efa6e714581","type":"WheelZoomTool"},{"id":"c8534f35-e5eb-4610-a11e-79eaeb71a77c","type":"BoxZoomTool"},{"id":"e47b5bf8-23b6-4397-8da2-470c33497d16","type":"SaveTool"},{"id":"38371574-3412-4fb4-a064-e4c36942851d","type":"ResetTool"},{"id":"300a969e-a278-46e0-9ecd-a1bfe0f7cbe2","type":"HelpTool"},{"id":"e5c7897b-58d2-42d4-a3bd-f4a1d6d1102a","type":"PanTool"},{"id":"7eb9a00e-3324-4217-84ea-d43a4432e844","type":"WheelZoomTool"},{"id":"684949e2-2d2c-48db-822b-940452f17ec1","type":"BoxZoomTool"},{"id":"be08dbf8-7789-455e-9c22-46e52a51f7d9","type":"SaveTool"},{"id":"2e178f09-8256-42e8-9e22-fa5a12ec5f33","type":"ResetTool"},{"id":"86daa402-282c-43f1-92cd-2b4b9979a3b2","type":"HelpTool"}]},"id":"99f80785-8b39-487b-b4a3-c53a0d6d1d0b","type":"ToolbarBox"},{"attributes":{"plot":{"id":"c01b093f-4497-4b21-be7f-ef24dcf8413a","subtype":"Figure","type":"Plot"},"ticker":{"id":"a8107256-7e4c-48c7-a957-f162b7df642f","type":"BasicTicker"}},"id":"3aea4615-14ee-4430-9fd9-145688268e56","type":"Grid"},{"attributes":{},"id":"635434e7-22ed-4b1f-9997-cf6f8f89c609","type":"BasicTicker"},{"attributes":{"data_source":{"id":"e298239e-4695-4570-a0a5-65e6c9b25c4f","type":"ColumnDataSource"},"glyph":{"id":"012d4351-70a4-4b1d-925d-ade4f36987b6","type":"Line"},"hover_glyph":null,"muted_glyph":null,"nonselection_glyph":{"id":"5a8a94bf-a438-4140-afb6-f206405e8923","type":"Line"},"selection_glyph":null},"id":"a7f18fc3-7d34-45ff-a984-8298342b8f53","type":"GlyphRenderer"},{"attributes":{"dimension":1,"plot":{"id":"10cf8600-1be0-403a-9b14-e2ec96f60ef3","subtype":"Figure","type":"Plot"},"ticker":{"id":"43cc66c9-a789-45e6-af5b-cdcd4db288a2","type":"BasicTicker"}},"id":"adb40ba2-97eb-4631-bf74-692a2c7b7307","type":"Grid"},{"attributes":{},"id":"734be3bd-227f-464d-9362-ffb97b879c1e","type":"BasicTicker"},{"attributes":{},"id":"2db4dd04-8648-4c9d-8bb1-7eadbc7f83e2","type":"ToolEvents"},{"attributes":{"callback":null},"id":"368b494f-e783-42ae-935a-d01f07f0b252","type":"DataRange1d"},{"attributes":{"label":{"value":"Anon Users"},"renderers":[{"id":"6e767acc-f5f2-478b-908c-c7d34ac682f5","type":"GlyphRenderer"}]},"id":"78261e6b-d247-470d-a536-aaab502e85f1","type":"LegendItem"},{"attributes":{"plot":{"id":"c01b093f-4497-4b21-be7f-ef24dcf8413a","subtype":"Figure","type":"Plot"}},"id":"7eb9a00e-3324-4217-84ea-d43a4432e844","type":"WheelZoomTool"},{"attributes":{"line_alpha":{"value":0.1},"line_color":{"value":"#1f77b4"},"x":{"field":"x"},"y":{"field":"y"}},"id":"98068a65-6330-447c-96bb-020376adb0ce","type":"Line"},{"attributes":{},"id":"605b74af-9928-4f43-8b01-cdb5360464dd","type":"BasicTickFormatter"},{"attributes":{"axis_label":"# Downloads","formatter":{"id":"fc600392-1718-423e-b187-4abe1ec4bd45","type":"BasicTickFormatter"},"plot":{"id":"0be16057-9c19-4e3e-a2ae-8308c6cd3392","subtype":"Figure","type":"Plot"},"ticker":{"id":"521247d2-5efb-4e63-8e60-3ee9f10d2983","type":"BasicTicker"}},"id":"15f3dbbc-0245-4368-9ddc-f9bcfd6246f5","type":"LinearAxis"},{"attributes":{"callback":null,"column_names":["y","x"],"data":{"x":[11.404276847839355,50.66757893562317,50.66757893562317,66.18007588386536,66.18007588386536,68.88535499572754,68.88535499572754,79.76535296440125,79.76535296440125,107.03411197662354,107.03411197662354,134.2620038986206,134.2620038986206,136.8391568660736,136.8391568660736,159.9889030456543],"y":[1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8]}},"id":"941941a6-db79-43f4-8b29-7fab357b40bc","type":"ColumnDataSource"},{"attributes":{},"id":"a8107256-7e4c-48c7-a957-f162b7df642f","type":"BasicTicker"},{"attributes":{"plot":{"id":"0be16057-9c19-4e3e-a2ae-8308c6cd3392","subtype":"Figure","type":"Plot"}},"id":"f27042df-16c2-453d-8d9d-0efa6e714581","type":"WheelZoomTool"},{"attributes":{"data_source":{"id":"941941a6-db79-43f4-8b29-7fab357b40bc","type":"ColumnDataSource"},"glyph":{"id":"a9961095-7e60-4806-99cb-5c0c38152a46","type":"Line"},"hover_glyph":null,"muted_glyph":null,"nonselection_glyph":{"id":"98068a65-6330-447c-96bb-020376adb0ce","type":"Line"},"selection_glyph":null},"id":"c07ea708-f8e3-4b35-981c-c81b382f6bc0","type":"GlyphRenderer"},{"attributes":{"dimension":1,"plot":{"id":"c01b093f-4497-4b21-be7f-ef24dcf8413a","subtype":"Figure","type":"Plot"},"ticker":{"id":"88b7c374-7698-49cf-8ea5-76ac9d33fe80","type":"BasicTicker"}},"id":"96881697-8137-4346-9d7a-c360586232a3","type":"Grid"},{"attributes":{},"id":"d2933dc5-5921-416e-9c41-9edd16c30489","type":"BasicTickFormatter"},{"attributes":{"axis_label":"Test Time (s)","formatter":{"id":"e4ab4e3c-f531-446d-8c24-99dfe0029ded","type":"BasicTickFormatter"},"plot":{"id":"0be16057-9c19-4e3e-a2ae-8308c6cd3392","subtype":"Figure","type":"Plot"},"ticker":{"id":"4108e171-4ef2-430c-ab14-d967dcf28938","type":"BasicTicker"}},"id":"75050a2c-7b38-4814-8357-02649abc7a2d","type":"LinearAxis"},{"attributes":{},"id":"88b7c374-7698-49cf-8ea5-76ac9d33fe80","type":"BasicTicker"},{"attributes":{"overlay":{"id":"fa7bb00e-0be2-40a3-ab7e-84058dd33669","type":"BoxAnnotation"},"plot":{"id":"10cf8600-1be0-403a-9b14-e2ec96f60ef3","subtype":"Figure","type":"Plot"}},"id":"78f42d08-9903-4ef1-b87b-750c58d4f1f2","type":"BoxZoomTool"},{"attributes":{"overlay":{"id":"402c07ab-934b-4614-b75c-eeac9b390566","type":"BoxAnnotation"},"plot":{"id":"76c1b9eb-34da-4be0-ac36-98d8cfea23b2","subtype":"Figure","type":"Plot"}},"id":"f3017984-2d85-4a91-be90-8a08f5c5e44e","type":"BoxZoomTool"},{"attributes":{"data_source":{"id":"42ae215d-5d0d-42a0-bc82-314b70902d6c","type":"ColumnDataSource"},"glyph":{"id":"cca47d44-0104-4f71-a068-688a2369e432","type":"Line"},"hover_glyph":null,"muted_glyph":null,"nonselection_glyph":{"id":"b38ad040-f249-43d5-9a62-2a1285adf477","type":"Line"},"selection_glyph":null},"id":"6e767acc-f5f2-478b-908c-c7d34ac682f5","type":"GlyphRenderer"},{"attributes":{"dimension":1,"plot":{"id":"76c1b9eb-34da-4be0-ac36-98d8cfea23b2","subtype":"Figure","type":"Plot"},"ticker":{"id":"734be3bd-227f-464d-9362-ffb97b879c1e","type":"BasicTicker"}},"id":"79ee8ba9-c134-4f07-964f-a79e309fded5","type":"Grid"},{"attributes":{"callback":null},"id":"c34969ac-d396-49b8-beab-b3523e4dad86","type":"DataRange1d"},{"attributes":{"below":[{"id":"fd6f48de-0458-472b-aa5e-a70d79c0dc2a","type":"LinearAxis"}],"left":[{"id":"64fade14-4169-4d4e-8146-2159cb345945","type":"LinearAxis"}],"plot_height":400,"plot_width":400,"renderers":[{"id":"fd6f48de-0458-472b-aa5e-a70d79c0dc2a","type":"LinearAxis"},{"id":"3aea4615-14ee-4430-9fd9-145688268e56","type":"Grid"},{"id":"64fade14-4169-4d4e-8146-2159cb345945","type":"LinearAxis"},{"id":"96881697-8137-4346-9d7a-c360586232a3","type":"Grid"},{"id":"22a90dbe-081e-4b5c-a39b-8ca848518738","type":"BoxAnnotation"},{"id":"a7f18fc3-7d34-45ff-a984-8298342b8f53","type":"GlyphRenderer"}],"title":{"id":"84e9e2b2-064a-49c3-b958-fb362920423f","type":"Title"},"tool_events":{"id":"ff143f3e-d39e-4e6f-b583-b9d600f20d06","type":"ToolEvents"},"toolbar":{"id":"78b7f196-66b0-4176-a0b1-a228c5a2b2fb","type":"Toolbar"},"toolbar_location":null,"x_range":{"id":"4fffb556-969e-414d-9ef8-af6f863a86f1","type":"DataRange1d"},"y_range":{"id":"368b494f-e783-42ae-935a-d01f07f0b252","type":"DataRange1d"}},"id":"c01b093f-4497-4b21-be7f-ef24dcf8413a","subtype":"Figure","type":"Plot"},{"attributes":{"line_alpha":{"value":0.1},"line_color":{"value":"#1f77b4"},"x":{"field":"x"},"y":{"field":"y"}},"id":"5a8a94bf-a438-4140-afb6-f206405e8923","type":"Line"},{"attributes":{},"id":"85c5f15a-287b-4723-afc6-49736d6270c8","type":"BasicTickFormatter"},{"attributes":{"children":[{"id":"0be16057-9c19-4e3e-a2ae-8308c6cd3392","subtype":"Figure","type":"Plot"},{"id":"c01b093f-4497-4b21-be7f-ef24dcf8413a","subtype":"Figure","type":"Plot"}]},"id":"450d08db-f4af-4ff6-9b56-d0721bb243fd","type":"Row"},{"attributes":{"active_drag":"auto","active_scroll":"auto","active_tap":"auto","tools":[{"id":"a64e2d13-1769-4c15-8582-4edae55e303b","type":"PanTool"},{"id":"0d9794c8-e3e1-4c67-b447-ad4a1ee36567","type":"WheelZoomTool"},{"id":"f3017984-2d85-4a91-be90-8a08f5c5e44e","type":"BoxZoomTool"},{"id":"10f8ec34-cc35-4df2-93a0-6698c238071b","type":"SaveTool"},{"id":"64d905f0-469d-480f-ad3c-cf79ae662cff","type":"ResetTool"},{"id":"98913a7a-1230-424b-a439-6ce4895a7b86","type":"HelpTool"}]},"id":"460613f9-9997-4cfd-9a01-55c60311c1a3","type":"Toolbar"},{"attributes":{"plot":{"id":"c01b093f-4497-4b21-be7f-ef24dcf8413a","subtype":"Figure","type":"Plot"}},"id":"e5c7897b-58d2-42d4-a3bd-f4a1d6d1102a","type":"PanTool"},{"attributes":{"callback":null},"id":"edbfbdd1-ed11-4cdd-8ce7-3eb95886ee9b","type":"DataRange1d"},{"attributes":{"callback":null,"column_names":["y","x"],"data":{"x":[0.0,1.000999927520752,2.000999927520752,3.000999927520752,4.001999855041504,5.001999855041504,6.001999855041504,7.001999855041504,8.001999855041504,9.001999855041504,9.991999864578247,10.991999864578247,11.993000030517578,12.993000030517578,13.993000030517578,14.993000030517578,15.993000030517578,16.993000030517578,17.993000030517578,18.99399995803833,19.99399995803833,20.994999885559082,21.994999885559082,22.994999885559082,23.994999885559082,24.994999885559082,25.994999885559082,26.994999885559082,27.994999885559082,28.994999885559082,29.995999813079834,30.995999813079834,31.995999813079834,32.995999813079834,33.995999813079834,34.995999813079834,35.995999813079834,36.995999813079834,38.0,39.0,40.0,41.0,42.0,43.0,44.0,45.0,46.0,47.00099992752075,48.00099992752075,49.003000020980835,50.003000020980835,51.003000020980835,52.003000020980835,53.003000020980835,54.003000020980835,55.003000020980835,56.00399994850159,57.00399994850159,58.00399994850159,59.00399994850159,60.00399994850159,60.99199986457825,61.99199986457825,62.99199986457825,63.99300003051758,64.99300003051758,65.99300003051758,66.99300003051758,67.99300003051758,68.99300003051758,69.99300003051758,70.99399995803833,71.99399995803833,72.99499988555908,73.99499988555908,74.99499988555908,75.99499988555908,76.99499988555908,77.99499988555908,78.99499988555908,79.99499988555908,80.99499988555908,81.99599981307983,82.99599981307983,83.99599981307983,84.99599981307983,85.99599981307983,86.99599981307983,87.99599981307983,88.99599981307983,89.99699997901917,90.99699997901917,91.99699997901917,92.99699997901917,93.99699997901917,94.99699997901917,95.99699997901917,96.99699997901917,97.99699997901917,98.99799990653992,99.99799990653992,100.99799990653992,101.99799990653992,102.99799990653992,103.99799990653992,104.99799990653992,105.99799990653992,106.99799990653992,107.99899983406067,108.99899983406067,109.99899983406067,110.99899983406067,111.99899983406067,112.99899983406067,113.99899983406067,114.99899983406067,116.0,117.0,118.0,119.0,120.0,121.0,122.0,123.0,124.0,125.00099992752075,126.00099992752075,127.00099992752075,128.00099992752075,129.00099992752075,130.00099992752075,131.00099992752075,132.00099992752075,133.00099992752075,134.0019998550415,135.00300002098083,136.00300002098083,137.00300002098083,138.00300002098083,139.00300002098083,140.00600004196167,141.00600004196167,142.00699996948242,143.00699996948242,144.00699996948242,145.00699996948242,146.00699996948242,147.00699996948242,148.00699996948242,149.00699996948242,150.00699996948242,151.00799989700317,152.00799989700317,153.00799989700317,154.00799989700317,155.00799989700317,156.00799989700317,157.00799989700317,158.00799989700317,159.00799989700317,160.00899982452393,161.00899982452393,162.00899982452393,163.00899982452393,164.00899982452393,165.00899982452393,166.00899982452393,167.00899982452393,168.00999999046326,169.00999999046326,170.010999917984,171.010999917984,172.010999917984,173.010999917984,174.010999917984,175.010999917984,176.010999917984,177.01199984550476,178.01199984550476,179.01199984550476,180.01199984550476,181.01199984550476,182.01199984550476,183.0130000114441,184.0130000114441,185.0130000114441,186.01399993896484,187.0,188.0,189.0,190.0,191.0,192.0,193.00099992752075,194.00099992752075,195.00099992752075,196.00099992752075,197.00099992752075,198.00099992752075,199.00099992752075,200.0019998550415,201.0019998550415,202.00300002098083,203.00300002098083,204.0039999485016,205.0039999485016,206.0039999485016,207.0039999485016,208.00499987602234,209.00499987602234],"y":[10.0,9.0,9.0,9.0,9.0,9.0,10.0,9.0,9.0,9.0,9.0,21.0,68.0,69.0,72.0,72.0,70.0,72.0,72.0,70.0,71.0,68.0,67.0,68.0,69.0,67.0,67.0,69.0,67.0,72.0,71.0,70.0,70.0,72.0,69.0,66.0,70.0,70.0,70.0,70.0,71.0,70.0,68.0,70.0,72.0,68.0,67.0,68.0,71.0,73.0,73.0,69.0,69.0,73.0,70.0,69.0,69.0,65.0,66.0,69.0,71.0,67.0,69.0,68.0,66.0,67.0,64.0,61.0,67.0,68.0,67.0,70.0,69.0,64.0,68.0,69.0,70.0,70.0,70.0,70.0,69.0,67.0,70.0,72.0,71.0,68.0,71.0,70.0,67.0,64.0,72.0,70.0,69.0,64.0,66.0,69.0,73.0,72.0,70.0,70.0,72.0,71.0,71.0,69.0,70.0,72.0,69.0,70.0,71.0,72.0,72.0,68.0,68.0,72.0,72.0,72.0,72.0,71.0,73.0,72.0,71.0,73.0,70.0,70.0,69.0,72.0,69.0,71.0,67.0,68.0,68.0,67.0,70.0,68.0,70.0,69.0,69.0,68.0,69.0,71.0,71.0,72.0,73.0,72.0,70.0,69.0,69.0,71.0,73.0,70.0,69.0,69.0,72.0,71.0,71.0,72.0,73.0,72.0,73.0,73.0,67.0,52.0,51.0,50.0,50.0,55.0,46.0,43.0,41.0,40.0,36.0,31.0,27.0,23.0,23.0,23.0,23.0,20.0,16.0,15.0,12.0,10.0,10.0,10.0,9.0,9.0,10.0,10.0,10.0,9.0,9.0,9.0,9.0,9.0,9.0,9.0,10.0,9.0,9.0,9.0,9.0,9.0,9.0,9.0,9.0,9.0,9.0,10.0,10.0,10.0]}},"id":"42ae215d-5d0d-42a0-bc82-314b70902d6c","type":"ColumnDataSource"},{"attributes":{"plot":null,"text":"Connected Anonymous Users"},"id":"b5c2cc0e-5d91-4550-bd3b-477ad5d56af1","type":"Title"},{"attributes":{"plot":{"id":"76c1b9eb-34da-4be0-ac36-98d8cfea23b2","subtype":"Figure","type":"Plot"}},"id":"0d9794c8-e3e1-4c67-b447-ad4a1ee36567","type":"WheelZoomTool"},{"attributes":{},"id":"59696226-9990-4ceb-8840-e47b545dbb34","type":"ToolEvents"},{"attributes":{"items":[{"id":"78261e6b-d247-470d-a536-aaab502e85f1","type":"LegendItem"}],"plot":{"id":"76c1b9eb-34da-4be0-ac36-98d8cfea23b2","subtype":"Figure","type":"Plot"}},"id":"5e094ca9-c84d-4421-88c3-66d8956a1fca","type":"Legend"},{"attributes":{"plot":{"id":"10cf8600-1be0-403a-9b14-e2ec96f60ef3","subtype":"Figure","type":"Plot"}},"id":"521867ec-49e7-4953-9e1d-e95c9e7e3ae3","type":"HelpTool"},{"attributes":{"fill_alpha":{"value":0.2},"fill_color":{"value":"darkgrey"},"line_alpha":{"value":0.2},"line_color":{"value":"darkgrey"},"x":{"field":"x"},"y":{"field":"y"}},"id":"9730163c-777f-49b0-91c3-22a85fc9a1a2","type":"Circle"},{"attributes":{},"id":"c0d9171c-1f26-4792-ae7f-f05e89a4e327","type":"BasicTickFormatter"},{"attributes":{"plot":{"id":"0be16057-9c19-4e3e-a2ae-8308c6cd3392","subtype":"Figure","type":"Plot"}},"id":"e47b5bf8-23b6-4397-8da2-470c33497d16","type":"SaveTool"},{"attributes":{"plot":{"id":"c01b093f-4497-4b21-be7f-ef24dcf8413a","subtype":"Figure","type":"Plot"}},"id":"2e178f09-8256-42e8-9e22-fa5a12ec5f33","type":"ResetTool"},{"attributes":{"plot":{"id":"10cf8600-1be0-403a-9b14-e2ec96f60ef3","subtype":"Figure","type":"Plot"}},"id":"1e6f66d2-8b32-47bf-aaf4-a56dc021a483","type":"PanTool"},{"attributes":{"plot":{"id":"0be16057-9c19-4e3e-a2ae-8308c6cd3392","subtype":"Figure","type":"Plot"}},"id":"300a969e-a278-46e0-9ecd-a1bfe0f7cbe2","type":"HelpTool"},{"attributes":{},"id":"43cc66c9-a789-45e6-af5b-cdcd4db288a2","type":"BasicTicker"},{"attributes":{"plot":{"id":"76c1b9eb-34da-4be0-ac36-98d8cfea23b2","subtype":"Figure","type":"Plot"},"ticker":{"id":"635434e7-22ed-4b1f-9997-cf6f8f89c609","type":"BasicTicker"}},"id":"619b3e5a-24f5-4867-b389-70ce75d10e11","type":"Grid"},{"attributes":{"below":[{"id":"64f70a24-e275-4a04-ae39-d9be0b2b867e","type":"LinearAxis"}],"left":[{"id":"17814308-caca-4719-93e4-17efd848cb95","type":"LinearAxis"}],"plot_height":400,"plot_width":400,"renderers":[{"id":"64f70a24-e275-4a04-ae39-d9be0b2b867e","type":"LinearAxis"},{"id":"619b3e5a-24f5-4867-b389-70ce75d10e11","type":"Grid"},{"id":"17814308-caca-4719-93e4-17efd848cb95","type":"LinearAxis"},{"id":"79ee8ba9-c134-4f07-964f-a79e309fded5","type":"Grid"},{"id":"402c07ab-934b-4614-b75c-eeac9b390566","type":"BoxAnnotation"},{"id":"5e094ca9-c84d-4421-88c3-66d8956a1fca","type":"Legend"},{"id":"6e767acc-f5f2-478b-908c-c7d34ac682f5","type":"GlyphRenderer"}],"title":{"id":"b5c2cc0e-5d91-4550-bd3b-477ad5d56af1","type":"Title"},"tool_events":{"id":"59696226-9990-4ceb-8840-e47b545dbb34","type":"ToolEvents"},"toolbar":{"id":"460613f9-9997-4cfd-9a01-55c60311c1a3","type":"Toolbar"},"toolbar_location":null,"x_range":{"id":"4fffb556-969e-414d-9ef8-af6f863a86f1","type":"DataRange1d"},"y_range":{"id":"39e91508-2eb9-45ed-b509-5c8f02c22fa1","type":"DataRange1d"}},"id":"76c1b9eb-34da-4be0-ac36-98d8cfea23b2","subtype":"Figure","type":"Plot"},{"attributes":{"label":{"value":"Request Duration"},"renderers":[{"id":"975e57af-7575-4a02-a996-f7c97869cd0f","type":"GlyphRenderer"}]},"id":"ad046777-e153-4a0d-a803-a570bcb23c1f","type":"LegendItem"},{"attributes":{"active_drag":"auto","active_scroll":"auto","active_tap":"auto","tools":[{"id":"85d698e9-e101-4394-88ee-c276922df44c","type":"PanTool"},{"id":"f27042df-16c2-453d-8d9d-0efa6e714581","type":"WheelZoomTool"},{"id":"c8534f35-e5eb-4610-a11e-79eaeb71a77c","type":"BoxZoomTool"},{"id":"e47b5bf8-23b6-4397-8da2-470c33497d16","type":"SaveTool"},{"id":"38371574-3412-4fb4-a064-e4c36942851d","type":"ResetTool"},{"id":"300a969e-a278-46e0-9ecd-a1bfe0f7cbe2","type":"HelpTool"}]},"id":"1bdd30e6-adf9-4509-b410-c807371ac796","type":"Toolbar"},{"attributes":{"active_drag":"auto","active_scroll":"auto","active_tap":"auto","tools":[{"id":"1e6f66d2-8b32-47bf-aaf4-a56dc021a483","type":"PanTool"},{"id":"3f5686ee-fa79-4ae9-980e-9e8e7dcee558","type":"WheelZoomTool"},{"id":"78f42d08-9903-4ef1-b87b-750c58d4f1f2","type":"BoxZoomTool"},{"id":"b85712bf-d6e6-4824-8e58-bd6a5076f6b1","type":"SaveTool"},{"id":"bc12f967-28a0-44a3-b482-00c3c57d30fa","type":"ResetTool"},{"id":"521867ec-49e7-4953-9e1d-e95c9e7e3ae3","type":"HelpTool"}]},"id":"52888893-91f7-47fa-80ac-5b05c17cf322","type":"Toolbar"},{"attributes":{"below":[{"id":"fc0cd46c-f397-49cc-991b-a5180cb820a2","type":"LinearAxis"}],"left":[{"id":"3fab322e-47e4-41ab-88d9-67890a0324e5","type":"LinearAxis"}],"plot_height":400,"plot_width":400,"renderers":[{"id":"fc0cd46c-f397-49cc-991b-a5180cb820a2","type":"LinearAxis"},{"id":"2ff45789-ab08-4f7b-bc58-0e44491af726","type":"Grid"},{"id":"3fab322e-47e4-41ab-88d9-67890a0324e5","type":"LinearAxis"},{"id":"adb40ba2-97eb-4631-bf74-692a2c7b7307","type":"Grid"},{"id":"fa7bb00e-0be2-40a3-ab7e-84058dd33669","type":"BoxAnnotation"},{"id":"45df0b96-79a1-4efc-8d13-d980640f5c62","type":"Legend"},{"id":"975e57af-7575-4a02-a996-f7c97869cd0f","type":"GlyphRenderer"}],"title":{"id":"3e1c3c35-6259-4e99-87f4-730a1bfeaeb8","type":"Title"},"tool_events":{"id":"2db4dd04-8648-4c9d-8bb1-7eadbc7f83e2","type":"ToolEvents"},"toolbar":{"id":"52888893-91f7-47fa-80ac-5b05c17cf322","type":"Toolbar"},"toolbar_location":null,"x_range":{"id":"4fffb556-969e-414d-9ef8-af6f863a86f1","type":"DataRange1d"},"y_range":{"id":"edbfbdd1-ed11-4cdd-8ce7-3eb95886ee9b","type":"DataRange1d"}},"id":"10cf8600-1be0-403a-9b14-e2ec96f60ef3","subtype":"Figure","type":"Plot"},{"attributes":{"plot":{"id":"10cf8600-1be0-403a-9b14-e2ec96f60ef3","subtype":"Figure","type":"Plot"}},"id":"bc12f967-28a0-44a3-b482-00c3c57d30fa","type":"ResetTool"},{"attributes":{"plot":{"id":"76c1b9eb-34da-4be0-ac36-98d8cfea23b2","subtype":"Figure","type":"Plot"}},"id":"64d905f0-469d-480f-ad3c-cf79ae662cff","type":"ResetTool"},{"attributes":{"fill_alpha":{"value":0.1},"fill_color":{"value":"#1f77b4"},"line_alpha":{"value":0.1},"line_color":{"value":"#1f77b4"},"x":{"field":"x"},"y":{"field":"y"}},"id":"098be562-a10b-4624-9e60-221fcb69cf20","type":"Circle"},{"attributes":{"overlay":{"id":"22a90dbe-081e-4b5c-a39b-8ca848518738","type":"BoxAnnotation"},"plot":{"id":"c01b093f-4497-4b21-be7f-ef24dcf8413a","subtype":"Figure","type":"Plot"}},"id":"684949e2-2d2c-48db-822b-940452f17ec1","type":"BoxZoomTool"},{"attributes":{"plot":{"id":"76c1b9eb-34da-4be0-ac36-98d8cfea23b2","subtype":"Figure","type":"Plot"}},"id":"a64e2d13-1769-4c15-8582-4edae55e303b","type":"PanTool"},{"attributes":{"items":[{"id":"ad046777-e153-4a0d-a803-a570bcb23c1f","type":"LegendItem"}],"plot":{"id":"10cf8600-1be0-403a-9b14-e2ec96f60ef3","subtype":"Figure","type":"Plot"}},"id":"45df0b96-79a1-4efc-8d13-d980640f5c62","type":"Legend"},{"attributes":{"plot":{"id":"76c1b9eb-34da-4be0-ac36-98d8cfea23b2","subtype":"Figure","type":"Plot"}},"id":"10f8ec34-cc35-4df2-93a0-6698c238071b","type":"SaveTool"},{"attributes":{},"id":"ff143f3e-d39e-4e6f-b583-b9d600f20d06","type":"ToolEvents"},{"attributes":{"plot":{"id":"c01b093f-4497-4b21-be7f-ef24dcf8413a","subtype":"Figure","type":"Plot"}},"id":"be08dbf8-7789-455e-9c22-46e52a51f7d9","type":"SaveTool"},{"attributes":{},"id":"e4ab4e3c-f531-446d-8c24-99dfe0029ded","type":"BasicTickFormatter"},{"attributes":{"bottom_units":"screen","fill_alpha":{"value":0.5},"fill_color":{"value":"lightgrey"},"left_units":"screen","level":"overlay","line_alpha":{"value":1.0},"line_color":{"value":"black"},"line_dash":[4,4],"line_width":{"value":2},"plot":null,"render_mode":"css","right_units":"screen","top_units":"screen"},"id":"1a891c98-e1e6-46c9-9ab7-501a0a26a66e","type":"BoxAnnotation"},{"attributes":{"callback":null},"id":"39e91508-2eb9-45ed-b509-5c8f02c22fa1","type":"DataRange1d"},{"attributes":{},"id":"521247d2-5efb-4e63-8e60-3ee9f10d2983","type":"BasicTicker"},{"attributes":{},"id":"5f9ac53e-80bc-4082-a36c-8d6db25b9344","type":"BasicTickFormatter"},{"attributes":{"plot":{"id":"10cf8600-1be0-403a-9b14-e2ec96f60ef3","subtype":"Figure","type":"Plot"}},"id":"3f5686ee-fa79-4ae9-980e-9e8e7dcee558","type":"WheelZoomTool"},{"attributes":{},"id":"6ce1186c-3fd3-4d27-82ad-9f0999e7d305","type":"BasicTicker"}],"root_ids":["b36f54e1-2bfb-4dea-89ab-a962f3cf5d04"]},"title":"Bokeh Application","version":"0.12.5"}};
+              var render_items = [{"docid":"5c65556b-4365-45e6-990e-4ba95d100566","elementid":"ca07f653-2e2d-4fcd-b299-b03c2989bc76","modelid":"b36f54e1-2bfb-4dea-89ab-a962f3cf5d04"}];
+              
+              Bokeh.embed.embed_items(docs_json, render_items);
+            });
+          };
+          if (document.readyState != "loading") fn();
+          else document.addEventListener("DOMContentLoaded", fn);
+        })();
+        
+        </script>
+    </body>
+</html>
\ No newline at end of file
diff --git a/_reporting/stocks.html b/_reporting/stocks.html
new file mode 100644
index 0000000..6d7df2a
--- /dev/null
+++ b/_reporting/stocks.html
@@ -0,0 +1,48 @@
+
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <title>stocks.py example</title>
+        
+<link rel="stylesheet" href="https://cdn.pydata.org/bokeh/release/bokeh-0.12.5.min.css" type="text/css" />
+        
+<script type="text/javascript" src="https://cdn.pydata.org/bokeh/release/bokeh-0.12.5.min.js"></script>
+<script type="text/javascript">
+    Bokeh.set_log_level("info");
+</script>
+        <style>
+          html {
+            width: 100%;
+            height: 100%;
+          }
+          body {
+            width: 90%;
+            height: 100%;
+            margin: auto;
+          }
+        </style>
+    </head>
+    <body>
+        
+        <div class="bk-root">
+            <div class="bk-plotdiv" id="f1e33520-c5e0-4841-b7b0-57d5ce9d42ac"></div>
+        </div>
+        
+        <script type="text/javascript">
+            (function() {
+          var fn = function() {
+            Bokeh.safely(function() {
+              var docs_json = {"1099709e-8e5d-4604-ba44-79e4f034069a":{"roots":{"references":[{"attributes":{"plot":{"id":"50780ad1-d35b-433f-b20e-6c0f6fc9d357","subtype":"Figure","type":"Plot"}},"id":"b2862ae3-1fe3-4fa8-b3c9-31a23e1e5ca7","type":"WheelZoomTool"},{"attributes":{"plot":{"id":"50780ad1-d35b-433f-b20e-6c0f6fc9d357","subtype":"Figure","type":"Plot"}},"id":"70abbac7-abb8-45e4-9b0a-301d26ef391f","type":"SaveTool"},{"attributes":{},"id":"d8b4a98f-59b9-4d01-9300-1b1112e0083c","type":"DatetimeTickFormatter"},{"attributes":{"line_alpha":{"value":0.1},"line_color":{"value":"#1f77b4"},"x":{"field":"x"},"y":{"field":"y"}},"id":"8384c371-52ab-4cc0-bc9c-9938ec34b407","type":"Line"},{"attributes":{"bottom_units":"screen","fill_alpha":{"value":0.5},"fill_color":{"value":"lightgrey"},"left_units":"screen","level":"overlay","line_alpha":{"value":1.0},"line_color":{"value":"black"},"line_dash":[4,4],"line_width":{"value":2},"plot":null,"render_mode":"css","right_units":"screen","top_units":"screen"},"id":"7fdb1efe-af7b-4e7c-9527-f7baa540fc6a","type":"BoxAnnotation"},{"attributes":{"axis_label":"Time","formatter":{"id":"3b719006-dd14-4e3b-8420-37a71307a3a0","type":"BasicTickFormatter"},"plot":{"id":"50780ad1-d35b-433f-b20e-6c0f6fc9d357","subtype":"Figure","type":"Plot"},"ticker":{"id":"87fc8cc7-d24d-4f46-a8d0-a999f9a70185","type":"BasicTicker"}},"id":"b3a46b9c-f26e-47e1-84e9-3b6c71dfc3ee","type":"LinearAxis"},{"attributes":{"children":[{"id":"35aa0ef1-7178-44af-96fd-248ac1d88587","type":"Row"}]},"id":"d6445b9d-da8a-4179-92d2-5de3913a3373","type":"Column"},{"attributes":{"num_minor_ticks":5},"id":"86ecf267-da90-4362-bccd-90be2d40155b","type":"DatetimeTicker"},{"attributes":{"callback":null,"column_names":["x","y"],"data":{"x":[1496676471.422986,1496676472.472203,1496676473.299882,1496676474.396172,1496676475.957817,1496676477.170048,1496676478.003193,1496676479.467391,1496676480.380363,1496676481.91033,1496676483.914627,1496676485.917327,1496676487.392238,1496676488.804677,1496676488.846792,1496676490.25525,1496676490.35882,1496676491.78652,1496676492.643438,1496676493.564157,1496676493.994959,1496676494.793296,1496676495.635166,1496676496.210359,1496676496.918325,1496676497.274678,1496676497.701691,1496676497.938953,1496676498.309211,1496676498.958659,1496676499.088562,1496676499.495072,1496676500.416082,1496676500.493286,1496676501.080424,1496676501.407902,1496676501.700965,1496676502.262241,1496676502.48667,1496676503.689018,1496676503.753854,1496676503.790306,1496676505.347579,1496676505.398543,1496676505.423549,1496676506.716673,1496676506.985662,1496676507.388652,1496676508.311004,1496676508.730712,1496676508.979664,1496676509.15811,1496676509.8305,1496676510.138058,1496676510.462543,1496676510.655159,1496676511.298094,1496676511.692044,1496676512.10161,1496676512.520827,1496676513.170815,1496676513.292476,1496676513.362497,1496676514.354312,1496676514.56745,1496676514.723708,1496676515.933086,1496676516.280315,1496676516.359605,1496676517.234125,1496676517.499471,1496676517.843379,1496676518.934357,1496676518.946838,1496676519.210389,1496676519.777139,1496676520.293509,1496676520.778632,1496676520.912139,1496676521.59037,1496676521.74585,1496676522.19918,1496676522.815026,1496676522.94596,1496676523.311655,1496676523.764848,1496676524.367477,1496676524.671867,1496676525.32644,1496676525.469626,1496676525.515432,1496676526.5259,1496676526.698255,1496676526.814077,1496676527.641146,1496676528.247622,1496676528.282248,1496676528.529822,1496676529.622874,1496676529.634481,1496676529.754871,1496676531.095716,1496676531.470006,1496676531.710534,1496676531.744318,1496676532.243156,1496676532.384839,1496676532.914648,1496676533.146651,1496676533.676908,1496676533.691861,1496676534.594136,1496676534.954695,1496676535.202492,1496676535.733828,1496676536.506008,1496676537.007089,1496676537.434832,1496676537.605648,1496676538.244716,1496676538.628751,1496676539.31135,1496676539.59909,1496676539.986319,1496676540.151135,1496676540.420394,1496676540.630109,1496676541.435872,1496676541.514754,1496676541.636165,1496676542.238477,1496676542.696628,1496676543.30065,1496676543.572244,1496676543.655046,1496676543.999561,1496676544.673135,1496676544.765929,1496676544.959012,1496676545.304766,1496676545.583426,1496676545.912357,1496676546.328269,1496676546.549733,1496676546.599467,1496676546.892325,1496676547.135799,1496676547.482143,1496676547.515394,1496676547.747415,1496676548.303101,1496676548.843568,1496676549.252716,1496676549.434394,1496676549.752042,1496676549.845191,1496676550.48949,1496676550.784063,1496676551.165757,1496676551.470695,1496676551.554266,1496676551.815632,1496676552.232839,1496676552.789925,1496676552.83874,1496676552.863757,1496676552.956869,1496676553.818087,1496676554.044016,1496676554.763631,1496676554.862803,1496676555.11311,1496676555.658339,1496676555.724237,1496676555.983721,1496676556.450977,1496676556.483392,1496676557.435439,1496676557.561869,1496676558.135004,1496676558.182507,1496676558.349854,1496676558.559721,1496676559.445272,1496676559.99285,1496676560.276398,1496676560.470256,1496676560.684896,1496676560.746609,1496676561.314495,1496676561.557525,1496676561.707963,1496676561.859174,1496676562.358769,1496676562.978693,1496676563.38823,1496676563.774136,1496676563.972758,1496676564.102967,1496676564.632,1496676565.07472,1496676565.143168,1496676565.284579,1496676565.442495,1496676566.218466,1496676566.356479,1496676567.006993,1496676567.033191,1496676567.161095,1496676567.299238,1496676567.359078,1496676568.360657,1496676568.361582,1496676568.440487,1496676569.042806,1496676569.213495,1496676569.620756,1496676569.670726,1496676569.982232,1496676570.387325,1496676570.944196,1496676571.456574,1496676571.498663,1496676571.547161,1496676571.873864,1496676572.566777,1496676572.807195,1496676573.03369,1496676573.526387,1496676573.591691,1496676574.014127,1496676574.368377,1496676574.640931,1496676574.715861,1496676575.077931,1496676575.354112,1496676575.469845,1496676575.789736,1496676576.248131,1496676576.354758,1496676576.701665,1496676577.25278,1496676577.612861,1496676577.627729,1496676578.039096,1496676578.530862,1496676579.03546,1496676579.21393,1496676579.322534,1496676579.524357,1496676579.982223,1496676580.238485,1496676580.568652,1496676580.825854,1496676581.300661,1496676581.592694,1496676581.916347,1496676582.068776,1496676582.199202,1496676582.423863,1496676582.871082,1496676583.26446,1496676583.384324,1496676584.02322,1496676584.055693,1496676584.267201,1496676584.310701,1496676584.459488,1496676584.74897,1496676585.120087,1496676585.249352,1496676585.330735,1496676585.40598,1496676585.708103,1496676585.975659,1496676586.520077,1496676586.765688,1496676586.898345,1496676587.612768,1496676587.770882,1496676587.837616,1496676588.434165,1496676588.549491,1496676588.866499,1496676588.942743,1496676588.944452,1496676589.719969,1496676589.811268,1496676589.953817,1496676590.101966,1496676590.228039,1496676590.528582,1496676590.818351,1496676591.326598,1496676591.357031,1496676591.736158,1496676591.841071,1496676592.315686,1496676592.408109,1496676592.854212,1496676593.319993,1496676593.622468,1496676593.810702,1496676594.101722,1496676594.45507,1496676594.838902,1496676595.112983,1496676595.34298,1496676595.441968,1496676595.505464,1496676595.84455,1496676596.070702,1496676596.160735,1496676596.165541,1496676597.042925,1496676597.051683,1496676597.516532,1496676597.551303,1496676597.729461,1496676598.006001,1496676598.509453,1496676598.976412,1496676598.981153,1496676599.635919,1496676599.82196,1496676599.829299,1496676600.070265,1496676600.144288,1496676600.171648,1496676600.677546,1496676600.778817,1496676600.99562,1496676601.270431,1496676601.513743,1496676601.6586,1496676602.431382,1496676602.862194,1496676602.978104,1496676603.002212,1496676603.275329,1496676603.493377,1496676603.577585,1496676603.700652,1496676603.763981,1496676604.624725,1496676604.769403,1496676605.270664,1496676605.361912,1496676605.482098,1496676605.681053,1496676605.811915,1496676606.705437,1496676606.822015,1496676606.909893,1496676606.92813,1496676606.942846,1496676607.044862,1496676607.58576,1496676608.011088,1496676608.525094,1496676608.612175,1496676608.637703,1496676608.706155,1496676608.783573,1496676609.425318,1496676609.644218,1496676609.96833,1496676610.137647,1496676610.389945,1496676610.603569,1496676610.787724,1496676610.986758,1496676611.241765,1496676611.572335,1496676611.620522,1496676612.634549,1496676612.903454,1496676612.940631,1496676612.967146,1496676613.303556,1496676613.417303,1496676613.99575,1496676614.278176,1496676614.410154,1496676614.452261,1496676615.100532,1496676615.290002,1496676615.300848,1496676615.3806,1496676615.61539,1496676615.8927,1496676616.061274,1496676616.809542,1496676616.869839,1496676616.964688,1496676617.225469,1496676617.688244,1496676617.779451,1496676617.957895,1496676618.388857,1496676618.875346,1496676619.1276,1496676619.378686,1496676619.570943,1496676619.62989,1496676619.738332,1496676620.384749,1496676620.525102,1496676620.531569,1496676620.597175,1496676620.989643,1496676621.210725,1496676621.328485,1496676621.361981,1496676621.42737,1496676622.30535,1496676622.579935,1496676622.663594,1496676622.761597,1496676622.770695,1496676622.909629,1496676623.219361,1496676624.336672,1496676624.415543,1496676624.497269,1496676624.49967,1496676624.682266,1496676624.73263,1496676624.91626,1496676625.58389,1496676625.677562,1496676625.850768,1496676626.1899,1496676626.269704,1496676626.352922,1496676626.359296,1496676626.585072,1496676627.0014,1496676627.307586,1496676627.65848,1496676627.849667,1496676628.216344,1496676628.415888,1496676628.453477,1496676628.56885,1496676628.888948,1496676629.039029,1496676629.445078,1496676629.555647,1496676630.096998,1496676630.212194,1496676630.381539,1496676630.470723,1496676630.50488,1496676630.792374,1496676631.030343,1496676631.147114,1496676631.387632,1496676631.718949,1496676631.879295,1496676632.089764,1496676632.097093,1496676632.106553,1496676632.110834,1496676632.804076,1496676632.957371,1496676633.376672,1496676633.395136,1496676634.008046,1496676634.236113,1496676634.524321,1496676634.670755,1496676634.784748,1496676634.809095,1496676635.297476,1496676635.494657,1496676636.044344,1496676636.246747,1496676636.544926,1496676636.665619,1496676636.683381,1496676636.964338,1496676637.108674,1496676637.484104,1496676637.518264,1496676638.446907,1496676638.511991,1496676638.704899,1496676638.852072,1496676638.94271,1496676639.083487,1496676639.21533,1496676639.614849,1496676639.745279,1496676639.833531,1496676640.401284,1496676640.719582,1496676640.925269,1496676641.014607,1496676641.045732,1496676641.099035,1496676641.493709,1496676641.637902,1496676642.255192,1496676642.493478,1496676642.765395,1496676642.80158,1496676643.300345,1496676643.456131,1496676643.702646,1496676643.732749,1496676643.735562,1496676644.137768,1496676644.205083,1496676644.214117,1496676644.251744,1496676644.694572,1496676644.831536,1496676644.863628,1496676644.931188,1496676645.215448,1496676645.383207,1496676645.44162,1496676645.479018,1496676645.944775,1496676646.066091,1496676646.104605,1496676646.21611,1496676646.223038,1496676646.304484,1496676646.938643,1496676647.322266,1496676647.425778,1496676647.531881,1496676647.689027,1496676647.901609,1496676648.3225,1496676648.369929,1496676648.435776,1496676648.473328,1496676648.867226,1496676649.01762,1496676649.491147,1496676649.705117,1496676649.822687,1496676649.85973,1496676650.20145,1496676650.466775,1496676650.697932,1496676651.455895,1496676651.580635,1496676651.859387,1496676651.888401,1496676652.145411,1496676652.171286,1496676652.351152,1496676652.351739,1496676653.001712,1496676653.09573,1496676653.193205,1496676653.513699,1496676653.662459,1496676653.725914,1496676653.897591,1496676654.272122,1496676654.633936,1496676654.768745,1496676654.780144,1496676654.933875,1496676655.318373,1496676655.557537,1496676655.576769,1496676655.906165,1496676656.169767,1496676656.446238,1496676656.747495,1496676656.863466,1496676656.947435,1496676657.231193,1496676657.309595,1496676657.624228,1496676658.473067,1496676658.740222,1496676658.782719,1496676658.899115,1496676659.021832,1496676659.04128,1496676659.425285,1496676659.972265,1496676660.494746,1496676660.591372,1496676660.897577,1496676661.033536,1496676661.044799,1496676661.614515,1496676661.617208,1496676661.838926,1496676661.975064,1496676662.069246,1496676662.426423,1496676662.42914,1496676663.456531,1496676663.533091,1496676663.548898,1496676663.628832,1496676663.635252,1496676663.670949,1496676663.786296,1496676664.21555,1496676664.557884,1496676664.823861,1496676664.878672,1496676664.98829,1496676664.989685,1496676665.256626,1496676665.410123,1496676665.721033,1496676665.773636,1496676665.832764,1496676665.846601,1496676665.925692,1496676666.260072,1496676666.397976,1496676666.420238,1496676666.522288,1496676666.524883,1496676666.695436,1496676666.994007,1496676667.009257,1496676667.111653,1496676667.514227,1496676667.652597,1496676667.678197,1496676667.692724,1496676667.979118,1496676668.271659,1496676668.380933,1496676668.544722,1496676668.580867,1496676668.725714,1496676668.815995,1496676668.96587,1496676669.233676,1496676669.336529,1496676669.711201,1496676669.754096,1496676669.840294,1496676669.964909,1496676670.062824,1496676670.064423,1496676670.097965,1496676670.487734,1496676670.76858,1496676672.205656,1496676672.206618,1496676672.247721,1496676672.379913,1496676672.390828,1496676672.569074,1496676672.617587,1496676672.658613,1496676673.141585,1496676673.177345,1496676673.294972,1496676673.448791,1496676673.459261,1496676673.620941,1496676673.866505,1496676673.965948,1496676674.075555,1496676674.129658,1496676674.186064,1496676674.845895,1496676674.873523,1496676675.056221,1496676675.138324,1496676675.263348,1496676675.298533,1496676675.487143,1496676675.716108,1496676675.96933,1496676676.120974,1496676676.345653,1496676676.387821,1496676676.623842,1496676676.669121,1496676677.000397,1496676677.006497,1496676677.182838,1496676677.277054,1496676677.34736,1496676677.656002,1496676677.97039,1496676678.015559,1496676678.30428,1496676678.472287,1496676678.711953,1496676678.745487,1496676678.816853,1496676678.916324,1496676679.108137,1496676679.225058,1496676679.485121,1496676679.79602,1496676679.809279,1496676680.148595,1496676680.204663,1496676680.302292,1496676680.33555,1496676680.35614,1496676680.695893,1496676680.871711,1496676680.932521,1496676680.938883,1496676681.094782,1496676681.274298,1496676681.346747,1496676681.493351,1496676681.597481,1496676681.825163,1496676682.087343,1496676682.122239,1496676682.160219,1496676682.23707,1496676682.243597,1496676682.496302,1496676682.683646,1496676682.768434,1496676682.895481,1496676683.137139,1496676683.503095,1496676683.517172,1496676683.715923,1496676683.853241,1496676684.011135,1496676684.422454,1496676684.458361,1496676684.481613,1496676684.508532,1496676684.906131,1496676684.916013,1496676685.098751,1496676685.222865,1496676685.379676,1496676685.486389,1496676685.725194,1496676685.946595,1496676686.161259,1496676686.277206,1496676686.356384,1496676686.431328,1496676686.514928,1496676686.553671,1496676686.942489,1496676686.994223,1496676687.100535,1496676687.411189,1496676687.483543,1496676687.654593,1496676687.70394,1496676687.731686,1496676687.834488,1496676688.122777,1496676688.182132,1496676688.269475,1496676688.372058,1496676688.585545,1496676688.815621,1496676688.828052,1496676688.843256,1496676688.966728,1496676688.976143,1496676689.186953,1496676689.22282,1496676689.444822,1496676689.585579,1496676689.788336,1496676689.967145,1496676690.201205,1496676690.282389,1496676690.357297,1496676690.493171,1496676690.546441,1496676690.708385,1496676690.824954,1496676690.831728,1496676691.303889,1496676691.363314,1496676691.385862,1496676691.470785,1496676691.569048,1496676691.583843,1496676691.605872,1496676692.192666,1496676692.210663,1496676692.390608,1496676692.600787,1496676692.61405,1496676692.640857,1496676692.657335,1496676692.758316,1496676693.339513,1496676693.535757,1496676693.769923,1496676694.011908,1496676694.064648,1496676694.126317,1496676694.562063,1496676694.641662,1496676694.864255,1496676694.886606,1496676695.085073,1496676695.393107,1496676695.45024,1496676695.453385,1496676695.881564,1496676696.172227,1496676696.220585,1496676696.261349,1496676696.360427,1496676696.360993,1496676696.410337,1496676696.439864,1496676696.77388,1496676697.375659,1496676697.520759,1496676697.638461,1496676697.662964,1496676697.818844,1496676697.939288,1496676697.994672,1496676698.011683,1496676698.380147,1496676698.454373,1496676698.546231,1496676698.608668,1496676698.676209,1496676698.760539,1496676699.273992,1496676699.331609,1496676699.345948,1496676699.355036,1496676699.474458,1496676699.739351,1496676699.933799,1496676700.004783,1496676700.061029,1496676700.070111,1496676700.119274,1496676700.34335,1496676700.521523,1496676700.616709,1496676700.644096,1496676700.765535,1496676700.975388,1496676701.032758,1496676701.036891,1496676701.381672,1496676701.514953,1496676701.533321,1496676701.762627,1496676701.976171,1496676702.032891],"y":[742203.9056428839,851805.8482503981,956241.6125591159,956301.2691360019,881513.9364925432,878713.2490303222,918336.5790486109,887007.7674837998,910031.8489371383,881146.0914960564,829543.9707006618,791023.4911265522,784228.0484321194,781083.9724823673,779271.4620845563,775489.8961645351,770132.5104908715,764836.1829875659,738918.947871757,729699.7553032999,731772.8039359355,736533.9527880609,749858.4458698462,732037.1316172365,725113.1692342095,721400.9652437147,720706.4188289355,728472.5635196968,735607.5538234338,749203.5131170128,749423.1363756215,746805.3541716653,748041.4583908697,745961.3710591081,743246.9949773732,750579.8050095751,752211.7621877566,755239.0035975331,759582.498656505,751315.4370232938,753006.1252572549,751263.0290699187,749246.5350110023,746275.1962438897,742406.9677695588,743772.4869316256,741787.429495845,734990.2630347763,736057.6442535928,730016.2959399393,728478.5460007538,734288.4662567634,737486.8107406133,741755.8208263181,741096.0925709519,746658.1109918852,748943.9632622143,752308.7383970144,750071.8157367283,751643.005120014,750904.4893932133,752691.1286831809,757449.3809585646,759170.1244024076,760663.4888272588,760223.0179031952,760335.9057424023,758899.3208657581,753967.8804517363,757367.1125857136,755967.9702272362,755236.5379644732,752920.0090167088,752520.6269615769,752711.538669969,756644.3438193043,758796.1127762739,755642.1269517861,757387.66945363,757987.1700875643,761723.7139662445,761427.1569126054,762444.1830923858,766614.868471969,765311.4788439656,768051.2215610964,767687.5717011949,767723.8765844154,766489.4147160577,770056.0077031711,771386.5006193097,773260.431578491,773163.7194482203,773513.0247133649,774959.3855537194,779439.3648312466,778016.2243700611,775854.8226388646,775717.4279216108,775714.6891549303,776435.0750305349,775745.8830249605,773059.4279258815,769789.6419045533,773649.3292833643,776797.2232391048,780631.0746726226,781380.0586977579,784491.5307581251,783973.7283219714,786943.673062934,786337.5243252488,786628.3436702992,785709.8807804695,786708.829476809,789572.1505083538,787157.8760959916,781450.5973314182,782637.6531880954,783135.3144426423,784665.0086685149,785965.2035948983,782009.0571368225,785153.632188245,780932.8179557959,778866.2280916045,782079.5442851677,784525.1659212151,781899.0767949458,781254.1617014029,779145.1153440512,779519.1580712373,777603.5027492285,775082.7405186859,774812.4485434053,775023.855118428,777874.9928258578,778520.8578403884,778699.3498109126,781663.8235419156,777793.0733358355,780813.476694344,779922.3616786975,782781.3081200833,781570.552805314,781701.18205249,783823.375896823,785431.4282525594,787089.7078362171,789938.2325073378,789609.7868391845,789608.9741998891,788920.3947942351,786525.9901279567,788145.8499094937,787342.9364431145,787700.9234139551,788822.8926714142,787325.1505822279,786242.0916710974,788310.7438259231,788325.5735746815,790395.6482358498,790726.3518041515,791822.6489964735,794327.9784815933,792634.3666238304,793951.0415504581,794361.8413552862,792642.5792029671,790023.4467837535,790135.084245729,791968.5697439917,790745.9348366138,791107.2003359271,791065.1272314885,792979.3720150598,791450.1541968712,790605.8178622101,789529.9644129545,791442.9636029666,789563.4531736956,790637.6584039084,790843.3502885018,790497.7796628092,787895.8019518189,785404.0998631918,787421.4200995776,787516.2912687896,789707.290265967,791320.1763886131,791592.0606132532,790793.2209933453,792874.2934694195,791825.1697480673,792725.529389423,790927.9813836339,791928.6348226486,788274.6941567711,790267.7892649889,789203.5614220755,790052.6452553906,788070.1164200443,787090.580234095,787832.4365703837,786703.5577848374,786043.6714652049,784278.5567008061,782767.2076940585,783487.3187141723,784419.6856256545,784373.0750834442,784396.3040245265,784932.8471871472,783983.3892289081,782048.1689535471,782264.9933813248,782560.128043898,781812.239281,781803.4560440023,780777.5343863451,779489.025361317,779044.3939897198,777676.2415288558,777322.175676993,778998.4966100453,777682.805501412,777333.2833204411,775628.9110712007,773680.13268438,773452.7625647907,772947.8045497376,772335.3595015006,772744.6053995587,774316.6186700576,773328.8119055787,773088.8435923747,773587.0389849367,773164.9926347935,773353.5955017133,773647.2170569347,772367.9149562424,771278.7327007254,771232.0515604791,770480.9657851135,771536.0065690471,769302.2434844752,768760.9600645992,767166.6769273471,766900.8377453153,768241.6454734061,767476.9140914937,768192.4503372848,767251.1409127797,765907.3124721398,767225.5388603117,766546.498063844,764988.8149468773,764429.2989332436,765589.6524818516,765159.8962638935,765207.4099907457,765323.7099154972,764838.9541608866,763818.2438401843,764593.0865053838,764030.8456618033,764648.8161999446,765989.4438935292,764169.8349658692,764536.8475460795,765168.5595475141,765731.6296281577,766569.6618894517,766267.5891262165,766465.8660406705,766482.7794881093,765657.0656957931,764586.2196222061,763743.3486504995,761505.12171334,762596.2197089598,761795.9009546193,759910.314428979,758628.2360281101,759028.7914767812,758071.0998754295,759055.0723626941,758792.3490553224,758469.5385146362,758652.8203213108,759904.6799244462,758831.1738083806,759360.658825055,758883.3782476358,758140.7953977297,757484.2735964067,756745.2990297177,756372.6467900068,756171.0879245983,755073.5574106819,754178.7026089035,753143.1120776593,752443.0611662101,753437.461832652,754597.2421462329,753062.8969217369,750364.1172803394,749107.1596855578,748598.2468950081,749277.7861299501,748906.9998506951,750073.176728194,750663.8888738579,750147.2987165658,750471.2859641444,749432.7095913661,749295.5501266044,749011.485804114,748275.6779062011,748181.7946443255,748084.94942468,748038.4083428101,747208.0883368788,744960.8923401242,744286.5337590285,744803.4122788352,745190.6727150652,744780.3204429151,745367.932669629,746100.6292421079,746471.3970139421,746916.2113322219,746853.1457842023,746721.4381780755,746168.5679369216,745101.6784950246,744201.7624749772,743699.1774413382,743154.0490178466,743693.4586050857,742909.2132612756,744004.9515827008,744784.6904401009,744874.4061081072,745204.7506111831,745052.8018491407,744351.9583934715,742697.3679582427,741843.8289693935,742182.3225046636,741402.3047209482,742003.0573674559,741667.9091235579,741442.7484753673,741667.3504595313,741448.5310411587,742402.3769687857,742558.7210380095,742288.8056320379,741915.2878422112,741459.5547553335,741884.1442544403,741415.3273172257,742316.4763910444,741999.9399858412,741956.9436987563,741930.9275628711,742569.7881311039,741747.3637687578,742129.6328991818,741015.5147631984,741807.1051873602,741777.440097688,741443.7152234993,740841.0275594398,740499.2171109453,739756.0518361826,738455.5393778404,738029.8044868157,737517.5143331281,737599.7728849003,737713.5211058764,737684.3027687712,737512.6566714849,737008.7883102057,737736.1903094833,738503.4042399554,738550.257315709,737513.5996977927,737257.9837889607,736933.8427217421,736925.8252021444,737147.4064194136,736568.4121295835,735914.1568503438,735651.108113007,734273.8472080494,734834.637318509,733460.6867453784,732647.6533974617,731596.5551759136,730685.8657591,730122.1311758095,729826.3032411394,729173.6916249748,728479.3470318378,728843.3076220454,728886.3518917271,728536.5168282122,728634.5252505586,728387.980256766,729167.8363219582,729912.7779814663,729603.7372672108,729014.2886845333,728353.196484223,728069.6020664192,728078.1743289158,727934.0322917913,727805.4143079788,727385.1930087745,727109.1453742717,726868.1582362966,726696.2699255919,725809.0487856757,725249.4689738877,725170.4225266689,724131.0582287663,724551.5905557995,724675.1173288111,724998.0840612601,725198.0504994586,725092.7146811779,724623.7503907704,724053.7390721987,724672.8570606101,724706.5447537887,724695.2252374389,725120.6597545575,725070.2860363292,724503.0231316749,724886.2997428769,723965.3337924152,723831.6030695644,722615.4350189108,722907.1396573909,723546.5699578715,723048.7973708834,722793.0736241027,722452.9781519321,722572.9233309005,721691.1385361904,722242.8541495607,721749.4611878073,721605.2001994118,722487.2163079624,723068.5619112963,722882.0057783218,722830.8531090125,723253.9715392574,722784.4662061145,722931.4859571826,723713.5281930811,724276.995564441,723888.0453354007,724078.9791679301,723835.4375584502,723357.8514436393,722626.6069221158,722947.5554447292,721755.6131884946,721201.5853319737,721243.4173296761,720318.988629308,720286.8718361116,720490.4148432958,720213.9286269181,719782.2462051244,718782.3919263569,718857.0908667683,719408.2671735344,719248.4213405151,719918.9025645512,718644.5535898942,718318.5732896483,717505.6054246275,717224.8877529133,716378.3522622796,716008.6478800646,715874.3239047482,715643.6255885953,716430.2156882468,716593.6076026077,716733.8658715595,716877.375209727,717359.3222640504,716612.4809049672,716282.8230576045,715569.0723741961,715763.9378011647,715361.3271712255,715583.6957322251,715515.621197597,715502.6823713795,715141.398093044,714914.2597037173,714159.080573,713687.1801041849,713934.9722996316,713339.8740590028,713330.0273223727,713422.3585960112,713484.8532062653,714156.3645942019,714643.9081278807,715123.3572216155,715923.4748646991,716727.5272793224,717358.9122930098,717339.1431112076,717133.495447677,717933.4662144481,718727.1546717677,718463.7925897647,718767.6876670689,719547.5629001439,719487.1393087881,719907.1554273292,720406.6860346795,720368.0159182097,720553.5791810908,720678.1485078286,720555.623224607,720621.0458572914,720408.2325495261,720923.6414083976,720945.0221312806,721258.702283553,720527.703869704,720781.3815331202,721091.1969632105,720630.1995799174,720799.3508660814,720758.0740590381,720820.1582791604,721065.6119249718,720484.5951739076,720146.3020302878,719986.9949701485,719419.4087611685,719477.4556336005,718967.8550539827,718536.0859709745,717643.9327140538,717474.2929670684,717973.1647680381,718007.8782187297,718230.5193158515,718341.3353315422,718421.56622379,718551.4254069501,718468.0576183867,718392.6746844897,718724.4681977007,719204.3179358843,719017.2675118472,719183.8518185916,718773.04312969,719443.0401863595,719591.8106759697,719197.3936559892,718723.7972652462,718783.305722282,718595.9897611522,718621.7036801865,718220.385768296,718280.0342627745,718853.992863323,718621.1189456272,718625.0943844775,718568.8311970237,717409.4783192242,716927.6936535832,717085.0111543149,716810.3412658653,716213.9929859063,715672.2546885508,716099.3701566018,715990.5128674252,715450.0771293995,714915.1303771891,714236.2800560974,714112.3003108009,713970.1992678726,713068.1631934602,713170.7850153858,713060.5806596507,713302.5890075109,713007.5155229563,713077.1361455887,713432.0480942678,712604.040247504,712412.8736679716,712342.7142402644,711904.7876008248,712088.8517796013,711535.2677708502,710927.8034107845,711392.8475491857,711550.0918123543,711731.7842203968,711685.7003200443,711698.8867576518,711577.6618491685,712064.9665623396,712646.3616972018,713184.4303621388,712733.2168741302,712608.3359839817,712896.700962894,712966.4255306346,713625.6304719879,713967.4909791132,714125.3422033939,714400.1433526184,714942.4149213625,715511.615210456,716175.2776454551,716232.3619181578,716074.5373476791,716335.1012949237,716040.1658254628,716188.2171064875,716327.2235737892,716107.5837861347,716178.6752210888,716202.485058987,716108.5041262573,716438.2207407588,716687.1063427903,716695.8393886784,716605.9422367557,716686.5364011725,716939.373159248,716924.2949680471,717188.0461940176,717538.725713548,718095.1979620663,718050.1928147582,717856.3390837536,717697.3184145783,718001.0580341482,716866.5393190878,716358.4960222712,715655.18636315,715022.4895271459,714312.2794661585,713572.3330860436,712548.1542686967,712036.256254865,712459.2343598193,711775.7560598052,712182.0242758433,712348.7811296352,712771.7761990763,712813.046325782,713003.9890933947,712928.3039577466,712937.6321067221,713516.3123454473,713849.4717665247,713790.2465868312,713600.7589569578,713802.0469841633,713643.5642177066,713884.4301472568,713734.8152003741,713697.5432921856,713575.1294740026,714030.6879187712,713698.3185615909,713998.6473675288,713946.5453418995,713746.7630062768,713791.6268223653,714101.5218411343,714672.7946423888,714511.3156436305,713980.1735009657,713865.7861906755,714006.7389907916,714092.3562395701,713793.8461849171,713677.7129528829,713680.134754887,714219.1485518336,714218.9737391867,714103.5520908667,713792.7488063464,713590.5738251001,713521.6736519043,713490.4931026031,713475.267147117,713872.636487395,713729.863092816,713713.8101602916,713982.849542273,713948.5427241232,713851.3386970374,713770.1021010515,714317.6851326246,714331.698699484,714553.3658676245,714908.5347929964,715282.1703940762,715233.501073603,715807.7517743977,715923.0977989772,715906.1135286128,715955.7708622979,716522.0128820697,716686.0079807861,717073.7307619061,717176.0987043793,717556.8662162388,717470.7489251542,718020.9552960073,718510.2462606411,718238.2412468954,718373.0893424355,718668.2204819967,718654.9240786529,718906.1635725792,718418.7114854172,718231.9875548652,717624.3386435878,717541.1938728779,717844.242235696,717639.5807215223,717812.674829445,717955.277918595,717793.0905381397,718182.746082458,718172.7430002914,718315.5057538899,718718.8218136881,719061.8863882007,719501.5274235251,719187.9495246578,719150.2888476482,719362.0885315087,718944.4220872934,718566.8364411978,718690.9298859278,718889.7556658684,719101.1574759168,719365.3655651635,719342.0992865437,719413.6382237651,719569.8467392845,719969.8791954902,719896.8879850305,720037.2430094983,720223.0070361858,720589.6225169016,720770.9649109422,720960.528486961,721173.4847160665,721646.3054934666,722133.4827895269,722267.2334511924,722331.1742692338,722855.1072669502,723098.1397004044,723632.6910654941,723956.6924770743,724147.4702986492,723781.0510941275,723872.3369465453,724073.3549428739,724419.1521712951,724246.0707765108,724363.6462063086,724242.2880330746,724499.7684090382,724938.8332170573,725119.7175167544,725608.5502544381,725819.4902683762,725919.8714494664,725810.6502526033,726021.0439753039,726069.509649119,726110.7803830759,726513.5404089076,726605.9813430652,726795.1435462626,727029.1316693531,727136.7458447561,727166.3745846566,726983.0449925701,727169.6532348407,727084.8207803128,726860.0055891948,726854.9849741096,726828.2002498169,726504.9812456599,726231.2939308288,725757.7702633622,726143.7776602992,725957.0935456187,725701.9028140495,725705.9552893743,725558.9711573812,725368.257954555,725316.0677713109,725730.5375337432,725895.2994180685,725877.3231719902,726169.1825625229,726467.2623596976,726386.409339927,725917.5547571942,725887.3384695838,725999.9784629135,726016.0307760955,726150.3434813927,726141.9571621636,726090.5169865951,725861.695575354,725736.9352844204,726175.9711314496,726396.3181464069,726198.2069189597,726591.9508635902,727017.0109452751,727138.8794598845,727022.6197324046,727096.0307776941,727426.2812094891,727805.6657730535,728241.4407048381,728289.8329299208,728358.4463768266,728825.6222110969,728450.4373392997,728477.6282435802,728951.5950031966,729206.1159776897,729367.9320354335,729817.6375804229,730292.8263408262,730763.3924995994,730881.8568794318,730689.0342582436,730967.4297012787,731381.5644378801,731537.2338425945,731514.2293140851,731684.6679657261,731816.4380305973,732279.3115607728]}},"id":"643617b1-74cb-4c0e-b54f-2298fe546a33","type":"ColumnDataSource"},{"attributes":{"callback":null},"id":"f19dbff7-c11b-410e-b8b3-29cb2c22cea8","type":"DataRange1d"},{"attributes":{},"id":"87fc8cc7-d24d-4f46-a8d0-a999f9a70185","type":"BasicTicker"},{"attributes":{"max_interval":500.0,"num_minor_ticks":0},"id":"d110fa6f-7bbf-4960-bb39-0a90d57face8","type":"AdaptiveTicker"},{"attributes":{"line_color":{"value":"#A6CEE3"},"x":{"field":"x"},"y":{"field":"y"}},"id":"99857426-3f9f-463b-9534-24358383024c","type":"Line"},{"attributes":{"base":60,"mantissas":[1,2,5,10,15,20,30],"max_interval":1800000.0,"min_interval":1000.0,"num_minor_ticks":0},"id":"e6da8203-b09e-4a3a-bdd5-47e592591982","type":"AdaptiveTicker"},{"attributes":{"plot":{"id":"50780ad1-d35b-433f-b20e-6c0f6fc9d357","subtype":"Figure","type":"Plot"}},"id":"c1c51d6d-6ef0-40b8-9d48-764620ca7f17","type":"ResetTool"},{"attributes":{"days":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]},"id":"c62daf38-7f8d-4216-a9fc-f0f042b78785","type":"DaysTicker"},{"attributes":{},"id":"3b719006-dd14-4e3b-8420-37a71307a3a0","type":"BasicTickFormatter"},{"attributes":{"grid_line_alpha":{"value":0.3},"plot":{"id":"50780ad1-d35b-433f-b20e-6c0f6fc9d357","subtype":"Figure","type":"Plot"},"ticker":{"id":"86ecf267-da90-4362-bccd-90be2d40155b","type":"DatetimeTicker"}},"id":"ab3a4435-98c3-4021-8a17-b1f0e67d8518","type":"Grid"},{"attributes":{"plot":null,"text":"Throughput"},"id":"76c09dae-981d-4010-8773-1ff3aa46161b","type":"Title"},{"attributes":{"months":[0,1,2,3,4,5,6,7,8,9,10,11]},"id":"48b3831b-eae5-4caa-acdc-1c186531c36b","type":"MonthsTicker"},{"attributes":{"callback":null},"id":"aae5756a-9b23-4ed8-9830-e9f11b1218d0","type":"DataRange1d"},{"attributes":{"label":{"value":"Throughput Bytes/sec"},"renderers":[{"id":"f2d734bc-2663-45e3-81c0-aa1dd2955d8d","type":"GlyphRenderer"}]},"id":"29699e15-93ea-49b7-9a37-94e7e6610c14","type":"LegendItem"},{"attributes":{"children":[{"id":"3186838c-d3ae-4016-8914-b50a7e5e0520","type":"ToolbarBox"},{"id":"d6445b9d-da8a-4179-92d2-5de3913a3373","type":"Column"}]},"id":"99e50247-faca-415b-b9c8-70a24d69c703","type":"Column"},{"attributes":{},"id":"ec60ffd8-da4c-4847-91f0-7e2d3833297b","type":"YearsTicker"},{"attributes":{"plot":{"id":"50780ad1-d35b-433f-b20e-6c0f6fc9d357","subtype":"Figure","type":"Plot"}},"id":"2ccd5702-3990-4784-8c84-c11fd0a5aab1","type":"PanTool"},{"attributes":{"months":[0,4,8]},"id":"218a7222-311f-4684-b3c7-88d3c2a8de97","type":"MonthsTicker"},{"attributes":{"dimension":1,"grid_line_alpha":{"value":0.3},"plot":{"id":"50780ad1-d35b-433f-b20e-6c0f6fc9d357","subtype":"Figure","type":"Plot"},"ticker":{"id":"87fc8cc7-d24d-4f46-a8d0-a999f9a70185","type":"BasicTicker"}},"id":"0466cb9d-5ac8-4dae-980d-90fa70c227ec","type":"Grid"},{"attributes":{"months":[0,2,4,6,8,10]},"id":"989e7d5c-dffa-427a-97df-adceeda4e1f6","type":"MonthsTicker"},{"attributes":{"days":[1,8,15,22]},"id":"7de03d36-dbdf-4c5e-825c-e11a6da91432","type":"DaysTicker"},{"attributes":{"months":[0,6]},"id":"c3abdea3-be78-45a0-a597-e7548c69384f","type":"MonthsTicker"},{"attributes":{"sizing_mode":"scale_width","toolbar_location":"above","tools":[{"id":"2ccd5702-3990-4784-8c84-c11fd0a5aab1","type":"PanTool"},{"id":"b2862ae3-1fe3-4fa8-b3c9-31a23e1e5ca7","type":"WheelZoomTool"},{"id":"fc9fa68b-8a93-4693-ac03-28b2c6f9a6f3","type":"BoxZoomTool"},{"id":"70abbac7-abb8-45e4-9b0a-301d26ef391f","type":"SaveTool"},{"id":"c1c51d6d-6ef0-40b8-9d48-764620ca7f17","type":"ResetTool"},{"id":"58d8e18d-3676-4cfe-8ae7-4e044488f7ab","type":"HelpTool"}]},"id":"3186838c-d3ae-4016-8914-b50a7e5e0520","type":"ToolbarBox"},{"attributes":{"axis_label":"Transfer Rate","formatter":{"id":"d8b4a98f-59b9-4d01-9300-1b1112e0083c","type":"DatetimeTickFormatter"},"plot":{"id":"50780ad1-d35b-433f-b20e-6c0f6fc9d357","subtype":"Figure","type":"Plot"},"ticker":{"id":"86ecf267-da90-4362-bccd-90be2d40155b","type":"DatetimeTicker"}},"id":"8d1c5c7b-c58a-4bb0-9a1a-b19b13273f37","type":"DatetimeAxis"},{"attributes":{},"id":"9b1a21a4-7b1d-4754-afd2-5accac8ad769","type":"ToolEvents"},{"attributes":{"below":[{"id":"8d1c5c7b-c58a-4bb0-9a1a-b19b13273f37","type":"DatetimeAxis"}],"left":[{"id":"b3a46b9c-f26e-47e1-84e9-3b6c71dfc3ee","type":"LinearAxis"}],"plot_height":400,"plot_width":400,"renderers":[{"id":"8d1c5c7b-c58a-4bb0-9a1a-b19b13273f37","type":"DatetimeAxis"},{"id":"ab3a4435-98c3-4021-8a17-b1f0e67d8518","type":"Grid"},{"id":"b3a46b9c-f26e-47e1-84e9-3b6c71dfc3ee","type":"LinearAxis"},{"id":"0466cb9d-5ac8-4dae-980d-90fa70c227ec","type":"Grid"},{"id":"7fdb1efe-af7b-4e7c-9527-f7baa540fc6a","type":"BoxAnnotation"},{"id":"0ace6258-7758-4372-abba-45d5bc4ac6aa","type":"Legend"},{"id":"f2d734bc-2663-45e3-81c0-aa1dd2955d8d","type":"GlyphRenderer"}],"title":{"id":"76c09dae-981d-4010-8773-1ff3aa46161b","type":"Title"},"tool_events":{"id":"9b1a21a4-7b1d-4754-afd2-5accac8ad769","type":"ToolEvents"},"toolbar":{"id":"60a50260-439f-436f-be9d-c14279136816","type":"Toolbar"},"toolbar_location":null,"x_range":{"id":"f19dbff7-c11b-410e-b8b3-29cb2c22cea8","type":"DataRange1d"},"y_range":{"id":"aae5756a-9b23-4ed8-9830-e9f11b1218d0","type":"DataRange1d"}},"id":"50780ad1-d35b-433f-b20e-6c0f6fc9d357","subtype":"Figure","type":"Plot"},{"attributes":{"children":[{"id":"50780ad1-d35b-433f-b20e-6c0f6fc9d357","subtype":"Figure","type":"Plot"}]},"id":"35aa0ef1-7178-44af-96fd-248ac1d88587","type":"Row"},{"attributes":{"plot":{"id":"50780ad1-d35b-433f-b20e-6c0f6fc9d357","subtype":"Figure","type":"Plot"}},"id":"58d8e18d-3676-4cfe-8ae7-4e044488f7ab","type":"HelpTool"},{"attributes":{"active_drag":"auto","active_scroll":"auto","active_tap":"auto","tools":[{"id":"2ccd5702-3990-4784-8c84-c11fd0a5aab1","type":"PanTool"},{"id":"b2862ae3-1fe3-4fa8-b3c9-31a23e1e5ca7","type":"WheelZoomTool"},{"id":"fc9fa68b-8a93-4693-ac03-28b2c6f9a6f3","type":"BoxZoomTool"},{"id":"70abbac7-abb8-45e4-9b0a-301d26ef391f","type":"SaveTool"},{"id":"c1c51d6d-6ef0-40b8-9d48-764620ca7f17","type":"ResetTool"},{"id":"58d8e18d-3676-4cfe-8ae7-4e044488f7ab","type":"HelpTool"}]},"id":"60a50260-439f-436f-be9d-c14279136816","type":"Toolbar"},{"attributes":{"overlay":{"id":"7fdb1efe-af7b-4e7c-9527-f7baa540fc6a","type":"BoxAnnotation"},"plot":{"id":"50780ad1-d35b-433f-b20e-6c0f6fc9d357","subtype":"Figure","type":"Plot"}},"id":"fc9fa68b-8a93-4693-ac03-28b2c6f9a6f3","type":"BoxZoomTool"},{"attributes":{"days":[1,15]},"id":"8f481e24-27df-4d9d-b467-abe80d50529c","type":"DaysTicker"},{"attributes":{"items":[{"id":"29699e15-93ea-49b7-9a37-94e7e6610c14","type":"LegendItem"}],"plot":{"id":"50780ad1-d35b-433f-b20e-6c0f6fc9d357","subtype":"Figure","type":"Plot"}},"id":"0ace6258-7758-4372-abba-45d5bc4ac6aa","type":"Legend"},{"attributes":{"data_source":{"id":"643617b1-74cb-4c0e-b54f-2298fe546a33","type":"ColumnDataSource"},"glyph":{"id":"99857426-3f9f-463b-9534-24358383024c","type":"Line"},"hover_glyph":null,"muted_glyph":null,"nonselection_glyph":{"id":"8384c371-52ab-4cc0-bc9c-9938ec34b407","type":"Line"},"selection_glyph":null},"id":"f2d734bc-2663-45e3-81c0-aa1dd2955d8d","type":"GlyphRenderer"},{"attributes":{"base":24,"mantissas":[1,2,4,6,8,12],"max_interval":43200000.0,"min_interval":3600000.0,"num_minor_ticks":0},"id":"b73039c7-50e9-4906-bb5c-c9eecf6fce1a","type":"AdaptiveTicker"},{"attributes":{"days":[1,4,7,10,13,16,19,22,25,28]},"id":"2ea356af-42ad-4aac-bdf6-64bf75094dd3","type":"DaysTicker"}],"root_ids":["99e50247-faca-415b-b9c8-70a24d69c703"]},"title":"Bokeh Application","version":"0.12.5"}};
+              var render_items = [{"docid":"1099709e-8e5d-4604-ba44-79e4f034069a","elementid":"f1e33520-c5e0-4841-b7b0-57d5ce9d42ac","modelid":"99e50247-faca-415b-b9c8-70a24d69c703"}];
+              
+              Bokeh.embed.embed_items(docs_json, render_items);
+            });
+          };
+          if (document.readyState != "loading") fn();
+          else document.addEventListener("DOMContentLoaded", fn);
+        })();
+        
+        </script>
+    </body>
+</html>
\ No newline at end of file
diff --git a/oregon/locustEvents.py b/oregon/locustEvents.py
new file mode 100644
index 0000000..f7bc7f8
--- /dev/null
+++ b/oregon/locustEvents.py
@@ -0,0 +1,72 @@
+from locust import events
+import time
+try:
+   import cPickle as pickle
+except:
+   import pickle
+
+metrics = {
+			'req_success':[],
+			'throughput':[],
+			'downloads':[],
+			'req_errors':[]
+		  }
+downloads=0
+
+reqError = events.EventHook()
+def req_error(**kw):
+	metrics['req_errors'].append({'timestamp':time.time(), 'msg':kw.get('message','')})
+	print "Req Error: %s"%kw.get("message","unknown")
+reqError += req_error
+
+def req_success(request_type, name, response_time, response_length, **kw):
+	#print "hello"
+	metrics['req_success'].append({'time':response_time, 'len':response_length, 'timestamp':time.time()})
+events.request_success += req_success
+
+downloadStart = events.EventHook()
+def on_download_start(**kw):
+	global downloads, metrics
+	size = kw.get('size',-1)
+	downloads += 1
+	print "Downlod Started: %d"%downloads
+	metrics['downloads'].append({ 'time':time.time(), 'downloads':downloads})
+downloadStart += on_download_start
+
+downloadEnd = events.EventHook()
+def on_download_end(**kw):
+	global downloads, metrics
+	size = kw.get('size',-1)
+	downloads -=1
+	print "Download Ended: %d"%downloads
+	metrics['downloads'].append({'time':time.time(), 'downloads':downloads})
+
+downloadEnd += on_download_end
+
+chunkHook = events.EventHook()
+bytesRecvd = 0
+timeSpent = 0.0
+def on_chunk(**kw):
+	global bytesRecvd, timeSpent, metrics, downloads
+	bytesRecvd += kw.get('bytesRead',0)
+	timeSpent += kw.get('seconds', 0.0)
+	rate = 0
+	if timeSpent > 0:
+		rate= bytesRecvd/timeSpent
+	metrics['throughput'].append({'time':time.time(), 'len':bytesRecvd, 'timeSpent':timeSpent, 'downloads':downloads, 'rate':rate})	
+chunkHook += on_chunk
+
+def exiting():
+	# pass
+	global metrics
+	tfin = int(time.time())
+	f = open('../results/%d_results.pkl'%tfin, 'wb')
+	pickle.dump(metrics, f)
+	f.flush()
+	f.close()
+	print "Req metrics captured: %d"%len(metrics)
+
+
+
+
+events.quitting += exiting
\ No newline at end of file
diff --git a/oregon/locustfile_exportImage.py b/oregon/locustfile_exportImage.py
new file mode 100644
index 0000000..b6ab960
--- /dev/null
+++ b/oregon/locustfile_exportImage.py
@@ -0,0 +1,107 @@
+# Purpose: Response times from exportImage REST Endpoint
+
+from locust import HttpLocust, TaskSet, task
+import random
+import json
+import locustEvents
+import time
+import webui
+import resource
+#resource.setrlimit(resource.RLIMIT_NOFILE, (999999, 999999))
+
+# Host
+service_host = "http://imagery.oregonexplorer.info"
+# Routes for ArcGIS Server
+routes = {
+    "1995": "/arcgis/rest/services/NAIP_1995/NAIP_1995_WM/ImageServer/",
+    "2000": "/arcgis/rest/services/NAIP_2000/NAIP_2000_WM/ImageServer/",
+    "2005": "/arcgis/rest/services/NAIP_2005/NAIP_2005_WM/ImageServer/",
+    "2009": "/arcgis/rest/services/NAIP_2009/NAIP_2009_WM/ImageServer/",
+    "2011": "/arcgis/rest/services/NAIP_2011/NAIP_2011_WM/ImageServer/",
+    "pictometry": "/arcgis/rest/services/Pictometry/BestofPictometry/ImageServer/",
+    "hillshade": "/arcgis/rest/services/Derived_surfaces/Hillshade_derivedsurfaces/ImageServer/"
+}
+
+class UserBehavior(TaskSet):
+
+    extent=None
+
+    def on_start(self):
+        # @Assumption
+        # All services are same extent
+        if self.extent is None:
+            print "Grab Extent"
+            with self.client.post(routes['1995'],{'f':'json'}, catch_response=True) as response:
+                try:
+                    params = json.loads(response.content)
+                except:
+                    locustEvents.reqError.fire(message='Bad Response Content - Definition')
+                    response.failure('Could not parse json')
+                    return
+
+                self.extent = params['extent']
+
+
+    def baseQuery(self, route):
+        x1 = random.uniform(self.extent['xmin'], self.extent['xmax'])
+        x2 = random.uniform(x1, self.extent['xmax'])
+        y1 = random.uniform(self.extent['ymin'], self.extent['ymax'])
+        y2 = y1 + (x2-x1) #create a square envelope
+
+        queryData = {
+            'f': 'image',
+            'dpi': 96,
+            'transparent': 'true',
+            'bbox': ','.join(map(str, [x1, y1, x2, y2])),
+            'bboxSR': 102100,
+            'imageSR': 102100,
+            'size': '1160, 578',
+            'format': 'png8'
+        }
+
+        qstr = "?"
+        val = None
+        for k,v in queryData.items():
+            if k =='geom':
+                val = json.dumps(geom)
+            else:
+                val = v
+            qstr += "%s=%s&"%(k, str(val))
+        qstr = qstr[0:-1]
+        self.client.get(route+'exportImage'+qstr, name=route)
+
+    @task(2)
+    def service1(self):
+        self.baseQuery(routes['1995'])
+
+    @task(3)
+    def service2(self):
+        self.baseQuery(routes['2000'])
+
+    @task(5)
+    def service3(self):
+        self.baseQuery(routes['2005'])
+
+    @task(10)
+    def service4(self):
+        self.baseQuery(routes['2009'])
+
+    @task(15)
+    def service5(self):
+        self.baseQuery(routes['2011'])
+
+    @task(60)
+    def service6(self):
+        self.baseQuery(routes['pictometry'])
+
+    @task(5)
+    def service7(self):
+        self.baseQuery(routes['hillshade'])
+
+class WebsiteUser(HttpLocust):
+    host = service_host
+    task_set = UserBehavior
+    # Assume most users wait about 0.3 - 5 seconds  between requests
+    # when browsing imagery
+    min_wait = 0.3 * 1000
+    max_wait = 5 * 1000
diff --git a/oregon/locustfile_tileImage.py b/oregon/locustfile_tileImage.py
new file mode 100644
index 0000000..3ca08b0
--- /dev/null
+++ b/oregon/locustfile_tileImage.py
@@ -0,0 +1,110 @@
+# Purpose: Response times from exportImage REST Endpoint
+
+from locust import HttpLocust, TaskSet, task
+import random
+import json
+import locustEvents
+import time
+import webui
+import resource
+import math
+from random import randint
+from pyproj import Proj, transform
+
+# Host
+service_host = "http://imagery.oregonexplorer.info"
+# Routes for ArcGIS Server
+routes = {
+    "1995": "/arcgis/rest/services/NAIP_1995/NAIP_1995_WM/ImageServer/",
+    "2000": "/arcgis/rest/services/NAIP_2000/NAIP_2000_WM/ImageServer/",
+    "2005": "/arcgis/rest/services/NAIP_2005/NAIP_2005_WM/ImageServer/",
+    "2009": "/arcgis/rest/services/NAIP_2009/NAIP_2009_WM/ImageServer/",
+    "2011": "/arcgis/rest/services/NAIP_2011/NAIP_2011_WM/ImageServer/",
+    "pictometry": "/arcgis/rest/services/Pictometry/BestofPictometry/ImageServer/",
+    "hillshade": "/arcgis/rest/services/Derived_surfaces/Hillshade_derivedsurfaces/ImageServer/"
+}
+
+# Convert lat, lon, and zoom to tile numbers
+def deg2num(lat_deg, lon_deg, zoom):
+  lat_rad = math.radians(lat_deg)
+  n = 2.0 ** zoom
+  xtile = int((lon_deg + 180.0) / 360.0 * n)
+  ytile = int((1.0 - math.log(math.tan(lat_rad) + (1 / math.cos(lat_rad))) / math.pi) / 2.0 * n)
+  return (xtile, ytile)
+
+class UserBehavior(TaskSet):
+
+    extent=None
+
+    def on_start(self):
+        # @Assumption
+        # All services are same extent
+        if self.extent is None:
+            with self.client.post(routes['1995'],{'f':'json'}, catch_response=True) as response:
+                try:
+                    params = json.loads(response.content)
+                except:
+                    locustEvents.reqError.fire(message='Bad Response Content - Definition')
+                    response.failure('Could not parse json')
+                    return
+
+                self.extent = params['extent']
+
+
+    def baseQuery(self, route):
+        x1 = random.uniform(self.extent['xmin'], self.extent['xmax'])
+        x2 = random.uniform(x1, self.extent['xmax'])
+        y1 = random.uniform(self.extent['ymin'], self.extent['ymax'])
+        y2 = y1 + (x2-x1) #create a square envelope
+
+        #https://gis.stackexchange.com/questions/78838/converting-projected-coordinates-to-lat-lon-using-python/78944
+        inProj = Proj(init='epsg:3857')
+        outProj = Proj(init='epsg:4326')
+        x1p,y1p = x1,y1
+        x2p,y2p = transform(inProj,outProj,x1p,y1p)
+
+        #format /tile/zoom/x/y.png
+        #http://wiki.openstreetmap.org/wiki/Slippy_map_tilenames
+
+        zoom = randint(1, 17)
+        (xtile, ytile) = deg2num(y2p, x2p, zoom)
+
+        #print route+'tile/'+ str(zoom) + "/" + str(ytile) + "/" + str(xtile)
+
+        self.client.get(route+'tile/'+ str(zoom) + "/" + str(ytile) + "/" + str(xtile), name=route)
+
+    @task(2)
+    def service1(self):
+        self.baseQuery(routes['1995'])
+
+    @task(3)
+    def service2(self):
+        self.baseQuery(routes['2000'])
+
+    @task(5)
+    def service3(self):
+        self.baseQuery(routes['2005'])
+
+    @task(10)
+    def service4(self):
+        self.baseQuery(routes['2009'])
+
+    @task(15)
+    def service5(self):
+        self.baseQuery(routes['2011'])
+
+    @task(60)
+    def service6(self):
+        self.baseQuery(routes['pictometry'])
+
+    @task(5)
+    def service7(self):
+        self.baseQuery(routes['hillshade'])
+
+class WebsiteUser(HttpLocust):
+    host = service_host
+    task_set = UserBehavior
+    # Assume most users wait about 0.1 - 2 seconds  between requests
+    # when browsing imagery
+    min_wait = 0.1 * 1000
+    max_wait = 2 * 1000

oregon/webui.py 5(+5 -0)

diff --git a/oregon/webui.py b/oregon/webui.py
new file mode 100644
index 0000000..c92473d
--- /dev/null
+++ b/oregon/webui.py
@@ -0,0 +1,5 @@
+from locust import web
+
+@web.app.route("/added_page")
+def my_added_page():
+    return "Another page"
\ No newline at end of file

qsi/locustEvents.py 72(+72 -0)

diff --git a/qsi/locustEvents.py b/qsi/locustEvents.py
new file mode 100644
index 0000000..f7bc7f8
--- /dev/null
+++ b/qsi/locustEvents.py
@@ -0,0 +1,72 @@
+from locust import events
+import time
+try:
+   import cPickle as pickle
+except:
+   import pickle
+
+metrics = {
+			'req_success':[],
+			'throughput':[],
+			'downloads':[],
+			'req_errors':[]
+		  }
+downloads=0
+
+reqError = events.EventHook()
+def req_error(**kw):
+	metrics['req_errors'].append({'timestamp':time.time(), 'msg':kw.get('message','')})
+	print "Req Error: %s"%kw.get("message","unknown")
+reqError += req_error
+
+def req_success(request_type, name, response_time, response_length, **kw):
+	#print "hello"
+	metrics['req_success'].append({'time':response_time, 'len':response_length, 'timestamp':time.time()})
+events.request_success += req_success
+
+downloadStart = events.EventHook()
+def on_download_start(**kw):
+	global downloads, metrics
+	size = kw.get('size',-1)
+	downloads += 1
+	print "Downlod Started: %d"%downloads
+	metrics['downloads'].append({ 'time':time.time(), 'downloads':downloads})
+downloadStart += on_download_start
+
+downloadEnd = events.EventHook()
+def on_download_end(**kw):
+	global downloads, metrics
+	size = kw.get('size',-1)
+	downloads -=1
+	print "Download Ended: %d"%downloads
+	metrics['downloads'].append({'time':time.time(), 'downloads':downloads})
+
+downloadEnd += on_download_end
+
+chunkHook = events.EventHook()
+bytesRecvd = 0
+timeSpent = 0.0
+def on_chunk(**kw):
+	global bytesRecvd, timeSpent, metrics, downloads
+	bytesRecvd += kw.get('bytesRead',0)
+	timeSpent += kw.get('seconds', 0.0)
+	rate = 0
+	if timeSpent > 0:
+		rate= bytesRecvd/timeSpent
+	metrics['throughput'].append({'time':time.time(), 'len':bytesRecvd, 'timeSpent':timeSpent, 'downloads':downloads, 'rate':rate})	
+chunkHook += on_chunk
+
+def exiting():
+	# pass
+	global metrics
+	tfin = int(time.time())
+	f = open('../results/%d_results.pkl'%tfin, 'wb')
+	pickle.dump(metrics, f)
+	f.flush()
+	f.close()
+	print "Req metrics captured: %d"%len(metrics)
+
+
+
+
+events.quitting += exiting
\ No newline at end of file
diff --git a/qsi/locustfile_exportImage.py b/qsi/locustfile_exportImage.py
new file mode 100644
index 0000000..b6ab960
--- /dev/null
+++ b/qsi/locustfile_exportImage.py
@@ -0,0 +1,107 @@
+# Purpose: Response times from exportImage REST Endpoint
+
+from locust import HttpLocust, TaskSet, task
+import random
+import json
+import locustEvents
+import time
+import webui
+import resource
+#resource.setrlimit(resource.RLIMIT_NOFILE, (999999, 999999))
+
+# Host
+service_host = "http://imagery.oregonexplorer.info"
+# Routes for ArcGIS Server
+routes = {
+    "1995": "/arcgis/rest/services/NAIP_1995/NAIP_1995_WM/ImageServer/",
+    "2000": "/arcgis/rest/services/NAIP_2000/NAIP_2000_WM/ImageServer/",
+    "2005": "/arcgis/rest/services/NAIP_2005/NAIP_2005_WM/ImageServer/",
+    "2009": "/arcgis/rest/services/NAIP_2009/NAIP_2009_WM/ImageServer/",
+    "2011": "/arcgis/rest/services/NAIP_2011/NAIP_2011_WM/ImageServer/",
+    "pictometry": "/arcgis/rest/services/Pictometry/BestofPictometry/ImageServer/",
+    "hillshade": "/arcgis/rest/services/Derived_surfaces/Hillshade_derivedsurfaces/ImageServer/"
+}
+
+class UserBehavior(TaskSet):
+
+    extent=None
+
+    def on_start(self):
+        # @Assumption
+        # All services are same extent
+        if self.extent is None:
+            print "Grab Extent"
+            with self.client.post(routes['1995'],{'f':'json'}, catch_response=True) as response:
+                try:
+                    params = json.loads(response.content)
+                except:
+                    locustEvents.reqError.fire(message='Bad Response Content - Definition')
+                    response.failure('Could not parse json')
+                    return
+
+                self.extent = params['extent']
+
+
+    def baseQuery(self, route):
+        x1 = random.uniform(self.extent['xmin'], self.extent['xmax'])
+        x2 = random.uniform(x1, self.extent['xmax'])
+        y1 = random.uniform(self.extent['ymin'], self.extent['ymax'])
+        y2 = y1 + (x2-x1) #create a square envelope
+
+        queryData = {
+            'f': 'image',
+            'dpi': 96,
+            'transparent': 'true',
+            'bbox': ','.join(map(str, [x1, y1, x2, y2])),
+            'bboxSR': 102100,
+            'imageSR': 102100,
+            'size': '1160, 578',
+            'format': 'png8'
+        }
+
+        qstr = "?"
+        val = None
+        for k,v in queryData.items():
+            if k =='geom':
+                val = json.dumps(geom)
+            else:
+                val = v
+            qstr += "%s=%s&"%(k, str(val))
+        qstr = qstr[0:-1]
+        self.client.get(route+'exportImage'+qstr, name=route)
+
+    @task(2)
+    def service1(self):
+        self.baseQuery(routes['1995'])
+
+    @task(3)
+    def service2(self):
+        self.baseQuery(routes['2000'])
+
+    @task(5)
+    def service3(self):
+        self.baseQuery(routes['2005'])
+
+    @task(10)
+    def service4(self):
+        self.baseQuery(routes['2009'])
+
+    @task(15)
+    def service5(self):
+        self.baseQuery(routes['2011'])
+
+    @task(60)
+    def service6(self):
+        self.baseQuery(routes['pictometry'])
+
+    @task(5)
+    def service7(self):
+        self.baseQuery(routes['hillshade'])
+
+class WebsiteUser(HttpLocust):
+    host = service_host
+    task_set = UserBehavior
+    # Assume most users wait about 0.3 - 5 seconds  between requests
+    # when browsing imagery
+    min_wait = 0.3 * 1000
+    max_wait = 5 * 1000
diff --git a/qsi/locustfile_tileImage.py b/qsi/locustfile_tileImage.py
new file mode 100644
index 0000000..3ca08b0
--- /dev/null
+++ b/qsi/locustfile_tileImage.py
@@ -0,0 +1,110 @@
+# Purpose: Response times from exportImage REST Endpoint
+
+from locust import HttpLocust, TaskSet, task
+import random
+import json
+import locustEvents
+import time
+import webui
+import resource
+import math
+from random import randint
+from pyproj import Proj, transform
+
+# Host
+service_host = "http://imagery.oregonexplorer.info"
+# Routes for ArcGIS Server
+routes = {
+    "1995": "/arcgis/rest/services/NAIP_1995/NAIP_1995_WM/ImageServer/",
+    "2000": "/arcgis/rest/services/NAIP_2000/NAIP_2000_WM/ImageServer/",
+    "2005": "/arcgis/rest/services/NAIP_2005/NAIP_2005_WM/ImageServer/",
+    "2009": "/arcgis/rest/services/NAIP_2009/NAIP_2009_WM/ImageServer/",
+    "2011": "/arcgis/rest/services/NAIP_2011/NAIP_2011_WM/ImageServer/",
+    "pictometry": "/arcgis/rest/services/Pictometry/BestofPictometry/ImageServer/",
+    "hillshade": "/arcgis/rest/services/Derived_surfaces/Hillshade_derivedsurfaces/ImageServer/"
+}
+
+# Convert lat, lon, and zoom to tile numbers
+def deg2num(lat_deg, lon_deg, zoom):
+  lat_rad = math.radians(lat_deg)
+  n = 2.0 ** zoom
+  xtile = int((lon_deg + 180.0) / 360.0 * n)
+  ytile = int((1.0 - math.log(math.tan(lat_rad) + (1 / math.cos(lat_rad))) / math.pi) / 2.0 * n)
+  return (xtile, ytile)
+
+class UserBehavior(TaskSet):
+
+    extent=None
+
+    def on_start(self):
+        # @Assumption
+        # All services are same extent
+        if self.extent is None:
+            with self.client.post(routes['1995'],{'f':'json'}, catch_response=True) as response:
+                try:
+                    params = json.loads(response.content)
+                except:
+                    locustEvents.reqError.fire(message='Bad Response Content - Definition')
+                    response.failure('Could not parse json')
+                    return
+
+                self.extent = params['extent']
+
+
+    def baseQuery(self, route):
+        x1 = random.uniform(self.extent['xmin'], self.extent['xmax'])
+        x2 = random.uniform(x1, self.extent['xmax'])
+        y1 = random.uniform(self.extent['ymin'], self.extent['ymax'])
+        y2 = y1 + (x2-x1) #create a square envelope
+
+        #https://gis.stackexchange.com/questions/78838/converting-projected-coordinates-to-lat-lon-using-python/78944
+        inProj = Proj(init='epsg:3857')
+        outProj = Proj(init='epsg:4326')
+        x1p,y1p = x1,y1
+        x2p,y2p = transform(inProj,outProj,x1p,y1p)
+
+        #format /tile/zoom/x/y.png
+        #http://wiki.openstreetmap.org/wiki/Slippy_map_tilenames
+
+        zoom = randint(1, 17)
+        (xtile, ytile) = deg2num(y2p, x2p, zoom)
+
+        #print route+'tile/'+ str(zoom) + "/" + str(ytile) + "/" + str(xtile)
+
+        self.client.get(route+'tile/'+ str(zoom) + "/" + str(ytile) + "/" + str(xtile), name=route)
+
+    @task(2)
+    def service1(self):
+        self.baseQuery(routes['1995'])
+
+    @task(3)
+    def service2(self):
+        self.baseQuery(routes['2000'])
+
+    @task(5)
+    def service3(self):
+        self.baseQuery(routes['2005'])
+
+    @task(10)
+    def service4(self):
+        self.baseQuery(routes['2009'])
+
+    @task(15)
+    def service5(self):
+        self.baseQuery(routes['2011'])
+
+    @task(60)
+    def service6(self):
+        self.baseQuery(routes['pictometry'])
+
+    @task(5)
+    def service7(self):
+        self.baseQuery(routes['hillshade'])
+
+class WebsiteUser(HttpLocust):
+    host = service_host
+    task_set = UserBehavior
+    # Assume most users wait about 0.1 - 2 seconds  between requests
+    # when browsing imagery
+    min_wait = 0.1 * 1000
+    max_wait = 2 * 1000

qsi/webui.py 5(+5 -0)

diff --git a/qsi/webui.py b/qsi/webui.py
new file mode 100644
index 0000000..c92473d
--- /dev/null
+++ b/qsi/webui.py
@@ -0,0 +1,5 @@
+from locust import web
+
+@web.app.route("/added_page")
+def my_added_page():
+    return "Another page"
\ No newline at end of file