Browse Source

initial commit

Steffen Volkmann 4 years ago
commit
a123f5e36d
44 changed files with 10210 additions and 0 deletions
  1. 17 0
      .project
  2. 8 0
      .pydevproject
  3. BIN
      Doc/Raspberry pi 3 UART pins.png
  4. 13 0
      Doc/wpa_supplicant.conf.txt
  5. 21 0
      README.md
  6. 0 0
      SimpleWebControl/__init__.py
  7. 187 0
      SimpleWebControl/simple_server.py
  8. 0 0
      WsgiWebControl/__init__.py
  9. 89 0
      WsgiWebControl/wsgi_server.py
  10. 12 0
      check_network.sh
  11. 26 0
      mc_control.sh
  12. 0 0
      mc_control/__init__.py
  13. BIN
      mc_control/__pycache__/__init__.cpython-32.pyc
  14. BIN
      mc_control/__pycache__/mc_statemachine.cpython-32.pyc
  15. BIN
      mc_control/__pycache__/mc_timer.cpython-32.pyc
  16. 21 0
      mc_control/main.py
  17. 262 0
      mc_control/mc_statemachine.py
  18. 26 0
      mc_control/mc_timer.py
  19. 133 0
      mc_control/mc_unittests.py
  20. 0 0
      pyface_simulation/__init__.py
  21. BIN
      pyface_simulation/__pycache__/__init__.cpython-32.pyc
  22. BIN
      pyface_simulation/__pycache__/pifacedigitalio.cpython-32.pyc
  23. 32 0
      pyface_simulation/pifacedigitalio.py
  24. 4 0
      tests.sh
  25. 0 0
      utils/__init__.py
  26. BIN
      utils/__pycache__/__init__.cpython-32.pyc
  27. BIN
      utils/__pycache__/web.cpython-32.pyc
  28. 80 0
      utils/web.py
  29. 442 0
      www/css/bootstrap-theme.css
  30. 1 0
      www/css/bootstrap-theme.css.map
  31. 5 0
      www/css/bootstrap-theme.min.css
  32. 6203 0
      www/css/bootstrap.css
  33. 1 0
      www/css/bootstrap.css.map
  34. 5 0
      www/css/bootstrap.min.css
  35. BIN
      www/fonts/glyphicons-halflings-regular.eot
  36. 229 0
      www/fonts/glyphicons-halflings-regular.svg
  37. BIN
      www/fonts/glyphicons-halflings-regular.ttf
  38. BIN
      www/fonts/glyphicons-halflings-regular.woff
  39. 27 0
      www/index.html
  40. 32 0
      www/info.html
  41. 2114 0
      www/js/bootstrap.js
  42. 6 0
      www/js/bootstrap.min.js
  43. 192 0
      www/mc.html
  44. 22 0
      www/simple_ mc.html

+ 17 - 0
.project View File

@@ -0,0 +1,17 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<projectDescription>
3
+	<name>RP_RemoteControl</name>
4
+	<comment></comment>
5
+	<projects>
6
+	</projects>
7
+	<buildSpec>
8
+		<buildCommand>
9
+			<name>org.python.pydev.PyDevBuilder</name>
10
+			<arguments>
11
+			</arguments>
12
+		</buildCommand>
13
+	</buildSpec>
14
+	<natures>
15
+		<nature>org.python.pydev.pythonNature</nature>
16
+	</natures>
17
+</projectDescription>

+ 8 - 0
.pydevproject View File

@@ -0,0 +1,8 @@
1
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+<?eclipse-pydev version="1.0"?><pydev_project>
3
+<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">python</pydev_property>
4
+<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python 3.0</pydev_property>
5
+<pydev_pathproperty name="org.python.pydev.PROJECT_SOURCE_PATH">
6
+<path>/RP_RemoteControl</path>
7
+</pydev_pathproperty>
8
+</pydev_project>

BIN
Doc/Raspberry pi 3 UART pins.png View File


+ 13 - 0
Doc/wpa_supplicant.conf.txt View File

@@ -0,0 +1,13 @@
1
+# sudo cat  ./etc/wpa_supplicant/wpa_supplicant.conf 
2
+ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
3
+update_config=1
4
+
5
+network={
6
+	ssid="IsleOfMan"
7
+	psk="!3CalaMandia3!"
8
+	proto=RSN
9
+	key_mgmt=WPA-PSK
10
+	pairwise=CCMP
11
+	auth_alg=OPEN
12
+}
13
+

+ 21 - 0
README.md View File

@@ -0,0 +1,21 @@
1
+Raspberry PI Allgemein
2
+- http://www.mikrocontroller.net/articles/Raspberry_Pi
3
+
4
+Ajax, Java Script, CCS:
5
+- http://flask.pocoo.org/docs/patterns/jquery/
6
+- http://xyzzyxyzzy.net/2012/07/01/ajax-fun-with-jquery-python/
7
+- http://getbootstrap.com/components/#panels
8
+- http://openbook.galileocomputing.de/javascript/
9
+- http://www.w3schools.com/js/js_htmldom_document.asp
10
+
11
+Python webserver mit SSL
12
+- http://www.piware.de/2011/01/creating-an-https-server-in-python/
13
+- http://code.activestate.com/recipes/442473-simple-http-server-supporting-ssl-secure-communica/
14
+
15
+webserver atomatisch starten
16
+- http://raspberrywebserver.com/serveradmin/run-a-script-on-start-up.html
17
+
18
+sudo cp ./mc_control.sh /etc/init.d/mc_control.sh
19
+sudo /etc/init.d/mc_control.sh start
20
+sudo /etc/init.d/mc_control.sh stop
21
+sudo update-rc.d mc_control.sh defaults

+ 0 - 0
SimpleWebControl/__init__.py View File


+ 187 - 0
SimpleWebControl/simple_server.py View File

@@ -0,0 +1,187 @@
1
+'''
2
+Created on 24.06.2014
3
+
4
+@author: volkma_s
5
+'''
6
+import os, sys
7
+import urllib
8
+sys.path.append(os.path.join(os.path.dirname(__file__), "./../"))
9
+
10
+#import daemon
11
+
12
+from http.server import BaseHTTPRequestHandler, HTTPServer
13
+from socketserver import ThreadingMixIn
14
+import time
15
+from urllib.parse import urlparse
16
+from utils.web import handle_file_request, get_my_ip
17
+from mc_control.mc_statemachine import mc_state_machine, mc_event
18
+
19
+HOST_NAME   = '' #'localhost'
20
+PORT_NUMBER = 8000
21
+
22
+def HandleQeury(query):
23
+    
24
+    global sm
25
+    
26
+    print("HandleQuery query={}".format(query))
27
+    query_components = urllib.parse.parse_qs(query)
28
+    
29
+    port = int(query_components['port'][0])
30
+    action = query_components['action'][0]   
31
+           
32
+    if action == 'up':
33
+        print("UP Request")
34
+        sm[port].MailBox.put(mc_event.Up)
35
+    elif action == 'stop':
36
+        print("Stop Request")
37
+        sm[port].MailBox.put(mc_event.Stop)
38
+    elif action == 'down':
39
+        print("Down Request")
40
+        sm[port].MailBox.put(mc_event.Down)
41
+    else:
42
+        print("Unknown query: {}".format(query))
43
+        
44
+def GetState():
45
+    global sm
46
+    state = "{}".format(sm[0].position.position)
47
+    return state
48
+ 
49
+def GetStates():
50
+    global sm
51
+    state = "{},{},{},{}".format( sm[0].position.position,
52
+                                  sm[1].position.position,
53
+                                  sm[2].position.position,
54
+                                  sm[3].position.position )
55
+    return state 
56
+        
57
+class myhandler(BaseHTTPRequestHandler):
58
+
59
+    def do_HEAD(self):
60
+        self.send_response(200)
61
+        self.send_header('Content-type','text/html')
62
+        self.end_headers()
63
+    
64
+    def do_GET(self):
65
+        
66
+        parsed_path = urlparse(self.path)
67
+        path = parsed_path[2]
68
+        query = parsed_path[4]
69
+        
70
+        if(query):
71
+            HandleQeury(query)
72
+        
73
+        print("do_GET path=" + path)
74
+        
75
+        if(path.endswith('.html')):
76
+            self.send_response(200)
77
+            self.send_header('Content-type','text/html')
78
+            self.end_headers()
79
+            data = handle_file_request(path,'utf-8')
80
+        elif(path.endswith('.css')):
81
+            self.send_response(200)
82
+            self.send_header('Content-type','text/css')
83
+            self.end_headers()
84
+            data = handle_file_request(path,'utf-8')
85
+        elif(path.endswith('.js')):
86
+            self.send_response(200)
87
+            self.send_header('Content-type','text/javascript')
88
+            self.end_headers()
89
+            data = handle_file_request(path,'utf-8')
90
+        elif(path.endswith('cmd')):
91
+            self.send_response(200)
92
+            self.send_header('Content-type','text/html')
93
+            self.end_headers()
94
+            out = GetStates()
95
+            data = out.encode('utf-8')           
96
+        else:
97
+            self.send_response(200)
98
+            self.send_header('Content-type','text/html')
99
+            self.end_headers()          
100
+            data = handle_file_request('index.html','utf-8')
101
+        
102
+        self.wfile.write(data)
103
+        return
104
+    
105
+    def do_POST(self):
106
+        
107
+        self.send_response(200)
108
+        self.send_header('Content-type','text/html')
109
+        self.end_headers()        
110
+        
111
+        parsed_path = urlparse(self.path)
112
+        path = parsed_path[2]
113
+        query = parsed_path[4]
114
+        if(query):
115
+            HandleQeury(query)
116
+        
117
+class ThreadedHTTPServer(ThreadingMixIn, HTTPServer):
118
+    ''' '''
119
+    
120
+def StartStateMachines():
121
+        global sm 
122
+        sm = list()
123
+        sm.append( mc_state_machine(0, 1))
124
+        sm.append( mc_state_machine(2, 3))
125
+        sm.append( mc_state_machine(4, 5))
126
+        sm.append( mc_state_machine(6, 7))
127
+            
128
+def CloseStateMachines():
129
+        global sm 
130
+        sm[0].Stop()
131
+        sm[1].Stop()
132
+        sm[2].Stop()
133
+        sm[3].Stop()
134
+        
135
+    
136
+if __name__ == '__main__':
137
+        
138
+        global sm
139
+        StartStateMachines()
140
+        
141
+        httpd = ThreadedHTTPServer((HOST_NAME,PORT_NUMBER),myhandler)
142
+        
143
+        print('{} - http Server started - http://{}:{}'.format(time.asctime(), get_my_ip(), PORT_NUMBER))
144
+        
145
+        try:
146
+            httpd.serve_forever()
147
+        except KeyboardInterrupt:
148
+            print("end")
149
+            pass
150
+        
151
+        CloseStateMachines()
152
+                
153
+        print('{}http Server stopped '.format(time.asctime()))
154
+        
155
+
156
+import unittest
157
+
158
+class WebServer_UnitTest(unittest.TestCase):
159
+    
160
+    def setUp(self):
161
+        StartStateMachines()
162
+        
163
+    def tearDown(self):
164
+        CloseStateMachines()
165
+                
166
+    def test_HandleQuery(self):
167
+        # state changed from idle over move down to down
168
+        HandleQeury('action=up&port=0')
169
+        HandleQeury('action=down&port=0')
170
+        HandleQeury('action=stop&port=0')
171
+        
172
+        HandleQeury('action=up&port=1')
173
+        HandleQeury('action=down&port=1')
174
+        HandleQeury('action=stop&port=1')
175
+        
176
+        HandleQeury('action=up&port=2')
177
+        HandleQeury('action=down&port=2')
178
+        HandleQeury('action=stop&port=2')
179
+        
180
+        HandleQeury('action=up&port=3')
181
+        HandleQeury('action=down&port=3')
182
+        HandleQeury('action=stop&port=3')
183
+                
184
+        pass    
185
+    
186
+    
187
+        

+ 0 - 0
WsgiWebControl/__init__.py View File


+ 89 - 0
WsgiWebControl/wsgi_server.py View File

@@ -0,0 +1,89 @@
1
+from wsgiref.simple_server import make_server, demo_app
2
+import time
3
+from urllib.parse import urlparse
4
+from io import StringIO
5
+    
6
+HOST_NAME   = 'localhost'
7
+PORT_NUMBER = 6666
8
+
9
+def handle_html_file_request(filename):
10
+    if filename.startswith('/'):
11
+        filename = filename[1:]  
12
+    data = open(filename).read()
13
+    #return [data.encode("utf-8")]    
14
+    return [data]    
15
+
16
+def handle_frontpage():
17
+    return handle_html_file_request('index.html')
18
+    #return ["Hello World".encode("utf-8")]
19
+
20
+def HandleError( PATH_INFO ):
21
+    stdout = StringIO()
22
+    print("requested site \"{}\" not found".format(PATH_INFO), file=stdout)
23
+    print(file=stdout)
24
+    print("time: {}".format(time.asctime()), file=stdout)
25
+    return [stdout.getvalue().encode("utf-8")]
26
+
27
+def simple_webserver_app(environ, start_response):
28
+    PATH_INFO = environ['PATH_INFO']
29
+    parsed_path = urlparse(PATH_INFO)
30
+    
31
+    if environ['REQUEST_METHOD'] == 'GET' :
32
+        start_response("200 OK", [('Content-Type','text/plain; charset=utf-8')])
33
+        
34
+        if PATH_INFO=='/' or PATH_INFO=='':
35
+            return handle_frontpage()
36
+        elif PATH_INFO.endswith('.html'):
37
+            return handle_html_file_request(PATH_INFO)
38
+        else:
39
+            return HandleError(PATH_INFO)
40
+
41
+    else:
42
+        assert(0)
43
+        pass
44
+
45
+
46
+if __name__ == '__main__':
47
+    
48
+    httpd = make_server(HOST_NAME,PORT_NUMBER,demo_app)
49
+    #httpd = make_server(HOST_NAME,PORT_NUMBER,simple_webserver_app)
50
+        
51
+    print('{} http Server started - http://{}:{}'.format(time.asctime(), HOST_NAME, PORT_NUMBER))
52
+    
53
+    try:
54
+        httpd.serve_forever()
55
+    except KeyboardInterrupt:
56
+        pass
57
+    
58
+    httpd.close()
59
+    
60
+    print('{} http Server started - {}:{}'.format(time.asctime(), HOST_NAME, PORT_NUMBER))
61
+    
62
+    
63
+import unittest
64
+
65
+
66
+class Webserver_UnitTest(unittest.TestCase):
67
+    
68
+    def setUp(self):
69
+        pass
70
+    
71
+    def test_frontpage(self):
72
+        ret = handle_frontpage()
73
+        self.assertTrue(len(ret)==1)
74
+        
75
+        ret = handle_html_file_request('index.html')
76
+        self.assertTrue(len(ret)==1)
77
+        
78
+        ret = handle_html_file_request('/index.html')
79
+        self.assertTrue(len(ret)==1)
80
+        
81
+        pass
82
+
83
+    
84
+
85
+
86
+        
87
+        
88
+        
89
+        

+ 12 - 0
check_network.sh View File

@@ -0,0 +1,12 @@
1
+#!/bin/bash
2
+
3
+router="192.168.1.3"
4
+interface="wlan0"
5
+
6
+ping -w 30 -c 1 ${router} > /dev/null 2>&1
7
+if [ $? -ne 0 ]; then
8
+        echo "Restart ${interface}"
9
+        ifdown ${interface}
10
+        ifup ${interface}
11
+fi
12
+

+ 26 - 0
mc_control.sh View File

@@ -0,0 +1,26 @@
1
+#! /bin/sh
2
+### BEGIN INIT INFO
3
+# Provides:          start and stop of the mc_control webservice
4
+# Required-Start:    
5
+# Required-Stop:     
6
+# Default-Start:     2 3 4 5
7
+# Default-Stop:      0 1 6
8
+# Short-Description: start and stop of the mc_control webservice
9
+# Description:       start and stop of the mc_control webservice
10
+### END INIT INFO
11
+# Author: Name <volkmann@devpool.net>
12
+# Aktionen
13
+case "$1" in
14
+	start)
15
+        /usr/bin/python3 /home/pi/10_RP_MotorControl/SimpleWebControl/simple_server.py &
16
+        ;;
17
+	stop)
18
+        killall python3
19
+        ;;
20
+	restart)
21
+        killall python3
22
+        /usr/bin/python3 /home/pi/10_RP_MotorControl/SimpleWebControl/simple_server.py &
23
+        ;;
24
+esac
25
+
26
+exit 0

+ 0 - 0
mc_control/__init__.py View File


BIN
mc_control/__pycache__/__init__.cpython-32.pyc View File


BIN
mc_control/__pycache__/mc_statemachine.cpython-32.pyc View File


BIN
mc_control/__pycache__/mc_timer.cpython-32.pyc View File


+ 21 - 0
mc_control/main.py View File

@@ -0,0 +1,21 @@
1
+'''
2
+Created on 24.06.2014
3
+
4
+@author: volkma_s
5
+'''
6
+from mc_control.mc_statemachine import mc_state_machine, mc_event
7
+import time
8
+
9
+if __name__ == '__main__':
10
+    
11
+    Port_Up   = 0
12
+    Port_Down = 1
13
+    
14
+    sm = mc_state_machine(Port_Up, Port_Down)
15
+
16
+    sm.MailBox.put(mc_event.Up)
17
+    
18
+    while(1==1):
19
+        time.sleep(1)
20
+        print('State = {}'.format(sm.state))
21
+    pass

+ 262 - 0
mc_control/mc_statemachine.py View File

@@ -0,0 +1,262 @@
1
+'''
2
+Created on 24.06.2014
3
+
4
+@author: volkma_s
5
+
6
+implementation for motor control state machine
7
+
8
+list of states:
9
+
10
+idle      - idle state  
11
+Move_UP   - move up
12
+UP        - in up position
13
+Move_DOWN - move down
14
+DOWN      - in down position 
15
+
16
+'''
17
+
18
+from queue import Queue
19
+import threading
20
+from mc_control.mc_timer import mc_timer
21
+
22
+
23
+try:
24
+    import pifacedigitalio #@UnresolvedImport
25
+except:
26
+    from pyface_simulation import pifacedigitalio
27
+    
28
+
29
+class Position():
30
+    def __init__(self, min_value=0, max_value=100, step=1):
31
+        self.step=step
32
+        self.min=min_value
33
+        self.max=max_value
34
+        self.position=self.min
35
+    
36
+    def increase(self):
37
+        if self.position+self.step > self.max:
38
+            self.position = self.max
39
+        else:
40
+            self.position = self.position+self.step
41
+        
42
+    def decrease(self):
43
+        if self.position-self.step < self.min:
44
+            self.position = self.min
45
+        else:
46
+            self.position = self.position-self.step
47
+            
48
+    def reset(self):
49
+        self.position=self.min
50
+                
51
+    def SetPosition(self, position):
52
+        self.position = position
53
+        
54
+class mc_event():
55
+    Up=0
56
+    Down=1
57
+    Stop=2
58
+    Timeout=3
59
+    UpdatePosition=4
60
+    
61
+class mc_states():
62
+    idle=0
63
+    move_up=1
64
+    move_down=2
65
+    state_up=3
66
+    state_down=4  
67
+    
68
+  
69
+class mc_state_machine(threading.Thread):
70
+    
71
+    def __init__(self, Port_Up, Port_Down, timeout_value=60):
72
+        threading.Thread.__init__(self)
73
+        self.MailBox = Queue()
74
+        self.__running = True 
75
+        self.Port_Up = Port_Up
76
+        self.Port_Down = Port_Down
77
+        self.pfd = pifacedigitalio.PiFaceDigital() # creates a PiFace Digtal object
78
+        self.timeout_value = timeout_value # sec.
79
+        self.PositionUpdateTimerPeriode = timeout_value/10 # sec.
80
+        self.MotorTimeout = mc_timer()
81
+        self.PositionUpdate = mc_timer()
82
+             
83
+        self.states = []        
84
+        self.states.append( mc_state_idle(self))
85
+        self.states.append( State_Move_UP(self))
86
+        self.states.append( State_Move_DOWN(self))
87
+        self.states.append( State_UP(self))
88
+        self.states.append( State_DOWN(self))
89
+        
90
+        self.current_state = mc_states.idle
91
+        
92
+        self.Start()    
93
+        self.position=Position(0, 100, 10);    
94
+        pass
95
+        
96
+    def EventHandler(self, event):
97
+        
98
+        print("event: {} position: {}".format(event, self.position.position))
99
+        
100
+        if(event == mc_event.Up):
101
+            self.states[self.current_state].Up()
102
+            
103
+        elif(event == mc_event.Down):
104
+            self.states[self.current_state].Down()
105
+            
106
+        elif(event == mc_event.Stop):
107
+            self.states[self.current_state].Stop()
108
+            
109
+        elif(event == mc_event.Timeout):
110
+            self.states[self.current_state].Timeout()
111
+            
112
+        elif(event == mc_event.UpdatePosition):
113
+            self.states[self.current_state].UpdatePosition()
114
+
115
+    
116
+    def set_state(self, state):
117
+        self.current_state = state
118
+        self.states[self.current_state].entry()
119
+    
120
+    # actions
121
+    def MotorUp(self):
122
+        print('MotorUp')
123
+        print('Switch Port={} on'.format(self.Port_Up))
124
+        print('Switch Port={} off'.format(self.Port_Down))
125
+        self.pfd.leds[self.Port_Up].value = 1
126
+        self.pfd.leds[self.Port_Down].value = 0
127
+                
128
+    def MotorDown(self):
129
+        print('MotorDown')
130
+        print('Switch Port={} off'.format(self.Port_Up))
131
+        print('Switch Port={} on'.format(self.Port_Down))
132
+        self.pfd.leds[self.Port_Up].value = 0
133
+        self.pfd.leds[self.Port_Down].value = 1
134
+        
135
+    def MotorStop(self): 
136
+        print('MotorStop')
137
+        print('Switch Port={} off'.format(self.Port_Up))
138
+        print('Switch Port={} off'.format(self.Port_Down))
139
+        self.pfd.leds[self.Port_Up].value = 0
140
+        self.pfd.leds[self.Port_Down].value = 0
141
+        
142
+                        
143
+    def run(self):
144
+        print("leave StateMachine")
145
+        while self.__running==True:
146
+            #try:
147
+                event = self.MailBox.get()#timeout=1)
148
+                if(event != None):
149
+                    self.EventHandler(event)
150
+                
151
+            #except:
152
+            #    pass
153
+        print("leave StateMachine")
154
+        
155
+    def Start(self):
156
+        self.__running=True
157
+        self.start()
158
+        
159
+    def Stop(self):
160
+        self.__running=False
161
+        self.MailBox.put(mc_event.Stop)
162
+        self.join()
163
+
164
+class State():
165
+
166
+    # event handlers
167
+    def Up(self):
168
+        self.mc_sm.set_state(mc_states.move_up) 
169
+        
170
+    def Down(self):
171
+        self.mc_sm.set_state(mc_states.move_down) 
172
+    
173
+    def Stop(self):
174
+        self.mc_sm.set_state(mc_states.idle) 
175
+    
176
+    def Timeout(self):
177
+        pass  
178
+    
179
+    def UpdatePosition(self):
180
+        pass
181
+    
182
+    def entry(self):
183
+        pass
184
+    
185
+##########################################################################    
186
+class mc_state_idle(State):
187
+    def __init__(self, mc_sm):
188
+        self.mc_sm = mc_sm
189
+    
190
+    def entry(self):
191
+        self.mc_sm.MotorStop()
192
+        self.mc_sm.MotorTimeout.StopTimer()
193
+        self.mc_sm.PositionUpdate.StopTimer() 
194
+    
195
+    def UpdatePosition(self):
196
+        self.mc_sm.PositionUpdate.StopTimer()
197
+
198
+##########################################################################        
199
+class State_Move_UP(State):
200
+    def __init__(self, mc_sm):
201
+        self.mc_sm=mc_sm
202
+        
203
+    def entry(self):    
204
+        self.mc_sm.MotorUp()
205
+        self.mc_sm.MotorTimeout.StartTimer(self.mc_sm.timeout_value, self.mc_sm.MailBox, mc_event.Timeout)
206
+        self.mc_sm.PositionUpdate.StartTimer(self.mc_sm.PositionUpdateTimerPeriode, self.mc_sm.MailBox, mc_event.UpdatePosition)
207
+    
208
+    def Timeout(self):
209
+        self.mc_sm.set_state(mc_states.state_up) 
210
+
211
+    def UpdatePosition(self):
212
+        self.mc_sm.PositionUpdate.StartTimer(self.mc_sm.PositionUpdateTimerPeriode, self.mc_sm.MailBox, mc_event.UpdatePosition)
213
+        self.mc_sm.position.increase()
214
+            
215
+##########################################################################            
216
+class State_UP(State):
217
+    def __init__(self, mc_sm):
218
+        self.mc_sm=mc_sm
219
+        
220
+    def entry(self):
221
+        self.mc_sm.MotorStop()
222
+        #self.mc_sm.Position = 100
223
+        self.mc_sm.position.SetPosition(self.mc_sm.position.max)
224
+    
225
+    def UpdatePosition(self):
226
+        self.mc_sm.PositionUpdate.StopTimer()
227
+    
228
+##########################################################################    
229
+class State_Move_DOWN(State):
230
+    def __init__(self, mc_sm):
231
+        self.mc_sm=mc_sm
232
+        
233
+    def entry(self):
234
+        self.mc_sm.MotorDown()
235
+        self.mc_sm.MotorTimeout.StartTimer(self.mc_sm.timeout_value, self.mc_sm.MailBox, mc_event.Timeout)
236
+        self.mc_sm.PositionUpdate.StartTimer(self.mc_sm.PositionUpdateTimerPeriode, self.mc_sm.MailBox, mc_event.UpdatePosition)
237
+    
238
+    def Timeout(self):
239
+        self.mc_sm.set_state(mc_states.state_down) 
240
+    
241
+    def UpdatePosition(self):
242
+        self.mc_sm.PositionUpdate.StartTimer(self.mc_sm.PositionUpdateTimerPeriode, self.mc_sm.MailBox, mc_event.UpdatePosition)
243
+        self.mc_sm.position.decrease()
244
+ 
245
+##########################################################################        
246
+class State_DOWN(State):
247
+    def __init__(self, mc_sm):
248
+        self.mc_sm=mc_sm
249
+        
250
+    def entry(self):
251
+        self.mc_sm.MotorStop()
252
+        #self.mc_sm.Position = 0 
253
+        self.mc_sm.position.SetPosition(self.mc_sm.position.min) 
254
+    
255
+    def UpdatePosition(self):
256
+        self.mc_sm.PositionUpdate.StopTimer()  
257
+    
258
+       
259
+
260
+
261
+
262
+    

+ 26 - 0
mc_control/mc_timer.py View File

@@ -0,0 +1,26 @@
1
+'''
2
+Created on 24.06.2014
3
+
4
+@author: volkma_s
5
+'''
6
+from threading import Timer
7
+
8
+class mc_timer():
9
+    def __init__(self):
10
+        self.timer = None
11
+        pass
12
+    
13
+    def StartTimer(self, value, EventQueue, Event):
14
+        print("Start Timer {}".format(value))
15
+        self.EventQueue = EventQueue
16
+        self.Event      = Event
17
+        self.timer      = Timer(value,self.expired, args=['WOW'])
18
+        self.timer.start()
19
+    
20
+    def StopTimer(self):
21
+        if self.timer != None:
22
+            self.timer.cancel()
23
+    
24
+    def expired(self, message):
25
+        self.EventQueue.put(self.Event )
26
+        

+ 133 - 0
mc_control/mc_unittests.py View File

@@ -0,0 +1,133 @@
1
+import unittest
2
+import time 
3
+from mc_control.mc_statemachine import mc_state_machine,\
4
+    mc_event, mc_states
5
+
6
+class MotorControl_BaseUnitTest(unittest.TestCase):
7
+    
8
+    def setUp(self):
9
+        Port_Up   = 0
10
+        Port_Down = 1
11
+        self.sm = mc_state_machine(Port_Up, Port_Down, 3)
12
+        self.delay=1
13
+        
14
+    def tearDown(self): 
15
+        self.sm.Stop()
16
+        pass
17
+
18
+class MotorControl_UnitTest_IDLE(MotorControl_BaseUnitTest):
19
+
20
+    def test_MotorDown(self):
21
+        # state changed from idle over move down to down
22
+        self.assertEqual(self.sm.current_state , mc_states.idle ,"Check State")
23
+        self.sm.MailBox.put(mc_event.Down)
24
+        time.sleep(self.sm.timeout_value-0.5)
25
+        self.assertEqual(self.sm.current_state , mc_states.move_down ,"Check State")     
26
+        time.sleep(self.delay)
27
+        self.assertEqual(self.sm.current_state , mc_states.state_down ,"Check State")  
28
+          
29
+
30
+    def test_MotorUp(self):
31
+        # state changed from idle over move down to down
32
+        self.assertEqual(self.sm.current_state , mc_states.idle ,"Check State")
33
+        self.sm.MailBox.put(mc_event.Up)
34
+        time.sleep(self.sm.timeout_value-0.5)
35
+        self.assertEqual(self.sm.current_state , mc_states.move_up ,"Check State")     
36
+        time.sleep(self.delay)
37
+        self.assertEqual(self.sm.current_state , mc_states.state_up ,"Check State")  
38
+        
39
+    
40
+    def test_Motor_Up_and_Down(self):
41
+        # move up and down
42
+        self.assertEqual(self.sm.current_state , mc_states.idle ,"Check State")
43
+        self.sm.MailBox.put(mc_event.Up)
44
+        time.sleep(self.sm.timeout_value-0.5)
45
+        self.assertEqual(self.sm.current_state , mc_states.move_up ,"Check State")   
46
+        time.sleep(self.delay)
47
+        self.assertEqual(self.sm.current_state , mc_states.state_up ,"Check State")  
48
+          
49
+        self.sm.MailBox.put(mc_event.Down)
50
+        time.sleep(self.sm.timeout_value-0.5)
51
+        self.assertEqual(self.sm.current_state , mc_states.move_down ,"Check State")      
52
+        time.sleep(self.delay)
53
+        self.assertEqual(self.sm.current_state , mc_states.state_down ,"Check State") 
54
+
55
+    def test_Motor_Down_and_Up(self):
56
+        # state changed from idle over move down to down
57
+        self.assertEqual(self.sm.current_state , mc_states.idle ,"Check State")
58
+        self.sm.MailBox.put(mc_event.Down)
59
+        time.sleep(self.sm.timeout_value-0.5)
60
+        self.assertEqual(self.sm.current_state , mc_states.move_down ,"Check State")      
61
+        time.sleep(self.delay)
62
+        self.assertEqual(self.sm.current_state , mc_states.state_down ,"Check State")
63
+        self.sm.MailBox.put(mc_event.Up)
64
+        time.sleep(self.sm.timeout_value-0.5)
65
+        self.assertEqual(self.sm.current_state , mc_states.move_up ,"Check State")     
66
+        time.sleep(self.delay)
67
+        self.assertEqual(self.sm.current_state , mc_states.state_up ,"Check State")
68
+    
69
+    def test_Stop(self):
70
+        # state changed from idle over move down to down
71
+        self.assertEqual(self.sm.current_state , mc_states.idle ,"Check State")
72
+        self.sm.MailBox.put(mc_event.Stop)
73
+        
74
+        time.sleep(self.delay)
75
+        self.assertEqual(self.sm.current_state , mc_states.idle ,"Check State")     
76
+        
77
+class MotorControl_UnitTest_MoveUP(MotorControl_BaseUnitTest):
78
+    
79
+    def setUp(self):
80
+        super().setUp()
81
+        self.sm.MailBox.put(mc_event.Up)
82
+        time.sleep(self.delay)
83
+    
84
+    def test_Stop(self):
85
+        self.assertEqual(self.sm.current_state , mc_states.move_up ,"Check State") 
86
+        self.sm.MailBox.put(mc_event.Stop)
87
+        time.sleep(self.delay)
88
+        self.assertEqual(self.sm.current_state , mc_states.idle ,"Check State")     
89
+
90
+    def test_Up(self):
91
+        self.assertEqual(self.sm.current_state , mc_states.move_up ,"Check State") 
92
+        self.sm.MailBox.put(mc_event.Up)
93
+        time.sleep(self.delay)
94
+        self.assertEqual(self.sm.current_state , mc_states.move_up ,"Check State") 
95
+        pass
96
+        
97
+    def test_Down(self):
98
+        self.assertEqual(self.sm.current_state , mc_states.move_up ,"Check State") 
99
+        self.sm.MailBox.put(mc_event.Down)
100
+        time.sleep(self.delay)
101
+        self.assertEqual(self.sm.current_state , mc_states.move_down ,"Check State")       
102
+        
103
+    def test_Timeout(self):
104
+        self.assertEqual(self.sm.current_state , mc_states.move_up ,"Check State") 
105
+        time.sleep(self.delay+self.sm.timeout_value)
106
+        self.assertEqual(self.sm.current_state , mc_states.state_up ,"Check State")      
107
+        
108
+class MotorControl_UnitTest_UP(MotorControl_BaseUnitTest):
109
+    
110
+    def setUp(self):
111
+        super().setUp()
112
+        self.sm.MailBox.put(mc_event.Up)
113
+        time.sleep(self.delay+self.sm.timeout_value)
114
+    
115
+    def test_Stop(self):
116
+        # state changed from idle over move down to down
117
+        self.assertEqual(self.sm.current_state , mc_states.state_up ,"Check State")
118
+        self.sm.MailBox.put(mc_event.Stop)
119
+        time.sleep(self.delay)
120
+        self.assertEqual(self.sm.current_state , mc_states.idle ,"Check State")             
121
+       
122
+class MotorControl_Events(MotorControl_BaseUnitTest):
123
+    
124
+    def setUp(self):
125
+        super().setUp()
126
+        #self.sm.MailBox.put(mc_event.Up)
127
+    
128
+    def test_Stop(self):
129
+        # state changed from idle over move down to down
130
+        # self.sm.MailBox.put(mc_event.Up)
131
+        time.sleep(0.5)
132
+             
133
+          

+ 0 - 0
pyface_simulation/__init__.py View File


BIN
pyface_simulation/__pycache__/__init__.cpython-32.pyc View File


BIN
pyface_simulation/__pycache__/pifacedigitalio.cpython-32.pyc View File


+ 32 - 0
pyface_simulation/pifacedigitalio.py View File

@@ -0,0 +1,32 @@
1
+'''
2
+Created on 29.06.2014
3
+
4
+@author: stevo
5
+'''
6
+
7
+
8
+
9
+class RelayClass():
10
+    value = 0
11
+
12
+class LedClass():
13
+    value = 0
14
+
15
+class PiFaceDigital():
16
+    
17
+    def __init__(self):
18
+        self.relays = []
19
+        self.relays.append( RelayClass())
20
+        self.relays.append( RelayClass())
21
+        
22
+        self.leds = []
23
+        self.leds.append( LedClass())
24
+        self.leds.append( LedClass())
25
+        self.leds.append( LedClass())
26
+        self.leds.append( LedClass())
27
+        self.leds.append( LedClass())
28
+        self.leds.append( LedClass())
29
+        self.leds.append( LedClass())
30
+        self.leds.append( LedClass())
31
+        
32
+        return None 

+ 4 - 0
tests.sh View File

@@ -0,0 +1,4 @@
1
+#! /bin/sh
2
+
3
+
4
+echo start

+ 0 - 0
utils/__init__.py View File


BIN
utils/__pycache__/__init__.cpython-32.pyc View File


BIN
utils/__pycache__/web.cpython-32.pyc View File


+ 80 - 0
utils/web.py View File

@@ -0,0 +1,80 @@
1
+'''
2
+Created on 27.06.2014
3
+
4
+@author: volkma_s
5
+'''
6
+
7
+
8
+import subprocess
9
+import os
10
+GET_IP_CMD = "hostname -I"
11
+
12
+def get_my_ip():
13
+    
14
+    ipAddr=None
15
+
16
+    try:
17
+        import socket
18
+        ipAddr = [ip for ip in socket.gethostbyname_ex(socket.gethostname())[2] if not ip.startswith("127.")][:1][0]
19
+    except:
20
+        pass
21
+    
22
+    if ipAddr==None:
23
+        """Returns this computers IP address as a string."""
24
+        ip = subprocess.check_output(GET_IP_CMD, shell=True).decode('utf-8')[:-1]
25
+        ipAddr = ip.strip()
26
+    
27
+    return ipAddr
28
+
29
+    
30
+
31
+
32
+ERROR_FILE_NOT_FOUND = 'File not Found'
33
+
34
+def handle_file_request(filename, etype=None):
35
+    if filename.startswith('/'):
36
+        filename = filename[1:]  
37
+        
38
+    filename = os.path.dirname(__file__)+'/../www/'+filename
39
+    
40
+        
41
+    try:
42
+        file_h = open(filename)
43
+        data =  file_h.read()
44
+        
45
+        if etype is None:
46
+            ret = data
47
+        else:
48
+            ret = data.encode(etype) #"utf-8")
49
+        
50
+    except:
51
+        out = ERROR_FILE_NOT_FOUND + " : " + filename
52
+        
53
+        print(out )
54
+        
55
+        if etype is None:
56
+            ret = out
57
+        else:
58
+            ret = out.encode(etype) #"utf-8")
59
+        
60
+    return ret
61
+
62
+
63
+import unittest
64
+
65
+class webutils_UnitTest(unittest.TestCase):
66
+    
67
+    def setUp(self):
68
+        pass
69
+    
70
+    def test_handle_file_request(self):
71
+        ret = handle_file_request('/index.html')
72
+        self.assertTrue(len(ret)>0) 
73
+        
74
+        ret = handle_file_request('index.html')
75
+        self.assertTrue(len(ret)>0) 
76
+        
77
+        ret = handle_file_request('index1.html')
78
+        self.assertTrue( ret.find( ERROR_FILE_NOT_FOUND) == 0)
79
+        pass
80
+        

+ 442 - 0
www/css/bootstrap-theme.css View File

@@ -0,0 +1,442 @@
1
+/*!
2
+ * Bootstrap v3.2.0 (http://getbootstrap.com)
3
+ * Copyright 2011-2014 Twitter, Inc.
4
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
+ */
6
+
7
+.btn-default,
8
+.btn-primary,
9
+.btn-success,
10
+.btn-info,
11
+.btn-warning,
12
+.btn-danger {
13
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
14
+  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
15
+          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
16
+}
17
+.btn-default:active,
18
+.btn-primary:active,
19
+.btn-success:active,
20
+.btn-info:active,
21
+.btn-warning:active,
22
+.btn-danger:active,
23
+.btn-default.active,
24
+.btn-primary.active,
25
+.btn-success.active,
26
+.btn-info.active,
27
+.btn-warning.active,
28
+.btn-danger.active {
29
+  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
30
+          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
31
+}
32
+.btn:active,
33
+.btn.active {
34
+  background-image: none;
35
+}
36
+.btn-default {
37
+  text-shadow: 0 1px 0 #fff;
38
+  background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
39
+  background-image:      -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
40
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
41
+  background-image:         linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
42
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
43
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
44
+  background-repeat: repeat-x;
45
+  border-color: #dbdbdb;
46
+  border-color: #ccc;
47
+}
48
+.btn-default:hover,
49
+.btn-default:focus {
50
+  background-color: #e0e0e0;
51
+  background-position: 0 -15px;
52
+}
53
+.btn-default:active,
54
+.btn-default.active {
55
+  background-color: #e0e0e0;
56
+  border-color: #dbdbdb;
57
+}
58
+.btn-default:disabled,
59
+.btn-default[disabled] {
60
+  background-color: #e0e0e0;
61
+  background-image: none;
62
+}
63
+.btn-primary {
64
+  background-image: -webkit-linear-gradient(top, #428bca 0%, #2d6ca2 100%);
65
+  background-image:      -o-linear-gradient(top, #428bca 0%, #2d6ca2 100%);
66
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#2d6ca2));
67
+  background-image:         linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%);
68
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0);
69
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
70
+  background-repeat: repeat-x;
71
+  border-color: #2b669a;
72
+}
73
+.btn-primary:hover,
74
+.btn-primary:focus {
75
+  background-color: #2d6ca2;
76
+  background-position: 0 -15px;
77
+}
78
+.btn-primary:active,
79
+.btn-primary.active {
80
+  background-color: #2d6ca2;
81
+  border-color: #2b669a;
82
+}
83
+.btn-primary:disabled,
84
+.btn-primary[disabled] {
85
+  background-color: #2d6ca2;
86
+  background-image: none;
87
+}
88
+.btn-success {
89
+  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
90
+  background-image:      -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
91
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
92
+  background-image:         linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
93
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
94
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
95
+  background-repeat: repeat-x;
96
+  border-color: #3e8f3e;
97
+}
98
+.btn-success:hover,
99
+.btn-success:focus {
100
+  background-color: #419641;
101
+  background-position: 0 -15px;
102
+}
103
+.btn-success:active,
104
+.btn-success.active {
105
+  background-color: #419641;
106
+  border-color: #3e8f3e;
107
+}
108
+.btn-success:disabled,
109
+.btn-success[disabled] {
110
+  background-color: #419641;
111
+  background-image: none;
112
+}
113
+.btn-info {
114
+  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
115
+  background-image:      -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
116
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
117
+  background-image:         linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
118
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
119
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
120
+  background-repeat: repeat-x;
121
+  border-color: #28a4c9;
122
+}
123
+.btn-info:hover,
124
+.btn-info:focus {
125
+  background-color: #2aabd2;
126
+  background-position: 0 -15px;
127
+}
128
+.btn-info:active,
129
+.btn-info.active {
130
+  background-color: #2aabd2;
131
+  border-color: #28a4c9;
132
+}
133
+.btn-info:disabled,
134
+.btn-info[disabled] {
135
+  background-color: #2aabd2;
136
+  background-image: none;
137
+}
138
+.btn-warning {
139
+  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
140
+  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
141
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
142
+  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
143
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
144
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
145
+  background-repeat: repeat-x;
146
+  border-color: #e38d13;
147
+}
148
+.btn-warning:hover,
149
+.btn-warning:focus {
150
+  background-color: #eb9316;
151
+  background-position: 0 -15px;
152
+}
153
+.btn-warning:active,
154
+.btn-warning.active {
155
+  background-color: #eb9316;
156
+  border-color: #e38d13;
157
+}
158
+.btn-warning:disabled,
159
+.btn-warning[disabled] {
160
+  background-color: #eb9316;
161
+  background-image: none;
162
+}
163
+.btn-danger {
164
+  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
165
+  background-image:      -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
166
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
167
+  background-image:         linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
168
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
169
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
170
+  background-repeat: repeat-x;
171
+  border-color: #b92c28;
172
+}
173
+.btn-danger:hover,
174
+.btn-danger:focus {
175
+  background-color: #c12e2a;
176
+  background-position: 0 -15px;
177
+}
178
+.btn-danger:active,
179
+.btn-danger.active {
180
+  background-color: #c12e2a;
181
+  border-color: #b92c28;
182
+}
183
+.btn-danger:disabled,
184
+.btn-danger[disabled] {
185
+  background-color: #c12e2a;
186
+  background-image: none;
187
+}
188
+.thumbnail,
189
+.img-thumbnail {
190
+  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
191
+          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
192
+}
193
+.dropdown-menu > li > a:hover,
194
+.dropdown-menu > li > a:focus {
195
+  background-color: #e8e8e8;
196
+  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
197
+  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
198
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
199
+  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
200
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
201
+  background-repeat: repeat-x;
202
+}
203
+.dropdown-menu > .active > a,
204
+.dropdown-menu > .active > a:hover,
205
+.dropdown-menu > .active > a:focus {
206
+  background-color: #357ebd;
207
+  background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);
208
+  background-image:      -o-linear-gradient(top, #428bca 0%, #357ebd 100%);
209
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#357ebd));
210
+  background-image:         linear-gradient(to bottom, #428bca 0%, #357ebd 100%);
211
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);
212
+  background-repeat: repeat-x;
213
+}
214
+.navbar-default {
215
+  background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
216
+  background-image:      -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);
217
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));
218
+  background-image:         linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
219
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
220
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
221
+  background-repeat: repeat-x;
222
+  border-radius: 4px;
223
+  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
224
+          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
225
+}
226
+.navbar-default .navbar-nav > .active > a {
227
+  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%);
228
+  background-image:      -o-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%);
229
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f3f3f3));
230
+  background-image:         linear-gradient(to bottom, #ebebeb 0%, #f3f3f3 100%);
231
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0);
232
+  background-repeat: repeat-x;
233
+  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
234
+          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
235
+}
236
+.navbar-brand,
237
+.navbar-nav > li > a {
238
+  text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
239
+}
240
+.navbar-inverse {
241
+  background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
242
+  background-image:      -o-linear-gradient(top, #3c3c3c 0%, #222 100%);
243
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
244
+  background-image:         linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
245
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
246
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
247
+  background-repeat: repeat-x;
248
+}
249
+.navbar-inverse .navbar-nav > .active > a {
250
+  background-image: -webkit-linear-gradient(top, #222 0%, #282828 100%);
251
+  background-image:      -o-linear-gradient(top, #222 0%, #282828 100%);
252
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#222), to(#282828));
253
+  background-image:         linear-gradient(to bottom, #222 0%, #282828 100%);
254
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0);
255
+  background-repeat: repeat-x;
256
+  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
257
+          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
258
+}
259
+.navbar-inverse .navbar-brand,
260
+.navbar-inverse .navbar-nav > li > a {
261
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
262
+}
263
+.navbar-static-top,
264
+.navbar-fixed-top,
265
+.navbar-fixed-bottom {
266
+  border-radius: 0;
267
+}
268
+.alert {
269
+  text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
270
+  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
271
+          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
272
+}
273
+.alert-success {
274
+  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
275
+  background-image:      -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
276
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
277
+  background-image:         linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
278
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
279
+  background-repeat: repeat-x;
280
+  border-color: #b2dba1;
281
+}
282
+.alert-info {
283
+  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
284
+  background-image:      -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
285
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
286
+  background-image:         linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
287
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
288
+  background-repeat: repeat-x;
289
+  border-color: #9acfea;
290
+}
291
+.alert-warning {
292
+  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
293
+  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
294
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
295
+  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
296
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
297
+  background-repeat: repeat-x;
298
+  border-color: #f5e79e;
299
+}
300
+.alert-danger {
301
+  background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
302
+  background-image:      -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
303
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
304
+  background-image:         linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
305
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
306
+  background-repeat: repeat-x;
307
+  border-color: #dca7a7;
308
+}
309
+.progress {
310
+  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
311
+  background-image:      -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
312
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
313
+  background-image:         linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
314
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
315
+  background-repeat: repeat-x;
316
+}
317
+.progress-bar {
318
+  background-image: -webkit-linear-gradient(top, #428bca 0%, #3071a9 100%);
319
+  background-image:      -o-linear-gradient(top, #428bca 0%, #3071a9 100%);
320
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#3071a9));
321
+  background-image:         linear-gradient(to bottom, #428bca 0%, #3071a9 100%);
322
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);
323
+  background-repeat: repeat-x;
324
+}
325
+.progress-bar-success {
326
+  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
327
+  background-image:      -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
328
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
329
+  background-image:         linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
330
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
331
+  background-repeat: repeat-x;
332
+}
333
+.progress-bar-info {
334
+  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
335
+  background-image:      -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
336
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
337
+  background-image:         linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
338
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
339
+  background-repeat: repeat-x;
340
+}
341
+.progress-bar-warning {
342
+  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
343
+  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
344
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
345
+  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
346
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
347
+  background-repeat: repeat-x;
348
+}
349
+.progress-bar-danger {
350
+  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
351
+  background-image:      -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
352
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
353
+  background-image:         linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
354
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
355
+  background-repeat: repeat-x;
356
+}
357
+.progress-bar-striped {
358
+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
359
+  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
360
+  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
361
+}
362
+.list-group {
363
+  border-radius: 4px;
364
+  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
365
+          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
366
+}
367
+.list-group-item.active,
368
+.list-group-item.active:hover,
369
+.list-group-item.active:focus {
370
+  text-shadow: 0 -1px 0 #3071a9;
371
+  background-image: -webkit-linear-gradient(top, #428bca 0%, #3278b3 100%);
372
+  background-image:      -o-linear-gradient(top, #428bca 0%, #3278b3 100%);
373
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#3278b3));
374
+  background-image:         linear-gradient(to bottom, #428bca 0%, #3278b3 100%);
375
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);
376
+  background-repeat: repeat-x;
377
+  border-color: #3278b3;
378
+}
379
+.panel {
380
+  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
381
+          box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
382
+}
383
+.panel-default > .panel-heading {
384
+  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
385
+  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
386
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
387
+  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
388
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
389
+  background-repeat: repeat-x;
390
+}
391
+.panel-primary > .panel-heading {
392
+  background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);
393
+  background-image:      -o-linear-gradient(top, #428bca 0%, #357ebd 100%);
394
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#357ebd));
395
+  background-image:         linear-gradient(to bottom, #428bca 0%, #357ebd 100%);
396
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);
397
+  background-repeat: repeat-x;
398
+}
399
+.panel-success > .panel-heading {
400
+  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
401
+  background-image:      -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
402
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
403
+  background-image:         linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
404
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
405
+  background-repeat: repeat-x;
406
+}
407
+.panel-info > .panel-heading {
408
+  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
409
+  background-image:      -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
410
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
411
+  background-image:         linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
412
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
413
+  background-repeat: repeat-x;
414
+}
415
+.panel-warning > .panel-heading {
416
+  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
417
+  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
418
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
419
+  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
420
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
421
+  background-repeat: repeat-x;
422
+}
423
+.panel-danger > .panel-heading {
424
+  background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
425
+  background-image:      -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
426
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
427
+  background-image:         linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
428
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
429
+  background-repeat: repeat-x;
430
+}
431
+.well {
432
+  background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
433
+  background-image:      -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
434
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
435
+  background-image:         linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
436
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
437
+  background-repeat: repeat-x;
438
+  border-color: #dcdcdc;
439
+  -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
440
+          box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
441
+}
442
+/*# sourceMappingURL=bootstrap-theme.css.map */

File diff suppressed because it is too large
+ 1 - 0
www/css/bootstrap-theme.css.map


File diff suppressed because it is too large
+ 5 - 0
www/css/bootstrap-theme.min.css


File diff suppressed because it is too large
+ 6203 - 0
www/css/bootstrap.css


File diff suppressed because it is too large
+ 1 - 0
www/css/bootstrap.css.map


File diff suppressed because it is too large
+ 5 - 0
www/css/bootstrap.min.css


BIN
www/fonts/glyphicons-halflings-regular.eot View File


+ 229 - 0
www/fonts/glyphicons-halflings-regular.svg View File

@@ -0,0 +1,229 @@
1
+<?xml version="1.0" standalone="no"?>
2
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
3
+<svg xmlns="http://www.w3.org/2000/svg">
4
+<metadata></metadata>
5
+<defs>
6
+<font id="glyphicons_halflingsregular" horiz-adv-x="1200" >
7
+<font-face units-per-em="1200" ascent="960" descent="-240" />
8
+<missing-glyph horiz-adv-x="500" />
9
+<glyph />
10
+<glyph />
11
+<glyph unicode="&#xd;" />
12
+<glyph unicode=" " />
13
+<glyph unicode="*" d="M100 500v200h259l-183 183l141 141l183 -183v259h200v-259l183 183l141 -141l-183 -183h259v-200h-259l183 -183l-141 -141l-183 183v-259h-200v259l-183 -183l-141 141l183 183h-259z" />
14
+<glyph unicode="+" d="M0 400v300h400v400h300v-400h400v-300h-400v-400h-300v400h-400z" />
15
+<glyph unicode="&#xa0;" />
16
+<glyph unicode="&#x2000;" horiz-adv-x="652" />
17
+<glyph unicode="&#x2001;" horiz-adv-x="1304" />
18
+<glyph unicode="&#x2002;" horiz-adv-x="652" />
19
+<glyph unicode="&#x2003;" horiz-adv-x="1304" />
20
+<glyph unicode="&#x2004;" horiz-adv-x="434" />
21
+<glyph unicode="&#x2005;" horiz-adv-x="326" />
22
+<glyph unicode="&#x2006;" horiz-adv-x="217" />
23
+<glyph unicode="&#x2007;" horiz-adv-x="217" />
24
+<glyph unicode="&#x2008;" horiz-adv-x="163" />
25
+<glyph unicode="&#x2009;" horiz-adv-x="260" />
26
+<glyph unicode="&#x200a;" horiz-adv-x="72" />
27
+<glyph unicode="&#x202f;" horiz-adv-x="260" />
28
+<glyph unicode="&#x205f;" horiz-adv-x="326" />
29
+<glyph unicode="&#x20ac;" d="M100 500l100 100h113q0 47 5 100h-218l100 100h135q37 167 112 257q117 141 297 141q242 0 354 -189q60 -103 66 -209h-181q0 55 -25.5 99t-63.5 68t-75 36.5t-67 12.5q-24 0 -52.5 -10t-62.5 -32t-65.5 -67t-50.5 -107h379l-100 -100h-300q-6 -46 -6 -100h406l-100 -100 h-300q9 -74 33 -132t52.5 -91t62 -54.5t59 -29t46.5 -7.5q29 0 66 13t75 37t63.5 67.5t25.5 96.5h174q-31 -172 -128 -278q-107 -117 -274 -117q-205 0 -324 158q-36 46 -69 131.5t-45 205.5h-217z" />
30
+<glyph unicode="&#x2212;" d="M200 400h900v300h-900v-300z" />
31
+<glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" />
32
+<glyph unicode="&#x2601;" d="M-14 494q0 -80 56.5 -137t135.5 -57h750q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5z" />
33
+<glyph unicode="&#x2709;" d="M0 100l400 400l200 -200l200 200l400 -400h-1200zM0 300v600l300 -300zM0 1100l600 -603l600 603h-1200zM900 600l300 300v-600z" />
34
+<glyph unicode="&#x270f;" d="M-13 -13l333 112l-223 223zM187 403l214 -214l614 614l-214 214zM887 1103l214 -214l99 92q13 13 13 32.5t-13 33.5l-153 153q-15 13 -33 13t-33 -13z" />
35
+<glyph unicode="&#xe001;" d="M0 1200h1200l-500 -550v-550h300v-100h-800v100h300v550z" />
36
+<glyph unicode="&#xe002;" d="M14 84q18 -55 86 -75.5t147 5.5q65 21 109 69t44 90v606l600 155v-521q-64 16 -138 -7q-79 -26 -122.5 -83t-25.5 -111q18 -55 86 -75.5t147 4.5q70 23 111.5 63.5t41.5 95.5v881q0 10 -7 15.5t-17 2.5l-752 -193q-10 -3 -17 -12.5t-7 -19.5v-689q-64 17 -138 -7 q-79 -25 -122.5 -82t-25.5 -112z" />
37
+<glyph unicode="&#xe003;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233z" />
38
+<glyph unicode="&#xe005;" d="M100 784q0 64 28 123t73 100.5t104.5 64t119 20.5t120 -38.5t104.5 -104.5q48 69 109.5 105t121.5 38t118.5 -20.5t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-149.5 152.5t-126.5 127.5 t-94 124.5t-33.5 117.5z" />
39
+<glyph unicode="&#xe006;" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1z" />
40
+<glyph unicode="&#xe007;" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1zM237 700l196 -142l-73 -226l192 140l195 -141l-74 229l193 140h-235l-77 211l-78 -211h-239z" />
41
+<glyph unicode="&#xe008;" d="M0 0v143l400 257v100q-37 0 -68.5 74.5t-31.5 125.5v200q0 124 88 212t212 88t212 -88t88 -212v-200q0 -51 -31.5 -125.5t-68.5 -74.5v-100l400 -257v-143h-1200z" />
42
+<glyph unicode="&#xe009;" d="M0 0v1100h1200v-1100h-1200zM100 100h100v100h-100v-100zM100 300h100v100h-100v-100zM100 500h100v100h-100v-100zM100 700h100v100h-100v-100zM100 900h100v100h-100v-100zM300 100h600v400h-600v-400zM300 600h600v400h-600v-400zM1000 100h100v100h-100v-100z M1000 300h100v100h-100v-100zM1000 500h100v100h-100v-100zM1000 700h100v100h-100v-100zM1000 900h100v100h-100v-100z" />
43
+<glyph unicode="&#xe010;" d="M0 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM0 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5zM600 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM600 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5z" />
44
+<glyph unicode="&#xe011;" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 450v200q0 21 14.5 35.5t35.5 14.5h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5z" />
45
+<glyph unicode="&#xe012;" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v200q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5 t-14.5 -35.5v-200zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5z" />
46
+<glyph unicode="&#xe013;" d="M29 454l419 -420l818 820l-212 212l-607 -607l-206 207z" />
47
+<glyph unicode="&#xe014;" d="M106 318l282 282l-282 282l212 212l282 -282l282 282l212 -212l-282 -282l282 -282l-212 -212l-282 282l-282 -282z" />
48
+<glyph unicode="&#xe015;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233zM300 600v200h100v100h200v-100h100v-200h-100v-100h-200v100h-100z" />
49
+<glyph unicode="&#xe016;" d="M23 694q0 200 142 342t342 142t342 -142t142 -342q0 -141 -78 -262l300 -299q7 -7 7 -18t-7 -18l-109 -109q-8 -8 -18 -8t-18 8l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 694q0 -136 97 -233t234 -97t233.5 97t96.5 233t-96.5 233t-233.5 97t-234 -97 t-97 -233zM300 601h400v200h-400v-200z" />
50
+<glyph unicode="&#xe017;" d="M23 600q0 183 105 331t272 210v-166q-103 -55 -165 -155t-62 -220q0 -177 125 -302t302 -125t302 125t125 302q0 120 -62 220t-165 155v166q167 -62 272 -210t105 -331q0 -118 -45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5 zM500 750q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v400q0 21 -14.5 35.5t-35.5 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-400z" />
51
+<glyph unicode="&#xe018;" d="M100 1h200v300h-200v-300zM400 1v500h200v-500h-200zM700 1v800h200v-800h-200zM1000 1v1200h200v-1200h-200z" />
52
+<glyph unicode="&#xe019;" d="M26 601q0 -33 6 -74l151 -38l2 -6q14 -49 38 -93l3 -5l-80 -134q45 -59 105 -105l133 81l5 -3q45 -26 94 -39l5 -2l38 -151q40 -5 74 -5q27 0 74 5l38 151l6 2q46 13 93 39l5 3l134 -81q56 44 104 105l-80 134l3 5q24 44 39 93l1 6l152 38q5 40 5 74q0 28 -5 73l-152 38 l-1 6q-16 51 -39 93l-3 5l80 134q-44 58 -104 105l-134 -81l-5 3q-45 25 -93 39l-6 1l-38 152q-40 5 -74 5q-27 0 -74 -5l-38 -152l-5 -1q-50 -14 -94 -39l-5 -3l-133 81q-59 -47 -105 -105l80 -134l-3 -5q-25 -47 -38 -93l-2 -6l-151 -38q-6 -48 -6 -73zM385 601 q0 88 63 151t152 63t152 -63t63 -151q0 -89 -63 -152t-152 -63t-152 63t-63 152z" />
53
+<glyph unicode="&#xe020;" d="M100 1025v50q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-50q0 -11 -7 -18t-18 -7h-1050q-11 0 -18 7t-7 18zM200 100v800h900v-800q0 -41 -29.5 -71t-70.5 -30h-700q-41 0 -70.5 30 t-29.5 71zM300 100h100v700h-100v-700zM500 100h100v700h-100v-700zM500 1100h300v100h-300v-100zM700 100h100v700h-100v-700zM900 100h100v700h-100v-700z" />
54
+<glyph unicode="&#xe021;" d="M1 601l656 644l644 -644h-200v-600h-300v400h-300v-400h-300v600h-200z" />
55
+<glyph unicode="&#xe022;" d="M100 25v1150q0 11 7 18t18 7h475v-500h400v-675q0 -11 -7 -18t-18 -7h-850q-11 0 -18 7t-7 18zM700 800v300l300 -300h-300z" />
56
+<glyph unicode="&#xe023;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 500v400h100 v-300h200v-100h-300z" />
57
+<glyph unicode="&#xe024;" d="M-100 0l431 1200h209l-21 -300h162l-20 300h208l431 -1200h-538l-41 400h-242l-40 -400h-539zM488 500h224l-27 300h-170z" />
58
+<glyph unicode="&#xe025;" d="M0 0v400h490l-290 300h200v500h300v-500h200l-290 -300h490v-400h-1100zM813 200h175v100h-175v-100z" />
59
+<glyph unicode="&#xe026;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM188 600q0 -170 121 -291t291 -121t291 121t121 291t-121 291t-291 121 t-291 -121t-121 -291zM350 600h150v300h200v-300h150l-250 -300z" />
60
+<glyph unicode="&#xe027;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM350 600l250 300 l250 -300h-150v-300h-200v300h-150z" />
61
+<glyph unicode="&#xe028;" d="M0 25v475l200 700h800l199 -700l1 -475q0 -11 -7 -18t-18 -7h-1150q-11 0 -18 7t-7 18zM200 500h200l50 -200h300l50 200h200l-97 500h-606z" />
62
+<glyph unicode="&#xe029;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 397v401 l297 -200z" />
63
+<glyph unicode="&#xe030;" d="M23 600q0 -118 45.5 -224.5t123 -184t184 -123t224.5 -45.5t224.5 45.5t184 123t123 184t45.5 224.5h-150q0 -177 -125 -302t-302 -125t-302 125t-125 302t125 302t302 125q136 0 246 -81l-146 -146h400v400l-145 -145q-157 122 -355 122q-118 0 -224.5 -45.5t-184 -123 t-123 -184t-45.5 -224.5z" />
64
+<glyph unicode="&#xe031;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5q198 0 355 -122l145 145v-400h-400l147 147q-112 80 -247 80q-177 0 -302 -125t-125 -302h-150zM100 0v400h400l-147 -147q112 -80 247 -80q177 0 302 125t125 302h150q0 -118 -45.5 -224.5t-123 -184t-184 -123 t-224.5 -45.5q-198 0 -355 122z" />
65
+<glyph unicode="&#xe032;" d="M100 0h1100v1200h-1100v-1200zM200 100v900h900v-900h-900zM300 200v100h100v-100h-100zM300 400v100h100v-100h-100zM300 600v100h100v-100h-100zM300 800v100h100v-100h-100zM500 200h500v100h-500v-100zM500 400v100h500v-100h-500zM500 600v100h500v-100h-500z M500 800v100h500v-100h-500z" />
66
+<glyph unicode="&#xe033;" d="M0 100v600q0 41 29.5 70.5t70.5 29.5h100v200q0 82 59 141t141 59h300q82 0 141 -59t59 -141v-200h100q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-900q-41 0 -70.5 29.5t-29.5 70.5zM400 800h300v150q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-150z" />
67
+<glyph unicode="&#xe034;" d="M100 0v1100h100v-1100h-100zM300 400q60 60 127.5 84t127.5 17.5t122 -23t119 -30t110 -11t103 42t91 120.5v500q-40 -81 -101.5 -115.5t-127.5 -29.5t-138 25t-139.5 40t-125.5 25t-103 -29.5t-65 -115.5v-500z" />
68
+<glyph unicode="&#xe035;" d="M0 275q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 127 70.5 231.5t184.5 161.5t245 57t245 -57t184.5 -161.5t70.5 -231.5v-300q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 116 -49.5 227t-131 192.5t-192.5 131t-227 49.5t-227 -49.5t-192.5 -131t-131 -192.5 t-49.5 -227v-300zM200 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14zM800 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14z" />
69
+<glyph unicode="&#xe036;" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM688 459l141 141l-141 141l71 71l141 -141l141 141l71 -71l-141 -141l141 -141l-71 -71l-141 141l-141 -141z" />
70
+<glyph unicode="&#xe037;" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM700 857l69 53q111 -135 111 -310q0 -169 -106 -302l-67 54q86 110 86 248q0 146 -93 257z" />
71
+<glyph unicode="&#xe038;" d="M0 401v400h300l300 200v-800l-300 200h-300zM702 858l69 53q111 -135 111 -310q0 -170 -106 -303l-67 55q86 110 86 248q0 145 -93 257zM889 951l7 -8q123 -151 123 -344q0 -189 -119 -339l-7 -8l81 -66l6 8q142 178 142 405q0 230 -144 408l-6 8z" />
72
+<glyph unicode="&#xe039;" d="M0 0h500v500h-200v100h-100v-100h-200v-500zM0 600h100v100h400v100h100v100h-100v300h-500v-600zM100 100v300h300v-300h-300zM100 800v300h300v-300h-300zM200 200v100h100v-100h-100zM200 900h100v100h-100v-100zM500 500v100h300v-300h200v-100h-100v-100h-200v100 h-100v100h100v200h-200zM600 0v100h100v-100h-100zM600 1000h100v-300h200v-300h300v200h-200v100h200v500h-600v-200zM800 800v300h300v-300h-300zM900 0v100h300v-100h-300zM900 900v100h100v-100h-100zM1100 200v100h100v-100h-100z" />
73
+<glyph unicode="&#xe040;" d="M0 200h100v1000h-100v-1000zM100 0v100h300v-100h-300zM200 200v1000h100v-1000h-100zM500 0v91h100v-91h-100zM500 200v1000h200v-1000h-200zM700 0v91h100v-91h-100zM800 200v1000h100v-1000h-100zM900 0v91h200v-91h-200zM1000 200v1000h200v-1000h-200z" />
74
+<glyph unicode="&#xe041;" d="M0 700l1 475q0 10 7.5 17.5t17.5 7.5h474l700 -700l-500 -500zM148 953q0 -42 29 -71q30 -30 71.5 -30t71.5 30q29 29 29 71t-29 71q-30 30 -71.5 30t-71.5 -30q-29 -29 -29 -71z" />
75
+<glyph unicode="&#xe042;" d="M1 700l1 475q0 11 7 18t18 7h474l700 -700l-500 -500zM148 953q0 -42 30 -71q29 -30 71 -30t71 30q30 29 30 71t-30 71q-29 30 -71 30t-71 -30q-30 -29 -30 -71zM701 1200h100l700 -700l-500 -500l-50 50l450 450z" />
76
+<glyph unicode="&#xe043;" d="M100 0v1025l175 175h925v-1000l-100 -100v1000h-750l-100 -100h750v-1000h-900z" />
77
+<glyph unicode="&#xe044;" d="M200 0l450 444l450 -443v1150q0 20 -14.5 35t-35.5 15h-800q-21 0 -35.5 -15t-14.5 -35v-1151z" />
78
+<glyph unicode="&#xe045;" d="M0 100v700h200l100 -200h600l100 200h200v-700h-200v200h-800v-200h-200zM253 829l40 -124h592l62 124l-94 346q-2 11 -10 18t-18 7h-450q-10 0 -18 -7t-10 -18zM281 24l38 152q2 10 11.5 17t19.5 7h500q10 0 19.5 -7t11.5 -17l38 -152q2 -10 -3.5 -17t-15.5 -7h-600 q-10 0 -15.5 7t-3.5 17z" />
79
+<glyph unicode="&#xe046;" d="M0 200q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-150q-4 8 -11.5 21.5t-33 48t-53 61t-69 48t-83.5 21.5h-200q-41 0 -82 -20.5t-70 -50t-52 -59t-34 -50.5l-12 -20h-150q-41 0 -70.5 -29.5t-29.5 -70.5v-600z M356 500q0 100 72 172t172 72t172 -72t72 -172t-72 -172t-172 -72t-172 72t-72 172zM494 500q0 -44 31 -75t75 -31t75 31t31 75t-31 75t-75 31t-75 -31t-31 -75zM900 700v100h100v-100h-100z" />
80
+<glyph unicode="&#xe047;" d="M53 0h365v66q-41 0 -72 11t-49 38t1 71l92 234h391l82 -222q16 -45 -5.5 -88.5t-74.5 -43.5v-66h417v66q-34 1 -74 43q-18 19 -33 42t-21 37l-6 13l-385 998h-93l-399 -1006q-24 -48 -52 -75q-12 -12 -33 -25t-36 -20l-15 -7v-66zM416 521l178 457l46 -140l116 -317h-340 z" />
81
+<glyph unicode="&#xe048;" d="M100 0v89q41 7 70.5 32.5t29.5 65.5v827q0 28 -1 39.5t-5.5 26t-15.5 21t-29 14t-49 14.5v71l471 -1q120 0 213 -88t93 -228q0 -55 -11.5 -101.5t-28 -74t-33.5 -47.5t-28 -28l-12 -7q8 -3 21.5 -9t48 -31.5t60.5 -58t47.5 -91.5t21.5 -129q0 -84 -59 -156.5t-142 -111 t-162 -38.5h-500zM400 200h161q89 0 153 48.5t64 132.5q0 90 -62.5 154.5t-156.5 64.5h-159v-400zM400 700h139q76 0 130 61.5t54 138.5q0 82 -84 130.5t-239 48.5v-379z" />
82
+<glyph unicode="&#xe049;" d="M200 0v57q77 7 134.5 40.5t65.5 80.5l173 849q10 56 -10 74t-91 37q-6 1 -10.5 2.5t-9.5 2.5v57h425l2 -57q-33 -8 -62 -25.5t-46 -37t-29.5 -38t-17.5 -30.5l-5 -12l-128 -825q-10 -52 14 -82t95 -36v-57h-500z" />
83
+<glyph unicode="&#xe050;" d="M-75 200h75v800h-75l125 167l125 -167h-75v-800h75l-125 -167zM300 900v300h150h700h150v-300h-50q0 29 -8 48.5t-18.5 30t-33.5 15t-39.5 5.5t-50.5 1h-200v-850l100 -50v-100h-400v100l100 50v850h-200q-34 0 -50.5 -1t-40 -5.5t-33.5 -15t-18.5 -30t-8.5 -48.5h-49z " />
84
+<glyph unicode="&#xe051;" d="M33 51l167 125v-75h800v75l167 -125l-167 -125v75h-800v-75zM100 901v300h150h700h150v-300h-50q0 29 -8 48.5t-18 30t-33.5 15t-40 5.5t-50.5 1h-200v-650l100 -50v-100h-400v100l100 50v650h-200q-34 0 -50.5 -1t-39.5 -5.5t-33.5 -15t-18.5 -30t-8 -48.5h-50z" />
85
+<glyph unicode="&#xe052;" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 350q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM0 650q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1000q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 950q0 -20 14.5 -35t35.5 -15h600q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-600q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" />
86
+<glyph unicode="&#xe053;" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 650q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM200 350q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM200 950q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" />
87
+<glyph unicode="&#xe054;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1000q-21 0 -35.5 15 t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-600 q-21 0 -35.5 15t-14.5 35z" />
88
+<glyph unicode="&#xe055;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100 q-21 0 -35.5 15t-14.5 35z" />
89
+<glyph unicode="&#xe056;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM300 50v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800 q-21 0 -35.5 15t-14.5 35zM300 650v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 950v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15 h-800q-21 0 -35.5 15t-14.5 35z" />
90
+<glyph unicode="&#xe057;" d="M-101 500v100h201v75l166 -125l-166 -125v75h-201zM300 0h100v1100h-100v-1100zM500 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35 v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 650q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100 q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100z" />
91
+<glyph unicode="&#xe058;" d="M1 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 650 q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM801 0v1100h100v-1100 h-100zM934 550l167 -125v75h200v100h-200v75z" />
92
+<glyph unicode="&#xe059;" d="M0 275v650q0 31 22 53t53 22h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53zM900 600l300 300v-600z" />
93
+<glyph unicode="&#xe060;" d="M0 44v1012q0 18 13 31t31 13h1112q19 0 31.5 -13t12.5 -31v-1012q0 -18 -12.5 -31t-31.5 -13h-1112q-18 0 -31 13t-13 31zM100 263l247 182l298 -131l-74 156l293 318l236 -288v500h-1000v-737zM208 750q0 56 39 95t95 39t95 -39t39 -95t-39 -95t-95 -39t-95 39t-39 95z " />
94
+<glyph unicode="&#xe062;" d="M148 745q0 124 60.5 231.5t165 172t226.5 64.5q123 0 227 -63t164.5 -169.5t60.5 -229.5t-73 -272q-73 -114 -166.5 -237t-150.5 -189l-57 -66q-10 9 -27 26t-66.5 70.5t-96 109t-104 135.5t-100.5 155q-63 139 -63 262zM342 772q0 -107 75.5 -182.5t181.5 -75.5 q107 0 182.5 75.5t75.5 182.5t-75.5 182t-182.5 75t-182 -75.5t-75 -181.5z" />
95
+<glyph unicode="&#xe063;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM173 600q0 -177 125.5 -302t301.5 -125v854q-176 0 -301.5 -125 t-125.5 -302z" />
96
+<glyph unicode="&#xe064;" d="M117 406q0 94 34 186t88.5 172.5t112 159t115 177t87.5 194.5q21 -71 57.5 -142.5t76 -130.5t83 -118.5t82 -117t70 -116t50 -125.5t18.5 -136q0 -89 -39 -165.5t-102 -126.5t-140 -79.5t-156 -33.5q-114 6 -211.5 53t-161.5 139t-64 210zM243 414q14 -82 59.5 -136 t136.5 -80l16 98q-7 6 -18 17t-34 48t-33 77q-15 73 -14 143.5t10 122.5l9 51q-92 -110 -119.5 -185t-12.5 -156z" />
97
+<glyph unicode="&#xe065;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5q366 -6 397 -14l-186 -186h-311q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v125l200 200v-225q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM436 341l161 50l412 412l-114 113l-405 -405zM995 1015l113 -113l113 113l-21 85l-92 28z" />
98
+<glyph unicode="&#xe066;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h261l2 -80q-133 -32 -218 -120h-145q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-53q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5 zM423 524q30 38 81.5 64t103 35.5t99 14t77.5 3.5l29 -1v-209l360 324l-359 318v-216q-7 0 -19 -1t-48 -8t-69.5 -18.5t-76.5 -37t-76.5 -59t-62 -88t-39.5 -121.5z" />
99
+<glyph unicode="&#xe067;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q61 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-169q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM342 632l283 -284l567 567l-137 137l-430 -431l-146 147z" />
100
+<glyph unicode="&#xe068;" d="M0 603l300 296v-198h200v200h-200l300 300l295 -300h-195v-200h200v198l300 -296l-300 -300v198h-200v-200h195l-295 -300l-300 300h200v200h-200v-198z" />
101
+<glyph unicode="&#xe069;" d="M200 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-1100l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
102
+<glyph unicode="&#xe070;" d="M0 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-487l500 487v-1100l-500 488v-488l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
103
+<glyph unicode="&#xe071;" d="M136 550l564 550v-487l500 487v-1100l-500 488v-488z" />
104
+<glyph unicode="&#xe072;" d="M200 0l900 550l-900 550v-1100z" />
105
+<glyph unicode="&#xe073;" d="M200 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5t-14.5 -35.5v-800zM600 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" />
106
+<glyph unicode="&#xe074;" d="M200 150q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v800q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" />
107
+<glyph unicode="&#xe075;" d="M0 0v1100l500 -487v487l564 -550l-564 -550v488z" />
108
+<glyph unicode="&#xe076;" d="M0 0v1100l500 -487v487l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-500 -488v488z" />
109
+<glyph unicode="&#xe077;" d="M300 0v1100l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438z" />
110
+<glyph unicode="&#xe078;" d="M100 250v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5zM100 500h1100l-550 564z" />
111
+<glyph unicode="&#xe079;" d="M185 599l592 -592l240 240l-353 353l353 353l-240 240z" />
112
+<glyph unicode="&#xe080;" d="M272 194l353 353l-353 353l241 240l572 -571l21 -22l-1 -1v-1l-592 -591z" />
113
+<glyph unicode="&#xe081;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h200v-200h200v200h200v200h-200v200h-200v-200h-200v-200z" />
114
+<glyph unicode="&#xe082;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h600v200h-600v-200z" />
115
+<glyph unicode="&#xe083;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM246 459l213 -213l141 142l141 -142l213 213l-142 141l142 141l-213 212l-141 -141l-141 142l-212 -213l141 -141 z" />
116
+<glyph unicode="&#xe084;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM270 551l276 -277l411 411l-175 174l-236 -236l-102 102z" />
117
+<glyph unicode="&#xe085;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM364 700h143q4 0 11.5 -1t11 -1t6.5 3t3 9t1 11t3.5 8.5t3.5 6t5.5 4t6.5 2.5t9 1.5t9 0.5h11.5h12.5 q19 0 30 -10t11 -26q0 -22 -4 -28t-27 -22q-5 -1 -12.5 -3t-27 -13.5t-34 -27t-26.5 -46t-11 -68.5h200q5 3 14 8t31.5 25.5t39.5 45.5t31 69t14 94q0 51 -17.5 89t-42 58t-58.5 32t-58.5 15t-51.5 3q-50 0 -90.5 -12t-75 -38.5t-53.5 -74.5t-19 -114zM500 300h200v100h-200 v-100z" />
118
+<glyph unicode="&#xe086;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM400 300h400v100h-100v300h-300v-100h100v-200h-100v-100zM500 800h200v100h-200v-100z" />
119
+<glyph unicode="&#xe087;" d="M0 500v200h195q31 125 98.5 199.5t206.5 100.5v200h200v-200q54 -20 113 -60t112.5 -105.5t71.5 -134.5h203v-200h-203q-25 -102 -116.5 -186t-180.5 -117v-197h-200v197q-140 27 -208 102.5t-98 200.5h-194zM290 500q24 -73 79.5 -127.5t130.5 -78.5v206h200v-206 q149 48 201 206h-201v200h200q-25 74 -75.5 127t-124.5 77v-204h-200v203q-75 -23 -130 -77t-79 -126h209v-200h-210z" />
120
+<glyph unicode="&#xe088;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM356 465l135 135 l-135 135l109 109l135 -135l135 135l109 -109l-135 -135l135 -135l-109 -109l-135 135l-135 -135z" />
121
+<glyph unicode="&#xe089;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM322 537l141 141 l87 -87l204 205l142 -142l-346 -345z" />
122
+<glyph unicode="&#xe090;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -115 62 -215l568 567q-100 62 -216 62q-171 0 -292.5 -121.5t-121.5 -292.5zM391 245q97 -59 209 -59q171 0 292.5 121.5t121.5 292.5 q0 112 -59 209z" />
123
+<glyph unicode="&#xe091;" d="M0 547l600 453v-300h600v-300h-600v-301z" />
124
+<glyph unicode="&#xe092;" d="M0 400v300h600v300l600 -453l-600 -448v301h-600z" />
125
+<glyph unicode="&#xe093;" d="M204 600l450 600l444 -600h-298v-600h-300v600h-296z" />
126
+<glyph unicode="&#xe094;" d="M104 600h296v600h300v-600h298l-449 -600z" />
127
+<glyph unicode="&#xe095;" d="M0 200q6 132 41 238.5t103.5 193t184 138t271.5 59.5v271l600 -453l-600 -448v301q-95 -2 -183 -20t-170 -52t-147 -92.5t-100 -135.5z" />
128
+<glyph unicode="&#xe096;" d="M0 0v400l129 -129l294 294l142 -142l-294 -294l129 -129h-400zM635 777l142 -142l294 294l129 -129v400h-400l129 -129z" />
129
+<glyph unicode="&#xe097;" d="M34 176l295 295l-129 129h400v-400l-129 130l-295 -295zM600 600v400l129 -129l295 295l142 -141l-295 -295l129 -130h-400z" />
130
+<glyph unicode="&#xe101;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM456 851l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5 t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5h-207q-21 0 -33 -14.5t-8 -34.5zM500 300h200v100h-200v-100z" />
131
+<glyph unicode="&#xe102;" d="M0 800h100v-200h400v300h200v-300h400v200h100v100h-111q1 1 1 6.5t-1.5 15t-3.5 17.5l-34 172q-11 39 -41.5 63t-69.5 24q-32 0 -61 -17l-239 -144q-22 -13 -40 -35q-19 24 -40 36l-238 144q-33 18 -62 18q-39 0 -69.5 -23t-40.5 -61l-35 -177q-2 -8 -3 -18t-1 -15v-6 h-111v-100zM100 0h400v400h-400v-400zM200 900q-3 0 14 48t36 96l18 47l213 -191h-281zM700 0v400h400v-400h-400zM731 900l202 197q5 -12 12 -32.5t23 -64t25 -72t7 -28.5h-269z" />
132
+<glyph unicode="&#xe103;" d="M0 -22v143l216 193q-9 53 -13 83t-5.5 94t9 113t38.5 114t74 124q47 60 99.5 102.5t103 68t127.5 48t145.5 37.5t184.5 43.5t220 58.5q0 -189 -22 -343t-59 -258t-89 -181.5t-108.5 -120t-122 -68t-125.5 -30t-121.5 -1.5t-107.5 12.5t-87.5 17t-56.5 7.5l-99 -55z M238.5 300.5q19.5 -6.5 86.5 76.5q55 66 367 234q70 38 118.5 69.5t102 79t99 111.5t86.5 148q22 50 24 60t-6 19q-7 5 -17 5t-26.5 -14.5t-33.5 -39.5q-35 -51 -113.5 -108.5t-139.5 -89.5l-61 -32q-369 -197 -458 -401q-48 -111 -28.5 -117.5z" />
133
+<glyph unicode="&#xe104;" d="M111 408q0 -33 5 -63q9 -56 44 -119.5t105 -108.5q31 -21 64 -16t62 23.5t57 49.5t48 61.5t35 60.5q32 66 39 184.5t-13 157.5q79 -80 122 -164t26 -184q-5 -33 -20.5 -69.5t-37.5 -80.5q-10 -19 -14.5 -29t-12 -26t-9 -23.5t-3 -19t2.5 -15.5t11 -9.5t19.5 -5t30.5 2.5 t42 8q57 20 91 34t87.5 44.5t87 64t65.5 88.5t47 122q38 172 -44.5 341.5t-246.5 278.5q22 -44 43 -129q39 -159 -32 -154q-15 2 -33 9q-79 33 -120.5 100t-44 175.5t48.5 257.5q-13 -8 -34 -23.5t-72.5 -66.5t-88.5 -105.5t-60 -138t-8 -166.5q2 -12 8 -41.5t8 -43t6 -39.5 t3.5 -39.5t-1 -33.5t-6 -31.5t-13.5 -24t-21 -20.5t-31 -12q-38 -10 -67 13t-40.5 61.5t-15 81.5t10.5 75q-52 -46 -83.5 -101t-39 -107t-7.5 -85z" />
134
+<glyph unicode="&#xe105;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5t145.5 -23.5t132.5 -59t116.5 -83.5t97 -90t74.5 -85.5t49 -63.5t20 -30l26 -40l-26 -40q-6 -10 -20 -30t-49 -63.5t-74.5 -85.5t-97 -90t-116.5 -83.5t-132.5 -59t-145.5 -23.5 t-145.5 23.5t-132.5 59t-116.5 83.5t-97 90t-74.5 85.5t-49 63.5t-20 30zM120 600q7 -10 40.5 -58t56 -78.5t68 -77.5t87.5 -75t103 -49.5t125 -21.5t123.5 20t100.5 45.5t85.5 71.5t66.5 75.5t58 81.5t47 66q-1 1 -28.5 37.5t-42 55t-43.5 53t-57.5 63.5t-58.5 54 q49 -74 49 -163q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l105 105q-37 24 -75 72t-57 84l-20 36z" />
135
+<glyph unicode="&#xe106;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5q61 0 121 -17l37 142h148l-314 -1200h-148l37 143q-82 21 -165 71.5t-140 102t-109.5 112t-72 88.5t-29.5 43zM120 600q210 -282 393 -336l37 141q-107 18 -178.5 101.5t-71.5 193.5 q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l47 47l23 87q-30 28 -59 69t-44 68l-14 26zM780 161l38 145q22 15 44.5 34t46 44t40.5 44t41 50.5t33.5 43.5t33 44t24.5 34q-97 127 -140 175l39 146q67 -54 131.5 -125.5t87.5 -103.5t36 -52l26 -40l-26 -40 q-7 -12 -25.5 -38t-63.5 -79.5t-95.5 -102.5t-124 -100t-146.5 -79z" />
136
+<glyph unicode="&#xe107;" d="M-97.5 34q13.5 -34 50.5 -34h1294q37 0 50.5 35.5t-7.5 67.5l-642 1056q-20 34 -48 36.5t-48 -29.5l-642 -1066q-21 -32 -7.5 -66zM155 200l445 723l445 -723h-345v100h-200v-100h-345zM500 600l100 -300l100 300v100h-200v-100z" />
137
+<glyph unicode="&#xe108;" d="M100 262v41q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44t106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -91 100 -113v-64q0 -20 -13 -28.5t-32 0.5l-94 78h-222l-94 -78q-19 -9 -32 -0.5t-13 28.5 v64q0 22 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5z" />
138
+<glyph unicode="&#xe109;" d="M0 50q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v750h-1100v-750zM0 900h1100v150q0 21 -14.5 35.5t-35.5 14.5h-150v100h-100v-100h-500v100h-100v-100h-150q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 100v100h100v-100h-100zM100 300v100h100v-100h-100z M100 500v100h100v-100h-100zM300 100v100h100v-100h-100zM300 300v100h100v-100h-100zM300 500v100h100v-100h-100zM500 100v100h100v-100h-100zM500 300v100h100v-100h-100zM500 500v100h100v-100h-100zM700 100v100h100v-100h-100zM700 300v100h100v-100h-100zM700 500 v100h100v-100h-100zM900 100v100h100v-100h-100zM900 300v100h100v-100h-100zM900 500v100h100v-100h-100z" />
139
+<glyph unicode="&#xe110;" d="M0 200v200h259l600 600h241v198l300 -295l-300 -300v197h-159l-600 -600h-341zM0 800h259l122 -122l141 142l-181 180h-341v-200zM678 381l141 142l122 -123h159v198l300 -295l-300 -300v197h-241z" />
140
+<glyph unicode="&#xe111;" d="M0 400v600q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5z" />
141
+<glyph unicode="&#xe112;" d="M100 600v200h300v-250q0 -113 6 -145q17 -92 102 -117q39 -11 92 -11q37 0 66.5 5.5t50 15.5t36 24t24 31.5t14 37.5t7 42t2.5 45t0 47v25v250h300v-200q0 -42 -3 -83t-15 -104t-31.5 -116t-58 -109.5t-89 -96.5t-129 -65.5t-174.5 -25.5t-174.5 25.5t-129 65.5t-89 96.5 t-58 109.5t-31.5 116t-15 104t-3 83zM100 900v300h300v-300h-300zM800 900v300h300v-300h-300z" />
142
+<glyph unicode="&#xe113;" d="M-30 411l227 -227l352 353l353 -353l226 227l-578 579z" />
143
+<glyph unicode="&#xe114;" d="M70 797l580 -579l578 579l-226 227l-353 -353l-352 353z" />
144
+<glyph unicode="&#xe115;" d="M-198 700l299 283l300 -283h-203v-400h385l215 -200h-800v600h-196zM402 1000l215 -200h381v-400h-198l299 -283l299 283h-200v600h-796z" />
145
+<glyph unicode="&#xe116;" d="M18 939q-5 24 10 42q14 19 39 19h896l38 162q5 17 18.5 27.5t30.5 10.5h94q20 0 35 -14.5t15 -35.5t-15 -35.5t-35 -14.5h-54l-201 -961q-2 -4 -6 -10.5t-19 -17.5t-33 -11h-31v-50q0 -20 -14.5 -35t-35.5 -15t-35.5 15t-14.5 35v50h-300v-50q0 -20 -14.5 -35t-35.5 -15 t-35.5 15t-14.5 35v50h-50q-21 0 -35.5 15t-14.5 35q0 21 14.5 35.5t35.5 14.5h535l48 200h-633q-32 0 -54.5 21t-27.5 43z" />
146
+<glyph unicode="&#xe117;" d="M0 0v800h1200v-800h-1200zM0 900v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-100h-1200z" />
147
+<glyph unicode="&#xe118;" d="M1 0l300 700h1200l-300 -700h-1200zM1 400v600h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-200h-1000z" />
148
+<glyph unicode="&#xe119;" d="M302 300h198v600h-198l298 300l298 -300h-198v-600h198l-298 -300z" />
149
+<glyph unicode="&#xe120;" d="M0 600l300 298v-198h600v198l300 -298l-300 -297v197h-600v-197z" />
150
+<glyph unicode="&#xe121;" d="M0 100v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM31 400l172 739q5 22 23 41.5t38 19.5h672q19 0 37.5 -22.5t23.5 -45.5l172 -732h-1138zM800 100h100v100h-100v-100z M1000 100h100v100h-100v-100z" />
151
+<glyph unicode="&#xe122;" d="M-101 600v50q0 24 25 49t50 38l25 13v-250l-11 5.5t-24 14t-30 21.5t-24 27.5t-11 31.5zM100 500v250v8v8v7t0.5 7t1.5 5.5t2 5t3 4t4.5 3.5t6 1.5t7.5 0.5h200l675 250v-850l-675 200h-38l47 -276q2 -12 -3 -17.5t-11 -6t-21 -0.5h-8h-83q-20 0 -34.5 14t-18.5 35 q-55 337 -55 351zM1100 200v850q0 21 14.5 35.5t35.5 14.5q20 0 35 -14.5t15 -35.5v-850q0 -20 -15 -35t-35 -15q-21 0 -35.5 15t-14.5 35z" />
152
+<glyph unicode="&#xe123;" d="M74 350q0 21 13.5 35.5t33.5 14.5h18l117 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3 32t29 13h94q20 0 29 -10.5t3 -29.5q-18 -36 -18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q20 0 33.5 -14.5t13.5 -35.5q0 -20 -13 -40t-31 -27q-8 -3 -23 -8.5 t-65 -20t-103 -25t-132.5 -19.5t-158.5 -9q-125 0 -245.5 20.5t-178.5 40.5l-58 20q-18 7 -31 27.5t-13 40.5zM497 110q12 -49 40 -79.5t63 -30.5t63 30.5t39 79.5q-48 -6 -102 -6t-103 6z" />
153
+<glyph unicode="&#xe124;" d="M21 445l233 -45l-78 -224l224 78l45 -233l155 179l155 -179l45 233l224 -78l-78 224l234 45l-180 155l180 156l-234 44l78 225l-224 -78l-45 233l-155 -180l-155 180l-45 -233l-224 78l78 -225l-233 -44l179 -156z" />
154
+<glyph unicode="&#xe125;" d="M0 200h200v600h-200v-600zM300 275q0 -75 100 -75h61q124 -100 139 -100h250q46 0 83 57l238 344q29 31 29 74v100q0 44 -30.5 84.5t-69.5 40.5h-328q28 118 28 125v150q0 44 -30.5 84.5t-69.5 40.5h-50q-27 0 -51 -20t-38 -48l-96 -198l-145 -196q-20 -26 -20 -63v-400z M400 300v375l150 213l100 212h50v-175l-50 -225h450v-125l-250 -375h-214l-136 100h-100z" />
155
+<glyph unicode="&#xe126;" d="M0 400v600h200v-600h-200zM300 525v400q0 75 100 75h61q124 100 139 100h250q46 0 83 -57l238 -344q29 -31 29 -74v-100q0 -44 -30.5 -84.5t-69.5 -40.5h-328q28 -118 28 -125v-150q0 -44 -30.5 -84.5t-69.5 -40.5h-50q-27 0 -51 20t-38 48l-96 198l-145 196 q-20 26 -20 63zM400 525l150 -212l100 -213h50v175l-50 225h450v125l-250 375h-214l-136 -100h-100v-375z" />
156
+<glyph unicode="&#xe127;" d="M8 200v600h200v-600h-200zM308 275v525q0 17 14 35.5t28 28.5l14 9l362 230q14 6 25 6q17 0 29 -12l109 -112q14 -14 14 -34q0 -18 -11 -32l-85 -121h302q85 0 138.5 -38t53.5 -110t-54.5 -111t-138.5 -39h-107l-130 -339q-7 -22 -20.5 -41.5t-28.5 -19.5h-341 q-7 0 -90 81t-83 94zM408 289l100 -89h293l131 339q6 21 19.5 41t28.5 20h203q16 0 25 15t9 36q0 20 -9 34.5t-25 14.5h-457h-6.5h-7.5t-6.5 0.5t-6 1t-5 1.5t-5.5 2.5t-4 4t-4 5.5q-5 12 -5 20q0 14 10 27l147 183l-86 83l-339 -236v-503z" />
157
+<glyph unicode="&#xe128;" d="M-101 651q0 72 54 110t139 38l302 -1l-85 121q-11 16 -11 32q0 21 14 34l109 113q13 12 29 12q11 0 25 -6l365 -230q7 -4 17 -10.5t26.5 -26t16.5 -36.5v-526q0 -13 -86 -93.5t-94 -80.5h-341q-16 0 -29.5 20t-19.5 41l-130 339h-107q-84 0 -139 39t-55 111zM-1 601h222 q15 0 28.5 -20.5t19.5 -40.5l131 -339h293l107 89v502l-343 237l-87 -83l145 -184q10 -11 10 -26q0 -11 -5 -20q-1 -3 -3.5 -5.5l-4 -4t-5 -2.5t-5.5 -1.5t-6.5 -1t-6.5 -0.5h-7.5h-6.5h-476v-100zM1000 201v600h200v-600h-200z" />
158
+<glyph unicode="&#xe129;" d="M97 719l230 -363q4 -6 10.5 -15.5t26 -25t36.5 -15.5h525q13 0 94 83t81 90v342q0 15 -20 28.5t-41 19.5l-339 131v106q0 84 -39 139t-111 55t-110 -53.5t-38 -138.5v-302l-121 84q-15 12 -33.5 11.5t-32.5 -13.5l-112 -110q-22 -22 -6 -53zM172 739l83 86l183 -146 q22 -18 47 -5q3 1 5.5 3.5l4 4t2.5 5t1.5 5.5t1 6.5t0.5 6.5v7.5v6.5v456q0 22 25 31t50 -0.5t25 -30.5v-202q0 -16 20 -29.5t41 -19.5l339 -130v-294l-89 -100h-503zM400 0v200h600v-200h-600z" />
159
+<glyph unicode="&#xe130;" d="M2 585q-16 -31 6 -53l112 -110q13 -13 32 -13.5t34 10.5l121 85q0 -51 -0.5 -153.5t-0.5 -148.5q0 -84 38.5 -138t110.5 -54t111 55t39 139v106l339 131q20 6 40.5 19.5t20.5 28.5v342q0 7 -81 90t-94 83h-525q-17 0 -35.5 -14t-28.5 -28l-10 -15zM77 565l236 339h503 l89 -100v-294l-340 -130q-20 -6 -40 -20t-20 -29v-202q0 -22 -25 -31t-50 0t-25 31v456v14.5t-1.5 11.5t-5 12t-9.5 7q-24 13 -46 -5l-184 -146zM305 1104v200h600v-200h-600z" />
160
+<glyph unicode="&#xe131;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM298 701l2 -201h300l-2 -194l402 294l-402 298v-197h-300z" />
161
+<glyph unicode="&#xe132;" d="M0 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t231.5 47.5q122 0 232.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-218 -217.5t-300 -80t-299.5 80t-217.5 217.5t-80 299.5zM200 600l402 -294l-2 194h300l2 201h-300v197z" />
162
+<glyph unicode="&#xe133;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600h200v-300h200v300h200l-300 400z" />
163
+<glyph unicode="&#xe134;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600l300 -400l300 400h-200v300h-200v-300h-200z" />
164
+<glyph unicode="&#xe135;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM254 780q-8 -33 5.5 -92.5t7.5 -87.5q0 -9 17 -44t16 -60 q12 0 23 -5.5t23 -15t20 -13.5q24 -12 108 -42q22 -8 53 -31.5t59.5 -38.5t57.5 -11q8 -18 -15 -55t-20 -57q42 -71 87 -80q0 -6 -3 -15.5t-3.5 -14.5t4.5 -17q104 -3 221 112q30 29 47 47t34.5 49t20.5 62q-14 9 -37 9.5t-36 7.5q-14 7 -49 15t-52 19q-9 0 -39.5 -0.5 t-46.5 -1.5t-39 -6.5t-39 -16.5q-50 -35 -66 -12q-4 2 -3.5 25.5t0.5 25.5q-6 13 -26.5 17t-24.5 7q2 22 -2 41t-16.5 28t-38.5 -20q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q12 -19 32 -37.5t34 -27.5l14 -8q0 3 9.5 39.5t5.5 57.5 q-4 23 14.5 44.5t22.5 31.5q5 14 10 35t8.5 31t15.5 22.5t34 21.5q-6 18 10 37q8 0 23.5 -1.5t24.5 -1.5t20.5 4.5t20.5 15.5q-10 23 -30.5 42.5t-38 30t-49 26.5t-43.5 23q11 39 2 44q31 -13 58 -14.5t39 3.5l11 4q7 36 -16.5 53.5t-64.5 28.5t-56 23q-19 -3 -37 0 q-15 -12 -36.5 -21t-34.5 -12t-44 -8t-39 -6q-15 -3 -45.5 0.5t-45.5 -2.5q-21 -7 -52 -26.5t-34 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -90.5t-29.5 -79.5zM518 916q3 12 16 30t16 25q10 -10 18.5 -10t14 6t14.5 14.5t16 12.5q0 -24 17 -66.5t17 -43.5 q-9 2 -31 5t-36 5t-32 8t-30 14zM692 1003h1h-1z" />
165
+<glyph unicode="&#xe136;" d="M0 164.5q0 21.5 15 37.5l600 599q-33 101 6 201.5t135 154.5q164 92 306 -9l-259 -138l145 -232l251 126q13 -175 -151 -267q-123 -70 -253 -23l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5z" />
166
+<glyph unicode="&#xe137;" horiz-adv-x="1220" d="M0 196v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 596v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5zM0 996v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM600 596h500v100h-500v-100zM800 196h300v100h-300v-100zM900 996h200v100h-200v-100z" />
167
+<glyph unicode="&#xe138;" d="M100 1100v100h1000v-100h-1000zM150 1000h900l-350 -500v-300l-200 -200v500z" />
168
+<glyph unicode="&#xe139;" d="M0 200v200h1200v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500z M500 1000h200v100h-200v-100z" />
169
+<glyph unicode="&#xe140;" d="M0 0v400l129 -129l200 200l142 -142l-200 -200l129 -129h-400zM0 800l129 129l200 -200l142 142l-200 200l129 129h-400v-400zM729 329l142 142l200 -200l129 129v-400h-400l129 129zM729 871l200 200l-129 129h400v-400l-129 129l-200 -200z" />
170
+<glyph unicode="&#xe141;" d="M0 596q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 596q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM291 655 q0 23 15.5 38.5t38.5 15.5t39 -16t16 -38q0 -23 -16 -39t-39 -16q-22 0 -38 16t-16 39zM400 850q0 22 16 38.5t39 16.5q22 0 38 -16t16 -39t-16 -39t-38 -16q-23 0 -39 16.5t-16 38.5zM514 609q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 22 16 38.5t39 16.5 q22 0 38 -16t16 -39t-16 -39t-38 -16q-14 0 -29 10l-55 -145q17 -22 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5zM800 655q0 22 16 38t39 16t38.5 -15.5t15.5 -38.5t-16 -39t-38 -16q-23 0 -39 16t-16 39z" />
171
+<glyph unicode="&#xe142;" d="M-40 375q-13 -95 35 -173q35 -57 94 -89t129 -32q63 0 119 28q33 16 65 40.5t52.5 45.5t59.5 64q40 44 57 61l394 394q35 35 47 84t-3 96q-27 87 -117 104q-20 2 -29 2q-46 0 -78.5 -16.5t-67.5 -51.5l-389 -396l-7 -7l69 -67l377 373q20 22 39 38q23 23 50 23 q38 0 53 -36q16 -39 -20 -75l-547 -547q-52 -52 -125 -52q-55 0 -100 33t-54 96q-5 35 2.5 66t31.5 63t42 50t56 54q24 21 44 41l348 348q52 52 82.5 79.5t84 54t107.5 26.5q25 0 48 -4q95 -17 154 -94.5t51 -175.5q-7 -101 -98 -192l-252 -249l-253 -256l7 -7l69 -60 l517 511q67 67 95 157t11 183q-16 87 -67 154t-130 103q-69 33 -152 33q-107 0 -197 -55q-40 -24 -111 -95l-512 -512q-68 -68 -81 -163z" />
172
+<glyph unicode="&#xe143;" d="M80 784q0 131 98.5 229.5t230.5 98.5q143 0 241 -129q103 129 246 129q129 0 226 -98.5t97 -229.5q0 -46 -17.5 -91t-61 -99t-77 -89.5t-104.5 -105.5q-197 -191 -293 -322l-17 -23l-16 23q-43 58 -100 122.5t-92 99.5t-101 100q-71 70 -104.5 105.5t-77 89.5t-61 99 t-17.5 91zM250 784q0 -27 30.5 -70t61.5 -75.5t95 -94.5l22 -22q93 -90 190 -201q82 92 195 203l12 12q64 62 97.5 97t64.5 79t31 72q0 71 -48 119.5t-105 48.5q-74 0 -132 -83l-118 -171l-114 174q-51 80 -123 80q-60 0 -109.5 -49.5t-49.5 -118.5z" />
173
+<glyph unicode="&#xe144;" d="M57 353q0 -95 66 -159l141 -142q68 -66 159 -66q93 0 159 66l283 283q66 66 66 159t-66 159l-141 141q-8 9 -19 17l-105 -105l212 -212l-389 -389l-247 248l95 95l-18 18q-46 45 -75 101l-55 -55q-66 -66 -66 -159zM269 706q0 -93 66 -159l141 -141q7 -7 19 -17l105 105 l-212 212l389 389l247 -247l-95 -96l18 -17q47 -49 77 -100l29 29q35 35 62.5 88t27.5 96q0 93 -66 159l-141 141q-66 66 -159 66q-95 0 -159 -66l-283 -283q-66 -64 -66 -159z" />
174
+<glyph unicode="&#xe145;" d="M200 100v953q0 21 30 46t81 48t129 38t163 15t162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5zM300 300h600v700h-600v-700zM496 150q0 -43 30.5 -73.5t73.5 -30.5t73.5 30.5t30.5 73.5t-30.5 73.5t-73.5 30.5 t-73.5 -30.5t-30.5 -73.5z" />
175
+<glyph unicode="&#xe146;" d="M0 0l303 380l207 208l-210 212h300l267 279l-35 36q-15 14 -15 35t15 35q14 15 35 15t35 -15l283 -282q15 -15 15 -36t-15 -35q-14 -15 -35 -15t-35 15l-36 35l-279 -267v-300l-212 210l-208 -207z" />
176
+<glyph unicode="&#xe148;" d="M295 433h139q5 -77 48.5 -126.5t117.5 -64.5v335q-6 1 -15.5 4t-11.5 3q-46 14 -79 26.5t-72 36t-62.5 52t-40 72.5t-16.5 99q0 92 44 159.5t109 101t144 40.5v78h100v-79q38 -4 72.5 -13.5t75.5 -31.5t71 -53.5t51.5 -84t24.5 -118.5h-159q-8 72 -35 109.5t-101 50.5 v-307l64 -14q34 -7 64 -16.5t70 -31.5t67.5 -52t47.5 -80.5t20 -112.5q0 -139 -89 -224t-244 -96v-77h-100v78q-152 17 -237 104q-40 40 -52.5 93.5t-15.5 139.5zM466 889q0 -29 8 -51t16.5 -34t29.5 -22.5t31 -13.5t38 -10q7 -2 11 -3v274q-61 -8 -97.5 -37.5t-36.5 -102.5 zM700 237q170 18 170 151q0 64 -44 99.5t-126 60.5v-311z" />
177
+<glyph unicode="&#xe149;" d="M100 600v100h166q-24 49 -44 104q-10 26 -14.5 55.5t-3 72.5t25 90t68.5 87q97 88 263 88q129 0 230 -89t101 -208h-153q0 52 -34 89.5t-74 51.5t-76 14q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -28 16.5 -69.5t28 -62.5t41.5 -72h241v-100h-197q8 -50 -2.5 -115 t-31.5 -94q-41 -59 -99 -113q35 11 84 18t70 7q33 1 103 -16t103 -17q76 0 136 30l50 -147q-41 -25 -80.5 -36.5t-59 -13t-61.5 -1.5q-23 0 -128 33t-155 29q-39 -4 -82 -17t-66 -25l-24 -11l-55 145l16.5 11t15.5 10t13.5 9.5t14.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221z" />
178
+<glyph unicode="&#xe150;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM602 900l298 300l298 -300h-198v-900h-200v900h-198z" />
179
+<glyph unicode="&#xe151;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v200h100v-100h200v-100h-300zM700 400v100h300v-200h-99v-100h-100v100h99v100h-200zM700 700v500h300v-500h-100v100h-100v-100h-100zM801 900h100v200h-100v-200z" />
180
+<glyph unicode="&#xe152;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v500h300v-500h-100v100h-100v-100h-100zM700 700v200h100v-100h200v-100h-300zM700 1100v100h300v-200h-99v-100h-100v100h99v100h-200zM801 200h100v200h-100v-200z" />
181
+<glyph unicode="&#xe153;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 100v400h300v-500h-100v100h-200zM800 1100v100h200v-500h-100v400h-100zM901 200h100v200h-100v-200z" />
182
+<glyph unicode="&#xe154;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 400v100h200v-500h-100v400h-100zM800 800v400h300v-500h-100v100h-200zM901 900h100v200h-100v-200z" />
183
+<glyph unicode="&#xe155;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h500v-200h-500zM700 400v200h400v-200h-400zM700 700v200h300v-200h-300zM700 1000v200h200v-200h-200z" />
184
+<glyph unicode="&#xe156;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h200v-200h-200zM700 400v200h300v-200h-300zM700 700v200h400v-200h-400zM700 1000v200h500v-200h-500z" />
185
+<glyph unicode="&#xe157;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q162 0 281 -118.5t119 -281.5v-300q0 -165 -118.5 -282.5t-281.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500z" />
186
+<glyph unicode="&#xe158;" d="M0 400v300q0 163 119 281.5t281 118.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-163 0 -281.5 117.5t-118.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM400 300l333 250l-333 250v-500z" />
187
+<glyph unicode="&#xe159;" d="M0 400v300q0 163 117.5 281.5t282.5 118.5h300q163 0 281.5 -119t118.5 -281v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 700l250 -333l250 333h-500z" />
188
+<glyph unicode="&#xe160;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -162 -118.5 -281t-281.5 -119h-300q-165 0 -282.5 118.5t-117.5 281.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 400h500l-250 333z" />
189
+<glyph unicode="&#xe161;" d="M0 400v300h300v200l400 -350l-400 -350v200h-300zM500 0v200h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-500v200h400q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-400z" />
190
+<glyph unicode="&#xe162;" d="M217 519q8 -19 31 -19h302q-155 -438 -160 -458q-5 -21 4 -32l9 -8h9q14 0 26 15q11 13 274.5 321.5t264.5 308.5q14 19 5 36q-8 17 -31 17l-301 -1q1 4 78 219.5t79 227.5q2 15 -5 27l-9 9h-9q-15 0 -25 -16q-4 -6 -98 -111.5t-228.5 -257t-209.5 -237.5q-16 -19 -6 -41 z" />
191
+<glyph unicode="&#xe163;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q47 0 100 15v185h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h500v185q-14 4 -114 7.5t-193 5.5l-93 2q-165 0 -282.5 -117.5t-117.5 -282.5v-300zM600 400v300h300v200l400 -350l-400 -350v200h-300z " />
192
+<glyph unicode="&#xe164;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q163 0 281.5 117.5t118.5 282.5v98l-78 73l-122 -123v-148q0 -41 -29.5 -70.5t-70.5 -29.5h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h156l118 122l-74 78h-100q-165 0 -282.5 -117.5t-117.5 -282.5 v-300zM496 709l353 342l-149 149h500v-500l-149 149l-342 -353z" />
193
+<glyph unicode="&#xe165;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM406 600 q0 80 57 137t137 57t137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137z" />
194
+<glyph unicode="&#xe166;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 800l445 -500l450 500h-295v400h-300v-400h-300zM900 150h100v50h-100v-50z" />
195
+<glyph unicode="&#xe167;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 700h300v-300h300v300h295l-445 500zM900 150h100v50h-100v-50z" />
196
+<glyph unicode="&#xe168;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 705l305 -305l596 596l-154 155l-442 -442l-150 151zM900 150h100v50h-100v-50z" />
197
+<glyph unicode="&#xe169;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 988l97 -98l212 213l-97 97zM200 400l697 1l3 699l-250 -239l-149 149l-212 -212l149 -149zM900 150h100v50h-100v-50z" />
198
+<glyph unicode="&#xe170;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM200 612l212 -212l98 97l-213 212zM300 1200l239 -250l-149 -149l212 -212l149 148l249 -237l-1 697zM900 150h100v50h-100v-50z" />
199
+<glyph unicode="&#xe171;" d="M23 415l1177 784v-1079l-475 272l-310 -393v416h-392zM494 210l672 938l-672 -712v-226z" />
200
+<glyph unicode="&#xe172;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-850q0 -21 -15 -35.5t-35 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200z" />
201
+<glyph unicode="&#xe173;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-218l-276 -275l-120 120l-126 -127h-378v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM581 306l123 123l120 -120l353 352l123 -123l-475 -476zM600 1000h100v200h-100v-200z" />
202
+<glyph unicode="&#xe174;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-269l-103 -103l-170 170l-298 -298h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200zM700 133l170 170l-170 170l127 127l170 -170l170 170l127 -128l-170 -169l170 -170 l-127 -127l-170 170l-170 -170z" />
203
+<glyph unicode="&#xe175;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-300h-400v-200h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300l300 -300l300 300h-200v300h-200v-300h-200zM600 1000v200h100v-200h-100z" />
204
+<glyph unicode="&#xe176;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-402l-200 200l-298 -298h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300h200v-300h200v300h200l-300 300zM600 1000v200h100v-200h-100z" />
205
+<glyph unicode="&#xe177;" d="M0 250q0 -21 14.5 -35.5t35.5 -14.5h1100q21 0 35.5 14.5t14.5 35.5v550h-1200v-550zM0 900h1200v150q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 300v200h400v-200h-400z" />
206
+<glyph unicode="&#xe178;" d="M0 400l300 298v-198h400v-200h-400v-198zM100 800v200h100v-200h-100zM300 800v200h100v-200h-100zM500 800v200h400v198l300 -298l-300 -298v198h-400zM800 300v200h100v-200h-100zM1000 300h100v200h-100v-200z" />
207
+<glyph unicode="&#xe179;" d="M100 700v400l50 100l50 -100v-300h100v300l50 100l50 -100v-300h100v300l50 100l50 -100v-400l-100 -203v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447zM800 597q0 -29 10.5 -55.5t25 -43t29 -28.5t25.5 -18l10 -5v-397q0 -21 14.5 -35.5 t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v1106q0 31 -18 40.5t-44 -7.5l-276 -116q-25 -17 -43.5 -51.5t-18.5 -65.5v-359z" />
208
+<glyph unicode="&#xe180;" d="M100 0h400v56q-75 0 -87.5 6t-12.5 44v394h500v-394q0 -38 -12.5 -44t-87.5 -6v-56h400v56q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v888q0 22 25 34.5t50 13.5l25 2v56h-400v-56q75 0 87.5 -6t12.5 -44v-394h-500v394q0 38 12.5 44t87.5 6v56h-400v-56q4 0 11 -0.5 t24 -3t30 -7t24 -15t11 -24.5v-888q0 -22 -25 -34.5t-50 -13.5l-25 -2v-56z" />
209
+<glyph unicode="&#xe181;" d="M0 300q0 -41 29.5 -70.5t70.5 -29.5h300q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-300q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM100 100h400l200 200h105l295 98v-298h-425l-100 -100h-375zM100 300v200h300v-200h-300zM100 600v200h300v-200h-300z M100 1000h400l200 -200v-98l295 98h105v200h-425l-100 100h-375zM700 402v163l400 133v-163z" />
210
+<glyph unicode="&#xe182;" d="M16.5 974.5q0.5 -21.5 16 -90t46.5 -140t104 -177.5t175 -208q103 -103 207.5 -176t180 -103.5t137 -47t92.5 -16.5l31 1l163 162q17 18 13.5 41t-22.5 37l-192 136q-19 14 -45 12t-42 -19l-118 -118q-142 101 -268 227t-227 268l118 118q17 17 20 41.5t-11 44.5 l-139 194q-14 19 -36.5 22t-40.5 -14l-162 -162q-1 -11 -0.5 -32.5z" />
211
+<glyph unicode="&#xe183;" d="M0 50v212q0 20 10.5 45.5t24.5 39.5l365 303v50q0 4 1 10.5t12 22.5t30 28.5t60 23t97 10.5t97 -10t60 -23.5t30 -27.5t12 -24l1 -10v-50l365 -303q14 -14 24.5 -39.5t10.5 -45.5v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-20 0 -35 14.5t-15 35.5zM0 712 q0 -21 14.5 -33.5t34.5 -8.5l202 33q20 4 34.5 21t14.5 38v146q141 24 300 24t300 -24v-146q0 -21 14.5 -38t34.5 -21l202 -33q20 -4 34.5 8.5t14.5 33.5v200q-6 8 -19 20.5t-63 45t-112 57t-171 45t-235 20.5q-92 0 -175 -10.5t-141.5 -27t-108.5 -36.5t-81.5 -40 t-53.5 -36.5t-31 -27.5l-9 -10v-200z" />
212
+<glyph unicode="&#xe184;" d="M100 0v100h1100v-100h-1100zM175 200h950l-125 150v250l100 100v400h-100v-200h-100v200h-200v-200h-100v200h-200v-200h-100v200h-100v-400l100 -100v-250z" />
213
+<glyph unicode="&#xe185;" d="M100 0h300v400q0 41 -29.5 70.5t-70.5 29.5h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-400zM500 0v1000q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-1000h-300zM900 0v700q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-700h-300z" />
214
+<glyph unicode="&#xe186;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />
215
+<glyph unicode="&#xe187;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h100v200h100v-200h100v500h-100v-200h-100v200h-100v-500zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />
216
+<glyph unicode="&#xe188;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v100h-200v300h200v100h-300v-500zM600 300h300v100h-200v300h200v100h-300v-500z" />
217
+<glyph unicode="&#xe189;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 550l300 -150v300zM600 400l300 150l-300 150v-300z" />
218
+<glyph unicode="&#xe190;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300v500h700v-500h-700zM300 400h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130v-300zM575 549 q0 -65 27 -107t68 -42h130v300h-130q-38 0 -66.5 -43t-28.5 -108z" />
219
+<glyph unicode="&#xe191;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" />
220
+<glyph unicode="&#xe192;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v400h-200v100h-100v-500zM301 400v200h100v-200h-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" />
221
+<glyph unicode="&#xe193;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 700v100h300v-300h-99v-100h-100v100h99v200h-200zM201 300v100h100v-100h-100zM601 300v100h100v-100h-100z M700 700v100h200v-500h-100v400h-100z" />
222
+<glyph unicode="&#xe194;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 500v200 l100 100h300v-100h-300v-200h300v-100h-300z" />
223
+<glyph unicode="&#xe195;" d="M0 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 400v400h300 l100 -100v-100h-100v100h-200v-100h200v-100h-200v-100h-100zM700 400v100h100v-100h-100z" />
224
+<glyph unicode="&#xe197;" d="M-14 494q0 -80 56.5 -137t135.5 -57h222v300h400v-300h128q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200h200v300h200v-300h200 l-300 -300z" />
225
+<glyph unicode="&#xe198;" d="M-14 494q0 -80 56.5 -137t135.5 -57h8l414 414l403 -403q94 26 154.5 104.5t60.5 178.5q0 120 -85 206.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200l300 300 l300 -300h-200v-300h-200v300h-200z" />
226
+<glyph unicode="&#xe199;" d="M100 200h400v-155l-75 -45h350l-75 45v155h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170z" />
227
+<glyph unicode="&#xe200;" d="M121 700q0 -53 28.5 -97t75.5 -65q-4 -16 -4 -38q0 -74 52.5 -126.5t126.5 -52.5q56 0 100 30v-306l-75 -45h350l-75 45v306q46 -30 100 -30q74 0 126.5 52.5t52.5 126.5q0 24 -9 55q50 32 79.5 83t29.5 112q0 90 -61.5 155.5t-150.5 71.5q-26 89 -99.5 145.5 t-167.5 56.5q-116 0 -197.5 -81.5t-81.5 -197.5q0 -4 1 -11.5t1 -11.5q-14 2 -23 2q-74 0 -126.5 -52.5t-52.5 -126.5z" />
228
+</font>
229
+</defs></svg> 

BIN
www/fonts/glyphicons-halflings-regular.ttf View File


BIN
www/fonts/glyphicons-halflings-regular.woff View File


+ 27 - 0
www/index.html View File

@@ -0,0 +1,27 @@
1
+    <!DOCTYPE html>
2
+    <html>
3
+	    <head>
4
+		    <title>Motor Control</title>
5
+		    <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+		    <!-- Bootstrap -->
7
+		    <link href="css/bootstrap.min.css" rel="stylesheet" media="screen">
8
+	    </head>
9
+	    <body>
10
+		    <script src="http://code.jquery.com/jquery.js"></script>
11
+		    <script src="js/bootstrap.min.js"></script>
12
+			</script>
13
+	
14
+			<ul class="nav nav-tabs" role="tablist">
15
+			  <li class="active"> <a href="index.html"    >Home          </a></li>
16
+			  <li               ><a href="mc.html"       >Control       </a></li>
17
+			  <li               ><a href="info.html"     >Info          </a></li>
18
+			</ul>
19
+			
20
+			<div class="jumbotron">
21
+			  <h1>Welcome!</h1>
22
+			  <p>Welcome to Raspberry Py Web control</p>
23
+			  <p><a class="btn btn-primary btn-lg" role="button">Control</a></p>
24
+			</div>
25
+						
26
+	    </body>
27
+    </html>

+ 32 - 0
www/info.html View File

@@ -0,0 +1,32 @@
1
+    <!DOCTYPE html>
2
+    <html>
3
+	    <head>
4
+		    <title>Info</title>
5
+		    <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+		    <!-- Bootstrap -->
7
+		    <link href="css/bootstrap.min.css" rel="stylesheet" media="screen">
8
+	    </head>
9
+	    <body>
10
+		    <script src="http://code.jquery.com/jquery.js"></script>
11
+		    <script src="js/bootstrap.min.js"></script>
12
+			</script>
13
+	
14
+			<ul class="nav nav-tabs" role="tablist">
15
+			  <li               > <a href="index.html"    >Home          </a></li>
16
+			  <li               > <a href="mc.html"       >Control       </a></li>
17
+			  <li class="active"> <a href="info.html"     >Info          </a></li>
18
+			</ul>
19
+			
20
+			<div class="panel panel-default">
21
+			  <div class="panel-heading">Info Area</div>
22
+			  <div class="panel-body">
23
+			    Current Time Version:    ... <br>
24
+			    Server IP Adress        ... <br>
25
+			    Client (Your) IP Adress ... <br>
26
+			    Python Version:         ... <br>
27
+			  </div>
28
+			</div>
29
+	    </body>
30
+    </html>
31
+    
32
+    

File diff suppressed because it is too large
+ 2114 - 0
www/js/bootstrap.js


File diff suppressed because it is too large
+ 6 - 0
www/js/bootstrap.min.js


+ 192 - 0
www/mc.html View File

@@ -0,0 +1,192 @@
1
+    <!DOCTYPE html>
2
+    <html>
3
+	    <head>
4
+		    <title>css control</title>
5
+		    <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+		    
7
+		    <!-- Bootstrap -->
8
+		    <link href="css/bootstrap.min.css" rel="stylesheet" media="screen">
9
+	    </head>
10
+	    <body>
11
+		    <script src="http://code.jquery.com/jquery.js"></script>
12
+		    <script src="js/bootstrap.min.js"></script>
13
+			
14
+			<script> 
15
+			var counter = 0;
16
+			var state = 'stop';
17
+			
18
+			function clickHandler(value, item) {
19
+				if(value == 'up'){
20
+				test = "mc.html?IO1=up,target=" + item;
21
+	 			   $.post( "mc.html?action=up&port=" + item );
22
+	 			}
23
+	 			if(value == 'stop'){
24
+	 			   $.post( "mc.html?action=stop&port=" + item );
25
+	 			   asyncLoop()
26
+	 			}
27
+	 			if(value == 'down'){
28
+	 			   $.post( "mc.html?action=down&port=" + item );
29
+	 			}
30
+	 			state = value
31
+	 			// GetStatesFromServer()
32
+			}
33
+				    
34
+		    (function GetStatesFromServer() {
35
+				$.get("cmd",function(retv){
36
+				
37
+				    state = retv
38
+				
39
+					states = retv.split(",")
40
+				
41
+				    element0 = document.getElementById('progressBar_0')
42
+		        	element0.innerHTML = "<span>" + states[0] + "%" + "</span>"
43
+					element0.style.width=states[0]+"%"
44
+           			
45
+           			element1 = document.getElementById('progressBar_1')
46
+		        	element1.innerHTML = "<span>" + states[1] + "%" + "</span>"
47
+					element1.style.width=states[1]+"%"
48
+           			
49
+           			element2 = document.getElementById('progressBar_2')
50
+		        	element2.innerHTML = "<span>" + states[2] + "%" + "</span>"
51
+					element2.style.width=states[2]+"%"
52
+					
53
+					element3 = document.getElementById('progressBar_3')
54
+		        	element3.innerHTML = "<span>" + states[3] + "%" + "</span>"
55
+					element3.style.width=states[3]+"%"
56
+					
57
+           			setTimeout(GetStatesFromServer, 1000);
58
+		    	})
59
+		    	
60
+			})()
61
+										
62
+			</script>
63
+	
64
+			<ul class="nav nav-tabs" role="tablist">
65
+			  <li                ><a href="index.html"    >Home          </a></li>
66
+			  <li class="active" ><a href="mc.html"       >Control       </a></li>
67
+			  <li                ><a href="info.html"     >Info          </a></li>
68
+			</ul>
69
+			
70
+			<div class="panel-group" id="accordion">
71
+			  <div class="panel panel-default">
72
+			    <div class="panel-heading">
73
+			      <h4 class="panel-title">
74
+			        <a data-toggle="collapse" data-parent="#accordion" href="#collapseOne">
75
+			          Gruppe 1
76
+			        </a>
77
+			      </h4>
78
+			    </div>
79
+			    <div id="collapseOne" class="panel-collapse collapse in">
80
+				
81
+				  <!-- bgn Button group 1 -->
82
+				  <div class="panel-body" >
83
+					<button type="button" class="btn btn-default" name="down" onclick="clickHandler('down',0)" > Down </button>
84
+					<button type="button" class="btn btn-default" name="stop" onclick="clickHandler('stop',0)" > Stop </button>
85
+					<button type="button" class="btn btn-default" name="up"   onclick="clickHandler('up',0)"   > Up   </button>
86
+				  </div>
87
+ 				
88
+		          <div class="progress">
89
+					  <div id="progressBar_0" class="progress-bar" role="progressbar" style="width: 0%;">
90
+					    <span> 0% Complete </span>
91
+					  </div>
92
+				  </div>      
93
+				 <!-- end Button group 1 -->
94
+				  
95
+			    </div>
96
+			  </div>
97
+			  
98
+			  <div class="panel panel-default">
99
+			    <div class="panel-heading">
100
+			      <h4 class="panel-title">
101
+			        <a data-toggle="collapse" data-parent="#accordion" href="#collapseTwo">
102
+			          Gruppe 2
103
+			        </a>
104
+			      </h4>
105
+			    </div>
106
+			    <div id="collapseTwo" class="panel-collapse collapse">
107
+			      <div class="panel-body">
108
+			      
109
+			      <!-- bgn Button group 2 -->
110
+				  <div class="panel-body" >
111
+					<button type="button" class="btn btn-default" name="down" onclick="clickHandler('down',1)" > Down </button>
112
+					<button type="button" class="btn btn-default" name="stop" onclick="clickHandler('stop',1)" > Stop </button>
113
+					<button type="button" class="btn btn-default" name="up"   onclick="clickHandler('up',1)"   > Up   </button>
114
+				  </div>
115
+ 				
116
+				  
117
+		          <div class="progress">
118
+					  <div id="progressBar_1" class="progress-bar" role="progressbar" style="width: 0%;">
119
+					    <span> 0% Complete </span>
120
+					  </div>
121
+				  </div>      
122
+				  <!-- end Button group 2 -->
123
+			      
124
+			      </div>
125
+			    </div>
126
+			   </div> 
127
+			  
128
+			  <div class="panel panel-default">
129
+			    <div class="panel-heading">
130
+			      <h4 class="panel-title">
131
+			        <a data-toggle="collapse" data-parent="#accordion" href="#collapseThree">
132
+			          Gruppe 3
133
+			        </a>
134
+			      </h4>
135
+			    </div>
136
+			    
137
+				<div id="collapseThree" class="panel-collapse collapse">
138
+			      <div class="panel-body">
139
+			      
140
+			      <!-- bgn Button group 3 -->
141
+				  <div class="panel-body" >
142
+					<button type="button" class="btn btn-default" name="down" onclick="clickHandler('down',2)" > Down </button>
143
+					<button type="button" class="btn btn-default" name="stop" onclick="clickHandler('stop',2)" > Stop </button>
144
+					<button type="button" class="btn btn-default" name="up"   onclick="clickHandler('up',2)"   > Up   </button>
145
+				  </div>
146
+ 				
147
+				  
148
+		          <div class="progress">
149
+					  <div id="progressBar_2" class="progress-bar" role="progressbar" style="width: 0%;">
150
+					    <span> 0% Complete </span>
151
+					  </div>
152
+				  </div>      
153
+				  <!-- end Button group 3 -->
154
+			      
155
+			      </div>
156
+			    </div>
157
+				</div>
158
+				
159
+			  <div class="panel panel-default">
160
+			    <div class="panel-heading">
161
+			      <h4 class="panel-title">
162
+			        <a data-toggle="collapse" data-parent="#accordion" href="#collapseFour">
163
+			          Gruppe 4
164
+			        </a>
165
+			      </h4>
166
+			    </div>
167
+			    <div id="collapseFour" class="panel-collapse collapse">
168
+			      <div class="panel-body">
169
+			      
170
+			      <!-- bgn Button group 4 -->
171
+				  <div class="panel-body" >
172
+					<button type="button" class="btn btn-default" name="down" onclick="clickHandler('down',3)" > Down </button>
173
+					<button type="button" class="btn btn-default" name="stop" onclick="clickHandler('stop',3)" > Stop </button>
174
+					<button type="button" class="btn btn-default" name="up"   onclick="clickHandler('up',3)"   > Up   </button>
175
+				  </div>
176
+ 				
177
+				  
178
+		          <div class="progress">
179
+					  <div id="progressBar_3" class="progress-bar" role="progressbar" style="width: 0%;">
180
+					    <span> 0% Complete </span>
181
+					  </div>
182
+				  </div>      
183
+				  <!-- end Button group 4 -->
184
+			      
185
+			      </div>
186
+			    </div>
187
+			    
188
+			  </div>
189
+			</div>
190
+			   
191
+	    </body>
192
+    </html>

+ 22 - 0
www/simple_ mc.html View File

@@ -0,0 +1,22 @@
1
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
2
+       "http://www.w3.org/TR/html4/loose.dtd">
3
+<html>
4
+	<head>
5
+		<title>simple control</title>
6
+	</head>
7
+
8
+	<body>
9
+
10
+	<!-- menue -->
11
+	<a href="index.html">[home]</a> 
12
+	<a href="mc.html">[simple control]</a>
13
+	<a href="bs.html">[css control]</a>
14
+	<br>
15
+
16
+	<!-- links -->
17
+	<a href="mc.html?IO1=up">Up</a><br>
18
+	<a href="mc.html?IO1=stop">Stop</a><br> 
19
+	<a href="mc.html?IO1=down">Down </a><br>
20
+	</body>
21
+	
22
+</html>