Firenet

Check-in [0b0629477b]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Add show generator and update shows
Timelines: family | ancestors | descendants | both | NEWNET
Files: files | file ages | folders
SHA1:0b0629477bb597d3b2aafa68f77e4ea73790f12b
User & Date: jim 2011-12-19 02:05:11
Context
2011-12-23
11:04
[7b5a95ed75] Initial page access with just IP check-in: 0ce0380e11 user: jim tags: NEWNET
2011-12-19
02:05
Add show generator and update shows check-in: 0b0629477b user: jim tags: NEWNET
2011-12-17
20:09
[f8e92c9c4f] & [f200647fb5] Fix auto display check-in: df2dc6b656 user: jim tags: NEWNET
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to Shows/mariseillaise.json.

1
2
3
4
5
6
7
8
9
10
11
12
13

14
15
16
17
18
19
20

21
22
23
24
25
26
27

28
29
30
31
32
33
34

35
36
37
38
39
40
41

42
43
44
45
46
47
48
49
{
	"show"		:	"La Mariseillaise",
	"music" 	:	"marseillaise.mp3",
	"time"		:	"1:03",
	"nodes"		:	"6",
	"program" : [
			{ "node"  :  " 1",  "ch"  :  "1",  "delay"  :  "1500"},
			{ "node"  :  " 1",  "ch"  :  "2",  "delay"  :  "4500"},
			{ "node"  :  " 1",  "ch"  :  "3",  "delay"  :  "6500"},
			{ "node"  :  " 1",  "ch"  :  "4",  "delay"  :  "8500"},
			{ "node"  :  " 1",  "ch"  :  "5",  "delay"  :  "10500"},
			{ "node"  :  " 1",  "ch"  :  "6",  "delay"  :  "12500"},
			

			{ "node"  :  " 2",  "ch"  :  "1",  "delay"  :  "2200"},
			{ "node"  :  " 2",  "ch"  :  "2",  "delay"  :  "4200"},
			{ "node"  :  " 2",  "ch"  :  "3",  "delay"  :  "6200"},
			{ "node"  :  " 2",  "ch"  :  "4",  "delay"  :  "8200"},
			{ "node"  :  " 2",  "ch"  :  "5",  "delay"  :  "10200"},
			{ "node"  :  " 2",  "ch"  :  "6",  "delay"  :  "12200"},
			

			{ "node"  :  " 3",  "ch"  :  "1",  "delay"  :  "2700"},
			{ "node"  :  " 3",  "ch"  :  "2",  "delay"  :  "4700"},
			{ "node"  :  " 3",  "ch"  :  "3",  "delay"  :  "6700"},
			{ "node"  :  " 3",  "ch"  :  "4",  "delay"  :  "8700"},
			{ "node"  :  " 3",  "ch"  :  "5",  "delay"  :  "10700"},
			{ "node"  :  " 3",  "ch"  :  "6",  "delay"  :  "12700"},
			

			{ "node"  :  " 4",  "ch"  :  "1",  "delay"  :  "2300"},
			{ "node"  :  " 4",  "ch"  :  "2",  "delay"  :  "4300"},
			{ "node"  :  " 4",  "ch"  :  "3",  "delay"  :  "6300"},
			{ "node"  :  " 4",  "ch"  :  "4",  "delay"  :  "8300"},
			{ "node"  :  " 4",  "ch"  :  "5",  "delay"  :  "10300"},
			{ "node"  :  " 4",  "ch"  :  "6",  "delay"  :  "12300"},
			

			{ "node"  :  " 5",  "ch"  :  "1",  "delay"  :  "2000"},
			{ "node"  :  " 5",  "ch"  :  "2",  "delay"  :  "4000"},
			{ "node"  :  " 5",  "ch"  :  "3",  "delay"  :  "6000"},
			{ "node"  :  " 5",  "ch"  :  "4",  "delay"  :  "8000"},
			{ "node"  :  " 5",  "ch"  :  "5",  "delay"  :  "10000"},
			{ "node"  :  " 5",  "ch"  :  "6",  "delay"  :  "12000"},


			{ "node"  :  " 6",  "ch"  :  "1",  "delay"  :  "2000"},
			{ "node"  :  " 6",  "ch"  :  "2",  "delay"  :  "4000"},
			{ "node"  :  " 6",  "ch"  :  "3",  "delay"  :  "6000"},
			{ "node"  :  " 6",  "ch"  :  "4",  "delay"  :  "8000"},
			{ "node"  :  " 6",  "ch"  :  "5",  "delay"  :  "10000"},
			{ "node"  :  " 6",  "ch"  :  "6",  "delay"  :  "12000"}
				]
}






|
|
|
|
|
|
<
>
|
|
|
|
|
|
<
>
|
|
|
|
|
|
<
>
|
|
|
|
|
|
<
>
|
|
|
|
|
|
<
>
|
|
|
|
|
<


1
2
3
4
5
6
7
8
9
10
11
12

13
14
15
16
17
18
19

20
21
22
23
24
25
26

27
28
29
30
31
32
33

34
35
36
37
38
39
40

41
42
43
44
45
46

47
48
{
	"show"		:	"La Mariseillaise",
	"music" 	:	"marseillaise.mp3",
	"time"		:	"1:03",
	"nodes"		:	"6",
	"program" : [
			{ "node" : "1", "ch" : "1" , "delay" : "1048" },
			{ "node" : "2", "ch" : "1" , "delay" : "2245" },
			{ "node" : "3", "ch" : "1" , "delay" : "5957" },
			{ "node" : "4", "ch" : "1" , "delay" : "7663" },
			{ "node" : "5", "ch" : "1" , "delay" : "10357" },
			{ "node" : "6", "ch" : "1" , "delay" : "10925" },

			{ "node" : "7", "ch" : "1" , "delay" : "11444" },
			{ "node" : "1", "ch" : "2" , "delay" : "11983" },
			{ "node" : "2", "ch" : "2" , "delay" : "12502" },
			{ "node" : "3", "ch" : "2" , "delay" : "13021" },
			{ "node" : "4", "ch" : "2" , "delay" : "14687" },
			{ "node" : "5", "ch" : "2" , "delay" : "15226" },
			{ "node" : "6", "ch" : "2" , "delay" : "15794" },

			{ "node" : "7", "ch" : "2" , "delay" : "16273" },
			{ "node" : "1", "ch" : "3" , "delay" : "16463" },
			{ "node" : "2", "ch" : "3" , "delay" : "18478" },
			{ "node" : "3", "ch" : "3" , "delay" : "19676" },
			{ "node" : "4", "ch" : "3" , "delay" : "20115" },
			{ "node" : "5", "ch" : "3" , "delay" : "33025" },
			{ "node" : "6", "ch" : "3" , "delay" : "35200" },

			{ "node" : "7", "ch" : "3" , "delay" : "37425" },
			{ "node" : "1", "ch" : "4" , "delay" : "40877" },
			{ "node" : "2", "ch" : "4" , "delay" : "41286" },
			{ "node" : "3", "ch" : "4" , "delay" : "41795" },
			{ "node" : "4", "ch" : "4" , "delay" : "41965" },
			{ "node" : "5", "ch" : "4" , "delay" : "42334" },
			{ "node" : "6", "ch" : "4" , "delay" : "42823" },

			{ "node" : "7", "ch" : "4" , "delay" : "45487" },
			{ "node" : "1", "ch" : "5" , "delay" : "47023" },
			{ "node" : "2", "ch" : "5" , "delay" : "47552" },
			{ "node" : "3", "ch" : "5" , "delay" : "51304" },
			{ "node" : "4", "ch" : "5" , "delay" : "53379" },
			{ "node" : "5", "ch" : "5" , "delay" : "54556" },
			{ "node" : "6", "ch" : "5" , "delay" : "54985" },

			{ "node" : "7", "ch" : "5" , "delay" : "57170" },
			{ "node" : "2", "ch" : "6" , "delay" : "57609" },
			{ "node" : "4", "ch" : "6" , "delay" : "58747" },
			{ "node" : "6", "ch" : "6" , "delay" : "59904" },
			{ "node" : "1", "ch" : "6" , "delay" : "60403" },
			{ "node" : "3", "ch" : "6" , "delay" : "60972" }

				]
}

Changes to Shows/ss_forever.json.

1
2
3
4
5
6
7
8
9
10
11
12
13

14
15
16
17
18
19
20

21
22
23
24
25
26
27

28
29
30
31
32
33
34

35
36
37
38
39
40
41

42
43
44
45
46
47


















48

49
{
	"show"		:	"Stars & Stripes Forever",
	"music" 	:	"stars_stripes_forever.mp3",
	"time"		:	"3:38",
	"nodes"		:	"10",
	"program" : [
				{ "node"  :  " 1",  "ch"  :  "1",  "delay"  :  "1000"},
				{ "node"  :  " 1",  "ch"  :  "2",  "delay"  :  "2000"},
				{ "node"  :  " 1",  "ch"  :  "3",  "delay"  :  "3000"},
				{ "node"  :  " 1",  "ch"  :  "4",  "delay"  :  "4000"},
				{ "node"  :  " 1",  "ch"  :  "5",  "delay"  :  "5000"},
				{ "node"  :  " 1",  "ch"  :  "6",  "delay"  :  "6000"},
				

				{ "node"  :  " 2",  "ch"  :  "1",  "delay"  :  "1000"},
				{ "node"  :  " 2",  "ch"  :  "2",  "delay"  :  "2000"},
				{ "node"  :  " 2",  "ch"  :  "3",  "delay"  :  "3000"},
				{ "node"  :  " 2",  "ch"  :  "4",  "delay"  :  "4000"},
				{ "node"  :  " 2",  "ch"  :  "5",  "delay"  :  "5000"},
				{ "node"  :  " 2",  "ch"  :  "6",  "delay"  :  "6000"},
				

				{ "node"  :  " 3",  "ch"  :  "1",  "delay"  :  "1000"},
				{ "node"  :  " 3",  "ch"  :  "2",  "delay"  :  "2000"},
				{ "node"  :  " 3",  "ch"  :  "3",  "delay"  :  "3000"},
				{ "node"  :  " 3",  "ch"  :  "4",  "delay"  :  "4000"},
				{ "node"  :  " 3",  "ch"  :  "5",  "delay"  :  "5000"},
				{ "node"  :  " 3",  "ch"  :  "6",  "delay"  :  "6000"},
				

				{ "node"  :  " 4",  "ch"  :  "1",  "delay"  :  "1000"},
				{ "node"  :  " 4",  "ch"  :  "2",  "delay"  :  "2000"},
				{ "node"  :  " 4",  "ch"  :  "3",  "delay"  :  "3000"},
				{ "node"  :  " 4",  "ch"  :  "4",  "delay"  :  "4000"},
				{ "node"  :  " 4",  "ch"  :  "5",  "delay"  :  "5000"},
				{ "node"  :  " 4",  "ch"  :  "6",  "delay"  :  "6000"},
				

				{ "node"  :  " 5",  "ch"  :  "1",  "delay"  :  "1000"},
				{ "node"  :  " 5",  "ch"  :  "2",  "delay"  :  "2000"},
				{ "node"  :  " 5",  "ch"  :  "3",  "delay"  :  "3000"},
				{ "node"  :  " 5",  "ch"  :  "4",  "delay"  :  "4000"},
				{ "node"  :  " 5",  "ch"  :  "5",  "delay"  :  "5000"},
				{ "node"  :  " 5",  "ch"  :  "6",  "delay"  :  "6000"},
				

				{ "node"  :  " 6",  "ch"  :  "1",  "delay"  :  "1000"},
				{ "node"  :  " 6",  "ch"  :  "2",  "delay"  :  "2000"},
				{ "node"  :  " 6",  "ch"  :  "3",  "delay"  :  "3000"},
				{ "node"  :  " 6",  "ch"  :  "4",  "delay"  :  "4000"},
				{ "node"  :  " 6",  "ch"  :  "5",  "delay"  :  "5000"},
				{ "node"  :  " 6",  "ch"  :  "6",  "delay"  :  "6000"}	


















				]

}






|
|
|
|
|
|
<
>
|
|
|
|
|
|
<
>
|
|
|
|
|
|
<
>
|
|
|
|
|
|
<
>
|
|
|
|
|
|
<
>
|
|
|
|
|
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
>

1
2
3
4
5
6
7
8
9
10
11
12

13
14
15
16
17
18
19

20
21
22
23
24
25
26

27
28
29
30
31
32
33

34
35
36
37
38
39
40

41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
{
	"show"		:	"Stars & Stripes Forever",
	"music" 	:	"stars_stripes_forever.mp3",
	"time"		:	"3:38",
	"nodes"		:	"10",
	"program" : [
							{ "node" : "1", "ch" : "1" , "delay" : "320" },
			{ "node" : "2", "ch" : "1" , "delay" : "3960" },
			{ "node" : "3", "ch" : "1" , "delay" : "6540" },
			{ "node" : "4", "ch" : "1" , "delay" : "7480" },
			{ "node" : "5", "ch" : "1" , "delay" : "8590" },
			{ "node" : "6", "ch" : "1" , "delay" : "10020" },

			{ "node" : "7", "ch" : "1" , "delay" : "11460" },
			{ "node" : "8", "ch" : "1" , "delay" : "13240" },
			{ "node" : "9", "ch" : "1" , "delay" : "14150" },
			{ "node" : "10", "ch" : "1" , "delay" : "17890" },
			{ "node" : "1", "ch" : "2" , "delay" : "18360" },
			{ "node" : "2", "ch" : "2" , "delay" : "20510" },
			{ "node" : "3", "ch" : "2" , "delay" : "22350" },

			{ "node" : "4", "ch" : "2" , "delay" : "24250" },
			{ "node" : "5", "ch" : "2" , "delay" : "28190" },
			{ "node" : "6", "ch" : "2" , "delay" : "28940" },
			{ "node" : "7", "ch" : "2" , "delay" : "39720" },
			{ "node" : "8", "ch" : "2" , "delay" : "41170" },
			{ "node" : "9", "ch" : "2" , "delay" : "42170" },
			{ "node" : "10", "ch" : "2" , "delay" : "49420" },

			{ "node" : "1", "ch" : "3" , "delay" : "51630" },
			{ "node" : "2", "ch" : "3" , "delay" : "52380" },
			{ "node" : "3", "ch" : "3" , "delay" : "52790" },
			{ "node" : "4", "ch" : "3" , "delay" : "58140" },
			{ "node" : "5", "ch" : "3" , "delay" : "59530" },
			{ "node" : "6", "ch" : "3" , "delay" : "60300" },
			{ "node" : "7", "ch" : "3" , "delay" : "63410" },

			{ "node" : "8", "ch" : "3" , "delay" : "99450" },
			{ "node" : "9", "ch" : "3" , "delay" : "100500" },
			{ "node" : "10", "ch" : "3" , "delay" : "100850" },
			{ "node" : "1", "ch" : "4" , "delay" : "103460" },
			{ "node" : "2", "ch" : "4" , "delay" : "104980" },
			{ "node" : "3", "ch" : "4" , "delay" : "105470" },
			{ "node" : "4", "ch" : "4" , "delay" : "105950" },

			{ "node" : "5", "ch" : "4" , "delay" : "113320" },
			{ "node" : "6", "ch" : "4" , "delay" : "113790" },
			{ "node" : "7", "ch" : "4" , "delay" : "114790" },
			{ "node" : "8", "ch" : "4" , "delay" : "115760" },
			{ "node" : "9", "ch" : "4" , "delay" : "116710" },
			{ "node" : "10", "ch" : "4" , "delay" : "148900" },
			{ "node" : "1", "ch" : "5" , "delay" : "149930" },
			{ "node" : "2", "ch" : "5" , "delay" : "154160" },
			{ "node" : "3", "ch" : "5" , "delay" : "154960" },
			{ "node" : "4", "ch" : "5" , "delay" : "155400" },
			{ "node" : "5", "ch" : "5" , "delay" : "159230" },
			{ "node" : "6", "ch" : "5" , "delay" : "160990" },
			{ "node" : "7", "ch" : "5" , "delay" : "161500" },
			{ "node" : "8", "ch" : "5" , "delay" : "165420" },
			{ "node" : "9", "ch" : "5" , "delay" : "169320" },
			{ "node" : "10", "ch" : "5" , "delay" : "170790" },
			{ "node" : "2", "ch" : "6" , "delay" : "171720" },
			{ "node" : "4", "ch" : "6" , "delay" : "172660" },
			{ "node" : "6", "ch" : "6" , "delay" : "174760" },
			{ "node" : "8", "ch" : "6" , "delay" : "175230" },
			{ "node" : "10", "ch" : "6" , "delay" : "175770" },
			{ "node" : "3", "ch" : "6" , "delay" : "198830" },
			{ "node" : "5", "ch" : "6" , "delay" : "199420" },
			{ "node" : "7", "ch" : "6" , "delay" : "205310" },
			{ "node" : "9", "ch" : "6" , "delay" : "214110" }

				]
}

Added Tools/ShowGen/ShowGen.lua.



















































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
-- *********************************************************
-- Converter program Reads Audacity label track &
-- Produces a node firing list.
--
--	INPUT: 
--	 Label text file of the form
--	<Time> <End time> <Label>
--
-- 	OUTPUT:
--	\t\t{ "node" : "<node #>", "ch" : "<ch #>", "delay" : "<time ms>" },
--
-- SYNTAX:
--		firenet -c firegen.lua -i <label file> -o <out file> -n nodes
--
-- *********************************************************

VER = "1.0"
MAX_CHANNEL = 6
-------------------------------------------------------------------------------
--                  SUPPORT FUNCTIONS
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
--
--  flag_srch( argv,flag,data )   - Find the port in the argument list
--
--  INPUT:      argv    - Program argument list
--              flag    - Look for this string (i.e. -flag) in list
--              data    - If non-nil get the field following flag slot
--
--  OUTPUT      If data = nil return nil if flag not found and 1 if found
--              If data <> nil return nil if flag not found or next field if found
--
-------------------------------------------------------------------------------

function flag_srch( argv,flag,data )
    local rtnval = nil
    
    -- Loop over the list and check each item for match
    
    for i=1,table.getn(argv) 
    do
        if( flag == argv[i] )
        then
            -- Found so two cases 
            -- (a) If data == nil then return 1
            -- (b) If data != nil then return argv[i+1]
            
            if( data == nil  )
            then
                rtnval = 1
            else
                rtnval = argv[i+1]
            end
            
            -- In either case just break out
            
            break
        end
    end
    
    return( rtnval )
end

function show_help(msg)
	local out
	
	if( msg )
	then
		print(msg)
	end
	
	print("ShowGen Show Generation program V ",VER)
	print("SYNTAX: firenet -c ShowGen.lua -i <in> -o <out> -nodes <#>")
	print("   -i <in>  Input file REQUIRED")
	print("   -o <out> Output file REQUIRED")
	print("   -nodes # # Nodes in system REQUIRED")
	print("   -version Show this message")
	print()
end

------------------------------------------------
--                  Main Program
------------------------------------------------

-- GET COMMAND LINE OPTIONS

NODES = flag_srch( arg,"-nodes",1 )
NODES = NODES + 0	-- Convert to #
INPUT_FILE = flag_srch(arg,"-i",1)
OUTPUT_FILE = flag_srch(arg,"-o",1)
VERSION = flag_srch( arg,"-version")

if( VERSION )
then
	show_help()
	os.exit()
end

if( NODES == nil )
then
	show_help("ERROR: # nodes required")
	os.exit()
end
if( INPUT_FILE == nil )
then
	show_help("ERROR: Input file required")
	os.exit()
end
if( OUTPUT_FILE == nil )
then
	show_help("ERROR: Output file required")
	os.exit()
end
------------------------------------

-- Open input and output files

infl = io.open(INPUT_FILE,"r")
outfl = io.open(OUTPUT_FILE,"w")
if( infl == nil )
then
	out = string.format("ERROR Cannot open %s as input",INPUT_FILE)
	show_help(out)
	os.exit()
end

if( outfl == nil )
then
	out = string.format("ERROR Cannot open %s as output",OUTPUT_FILE)
	show_help(out)
	os.exit()
end

-- Build node list

nodelist = {}
for i=1,NODES
do
	nodelist[i] = 1
end

-- Now process file NOTE: Since the generated JSON has to have ,'s
-- after every line but the last we will output each line but no \n
-- at the end the succeeding line will add ,\n except for the last which
-- will only have a \n

-- Set up for run

current_node = 1
file_run = 1
first = 1

for line in infl:lines() 
do
	-- Extract the first chunk which is the time
	-- Convert to integer MS
	-- Extract the number as a substring
	-- convert to MS and do a ceiling to
	-- get the rounded up value
	n,en = string.find(line,"(%d+%p%d+)")
	delay = string.sub(line,n,en)
	delay = tonumber(delay)*1000
	delay = math.ceil( delay )
	
	-- Next use the current node and current channel for the output
	-- If used up try next and so on fail if no channels left
	
	current_ch = nodelist[current_node]
	node = current_node
	while( current_ch >= MAX_CHANNEL )
	do
		-- Try the next node
		
		node = node + 1
		if( node > NODES )
		then
			node = 1
		end
		
		-- If we hit the current node AGAIN then failure 
		-- not enough nodes in the list
		
		if( node == current_node )
		then
			print("FAILURE: EXCEEDED CHANNELS, ADD MORE NODES")
			os.exit()
		end
		
		if( nodelist[node] <= MAX_CHANNEL )
		then
			-- SUCCESS use this node
			
			current_node = node
			current_ch = nodelist[current_node]
			break
		end
	end

	-- Finish the last line (do only after first line)
	
	if( first == nil )
	then
		outfl:write(",\n")
	end
	first = nil
	
	-- Generate and output line
	
	out = string.format("\t\t\t{ \"node\" : \"%d\", \"ch\" : \"%d\" , \"delay\" : \"%d\" }",
				current_node,
				current_ch,
				delay)
	outfl:write(out)
	
	-- Update channel and current_node
	
	nodelist[current_node] = nodelist[current_node] + 1
	current_node = current_node + 1
	if( current_node > NODES )
	then
		current_node = 1
	end
end

-- Now add last \n on the output and close

outfl:write("\n")
infl:close()
outfl:close()
print("-- END RUN --")