iruby 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,300 @@
1
+ module IRuby
2
+ class Session
3
+ DELIM = '<IDS|MSG>'
4
+
5
+ def initialize(username, key, sign_scheme)
6
+ @username = username
7
+ @session = SecureRandom.uuid
8
+ @msg_id = 0
9
+
10
+ raise 'Unknown signature scheme' unless sign_scheme =~ /\Ahmac-(.*)\Z/
11
+ @digest = OpenSSL::Digest::Digest.new($1)
12
+ @key = key
13
+ end
14
+
15
+ # Sign a message with HMAC digest. If no auth, return b''.
16
+
17
+ # Parameters
18
+ # ----------
19
+ # msg_list : list
20
+ # The [p_header,p_parent,p_content] part of the message list.
21
+ def sign(msg_list)
22
+ return '' unless @key
23
+ hmac = OpenSSL::HMAC.new(@key, @digest)
24
+ msg_list.each do |m|
25
+ hmac.update(m)
26
+ end
27
+ hmac.hexdigest
28
+ end
29
+
30
+ def msg_header
31
+ h = {
32
+ msg_id: @msg_id,
33
+ username: @username,
34
+ session: @session
35
+ }
36
+ @msg_id += 1
37
+ h
38
+ end
39
+
40
+ def msg(msg_type, content=nil, parent=nil)
41
+ msg = {}
42
+ msg['header'] = msg_header
43
+ msg['parent_header'] = parent ? parent['header'] : {}
44
+ msg['metadata'] = {}
45
+ msg['header']['msg_type'] = msg_type
46
+ msg['content'] = content || {}
47
+ return msg
48
+ end
49
+
50
+ # Build and send a message via stream or socket.
51
+ #
52
+ # The message format used by this function internally is as follows:
53
+ #
54
+ # [ident1,ident2,...,DELIM,HMAC,p_header,p_parent,p_content,
55
+ # buffer1,buffer2,...]
56
+ #
57
+ # The serialize/unserialize methods convert the nested message dict into this
58
+ # format.
59
+ #
60
+ # Parameters
61
+ # ----------
62
+ #
63
+ # stream : zmq.Socket or ZMQStream
64
+ # The socket-like object used to send the data.
65
+ # msg_or_type : str or Message/dict
66
+ # Normally, msg_or_type will be a msg_type unless a message is being
67
+ # sent more than once. If a header is supplied, this can be set to
68
+ # None and the msg_type will be pulled from the header.
69
+ #
70
+ # content : dict or None
71
+ # The content of the message (ignored if msg_or_type is a message).
72
+ # header : dict or None
73
+ # The header dict for the message (ignores if msg_to_type is a message).
74
+ # parent : Message or dict or None
75
+ # The parent or parent header describing the parent of this message
76
+ # (ignored if msg_or_type is a message).
77
+ # ident : bytes or list of bytes
78
+ # The zmq.IDENTITY routing path.
79
+ # subheader : dict or None
80
+ # Extra header keys for this message's header (ignored if msg_or_type
81
+ # is a message).
82
+ # buffers : list or None
83
+ # The already-serialized buffers to be appended to the message.
84
+ # track : bool
85
+ # Whether to track. Only for use with Sockets, because ZMQStream
86
+ # objects cannot track messages.
87
+ #
88
+ # Returns
89
+ # -------
90
+ # msg : dict
91
+ # The constructed message.
92
+ # (msg,tracker) : (dict, MessageTracker)
93
+ # if track=True, then a 2-tuple will be returned,
94
+ # the first element being the constructed
95
+ # message, and the second being the MessageTracker
96
+ def send(stream, msg_or_type, content=nil, parent=nil, ident=nil, buffers=nil, subheader=nil, track=false, header=nil)
97
+ if !stream.is_a?(ZMQ::Socket)
98
+ raise "stream must be Socket or ZMQSocket, not %r"%stream.class
99
+ end
100
+
101
+ if msg_or_type.is_a?(Hash)
102
+ msg = msg_or_type
103
+ else
104
+ msg = self.msg(msg_or_type, content, parent)
105
+ end
106
+
107
+ buffers ||= []
108
+ to_send = self.serialize(msg, ident)
109
+ flag = 0
110
+ if buffers.any?
111
+ flag = ZMQ::SNDMORE
112
+ _track = false
113
+ else
114
+ _track=track
115
+ end
116
+ if track
117
+ to_send.each_with_index do |part, i|
118
+ if i == to_send.length - 1
119
+ flag = 0
120
+ else
121
+ flag = ZMQ::SNDMORE
122
+ end
123
+ stream.send_string(part, flag)
124
+ end
125
+ else
126
+ to_send.each_with_index do |part, i|
127
+ if i == to_send.length - 1
128
+ flag = 0
129
+ else
130
+ flag = ZMQ::SNDMORE
131
+ end
132
+ stream.send_string(part, flag)
133
+ end
134
+ end
135
+ # STDOUT.puts '-'*30
136
+ # STDOUT.puts "SENDING"
137
+ # STDOUT.puts to_send
138
+ # STDOUT.puts to_send.length
139
+ # STDOUT.puts '-'*30
140
+
141
+ #buffers.each do |b|
142
+ #stream.send(b, flag, copy=False)
143
+ #end
144
+ #if buffers:
145
+ #if track:
146
+ #tracker = stream.send(buffers[-1], copy=False, track=track)
147
+ #else:
148
+ #tracker = stream.send(buffers[-1], copy=False)
149
+
150
+ # omsg = Message(msg)
151
+ #if self.debug:
152
+ #pprint.pprint(msg)
153
+ #pprint.pprint(to_send)
154
+ #pprint.pprint(buffers)
155
+
156
+ #msg['tracker'] = tracker
157
+
158
+ return msg
159
+ end
160
+
161
+ def recv(socket, mode=ZMQ::NOBLOCK)
162
+ begin
163
+ msg = []
164
+ frame = ""
165
+ rc = socket.recv_string(frame, mode)
166
+ ZMQ::Util.error_check("zmq_msg_send", rc)
167
+
168
+ msg << frame
169
+ while socket.more_parts?
170
+ begin
171
+ frame = ""
172
+ rc = socket.recv_string(frame, mode)
173
+ ZMQ::Util.error_check("zmq_msg_send", rc)
174
+ msg << frame
175
+ rescue
176
+ end
177
+ end
178
+ # Skip everything before DELIM, then munge the three json objects into the
179
+ # one the rest of my code expects
180
+ i = msg.index(DELIM)
181
+ idents = msg[0..i-1]
182
+ msg_list = msg[i+1..-1]
183
+ end
184
+ return idents, unserialize(msg_list)
185
+ end
186
+
187
+ # Serialize the message components to bytes.
188
+ #
189
+ # This is roughly the inverse of unserialize. The serialize/unserialize
190
+ # methods work with full message lists, whereas pack/unpack work with
191
+ # the individual message parts in the message list.
192
+ #
193
+ # Parameters
194
+ # ----------
195
+ # msg : dict or Message
196
+ # The nexted message dict as returned by the self.msg method.
197
+ #
198
+ # Returns
199
+ # -------
200
+ # msg_list : list
201
+ # The list of bytes objects to be sent with the format:
202
+ # [ident1,ident2,...,DELIM,HMAC,p_header,p_parent,p_content,
203
+ # buffer1,buffer2,...]. In this list, the p_* entities are
204
+ # the packed or serialized versions, so if JSON is used, these
205
+ # are utf8 encoded JSON strings.
206
+ def serialize(msg, ident=nil)
207
+ content = msg.fetch('content', {})
208
+ if content.nil?
209
+ content = {}.to_json
210
+ elsif content.is_a?(Hash)
211
+ content = content.to_json
212
+ #elsif isinstance(content, bytes):
213
+ # content is already packed, as in a relayed message
214
+ #pass
215
+ #elsif isinstance(content, unicode):
216
+ # should be bytes, but JSON often spits out unicode
217
+ #content = content.encode('utf8')
218
+ else
219
+ raise "Content incorrect type: %s"%type(content)
220
+ end
221
+
222
+ real_message = [MultiJson.dump(msg['header']),
223
+ MultiJson.dump(msg['parent_header']),
224
+ MultiJson.dump(msg['metadata']),
225
+ MultiJson.dump(msg['content']),
226
+ ]
227
+
228
+ to_send = []
229
+
230
+ if ident.is_a?(Array)
231
+ # accept list of idents
232
+ to_send += ident
233
+ elsif !ident.nil?
234
+ to_send << ident
235
+ end
236
+ to_send << DELIM
237
+
238
+ signature = self.sign(real_message)
239
+ to_send << signature
240
+
241
+ to_send += real_message
242
+ # STDOUT.puts to_send
243
+ # STDOUT.puts to_send.length
244
+
245
+ return to_send
246
+ end
247
+
248
+ # Unserialize a msg_list to a nested message dict.
249
+ # This is roughly the inverse of serialize. The serialize/unserialize
250
+ # methods work with full message lists, whereas pack/unpack work with
251
+ # the individual message parts in the message list.
252
+
253
+ # Parameters:
254
+ # -----------
255
+ # msg_list : list of bytes or Message objects
256
+ # The list of message parts of the form [HMAC,p_header,p_parent,
257
+ # p_content,buffer1,buffer2,...].
258
+ # content : bool (True)
259
+ # Whether to unpack the content dict (True), or leave it packed
260
+ # (False).
261
+ # copy : bool (True)
262
+ # Whether to return the bytes (True), or the non-copying Message
263
+ # object in each place (False).
264
+
265
+ # Returns
266
+ # -------
267
+ # msg : dict
268
+ # The nested message dict with top-level keys [header, parent_header,
269
+ # content, buffers].
270
+ def unserialize(msg_list, content=true, copy=true)
271
+ minlen = 5
272
+ message = {}
273
+ unless copy
274
+ minlen.times do |i|
275
+ msg_list[i] = msg_list[i].bytes
276
+ end
277
+ end
278
+ unless msg_list.length >= minlen
279
+ raise "malformed message, must have at least %i elements"%minlen
280
+ end
281
+
282
+ raise "Invalid signature" unless self.sign(msg_list[1..-1]) == msg_list[0]
283
+
284
+ header = msg_list[1]
285
+ message['header'] = MultiJson.load(header)
286
+ message['msg_id'] = header['msg_id']
287
+ message['msg_type'] = header['msg_type']
288
+ message['parent_header'] = MultiJson.load(msg_list[2])
289
+ message['metadata'] = MultiJson.load(msg_list[3])
290
+ if content
291
+ message['content'] = MultiJson.load(msg_list[4])
292
+ else
293
+ message['content'] = msg_list[4]
294
+ end
295
+
296
+ message['buffers'] = msg_list[4..-1]
297
+ return message
298
+ end
299
+ end
300
+ end
@@ -0,0 +1,3 @@
1
+ module IRuby
2
+ VERSION = '0.0.1'
3
+ end
@@ -0,0 +1,768 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <svg
3
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
4
+ xmlns:cc="http://creativecommons.org/ns#"
5
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
6
+ xmlns:svg="http://www.w3.org/2000/svg"
7
+ xmlns="http://www.w3.org/2000/svg"
8
+ xmlns:xlink="http://www.w3.org/1999/xlink"
9
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
10
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
11
+ xml:space="preserve"
12
+ width="1408.3538"
13
+ height="148.04994"
14
+ style="fill-rule:evenodd"
15
+ viewBox="0 0 1408.3538 148.04846"
16
+ id="svg2"
17
+ version="1.1"
18
+ inkscape:version="0.48.4 r9939"
19
+ sodipodi:docname="ipynblogo.svg"
20
+ inkscape:export-filename="ipynblogo.png"
21
+ inkscape:export-xdpi="39.83239"
22
+ inkscape:export-ydpi="39.83239"><metadata
23
+ id="metadata121"><rdf:RDF><cc:Work
24
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
25
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><sodipodi:namedview
26
+ pagecolor="#ffffff"
27
+ bordercolor="#666666"
28
+ borderopacity="1"
29
+ objecttolerance="10"
30
+ gridtolerance="10"
31
+ guidetolerance="10"
32
+ inkscape:pageopacity="0"
33
+ inkscape:pageshadow="2"
34
+ inkscape:window-width="1276"
35
+ inkscape:window-height="992"
36
+ id="namedview119"
37
+ showgrid="false"
38
+ showguides="true"
39
+ inkscape:guide-bbox="true"
40
+ inkscape:zoom="0.26229415"
41
+ inkscape:cx="822.946"
42
+ inkscape:cy="63.610685"
43
+ inkscape:window-x="0"
44
+ inkscape:window-y="14"
45
+ inkscape:window-maximized="0"
46
+ inkscape:current-layer="svg2"
47
+ showborder="true"
48
+ fit-margin-top="0"
49
+ fit-margin-left="0"
50
+ fit-margin-right="0"
51
+ fit-margin-bottom="0" /><defs
52
+ id="defs4"><font
53
+ id="FontID0"
54
+ font-variant="normal"
55
+ font-weight="400"
56
+ horiz-origin-x="0"
57
+ horiz-origin-y="0"
58
+ horiz-adv-x="90"
59
+ vert-origin-x="45"
60
+ vert-origin-y="90"
61
+ vert-adv-y="90"
62
+ style="font-variant:normal;font-weight:400"><font-face
63
+ font-family="Droid Sans Mono"
64
+ id="font-face7" /><missing-glyph
65
+ id="missing-glyph9"><path
66
+ d="M0 0z"
67
+ id="path11" /></missing-glyph><glyph
68
+ unicode=" "
69
+ horiz-adv-x="600"
70
+ id="glyph13" /><glyph
71
+ unicode=":"
72
+ horiz-adv-x="600"
73
+ id="glyph15"><path
74
+ d="M299.831 549.838c41.3387,0 62.0033,-22.6678 62.0033,-67.8333 0,-45.3356 -20.6646,-68.0034 -62.0033,-68.0034 -41.3293,0 -61.9939,22.6678 -61.9939,68.0034 0,45.1655 20.6646,67.8333 61.9939,67.8333zm0 -427.834c41.3387,0 62.0033,-22.5072 62.0033,-67.8333 0,-45.5057 -20.6646,-68.3341 -62.0033,-68.3341 -41.3293,0 -61.9939,22.8284 -61.9939,68.3341 0,45.3261 20.6646,67.8333 61.9939,67.8333z"
75
+ id="path17" /></glyph><glyph
76
+ unicode="C"
77
+ horiz-adv-x="600"
78
+ id="glyph19"><path
79
+ d="M548.841 98.1632l0 -79.1712c-47.5084,-19.1621 -105.845,-28.8282 -174.84,-28.8282 -100.488,0 -177.504,32.0029 -230.994,95.8388 -53.3477,63.6657 -79.9932,154.317 -79.9932,271.841 0,112.648 29.14,201.826 87.3065,267.646 58.3366,65.6783 138.018,98.6734 238.846,98.6734 71.6594,0 133.993,-14.0031 187,-42.0092l-38.0124 -76.1664c-50.1446,25.3416 -99.8072,38.0124 -148.988,38.0124 -69.987,0 -125.829,-25.8235 -167.498,-77.3286 -41.669,-51.6753 -62.5035,-121.492 -62.5035,-209.677 0,-93.486 19.5022,-164.664 58.6768,-213.646 39.0045,-49.0107 96.1506,-73.5019 171.325,-73.5019 42.321,0 95.4986,9.496 159.675,28.3179z"
80
+ id="path21" /></glyph><glyph
81
+ unicode="I"
82
+ horiz-adv-x="600"
83
+ id="glyph23"><path
84
+ d="M488.838 0l-379.013 0 0 60.0064 144.001 9.83275 0 574.162 -144.001 9.83275 0 60.0064 379.013 0 0 -60.0064 -143.665 -9.83275 0 -574.162 143.665 -9.83275 0 -60.0064z"
85
+ id="path25" /></glyph><glyph
86
+ unicode="]"
87
+ horiz-adv-x="600"
88
+ id="glyph27"><path
89
+ d="M141.166 -85.0018l168.832 0 0 726.172 -168.832 0 0 72.6616 257.831 0 0 -871.996 -257.831 0 0 73.1624z"
90
+ id="path29" /></glyph><glyph
91
+ unicode="["
92
+ horiz-adv-x="600"
93
+ id="glyph31"><path
94
+ d="M458.997 -158.164l-257.831 0 0 871.996 257.831 0 0 -72.6616 -168.993 0 0 -726.172 168.993 0 0 -73.1624z"
95
+ id="path33" /></glyph><glyph
96
+ unicode="P"
97
+ horiz-adv-x="600"
98
+ id="glyph35"><path
99
+ d="M176.83 277.833l0 -277.833 -90.8334 0 0 713.84 197.169 0c167.334,0 251.01,-69.6797 251.01,-209.004 0,-71.1679 -22.5002,-126.834 -67.6777,-166.997 -45.0004,-40.0043 -110.499,-60.0064 -196.496,-60.0064l-93.172 0zm0 77.1738l83.0026 0c64.3292,0 110.499,11.6576 138.332,35.1676 27.8329,23.3329 41.8291,59.9887 41.8291,109.826 0,90.8334 -54.9926,136.17 -165.155,136.17l-98.0086 0 0 -281.164z"
100
+ id="path37" /></glyph><glyph
101
+ unicode="g"
102
+ horiz-adv-x="600"
103
+ id="glyph39"><path
104
+ d="M549.833 536.17l0 -55.1619 -95.6687 -13.181c21.1747,-27.666 31.6628,-62.3335 31.6628,-104.002 0,-52.4973 -17.3196,-94.1663 -51.9871,-125.319 -34.6675,-31.0108 -82.9979,-46.6863 -144.849,-46.6863 -17.8298,0 -31.8329,1.02047 -41.9808,3.00471 -32.5132,-18.17 -48.8406,-39.8265 -48.8406,-64.998 0,-27.3258 26.3337,-40.9887 78.6609,-40.9887l91.3317 0c56.6642,0 100.006,-12.5007 129.826,-37.5021 30.0187,-25.1715 45.0139,-61.0012 45.0139,-107.489 0,-122.683 -92.012,-184.024 -275.838,-184.024 -71.0074,0 -125.007,13.0109 -161.999,39.1746 -36.8218,26.3337 -55.3319,63.0138 -55.3319,110.182 0,68.9948 39.0045,112.988 117.155,131.81 -31.3226,15.3353 -46.8281,40.3368 -46.8281,75.1743 0,36.51 21.6849,67.8326 64.8279,93.8262 -28.8282,12.0188 -51.6469,32.0029 -68.3145,59.839 -16.4975,27.836 -24.8313,58.1666 -24.8313,90.9916 0,59.3571 17.3196,104.853 51.9871,137.026 34.6675,31.9746 84.0184,47.9902 148.166,47.9902 28.0061,0 52.3272,-3.17478 73.1617,-9.66608l184.676 0zm-259.822 -283.179c72.6515,0 108.991,37.332 108.991,112.166 0,77.8389 -36.6801,116.843 -110.012,116.843 -73.1617,0 -109.813,-39.4864 -109.813,-118.176 0,-73.9838 36.9919,-110.834 110.834,-110.834zm47.8202 -244.146l-91.6719 0c-75.0043,0 -112.336,-32.3431 -112.336,-96.6892 0,-56.6642 44.0218,-84.9821 132.349,-84.9821 128.494,0 192.84,36.3399 192.84,108.821 0,28.6864 -8.19207,48.0186 -24.5195,57.8264 -16.1574,10.0062 -48.5005,15.0235 -96.6608,15.0235z"
105
+ id="path41" /></glyph><glyph
106
+ unicode="m"
107
+ horiz-adv-x="600"
108
+ id="glyph43"><path
109
+ d="M477.011 0l0 345.173c0,47.48 -4.33698,80.6735 -12.8409,99.1553 -8.67396,18.5101 -23.1589,27.836 -43.3415,27.836 -28.3179,0 -48.8406,-13.4928 -61.6532,-40.5068 -12.8409,-26.9857 -19.3322,-72.3114 -19.3322,-135.835l0 -295.822 -78.6893 0 0 345.173c0,84.6703 -20.3243,126.991 -61.0012,126.991 -27.3258,0 -46.8281,-13.0109 -58.4784,-38.8344 -11.8487,-25.8235 -17.6881,-77.6688 -17.6881,-155.508l0 -277.822 -78.9727 0 0 536.17 61.9933 0 13.1527 -72.3397 4.84721 0c21.8266,54.68 54.4815,82.0058 98.1632,82.0058 53.0075,0 87.675,-29.5085 104.002,-88.8372l2.83463 0c24.8313,59.3288 60.491,88.8372 106.979,88.8372 41.669,0 72.0279,-14.9952 90.8498,-45.1556 18.8219,-30.0187 28.3179,-80.3334 28.3179,-150.519l0 -350.162 -79.1428 0z"
110
+ id="path45" /></glyph><glyph
111
+ unicode="i"
112
+ horiz-adv-x="600"
113
+ id="glyph47"><path
114
+ d="M309.173 756.846c34.4974,0 51.6469,-18.5101 51.6469,-55.6721 0,-18.8503 -5.15902,-32.9951 -15.307,-42.1793 -10.3464,-9.32593 -22.5069,-14.0031 -36.3399,-14.0031 -34.8376,0 -52.3272,18.6802 -52.3272,56.1823 0,37.162 17.4897,55.6721 52.3272,55.6721zm-45.0139 -291.003l-131.328 10.148 0 60.1791 220.166 0 0 -466.325 171.835 -9.83616 0 -60.0091 -428.652 0 0 60.0091 167.98 9.83616 0 395.998z"
115
+ id="path49" /></glyph><glyph
116
+ unicode="c"
117
+ horiz-adv-x="600"
118
+ id="glyph51"><path
119
+ d="M518 517.178l-30.1604 -77.1869c-48.8406,18.5101 -92.4939,27.836 -130.846,27.836 -120.84,0 -181.161,-67.3224 -181.161,-201.655 0,-132.179 58.6768,-198.339 176.172,-198.339 51.165,0 103.322,10.1763 156.84,30.3305l0 -78.1507c-43.6816,-19.8424 -97.171,-29.8486 -160.667,-29.8486 -83.6782,0 -148.676,23.6691 -194.852,71.1775 -46.1477,47.3383 -69.335,115.313 -69.335,203.838 0,91.4734 23.6691,161.149 70.8373,208.997 47.1682,47.8202 113.498,71.6594 199.161,71.6594 58.0248,0 112.676,-9.496 164.012,-28.6581z"
120
+ id="path53" /></glyph><glyph
121
+ unicode="a"
122
+ horiz-adv-x="600"
123
+ id="glyph55"><path
124
+ d="M436.986 0l-17.9999 74.1539 -3.99683 0c-25.0014,-31.4927 -50.6548,-53.3193 -77.1586,-65.65 -26.3337,-12.1606 -60.3209,-18.34 -101.99,-18.34 -53.0075,0 -94.6766,14.0031 -124.667,42.0092 -30.1604,28.0061 -45.184,67.3224 -45.184,117.665 0,108.169 82.9979,164.834 249.022,169.993l98.9852 3.34486 0 33.8171c0,76.8468 -39.6564,115.171 -118.998,115.171 -47.9902,0 -101.338,-13.3228 -160.156,-39.9966l-30.8408 66.8405c63.8358,31.3226 126.169,46.8281 187,46.8281 73.8421,0 127.331,-14.1731 160.497,-42.3493 32.9951,-28.3179 49.4926,-73.8137 49.4926,-136.317l0 -367.169 -64.0059 0zm-23.8109 262.175l-79.1712 -3.34486c-63.8358,-2.66455 -108.991,-12.6708 -135.835,-29.9904 -26.6738,-17.518 -39.9966,-44.1635 -39.9966,-79.8515 0,-57.9965 32.6549,-86.9947 97.6529,-86.9947 47.8485,0 86.0026,13.3511 114.519,39.8265 28.488,26.5038 42.8312,63.8358 42.8312,112.024l0 48.3304z"
125
+ id="path57" /></glyph><glyph
126
+ unicode="e"
127
+ horiz-adv-x="600"
128
+ id="glyph59"><path
129
+ d="M535.178 251.006l-377.998 0c2.66455,-122.172 58.6484,-183.174 167.98,-183.174 63.4957,0 123.675,12.3306 180.679,37.162l0 -78.1507c-53.9997,-24.3495 -113.328,-36.6801 -177.674,-36.6801 -79.8231,0 -143.659,24.3495 -191.507,72.9917 -47.8202,48.6706 -71.6594,115.681 -71.6594,201.003 0,86.6829 21.9967,155.168 66.1602,205.851 44.0218,50.6548 103.01,75.8263 177.023,75.8263 68.9948,0 123.987,-21.6566 165.145,-65.3382 41.1871,-43.6533 61.8516,-101.82 61.8516,-174.33l0 -55.1619zm-376.013 72.1696l279.834 0c0,99.3254 -44.3336,148.988 -132.831,148.988 -89.4892,0 -138.5,-49.6627 -147.004,-148.988z"
130
+ id="path61" /></glyph><glyph
131
+ unicode="n"
132
+ horiz-adv-x="600"
133
+ id="glyph63"><path
134
+ d="M433.173 0l0 345.174c0,84.668 -38.835,126.993 -116.345,126.993 -99.8335,0 -149.83,-64.8253 -149.83,-194.334l0 -277.833 -88.8314 0 0 536.16 71.664 0 13.3407 -72.3195 4.83665 0c33.4845,54.6559 88.1582,81.9928 163.986,81.9928 126.674,0 190.011,-65.1619 190.011,-195.663l0 -350.17 -88.8314 0z"
135
+ id="path65" /></glyph><glyph
136
+ unicode="o"
137
+ horiz-adv-x="600"
138
+ id="glyph67"><path
139
+ d="M297.835 -9.83275c-70.3352,0 -128.162,25.3348 -173.499,76.0045 -45.4964,50.6697 -68.1738,118.17 -68.1738,202.82 0,85.6778 22.0041,153.178 66.1718,202.679 44.1677,49.5004 103.501,74.162 178.495,74.162 70.8313,0 129.013,-25.1577 174.332,-75.6679 45.1775,-50.3331 67.8371,-117.497 67.8371,-201.173 0,-86.1562 -22.323,-154.33 -67.0045,-203.99 -44.4866,-49.837 -103.997,-74.8352 -178.159,-74.8352zm2.00198 73.8254c100.826,0 151.336,68.3332 151.336,205 0,135.515 -50.8469,203.175 -152.346,203.175 -100.666,0 -150.822,-67.66 -150.822,-203.175 0,-136.666 50.4925,-205 151.832,-205z"
140
+ id="path69" /></glyph><glyph
141
+ unicode="h"
142
+ horiz-adv-x="600"
143
+ id="glyph71"><path
144
+ d="M433.173 0l0 345.174c0,84.668 -38.835,126.993 -116.345,126.993 -99.8335,0 -149.83,-64.8253 -149.83,-194.334l0 -277.833 -88.8314 0 0 759.833 88.8314 0 0 -225.657 -3.8268 -70.3352 4.83665 0c33.4845,54.6559 88.1582,81.9928 163.986,81.9928 126.674,0 190.011,-65.1619 190.011,-195.663l0 -350.17 -88.8314 0z"
145
+ id="path73" /></glyph><glyph
146
+ unicode="u"
147
+ horiz-adv-x="600"
148
+ id="glyph75"><path
149
+ d="M450.167 0l-13.181 71.8295 -4.81887 0c-34.1573,-54.5099 -88.4971,-81.6656 -163.161,-81.6656 -127.161,0 -190.827,65.3382 -190.827,195.844l0 350.162 88.8089 0 0 -345.173c0,-84.6703 38.3525,-126.991 115.171,-126.991 52.4973,0 90.6797,14.9952 114.831,45.1556 24.0093,30.0187 36.1699,79.6814 36.1699,148.676l0 278.332 88.8372 0 0 -536.17 -71.8295 0z"
150
+ id="path77" /></glyph><glyph
151
+ unicode="p"
152
+ horiz-adv-x="600"
153
+ id="glyph79"><path
154
+ d="M165.996 67.8326l-5.83933 0c3.85509,-42.0092 5.83933,-68.3429 5.83933,-79.0011l0 -229.01 -88.8372 0 0 776.348 71.8295 0 13.181 -72.3397 3.82675 0c35.8297,54.68 88.1569,82.0058 157.18,82.0058 65.4799,0 116.815,-24.3495 154.147,-72.9917 37.1903,-48.6706 55.8422,-116.503 55.8422,-203.838 0,-87.8451 -18.6519,-156.33 -56.154,-205.34 -37.332,-49.0107 -88.6672,-73.5019 -153.835,-73.5019 -67.3508,0 -119.678,25.9935 -157.18,77.6688zm0 221.158l0 -19.9841c0,-73.8421 11.3385,-126.509 34.0155,-157.832 22.4786,-31.5211 58.6484,-47.1682 108.169,-47.1682 88.4971,0 132.831,68.6547 132.831,205.992 0,134.843 -44.6737,202.166 -133.851,202.166 -49.4926,0 -84.9821,-14.3432 -106.667,-43.0013 -21.6566,-28.6581 -33.1651,-75.3161 -34.4974,-140.172z"
155
+ id="path81" /></glyph><glyph
156
+ unicode="v"
157
+ horiz-adv-x="600"
158
+ id="glyph83"><path
159
+ d="M243.154 0l-203.158 536.17 91.8419 0 117.155 -318.329c27.666,-75.3444 43.9934,-128.182 48.8406,-158.682l3.00471 0c2.15432,14.1731 18.6519,67.1807 49.3225,158.682l116.673 318.329 92.3238 0 -203.158 -536.17 -112.847 0z"
160
+ id="path85" /></glyph><glyph
161
+ unicode="r"
162
+ horiz-adv-x="600"
163
+ id="glyph87"><path
164
+ d="M517.178 524.009l-24.0093 -81.1837c-39.9966,14.6834 -76.5066,21.9967 -109.332,21.9967 -53.1776,0 -93.9963,-14.9952 -122.824,-45.1556 -28.8565,-30.1604 -43.1714,-73.672 -43.1714,-130.676l0 -288.99 -89.0073 0 0 536.17 72.3397 0 10.6582 -98.1632 3.99683 0c24.6613,38.6643 51.3351,66.3303 79.5113,82.9979 28.3179,16.6676 63.1555,24.8313 104.484,24.8313 38.5226,0 77.4987,-7.34169 117.354,-21.8266z"
165
+ id="path89" /></glyph><glyph
166
+ unicode="t"
167
+ horiz-adv-x="600"
168
+ id="glyph91"><path
169
+ d="M497.998 73.1699l0 -67.3411c-42.3251,-10.3288 -83.3392,-15.6615 -122.989,-15.6615 -117.834,0 -176.848,56.0024 -176.848,168.007l0 310.999 -130.324 0 0 45.9925 130.324 23.8289 37.6657 140.174 51.3429 0 0 -143.009 213.823 0 0 -66.9867 -213.823 0 0 -310.999c0,-63.5143 31.1636,-95.174 93.6681,-95.174 30.3309,0 69.3253,3.33073 117.16,10.1694z"
170
+ id="path93" /></glyph><glyph
171
+ unicode="y"
172
+ horiz-adv-x="600"
173
+ id="glyph95"><path
174
+ d="M40.0043 536.16l91.8255 0 128.003 -319.325c26.6636,-66.8273 41.1736,-114.007 43.335,-141.663l2.99412 0c7.51187,36.4964 22.1636,83.9948 44.0082,142.655l116.664 318.333 92.3393 0 -232 -605.999c-21.8447,-56.6579 -47.1795,-99.1602 -76.1817,-127.666 -28.9845,-28.4884 -68.9887,-42.6618 -120.154,-42.6618 -28.0101,0 -55.3292,2.67522 -82.0105,8.16739l0 70.8313c20.1793,-3.8268 42.3429,-5.82879 66.3312,-5.82879 31.3408,0 55.6835,6.66147 73.0104,20.0021 17.5041,13.3229 33.0062,36.3369 46.6657,68.8293l28.329 73.3293 -223.159 540.996z"
175
+ id="path97" /></glyph></font><style
176
+ type="text/css"
177
+ id="style99">
178
+
179
+ @font-face { font-family:&quot;Droid Sans Mono&quot;;src:url(&quot;#FontID0&quot;) format(svg)}
180
+ .fil2 {fill:black}
181
+ .fil0 {fill:#2B2828}
182
+ .fil1 {fill:#3465A4}
183
+ .fnt1 {font-weight:normal;font-size:41.6669;font-family:'Droid Sans Mono'}
184
+ .fnt0 {font-weight:normal;font-size:66.6661;font-family:'Droid Sans Mono'}
185
+ .fnt3 {font-weight:normal;font-size:125;font-family:'Droid Sans Mono'}
186
+ .fnt2 {font-weight:normal;font-size:150;font-family:'Droid Sans Mono'}
187
+
188
+ </style><linearGradient
189
+ y2="141.7533"
190
+ x2="132.27631"
191
+ y1="215.5488"
192
+ x1="174.0737"
193
+ gradientUnits="userSpaceOnUse"
194
+ id="linearGradient3448"
195
+ xlink:href="#XMLID_17_-9"
196
+ inkscape:collect="always" /><linearGradient
197
+ id="XMLID_17_-9"
198
+ gradientUnits="userSpaceOnUse"
199
+ x1="174.0737"
200
+ y1="215.5488"
201
+ x2="132.27631"
202
+ y2="141.7533"><stop
203
+ offset="0"
204
+ style="stop-color:#FB7655"
205
+ id="stop3272-4" /><stop
206
+ offset="0"
207
+ style="stop-color:#FB7655"
208
+ id="stop3274-5" /><stop
209
+ offset="0.41"
210
+ style="stop-color:#E42B1E"
211
+ id="stop3276-1" /><stop
212
+ offset="0.99"
213
+ style="stop-color:#990000"
214
+ id="stop3278-0" /><stop
215
+ offset="1"
216
+ style="stop-color:#990000"
217
+ id="stop3280-3" /></linearGradient><linearGradient
218
+ id="XMLID_18_-7"
219
+ gradientUnits="userSpaceOnUse"
220
+ x1="194.895"
221
+ y1="153.5576"
222
+ x2="141.0276"
223
+ y2="117.4093"><stop
224
+ offset="0"
225
+ style="stop-color:#871101"
226
+ id="stop3285-8" /><stop
227
+ offset="0"
228
+ style="stop-color:#871101"
229
+ id="stop3287-8" /><stop
230
+ offset="0.99"
231
+ style="stop-color:#911209"
232
+ id="stop3289-6" /><stop
233
+ offset="1"
234
+ style="stop-color:#911209"
235
+ id="stop3291-0" /></linearGradient><linearGradient
236
+ id="XMLID_19_-4"
237
+ gradientUnits="userSpaceOnUse"
238
+ x1="151.79539"
239
+ y1="217.7852"
240
+ x2="97.929703"
241
+ y2="181.638"><stop
242
+ offset="0"
243
+ style="stop-color:#871101"
244
+ id="stop3296-6" /><stop
245
+ offset="0"
246
+ style="stop-color:#871101"
247
+ id="stop3298-7" /><stop
248
+ offset="0.99"
249
+ style="stop-color:#911209"
250
+ id="stop3300-6" /><stop
251
+ offset="1"
252
+ style="stop-color:#911209"
253
+ id="stop3302-0" /></linearGradient><linearGradient
254
+ id="XMLID_20_-9"
255
+ gradientUnits="userSpaceOnUse"
256
+ x1="38.696301"
257
+ y1="127.3906"
258
+ x2="47.046902"
259
+ y2="181.66141"><stop
260
+ offset="0"
261
+ style="stop-color:#FFFFFF"
262
+ id="stop3307-7" /><stop
263
+ offset="0"
264
+ style="stop-color:#FFFFFF"
265
+ id="stop3309-5" /><stop
266
+ offset="0.23"
267
+ style="stop-color:#E57252"
268
+ id="stop3311-9" /><stop
269
+ offset="0.46"
270
+ style="stop-color:#DE3B20"
271
+ id="stop3313-7" /><stop
272
+ offset="0.99"
273
+ style="stop-color:#A60003"
274
+ id="stop3315-8" /><stop
275
+ offset="1"
276
+ style="stop-color:#A60003"
277
+ id="stop3317-5" /></linearGradient><linearGradient
278
+ id="XMLID_21_-3"
279
+ gradientUnits="userSpaceOnUse"
280
+ x1="96.132797"
281
+ y1="76.715302"
282
+ x2="99.209602"
283
+ y2="132.1021"><stop
284
+ offset="0"
285
+ style="stop-color:#FFFFFF"
286
+ id="stop3322-3" /><stop
287
+ offset="0"
288
+ style="stop-color:#FFFFFF"
289
+ id="stop3324-8" /><stop
290
+ offset="0.23"
291
+ style="stop-color:#E4714E"
292
+ id="stop3326-3" /><stop
293
+ offset="0.56"
294
+ style="stop-color:#BE1A0D"
295
+ id="stop3328-7" /><stop
296
+ offset="0.99"
297
+ style="stop-color:#A80D00"
298
+ id="stop3330-9" /><stop
299
+ offset="1"
300
+ style="stop-color:#A80D00"
301
+ id="stop3332-3" /></linearGradient><linearGradient
302
+ id="XMLID_22_-7"
303
+ gradientUnits="userSpaceOnUse"
304
+ x1="147.103"
305
+ y1="25.521"
306
+ x2="156.3141"
307
+ y2="65.216202"><stop
308
+ offset="0"
309
+ style="stop-color:#FFFFFF"
310
+ id="stop3337-8" /><stop
311
+ offset="0"
312
+ style="stop-color:#FFFFFF"
313
+ id="stop3339-7" /><stop
314
+ offset="0.18"
315
+ style="stop-color:#E46342"
316
+ id="stop3341-4" /><stop
317
+ offset="0.4"
318
+ style="stop-color:#C82410"
319
+ id="stop3343-1" /><stop
320
+ offset="0.99"
321
+ style="stop-color:#A80D00"
322
+ id="stop3345-9" /><stop
323
+ offset="1"
324
+ style="stop-color:#A80D00"
325
+ id="stop3347-0" /></linearGradient><linearGradient
326
+ id="XMLID_23_-9"
327
+ gradientUnits="userSpaceOnUse"
328
+ x1="118.9761"
329
+ y1="11.5415"
330
+ x2="158.66859"
331
+ y2="-8.3048"><stop
332
+ offset="0"
333
+ style="stop-color:#FFFFFF"
334
+ id="stop3352-8" /><stop
335
+ offset="0"
336
+ style="stop-color:#FFFFFF"
337
+ id="stop3354-8" /><stop
338
+ offset="0.54"
339
+ style="stop-color:#C81F11"
340
+ id="stop3356-5" /><stop
341
+ offset="0.99"
342
+ style="stop-color:#BF0905"
343
+ id="stop3358-8" /><stop
344
+ offset="1"
345
+ style="stop-color:#BF0905"
346
+ id="stop3360-4" /></linearGradient><linearGradient
347
+ id="XMLID_24_-3"
348
+ gradientUnits="userSpaceOnUse"
349
+ x1="3.9033"
350
+ y1="113.5547"
351
+ x2="7.1701999"
352
+ y2="146.2628"><stop
353
+ offset="0"
354
+ style="stop-color:#FFFFFF"
355
+ id="stop3365-7" /><stop
356
+ offset="0"
357
+ style="stop-color:#FFFFFF"
358
+ id="stop3367-1" /><stop
359
+ offset="0.31"
360
+ style="stop-color:#DE4024"
361
+ id="stop3369-3" /><stop
362
+ offset="0.99"
363
+ style="stop-color:#BF190B"
364
+ id="stop3371-8" /><stop
365
+ offset="1"
366
+ style="stop-color:#BF190B"
367
+ id="stop3373-0" /></linearGradient><linearGradient
368
+ id="XMLID_25_-9"
369
+ gradientUnits="userSpaceOnUse"
370
+ x1="-18.5557"
371
+ y1="155.10451"
372
+ x2="135.0152"
373
+ y2="-2.8092999"><stop
374
+ offset="0"
375
+ style="stop-color:#BD0012"
376
+ id="stop3380-7" /><stop
377
+ offset="0"
378
+ style="stop-color:#BD0012"
379
+ id="stop3382-9" /><stop
380
+ offset="0.07"
381
+ style="stop-color:#FFFFFF"
382
+ id="stop3384-9" /><stop
383
+ offset="0.17"
384
+ style="stop-color:#FFFFFF"
385
+ id="stop3386-3" /><stop
386
+ offset="0.27"
387
+ style="stop-color:#C82F1C"
388
+ id="stop3388-2" /><stop
389
+ offset="0.33"
390
+ style="stop-color:#820C01"
391
+ id="stop3390-4" /><stop
392
+ offset="0.46"
393
+ style="stop-color:#A31601"
394
+ id="stop3392-3" /><stop
395
+ offset="0.72"
396
+ style="stop-color:#B31301"
397
+ id="stop3394-7" /><stop
398
+ offset="0.99"
399
+ style="stop-color:#E82609"
400
+ id="stop3396-1" /><stop
401
+ offset="1"
402
+ style="stop-color:#E82609"
403
+ id="stop3398-2" /></linearGradient><linearGradient
404
+ id="XMLID_26_-2"
405
+ gradientUnits="userSpaceOnUse"
406
+ x1="99.074699"
407
+ y1="171.0332"
408
+ x2="52.817699"
409
+ y2="159.61659"><stop
410
+ offset="0"
411
+ style="stop-color:#8C0C01"
412
+ id="stop3403-0" /><stop
413
+ offset="0"
414
+ style="stop-color:#8C0C01"
415
+ id="stop3405-2" /><stop
416
+ offset="0.54"
417
+ style="stop-color:#990C00"
418
+ id="stop3407-1" /><stop
419
+ offset="0.99"
420
+ style="stop-color:#A80D0E"
421
+ id="stop3409-7" /><stop
422
+ offset="1"
423
+ style="stop-color:#A80D0E"
424
+ id="stop3411-5" /></linearGradient><linearGradient
425
+ id="XMLID_27_-1"
426
+ gradientUnits="userSpaceOnUse"
427
+ x1="178.52589"
428
+ y1="115.5146"
429
+ x2="137.43269"
430
+ y2="78.683998"><stop
431
+ offset="0"
432
+ style="stop-color:#7E110B"
433
+ id="stop3416-7" /><stop
434
+ offset="0"
435
+ style="stop-color:#7E110B"
436
+ id="stop3418-4" /><stop
437
+ offset="0.99"
438
+ style="stop-color:#9E0C00"
439
+ id="stop3420-1" /><stop
440
+ offset="1"
441
+ style="stop-color:#9E0C00"
442
+ id="stop3422-7" /></linearGradient><linearGradient
443
+ id="XMLID_28_-1"
444
+ gradientUnits="userSpaceOnUse"
445
+ x1="193.6235"
446
+ y1="47.937"
447
+ x2="173.15421"
448
+ y2="26.053801"><stop
449
+ offset="0"
450
+ style="stop-color:#79130D"
451
+ id="stop3427-1" /><stop
452
+ offset="0"
453
+ style="stop-color:#79130D"
454
+ id="stop3429-1" /><stop
455
+ offset="0.99"
456
+ style="stop-color:#9E120B"
457
+ id="stop3431-7" /><stop
458
+ offset="1"
459
+ style="stop-color:#9E120B"
460
+ id="stop3433-0" /></linearGradient><radialGradient
461
+ id="XMLID_29_-4"
462
+ cx="143.8315"
463
+ cy="79.388199"
464
+ r="50.357601"
465
+ gradientUnits="userSpaceOnUse"><stop
466
+ offset="0"
467
+ style="stop-color:#A80D00"
468
+ id="stop3440-0" /><stop
469
+ offset="0"
470
+ style="stop-color:#A80D00"
471
+ id="stop3442-8" /><stop
472
+ offset="0.99"
473
+ style="stop-color:#7E0E08"
474
+ id="stop3444-5" /><stop
475
+ offset="1"
476
+ style="stop-color:#7E0E08"
477
+ id="stop3446-1" /></radialGradient><radialGradient
478
+ id="XMLID_30_-6"
479
+ cx="74.0923"
480
+ cy="145.75101"
481
+ r="66.943703"
482
+ gradientUnits="userSpaceOnUse"><stop
483
+ offset="0"
484
+ style="stop-color:#A30C00"
485
+ id="stop3451-6" /><stop
486
+ offset="0"
487
+ style="stop-color:#A30C00"
488
+ id="stop3453-2" /><stop
489
+ offset="0.99"
490
+ style="stop-color:#800E08"
491
+ id="stop3455-1" /><stop
492
+ offset="1"
493
+ style="stop-color:#800E08"
494
+ id="stop3457-9" /></radialGradient><linearGradient
495
+ id="XMLID_31_-6"
496
+ gradientUnits="userSpaceOnUse"
497
+ x1="26.669901"
498
+ y1="197.33591"
499
+ x2="9.9886999"
500
+ y2="140.742"><stop
501
+ offset="0"
502
+ style="stop-color:#8B2114"
503
+ id="stop3462-4" /><stop
504
+ offset="0"
505
+ style="stop-color:#8B2114"
506
+ id="stop3464-8" /><stop
507
+ offset="0.43"
508
+ style="stop-color:#9E100A"
509
+ id="stop3466-0" /><stop
510
+ offset="0.99"
511
+ style="stop-color:#B3100C"
512
+ id="stop3468-8" /><stop
513
+ offset="1"
514
+ style="stop-color:#B3100C"
515
+ id="stop3470-1" /></linearGradient><linearGradient
516
+ id="XMLID_32_-0"
517
+ gradientUnits="userSpaceOnUse"
518
+ x1="154.6411"
519
+ y1="9.7979002"
520
+ x2="192.039"
521
+ y2="26.305901"><stop
522
+ offset="0"
523
+ style="stop-color:#B31000"
524
+ id="stop3475-2" /><stop
525
+ offset="0"
526
+ style="stop-color:#B31000"
527
+ id="stop3477-2" /><stop
528
+ offset="0.44"
529
+ style="stop-color:#910F08"
530
+ id="stop3479-9" /><stop
531
+ offset="0.99"
532
+ style="stop-color:#791C12"
533
+ id="stop3481-7" /><stop
534
+ offset="1"
535
+ style="stop-color:#791C12"
536
+ id="stop3483-5" /></linearGradient><linearGradient
537
+ y2="141.7533"
538
+ x2="132.27631"
539
+ y1="215.5488"
540
+ x1="174.0737"
541
+ gradientUnits="userSpaceOnUse"
542
+ id="linearGradient6236"
543
+ xlink:href="#XMLID_17_-9"
544
+ inkscape:collect="always" /><linearGradient
545
+ inkscape:collect="always"
546
+ xlink:href="#XMLID_25_-9"
547
+ id="linearGradient6479"
548
+ gradientUnits="userSpaceOnUse"
549
+ x1="-18.5557"
550
+ y1="155.10451"
551
+ x2="135.0152"
552
+ y2="-2.8092999"
553
+ gradientTransform="matrix(0.72787016,0,0,0.72787016,0,-8e-4)" /><linearGradient
554
+ inkscape:collect="always"
555
+ xlink:href="#XMLID_26_-2"
556
+ id="linearGradient6481"
557
+ gradientUnits="userSpaceOnUse"
558
+ x1="99.074699"
559
+ y1="171.0332"
560
+ x2="52.817699"
561
+ y2="159.61659"
562
+ gradientTransform="matrix(0.72787016,0,0,0.72787016,0,-8e-4)" /><linearGradient
563
+ inkscape:collect="always"
564
+ xlink:href="#XMLID_27_-1"
565
+ id="linearGradient6483"
566
+ gradientUnits="userSpaceOnUse"
567
+ x1="178.52589"
568
+ y1="115.5146"
569
+ x2="137.43269"
570
+ y2="78.683998"
571
+ gradientTransform="matrix(0.72787016,0,0,0.72787016,0,-8e-4)" /><linearGradient
572
+ inkscape:collect="always"
573
+ xlink:href="#XMLID_28_-1"
574
+ id="linearGradient6485"
575
+ gradientUnits="userSpaceOnUse"
576
+ x1="193.6235"
577
+ y1="47.937"
578
+ x2="173.15421"
579
+ y2="26.053801"
580
+ gradientTransform="matrix(0.72787016,0,0,0.72787016,0,-8e-4)" /><radialGradient
581
+ inkscape:collect="always"
582
+ xlink:href="#XMLID_29_-4"
583
+ id="radialGradient6487"
584
+ gradientUnits="userSpaceOnUse"
585
+ cx="143.8315"
586
+ cy="79.388199"
587
+ r="50.357601"
588
+ gradientTransform="matrix(0.72787016,0,0,0.72787016,0,-8e-4)" /><radialGradient
589
+ inkscape:collect="always"
590
+ xlink:href="#XMLID_30_-6"
591
+ id="radialGradient6489"
592
+ gradientUnits="userSpaceOnUse"
593
+ cx="74.0923"
594
+ cy="145.75101"
595
+ r="66.943703"
596
+ gradientTransform="matrix(0.72787016,0,0,0.72787016,0,-8e-4)" /><linearGradient
597
+ inkscape:collect="always"
598
+ xlink:href="#XMLID_31_-6"
599
+ id="linearGradient6491"
600
+ gradientUnits="userSpaceOnUse"
601
+ x1="26.669901"
602
+ y1="197.33591"
603
+ x2="9.9886999"
604
+ y2="140.742"
605
+ gradientTransform="matrix(0.72787016,0,0,0.72787016,0,-8e-4)" /><linearGradient
606
+ inkscape:collect="always"
607
+ xlink:href="#XMLID_32_-0"
608
+ id="linearGradient6493"
609
+ gradientUnits="userSpaceOnUse"
610
+ x1="154.6411"
611
+ y1="9.7979002"
612
+ x2="192.039"
613
+ y2="26.305901"
614
+ gradientTransform="matrix(0.72787016,0,0,0.72787016,0,-8e-4)" /><linearGradient
615
+ inkscape:collect="always"
616
+ xlink:href="#XMLID_18_-7"
617
+ id="linearGradient6495"
618
+ gradientUnits="userSpaceOnUse"
619
+ x1="194.895"
620
+ y1="153.5576"
621
+ x2="141.0276"
622
+ y2="117.4093" /><linearGradient
623
+ inkscape:collect="always"
624
+ xlink:href="#XMLID_19_-4"
625
+ id="linearGradient6497"
626
+ gradientUnits="userSpaceOnUse"
627
+ x1="151.79539"
628
+ y1="217.7852"
629
+ x2="97.929703"
630
+ y2="181.638" /><linearGradient
631
+ inkscape:collect="always"
632
+ xlink:href="#XMLID_20_-9"
633
+ id="linearGradient6499"
634
+ gradientUnits="userSpaceOnUse"
635
+ x1="38.696301"
636
+ y1="127.3906"
637
+ x2="47.046902"
638
+ y2="181.66141" /><linearGradient
639
+ inkscape:collect="always"
640
+ xlink:href="#XMLID_21_-3"
641
+ id="linearGradient6501"
642
+ gradientUnits="userSpaceOnUse"
643
+ x1="96.132797"
644
+ y1="76.715302"
645
+ x2="99.209602"
646
+ y2="132.1021" /><linearGradient
647
+ inkscape:collect="always"
648
+ xlink:href="#XMLID_22_-7"
649
+ id="linearGradient6503"
650
+ gradientUnits="userSpaceOnUse"
651
+ x1="147.103"
652
+ y1="25.521"
653
+ x2="156.3141"
654
+ y2="65.216202" /><linearGradient
655
+ inkscape:collect="always"
656
+ xlink:href="#XMLID_23_-9"
657
+ id="linearGradient6505"
658
+ gradientUnits="userSpaceOnUse"
659
+ x1="118.9761"
660
+ y1="11.5415"
661
+ x2="158.66859"
662
+ y2="-8.3048" /><linearGradient
663
+ inkscape:collect="always"
664
+ xlink:href="#XMLID_24_-3"
665
+ id="linearGradient6507"
666
+ gradientUnits="userSpaceOnUse"
667
+ x1="3.9033"
668
+ y1="113.5547"
669
+ x2="7.1701999"
670
+ y2="146.2628" /></defs><text
671
+ style="font-size:150px;font-weight:normal;fill:#000000;font-family:Droid Sans Mono"
672
+ id="text109"
673
+ class="fil2 fnt2"
674
+ y="116.84798"
675
+ x="179.64279">IRuby: <tspan
676
+ style="fill:#800000"
677
+ id="tspan6534">Notebook</tspan></text>
678
+ <polygon
679
+ style="fill:url(#linearGradient6236);fill-rule:evenodd"
680
+ clip-rule="evenodd"
681
+ points="198.13,39.95 153.5,130.41 40.38,197.58 186.849,187.641 "
682
+ id="polygon3282"
683
+ transform="matrix(0.72787016,0,0,0.72787016,0,-8e-4)" /><polygon
684
+ style="fill:url(#linearGradient6495);fill-rule:evenodd"
685
+ clip-rule="evenodd"
686
+ points="174.5,100.65 140.209,145.93 187.089,187.54 "
687
+ id="polygon3293"
688
+ transform="matrix(0.72787016,0,0,0.72787016,0,-8e-4)" /><polygon
689
+ style="fill:url(#linearGradient6497);fill-rule:evenodd"
690
+ clip-rule="evenodd"
691
+ points="95.03,180.3 40.87,197.391 187.259,187.54 "
692
+ id="polygon3304"
693
+ transform="matrix(0.72787016,0,0,0.72787016,0,-8e-4)" /><polygon
694
+ style="fill:url(#linearGradient6499);fill-rule:evenodd"
695
+ clip-rule="evenodd"
696
+ points="64.04,121.93 13.34,132.771 41,197.41 "
697
+ id="polygon3319"
698
+ transform="matrix(0.72787016,0,0,0.72787016,0,-8e-4)" /><polygon
699
+ style="fill:url(#linearGradient6501);fill-rule:evenodd"
700
+ clip-rule="evenodd"
701
+ points="119,63.14 58.33,120.01 140.2,146.18 "
702
+ id="polygon3334"
703
+ transform="matrix(0.72787016,0,0,0.72787016,0,-8e-4)" /><polygon
704
+ style="fill:url(#linearGradient6503);fill-rule:evenodd"
705
+ clip-rule="evenodd"
706
+ points="135.97,17.47 120,69.1 193.32,64.31 "
707
+ id="polygon3349"
708
+ transform="matrix(0.72787016,0,0,0.72787016,0,-8e-4)" /><polygon
709
+ style="fill:url(#linearGradient6505);fill-rule:evenodd"
710
+ clip-rule="evenodd"
711
+ points="132.77,19.41 111.49,0.52 166.5,0.77 "
712
+ id="polygon3362"
713
+ transform="matrix(0.72787016,0,0,0.72787016,0,-8e-4)" /><polygon
714
+ style="fill:url(#linearGradient6507);fill-rule:evenodd"
715
+ clip-rule="evenodd"
716
+ points="14.13,132.32 2.7,101.62 0,158.09 "
717
+ id="polygon3375"
718
+ transform="matrix(0.72787016,0,0,0.72787016,0,-8e-4)" /><path
719
+ style="fill:#ffffff;fill-rule:evenodd"
720
+ inkscape:connector-curvature="0"
721
+ clip-rule="evenodd"
722
+ d="M 1.41207,73.259327 9.78257,97.002459 46.15425,88.842299 87.67923,50.250629 99.39795,13.02808 80.94572,-8e-4 49.57451,11.739741 c -9.88375,9.193 -29.06313,27.382481 -29.7546,27.724581 -0.6842,0.34938 -12.66495,22.993412 -18.40784,33.795005 z"
723
+ id="path3377" /><path
724
+ style="fill:url(#linearGradient6479);fill-rule:evenodd"
725
+ inkscape:connector-curvature="0"
726
+ clip-rule="evenodd"
727
+ d="M 30.80346,30.606145 C 52.22469,9.366884 79.84008,-3.181593 90.43786,7.510822 101.02911,18.203238 89.79734,44.188202 68.37612,65.420173 46.95491,86.652139 19.68161,99.892099 9.0911,89.199679 -1.50669,78.514549 9.38224,51.838115 30.80346,30.606145 z"
728
+ id="path3400" /><path
729
+ style="fill:url(#linearGradient6481);fill-rule:evenodd"
730
+ inkscape:connector-curvature="0"
731
+ clip-rule="evenodd"
732
+ d="m 29.84268,143.66622 16.6391,-55.114331 55.25991,17.752751 c -19.98003,18.73537 -42.20191,34.57383 -71.89901,37.36158 z"
733
+ id="path3413" /><path
734
+ style="fill:url(#linearGradient6483);fill-rule:evenodd"
735
+ inkscape:connector-curvature="0"
736
+ clip-rule="evenodd"
737
+ d="m 87.75203,50.142169 14.18618,56.191581 c 16.69007,-17.548951 31.66963,-36.415343 39.00584,-59.750855 l -53.19202,3.559274 z"
738
+ id="path3424" /><path
739
+ style="fill:url(#linearGradient6485);fill-rule:evenodd"
740
+ inkscape:connector-curvature="0"
741
+ clip-rule="evenodd"
742
+ d="M 140.7992,46.866756 C 146.47659,29.732691 147.78676,5.152522 121.01496,0.588769 L 99.04784,12.722372 140.7992,46.866756 z"
743
+ id="path3435" /><path
744
+ style="fill:#9e1209;fill-rule:evenodd"
745
+ inkscape:connector-curvature="0"
746
+ clip-rule="evenodd"
747
+ d="m 0,114.82071 c 0.7861,28.27849 21.1883,28.69992 29.87907,28.94813 L 9.80442,96.885989 0,114.82071 z"
748
+ id="path3437" /><path
749
+ style="fill:url(#radialGradient6487);fill-rule:evenodd"
750
+ inkscape:connector-curvature="0"
751
+ clip-rule="evenodd"
752
+ d="m 87.83136,50.229523 c 12.82508,7.882825 38.67248,23.714005 39.19654,24.005157 0.81449,0.458556 11.14369,-17.417938 13.48744,-27.520772 l -52.68398,3.515615 z"
753
+ id="path3448" /><path
754
+ style="fill:url(#radialGradient6489);fill-rule:evenodd"
755
+ inkscape:connector-curvature="0"
756
+ clip-rule="evenodd"
757
+ d="m 46.45995,88.551889 22.24371,42.915221 c 13.15262,-7.13313 23.45198,-15.82391 32.88517,-25.13336 L 46.45995,88.551889 z"
758
+ id="path3459" /><path
759
+ style="fill:url(#linearGradient6491);fill-rule:evenodd"
760
+ inkscape:connector-curvature="0"
761
+ clip-rule="evenodd"
762
+ d="M 9.71706,96.944229 6.56538,134.47322 c 5.9467,8.12302 14.12797,8.82906 22.70955,8.19581 C 23.06621,127.21634 10.6633,96.318259 9.71706,96.944229 z"
763
+ id="path3472" /><path
764
+ style="fill:url(#linearGradient6493);fill-rule:evenodd"
765
+ inkscape:connector-curvature="0"
766
+ clip-rule="evenodd"
767
+ d="m 98.91756,12.816992 44.18899,6.20146 C 140.74825,9.024795 133.50594,2.575855 121.16126,0.559655 l -22.2437,12.257337 z"
768
+ id="path3485" /></svg>