From 2ed0fee489c37a6e2d4473f6185ebbe3e746ac11 Mon Sep 17 00:00:00 2001 From: Super User Date: Sun, 6 May 2007 15:54:52 +0200 Subject: only for backup, still in coding state - no compile!!! --- COPYING | 16 + LICENSE | 342 ++ Makefile | 361 ++ README | 341 ++ action.cpp | 2877 ++++++++++++++++ action_efi.cpp | 161 + action_vbox.cpp | 975 ++++++ admin.h | 147 + admin_client.c | 1323 +++++++ admin_server.c | 991 ++++++ admin_server.h | 35 + alawulaw.c | 266 ++ alawulaw.h | 5 + apppbx.cpp | 4476 ++++++++++++++++++++++++ apppbx.h | 357 ++ call.cpp | 147 + call.h | 39 + callchan.cpp | 87 + callchan.h | 24 + callpbx.cpp | 993 ++++++ callpbx.h | 81 + cause.c | 375 ++ cause.h | 51 + crypt.cpp | 2046 +++++++++++ crypt.h | 173 + default/directory.list | 21 + default/h323_gateway.conf | 13 + default/interface.conf | 88 + default/options.conf | 165 + default/routing.conf | 65 + dss1.cpp | 3370 ++++++++++++++++++ dss1.h | 103 + endpoint.cpp | 219 ++ endpoint.h | 53 + endpointapp.cpp | 49 + endpointapp.h | 25 + extension.c | 2070 +++++++++++ extension.h | 187 + genext.c | 148 + genrc.c | 268 ++ gentones.c | 379 ++ genwave.c | 197 ++ h323.cpp | 343 ++ h323.h | 27 + h323_chan.cpp | 189 + h323_chan.h | 34 + h323_con.cpp | 648 ++++ h323_con.h | 35 + h323_ep.cpp | 503 +++ h323_ep.h | 37 + h323conf.c | 137 + h323conf.h | 14 + ie.cpp | 1543 +++++++++ interface.c | 1055 ++++++ interface.h | 113 + mISDN.cpp | 2071 +++++++++++ mISDN.h | 142 + mail.c | 221 ++ main.c | 1037 ++++++ main.h | 202 ++ message.c | 128 + message.h | 398 +++ message.txt | 161 + options.c | 497 +++ options.h | 59 + port.cpp | 2116 ++++++++++++ port.h | 238 ++ q931.h | 90 + route.c | 2524 ++++++++++++++ route.h | 282 ++ save.h | 64 + todo.txt | 37 + tones.c | 669 ++++ tones.h | 36 + tones_american/activated_loop.isdn | Bin 0 -> 20957 bytes tones_american/busy_loop.isdn | Bin 0 -> 8000 bytes tones_american/cause_01_loop.isdn | 235 ++ tones_american/cause_02_loop.isdn | 230 ++ tones_american/cause_03_loop.isdn | 422 +++ tones_american/cause_05_loop.isdn | 214 ++ tones_american/cause_06_loop.isdn | 161 + tones_american/cause_12_loop.isdn | 126 + tones_american/cause_13_loop.isdn | 146 + tones_american/cause_14_loop.isdn | 135 + tones_american/cause_15_loop.isdn | 215 ++ tones_american/cause_16_loop.isdn | 386 +++ tones_american/cause_1b_loop.isdn | 197 ++ tones_american/cause_1c_loop.isdn | 628 ++++ tones_american/cause_1d_loop.isdn | 254 ++ tones_american/cause_1f_loop.isdn | 197 ++ tones_american/cause_22_loop.isdn | 190 + tones_american/cause_26_loop.isdn | 169 + tones_american/cause_29_loop.isdn | 194 ++ tones_american/cause_2a_loop.isdn | 199 ++ tones_american/cause_2f_loop.isdn | 160 + tones_american/cause_31_loop.isdn | 187 + tones_american/cause_32_loop.isdn | 284 ++ tones_american/cause_39_loop.isdn | 353 ++ tones_american/cause_3a_loop.isdn | 316 ++ tones_american/cause_3f_loop.isdn | 154 + tones_american/cause_41_loop.isdn | 231 ++ tones_american/cause_42_loop.isdn | 225 ++ tones_american/cause_45_loop.isdn | 209 ++ tones_american/cause_46_loop.isdn | 322 ++ tones_american/cause_55_loop.isdn | 330 ++ tones_american/cause_80_loop.isdn | 282 ++ tones_american/cause_81_loop.isdn | 233 ++ tones_american/cause_82_loop.isdn | 222 ++ tones_american/cause_83_loop.isdn | 187 + tones_american/cause_84_loop.isdn | 245 ++ tones_american/cause_85_loop.isdn | 266 ++ tones_american/cause_86_loop.isdn | 252 ++ tones_american/cause_87_loop.isdn | 209 ++ tones_american/crypt_off.isdn | Bin 0 -> 13096 bytes tones_american/crypt_on.isdn | 15 + tones_american/deactivated_loop.isdn | Bin 0 -> 24433 bytes tones_american/dialpbx.isdn | Bin 0 -> 6400 bytes tones_american/dialpbx_loop.isdn | Bin 0 -> 8000 bytes tones_american/dialtone_loop.isdn | 1 + tones_american/error_loop.isdn | 1 + tones_american/hold_loop.isdn | 6326 ++++++++++++++++++++++++++++++++++ tones_american/password_loop.isdn | Bin 0 -> 18964 bytes tones_american/redial.isdn | 1 + tones_american/release_loop.isdn | 1 + tones_american/ringing_loop.isdn | Bin 0 -> 40000 bytes tones_american/ringpbx_loop.isdn | Bin 0 -> 32000 bytes tones_american/test_loop.isdn | 1 + tones_efi/die.isdn | 15 + tones_efi/number_00.isdn | Bin 0 -> 5050 bytes tones_efi/number_01.isdn | Bin 0 -> 5050 bytes tones_efi/number_02.isdn | Bin 0 -> 5347 bytes tones_efi/number_03.isdn | Bin 0 -> 5347 bytes tones_efi/number_04.isdn | Bin 0 -> 5644 bytes tones_efi/number_05.isdn | Bin 0 -> 5347 bytes tones_efi/number_06.isdn | Bin 0 -> 5347 bytes tones_efi/number_07.isdn | Bin 0 -> 5347 bytes tones_efi/number_08.isdn | Bin 0 -> 5347 bytes tones_efi/number_09.isdn | Bin 0 -> 4753 bytes tones_german/activated_loop.isdn | Bin 0 -> 19693 bytes tones_german/busy_loop.isdn | Bin 0 -> 8000 bytes tones_german/cause_01_loop.isdn | 156 + tones_german/cause_02_loop.isdn | 209 ++ tones_german/cause_03_loop.isdn | 263 ++ tones_german/cause_05_loop.isdn | 224 ++ tones_german/cause_06_loop.isdn | 222 ++ tones_german/cause_12_loop.isdn | 288 ++ tones_german/cause_13_loop.isdn | 217 ++ tones_german/cause_14_loop.isdn | 252 ++ tones_german/cause_15_loop.isdn | 143 + tones_german/cause_16_loop.isdn | 253 ++ tones_german/cause_1b_loop.isdn | 241 ++ tones_german/cause_1c_loop.isdn | 372 ++ tones_german/cause_1d_loop.isdn | 162 + tones_german/cause_1f_loop.isdn | 200 ++ tones_german/cause_22_loop.isdn | 193 ++ tones_german/cause_26_loop.isdn | 228 ++ tones_german/cause_29_loop.isdn | 198 ++ tones_german/cause_2a_loop.isdn | 141 + tones_german/cause_2f_loop.isdn | 220 ++ tones_german/cause_31_loop.isdn | 338 ++ tones_german/cause_32_loop.isdn | 329 ++ tones_german/cause_39_loop.isdn | 294 ++ tones_german/cause_3a_loop.isdn | 354 ++ tones_german/cause_3f_loop.isdn | 193 ++ tones_german/cause_41_loop.isdn | 244 ++ tones_german/cause_42_loop.isdn | 234 ++ tones_german/cause_45_loop.isdn | 359 ++ tones_german/cause_46_loop.isdn | 229 ++ tones_german/cause_55_loop.isdn | 199 ++ tones_german/cause_80_loop.isdn | 265 ++ tones_german/cause_81_loop.isdn | 226 ++ tones_german/cause_82_loop.isdn | 257 ++ tones_german/cause_83_loop.isdn | 264 ++ tones_german/cause_84_loop.isdn | 306 ++ tones_german/cause_85_loop.isdn | 258 ++ tones_german/cause_86_loop.isdn | 137 + tones_german/cause_87_loop.isdn | 232 ++ tones_german/crypt_off.isdn | 1 + tones_german/crypt_on.isdn | 1 + tones_german/deactivated_loop.isdn | Bin 0 -> 21905 bytes tones_german/dialpbx_loop.isdn | Bin 0 -> 20000 bytes tones_german/dialtone_loop.isdn | Bin 0 -> 8000 bytes tones_german/error_loop.isdn | 1 + tones_german/hold_loop.isdn | 1 + tones_german/password_loop.isdn | Bin 0 -> 20710 bytes tones_german/redial.isdn | 1 + tones_german/release_loop.isdn | Bin 0 -> 4000 bytes tones_german/ringing.isdn | Bin 0 -> 24000 bytes tones_german/ringing_loop.isdn | Bin 0 -> 40000 bytes tones_german/ringpbx_loop.isdn | Bin 0 -> 32000 bytes tones_german/test_loop.isdn | 1 + vbox.cpp | 350 ++ vbox.h | 37 + vbox_english/call_anonymous.isdn | Bin 0 -> 12885 bytes vbox_english/call_from.isdn | Bin 0 -> 10990 bytes vbox_english/day_01.isdn | Bin 0 -> 10396 bytes vbox_english/day_02.isdn | Bin 0 -> 9802 bytes vbox_english/day_03.isdn | Bin 0 -> 9802 bytes vbox_english/day_04.isdn | Bin 0 -> 8911 bytes vbox_english/day_05.isdn | Bin 0 -> 9208 bytes vbox_english/day_06.isdn | Bin 0 -> 8911 bytes vbox_english/day_07.isdn | Bin 0 -> 10099 bytes vbox_english/day_08.isdn | Bin 0 -> 10990 bytes vbox_english/day_09.isdn | Bin 0 -> 10693 bytes vbox_english/day_10.isdn | Bin 0 -> 10099 bytes vbox_english/day_11.isdn | Bin 0 -> 10099 bytes vbox_english/day_12.isdn | Bin 0 -> 11061 bytes vbox_english/day_13.isdn | Bin 0 -> 12475 bytes vbox_english/day_14.isdn | Bin 0 -> 12772 bytes vbox_english/day_15.isdn | Bin 0 -> 11584 bytes vbox_english/day_16.isdn | Bin 0 -> 12475 bytes vbox_english/day_17.isdn | Bin 0 -> 13366 bytes vbox_english/day_18.isdn | Bin 0 -> 12772 bytes vbox_english/day_19.isdn | Bin 0 -> 11584 bytes vbox_english/day_20.isdn | Bin 0 -> 11584 bytes vbox_english/day_21.isdn | Bin 0 -> 14554 bytes vbox_english/day_22.isdn | Bin 0 -> 13366 bytes vbox_english/day_23.isdn | Bin 0 -> 12772 bytes vbox_english/day_24.isdn | Bin 0 -> 12772 bytes vbox_english/day_25.isdn | Bin 0 -> 13069 bytes vbox_english/day_26.isdn | Bin 0 -> 12475 bytes vbox_english/day_27.isdn | Bin 0 -> 15148 bytes vbox_english/day_28.isdn | Bin 0 -> 13069 bytes vbox_english/day_29.isdn | Bin 0 -> 13960 bytes vbox_english/day_30.isdn | Bin 0 -> 11584 bytes vbox_english/day_31.isdn | Bin 0 -> 13960 bytes vbox_english/delete_ask.isdn | Bin 0 -> 54352 bytes vbox_english/delete_done.isdn | Bin 0 -> 16930 bytes vbox_english/intro.isdn | Bin 0 -> 14851 bytes vbox_english/menu.isdn | Bin 0 -> 270271 bytes vbox_english/minute.isdn | Bin 0 -> 7426 bytes vbox_english/minutes.isdn | Bin 0 -> 9505 bytes vbox_english/month_01.isdn | Bin 0 -> 7129 bytes vbox_english/month_02.isdn | Bin 0 -> 9802 bytes vbox_english/month_03.isdn | Bin 0 -> 8614 bytes vbox_english/month_04.isdn | Bin 0 -> 9208 bytes vbox_english/month_05.isdn | Bin 0 -> 6832 bytes vbox_english/month_06.isdn | Bin 0 -> 7129 bytes vbox_english/month_07.isdn | Bin 0 -> 8317 bytes vbox_english/month_08.isdn | Bin 0 -> 6832 bytes vbox_english/month_09.isdn | Bin 0 -> 8911 bytes vbox_english/month_10.isdn | Bin 0 -> 8317 bytes vbox_english/month_11.isdn | Bin 0 -> 8020 bytes vbox_english/month_12.isdn | Bin 0 -> 8317 bytes vbox_english/nothing.isdn | Bin 0 -> 19009 bytes vbox_english/number_00.isdn | Bin 0 -> 3268 bytes vbox_english/number_01.isdn | Bin 0 -> 5050 bytes vbox_english/number_02.isdn | Bin 0 -> 4456 bytes vbox_english/number_03.isdn | Bin 0 -> 5050 bytes vbox_english/number_04.isdn | Bin 0 -> 4456 bytes vbox_english/number_05.isdn | Bin 0 -> 4753 bytes vbox_english/number_06.isdn | Bin 0 -> 4753 bytes vbox_english/number_07.isdn | Bin 0 -> 5347 bytes vbox_english/number_08.isdn | Bin 0 -> 4456 bytes vbox_english/number_09.isdn | Bin 0 -> 4753 bytes vbox_english/number_10.isdn | Bin 0 -> 4753 bytes vbox_english/number_11.isdn | Bin 0 -> 5941 bytes vbox_english/number_12.isdn | Bin 0 -> 5050 bytes vbox_english/number_13.isdn | Bin 0 -> 5644 bytes vbox_english/number_14.isdn | Bin 0 -> 5941 bytes vbox_english/number_15.isdn | Bin 0 -> 6238 bytes vbox_english/number_16.isdn | Bin 0 -> 6238 bytes vbox_english/number_17.isdn | Bin 0 -> 7723 bytes vbox_english/number_18.isdn | Bin 0 -> 6238 bytes vbox_english/number_19.isdn | Bin 0 -> 7129 bytes vbox_english/number_20.isdn | Bin 0 -> 5941 bytes vbox_english/number_21.isdn | Bin 0 -> 7723 bytes vbox_english/number_22.isdn | Bin 0 -> 6535 bytes vbox_english/number_23.isdn | Bin 0 -> 6832 bytes vbox_english/number_24.isdn | Bin 0 -> 7426 bytes vbox_english/number_25.isdn | Bin 0 -> 7723 bytes vbox_english/number_26.isdn | Bin 0 -> 8020 bytes vbox_english/number_27.isdn | Bin 0 -> 8020 bytes vbox_english/number_28.isdn | Bin 0 -> 8020 bytes vbox_english/number_29.isdn | Bin 0 -> 8317 bytes vbox_english/number_30.isdn | 79 + vbox_english/number_31.isdn | Bin 0 -> 7129 bytes vbox_english/number_32.isdn | Bin 0 -> 7129 bytes vbox_english/number_33.isdn | Bin 0 -> 6535 bytes vbox_english/number_34.isdn | Bin 0 -> 6535 bytes vbox_english/number_35.isdn | Bin 0 -> 7129 bytes vbox_english/number_36.isdn | Bin 0 -> 6832 bytes vbox_english/number_37.isdn | Bin 0 -> 7129 bytes vbox_english/number_38.isdn | Bin 0 -> 7129 bytes vbox_english/number_39.isdn | Bin 0 -> 7129 bytes vbox_english/number_40.isdn | Bin 0 -> 5347 bytes vbox_english/number_41.isdn | Bin 0 -> 7426 bytes vbox_english/number_42.isdn | Bin 0 -> 7426 bytes vbox_english/number_43.isdn | Bin 0 -> 8020 bytes vbox_english/number_44.isdn | Bin 0 -> 7723 bytes vbox_english/number_45.isdn | Bin 0 -> 8317 bytes vbox_english/number_46.isdn | Bin 0 -> 7723 bytes vbox_english/number_47.isdn | Bin 0 -> 7426 bytes vbox_english/number_48.isdn | Bin 0 -> 8317 bytes vbox_english/number_49.isdn | Bin 0 -> 8020 bytes vbox_english/number_50.isdn | Bin 0 -> 5050 bytes vbox_english/number_51.isdn | Bin 0 -> 7129 bytes vbox_english/number_52.isdn | Bin 0 -> 7426 bytes vbox_english/number_53.isdn | Bin 0 -> 7129 bytes vbox_english/number_54.isdn | Bin 0 -> 7426 bytes vbox_english/number_55.isdn | Bin 0 -> 8020 bytes vbox_english/number_56.isdn | Bin 0 -> 7723 bytes vbox_english/number_57.isdn | Bin 0 -> 9208 bytes vbox_english/number_58.isdn | Bin 0 -> 7129 bytes vbox_english/number_59.isdn | Bin 0 -> 8020 bytes vbox_english/oclock_am.isdn | Bin 0 -> 19009 bytes vbox_english/oclock_pm.isdn | Bin 0 -> 16930 bytes vbox_english/pause.isdn | Bin 0 -> 30295 bytes vbox_english/play.isdn | Bin 0 -> 10099 bytes vbox_english/record_ask.isdn | Bin 0 -> 101278 bytes vbox_english/record_play.isdn | Bin 0 -> 17227 bytes vbox_english/record_record.isdn | Bin 0 -> 16930 bytes vbox_english/store_ask.isdn | Bin 0 -> 53461 bytes vbox_english/store_done.isdn | Bin 0 -> 16633 bytes vbox_german/call_anonymous.isdn | Bin 0 -> 11584 bytes vbox_german/call_from.isdn | Bin 0 -> 9802 bytes vbox_german/day_01.isdn | Bin 0 -> 5941 bytes vbox_german/day_02.isdn | Bin 0 -> 6535 bytes vbox_german/day_03.isdn | Bin 0 -> 5347 bytes vbox_german/day_04.isdn | Bin 0 -> 5347 bytes vbox_german/day_05.isdn | Bin 0 -> 5941 bytes vbox_german/day_06.isdn | Bin 0 -> 5941 bytes vbox_german/day_07.isdn | Bin 0 -> 5644 bytes vbox_german/day_08.isdn | Bin 0 -> 5347 bytes vbox_german/day_09.isdn | Bin 0 -> 5644 bytes vbox_german/day_10.isdn | Bin 0 -> 6637 bytes vbox_german/day_11.isdn | Bin 0 -> 6005 bytes vbox_german/day_12.isdn | Bin 0 -> 6953 bytes vbox_german/day_13.isdn | Bin 0 -> 7901 bytes vbox_german/day_14.isdn | Bin 0 -> 7585 bytes vbox_german/day_15.isdn | Bin 0 -> 7901 bytes vbox_german/day_16.isdn | Bin 0 -> 8849 bytes vbox_german/day_17.isdn | Bin 0 -> 8533 bytes vbox_german/day_18.isdn | Bin 0 -> 8217 bytes vbox_german/day_19.isdn | Bin 0 -> 8849 bytes vbox_german/day_20.isdn | Bin 0 -> 7129 bytes vbox_german/day_21.isdn | Bin 0 -> 10099 bytes vbox_german/day_22.isdn | Bin 0 -> 10396 bytes vbox_german/day_23.isdn | Bin 0 -> 10099 bytes vbox_german/day_24.isdn | Bin 0 -> 10099 bytes vbox_german/day_25.isdn | Bin 0 -> 10099 bytes vbox_german/day_26.isdn | Bin 0 -> 10099 bytes vbox_german/day_27.isdn | Bin 0 -> 10396 bytes vbox_german/day_28.isdn | Bin 0 -> 11287 bytes vbox_german/day_29.isdn | Bin 0 -> 10693 bytes vbox_german/day_30.isdn | Bin 0 -> 8614 bytes vbox_german/day_31.isdn | Bin 0 -> 11287 bytes vbox_german/delete_ask.isdn | Bin 0 -> 59401 bytes vbox_german/delete_done.isdn | Bin 0 -> 15148 bytes vbox_german/intro.isdn | Bin 0 -> 16633 bytes vbox_german/menu.isdn | Bin 0 -> 263737 bytes vbox_german/minute.isdn | Bin 0 -> 7426 bytes vbox_german/minutes.isdn | Bin 0 -> 8911 bytes vbox_german/month_01.isdn | Bin 0 -> 8911 bytes vbox_german/month_02.isdn | Bin 0 -> 8614 bytes vbox_german/month_03.isdn | Bin 0 -> 8614 bytes vbox_german/month_04.isdn | Bin 0 -> 8317 bytes vbox_german/month_05.isdn | Bin 0 -> 8020 bytes vbox_german/month_06.isdn | Bin 0 -> 8020 bytes vbox_german/month_07.isdn | Bin 0 -> 8911 bytes vbox_german/month_08.isdn | Bin 0 -> 8911 bytes vbox_german/month_09.isdn | Bin 0 -> 9802 bytes vbox_german/month_10.isdn | Bin 0 -> 9208 bytes vbox_german/month_11.isdn | Bin 0 -> 9208 bytes vbox_german/month_12.isdn | Bin 0 -> 8614 bytes vbox_german/nothing.isdn | Bin 0 -> 15742 bytes vbox_german/number_00.isdn | Bin 0 -> 5050 bytes vbox_german/number_01.isdn | Bin 0 -> 5050 bytes vbox_german/number_02.isdn | Bin 0 -> 5347 bytes vbox_german/number_03.isdn | Bin 0 -> 5347 bytes vbox_german/number_04.isdn | Bin 0 -> 5644 bytes vbox_german/number_05.isdn | Bin 0 -> 5347 bytes vbox_german/number_06.isdn | Bin 0 -> 5347 bytes vbox_german/number_07.isdn | Bin 0 -> 5347 bytes vbox_german/number_08.isdn | Bin 0 -> 5347 bytes vbox_german/number_09.isdn | Bin 0 -> 4753 bytes vbox_german/number_10.isdn | Bin 0 -> 5644 bytes vbox_german/number_11.isdn | Bin 0 -> 4456 bytes vbox_german/number_12.isdn | Bin 0 -> 6238 bytes vbox_german/number_13.isdn | Bin 0 -> 6535 bytes vbox_german/number_14.isdn | Bin 0 -> 5941 bytes vbox_german/number_15.isdn | Bin 0 -> 7129 bytes vbox_german/number_16.isdn | Bin 0 -> 5941 bytes vbox_german/number_17.isdn | Bin 0 -> 5644 bytes vbox_german/number_18.isdn | Bin 0 -> 6238 bytes vbox_german/number_19.isdn | Bin 0 -> 6535 bytes vbox_german/number_20.isdn | Bin 0 -> 6238 bytes vbox_german/number_21.isdn | Bin 0 -> 8614 bytes vbox_german/number_22.isdn | Bin 0 -> 8911 bytes vbox_german/number_23.isdn | Bin 0 -> 8317 bytes vbox_german/number_24.isdn | Bin 0 -> 8317 bytes vbox_german/number_25.isdn | Bin 0 -> 8020 bytes vbox_german/number_26.isdn | Bin 0 -> 9208 bytes vbox_german/number_27.isdn | Bin 0 -> 8020 bytes vbox_german/number_28.isdn | Bin 0 -> 8614 bytes vbox_german/number_29.isdn | Bin 0 -> 9505 bytes vbox_german/number_30.isdn | Bin 0 -> 5644 bytes vbox_german/number_31.isdn | Bin 0 -> 8317 bytes vbox_german/number_32.isdn | Bin 0 -> 8317 bytes vbox_german/number_33.isdn | Bin 0 -> 8020 bytes vbox_german/number_34.isdn | Bin 0 -> 7129 bytes vbox_german/number_35.isdn | Bin 0 -> 8614 bytes vbox_german/number_36.isdn | Bin 0 -> 8317 bytes vbox_german/number_37.isdn | Bin 0 -> 8911 bytes vbox_german/number_38.isdn | Bin 0 -> 8911 bytes vbox_german/number_39.isdn | Bin 0 -> 8020 bytes vbox_german/number_40.isdn | Bin 0 -> 5347 bytes vbox_german/number_41.isdn | Bin 0 -> 8020 bytes vbox_german/number_42.isdn | Bin 0 -> 8614 bytes vbox_german/number_43.isdn | Bin 0 -> 8614 bytes vbox_german/number_44.isdn | Bin 0 -> 8020 bytes vbox_german/number_45.isdn | Bin 0 -> 8614 bytes vbox_german/number_46.isdn | Bin 0 -> 7723 bytes vbox_german/number_47.isdn | Bin 0 -> 8911 bytes vbox_german/number_48.isdn | Bin 0 -> 8020 bytes vbox_german/number_49.isdn | Bin 0 -> 8317 bytes vbox_german/number_50.isdn | Bin 0 -> 6238 bytes vbox_german/number_51.isdn | Bin 0 -> 8911 bytes vbox_german/number_52.isdn | Bin 0 -> 8911 bytes vbox_german/number_53.isdn | Bin 0 -> 8614 bytes vbox_german/number_54.isdn | Bin 0 -> 8614 bytes vbox_german/number_55.isdn | Bin 0 -> 8911 bytes vbox_german/number_56.isdn | Bin 0 -> 8317 bytes vbox_german/number_57.isdn | Bin 0 -> 8614 bytes vbox_german/number_58.isdn | Bin 0 -> 8020 bytes vbox_german/number_59.isdn | Bin 0 -> 8911 bytes vbox_german/number_ein.isdn | Bin 0 -> 3862 bytes vbox_german/number_eine.isdn | Bin 0 -> 3862 bytes vbox_german/oclock.isdn | Bin 0 -> 3862 bytes vbox_german/pause.isdn | Bin 0 -> 37720 bytes vbox_german/play.isdn | Bin 0 -> 10099 bytes vbox_german/record_ask.isdn | Bin 0 -> 124444 bytes vbox_german/record_play.isdn | Bin 0 -> 19306 bytes vbox_german/record_record.isdn | Bin 0 -> 19009 bytes vbox_german/store_ask.isdn | Bin 0 -> 57916 bytes vbox_german/store_done.isdn | Bin 0 -> 17524 bytes watch.c | 147 + wizzard.c | 194 ++ 438 files changed, 64798 insertions(+) create mode 100644 COPYING create mode 100644 LICENSE create mode 100644 Makefile create mode 100644 action.cpp create mode 100644 action_efi.cpp create mode 100644 action_vbox.cpp create mode 100644 admin.h create mode 100644 admin_client.c create mode 100644 admin_server.c create mode 100644 admin_server.h create mode 100644 alawulaw.c create mode 100644 alawulaw.h create mode 100644 apppbx.cpp create mode 100644 apppbx.h create mode 100644 call.cpp create mode 100644 call.h create mode 100644 callchan.cpp create mode 100644 callchan.h create mode 100644 callpbx.cpp create mode 100644 callpbx.h create mode 100644 cause.c create mode 100644 cause.h create mode 100644 crypt.cpp create mode 100644 crypt.h create mode 100644 default/directory.list create mode 100644 default/h323_gateway.conf create mode 100644 default/interface.conf create mode 100644 default/options.conf create mode 100644 default/routing.conf create mode 100644 dss1.cpp create mode 100644 dss1.h create mode 100644 endpoint.cpp create mode 100644 endpoint.h create mode 100644 endpointapp.cpp create mode 100644 endpointapp.h create mode 100644 extension.c create mode 100644 extension.h create mode 100644 genext.c create mode 100644 genrc.c create mode 100644 gentones.c create mode 100644 genwave.c create mode 100644 h323.cpp create mode 100644 h323.h create mode 100644 h323_chan.cpp create mode 100644 h323_chan.h create mode 100644 h323_con.cpp create mode 100644 h323_con.h create mode 100644 h323_ep.cpp create mode 100644 h323_ep.h create mode 100644 h323conf.c create mode 100644 h323conf.h create mode 100644 ie.cpp create mode 100644 interface.c create mode 100644 interface.h create mode 100644 mISDN.cpp create mode 100644 mISDN.h create mode 100644 mail.c create mode 100644 main.c create mode 100644 main.h create mode 100644 message.c create mode 100644 message.h create mode 100644 message.txt create mode 100644 options.c create mode 100644 options.h create mode 100644 port.cpp create mode 100644 port.h create mode 100644 q931.h create mode 100644 route.c create mode 100644 route.h create mode 100644 save.h create mode 100644 todo.txt create mode 100644 tones.c create mode 100644 tones.h create mode 100644 tones_american/activated_loop.isdn create mode 100644 tones_american/busy_loop.isdn create mode 100644 tones_american/cause_01_loop.isdn create mode 100644 tones_american/cause_02_loop.isdn create mode 100644 tones_american/cause_03_loop.isdn create mode 100644 tones_american/cause_05_loop.isdn create mode 100644 tones_american/cause_06_loop.isdn create mode 100644 tones_american/cause_12_loop.isdn create mode 100644 tones_american/cause_13_loop.isdn create mode 100644 tones_american/cause_14_loop.isdn create mode 100644 tones_american/cause_15_loop.isdn create mode 100644 tones_american/cause_16_loop.isdn create mode 100644 tones_american/cause_1b_loop.isdn create mode 100644 tones_american/cause_1c_loop.isdn create mode 100644 tones_american/cause_1d_loop.isdn create mode 100644 tones_american/cause_1f_loop.isdn create mode 100644 tones_american/cause_22_loop.isdn create mode 100644 tones_american/cause_26_loop.isdn create mode 100644 tones_american/cause_29_loop.isdn create mode 100644 tones_american/cause_2a_loop.isdn create mode 100644 tones_american/cause_2f_loop.isdn create mode 100644 tones_american/cause_31_loop.isdn create mode 100644 tones_american/cause_32_loop.isdn create mode 100644 tones_american/cause_39_loop.isdn create mode 100644 tones_american/cause_3a_loop.isdn create mode 100644 tones_american/cause_3f_loop.isdn create mode 100644 tones_american/cause_41_loop.isdn create mode 100644 tones_american/cause_42_loop.isdn create mode 100644 tones_american/cause_45_loop.isdn create mode 100644 tones_american/cause_46_loop.isdn create mode 100644 tones_american/cause_55_loop.isdn create mode 100644 tones_american/cause_80_loop.isdn create mode 100644 tones_american/cause_81_loop.isdn create mode 100644 tones_american/cause_82_loop.isdn create mode 100644 tones_american/cause_83_loop.isdn create mode 100644 tones_american/cause_84_loop.isdn create mode 100644 tones_american/cause_85_loop.isdn create mode 100644 tones_american/cause_86_loop.isdn create mode 100644 tones_american/cause_87_loop.isdn create mode 100644 tones_american/crypt_off.isdn create mode 100644 tones_american/crypt_on.isdn create mode 100644 tones_american/deactivated_loop.isdn create mode 100644 tones_american/dialpbx.isdn create mode 100644 tones_american/dialpbx_loop.isdn create mode 120000 tones_american/dialtone_loop.isdn create mode 100644 tones_american/error_loop.isdn create mode 100644 tones_american/hold_loop.isdn create mode 100644 tones_american/password_loop.isdn create mode 100644 tones_american/redial.isdn create mode 120000 tones_american/release_loop.isdn create mode 100644 tones_american/ringing_loop.isdn create mode 100644 tones_american/ringpbx_loop.isdn create mode 100644 tones_american/test_loop.isdn create mode 100644 tones_efi/die.isdn create mode 100644 tones_efi/number_00.isdn create mode 100644 tones_efi/number_01.isdn create mode 100644 tones_efi/number_02.isdn create mode 100644 tones_efi/number_03.isdn create mode 100644 tones_efi/number_04.isdn create mode 100644 tones_efi/number_05.isdn create mode 100644 tones_efi/number_06.isdn create mode 100644 tones_efi/number_07.isdn create mode 100644 tones_efi/number_08.isdn create mode 100644 tones_efi/number_09.isdn create mode 100644 tones_german/activated_loop.isdn create mode 100644 tones_german/busy_loop.isdn create mode 100644 tones_german/cause_01_loop.isdn create mode 100644 tones_german/cause_02_loop.isdn create mode 100644 tones_german/cause_03_loop.isdn create mode 100644 tones_german/cause_05_loop.isdn create mode 100644 tones_german/cause_06_loop.isdn create mode 100644 tones_german/cause_12_loop.isdn create mode 100644 tones_german/cause_13_loop.isdn create mode 100644 tones_german/cause_14_loop.isdn create mode 100644 tones_german/cause_15_loop.isdn create mode 100644 tones_german/cause_16_loop.isdn create mode 100644 tones_german/cause_1b_loop.isdn create mode 100644 tones_german/cause_1c_loop.isdn create mode 100644 tones_german/cause_1d_loop.isdn create mode 100644 tones_german/cause_1f_loop.isdn create mode 100644 tones_german/cause_22_loop.isdn create mode 100644 tones_german/cause_26_loop.isdn create mode 100644 tones_german/cause_29_loop.isdn create mode 100644 tones_german/cause_2a_loop.isdn create mode 100644 tones_german/cause_2f_loop.isdn create mode 100644 tones_german/cause_31_loop.isdn create mode 100644 tones_german/cause_32_loop.isdn create mode 100644 tones_german/cause_39_loop.isdn create mode 100644 tones_german/cause_3a_loop.isdn create mode 100644 tones_german/cause_3f_loop.isdn create mode 100644 tones_german/cause_41_loop.isdn create mode 100644 tones_german/cause_42_loop.isdn create mode 100644 tones_german/cause_45_loop.isdn create mode 100644 tones_german/cause_46_loop.isdn create mode 100644 tones_german/cause_55_loop.isdn create mode 100644 tones_german/cause_80_loop.isdn create mode 100644 tones_german/cause_81_loop.isdn create mode 100644 tones_german/cause_82_loop.isdn create mode 100644 tones_german/cause_83_loop.isdn create mode 100644 tones_german/cause_84_loop.isdn create mode 100644 tones_german/cause_85_loop.isdn create mode 100644 tones_german/cause_86_loop.isdn create mode 100644 tones_german/cause_87_loop.isdn create mode 120000 tones_german/crypt_off.isdn create mode 120000 tones_german/crypt_on.isdn create mode 100644 tones_german/deactivated_loop.isdn create mode 100644 tones_german/dialpbx_loop.isdn create mode 100644 tones_german/dialtone_loop.isdn create mode 100644 tones_german/error_loop.isdn create mode 120000 tones_german/hold_loop.isdn create mode 100644 tones_german/password_loop.isdn create mode 100644 tones_german/redial.isdn create mode 100644 tones_german/release_loop.isdn create mode 100644 tones_german/ringing.isdn create mode 100644 tones_german/ringing_loop.isdn create mode 100644 tones_german/ringpbx_loop.isdn create mode 100644 tones_german/test_loop.isdn create mode 100644 vbox.cpp create mode 100644 vbox.h create mode 100644 vbox_english/call_anonymous.isdn create mode 100644 vbox_english/call_from.isdn create mode 100644 vbox_english/day_01.isdn create mode 100644 vbox_english/day_02.isdn create mode 100644 vbox_english/day_03.isdn create mode 100644 vbox_english/day_04.isdn create mode 100644 vbox_english/day_05.isdn create mode 100644 vbox_english/day_06.isdn create mode 100644 vbox_english/day_07.isdn create mode 100644 vbox_english/day_08.isdn create mode 100644 vbox_english/day_09.isdn create mode 100644 vbox_english/day_10.isdn create mode 100644 vbox_english/day_11.isdn create mode 100644 vbox_english/day_12.isdn create mode 100644 vbox_english/day_13.isdn create mode 100644 vbox_english/day_14.isdn create mode 100644 vbox_english/day_15.isdn create mode 100644 vbox_english/day_16.isdn create mode 100644 vbox_english/day_17.isdn create mode 100644 vbox_english/day_18.isdn create mode 100644 vbox_english/day_19.isdn create mode 100644 vbox_english/day_20.isdn create mode 100644 vbox_english/day_21.isdn create mode 100644 vbox_english/day_22.isdn create mode 100644 vbox_english/day_23.isdn create mode 100644 vbox_english/day_24.isdn create mode 100644 vbox_english/day_25.isdn create mode 100644 vbox_english/day_26.isdn create mode 100644 vbox_english/day_27.isdn create mode 100644 vbox_english/day_28.isdn create mode 100644 vbox_english/day_29.isdn create mode 100644 vbox_english/day_30.isdn create mode 100644 vbox_english/day_31.isdn create mode 100644 vbox_english/delete_ask.isdn create mode 100644 vbox_english/delete_done.isdn create mode 100644 vbox_english/intro.isdn create mode 100644 vbox_english/menu.isdn create mode 100644 vbox_english/minute.isdn create mode 100644 vbox_english/minutes.isdn create mode 100644 vbox_english/month_01.isdn create mode 100644 vbox_english/month_02.isdn create mode 100644 vbox_english/month_03.isdn create mode 100644 vbox_english/month_04.isdn create mode 100644 vbox_english/month_05.isdn create mode 100644 vbox_english/month_06.isdn create mode 100644 vbox_english/month_07.isdn create mode 100644 vbox_english/month_08.isdn create mode 100644 vbox_english/month_09.isdn create mode 100644 vbox_english/month_10.isdn create mode 100644 vbox_english/month_11.isdn create mode 100644 vbox_english/month_12.isdn create mode 100644 vbox_english/nothing.isdn create mode 100644 vbox_english/number_00.isdn create mode 100644 vbox_english/number_01.isdn create mode 100644 vbox_english/number_02.isdn create mode 100644 vbox_english/number_03.isdn create mode 100644 vbox_english/number_04.isdn create mode 100644 vbox_english/number_05.isdn create mode 100644 vbox_english/number_06.isdn create mode 100644 vbox_english/number_07.isdn create mode 100644 vbox_english/number_08.isdn create mode 100644 vbox_english/number_09.isdn create mode 100644 vbox_english/number_10.isdn create mode 100644 vbox_english/number_11.isdn create mode 100644 vbox_english/number_12.isdn create mode 100644 vbox_english/number_13.isdn create mode 100644 vbox_english/number_14.isdn create mode 100644 vbox_english/number_15.isdn create mode 100644 vbox_english/number_16.isdn create mode 100644 vbox_english/number_17.isdn create mode 100644 vbox_english/number_18.isdn create mode 100644 vbox_english/number_19.isdn create mode 100644 vbox_english/number_20.isdn create mode 100644 vbox_english/number_21.isdn create mode 100644 vbox_english/number_22.isdn create mode 100644 vbox_english/number_23.isdn create mode 100644 vbox_english/number_24.isdn create mode 100644 vbox_english/number_25.isdn create mode 100644 vbox_english/number_26.isdn create mode 100644 vbox_english/number_27.isdn create mode 100644 vbox_english/number_28.isdn create mode 100644 vbox_english/number_29.isdn create mode 100644 vbox_english/number_30.isdn create mode 100644 vbox_english/number_31.isdn create mode 100644 vbox_english/number_32.isdn create mode 100644 vbox_english/number_33.isdn create mode 100644 vbox_english/number_34.isdn create mode 100644 vbox_english/number_35.isdn create mode 100644 vbox_english/number_36.isdn create mode 100644 vbox_english/number_37.isdn create mode 100644 vbox_english/number_38.isdn create mode 100644 vbox_english/number_39.isdn create mode 100644 vbox_english/number_40.isdn create mode 100644 vbox_english/number_41.isdn create mode 100644 vbox_english/number_42.isdn create mode 100644 vbox_english/number_43.isdn create mode 100644 vbox_english/number_44.isdn create mode 100644 vbox_english/number_45.isdn create mode 100644 vbox_english/number_46.isdn create mode 100644 vbox_english/number_47.isdn create mode 100644 vbox_english/number_48.isdn create mode 100644 vbox_english/number_49.isdn create mode 100644 vbox_english/number_50.isdn create mode 100644 vbox_english/number_51.isdn create mode 100644 vbox_english/number_52.isdn create mode 100644 vbox_english/number_53.isdn create mode 100644 vbox_english/number_54.isdn create mode 100644 vbox_english/number_55.isdn create mode 100644 vbox_english/number_56.isdn create mode 100644 vbox_english/number_57.isdn create mode 100644 vbox_english/number_58.isdn create mode 100644 vbox_english/number_59.isdn create mode 100644 vbox_english/oclock_am.isdn create mode 100644 vbox_english/oclock_pm.isdn create mode 100644 vbox_english/pause.isdn create mode 100644 vbox_english/play.isdn create mode 100644 vbox_english/record_ask.isdn create mode 100644 vbox_english/record_play.isdn create mode 100644 vbox_english/record_record.isdn create mode 100644 vbox_english/store_ask.isdn create mode 100644 vbox_english/store_done.isdn create mode 100644 vbox_german/call_anonymous.isdn create mode 100644 vbox_german/call_from.isdn create mode 100644 vbox_german/day_01.isdn create mode 100644 vbox_german/day_02.isdn create mode 100644 vbox_german/day_03.isdn create mode 100644 vbox_german/day_04.isdn create mode 100644 vbox_german/day_05.isdn create mode 100644 vbox_german/day_06.isdn create mode 100644 vbox_german/day_07.isdn create mode 100644 vbox_german/day_08.isdn create mode 100644 vbox_german/day_09.isdn create mode 100644 vbox_german/day_10.isdn create mode 100644 vbox_german/day_11.isdn create mode 100644 vbox_german/day_12.isdn create mode 100644 vbox_german/day_13.isdn create mode 100644 vbox_german/day_14.isdn create mode 100644 vbox_german/day_15.isdn create mode 100644 vbox_german/day_16.isdn create mode 100644 vbox_german/day_17.isdn create mode 100644 vbox_german/day_18.isdn create mode 100644 vbox_german/day_19.isdn create mode 100644 vbox_german/day_20.isdn create mode 100644 vbox_german/day_21.isdn create mode 100644 vbox_german/day_22.isdn create mode 100644 vbox_german/day_23.isdn create mode 100644 vbox_german/day_24.isdn create mode 100644 vbox_german/day_25.isdn create mode 100644 vbox_german/day_26.isdn create mode 100644 vbox_german/day_27.isdn create mode 100644 vbox_german/day_28.isdn create mode 100644 vbox_german/day_29.isdn create mode 100644 vbox_german/day_30.isdn create mode 100644 vbox_german/day_31.isdn create mode 100644 vbox_german/delete_ask.isdn create mode 100644 vbox_german/delete_done.isdn create mode 100644 vbox_german/intro.isdn create mode 100644 vbox_german/menu.isdn create mode 100644 vbox_german/minute.isdn create mode 100644 vbox_german/minutes.isdn create mode 100644 vbox_german/month_01.isdn create mode 100644 vbox_german/month_02.isdn create mode 100644 vbox_german/month_03.isdn create mode 100644 vbox_german/month_04.isdn create mode 100644 vbox_german/month_05.isdn create mode 100644 vbox_german/month_06.isdn create mode 100644 vbox_german/month_07.isdn create mode 100644 vbox_german/month_08.isdn create mode 100644 vbox_german/month_09.isdn create mode 100644 vbox_german/month_10.isdn create mode 100644 vbox_german/month_11.isdn create mode 100644 vbox_german/month_12.isdn create mode 100644 vbox_german/nothing.isdn create mode 100644 vbox_german/number_00.isdn create mode 100644 vbox_german/number_01.isdn create mode 100644 vbox_german/number_02.isdn create mode 100644 vbox_german/number_03.isdn create mode 100644 vbox_german/number_04.isdn create mode 100644 vbox_german/number_05.isdn create mode 100644 vbox_german/number_06.isdn create mode 100644 vbox_german/number_07.isdn create mode 100644 vbox_german/number_08.isdn create mode 100644 vbox_german/number_09.isdn create mode 100644 vbox_german/number_10.isdn create mode 100644 vbox_german/number_11.isdn create mode 100644 vbox_german/number_12.isdn create mode 100644 vbox_german/number_13.isdn create mode 100644 vbox_german/number_14.isdn create mode 100644 vbox_german/number_15.isdn create mode 100644 vbox_german/number_16.isdn create mode 100644 vbox_german/number_17.isdn create mode 100644 vbox_german/number_18.isdn create mode 100644 vbox_german/number_19.isdn create mode 100644 vbox_german/number_20.isdn create mode 100644 vbox_german/number_21.isdn create mode 100644 vbox_german/number_22.isdn create mode 100644 vbox_german/number_23.isdn create mode 100644 vbox_german/number_24.isdn create mode 100644 vbox_german/number_25.isdn create mode 100644 vbox_german/number_26.isdn create mode 100644 vbox_german/number_27.isdn create mode 100644 vbox_german/number_28.isdn create mode 100644 vbox_german/number_29.isdn create mode 100644 vbox_german/number_30.isdn create mode 100644 vbox_german/number_31.isdn create mode 100644 vbox_german/number_32.isdn create mode 100644 vbox_german/number_33.isdn create mode 100644 vbox_german/number_34.isdn create mode 100644 vbox_german/number_35.isdn create mode 100644 vbox_german/number_36.isdn create mode 100644 vbox_german/number_37.isdn create mode 100644 vbox_german/number_38.isdn create mode 100644 vbox_german/number_39.isdn create mode 100644 vbox_german/number_40.isdn create mode 100644 vbox_german/number_41.isdn create mode 100644 vbox_german/number_42.isdn create mode 100644 vbox_german/number_43.isdn create mode 100644 vbox_german/number_44.isdn create mode 100644 vbox_german/number_45.isdn create mode 100644 vbox_german/number_46.isdn create mode 100644 vbox_german/number_47.isdn create mode 100644 vbox_german/number_48.isdn create mode 100644 vbox_german/number_49.isdn create mode 100644 vbox_german/number_50.isdn create mode 100644 vbox_german/number_51.isdn create mode 100644 vbox_german/number_52.isdn create mode 100644 vbox_german/number_53.isdn create mode 100644 vbox_german/number_54.isdn create mode 100644 vbox_german/number_55.isdn create mode 100644 vbox_german/number_56.isdn create mode 100644 vbox_german/number_57.isdn create mode 100644 vbox_german/number_58.isdn create mode 100644 vbox_german/number_59.isdn create mode 100644 vbox_german/number_ein.isdn create mode 100644 vbox_german/number_eine.isdn create mode 100644 vbox_german/oclock.isdn create mode 100644 vbox_german/pause.isdn create mode 100644 vbox_german/play.isdn create mode 100644 vbox_german/record_ask.isdn create mode 100644 vbox_german/record_play.isdn create mode 100644 vbox_german/record_record.isdn create mode 100644 vbox_german/store_ask.isdn create mode 100644 vbox_german/store_done.isdn create mode 100644 watch.c create mode 100644 wizzard.c diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..048315d --- /dev/null +++ b/COPYING @@ -0,0 +1,16 @@ +Copyright Andreas Eversberg (jolly@jolly.de) + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..0781c9f --- /dev/null +++ b/LICENSE @@ -0,0 +1,342 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. + + diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..d57816a --- /dev/null +++ b/Makefile @@ -0,0 +1,361 @@ +#*****************************************************************************\ +#* ** +#* PBX4Linux ** +#* ** +#*---------------------------------------------------------------------------** +#* Copyright: Andreas Eversberg ** +#* ** +#* Makefile ** +#* ** +#*****************************************************************************/ + +WITH-PBX = 42 # MUST BE SET for now +#WITH-H323 = 42 # comment this out, if no h323 should be compiled +#WITH-OPAL = 42 # NOT SUPPORTED YET +WITH-CRYPTO = 42 # comment this out, if no libcrypto should be used +# note: check your location and the names of libraries. + +# select location to install +INSTALL_BIN = /usr/local/bin +INSTALL_DATA = /usr/local/pbx + +# give locations for the libraries (comment out H323_LIB and PWLIB_LIB, if they are installed on the system) +LINUX_INCLUDE = -I/usr/src/linux/include +H323_INCLUDE = -I/usr/local/include/openh323 +#H323_LIB = -L/usr/local/lib +#PWLIB_INCLUDE = -I/usr/local/include/ptlib/unix +#PWLIB_LIB = -L/usr/local/lib + +# give location of the mISDN libraries +MISDNUSER_INCLUDE = -I../mISDNuser/include +MISDNUSER_LIB = -L../mISDNuser/lib -L../mISDNuser/i4lnet +LIBS += -lisdnnet -lmISDN -lpthread + +# give location of the curses or ncurses library +CURSES = -lncurses + +CC = g++ +LD = $(CC) +WIZZARD = ./wizzard +PBX = ./pbx +PBXADMIN = ./pbxadmin +PBXWATCH = ./pbxwatch +GEN = ./gentones +GENW = ./genwave +GENRC = ./genrc +GENEXT = ./genextension +CFLAGS = -Wall -g -DINSTALL_DATA=\"$(INSTALL_DATA)\" +CFLAGS += $(LINUX_INCLUDE) $(MISDNUSER_INCLUDE) +ifdef WITH-PBX +CFLAGS += -DPBX +endif +ifdef WITH-CRYPTO +CFLAGS += -DCRYPTO +endif +CFLAGS_OPAL = $(CFLAGS) +CFLAGS_H323 = $(CFLAGS) +LIBDIR += $(MISDNUSER_LIB) +ifdef WITH-OPAL +OPAL = opal.o opal_mgr.o opal_pbxep.o opal_pbxcon.o opal_pbxms.o +CFLAGS += -DOPAL +CFLAGS_OPAL += $(OPAL_INCLUDE) -DOPAL +LIBDIR += $(OPAL_LIB) +endif +ifdef WITH-H323 +H323 = h323.o h323_ep.o h323_con.o h323_chan.o +LIBS += -lh323_linux_x86_r -lpt_linux_x86_r -ldl +CFLAGS += -DH323 +CFLAGS_H323 += $(H323_INCLUDE) $(PWLIB_INCLUDE) -DH323INCLUDE -DH323 -D_REENTRANT -DPBYTE_ORDER=PLITTLE_ENDIAN -DP_PTHREADS -DP_HAS_SEMAPHORES -DPHAS_TEMPLATES -DP_LINUX -DPTRACING +LIBDIR += $(H323_LIB) $(PWLIB_LIB) +endif +ifdef WITH-CRYPTO +LIBDIR += -L/usr/local/ssl/lib +CFLAGS += -I/usr/local/ssl/include +#LIBS += -lcrypto +LIBS += /usr/local/ssl/lib/libcrypto.a +endif + +#all: +# @echo Note that this version is a beta release. It is only for testing purpose. +# @echo Please report any bug. To compile use \"make beta\". +# @exit + +all: $(PBXADMIN) $(PBX) $(GEN) $(GENW) $(GENRC) $(GENEXT) + @sh -c 'grep -n strcpy *.c* ; if test $$''? = 0 ; then echo "dont use strcpy, use makro instead." ; exit -1 ; fi' + @sh -c 'grep -n strncpy *.c* ; if test $$''? = 0 ; then echo "dont use strncpy, use makro instead." ; exit -1 ; fi' + @sh -c 'grep -n strcat *.c* ; if test $$''? = 0 ; then echo "dont use strcat, use makro instead." ; exit -1 ; fi' + @sh -c 'grep -n strncat *.c* ; if test $$''? = 0 ; then echo "dont use strncat, use makro instead." ; exit -1 ; fi' + @sh -c 'grep -n sprintf *.c* ; if test $$''? = 0 ; then echo "dont use sprintf, use makro instead." ; exit -1 ; fi' + @sh -c 'grep -n snprintf *.c* ; if test $$''? = 0 ; then echo "dont use snprintf, use makro instead." ; exit -1 ; fi' + @echo "All PBX binaries done" + @sync + @exit + +main.o: main.c *.h Makefile + $(CC) -c $(CFLAGS_H323) main.c -o main.o + +message.o: message.c *.h Makefile + $(CC) -c $(CFLAGS) message.c -o message.o + +options.o: options.c *.h Makefile + $(CC) -c $(CFLAGS) options.c -o options.o + +interface.o: interface.c *.h Makefile + $(CC) -c $(CFLAGS) interface.c -o interface.o + +h323conf.o: h323conf.c *.h Makefile + $(CC) -c $(CFLAGS) h323conf.c -o h323conf.o + +extension.o: extension.c *.h Makefile + $(CC) -c $(CFLAGS) extension.c -o extension.o + +route.o: route.c *.h Makefile + $(CC) -c $(CFLAGS) route.c -o route.o + +port.o: port.cpp *.h Makefile + $(CC) -c $(CFLAGS) port.cpp -o port.o + +mISDN.o: mISDN.cpp *.h Makefile + $(CC) -c $(CFLAGS) mISDN.cpp -o mISDN.o + +dss1.o: dss1.cpp ie.cpp *.h Makefile + $(CC) -c $(CFLAGS) dss1.cpp -o dss1.o + +opal.o: opal.cpp *.h Makefile + $(CC) -c $(CFLAGS) opal.cpp -o opal.o + +opal_mgr.o: opal_mgr.cpp *.h Makefile + $(CC) -c $(CFLAGS) opal_mgr.cpp -o opal_mgr.o + +opal_pbxep.o: opal_pbxep.cpp *.h Makefile + $(CC) -c $(CFLAGS) opal_pbxep.cpp -o opal_pbxep.o + +opal_pbxcon.o: opal_pbxcon.cpp *.h Makefile + $(CC) -c $(CFLAGS) opal_pbxcon.cpp -o opal_pbxcon.o + +opal_pbxms.o: opal_pbxms.cpp *.h Makefile + $(CC) -c $(CFLAGS) opal_pbxms.cpp -o opal_pbxms.o + +#knock.o: knock.cpp *.h Makefile +# $(CC) -c $(CFLAGS) knock.cpp -o knock.o +# +vbox.o: vbox.cpp *.h Makefile + $(CC) -c $(CFLAGS) vbox.cpp -o vbox.o + +mail.o: mail.c *.h Makefile + $(CC) -c $(CFLAGS) mail.c -o mail.o + +action.o: action.cpp *.h Makefile + $(CC) -c $(CFLAGS) action.cpp -o action.o + +action_vbox.o: action_vbox.cpp *.h Makefile + $(CC) -c $(CFLAGS) action_vbox.cpp -o action_vbox.o + +action_efi.o: action_efi.cpp *.h Makefile + $(CC) -c $(CFLAGS) action_efi.cpp -o action_efi.o + +endpoint.o: endpoint.cpp *.h Makefile + $(CC) -c $(CFLAGS) endpoint.cpp -o endpoint.o + +endpointapp.o: endpointapp.cpp *.h Makefile + $(CC) -c $(CFLAGS) endpointapp.cpp -o endpointapp.o + +apppbx.o: apppbx.cpp *.h Makefile + $(CC) -c $(CFLAGS) apppbx.cpp -o apppbx.o + +call.o: call.cpp *.h Makefile + $(CC) -c $(CFLAGS) call.cpp -o call.o + +callpbx.o: callpbx.cpp *.h Makefile + $(CC) -c $(CFLAGS) callpbx.cpp -o callpbx.o + +callchan.o: callchan.cpp *.h Makefile + $(CC) -c $(CFLAGS) callchan.cpp -o callchan.o + +cause.o: cause.c *.h Makefile + $(CC) -c $(CFLAGS) cause.c -o cause.o + +alawulaw.o: alawulaw.c *.h Makefile + $(CC) -c $(CFLAGS) alawulaw.c -o alawulaw.o + +tones.o: tones.c *.h Makefile + $(CC) -c $(CFLAGS) tones.c -o tones.o + +crypt.o: crypt.cpp *.h Makefile + $(CC) -c $(CFLAGS) crypt.cpp -o crypt.o + +h323.o: h323.cpp *.h Makefile + $(CC) -c $(CFLAGS_H323) h323.cpp -o h323.o + +h323_ep.o: h323_ep.cpp *.h Makefile + $(CC) -c $(CFLAGS_H323) h323_ep.cpp -o h323_ep.o + +h323_chan.o: h323_chan.cpp *.h Makefile + $(CC) -c $(CFLAGS_H323) h323_chan.cpp -o h323_chan.o + +h323_con.o: h323_con.cpp *.h Makefile + $(CC) -c $(CFLAGS_H323) h323_con.cpp -o h323_con.o + +genext.o: genext.c *.h Makefile + $(CC) -c $(CFLAGS) genext.c -o genext.o + +#admin_client.o: admin_client.c *.h Makefile +# $(CC) -c $(CFLAGS) admin_client.c -o admin_client.o + +admin_server.o: admin_server.c *.h Makefile + $(CC) -c $(CFLAGS) admin_server.c -o admin_server.o + + +#$(WIZZARD): wizzard.c Makefile +# $(CC) $(LIBDIR) $(CFLAGS) -lm wizzard.c \ +# -o $(WIZZARD) + +$(PBX): $(H323) $(OPAL) \ + main.o \ + options.o \ + interface.o \ + h323conf.o \ + extension.o \ + cause.o \ + alawulaw.o \ + tones.o \ + message.o \ + route.o \ + port.o \ + mISDN.o \ + dss1.o \ + vbox.o \ + endpoint.o \ + endpointapp.o \ + apppbx.o \ + crypt.o \ + action.o \ + action_vbox.o \ + action_efi.o \ + mail.o \ + call.o \ + callpbx.o \ + callchan.o \ + admin_server.o + $(LD) $(LIBDIR) $(H323) $(OPAL) \ + main.o \ + options.o \ + interface.o \ + h323conf.o \ + extension.o \ + cause.o \ + alawulaw.o \ + tones.o \ + message.o \ + route.o \ + port.o \ + mISDN.o \ + dss1.o \ + vbox.o \ + endpoint.o \ + endpointapp.o \ + apppbx.o \ + crypt.o \ + action.o \ + action_vbox.o \ + action_efi.o \ + mail.o \ + call.o \ + callpbx.o \ + callchan.o \ + admin_server.o \ + $(LIBS) -o $(PBX) + +$(PBXADMIN): admin_client.c cause.c *.h Makefile + $(CC) $(LIBDIR) $(CFLAGS) $(CURSES) -lm admin_client.c cause.c \ + -o $(PBXADMIN) + +$(PBXWATCH): watch.c *.h Makefile + $(CC) $(LIBDIR) $(CFLAGS) -lm watch.c \ + -o $(PBXWATCH) + +$(GEN): gentones.c *.h Makefile + $(CC) $(LIBDIR) $(CFLAGS) -lm gentones.c \ + -o $(GEN) + +$(GENW):genwave.c *.h Makefile + $(CC) $(LIBDIR) $(CFLAGS) -lm genwave.c \ + -o $(GENW) + +$(GENRC): genrc.c *.h Makefile + $(CC) $(LIBDIR) $(CFLAGS) -lm genrc.c \ + -o $(GENRC) + +$(GENEXT): options.o extension.o genext.o + $(CC) $(CFLAGS) options.o extension.o genext.o -o $(GENEXT) + +#install: +# @echo Remember, this is a beta release. To overwrite your current installed +# @echo version, use \"make beta_install\". +# @exit + +install: + -killall -9 -w -q pbx # the following error must be ignored + cp $(PBX) $(INSTALL_BIN) + cp $(PBXADMIN) $(INSTALL_BIN) +# cp $(PBXWATCH) $(INSTALL_BIN) + cp $(GEN) $(INSTALL_BIN) + cp $(GENW) $(INSTALL_BIN) + cp $(GENRC) $(INSTALL_BIN) + cp $(GENEXT) $(INSTALL_BIN) + mkdir -p $(INSTALL_DATA) + mkdir -p $(INSTALL_DATA)/extensions + @if test -a $(INSTALL_DATA)/options.conf ; then \ + echo "NOTE: options.conf already exists, not changed." ; else \ + cp -v default/options.conf $(INSTALL_DATA) ; fi + @if test -a $(INSTALL_DATA)/interface.conf ; then \ + echo "NOTE: interface.conf already exists, not changed." ; else \ + cp -v default/interface.conf $(INSTALL_DATA) ; fi + @if test -a $(INSTALL_DATA)/routing.conf ; then \ + echo "NOTE: routing.conf already exists, not changed." ; else \ + cp -v default/routing.conf $(INSTALL_DATA) ; fi + @if test -a $(INSTALL_DATA)/numbering_int.conf ; then \ + echo "NOTE: numbering_int.conf is obsolete, please use routing." ; fi + @if test -a $(INSTALL_DATA)/numbering_ext.conf ; then \ + echo "NOTE: numbering_ext.conf is obsolete, please use routing." ; fi + @if test -a $(INSTALL_DATA)/h323_gateway.conf ; then \ + echo "NOTE: h323_gateway.conf already exists, not changed." ; else \ + cp -v default/h323_gateway.conf $(INSTALL_DATA) ; fi + @if test -a $(INSTALL_DATA)/directory.list ; then \ + echo "NOTE: directory.list already exists, not changed." ; else \ + cp -v default/directory.list $(INSTALL_DATA) ; fi + cp -a tones_* $(INSTALL_DATA) + cp -a vbox_english/ $(INSTALL_DATA) + cp -a vbox_german/ $(INSTALL_DATA) + cp -a tones_efi/ $(INSTALL_DATA) + sync + +clean: + touch * + rm -f $(PBX) $(PBXADMIN) $(PBXWATCH) $(GEN) $(GENW) $(GENRC) $(GENEXT) + rm -f *.o + rm -f .*.c.sw* .*.cpp.sw* .*.h.sw* + rm -f bla nohup.out + rm -f debug*.log + +tar: + make clean + cd .. && tar -cvzf pbx4linux_`date +%Y%m%d`.tar.gz pbx4linux + +start: $(PBX) + sync + -killall -9 -w -q pbx # the following error must be ignored + $(PBX) start + +s: $(PBX) + sync + -killall -9 -w -q pbx # the following error must be ignored + $(PBX) start + +fork: $(PBX) + sync + -killall -9 -w -q pbx # the following error must be ignored + $(PBX) fork + + + diff --git a/README b/README index e69de29..1a51fef 100644 --- a/README +++ b/README @@ -0,0 +1,341 @@ + +Read the documentation at ./doc/ and visit http://isdn.jolly.de. + + +Changes in Version 20021228 +- first release + +Changes in Version 20030111 (buggy and unuseable) +- support dtmf for callback and dtmf dialing mode (dial through via dtmf) +- bug fixes +- dialing improvement: dialing h323 now possible with port and alias +- other stuff +- new Makefile: make install will now install binaries and data on your system + +Changes in Version 20030118 (buggy and unuseable) +- information exchange between isdn/h323-ports, endpoints and calls are messages now + previousely using direct calls with pointers were dangerous +- removed bug since 200301011, which caued h323 calls to deadlock + +Changes in Version 20030120 +- login function +- callback authentication +- h323 audio bug. no h323 audio transmission sice version 20030111 +- some other bug fixes + +Changes in Version 20030206 (first beta release 1.0) +- callerid (CLIP/COLP) is now processed correctly with all features +- hold sound and active/inactive notification +- CD notification +- many callerid display function +- bug fixes +- documentation as word document (partly done) +- Note: This week I have my vakation, so there is no response to any question in the mailing list. + +Changes in Version 1.0 +- first release +- finished the first version of the documentation +- new style internet page with documentation in html +- all enities (port, endpoint, call) are now c++ objects, rather than structures +- tones may now be played and recorded using wave (8bit mono, 16bit mono, 16bit stereo) or law (alwa/ulaw mono) +- fixed corruption in wave-file creation +- now call forwad (cfb, cfnr) is implemented and working +- an answering machine with playback function is implemented. +- lots of bug fixes + +Changes in Version 1.1 +- option to fetch tones into memory, causing faster access, then from hard disk +- Memory is now locked using mlockall(), to prevent paging which causes jitter and interruption. +- Answering machine now works with keypad information. +- callback on internal port, if hangup with call on hold. +- A pocket calcularor with simple terms (*, /, +, -) and floating point is added. +- If a calls had more than two endpoints, any message has been ignored. + This caused not to receive the retreive notification, which caused the hold + music to continue to play. +- minor buf fixes +- Disconnect/release "causes" are now processed by priority, if a multipoint call is made. + +Changes in Version 1.2 +- bugfix: dialing of vbox-caller now works. +- bugfix: minor answering machine announcement bug +- fixed compiling error: h323_con.cpp (p_type not declared) thanx arne! +- added include definition for kernel api in Makefile. Hope it works... +- fix: dummyid is used for external calls when no caller id is available. the + dummy id is transmitted as restricted id. if the police is called, it will + see the dummyid rather than the pbx line id. this is used on forwarded calls + when the caller id is not available. +- doc: added a simple instruction to build a cross over cable. + +Changes in Version 2.0pre +- NEW ISDN DRIVER SUPPORT (Forget the HiSax, now use 'mISDN'.) +- NEW KERNEL REALTIME MODULE (mISDN_dsp.o) +- NEW NT-MODE LIBRARY SUPPORT (now MULTIPOINT!!!) +- NEW TE-MODE STACK SUPPORT +- support of call suspension and retrieval (switch between calls) +- call waiting on internal phone (calls when no bchannel is available) +- doc: Now headlines are moved to the next page if they are at the bottom of a + page. +- vbox: minor speech syntax bugfix +- up to 50 (compiler flag) dialed numbers can be recalled. +- up to 50 (compiler flag) received calls are listed and can be replied. +- Dialing informations are now queued by endpoint until port has received + setup acknowledge on the outgoing connection. +- Starting PBX without parameter gives a list of options. +- Query option for listing available ports/cards. +- CNIP (calling name) Some Simens switches and telephones support this. +- Extensions no have names. +- Timeouts can now be specified for different call states on ISDN phones. +- Tones/Announcements can now be overridden at different call states. +- isdn.cpp is completely reworked. +- Tones/Announcements can be played externally, if supported by the external + line. +- Commandline parameters must be given on startup of pbx. +- query option to check out the current isdn cards and protocolls. +- Debug flags can now be used to speciallize the debug output. +- vbox: Recorded calls can now be sent as attached sound file via email, or + just a notifaction mail without sound file can be sent. +- PBX now runs with highest prio (99) to get as much cpu as possible. +- CPU scheduler now runs PBX4Linux as real time process. +- Internal calls now use internal extension number as caller id. +- Rework of hold/conference. +- New option to allow an incoming h323-call to be connected at ringing state. +- New codecs supported with h323 (speex and law) +- COLP now works with h323 +- Answering machine now delays to avoid the dtmf tone when start recording +- Answering machine now adds the beep behind the announcement file. +- keypad facility dialing option +- Conference now really works using call hold feature in conjunction with + keypad feature +- Picking of an incoming call on isdn now really works. +- picking of a call forwarded to vbox +- I fixed a bug that did not queue the dialed digits correctly before getting + an external connecting. +- Logfiles of calls now show the correct year. +- Callback now rejects if no password is given or the given extension doesn't + exist. +- Incoming H.323 calls may now instantly connect using a special option. +- H323 compiles faster, because the H323 includes are only used for the H323 + code part. +- Using 'curses' for a state debugging. The current state of all instances + is displayed on the screen including calls, endpoints and ports. +- manny, manny more things that I forgot + +Changes in Version 2.0 +- fixed memory leak +- fixed COLP bug +- finally SUSPEND/RESUME (call parking), resume is allowed from any ISDN-port +- some CRITICAL bugfixes +- Fixed and reworked sample counting when playing tones. Now fast wind and + rewind works correctly. Also 8-bit recording can be played back now. + I hope it works now without problems. +- An internal phone without caller id will now be rejected rather than + treated as an extenal call. +- Fixed bug in rejecting an external call. +- Corrected handeling of 'inbandpatterns'. +- Data calls will not enable DTMF detection. +- Data calls will not use any audio transmission from user space. +- Forward to VBOX only if call is an audio call. +- Fixed library bug, that caused not to process keypad-information during + setup message. +- Fixed a 'release_complete' bug. +- Debug information now have the correct month. +- Fixed bug of wave-playback of voicebox recoding, caused by rework of the + audio routines. It caused a SEGMENTATION FAULT! +- Using threads now to send email and using libcrypto. +- Introducing encryption of external calls using Blowfish. +- Key exchange using RSA. +- Fixed a bug in dialing H323-IP with numerical digits. +- Fixed a bug that causes endpoint, which receives audio data, to crash when + no port is related to it. +- Fixed a bug that did not release endpoint, when it receives a disconnect + if it has no port (parked). +- Fixed a channel assignment bug when retrieving call. (second B-channel) +- Now COLP with H.323 works. No more crash! +- Park attribute was not set, which caused a crash. +- Conference now works correctly with dsp-module. +- Fixed a serious NT-mode process handling problem. (crash after some calls) +- Added log file which is also displayed on the 'state' screen. +- * Happy new year 2004 * + +Changes in Version 2.1 +- Fixed a bug that caused not to reply external calls (also VBOX). +- 'genrc' now supports loading HFC-4S, HFC-8S and HFC-E1 drivers +- Outgoing setup now expires after 8 seconds! +- Fixed a bug that causes mISDNuser to crash during cleanup. +- Fixed memory bug, thanx Paul! +- hfc-4s/8s driver support (mISDN) +- Improvement of isdn audio processing, hardware support. +- Fixed diplay callerid bug "anonymousunknown anon" +- Added more stable malloc (calloc) / free handling + +Changes in Version 2.2 +- PRI proof (2 MBit interface support when using HFC-E1) +- Fixed data call bug +- Improved display of PRI channels +- Now VBOX playback says "no messages" if the last message has been deleted + and will not play the last but one, unless the "previous" button has been + pressed. + +Changes in Version 2.3 +- Fixed HFC_MULTI driver activation problem (HW_RESET was not implemented) +- Fixed login prefix bug. Thanx Karsten V. +- MISDN: better layer 2 check +- Now facility informations are transfered during call to terminal + (finally advice of charge is displayed) MUST BE ENABLED BY SETTINGS! +- Fixed 'reply' dialing bug, that caused a crash. Thanx Karsten V. +- Added L1 activation for NT-Mode. Fixed problems with inactive links. +- Fixed a bug that caused subsequent data calls after a data call. Thanx JC. +- mISDN: layer 1 now works correct with E1 cards. + +Changes in Version 2.4 +- Fixed parallel ringing to multiple external numbers. +- Fixed login again (was still buggy). + +Changes in Version 2.5 +- Fixed callback bug. (International numbers were not detected.) +- Fixed typos (mostly "incomming") - thanx Lars. +- Fixed vbox-email bug - thanx Martin. (and also the compiler error) +- Fixed compiler bug, that caused compiling without crypto lib to fail. +- Fixed some mISDN crash problems. +- Now it should also compile with the original CVS tree. +- Fixed hfc_multi unloading bug - thanx Karsten! +- Now disabling DSP_MODULE really causes DSP to be disabled. +- Now disabling real time scheduling really works. +- mISDNuser (CVS) now compiles with the mISDN (CVS) +- Adding the outdial prefix to the caller ID is now possible. +- Fixed bug that caused echo test not to work. +- And finally hardware echo now works on HFC 4s/8s/E1 (hfc_multi) + For echo dial 993 (Test + 3) for standard configuration. +- Added new hfc_multi vendor IDs including "Beronet Cards". + +Changes in Version 2.6 +- Fixed hookflash bug in conjunction with prefix. Thanx Tobias! +- Fixed cleanup bug when loading of ISDN driver failed. +- Fixed mISDN bug that caused cards not to be found, if loaded in different + order as found by kernel. +- Fixed a bug that causes a segfault when a phone disconnects while + parallel ringing multiple phones/ports. +- Added capability for Point-To-Point in NT mode, including PRI. +- Added L1 link control for NT mode. +- Fixed bug in hfc_multi and mISDN driver that caused mISDN not to work + with kernel > 2.6.7. +- Fixed a but when detecting different cards with hfc_multi. +- Fixed timer bug that caused timers of multiple NT ports not to work + correctly. + +Changes in Version 2.7 +- Fixed lots of bugs. +- Now receive stream from mISDN is disabled when not needed. +- Added NT mode support for incomming "SETUP_ACKNOWLEDGE". + +Changes in Version 3.0 +- Advanced routing capability to replace the numbering_*.conf + (Don't worry, internal and external numbering is a feature of the routing + capability and is easy to convert.) +- Now correct cause location is generated and handled. +- New cause display feature. Location is displayed with the cause number. +- Many source cleanups. +- New interface (Unix socket) to administrate. Status informations are now + viewable without restarting PBX. Even may processes may view status info. + Starting / stopping state debugging, doesn't require to restart PBX. +- Status information now has selectable details. +- Better structure for debugging functions and better logging. (code) +- Dialing may also be done via command line interface. +- Now internel/external dialtone and ringing depends on internal/external call. +- Now endpoints (partys) can be released via command line (admin tool). +- Watchdog "pbxwatch" to automatically restart and even debug PBX4Linux. +- Removed problem with uninitialized variable in ISDNPort object causing to + crash. It did not happen very often.(only after some hundred/thousand calls) +- HFC-E1 cards did not correctly synchronize to external lines. +- dsp.o now allocates only one timeslot per call, as expected. +- mISDNuser now correctly connects PRI calls. +- PRI improvements and bugfixes. +- Support for conference rooms. +- Voice box is now able to play announcement before connecting the call. + A special feature on the external line is required to send audio before + answering the call. +- It is now possible to include seconds (time) in the connect message. This + might not be supported by all telephones, so it is an optional feature. +- Moved open and close of recording audio to the "Port" class, where it + belongs. The mixer will be more performant this way. +- Notify is now supported by mISDN and also correctly handled and queued + by PBX. +- Fixed bug that caused not to free broadcast process IDs in certain cases. + This would cause calls to internal phones (from extern or intern) not to + work after a while. +- Added HFC-S USB to 'genrc' tool. +- printisdn now shows corret month. + +Changes in Version 3.0-fix1 +- Rule for changing the forwarding now works. Enter "pbx rules forward" for + description. Also the example in "defaults/route.conf" is corrected. +- Forking now forks twice and suppresses debug output. Closing of shell is + possible. + +Changes in Version 3.0-fix2 +- Fixed memory leak bug in pbxadmin that caused to eat all memory and make it + stop. +- Fixed audio handling that cause forking calls to be mute. (Parallel + forwarding causes calls to fork to multiple destinations.) + +Changes in Version 3.0-fix3 +- Added "nopassword" parameter for login action. +- Fixed bolean condition bug. +- pbxadmin will not exit if terminal size changes. + +Changes in Version 3.1 +- Internal structure changed. "Endpoints" and "applications" are now two + linked classes. The code is now reusable for other projects than + "PBX4Linux". (No added features!) +- Some source cleanups. +- Now keypad must be enabled for each extension if required. (settings) +- Removed a new bug that caused remotely parked/holded calls not to be removed + from conference. The conference got disturbed by park/hold sound from + remote. +- Removed bug that caused printing of unset pointers. + +Changes in Version 3.2 +- PBX now works with mqueue branch. This is the latest CVS source: + * HFCmulti is ported + * HFC-PCI is ported + * DSP is ported + * nt-mode lib (libi4l) is ported + * source is now SMP (multiple processors or hyperthreading) save. +- Fixed bug that caused not to record if annoucement is missing +- A prefix may be specified with callback for predefined dialing after + callback. +- Now b-channels are displayed more compressed on admin tool. + +Changes in Version 3.3 +- * te-mode works +- * te-mode layer 1 and layer 2 control works (SHORTMESSAGE) + +Changes in Version 3.3-fix2 +- OpenH323 midas release compiles +- Fixed bug in MESSAGE_NOTIFY which cases display information not to dliver. +- OpenH323 midas release works currently only with law-codecs +- Dixed some dial string parsing for Openh323. + +Changes in Version 3.3-fix3 +- Rework of kernel audio briding. Much faster (less delay), dynamically + handles jitter. Ready for future RTP / ISDNoIP modules. + +Changes in Version 3.4 +- Removed DSP_MODULE switch, because it will be essential for PBX operation. +- Fixed pbxadmin offset bug. +- Added special feature "efi" to announce caller's ID. You call, and it tells + your caller ID. (if available) Sample set is not complete! +- Now caller ID and type can be given for external call rule. +- Now caller ID and type can be given for changing caller ID. +- Removed a display bug in pbxadmin, that caused busy channels to be omitted. +- Fixed layer 2 handling bug. +- Increased performance of pbx-status screen. Many interfaces/calls caused + lock up of machine. +- Timeout condition seems to work now. +- Timeout action seems to work now. + +What you might expect in later versions + -> ISDN over IP (proprietary solution) + -> OPAL, with a new interface between user space audio and kernel space audio (SIP / H323) + -> (maybe later) Kernel space RTP that makes VoIP reeeeeeeeeeeeally fast! + diff --git a/action.cpp b/action.cpp new file mode 100644 index 0000000..51aa8db --- /dev/null +++ b/action.cpp @@ -0,0 +1,2877 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** all actions (and hangup) are processed here ** +** ** +\*****************************************************************************/ + +#include +#include +#include +#include +#include +#include "main.h" +#include "linux/isdnif.h" + +extern char **environ; + + +/* create caller id from digits by comparing with national and international + * prefixes. + */ +char *nationalize_callerinfo(char *string, int *ntype) +{ + if (!strncmp(options.international, string, strlen(options.international))) + { + *ntype = INFO_NTYPE_INTERNATIONAL; + return(string+strlen(options.international)); + } + if (!strncmp(options.national, string, strlen(options.national))) + { + *ntype = INFO_NTYPE_NATIONAL; + return(string+strlen(options.national)); + } + *ntype = INFO_NTYPE_SUBSCRIBER; + return(string); +} + +/* create number (including access codes) from caller id + * prefixes. + */ +char *numberrize_callerinfo(char *string, int ntype) +{ + static char result[256]; + + switch(ntype) + { + case INFO_NTYPE_INTERNATIONAL: + UCPY(result, options.international); + SCAT(result, string); + return(result); + break; + + case INFO_NTYPE_NATIONAL: + UCPY(result, options.national); + SCAT(result, string); + return(result); + break; + + default: + return(string); + } +} + + +/* + * process init 'internal' / 'external' / 'h323' / 'chan' / 'vbox-record' / 'partyline'... + */ +void EndpointAppPBX::_action_init_call(int chan) +{ + class Call *call; + struct port_list *portlist = ea_endpoint->ep_portlist; + + /* a created call, this should never happen */ + if (ea_endpoint->ep_call_id) + { + if (options.deb & DEBUG_EPOINT) + PERROR("EPOINT(%d): We already have a call instance, this should never happen!\n", ea_endpoint->ep_serial); + return; + } + + /* create call */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): Creating new call instance.\n", ea_endpoint->ep_serial); + if (chan) + call = new CallChan(ea_endpoint); + else + call = new CallPBX(ea_endpoint); + if (!call) + { + /* resource not available */ + message_disconnect_port(portlist, CAUSE_RESSOURCEUNAVAIL, LOCATION_PRIVATE_LOCAL, ""); + new_state(EPOINT_STATE_OUT_DISCONNECT); + set_tone(portlist,"cause_22"); + return; + } + ea_endpoint->ep_call_id = call->c_serial; +} +void EndpointAppPBX::action_init_call(void) +{ + _action_init_call(0); +} +void EndpointAppPBX::action_init_chan(void) +{ + _action_init_call(1); +} + +/* + * process dialing 'internal' + */ +void EndpointAppPBX::action_dialing_internal(void) +{ + struct capa_info capainfo; + struct caller_info callerinfo; + struct redir_info redirinfo; + struct dialing_info dialinginfo; + struct port_list *portlist = ea_endpoint->ep_portlist; + struct message *message; + struct extension ext; + struct route_param *rparam; + + /* send proceeding, because number is complete */ + set_tone(portlist, "proceeding"); + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_PROCEEDING); + message_put(message); + logmessage(message); + new_state(EPOINT_STATE_IN_PROCEEDING); + + /* create bearer/caller/dialinginfo */ + memcpy(&capainfo, &e_capainfo, sizeof(capainfo)); + memcpy(&callerinfo, &e_callerinfo, sizeof(callerinfo)); + memcpy(&redirinfo, &e_redirinfo, sizeof(redirinfo)); + memset(&dialinginfo, 0, sizeof(dialinginfo)); + dialinginfo.itype = INFO_ITYPE_INTERN; + SCPY(dialinginfo.number, e_dialinginfo.number); + + /* process extension */ + if ((rparam = routeparam(e_action, PARAM_EXTENSION))) + SCPY(dialinginfo.number, rparam->string_value); + + /* process number type */ + if ((rparam = routeparam(e_action, PARAM_TYPE))) + dialinginfo.ntype = rparam->integer_value; + + /* process service */ + if ((rparam = routeparam(e_action, PARAM_CAPA))) + { + capainfo.bearer_capa = rparam->integer_value; + if (capainfo.bearer_capa != INFO_BC_SPEECH + && capainfo.bearer_capa != INFO_BC_AUDIO) + { + capainfo.bearer_mode = INFO_BMODE_PACKET; + } + capainfo.bearer_info1 = INFO_INFO1_NONE; + } + if ((rparam = routeparam(e_action, PARAM_BMODE))) + { + capainfo.bearer_mode = rparam->integer_value; + } + if ((rparam = routeparam(e_action, PARAM_INFO1))) + { + capainfo.bearer_info1 = rparam->integer_value; + } + if ((rparam = routeparam(e_action, PARAM_HLC))) + { + capainfo.hlc = rparam->integer_value; + } + if ((rparam = routeparam(e_action, PARAM_EXTHLC))) + { + capainfo.exthlc = rparam->integer_value; + } + + /* process presentation */ + if ((rparam = routeparam(e_action, PARAM_PRESENT))) + { + callerinfo.present = (rparam->integer_value)?INFO_PRESENT_ALLOWED:INFO_PRESENT_RESTRICTED; + } + + /* check if extension exists AND only if not multiple extensions */ + if (!read_extension(&ext, dialinginfo.number) && !strchr(dialinginfo.number,',')) + { + printlog("%3d action INTERN dialed extension %s doesn't exist.\n", ea_endpoint->ep_serial, dialinginfo.number); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): extension %s doesn't exist\n", ea_endpoint->ep_serial, dialinginfo.number); + new_state(EPOINT_STATE_OUT_DISCONNECT); + message_disconnect_port(portlist, CAUSE_UNALLOCATED, LOCATION_PRIVATE_LOCAL, ""); + set_tone(portlist, "cause_86"); + return; + } + /* check if internal calls are denied */ + if (e_ext.rights < 1) + { + printlog("%3d action INTERN access to internal phones are denied for this caller.\n", ea_endpoint->ep_serial); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): internal call from terminal %s denied.\n", ea_endpoint->ep_serial, e_terminal); + new_state(EPOINT_STATE_OUT_DISCONNECT); + message_disconnect_port(portlist, CAUSE_REJECTED, LOCATION_PRIVATE_LOCAL, ""); + set_tone(portlist, "cause_81"); + return; + } + + /* add or update internal call */ + printlog("%3d action INTERN call to extension %s.\n", ea_endpoint->ep_serial, dialinginfo.number); + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, MESSAGE_SETUP); + memcpy(&message->param.setup.dialinginfo, &dialinginfo, sizeof(struct dialing_info)); + memcpy(&message->param.setup.redirinfo, &redirinfo, sizeof(struct redir_info)); + memcpy(&message->param.setup.callerinfo, &callerinfo, sizeof(struct caller_info)); + memcpy(&message->param.setup.capainfo, &capainfo, sizeof(struct capa_info)); + message_put(message); +} + +/* process dialing external + */ +void EndpointAppPBX::action_dialing_external(void) +{ + struct capa_info capainfo; + struct caller_info callerinfo; + struct redir_info redirinfo; + struct dialing_info dialinginfo; + char *p; + struct port_list *portlist = ea_endpoint->ep_portlist; + struct message *message; + struct route_param *rparam; + + /* special processing of delete characters '*' and '#' */ + if (e_ext.delete_ext) + { + /* dialing a # causes a clearing of complete number */ + if (strchr(e_extdialing, '#')) + { + e_extdialing[0] = '\0'; + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): '#' detected: terminal '%s' selected caller id '%s' and continues dialing: '%s'\n", ea_endpoint->ep_serial, e_terminal, e_callerinfo.id, e_extdialing); + } + /* eliminate digits before '*', which is a delete digit + */ + if (strchr(e_extdialing, '*')) + { + /* remove digits */ + while((p=strchr(e_extdialing, '*'))) + { + if (p > e_extdialing) /* only if there is a digit in front */ + { + UCPY(p-1, p); + p--; + } + UCPY(p, p+1); /* remove '*' */ + } + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): terminal %s deleted digits and got new string: %s\n", ea_endpoint->ep_serial, e_terminal, e_extdialing); + } + } + + /* create bearer/caller/dialinginfo */ + memcpy(&capainfo, &e_capainfo, sizeof(capainfo)); + memcpy(&callerinfo, &e_callerinfo, sizeof(callerinfo)); + memcpy(&redirinfo, &e_redirinfo, sizeof(redirinfo)); + memset(&dialinginfo, 0, sizeof(dialinginfo)); + dialinginfo.itype = INFO_ITYPE_EXTERN; + dialinginfo.sending_complete = 0; + SCPY(dialinginfo.number, e_extdialing); + + /* process prefix */ + if ((rparam = routeparam(e_action, PARAM_PREFIX))) + SPRINT(dialinginfo.number, "%s%s", rparam->string_value, e_extdialing); + + /* process number complete */ + if ((rparam = routeparam(e_action, PARAM_COMPLETE))) + if ((rparam = routeparam(e_action, PARAM_PREFIX))) + SCPY(dialinginfo.number, rparam->string_value); + dialinginfo.sending_complete = 1; + + /* process number type */ + if ((rparam = routeparam(e_action, PARAM_TYPE))) + dialinginfo.ntype = rparam->integer_value; + + /* process service */ + if ((rparam = routeparam(e_action, PARAM_CAPA))) + { + capainfo.bearer_capa = rparam->integer_value; + if (capainfo.bearer_capa != INFO_BC_SPEECH + && capainfo.bearer_capa != INFO_BC_AUDIO) + { + capainfo.bearer_mode = INFO_BMODE_PACKET; + } + capainfo.bearer_info1 = INFO_INFO1_NONE; + } + if ((rparam = routeparam(e_action, PARAM_BMODE))) + { + capainfo.bearer_mode = rparam->integer_value; + } + if ((rparam = routeparam(e_action, PARAM_INFO1))) + { + capainfo.bearer_info1 = rparam->integer_value; + } + if ((rparam = routeparam(e_action, PARAM_HLC))) + { + capainfo.hlc = rparam->integer_value; + } + if ((rparam = routeparam(e_action, PARAM_EXTHLC))) + { + capainfo.exthlc = rparam->integer_value; + } + + + /* process callerid */ + if ((rparam = routeparam(e_action, PARAM_CALLERID))) + { + SCPY(callerinfo.id, rparam->string_value); + } + if ((rparam = routeparam(e_action, PARAM_CALLERIDTYPE))) + { + callerinfo.ntype = rparam->integer_value; + } + + /* process presentation */ + if ((rparam = routeparam(e_action, PARAM_PRESENT))) + { + callerinfo.present = (rparam->integer_value)?INFO_PRESENT_ALLOWED:INFO_PRESENT_RESTRICTED; + } + + /* process interfaces */ + if ((rparam = routeparam(e_action, PARAM_INTERFACES))) + SCPY(dialinginfo.interfaces, rparam->string_value); + + /* check if local calls are denied */ + if (e_ext.rights < 2) + { + printlog("%3d action EXTERN calls are denied for this caller.\n", ea_endpoint->ep_serial); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): external call from terminal denied: %s\n", ea_endpoint->ep_serial, e_terminal); + release(RELEASE_CALL, LOCATION_PRIVATE_LOCAL, CAUSE_REJECTED, LOCATION_PRIVATE_LOCAL, 0); + set_tone(portlist, "cause_82"); + denied: + message_disconnect_port(portlist, CAUSE_REJECTED, LOCATION_PRIVATE_LOCAL, ""); + new_state(EPOINT_STATE_OUT_DISCONNECT); + return; + } + + if (!strncmp(dialinginfo.number, options.national, strlen(options.national)) + || dialinginfo.ntype == INFO_NTYPE_NATIONAL + || dialinginfo.ntype == INFO_NTYPE_INTERNATIONAL) + { + /* check if national calls are denied */ + if (e_ext.rights < 3) + { + printlog("%3d action EXTERN national calls are denied for this caller.\n", ea_endpoint->ep_serial); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): national call from terminal %s denied.\n", ea_endpoint->ep_serial, e_terminal); + release(RELEASE_CALL, LOCATION_PRIVATE_LOCAL, CAUSE_REJECTED, LOCATION_PRIVATE_LOCAL, 0); + set_tone(portlist, "cause_83"); + goto denied; + } + } + + if (!strncmp(dialinginfo.number, options.international, strlen(options.international)) + || dialinginfo.ntype == INFO_NTYPE_INTERNATIONAL) + { + /* check if international calls are denied */ + if (e_ext.rights < 4) + { + printlog("%3d action EXTERN international calls are denied for this caller.\n", ea_endpoint->ep_serial); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): international call from terminal %s denied.\n", ea_endpoint->ep_serial, e_terminal); + release(RELEASE_CALL, LOCATION_PRIVATE_LOCAL, CAUSE_REJECTED, LOCATION_PRIVATE_LOCAL, 0); + set_tone(portlist, "cause_84"); + goto denied; + } + } + + /* add or update outgoing call */ + printlog("%3d action EXTERN call to destination %s.\n", ea_endpoint->ep_serial, dialinginfo.number); + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, MESSAGE_SETUP); + memcpy(&message->param.setup.dialinginfo, &dialinginfo, sizeof(struct dialing_info)); + memcpy(&message->param.setup.redirinfo, &redirinfo, sizeof(struct redir_info)); + memcpy(&message->param.setup.callerinfo, &callerinfo, sizeof(struct caller_info)); + memcpy(&message->param.setup.capainfo, &capainfo, sizeof(struct capa_info)); + message_put(message); +} + + +#ifdef H323 +/* + * process dialing h323 + */ +#define set_ip_macro \ + UNCPY(helpbuffer, address, sizeof(helpbuffer)); \ + helpbuffer[sizeof(helpbuffer)-1] = '\0'; \ + UNPRINT(helpbuffer + (int)(address - dial), sizeof(helpbuffer)-1 - (int)(address - dial), "%d.%d.%d.%d", ip_a, ip_b, ip_c, ip_d); \ + ii = strlen(helpbuffer); \ + UNCAT(helpbuffer, dial+i, sizeof(helpbuffer)-1); \ + dial = address + ii; \ + i = 0; \ + UCPY(address, helpbuffer); +#define set_port_macro \ + UNCPY(helpbuffer, address, sizeof(helpbuffer)); \ + helpbuffer[sizeof(helpbuffer)-1] = '\0'; \ + UNPRINT(helpbuffer + (int)(address - dial), sizeof(helpbuffer)-1 - (int)(address - dial), "%d", port); \ + ii = strlen(helpbuffer); \ + UNCAT(helpbuffer, dial+i, sizeof(helpbuffer)-1); \ + dial = address + ii; \ + i = 0; \ + UCPY(address, helpbuffer); +void EndpointAppPBX::action_dialing_h323(void) +{ + struct message *message; + struct dialing_info dialinginfo; + int i,j, ii; + struct port_list *portlist = ea_endpoint->ep_portlist; + char *dial; + char address_buffer[256], *address=address_buffer; + char host[128] = ""; + int ip_a=0, ip_b=0, ip_c=0, ip_d=0, port=0; + struct route_param *rparam; + char helpbuffer[128]; + + /* check if address parameter is given */ + if ((rparam = routeparam(e_action, PARAM_ADDRESS))) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): complete address is given by parameter: '%s'\n", ea_endpoint->ep_serial, rparam->string_value); + SCPY(address_buffer, rparam->string_value); + goto address_complete; + } + + /* check for given host */ + if ((rparam = routeparam(e_action, PARAM_HOST))) + if (rparam->string_value[0]) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): host is given by parameter: '%s'\n", ea_endpoint->ep_serial, rparam->string_value); + SCPY(host, rparam->string_value); + if ((rparam = routeparam(e_action, PARAM_PORT))) + { + if (rparam->integer_value>0 && rparam->integer_value<65536) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): port is given with the host by parameter: %d\n", ea_endpoint->ep_serial, rparam->integer_value); + if (strlen(host)+7 < sizeof(host)) + UPRINT(host, ":%d/", rparam->integer_value); + } else + { + SCAT(host, "/"); + } + } else + { + SCAT(host, "/"); + } + } + + /* include prefix and put 'host'(port) in front */ + if ((rparam = routeparam(e_action, PARAM_PREFIX))) + { + SPRINT(address_buffer, "%s%s%s", host, rparam->string_value, e_extdialing); + } else + { + if (host[0]) + { + SPRINT(address_buffer, "%s%s", host, e_extdialing); + printf("address:%s host %s extdialing %s\n",address,host, e_extdialing); + } else { + address = e_extdialing; + } + } + dial = address; + + /* check dialing */ + /* check for ip-number only with numerical digits (can be dialed by any phone) */ + if (host[0]) + { + dial = address + strlen(host); + goto check_user; /* we have complete host (port) */ + } + i = 0; + while(i < 12) + { + if (dial[i] == '\0') + return; /* unfinished */ + if (dial[i]<'0' || dial[i]>'9') + goto check_complex; + i++; + + if (i == 3) + { + ip_a = (dial[0]-'0')*100 + (dial[1]-'0')*10 + (dial[2]-'0'); + if (ip_a > 255) + { + invalid: + printlog("%3d action H323 address '%s' is invalid.\n", ea_endpoint->ep_serial, address); + message_disconnect_port(portlist, CAUSE_INVALID, LOCATION_PRIVATE_LOCAL, ""); + new_state(EPOINT_STATE_OUT_DISCONNECT); + set_tone(portlist,"cause_1c"); + return; + } + } + if (i == 6) + { + ip_b = (dial[3]-'0')*100 + (dial[4]-'0')*10 + (dial[5]-'0'); + if (ip_b > 255) + goto invalid; + } + if (i == 9) + { + ip_c = (dial[6]-'0')*100 + (dial[7]-'0')*10 + (dial[8]-'0'); + if (ip_c > 255) + goto invalid; + } + if (i == 12) + { + ip_d = (dial[9]-'0')*100 + (dial[10]-'0')*10 + (dial[11]-'0'); + if (ip_d > 255) + goto invalid; + } + if (i==4 || i==7 || i==10) + { + if (dial[i-1] > '2') + goto invalid; + } + if (i==5 || i==8 || i==11) + { + if (dial[i-2]=='2' && dial[i-1]>'5') + goto invalid; + } + } + UPRINT(address, "%d.%d.%d.%d", ip_a, ip_b, ip_c, ip_d); + i = strlen(address); + goto address_complete; + + /* there are three stages of dialing: 1. ip, 2. port, 3. user, let's find out where we at */ + check_complex: + if (strchr(address, '@')) + { + dial = strchr(address, '\0'); + goto address_complete; + } + if (strchr(address, ':')) + { + dial = strchr(address, ':') + 1; + goto check_port; + } + if (strchr(address, '/')) + { + dial = strchr(address, '/') + 1; + goto check_user; + } + + /* get ip from ip-number */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): checking dialed for ip: %s\n", ea_endpoint->ep_serial, dial); + ip_a = ip_b = ip_c = ip_d = 0; + i = 0; + j = 0; + while(42) + { + if (j==4) + goto invalid; + if (ip_a > 255) + goto invalid; + if (dial[i]>='0' && dial[i]<='9') + ip_a = (ip_a*10) + dial[i]-'0'; + else if (dial[i]=='.' || dial[i]=='*') + { + dial[i] = '.'; +// if (i && dial[i-1]=='.') +// { +// /* add 0 if two dots */ +// UCPY(dial+i+1, dial+i); +// dial[i]='0'; +// i++; +// } + i++; + break; + } + else if (dial[i]=='#') + { + ip_d = ip_a; + ip_a = 0; + set_ip_macro + i++; + dial+= i; + goto address_complete; + } + else if (dial[i] == '\0') + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): ip so far: %d*\n", ea_endpoint->ep_serial, ip_a); + return; + } + else + goto invalid; + i++; + j++; + } + j = 0; + while(42) + { + if (j==4) + goto invalid; + if (ip_b > 255) + goto invalid; + if (dial[i]>='0' && dial[i]<='9') + ip_b = (ip_b*10) + dial[i]-'0'; + else if (dial[i]=='.' || dial[i]=='*') + { + dial[i] = '.'; + i++; + break; + } + else if (dial[i]=='#') + { + ip_d = ip_b; + ip_b = 0; + set_ip_macro + i++; + dial+= i; + goto address_complete; + } + else if (dial[i] == '\0') + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): ip so far: %d.%d*\n", ea_endpoint->ep_serial, ip_a, ip_b); + return; + } + else + goto invalid; + i++; + j++; + } + j = 0; + while(42) + { + if (j==4) + goto invalid; + if (ip_c > 255) + goto invalid; + if (dial[i]>='0' && dial[i]<='9') + ip_c = (ip_c*10) + dial[i]-'0'; + else if (dial[i]=='.' || dial[i]=='*') + { + dial[i] = '.'; + i++; + break; + } + else if (dial[i]=='#') + { + ip_d = ip_c; + ip_c = 0; + set_ip_macro + i++; + dial+= i; + goto address_complete; + } + else if (dial[i] == '\0') + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): ip so far: %d.%d.%d\n", ea_endpoint->ep_serial, ip_a, ip_b, ip_c); + return; + } + else + goto invalid; + i++; + j++; + } + j = 0; + while(42) + { + if (j==4) + goto invalid; + if (ip_d > 255) + goto invalid; + if (dial[i]>='0' && dial[i]<='9') + ip_d = (ip_d*10) + dial[i]-'0'; + else if (dial[i]=='*' || dial[i]==':') + { + set_ip_macro + dial[i] = ':'; + i++; + dial+= i; + goto check_port; + } + else if (dial[i]=='#') + { + set_ip_macro + i++; + dial+= i; + goto address_complete; + } + else if (dial[i] == '\0') + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): ip so far: %d.%d.%d.%d*\n", ea_endpoint->ep_serial, ip_a, ip_b, ip_c, ip_d); + return; + } + else + goto invalid; + i++; + j++; + } + + /* get port */ + check_port: + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): checking dialed for port: %s\n", ea_endpoint->ep_serial, dial); + port = 0; + i = 0; + j = 0; + while(42) + { + if (j==6) + goto invalid; + if (port > 65535) + goto invalid; + if (dial[i]>='0' && dial[i]<='9') + port = (port*10) + dial[i]-'0'; + else if (dial[i]=='*' || dial[i]=='/') + { + if (i) /* only if there is something entered */ + { + set_port_macro + dial[i] = '/'; + } else + { + i--; + UCPY(dial+i, dial+i+1); + dial[i] = '/'; + } + i++; + dial+= i; + goto check_user; + } + else if (dial[i]=='#') + { + set_port_macro + i++; + dial+= i; + goto address_complete; + } + else if (dial[i] == '\0') + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): h323 address so far: %s\n", ea_endpoint->ep_serial, address); + return; + } + else + goto invalid; + i++; + j++; + } + + /* get user */ + check_user: + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): checking dialed for user: %s\n", ea_endpoint->ep_serial, dial); + port = 0; + i = 0; + j = 0; + while(42) + { + if (dial[i]=='#') + { + dial[i] = '\0'; + /* convert to @-notation */ + SCPY(helpbuffer, strchr(address, '/')+1); + SCAT(helpbuffer, "@"); + *strchr(address, '/') = '\0'; + SCAT(helpbuffer, address); + UCPY(address, helpbuffer); + goto address_complete; + } + else if (dial[i] == '\0') + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): h323 address so far: %s\n", ea_endpoint->ep_serial, address); + return; + } + i++; + j++; + } + + address_complete: + /* send proceeding, because number is complete */ + set_tone(portlist, "proceeding"); + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_PROCEEDING); + message_put(message); + logmessage(message); + new_state(EPOINT_STATE_IN_PROCEEDING); + + memset(&dialinginfo, 0, sizeof(dialinginfo)); + dialinginfo.itype = INFO_ITYPE_H323; + dialinginfo.sending_complete = 1; + SPRINT(dialinginfo.number, "%s", address); + /* strip the # at the end */ + if (dialinginfo.number[0]) + if (dialinginfo.number[strlen(dialinginfo.number)-1] == '#') + dialinginfo.number[strlen(dialinginfo.number)-1] = '\0'; + + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): complete multi-dial string \"%s\"\n", ea_endpoint->ep_serial, dialinginfo.number); + + /* add or update internal call */ + printlog("%3d action H323 call to address %s.\n", ea_endpoint->ep_serial, dialinginfo.number); + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, MESSAGE_SETUP); + memcpy(&message->param.setup.dialinginfo, &dialinginfo, sizeof(struct dialing_info)); + memcpy(&message->param.setup.redirinfo, &e_redirinfo, sizeof(struct redir_info)); + memcpy(&message->param.setup.callerinfo, &e_callerinfo, sizeof(struct caller_info)); + memcpy(&message->param.setup.capainfo, &e_capainfo, sizeof(struct capa_info)); + message_put(message); +} +#else +void EndpointAppPBX::action_dialing_h323(void) +{ + struct port_list *portlist = ea_endpoint->ep_portlist; + + printlog("%3d action H323 stack not implemented.\n", ea_endpoint->ep_serial); + message_disconnect_port(portlist, CAUSE_UNIMPLEMENTED, LOCATION_PRIVATE_LOCAL, ""); + new_state(EPOINT_STATE_OUT_DISCONNECT); + set_tone(portlist,"cause_4f"); +} +#endif + +void EndpointAppPBX::action_dialing_chan(void) +{ + struct port_list *portlist = ea_endpoint->ep_portlist; + + printlog("%3d action channel API not implemented.\n", ea_endpoint->ep_serial); + message_disconnect_port(portlist, CAUSE_UNIMPLEMENTED, LOCATION_PRIVATE_LOCAL, ""); + new_state(EPOINT_STATE_OUT_DISCONNECT); + set_tone(portlist,"cause_4f"); +} + + +/* + * process dialing the "am" and record + */ +void EndpointAppPBX::action_dialing_vbox_record(void) +{ + struct dialing_info dialinginfo; + struct port_list *portlist = ea_endpoint->ep_portlist; + struct message *message; + struct extension ext; + struct route_param *rparam; + + portlist = ea_endpoint->ep_portlist; + + /* check for given extension */ + if (!(rparam = routeparam(e_action, PARAM_EXTENSION))) + { + printlog("%3d action VBOX-RECORD extension not given by parameter.\n", ea_endpoint->ep_serial); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): cannot record, because no 'extension' parameter has been specified.\n", ea_endpoint->ep_serial); + + new_state(EPOINT_STATE_OUT_DISCONNECT); + message_disconnect_port(portlist, CAUSE_SERVICEUNAVAIL, LOCATION_PRIVATE_LOCAL, ""); + set_tone(portlist, "cause_3f"); + return; + } + + /* check if extension exists */ + if (!read_extension(&ext, rparam->string_value)) + { + printlog("%3d action VBOX-RECORD given extension %s doesn't exist.\n", ea_endpoint->ep_serial, rparam->string_value); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): extension %s doesn't exist\n", ea_endpoint->ep_serial, rparam->string_value); + new_state(EPOINT_STATE_OUT_DISCONNECT); + message_disconnect_port(portlist, CAUSE_UNALLOCATED, LOCATION_PRIVATE_LOCAL, ""); + set_tone(portlist, "cause_86"); + return; + } + + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): terminal %s dialing extension: %s\n", ea_endpoint->ep_serial, e_terminal, rparam->string_value); + + /* check if internal calls are denied */ + if (e_ext.rights < 1) + { + printlog("%3d action VBOX-RECORD calls are denied for this caller.\n", ea_endpoint->ep_serial); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): internal call from terminal %s denied.\n", ea_endpoint->ep_serial, e_terminal); + new_state(EPOINT_STATE_OUT_DISCONNECT); + message_disconnect_port(portlist, CAUSE_REJECTED, LOCATION_PRIVATE_LOCAL, ""); + set_tone(portlist, "cause_81"); + return; + } + + set_tone(portlist, "proceeding"); + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_PROCEEDING); + message_put(message); + logmessage(message); + new_state(EPOINT_STATE_IN_PROCEEDING); + + memset(&dialinginfo, 0, sizeof(dialinginfo)); + dialinginfo.itype = INFO_ITYPE_VBOX; + dialinginfo.sending_complete = 1; + SCPY(dialinginfo.number, rparam->string_value); + + /* append special announcement (if given) */ + if ((rparam = routeparam(e_action, PARAM_ANNOUNCEMENT))) + if (rparam->string_value[0]) + { + SCAT(dialinginfo.number, ","); + SCAT(dialinginfo.number, rparam->string_value); + } + + /* add or update internal call */ + printlog("%3d action VBOX-RECORD call to extension %s.\n", ea_endpoint->ep_serial, dialinginfo.number); + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, MESSAGE_SETUP); + memcpy(&message->param.setup.dialinginfo, &dialinginfo, sizeof(struct dialing_info)); + memcpy(&message->param.setup.redirinfo, &e_redirinfo, sizeof(struct redir_info)); + memcpy(&message->param.setup.callerinfo, &e_callerinfo, sizeof(struct caller_info)); + memcpy(&message->param.setup.capainfo, &e_capainfo, sizeof(struct capa_info)); + message_put(message); +} + + +/* + * process partyline + */ +void EndpointAppPBX::action_init_partyline(void) +{ + class Call *call; + class CallPBX *callpbx; + struct port_list *portlist = ea_endpoint->ep_portlist; + struct message *message; + struct route_param *rparam; + int partyline; + struct call_relation *relation; + + portlist = ea_endpoint->ep_portlist; + + /* check for given extension */ + if (!(rparam = routeparam(e_action, PARAM_ROOM))) + { + printlog("%3d action PARTYLINE no 'room' parameter given at routing.\n", ea_endpoint->ep_serial); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): missing parameter 'room'.\n", ea_endpoint->ep_serial); + noroom: + new_state(EPOINT_STATE_OUT_DISCONNECT); + message_disconnect_port(portlist, CAUSE_SERVICEUNAVAIL, LOCATION_PRIVATE_LOCAL, ""); + set_tone(portlist, "cause_3f"); + return; + } + if (rparam->integer_value <= 0) + { + printlog("%3d action PARTYLINE 'room' value must be greate 0.\n", ea_endpoint->ep_serial); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): invalid value for 'room'.\n", ea_endpoint->ep_serial); + goto noroom; + } + partyline = rparam->integer_value; + + /* don't create call if partyline exists */ + call = call_first; + while(call) + { + if (call->c_type == CALL_TYPE_PBX) + { + callpbx = (class CallPBX *)call; + if (callpbx->c_partyline == rparam->integer_value) + break; + } + call = call->next; + } + if (!call) + { + /* create call */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): Creating new call instance.\n", ea_endpoint->ep_serial); + if (!(call = new CallPBX(ea_endpoint))) + { + nores: + /* resource not available */ + message_disconnect_port(portlist, CAUSE_RESSOURCEUNAVAIL, LOCATION_PRIVATE_LOCAL, ""); + new_state(EPOINT_STATE_OUT_DISCONNECT); + set_tone(portlist,"cause_22"); + return; + } + } else + { +//NOTE: callpbx must be set here + /* add relation to existing call */ + if (!(relation=callpbx->add_relation())) + { + goto nores; + } + relation->type = RELATION_TYPE_SETUP; + relation->channel_state = CHANNEL_STATE_CONNECT; + relation->rx_state = NOTIFY_STATE_ACTIVE; + relation->tx_state = NOTIFY_STATE_ACTIVE; + relation->epoint_id = ea_endpoint->ep_serial; + + } + ea_endpoint->ep_call_id = call->c_serial; + + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): terminal %s dialing room: %d\n", ea_endpoint->ep_serial, e_terminal, partyline); + + set_tone(portlist, "proceeding"); + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_PROCEEDING); + message_put(message); + logmessage(message); + new_state(EPOINT_STATE_IN_PROCEEDING); + + /* send setup to call */ + printlog("%3d action PARTYLINE call to room %d.\n", ea_endpoint->ep_serial, partyline); + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, MESSAGE_SETUP); + message->param.setup.partyline = partyline; + memcpy(&message->param.setup.dialinginfo, &e_dialinginfo, sizeof(struct dialing_info)); + memcpy(&message->param.setup.redirinfo, &e_redirinfo, sizeof(struct redir_info)); + memcpy(&message->param.setup.callerinfo, &e_callerinfo, sizeof(struct caller_info)); + memcpy(&message->param.setup.capainfo, &e_capainfo, sizeof(struct capa_info)); + message_put(message); +} + + +/* + * process hangup of all calls + */ +void EndpointAppPBX::action_hangup_call(void) +{ + int i; + + printlog("%3d action CALL to '%s' hangs up.\n", ea_endpoint->ep_serial, e_dialinginfo.number); + /* check */ + if (e_terminal[0] == '\0') + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): terminal %s: cannot store last dialed number '%s' because caller is unknown (not internal).\n", ea_endpoint->ep_serial, e_terminal, e_dialinginfo.number); + return; + } + if (!(read_extension(&e_ext, e_terminal))) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): terminal %s: cannot store last dialed number '%s' because cannot read settings.\n", ea_endpoint->ep_serial, e_terminal, e_dialinginfo.number); + return; + } + if (e_dialinginfo.number[0] == '\0') + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): terminal %s: cannot store last dialed number because nothing was dialed.\n", ea_endpoint->ep_serial, e_terminal); + return; + } + if (!strcmp(e_dialinginfo.number, e_ext.last_out[0])) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): terminal %s: cannot store last dialed number '%s' because it is identical with the last one.\n", ea_endpoint->ep_serial, e_terminal, e_dialinginfo.number); + return; + } + + /* insert */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): terminal %s: storing last number '%s'.\n", ea_endpoint->ep_serial, e_terminal, e_dialinginfo.number); + i = MAX_REMEMBER-1; + while(i) + { + UCPY(e_ext.last_out[i], e_ext.last_out[i-1]); + i--; + } + SCPY(e_ext.last_out[0], e_dialinginfo.number); + + /* write extension */ + write_extension(&e_ext, e_terminal); +} + + +/* + * process dialing 'login' + */ +void EndpointAppPBX::action_dialing_login(void) +{ + struct port_list *portlist = ea_endpoint->ep_portlist; + struct message *message; + char *extension; + struct route_param *rparam; + + /* extension parameter */ + if ((rparam = routeparam(e_action, PARAM_EXTENSION))) + { + /* extension is given by parameter */ + extension = rparam->string_value; + if (extension[0] == '\0') + return; + if (!read_extension(&e_ext, extension)) + { + printlog("%3d action LOGIN given extension %s doesn't exist.\n", ea_endpoint->ep_serial, extension); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): given extension %s not found.\n", ea_endpoint->ep_serial, extension); + /* extension doesn't exist */ + new_state(EPOINT_STATE_OUT_DISCONNECT); + message_disconnect_port(portlist, CAUSE_UNALLOCATED, LOCATION_PRIVATE_LOCAL, ""); + set_tone(portlist, "cause_86"); + return; + } + } else + { + /* extension must be given by dialstring */ + extension = e_extdialing; + if (extension[0] == '\0') + return; + if (!read_extension(&e_ext, extension)) + { + printlog("%3d action LOGIN given extension %s incomplete or not found..\n", ea_endpoint->ep_serial, extension); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): extension %s incomplete or not found\n", ea_endpoint->ep_serial, extension); + return; + } + } + + /* we changed our extension */ + SCPY(e_terminal, extension); + new_state(EPOINT_STATE_CONNECT); + e_dtmf = 1; + e_connectedmode = 1; + + /* send connect with extension's caller id (COLP) */ + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_CONNECT); + SCPY(message->param.connectinfo.id, e_ext.callerid); + message->param.connectinfo.ntype = e_ext.callerid_type; + if (e_ext.callerid_present==INFO_PRESENT_ALLOWED && e_callerinfo.present==INFO_PRESENT_RESTRICTED) + message->param.connectinfo.present = INFO_PRESENT_RESTRICTED; + else message->param.connectinfo.present = e_ext.callerid_present; + /* handle restricted caller ids */ + apply_callerid_restriction(e_ext.anon_ignore, portlist->port_type, message->param.connectinfo.id, &message->param.connectinfo.ntype, &message->param.connectinfo.present, &message->param.connectinfo.screen, message->param.connectinfo.voip, message->param.connectinfo.intern, message->param.connectinfo.name); + /* display callerid if desired for extension */ + SCPY(message->param.connectinfo.display, apply_callerid_display(message->param.connectinfo.id, message->param.connectinfo.itype, message->param.connectinfo.ntype, message->param.connectinfo.present, message->param.connectinfo.screen, message->param.connectinfo.voip, message->param.connectinfo.intern, message->param.connectinfo.name)); + message->param.connectinfo.ntype = e_ext.callerid_type; + message_put(message); + logmessage(message); + + /* set our caller id */ + SCPY(e_callerinfo.id, e_ext.callerid); + e_callerinfo.ntype = e_ext.callerid_type; + e_callerinfo.present = e_ext.callerid_present; + + /* enable connectedmode */ + e_connectedmode = 1; + e_dtmf = 1; + + if (!(rparam = routeparam(e_action, PARAM_NOPASSWORD))) + { + /* make call state to enter password */ + printlog("%3d action LOGIN to extension %s, ask for password.\n", ea_endpoint->ep_serial, e_terminal); + new_state(EPOINT_STATE_IN_OVERLAP); + e_ruleset = NULL; + e_rule = NULL; + e_action = &action_password; + e_match_timeout = 0; + e_match_to_action = NULL; + e_dialinginfo.number[0] = '\0'; + e_extdialing = strchr(e_dialinginfo.number, '\0'); + + /* set timeout */ + e_password_timeout = now+20; + + /* do dialing */ + process_dialing(); + } else + { + /* make call state */ + new_state(EPOINT_STATE_IN_OVERLAP); + e_ruleset = ruleset_main; + if (e_ruleset) + e_rule = e_ruleset->rule_first; + e_action = NULL; + e_dialinginfo.number[0] = '\0'; + e_extdialing = e_dialinginfo.number; + set_tone(portlist, "dialpbx"); + } +} + + +/* + * process init 'change_callerid' + */ +void EndpointAppPBX::action_init_change_callerid(void) +{ + struct port_list *portlist = ea_endpoint->ep_portlist; + + if (!e_ext.change_callerid) + { + /* service not available */ + printlog("%3d action CHANGE-CALLERID denied for this caller.\n", ea_endpoint->ep_serial); + message_disconnect_port(portlist, CAUSE_SERVICEUNAVAIL, LOCATION_PRIVATE_LOCAL, ""); + new_state(EPOINT_STATE_OUT_DISCONNECT); + set_tone(portlist,"cause_87"); + return; + } +} + +/* process dialing callerid + */ +void EndpointAppPBX::_action_callerid_calleridnext(int next) +{ + struct port_list *portlist = ea_endpoint->ep_portlist; + struct route_param *rparam; + char buffer[64], *callerid; + + if ((rparam = routeparam(e_action, PARAM_CALLERID))) + { + /* the caller ID is given by parameter */ + callerid = rparam->string_value; + } else + { + /* caller ID is dialed */ + if (!strchr(e_extdialing, '#')) + { + /* no complete ID yet */ + return; + } + *strchr(e_extdialing, '#') = '\0'; + callerid = e_extdialing; + } + + /* given callerid type */ + if ((rparam = routeparam(e_action, PARAM_CALLERIDTYPE))) + switch(rparam->integer_value) + { + case INFO_NTYPE_SUBSCRIBER: + SPRINT(buffer, "s%s", callerid); + callerid = buffer; + break; + case INFO_NTYPE_NATIONAL: + SPRINT(buffer, "n%s", callerid); + callerid = buffer; + break; + case INFO_NTYPE_INTERNATIONAL: + SPRINT(buffer, "i%s", callerid); + callerid = buffer; + break; + default: + SPRINT(buffer, "%s", callerid); + callerid = buffer; + break; + } + + /* caller id complete, dialing with new caller id */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): terminal %s: storing callerid '%s' for all following calls.\n", ea_endpoint->ep_serial, e_terminal, callerid); + /* write new parameters */ + if (read_extension(&e_ext, e_terminal)) + { + if (callerid[0] == '\0') + { + /* no caller id */ + (!next)?e_ext.callerid_present:e_ext.id_next_call_present = INFO_PRESENT_RESTRICTED; + } else + { + /* new caller id */ + (!next)?e_ext.callerid_present:e_ext.id_next_call_present = INFO_PRESENT_ALLOWED; + if ((rparam = routeparam(e_action, PARAM_PRESENT))) if (rparam->integer_value == 0) + (!next)?e_ext.callerid_present:e_ext.id_next_call_present = INFO_PRESENT_RESTRICTED; + if (e_ext.callerid_type == INFO_NTYPE_UNKNOWN) /* if callerid is unknown, the given id is not nationalized */ + { + SCPY((!next)?e_ext.callerid:e_ext.id_next_call, callerid); + (!next)?e_ext.callerid_type:e_ext.id_next_call_type = INFO_NTYPE_UNKNOWN; + } else + { + SCPY((!next)?e_ext.callerid:e_ext.id_next_call, nationalize_callerinfo(callerid,&((!next)?e_ext.callerid_type:e_ext.id_next_call_type))); + } + if (!next) e_ext.id_next_call_type = -1; + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): nationalized callerid: '%s' type=%d\n", ea_endpoint->ep_serial, (!next)?e_ext.callerid:e_ext.id_next_call, (!next)?e_ext.callerid_type:e_ext.id_next_call_type); + } + write_extension(&e_ext, e_terminal); + } + + /* function activated */ + printlog("%3d action CHANGE-CALLERID caller changes caller id%s to '%s'.\n", ea_endpoint->ep_serial, next?" of next call":"", callerid); + message_disconnect_port(portlist, CAUSE_NORMAL, LOCATION_PRIVATE_LOCAL, ""); + new_state(EPOINT_STATE_OUT_DISCONNECT); + set_tone(portlist,"activated"); +} + +/* process dialing callerid for all call + */ +void EndpointAppPBX::action_dialing_callerid(void) +{ + _action_callerid_calleridnext(0); +} + +/* process dialing callerid for next call + */ +void EndpointAppPBX::action_dialing_calleridnext(void) +{ + _action_callerid_calleridnext(1); +} + + +/* + * process init 'change_forward' + */ +void EndpointAppPBX::action_init_change_forward(void) +{ + struct port_list *portlist = ea_endpoint->ep_portlist; + + if (!e_ext.change_forward) + { + printlog("%3d action CHANGE-FORWARD denied for this caller.\n", ea_endpoint->ep_serial); + /* service not available */ + message_disconnect_port(portlist, CAUSE_SERVICEUNAVAIL, LOCATION_PRIVATE_LOCAL, ""); + new_state(EPOINT_STATE_OUT_DISCONNECT); + set_tone(portlist,"cause_87"); + return; + } +} + +/* process dialing forwarding + */ +void EndpointAppPBX::action_dialing_forward(void) +{ + struct port_list *portlist = ea_endpoint->ep_portlist; + int diversion = INFO_DIVERSION_CFU; + char *dest = e_extdialing; + struct route_param *rparam; + + /* if diversion type is given */ + if ((rparam = routeparam(e_action, PARAM_DIVERSION))) + diversion = rparam->integer_value; + + if ((rparam = routeparam(e_action, PARAM_DEST))) + { + /* if destination is given */ + dest = rparam->string_value; + } else + { + if (!strchr(e_extdialing, '#')) + return; + *strchr(e_extdialing, '#') = '\0'; + dest = e_extdialing; + } + + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): terminal %s: storing forwarding to '%s'.\n", ea_endpoint->ep_serial, e_terminal, dest); + if (read_extension(&e_ext, e_terminal)) + { + switch(diversion) + { + case INFO_DIVERSION_CFU: + printlog("%3d action CHANGE-FORWARD changing CFU (unconditional) to '%s'.\n", ea_endpoint->ep_serial, dest); + SCPY(e_ext.cfu, dest); + break; + case INFO_DIVERSION_CFB: + printlog("%3d action CHANGE-FORWARD changing CFB (busy) to '%s'.\n", ea_endpoint->ep_serial, dest); + SCPY(e_ext.cfb, dest); + break; + case INFO_DIVERSION_CFNR: + if ((rparam = routeparam(e_action, PARAM_DELAY))) + e_ext.cfnr_delay = rparam->integer_value; + printlog("%3d action CHANGE-FORWARD changing CFNR (no response) to '%s' with delay=%d.\n", ea_endpoint->ep_serial, dest, e_ext.cfnr_delay); + SCPY(e_ext.cfnr, dest); + break; + case INFO_DIVERSION_CFP: + printlog("%3d action CHANGE-FORWARD changing CFP (parallel) to '%s'.\n", ea_endpoint->ep_serial, dest); + SCPY(e_ext.cfp, dest); + break; + } + write_extension(&e_ext, e_terminal); + } + /* function (de)activated */ + message_disconnect_port(portlist, CAUSE_NORMAL, LOCATION_PRIVATE_LOCAL, ""); + new_state(EPOINT_STATE_OUT_DISCONNECT); + if (dest[0]) + set_tone(portlist,"activated"); + else + set_tone(portlist,"deactivated"); +} + + +/* process dialing redial +*/ +void EndpointAppPBX::action_init_redial_reply(void) +{ + struct port_list *portlist = ea_endpoint->ep_portlist; + + e_select = 0; + if (!e_ext.last_out[0]) + { + printlog("%3d action REDIAL/REPLY no number available to dial.\n", ea_endpoint->ep_serial); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): no stored last number.\n", ea_endpoint->ep_serial); + new_state(EPOINT_STATE_OUT_DISCONNECT); + message_disconnect_port(portlist, CAUSE_SERVICEUNAVAIL, LOCATION_PRIVATE_LOCAL, ""); + set_tone(portlist, "cause_3f"); + return; + } +} + +/* process dialing redial +*/ +void EndpointAppPBX::_action_redial_reply(int in) +{ + struct message *message; + char *last; + struct route_param *rparam; + + last = (in)?e_ext.last_in[0]:e_ext.last_out[0]; + + /* if no display is available */ + if (!e_ext.display_menu) + goto nodisplay; + if (ea_endpoint->ep_portlist->port_type!=PORT_TYPE_DSS1_NT_IN && ea_endpoint->ep_portlist->port_type!=PORT_TYPE_DSS1_NT_OUT) + goto nodisplay; + + /* if select is not given */ + if (!(rparam = routeparam(e_action, PARAM_SELECT))) + goto nodisplay; + + /* scroll menu */ + if (e_extdialing[0]=='*' || e_extdialing[0]=='1') + { + /* find prev entry */ + e_select--; + if (e_select < 0) + e_select = 0; + + } + if (e_extdialing[0]=='#' || e_extdialing[0]=='3') + { + /* find next entry */ + e_select++; + if (e_select >= MAX_REMEMBER) + e_select--; + else if (in) + if (e_ext.last_in[e_select][0] == '\0') + e_select--; + else + if (e_ext.last_out[e_select][0] == '\0') + e_select--; + + } + + last = (in)?e_ext.last_in[e_select]:e_ext.last_out[e_select]; + if (e_extdialing[0]=='0' || e_extdialing[0]=='2') + { + nodisplay: + printlog("%3d action REDIAL/REPLY dialing '%s'.\n", ea_endpoint->ep_serial, last); + SCPY(e_dialinginfo.number, last); + e_extdialing = e_dialinginfo.number; + e_action = NULL; + process_dialing(); + return; + } + e_extdialing[0] = '\0'; + + /* send display message to port */ + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_portlist->port_id, EPOINT_TO_PORT, MESSAGE_NOTIFY); + if (!strncmp(last, "extern:", 7)) + SPRINT(message->param.notifyinfo.display, "(%d) %s ext", e_select+1, last+7); + else + if (!strncmp(last, "intern:", 7)) + SPRINT(message->param.notifyinfo.display, "(%d) %s int", e_select+1, last+7); + else + if (!strncmp(last, "h323:", 5)) + SPRINT(message->param.notifyinfo.display, "(%d) %s h323", e_select+1, last+5); + else + if (!strncmp(last, "chan:", 4)) + SPRINT(message->param.notifyinfo.display, "(%d) %s chan", e_select+1, last+5); + else + if (!strncmp(last, "vbox:", 5)) + SPRINT(message->param.notifyinfo.display, "(%d) %s vbox", e_select+1, last+5); + else + SPRINT(message->param.notifyinfo.display, "(%d) %s", e_select+1, (last[0])?last:"- empty -"); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): terminal %s sending display:%s\n", ea_endpoint->ep_serial, e_terminal, message->param.notifyinfo.display); + message_put(message); + logmessage(message); +} + +/* process dialing redial +*/ +void EndpointAppPBX::action_dialing_redial(void) +{ + _action_redial_reply(0); +} + +/* process dialing reply +*/ +void EndpointAppPBX::action_dialing_reply(void) +{ + _action_redial_reply(1); +} + + +/* dialing powerdialing delay + */ +void EndpointAppPBX::action_dialing_powerdial(void) +{ + struct port_list *portlist = ea_endpoint->ep_portlist; + struct message *message; + struct route_param *rparam; + + /* power dialing only possible if we have a last dialed number */ + if (!e_ext.last_out[0]) + { + printlog("%3d action POWERDIAL no number available to redial.\n", ea_endpoint->ep_serial); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): no stored last number.\n", ea_endpoint->ep_serial); + new_state(EPOINT_STATE_OUT_DISCONNECT); + message_disconnect_port(portlist, CAUSE_SERVICEUNAVAIL, LOCATION_PRIVATE_LOCAL, ""); + set_tone(portlist, "cause_3f"); + return; + } + + /* limit */ + if ((rparam = routeparam(e_action, PARAM_LIMIT))) + { + e_powerlimit = rparam->integer_value; + } else + { + e_powerlimit = 0; + } + + /* delay */ + if ((rparam = routeparam(e_action, PARAM_DELAY))) + { + e_powerdelay = rparam->integer_value; + } else + { + /* delay incomplete */ + if (!strchr(e_extdialing, '#')) + return; + *strchr(e_extdialing, '#') = '\0'; + e_powerdelay = e_extdialing[0]?atoi(e_extdialing): 0; + } + + if (e_powerdelay < 1) + e_powerdelay = 0.2; + printlog("%3d action POWERDIAL to '%s' with delay=%d.\n", ea_endpoint->ep_serial, e_ext.last_out[0], (int)e_powerdelay); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): powerdialing to '%s' (delay=%d).\n", ea_endpoint->ep_serial, e_ext.last_out[0], (int)e_powerdelay); + + /* send connect to avoid overlap timeout */ +// new_state(EPOINT_STATE_CONNECT); connect may prevent further dialing + if (e_terminal[0]) + e_dtmf = 1; + memset(&e_connectinfo, 0, sizeof(e_connectinfo)); + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_portlist->port_id, EPOINT_TO_PORT, MESSAGE_CONNECT); + message_put(message); + logmessage(message); + + /* do dialing */ + SCPY(e_dialinginfo.number, e_ext.last_out[0]); + e_powerdialing = -1; /* indicates the existence of powerdialing but no redial time given */ + e_powercount = 0; + e_action = NULL; + process_dialing(); +} + + +/* dialing callback + */ +void EndpointAppPBX::action_dialing_callback(void) +{ + struct port_list *portlist = ea_endpoint->ep_portlist; + struct route_param *rparam; + struct extension cbext; + + portlist = ea_endpoint->ep_portlist; + + /* check given extension */ + if (!(rparam = routeparam(e_action, PARAM_EXTENSION))) + { + printlog("%3d action CALLBACK no extension was specified in routing.conf.\n", ea_endpoint->ep_serial); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): rejecting callback, because no extension was specified in routing.conf\n", ea_endpoint->ep_serial); + + disconnect: + new_state(EPOINT_STATE_OUT_DISCONNECT); + message_disconnect_port(portlist, CAUSE_SERVICEUNAVAIL, LOCATION_PRIVATE_LOCAL, ""); + set_tone(portlist, "cause_3f"); + e_action = NULL; + e_cbcaller[0] = e_cbdialing[0] = '\0'; + return; + } + + /* if extension is given */ + SCPY(e_cbcaller, rparam->string_value); + if (e_cbcaller[0] == '\0') + { + printlog("%3d action CALLBACK extension specified in routing.conf is an empty string.\n", ea_endpoint->ep_serial); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): rejecting callback, because given extension is an empty string.\n", ea_endpoint->ep_serial); + goto disconnect; + } + + /* read callback extension */ + memset(&cbext, 0, sizeof(cbext)); + if (!read_extension(&cbext, e_cbcaller)) + { + printlog("%3d action CALLBACK extension '%s' specified in routing.conf doesn't exist.\n", ea_endpoint->ep_serial, e_cbcaller); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): rejecting callback, because given extension does not exist.\n", ea_endpoint->ep_serial); + goto disconnect; + } + + /* if password is not given */ + if (cbext.password[0] == '\0') + { + printlog("%3d action CALLBACK extension '%s' has no password specified.\n", ea_endpoint->ep_serial, e_cbcaller); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): rejecting callback, because no password is available in given extension (%s).\n", ea_endpoint->ep_serial, e_cbcaller); + goto disconnect; + } + + /* callback only possible if callerid exists OR it is given */ + if ((rparam = routeparam(e_action, PARAM_CALLTO))) + SCPY(e_cbto, rparam->string_value); + if (e_cbto[0]) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): callback to given number: '%s'\n", ea_endpoint->ep_serial, e_cbto); + printlog("%3d action CALLBACK callback to given number: '%s'\n", ea_endpoint->ep_serial, e_cbto); + SCPY(e_callerinfo.id, e_cbto); + e_callerinfo.ntype = INFO_NTYPE_UNKNOWN; + e_callerinfo.present = INFO_PRESENT_ALLOWED; + } + if (e_callerinfo.id[0]=='\0' || e_callerinfo.present==INFO_PRESENT_NOTAVAIL) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): rejecting callback, because no caller id is available\n", ea_endpoint->ep_serial); + printlog("%3d action CALLBACK not possible because caller ID is not available.\n", ea_endpoint->ep_serial); + goto disconnect; + } + /* present id */ + e_callerinfo.present = INFO_PRESENT_ALLOWED; + +} + +/* + * process hangup 'callback' + */ +void EndpointAppPBX::action_hangup_callback(void) +{ + struct route_param *rparam; + int delay; + + /* set delay */ + delay = 2; /* default value */ + if ((rparam = routeparam(e_action, PARAM_DELAY))) + if (rparam->integer_value>0) + delay = rparam->integer_value; + + /* dialing after callback */ + if ((rparam = routeparam(e_action, PARAM_PREFIX))) + SCPY(e_cbdialing, rparam->string_value); + else + SCPY(e_cbdialing, e_extdialing); + + printlog("%3d action CALLBACK extension=%s callerid='%s' delay='%d' dialing after callback='%s' .\n", ea_endpoint->ep_serial, e_cbcaller, e_callerinfo.id, delay, e_cbdialing); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): caller '%s', callerid '%s', dialing '%s', delay %d\n", ea_endpoint->ep_serial, e_cbcaller, e_callerinfo.id, e_cbdialing, delay); + + /* set time to callback */ + e_callback = now_d + delay; +} + + +/* + * dialing action abbreviation + */ +void EndpointAppPBX::action_dialing_abbrev(void) +{ + struct port_list *portlist = ea_endpoint->ep_portlist; + char *abbrev, *phone, *name; + int result; + + portlist = ea_endpoint->ep_portlist; + + /* abbrev dialing is only possible if we have a caller defined */ + if (!e_terminal[0]) + { + printlog("%3d action ABBREVIATION only possible for internal callers.\n", ea_endpoint->ep_serial); + new_state(EPOINT_STATE_OUT_DISCONNECT); + message_disconnect_port(portlist, CAUSE_SERVICEUNAVAIL, LOCATION_PRIVATE_LOCAL, ""); + set_tone(portlist, "cause_3f"); + return; + } + + /* check abbreviation */ + abbrev = e_extdialing; + phone = NULL; + name = NULL; + result = parse_phonebook(e_terminal, &abbrev, &phone, &name); + if (result == 0) + { + printlog("%3d action ABBREVIATION '%s' not found.\n", ea_endpoint->ep_serial, abbrev); + new_state(EPOINT_STATE_OUT_DISCONNECT); + message_disconnect_port(portlist, CAUSE_UNALLOCATED, LOCATION_PRIVATE_LOCAL, ""); + set_tone(portlist, "cause_01"); + return; + } + if (result == -1) /* may match if more digits are dialed */ + { + return; + } + + /* dial abbreviation */ + printlog("%3d action ABBREVIATION mapping '%s' to '%s' (%s), dialing...\n", ea_endpoint->ep_serial, abbrev, phone, name?name:"unknown"); + SCPY(e_dialinginfo.number, phone); + e_extdialing = e_dialinginfo.number; + e_action = NULL; + process_dialing(); +} + + +/* process dialing 'test' + */ +void EndpointAppPBX::action_dialing_test(void) +{ + unsigned int cause; + char causestr[16]; + struct port_list *portlist = ea_endpoint->ep_portlist; + struct message *message; + class Port *port; + char testcode[32] = ""; + struct route_param *rparam; + + /* given testcode */ + if ((rparam = routeparam(e_action, PARAM_PREFIX))) + SCPY(testcode, rparam->string_value); + SCAT(testcode, e_extdialing); + + switch(testcode[0]) + { + case '1': + printlog("%3d action TESTMODE executing 'proceeding' test.\n", ea_endpoint->ep_serial); + new_state(EPOINT_STATE_IN_PROCEEDING); + set_tone(portlist, "proceeding"); + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_PROCEEDING); + message_put(message); + logmessage(message); + break; + + case '2': + printlog("%3d action TESTMODE executing 'alerting' test.\n", ea_endpoint->ep_serial); + new_state(EPOINT_STATE_IN_ALERTING); + set_tone(portlist, "ringpbx"); + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_ALERTING); + message_put(message); + logmessage(message); + break; + + case '3': + printlog("%3d action TESTMODE executing 'echo connect' test.\n", ea_endpoint->ep_serial); + new_state(EPOINT_STATE_CONNECT); + if (e_terminal[0]) + e_dtmf = 1; + set_tone(portlist, NULL); + memset(&e_connectinfo, 0, sizeof(e_connectinfo)); + SCPY(e_connectinfo.id, e_callerinfo.id); + SCPY(e_connectinfo.intern, e_callerinfo.intern); + SCPY(e_connectinfo.voip, e_callerinfo.voip); + e_connectinfo.itype = e_callerinfo.itype; + e_connectinfo.ntype = e_callerinfo.ntype; + e_connectinfo.present = e_callerinfo.present; + e_connectinfo.screen = e_callerinfo.screen; + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_CONNECT); + memcpy(&message->param.connectinfo, &e_connectinfo, sizeof(struct connect_info)); + /* handle restricted caller ids */ + apply_callerid_restriction(e_ext.anon_ignore, portlist->port_type, message->param.connectinfo.id, &message->param.connectinfo.ntype, &message->param.connectinfo.present, &message->param.connectinfo.screen, message->param.connectinfo.voip, message->param.connectinfo.intern, message->param.connectinfo.name); + /* display callerid if desired for extension */ + SCPY(message->param.connectinfo.display, apply_callerid_display(message->param.connectinfo.id, message->param.connectinfo.itype, message->param.connectinfo.ntype, message->param.connectinfo.present, message->param.connectinfo.screen, message->param.connectinfo.voip, message->param.connectinfo.intern, message->param.connectinfo.name)); + message_put(message); + logmessage(message); + + port = find_port_id(portlist->port_id); + if (port) + { + port->set_echotest(1); + } + break; + + case '4': + printlog("%3d action TESTMODE executing 'tone connect' test.\n", ea_endpoint->ep_serial); + new_state(EPOINT_STATE_CONNECT); + if (e_terminal[0]) + e_dtmf = 1; + memset(&e_connectinfo, 0, sizeof(e_connectinfo)); + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_CONNECT); + message_put(message); + logmessage(message); + set_tone(portlist, "test"); + break; + + case '5': + printlog("%3d action TESTMODE executing 'hold music' test.\n", ea_endpoint->ep_serial); + new_state(EPOINT_STATE_CONNECT); + if (e_terminal[0]) + e_dtmf = 1; + memset(&e_connectinfo, 0, sizeof(e_connectinfo)); + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_CONNECT); + message_put(message); + logmessage(message); + set_tone(portlist, "hold"); + break; + + case '6': + if (strlen(testcode) < 4) + break; + testcode[4] = '\0'; + cause = atoi(testcode+1); + if (cause > 255) + cause = 0; + printlog("%3d action TESTMODE executing 'announcement' test with cause %d.\n", ea_endpoint->ep_serial, cause); + new_state(EPOINT_STATE_CONNECT); + if (e_terminal[0]) + e_dtmf = 1; + SPRINT(causestr,"cause_%02x",cause); + memset(&e_connectinfo, 0, sizeof(e_connectinfo)); + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_CONNECT); + message_put(message); + logmessage(message); + set_tone(portlist, causestr); + break; + + case '7': + if (strlen(testcode) < 4) + break; + testcode[4] = '\0'; + cause = atoi(testcode+1); + if (cause > 127) + cause = 0; + printlog("%3d action TESTMODE executing 'disconnect' test with cause %d.\n", ea_endpoint->ep_serial, cause); + new_state(EPOINT_STATE_OUT_DISCONNECT); + SPRINT(causestr,"cause_%02x",cause); + message_disconnect_port(portlist, cause, LOCATION_PRIVATE_LOCAL, ""); + set_tone(portlist, causestr); + break; + + case '8': /* release */ + printlog("%3d action TESTMODE executing 'release' test.\n", ea_endpoint->ep_serial); + new_state(EPOINT_STATE_OUT_DISCONNECT); + message_disconnect_port(portlist, CAUSE_NORMAL, LOCATION_PRIVATE_LOCAL, ""); + set_tone(portlist, "release"); + break; + + case '9': /* text callerid test */ + printlog("%3d action TESTMODE executing 'caller id' test.\n", ea_endpoint->ep_serial); + new_state(EPOINT_STATE_CONNECT); + if (e_terminal[0]) + e_dtmf = 1; + memset(&e_connectinfo, 0, sizeof(e_connectinfo)); + SCPY(e_connectinfo.id, "12345678"); + SCPY(e_connectinfo.name, "Welcome to Linux"); + SCPY(e_connectinfo.display, "Welcome to Linux"); + e_connectinfo.ntype = INFO_NTYPE_UNKNOWN; + e_connectinfo.present = INFO_PRESENT_ALLOWED; + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_CONNECT); + memcpy(&message->param.connectinfo, &e_connectinfo, sizeof(message->param.connectinfo)); + message_put(message); + logmessage(message); + set_tone(portlist, "hold"); + break; + } +} + + +/* process init play + */ +void EndpointAppPBX::action_init_play(void) +{ + struct route_param *rparam; + struct port_list *portlist = ea_endpoint->ep_portlist; + + /* check given sample */ + if (!(rparam = routeparam(e_action, PARAM_SAMPLE))) + { + printlog("%3d action PLAY no sample given.\n", ea_endpoint->ep_serial); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): cannot play, because no sample has been specified\n", ea_endpoint->ep_serial); + + disconnect: + new_state(EPOINT_STATE_OUT_DISCONNECT); + message_disconnect_port(portlist, CAUSE_UNSPECIFIED, LOCATION_PRIVATE_LOCAL, ""); + set_tone(portlist, "cause_3f"); + e_action = NULL; + return; + } + + /* if sample is given */ + if (rparam->string_value[0] == '\0') + { + printlog("%3d action PLAY sample name with empty string given.\n", ea_endpoint->ep_serial); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): cannot play, because given sample is an empty string.\n", ea_endpoint->ep_serial); + goto disconnect; + } + + if (e_terminal[0]) + e_dtmf = 1; + + set_tone(ea_endpoint->ep_portlist, rparam->string_value); +} + + +/* + * action_*_vbox_play is implemented in "action_vbox.cpp" + */ + + +/* + * process dialing of calculator + */ +void EndpointAppPBX::action_dialing_calculator(void) +{ + struct port_list *portlist = ea_endpoint->ep_portlist; + struct message *message; + double value1, value2, v, sign1; + int komma1, komma2, k, state, mode, first; + char *p; + + portlist = ea_endpoint->ep_portlist; + + /* remove error message */ + if (!strncmp(e_extdialing, "Error", 5)) + { + UCPY(e_extdialing, e_extdialing+5); + } + if (!strncmp(e_extdialing, "inf", 3)) + { + UCPY(e_extdialing, e_extdialing+3); + } + if (!strncmp(e_extdialing, "-inf", 4)) + { + UCPY(e_extdialing, e_extdialing+4); + } + + /* process dialing */ + state = 0; + value1 = 0; + value2 = 0; + komma1 = 0; + komma2 = 0; + sign1 = 1; + p = e_extdialing; + if (!p) + return; + first = 1; + while(*p) + { + if (*p>='0' && *p<='9') + { +#if 0 + if (first) + { + UCPY(p, p+1); + continue; + } + if ((p[-1]<'0' || p[-1]>'0') && p[-1]!='.') + { + p--; + UCPY(p, p+1); + continue; + } +#endif + switch(state) + { + case 0: /* first number */ + if (!komma1) + { + value1 = value1*10 + (*p-'0'); + } else + { + k = komma1++; + v = *p-'0'; + while(k--) + v /= 10; + value1 += v; + } + break; + case 1: /* second number */ + if (!komma2) + { + value2 = value2*10 + (*p-'0'); + } else + { + k = komma2++; + v = *p-'0'; + while(k--) + v /= 10; + value2 += v; + } + break; + } + } else + switch(*p) + { + case '*': + if (first) + { + UCPY(e_extdialing, "Error"); + goto done; + } + /* if there is a multiplication, we change to / */ + if (p[-1] == '*') + { + mode = 1; + p[-1] = '/'; + UCPY(p, p+1); + p--; + break; + } + /* if there is a division, we change to + */ + if (p[-1] == '/') + { + mode = 2; + p[-1] = '+'; + UCPY(p, p+1); + p--; + break; + } + /* if there is a addition, we change to - */ + if (p[-1] == '+') + { + mode = 3; + p[-1] = '-'; + UCPY(p, p+1); + p--; + break; + } + /* if there is a substraction and a comma, we change to * */ + if (p[-1]=='-' && komma1) + { + mode = 0; + p[-1] = '*'; + UCPY(p, p+1); + p--; + break; + } + /* if there is a substraction and no comma and the first or second value, we change to , */ + if (p[-1]=='-') + { + p[-1] = '.'; + UCPY(p, p+1); + p--; + komma1 = 1; + break; + } + /* if there is a komma and we are at the first value, we change to * */ + if (p[-1]=='.' && state==0) + { + mode = 0; + p[-1] = '*'; + UCPY(p, p+1); + p--; + komma1 = 0; + break; + } + /* if there is a komma and we are at the second value, we display error */ + if (komma2 && state==1) + { + UCPY(e_extdialing, "Error"); + goto done; + } + /* if we are at state 1, we write a comma */ + if (state == 1) + { + *p = '.'; + komma2 = 1; + break; + } + /* we assume multiplication */ + mode = 0; + state = 1; + komma1 = 0; + break; + + case '#': + /* if just a number is displayed, the input is cleared */ + if (state==0) + { + *e_extdialing = '\0'; + break; + } + /* calculate the result */ + switch(mode) + { + case 0: /* multiply */ + UNPRINT(e_extdialing, sizeof(e_dialinginfo.number)-strlen(e_dialinginfo.number), "%.8f", sign1*value1*value2); + break; + case 1: /* divide */ + UNPRINT(e_extdialing, sizeof(e_dialinginfo.number)-strlen(e_dialinginfo.number), "%.8f", sign1*value1/value2); + break; + case 2: /* add */ + UNPRINT(e_extdialing, sizeof(e_dialinginfo.number)-strlen(e_dialinginfo.number), "%.8f", sign1*value1+value2); + break; + case 3: /* substract */ + UNPRINT(e_extdialing, sizeof(e_dialinginfo.number)-strlen(e_dialinginfo.number), "%.8f", sign1*value1-value2); + break; + } + e_dialinginfo.number[sizeof(e_dialinginfo.number)-1] = '\0'; + if (strchr(e_extdialing, '.')) /* remove zeroes */ + { + while (e_extdialing[strlen(e_extdialing)-1] == '0') + e_extdialing[strlen(e_extdialing)-1] = '\0'; + if (e_extdialing[strlen(e_extdialing)-1] == '.') + e_extdialing[strlen(e_extdialing)-1] = '\0'; /* and remove dot */ + } + p = strchr(e_extdialing,'\0')-1; + break; + + case '.': + if (state) + komma2 = 1; + else komma1 = 1; + break; + + case '/': + komma2 = 0; + state = 1; + mode = 1; + break; + + case '+': + komma2 = 0; + state = 1; + mode = 2; + break; + + case '-': + if (first) + { + sign1=-1; + break; + } + komma2 = 0; + state = 1; + mode = 3; + break; + + default: + UCPY(e_extdialing, "Error"); + goto done; + } + + p++; + first = 0; + } + done: + + /* display dialing */ + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_NOTIFY); + SPRINT(message->param.notifyinfo.display, ">%s", e_extdialing); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): terminal %s displaying interpreted dialing '%s' internal values: %f %f\n", ea_endpoint->ep_serial, e_terminal, e_extdialing, value1, value2); + message_put(message); + logmessage(message); + +} + +/* + * process dialing of timer + */ +void EndpointAppPBX::action_dialing_timer(void) +{ +} + + +/* + * process 'goto' or 'menu' + */ +void EndpointAppPBX::_action_goto_menu(int mode) +{ + struct port_list *portlist = ea_endpoint->ep_portlist; + struct route_param *rparam; + + /* check given ruleset */ + if (!(rparam = routeparam(e_action, PARAM_RULESET))) + { + no_ruleset: + printlog("%3d action GOTO/MENU no ruleset ginven in options.conf\n", ea_endpoint->ep_serial); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): no ruleset was secified for action '%s' in routing.conf\n", ea_endpoint->ep_serial, (mode)?"menu":"goto"); + + disconnect: + new_state(EPOINT_STATE_OUT_DISCONNECT); + message_disconnect_port(portlist, CAUSE_SERVICEUNAVAIL, LOCATION_PRIVATE_LOCAL, ""); + set_tone(portlist, "cause_3f"); + e_action = NULL; + return; + } + if (rparam->string_value[0] == '\0') + goto no_ruleset; + e_ruleset = getrulesetbyname(rparam->string_value); + if (!e_ruleset) + { + printlog("%3d action GOTO/MENU given ruleset '%s' not found in options.conf\n", ea_endpoint->ep_serial, rparam->string_value); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): given ruleset '%s' for action '%s' was not found in routing.conf\n", ea_endpoint->ep_serial, rparam->string_value, (mode)?"menu":"goto"); + goto disconnect; + } + printlog("%3d action GOTO/MENU changing to ruleset '%s'\n", ea_endpoint->ep_serial, rparam->string_value); + + /* if the 'menu' was selected, we will flush all digits */ + if (mode) + { + //SCPY(e_dialinginfo.number, e_extdialing); + e_dialinginfo.number[0] = 0; + e_extdialing = e_dialinginfo.number; + } else + { + } + + /* play sample */ + if ((rparam = routeparam(e_action, PARAM_SAMPLE))) + { + printlog("%3d action GOTO/MENU start playing sample '%s'\n", ea_endpoint->ep_serial, rparam->string_value); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): playing sample '%s'\n", ea_endpoint->ep_serial, rparam->string_value); + set_tone(ea_endpoint->ep_portlist, rparam->string_value); + } + + /* do dialing with new ruleset */ + e_action = NULL; + process_dialing(); +} + +/* process dialing goto +*/ +void EndpointAppPBX::action_dialing_goto(void) +{ + _action_goto_menu(0); +} + +/* process dialing menu +*/ +void EndpointAppPBX::action_dialing_menu(void) +{ + _action_goto_menu(1); +} + + +/* + * process dialing disconnect + */ +void EndpointAppPBX::action_dialing_disconnect(void) +{ + struct route_param *rparam; + struct port_list *portlist = ea_endpoint->ep_portlist; + struct message *message; + int cause = CAUSE_NORMAL; /* normal call clearing */ + int location = LOCATION_PRIVATE_LOCAL; + char cause_string[256] = "", display[84] = ""; + + /* check cause parameter */ + if ((rparam = routeparam(e_action, PARAM_CAUSE))) + { + cause = rparam->integer_value; + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): 'cause' is given: %d\n", ea_endpoint->ep_serial, cause); + } + if ((rparam = routeparam(e_action, PARAM_LOCATION))) + { + location = rparam->integer_value; + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): 'location' is given: %d\n", ea_endpoint->ep_serial, location); + } + + + /* use cause as sample, if not given later */ + SPRINT(cause_string, "cause_%02x", cause); + + /* check sample parameter */ + if ((rparam = routeparam(e_action, PARAM_SAMPLE))) + { + SCPY(cause_string, rparam->string_value); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): 'sample' is given: %s\n", ea_endpoint->ep_serial, cause_string); + } + + /* check display */ + if ((rparam = routeparam(e_action, PARAM_DISPLAY))) + { + SCPY(display, rparam->string_value); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): 'display' is given: %s\n", ea_endpoint->ep_serial, display); + } + + /* disconnect only if connect parameter is not given */ + printlog("%3d action DISCONNECT with cause %d, location %d, sample '%s', display '%s'\n", ea_endpoint->ep_serial, cause, location, cause_string, display); + new_state(EPOINT_STATE_OUT_DISCONNECT); + set_tone(portlist, cause_string); + if (!(rparam = routeparam(e_action, PARAM_CONNECT))) + { + message_disconnect_port(portlist, cause, location, display); + } else + { + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_portlist->port_id, EPOINT_TO_PORT, MESSAGE_NOTIFY); + SCPY(message->param.notifyinfo.display, display); + message_put(message); + logmessage(message); + } + e_action = NULL; +} + + +/* + * process dialing help + */ +void EndpointAppPBX::action_dialing_help(void) +{ + /* show all things that would match */ +#if 0 + struct numbering *numbering = numbering_int; + char dialing[sizeof(e_dialinginfo.number)]; + int i; + struct message *message; + struct route_param *rparam; + + /* in case we have no menu (this should never happen) */ + if (!numbering) + return; + + /* scroll menu */ + if (strchr(e_dialinginfo.number,'*')) + { + e_menu--; + e_dialinginfo.number[0] = '\0'; + } + if (strchr(e_dialinginfo.number,'#')) + { + e_menu++; + e_dialinginfo.number[0] = '\0'; + } + + /* get position in menu */ + if (e_menu < 0) + { + /* get last menu position */ + e_menu = 0; + while(numbering->next) + { + e_menu++; + numbering = numbering->next; + } + } else + { + /* get menu position */ + i = 0; + while(i < e_menu) + { + numbering = numbering->next; + if (!numbering) + { + e_menu = 0; + numbering = numbering_int; + break; + } + i++; + } + } + + /* if we dial something else we need to add the prefix and change the action */ + if (e_dialinginfo.number[0]) + { + e_action = NUMB_ACTION_NONE; + SCPY(dialing, numbering->prefix); + //we ignore the first digit after selecting + //SCAT(dialing, e_dialinginfo.number); + SCPY(e_dialinginfo.number, dialing); + e_extdialing = e_dialinginfo.number+strlen(numbering->prefix); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): terminal %s selected a new menu '%s' dialing: %s\n", ea_endpoint->ep_serial, e_terminal, numb_actions[numbering->action], e_dialinginfo.number); +nesting?: + process_dialing(); + return; + } + + /* send display message to port */ + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_portlist->port_id, EPOINT_TO_PORT, MESSAGE_NOTIFY); + SPRINT(message->param.notifyinfo.display, ">%s %s%s%s", numbering->prefix, numb_actions[numbering->action], (numbering->param[0])?" ":"", numbering->param); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): terminal %s selected a new menu '%s' sending display:%s\n", ea_endpoint->ep_serial, e_terminal, numb_actions[numbering->action], message->param.notifyinfo.display); + message_put(message); + logmessage(message); +#endif +} + + +/* + * process dialing deflect + */ +void EndpointAppPBX::action_dialing_deflect(void) +{ +} + + +/* + * process dialing setforward + */ +void EndpointAppPBX::action_dialing_setforward(void) +{ +} + + +/* + * process hangup 'execute' + */ +void EndpointAppPBX::action_hangup_execute(void) +{ + struct route_param *rparam; + char *command = "", isdn_port[10]; + char *argv[8+1]; /* check also number of args below */ + int i = 0; + + /* get script / command */ + if ((rparam = routeparam(e_action, PARAM_EXECUTE))) + command = rparam->string_value; + if (command[0] == '\0') + { + printlog("%3d action EXECUTE no 'execute' parameter given at routing.conf.\n", ea_endpoint->ep_serial); + PERROR("EPOINT(%d): terminal %s: NO PARAMETER GIVEN for 'execute' action. see routing.conf\n", ea_endpoint->ep_serial, e_terminal); + return; + } + printlog("%3d action EXECUTE command='%s'\n", ea_endpoint->ep_serial, command); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): terminal %s: executing '%s'.\n", ea_endpoint->ep_serial, e_terminal, command); + + argv[0] = command; + while(strchr(argv[0], '/')) + argv[0] = strchr(argv[0], '/')+1; + if ((rparam = routeparam(e_action, PARAM_PARAM))) + { + argv[1] = rparam->string_value; + i++; + } + argv[1+i] = e_extdialing; + argv[2+i] = numberrize_callerinfo(e_callerinfo.id, e_callerinfo.ntype); + argv[3+i] = e_callerinfo.intern; + argv[4+i] = e_callerinfo.voip; + argv[5+i] = e_callerinfo.name; + SPRINT(isdn_port, "%d", e_callerinfo.isdn_port); + argv[6+i] = isdn_port; + argv[7+i] = NULL; /* check also number of args above */ + execve("/bin/sh", argv, environ); +} + + +/* + * process hangup 'file' + */ +void EndpointAppPBX::action_hangup_file(void) +{ + struct route_param *rparam; + char *file, *content, *mode; + FILE *fp; + + /* get file / content */ + if (!(rparam = routeparam(e_action, PARAM_FILE))) + file = rparam->string_value; + else + file = ""; + if (!(rparam = routeparam(e_action, PARAM_CONTENT))) + content = rparam->string_value; + else + content = e_extdialing; + if (!(rparam = routeparam(e_action, PARAM_APPEND))) + mode = "a"; + else + mode = "w"; + if (file[0] == '\0') + { + printlog("%3d action FILE no filename given.\n", ea_endpoint->ep_serial); + PERROR("EPOINT(%d): terminal %s: NO FILENAME GIVEN for 'file' action. see routing.conf\n", ea_endpoint->ep_serial, e_terminal); + return; + } + if (!(fp = fopen(file, mode))) + { + printlog("%3d action FILE file '%s' cannot be opened. (errno = %d)\n", ea_endpoint->ep_serial, file, errno); + PERROR("EPOINT(%d): terminal %s: given file '%s' cannot be opened. see routing.conf\n", ea_endpoint->ep_serial, e_terminal, file); + return; + } + printlog("%3d action FILE file='%s' content='%s'\n", ea_endpoint->ep_serial, file, content); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): terminal %s: writing file '%s' with content '%s'.\n", ea_endpoint->ep_serial, e_terminal, file, content); + fprintf(fp, "%s\n", content); + fclose(fp); +} + + +/* + * process init 'pick' + */ +void EndpointAppPBX::action_init_pick(void) +{ + struct route_param *rparam; + char *extensions = NULL; + + if ((rparam = routeparam(e_action, PARAM_EXTENSIONS))) + extensions = rparam->string_value; + + printlog("%3d action PICK\n", ea_endpoint->ep_serial); + pick_call(extensions); +} + + +/* + * process dialing 'password' + */ +void EndpointAppPBX::action_dialing_password(void) +{ + struct port_list *portlist = ea_endpoint->ep_portlist; + + /* prompt for password */ + if (e_extdialing[0] == '\0') + { + /* give password tone */ + set_tone(portlist, "password"); + } else // ELSE!! + if (e_extdialing[1] == '\0') + { + /* give password tone */ + set_tone(portlist, "dialing"); + } + + /* wait until all digits are dialed */ + if (strlen(e_ext.password) != strlen(e_extdialing)) + return; /* more digits needed */ + + /* check the password */ + if (e_ext.password[0]=='\0' || (strlen(e_ext.password)==strlen(e_extdialing) && !!strcmp(e_ext.password,e_extdialing))) + { + printlog("%3d action PASSWORD WRITE password wrong\n", ea_endpoint->ep_serial); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): password wrong %s\n", ea_endpoint->ep_serial, e_extdialing); + e_connectedmode = 0; + e_dtmf = 0; + new_state(EPOINT_STATE_OUT_DISCONNECT); + message_disconnect_port(portlist, CAUSE_NORMAL, LOCATION_PRIVATE_LOCAL, ""); + set_tone(portlist, "cause_10"); + return; + } + + /* write caller id if ACTION_PASSWORD_WRITE was selected */ + if (e_action) + if (e_action->index == ACTION_PASSWORD_WRITE) + { + append_callbackauth(e_terminal, &e_callbackinfo); + printlog("%3d action PASSWORD WRITE password written\n", ea_endpoint->ep_serial); + } + + /* make call state */ + new_state(EPOINT_STATE_IN_OVERLAP); + e_ruleset = ruleset_main; + if (e_ruleset) + e_rule = e_ruleset->rule_first; + e_action = NULL; + e_dialinginfo.number[0] = '\0'; + e_extdialing = e_dialinginfo.number; + set_tone(portlist, "dialpbx"); +} + +void EndpointAppPBX::action_dialing_password_wr(void) +{ + action_dialing_password(); +} + + +/* general process dialing of incoming call + * depending on the detected prefix, subfunctions above (action_*) will be + * calles. + */ +void EndpointAppPBX::process_dialing(void) +{ + struct port_list *portlist = ea_endpoint->ep_portlist; + struct message *message; + struct route_param *rparam; + +//#warning Due to HANG-BUG somewhere here, I added some HANG-BUG-DEBUGGING output that cannot be disabled. after bug has been found, this will be removed. +//PDEBUG(~0, "HANG-BUG-DEBUGGING: entered porcess_dialing\n"); + portlist = ea_endpoint->ep_portlist; + /* check if we have a port instance linked to our epoint */ + if (!portlist) + { + portlist_error: + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): note: dialing call requires exactly one port object to process dialing. this case could happen due to a parked call. we end dialing here.\n", ea_endpoint->ep_serial, e_terminal); + e_action_timeout = 0; + e_match_timeout = 0; + return; + } + if (portlist->next) + { + goto portlist_error; + } + + /* check nesting levels */ + if (++e_rule_nesting > RULE_NESTING) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): rules are nesting too deep. (%d levels) check for infinite loops in routing.conf\n", ea_endpoint->ep_serial, e_rule_nesting); + new_state(EPOINT_STATE_OUT_DISCONNECT); + message_disconnect_port(portlist, CAUSE_UNSPECIFIED, LOCATION_PRIVATE_LOCAL, ""); + set_tone(portlist, "cause_3f"); + e_action_timeout = 0; + e_match_timeout = 0; + goto end; + } + +//PDEBUG(~0, "HANG-BUG-DEBUGGING: before action-timeout processing\n"); + /* process timeout */ + if (e_action_timeout) + { + e_action_timeout = 0; + if (e_state == EPOINT_STATE_CONNECT) + { + PDEBUG(DEBUG_ROUTE|DEBUG_EPOINT, "EPOINT(%d): action timed out, but we already have connected, so we stop timer and continue.\n", ea_endpoint->ep_serial); + goto end; + } + if (e_action->index == ACTION_DISCONNECT + || e_state == EPOINT_STATE_OUT_DISCONNECT) + { + /* release after disconnect */ + release(RELEASE_ALL, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL); + goto end; + } + release(RELEASE_CALL, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL, LOCATION_PRIVATE_LOCAL, 0); + e_action = e_action->next; + if (!e_action) + { + /* nothing more, so we release */ + PDEBUG(DEBUG_ROUTE|DEBUG_EPOINT, "EPOINT(%d): action timed out, and we have no next action, so we disconnect.\n", ea_endpoint->ep_serial); + new_state(EPOINT_STATE_OUT_DISCONNECT); + message_disconnect_port(portlist, CAUSE_NORMAL, LOCATION_PRIVATE_LOCAL, ""); + set_tone(portlist, "cause_3f"); + goto end; + } + PDEBUG(DEBUG_ROUTE|DEBUG_EPOINT, "EPOINT(%d): continueing with action '%s'.\n", ea_endpoint->ep_serial, action_defs[e_action->index].name); + goto action_timeout; + } + +//PDEBUG(~0, "HANG-BUG-DEBUGGING: before setup/overlap state checking\n"); + if (e_state!=EPOINT_STATE_IN_SETUP + && e_state!=EPOINT_STATE_IN_OVERLAP) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): we are not in incomming setup/overlap state, so we ignore init/dialing process.\n", ea_endpoint->ep_serial, e_rule_nesting); + e_match_timeout = 0; + goto end; + } + +#if 0 + /* check if we do menu selection */ + if (e_action==NUMB_ACTION_NONE && (e_dialinginfo.number[0]=='*' || e_dialinginfo.number[0]=='#')) + /* do menu selection */ + if (e_ext.display_menu) + { + if (portlist->port_type==PORT_TYPE_DSS1_NT_IN || portlist->port_type==PORT_TYPE_DSS1_NT_OUT) /* only if the dialing terminal is an isdn telephone connected to an internal port */ + { + e_dialinginfo.number[0] = '\0'; + e_action = NUMB_ACTION_MENU; + e_menu = 0; + process_dialing(); + e_match_timeout = 0; + goto end; + } + /* invalid dialing */ + message_disconnect_port(portlist, CAUSE_INCALID, LOCATION_PRIVATE_LOCAL, ""); + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_DISCONNECT); + message->param.disconnectinfo.cause = CAUSE_INVALID; + message->param.disconnectinfo.location = LOCATION_PRIVATE_LOCAL; + } else + { + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_NOTIFY); + SCPY(message->param.notifyinfo.display,get_isdn_cause(LOCATION_PRIVATE_LOCAL, epoint->e_ext.display_cause, param->disconnectinfo.location, param->disconnectinfo.cause)); + } + message_put(message); + logmessage(message); + } + new_state(EPOINT_STATE_OUT_DISCONNECT); + set_tone(portlist,"cause_1c"); + e_match_timeout = 0; + goto end; + } +#endif + +//PDEBUG(~0, "HANG-BUG-DEBUGGING: before e_action==NULL\n"); + /* if no action yet, we will call try to find a matching rule */ + if (!e_action) + { + /* be sure that all selectors are initialized */ + e_select = 0; + + /* check for external call */ + if (!strncmp(e_dialinginfo.number, "extern:", 7)) + { + e_extdialing = e_dialinginfo.number+7; + e_action = &action_external; + goto process_action; + } + /* check for internal call */ + if (!strncmp(e_dialinginfo.number, "intern:", 7)) + { + e_extdialing = e_dialinginfo.number+7; + e_action = &action_internal; + goto process_action; + } + /* check for h323 call */ + if (!strncmp(e_dialinginfo.number, "h323:", 5)) + { + e_extdialing = e_dialinginfo.number+5; + e_action = &action_h323; + goto process_action; + } + /* check for chan call */ + if (!strncmp(e_dialinginfo.number, "chan:", 5)) + { + e_extdialing = e_dialinginfo.number+4; + e_action = &action_chan; + goto process_action; + } + /* check for vbox call */ + if (!strncmp(e_dialinginfo.number, "vbox:", 5)) + { + e_extdialing = e_dialinginfo.number+5; + e_action = &action_vbox; + goto process_action; + } + + if (e_match_timeout && now_d>=e_match_timeout) + { + /* return timeout rule */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): terminal '%s' dialing: '%s', timeout in ruleset '%s'\n", ea_endpoint->ep_serial, e_terminal, e_dialinginfo.number, e_ruleset->name); + e_match_timeout = 0; + e_action = e_match_to_action; + e_extdialing = e_match_to_extdialing; + printlog("%3d routing TIMEOUT processing action '%s' (line %d)\n", ea_endpoint->ep_serial, action_defs[e_action->index].name, e_action->line); + + } else + { +//PDEBUG(~0, "HANG-BUG-DEBUGGING: before routing\n"); + /* check for matching rule */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): terminal '%s' dialing: '%s', checking matching rule of ruleset '%s'\n", ea_endpoint->ep_serial, e_terminal, e_dialinginfo.number, e_ruleset->name); + if (e_ruleset) + { + e_action = route(e_ruleset); + if (e_action) + printlog("%3d routing MATCH processing action '%s' (line %d)\n", ea_endpoint->ep_serial, action_defs[e_action->index].name, e_action->line); + } else + { + e_action = &action_disconnect; + if (e_action) + printlog("%3d routing NO MAIN RULESET, DISCONNECTING! '%s'\n", ea_endpoint->ep_serial, action_defs[e_action->index].name); + } +//PDEBUG(~0, "HANG-BUG-DEBUGGING: after routing\n"); + } + if (!e_action) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): no rule within the current ruleset matches yet.\n", ea_endpoint->ep_serial, e_terminal); + goto display; + } + + /* matching */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): a rule with action '%s' matches.\n", ea_endpoint->ep_serial, action_defs[e_action->index].name); + + action_timeout: + + /* set timeout */ + e_action_timeout = 0; + if (e_action->timeout) + { + e_action_timeout = now_d + e_action->timeout; + PDEBUG(DEBUG_ROUTE|DEBUG_EPOINT, "EPOINT(%d): action has a timeout of %d secods.\n", ea_endpoint->ep_serial, e_action->timeout); + } + + process_action: + /* check param proceeding / alerting / connect */ + if ((rparam = routeparam(e_action, PARAM_CONNECT))) + { + /* NOTE: we may not change our state to connect, because dialing will then not possible */ + e_dtmf = 1; + memset(&e_connectinfo, 0, sizeof(e_connectinfo)); + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_CONNECT); + message_put(message); + logmessage(message); + } else + if ((rparam = routeparam(e_action, PARAM_ALERTING))) + { + /* NOTE: we may not change our state to alerting, because dialing will then not possible */ + memset(&e_connectinfo, 0, sizeof(e_connectinfo)); + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_ALERTING); + message_put(message); + logmessage(message); + } else + if ((rparam = routeparam(e_action, PARAM_PROCEEDING))) + { + /* NOTE: we may not change our state to proceeding, because dialing will then not possible */ + memset(&e_connectinfo, 0, sizeof(e_connectinfo)); + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_PROCEEDING); + message_put(message); + logmessage(message); + } + + if (action_defs[e_action->index].init_func) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): terminal %s: current action '%s' has a init function, so we call it...\n", ea_endpoint->ep_serial, e_terminal, action_defs[e_action->index].name); + (this->*(action_defs[e_action->index].init_func))(); + } + if (e_state!=EPOINT_STATE_IN_SETUP + && e_state!=EPOINT_STATE_IN_OVERLAP) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): AFTER init process: we are not in incomming setup/overlap state anymore, so we ignore further dialing process.\n", ea_endpoint->ep_serial, e_rule_nesting); + goto display_action; + } + } + + /* show what we are doing */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): terminal '%s' action: %s (dialing '%s')\n", ea_endpoint->ep_serial, e_terminal, action_defs[e_action->index].name, e_extdialing); + /* go to action's dialing function */ + if (action_defs[e_action->index].dialing_func) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): terminal %s: current action '%s' has a dialing function, so we call it...\n", ea_endpoint->ep_serial, e_terminal, action_defs[e_action->index].name); + (this->*(action_defs[e_action->index].dialing_func))(); + } + + /* display selected dialing action if enabled and still in setup state */ + display_action: + if (e_action) + { + if (e_action->index==ACTION_MENU + || e_action->index==ACTION_REDIAL + || e_action->index==ACTION_REPLY + || e_action->index==ACTION_TIMER + || e_action->index==ACTION_CALCULATOR + || e_action->index==ACTION_TEST) + goto end; + } + display: + if (!e_ext.display_dialing) + goto end; + if (e_state==EPOINT_STATE_IN_OVERLAP || e_state==EPOINT_STATE_IN_PROCEEDING || e_state==EPOINT_STATE_IN_ALERTING || e_state==EPOINT_STATE_CONNECT/* || e_state==EPOINT_STATE_IN_DISCONNECT || e_state==EPOINT_STATE_OUT_DISCONNECT*/) + if (portlist->port_type==PORT_TYPE_DSS1_NT_IN || portlist->port_type==PORT_TYPE_DSS1_NT_OUT) /* only if the dialing terminal is an isdn telephone connected to an internal port */ + { + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_NOTIFY); + + if (!e_action) + { + SPRINT(message->param.notifyinfo.display, "> %s", e_dialinginfo.number); + } else + { + SPRINT(message->param.notifyinfo.display, "%s%s%s", action_defs[e_action->index].name, (e_extdialing[0])?" ":"", e_extdialing); + } + + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): terminal %s displaying interpreted dialing '%s'\n", ea_endpoint->ep_serial, e_terminal, message->param.notifyinfo.display); + message_put(message); + logmessage(message); + } + +end: + e_rule_nesting--; + return; +} + + +/* some services store information after hangup */ +void EndpointAppPBX::process_hangup(int cause, int location) +{ + char callertext[256], dialingtext[256]; + int writeext = 0, i; + + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): terminal '%s'\n", ea_endpoint->ep_serial, e_terminal); + if (e_terminal[0]) + { + if (read_extension(&e_ext, e_terminal)) + writeext = 0x10; + + if (!e_start) + { + time(&e_start); + e_stop = 0; + } else + if (!e_stop) + time(&e_stop); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): writing connect from %s to %s into logfile of %s\n", ea_endpoint->ep_serial, e_callerinfo.id, e_dialinginfo.number, e_terminal); + switch(e_dialinginfo.itype) + { + case INFO_ITYPE_H323: + SPRINT(dialingtext, "h323:%s", e_dialinginfo.number); + break; + case INFO_ITYPE_CHAN: + SPRINT(dialingtext, "chan:%s", e_dialinginfo.number); + break; + case INFO_ITYPE_INTERN: + SPRINT(dialingtext, "intern:%s", e_dialinginfo.number); + break; + case INFO_ITYPE_VBOX: + SPRINT(dialingtext, "vbox:%s", e_dialinginfo.number); + break; + default: + SPRINT(dialingtext, "%s", e_dialinginfo.number); + } + + if (e_callerinfo.id[0]) + SPRINT(callertext, "%s", numberrize_callerinfo(e_callerinfo.id, e_callerinfo.ntype)); + else + SPRINT(callertext, "unknown"); + /* allpy restriction */ + if (!e_ext.anon_ignore && e_callerinfo.present==INFO_PRESENT_RESTRICTED) + SPRINT(callertext, "anonymous"); + if (e_callerinfo.intern[0]) /* add intern if present */ + UNPRINT(strchr(callertext,'\0'), sizeof(callertext)-1+strlen(callertext), " (intern %s)", e_callerinfo.intern); + if (e_callerinfo.voip[0]) /* add voip if present */ + UNPRINT(strchr(callertext,'\0'), sizeof(callertext)-1+strlen(callertext), " (voip %s)", e_callerinfo.voip); + write_log(e_terminal, callertext, dialingtext, e_start, e_stop, 0, cause, location); + + /* store last received call for reply-list */ + if (e_callerinfo.id[0] || e_callerinfo.intern[0]) + if (e_ext.anon_ignore || e_callerinfo.present!=INFO_PRESENT_RESTRICTED) + { + if (e_callerinfo.intern[0]) + SPRINT(callertext, "intern:%s", e_callerinfo.intern); + else + SPRINT(callertext, "extern:%s", numberrize_callerinfo(e_callerinfo.id, e_callerinfo.ntype)); + if (!!strcmp(callertext, e_ext.last_in[0])) + { + i = MAX_REMEMBER-1; + while(i) + { + UCPY(e_ext.last_in[i], e_ext.last_in[i-1]); + i--; + } + SCPY(e_ext.last_in[0], callertext); + writeext |= 1; /* store extension later */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): terminal %s: storing last received caller id '%s'.\n", ea_endpoint->ep_serial, e_terminal, e_ext.last_in[0]); + } else + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): terminal %s: cannot store last received id '%s' because it is identical with the last one.\n", ea_endpoint->ep_serial, e_terminal, callertext); + } + } + + /* write extension if needed */ + if (writeext == 0x11) + write_extension(&e_ext, e_terminal); + + if (e_action) + { + if (action_defs[e_action->index].hangup_func) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): terminal %s: current action '%s' has a hangup function, so we call it...\n", ea_endpoint->ep_serial, e_terminal, action_defs[e_action->index].name); + (this->*(action_defs[e_action->index].hangup_func))(); + } + } +} + diff --git a/action_efi.cpp b/action_efi.cpp new file mode 100644 index 0000000..ce0253f --- /dev/null +++ b/action_efi.cpp @@ -0,0 +1,161 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** elektronische fernmelder identifikation ** +** ** +\*****************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include "main.h" + +enum { + EFI_STATE_DIE, + EFI_STATE_BENUTZERDEFINIERTE, + EFI_STATE_UNTERDRUECKTE, + EFI_STATE_RUFNUMMER_LAUTET, + EFI_STATE_DIGIT, + EFI_STATE_ICH_WIEDERHOLE, + EFI_STATE_STOP, +}; + +void EndpointAppPBX::action_init_efi(void) +{ +// int language = e_ext.vbox_language; +// struct route_param *rparam; + struct message *message; + struct port_list *portlist = ea_endpoint->ep_portlist; + + /* if no caller id */ + if (e_callerinfo.id[0] == '\0') + { + /* facility rejected */ + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_DISCONNECT); + message->param.disconnectinfo.location = LOCATION_PRIVATE_LOCAL; + message->param.disconnectinfo.cause = CAUSE_FACILITYREJECTED; + message_put(message); + logmessage(message); + new_state(EPOINT_STATE_OUT_DISCONNECT); + set_tone(portlist,"cause_22"); + return; + } + + /* connect */ + new_state(EPOINT_STATE_CONNECT); + + /* initialize the vbox */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) initializing efi\n", ea_endpoint->ep_serial); + + e_efi_state = EFI_STATE_DIE; + set_tone_efi("die"); + + e_efi_digit = 0; +} + +/* + * the audio file has ended + * this is called by Endpoint::message_port(), whenever an audio of has been received + */ +void EndpointAppPBX::efi_message_eof(void) +{ +// char buffer[32]; + char digit[] = "number_00"; + struct message *message; + struct port_list *portlist = ea_endpoint->ep_portlist; + + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) terminal %s end of file during state: %d\n", ea_endpoint->ep_serial, e_terminal, e_vbox_state); + + switch(e_efi_state) + { + case EFI_STATE_DIE: + if (e_callerinfo.screen==INFO_SCREEN_USER) + { + e_efi_state = EFI_STATE_BENUTZERDEFINIERTE; + set_tone_efi("benutzerdefinierte"); + break; + } + // fall through + case EFI_STATE_BENUTZERDEFINIERTE: + if (e_callerinfo.present==INFO_PRESENT_RESTRICTED) + { + e_efi_state = EFI_STATE_UNTERDRUECKTE; + set_tone_efi("unterdrueckte"); + break; + } + // fall through + case EFI_STATE_UNTERDRUECKTE: + e_efi_state = EFI_STATE_RUFNUMMER_LAUTET; + set_tone_efi("rufnummer_lautet"); + break; + + case EFI_STATE_RUFNUMMER_LAUTET: + e_efi_state = EFI_STATE_DIGIT; + e_efi_digit = 0; + // fall through + case EFI_STATE_DIGIT: + digit[8] = numberrize_callerinfo(e_callerinfo.id,e_callerinfo.ntype)[e_efi_digit]; + if (digit[8]) + { + set_tone_efi(digit); + e_efi_digit++; + } else + { + e_efi_state = EFI_STATE_STOP; //EFI_STATE_ICH_WIEDERHOLE; + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_DISCONNECT); + message->param.disconnectinfo.location = LOCATION_PRIVATE_LOCAL; + message->param.disconnectinfo.cause = CAUSE_NORMAL; + message_put(message); + logmessage(message); + new_state(EPOINT_STATE_OUT_DISCONNECT); + set_tone(portlist,"cause_10"); +// set_tone_efi("ich_wiederhole"); + } + break; + + case EFI_STATE_ICH_WIEDERHOLE: + e_efi_state = EFI_STATE_DIE; + set_tone_efi("die"); + break; + + case EFI_STATE_STOP: + break; + + default: + PERROR("efi_message_eof(ep%d): terminal %s unknown state: %d\n", ea_endpoint->ep_serial, e_terminal, e_vbox_state); + } +} + + + +/* + * set the given vbox-tone with full path (without appending) + * the tone is played and after eof, a message is received + */ +void EndpointAppPBX::set_tone_efi(char *tone) +{ + struct message *message; + + if (tone == NULL) + tone = ""; + + if (!ea_endpoint->ep_portlist) + { + PERROR("EPOINT(%d) no portlist\n", ea_endpoint->ep_serial); + } + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_portlist->port_id, EPOINT_TO_PORT, MESSAGE_VBOX_TONE); + SCPY(message->param.tone.dir, (char *)"tones_efi"); + SCPY(message->param.tone.name, tone); + message_put(message); + + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) terminal %s set tone '%s'\n", ea_endpoint->ep_serial, e_terminal, tone); +} + diff --git a/action_vbox.cpp b/action_vbox.cpp new file mode 100644 index 0000000..afdbc6e --- /dev/null +++ b/action_vbox.cpp @@ -0,0 +1,975 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** dialing for answering machine is processed here ** +** ** +\*****************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include "main.h" + + +// note: the given display message (e_vbox_display) may include "%s" for the counter + +/* + * these are the state, the vbox is in. if the current tone has been played, + * an action will be calles as defined in vbox_message_eof(), which is called + * from Epoint:handler(). + * also this state is used to determine the correct processing of the current key press + */ +enum { + VBOX_STATE_MENU, /* tell the menu */ +VBOX_STATE_CALLINFO_BEGIN, /* this value defines the start of callinfo */ + VBOX_STATE_CALLINFO_INTRO, /* tell that the "call is received at" */ + VBOX_STATE_CALLINFO_MONTH, /* tell the month */ + VBOX_STATE_CALLINFO_DAY, /* tell the day */ + VBOX_STATE_CALLINFO_HOUR, /* tell the hour */ + VBOX_STATE_CALLINFO_OCLOCK, /* tell the word "o'clock" */ + VBOX_STATE_CALLINFO_MIN, /* tell the minute */ + VBOX_STATE_CALLINFO_MINUTES, /* tell the word "minutes" */ + VBOX_STATE_CALLINFO_DIGIT, /* tell the digits */ +VBOX_STATE_CALLINFO_END, /* this value defines the end of callingo */ + VBOX_STATE_NOTHING, /* tells that no calls are recorded */ + VBOX_STATE_PLAY, /* play the current recording */ + VBOX_STATE_PAUSE, /* tell that the recording is paused */ + VBOX_STATE_RECORD_ASK, /* ask for recording */ + VBOX_STATE_RECORD_PLAY, /* play recording */ + VBOX_STATE_RECORD_RECORD, /* record recording */ + VBOX_STATE_STORE_ASK, /* ask for store */ + VBOX_STATE_DELETE_ASK, /* ask for delete */ + VBOX_STATE_STORE_DONE, /* tell that message is store */ + VBOX_STATE_DELETE_DONE, /* tell that message is delete */ +}; + +char *months_english[] = {"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"}; +char *months_german[] = {"Jan","Feb","Maer","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"}; + +struct vbox_menu { + char digit; + char *english; + char *german; + } vbox_menu[] = { + {'1', "<< previous", "<< zurueck"}, + {'2', "-> play", "-> anhoeren"}, + {'3', ">> next", ">> vor"}, + {'4', "< rewind", "< rueckspulen"}, + {'5', "[] stop", "[] stop"}, + {'6', "> wind", "> vorspulen"}, + {'7', "() record", "() Aufnahme"}, + {'8', "= store", "= speichern"}, + {'9', "X delete", "X loeschen"}, + {'0', "* call", "* anrufen"}, + {'\0', NULL, NULL} + }; + +/* + * initialize the vbox. this is called at process_dialing(), when the VBOX_PLAY + * action has been selected by the caller + */ +void EndpointAppPBX::action_init_vbox_play(void) +{ + int language = e_ext.vbox_language; + struct route_param *rparam; + struct message *message; + struct port_list *portlist = ea_endpoint->ep_portlist; + + /* get extension */ + SCPY(e_vbox, e_terminal); + if ((rparam = routeparam(e_action, PARAM_EXTENSION))) + SCPY(e_vbox, rparam->string_value); + if (e_vbox[0] == '\0') + { + /* facility rejected */ + message_disconnect_port(portlist, CAUSE_FACILITYREJECTED, LOCATION_PRIVATE_LOCAL, ""); + new_state(EPOINT_STATE_OUT_DISCONNECT); + set_tone(portlist,"cause_22"); + return; + } + + /* connect, but still accept more digits */ + new_state(EPOINT_STATE_IN_OVERLAP); + if (e_terminal[0]) + e_dtmf = 1; + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_CONNECT); + message_put(message); + logmessage(message); + + /* initialize the vbox */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) initializing answering vbox state\n", ea_endpoint->ep_serial); + + e_vbox_state = VBOX_STATE_MENU; + SCPY(e_vbox_display, (char *)((language)?"druecke 2 f. wiedergabe":"press 2 to play")); + e_vbox_display_refresh = 1; + set_tone_vbox("menu"); + + e_vbox_menu = -1; + e_vbox_play = 0; + vbox_index_read(e_vbox_play); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) number of calls: %d\n", ea_endpoint->ep_serial, e_vbox_index_num); + + if (e_vbox_index_num == 0) + { + e_vbox_state = VBOX_STATE_NOTHING; + SCPY(e_vbox_display, (char *)((language)?"keine Anrufe":"no calls")); + e_vbox_display_refresh = 1; + set_tone_vbox("nothing"); + } +} + +/* + * read index list, and fill the index variables with the given position + * if the index is empty (or doesn't exist), the variables are not filled. + * but alway the e_vbox_index_num is given. + */ +void EndpointAppPBX::vbox_index_read(int num) +{ + FILE *fp; + char filename[256]; + char buffer[256]; + char name[sizeof(buffer)]; + char callerid[sizeof(buffer)]; + int year, mon, mday, hour, min; + int i; + + e_vbox_index_num = 0; + + SPRINT(filename, "%s/%s/%s/vbox/index", INSTALL_DATA, options.extensions_dir, e_vbox); + if (!(fp = fopen(filename, "r"))) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) no files in index\n", ea_endpoint->ep_serial); + return; + } + fduse++; + + i = 0; + while((fgets(buffer,sizeof(buffer),fp))) + { + buffer[sizeof(buffer)-1] = '\0'; + if (buffer[0]) buffer[strlen(buffer)-1] = '\0'; + + name[0] = callerid[0] = '\0'; + mon = mday = hour = min = 0; + sscanf(buffer, "%s %d %d %d %d %d %s", name, &year, &mon, &mday, &hour, &min, callerid); + + if (name[0]=='\0' || name[0]=='#') + continue; + + /* the selected entry */ + if (i == num) + { + SCPY(e_vbox_index_file, name); + e_vbox_index_year = year; + e_vbox_index_mon = mon; + e_vbox_index_mday = mday; + e_vbox_index_hour = hour; + e_vbox_index_min = min; + SCPY(e_vbox_index_callerid, callerid); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) read entry #%d: '%s', %02d:%02d %02d:%02d cid='%s'\n", ea_endpoint->ep_serial, i, name, mon+1, mday, hour, min, callerid); + } + + i++; + } + + e_vbox_index_num = i; + + fclose(fp); + fduse--; +} + + +/* + * removes given index from list + * after removing, the list should be reread, since e_vbox_index_num + * and the current variabled do not change + */ +void EndpointAppPBX::vbox_index_remove(int num) +{ + FILE *fpr, *fpw; + char buffer[256]; + int i; + char filename1[256], filename2[256]; + + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) removing entrie #%d\n", ea_endpoint->ep_serial, num); + + SPRINT(filename1, "%s/%s/%s/vbox/index", INSTALL_DATA, options.extensions_dir, e_vbox); + SPRINT(filename2, "%s/%s/%s/vbox/index-temp", INSTALL_DATA, options.extensions_dir, e_vbox); + if (!(fpr = fopen(filename1, "r"))) + { + return; + } + if (!(fpw = fopen(filename2, "w"))) + { + fclose(fpr); + return; + } + fduse += 2; + + i = 0; + while((fgets(buffer,sizeof(buffer),fpr))) + { + buffer[sizeof(buffer)-1] = '\0'; + if (buffer[0]) buffer[strlen(buffer)-1] = '\0'; + + if (buffer[0]=='\0' || buffer[0]=='#') + { + fprintf(fpw, "%s\n", buffer); + continue; + } + + /* the selected entry will not be written */ + if (i != num) + { + fprintf(fpw, "%s\n", buffer); + } + + i++; + } + + fclose(fpr); + fclose(fpw); + fduse -= 2; + + rename(filename2, filename1); +} + + +/* + * process dialing of vbox_play (actually the menu) + * it is depended by the state, which action is performed + */ +void EndpointAppPBX::action_dialing_vbox_play(void) +{ + int language = e_ext.vbox_language; + struct port_list *portlist; + class Port *port; + + portlist = ea_endpoint->ep_portlist; + + if (e_extdialing[0] == '\0') + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) called with no digit\n", ea_endpoint->ep_serial); + return; + } + + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) dialing digit: %c\n", ea_endpoint->ep_serial, e_extdialing[0]); + + e_vbox_display_refresh = 1; + + if (e_vbox_state == VBOX_STATE_RECORD_RECORD) + { + if (e_extdialing[0] == '1') + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) stopping recording of announcement.\n", ea_endpoint->ep_serial); + + port = find_port_id(portlist->port_id); + if (port) + port->close_record(6000); /* append beep */ + goto record_ask; + } + goto done; + } + + if (e_vbox_state == VBOX_STATE_RECORD_PLAY) + { + if (e_extdialing[0] == '1') + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) stopping playback of announcement.\n", ea_endpoint->ep_serial); + + goto record_ask; + } + goto done; + } + + if (e_vbox_state == VBOX_STATE_RECORD_ASK) + { + switch(e_extdialing[0]) + { + case '3': + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) quit recoding menu.\n", ea_endpoint->ep_serial); + ask_abort: + /* abort */ + e_vbox_state = VBOX_STATE_MENU; + SCPY(e_vbox_display, (char *)((language)?"druecke 2 f. wiedergabe":"press 2 to play")); + set_tone_vbox("menu"); + break; + + case '2': + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) play recoding.\n", ea_endpoint->ep_serial); + /* play announcement */ + e_vbox_counter = 0; + e_vbox_counter_last = 0; + e_vbox_counter_max = 0; + e_vbox_speed = 1; + e_vbox_state = VBOX_STATE_RECORD_PLAY; + if (e_ext.vbox_language) + SCPY(e_vbox_display, "Wied., 1=stop %s"); + else + SCPY(e_vbox_display, "play, 1=stop %s"); + if (e_ext.vbox_display == VBOX_DISPLAY_BRIEF) + SCPY(e_vbox_display, "1=stop %s"); + set_play_vbox("announcement", 0); + break; + + case '1': + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) record announcement.\n", ea_endpoint->ep_serial); + /* close recording if already recording */ + port = find_port_id(portlist->port_id); + if (port) + { + port->close_record(6000); /* append beep */ + port->open_record(CODEC_MONO, 1, 5000, e_terminal, 0, "", 0); /* record announcement, skip the first 5000 samples */ + } + e_vbox_state = VBOX_STATE_RECORD_RECORD; + if (e_ext.vbox_language) + SCPY(e_vbox_display, "Aufnahme, 1=stop"); + else + SCPY(e_vbox_display, "recording, 1=stop"); + set_tone_vbox(NULL); + break; + + default: + ; + } + goto done; + } + + if (e_vbox_state==VBOX_STATE_STORE_ASK || e_vbox_state==VBOX_STATE_DELETE_ASK) + { + char filename[256], filename2[256]; + + switch(e_extdialing[0]) + { + case '3': + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) quit store/delete menu.\n", ea_endpoint->ep_serial); + goto ask_abort; + + case '1': + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) do store/delete.\n", ea_endpoint->ep_serial); + SPRINT(filename, "%s/%s/%s/vbox/%s", INSTALL_DATA, options.extensions_dir, e_vbox, e_vbox_index_file); + + /* move file */ + if (e_vbox_state == VBOX_STATE_STORE_ASK) + { + SPRINT(filename, "%s/%s/%s/recordings", INSTALL_DATA, options.extensions_dir, e_vbox); + if (mkdir(filename, 0755) < 0) + { + if (errno != EEXIST) + { + PERROR("EPOINT(%d) cannot create directory '%s'\n", ea_endpoint->ep_serial, filename); + goto done; + } + } + SPRINT(filename2, "%s/%s/%s/recordings/%s", INSTALL_DATA, options.extensions_dir, e_vbox, e_vbox_index_file); + rename(filename, filename2); + e_vbox_state = VBOX_STATE_STORE_DONE; + if (e_ext.vbox_language) + SCPY(e_vbox_display, "Nachricht gespeichert!"); + else + SCPY(e_vbox_display, "Message stored!"); + set_tone_vbox("store_done"); + } + + /* remove file */ + if (e_vbox_state == VBOX_STATE_DELETE_ASK) + { + remove(filename); + e_vbox_state = VBOX_STATE_DELETE_DONE; + if (e_ext.vbox_language) + SCPY(e_vbox_display, "Nachricht geloescht!"); + else + SCPY(e_vbox_display, "Message deleted!"); + set_tone_vbox("delete_done"); + } + + /* remove from list */ + vbox_index_remove(e_vbox_play); + vbox_index_read(e_vbox_play); + /* stay at the last message+1, so we always get "no messages" */ + if (e_vbox_play>e_vbox_index_num && e_vbox_play) + { + e_vbox_play = e_vbox_index_num-1; + } + default: + ; + } + goto done; + } + + /* dialing during menu */ + switch(e_extdialing[0]) + { + /* process the vbox functions */ + case '1': /* previous */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) previous call is selected.\n", ea_endpoint->ep_serial); + if (e_vbox_index_num == 0) /* nothing to play */ + { + no_calls: + e_vbox_state = VBOX_STATE_MENU; + SCPY(e_vbox_display, (char *)((language)?"keine Anrufe":"no calls")); + set_tone_vbox("nothing"); + break; + } + e_vbox_play--; + if (e_vbox_play < 0) + { + e_vbox_play = 0; + + e_vbox_state = VBOX_STATE_MENU; + SCPY(e_vbox_display, (char *)((language)?"kein vorheriger Anruf":"no previous call")); + set_tone_vbox("nothing"); + break; + } + /* announce call */ + announce_call: + e_vbox_state = VBOX_STATE_CALLINFO_INTRO; + SPRINT(e_vbox_display, "#%d", e_vbox_play+1); + vbox_index_read(e_vbox_play); + if (e_vbox_index_mon!=now_tm->tm_mon || e_vbox_index_year!=now_tm->tm_year) + { + UPRINT(strchr(e_vbox_display,'\0'), " %s", (language)?months_german[e_vbox_index_mon]:months_english[e_vbox_index_mon]); + } + if (e_vbox_index_mday!=now_tm->tm_mday || e_vbox_index_mon!=now_tm->tm_mon || e_vbox_index_year!=now_tm->tm_year) + { + UPRINT(strchr(e_vbox_display,'\0'), " %d", e_vbox_index_mday); + } + UPRINT(strchr(e_vbox_display,'\0'), " %02d:%02d", e_vbox_index_hour, e_vbox_index_min); + if (e_ext.vbox_display == VBOX_DISPLAY_DETAILED) + UPRINT(strchr(e_vbox_display,'\0'), " (%s)", e_vbox_index_callerid); + set_tone_vbox("intro"); + break; + + case '2': /* play */ + if (e_vbox_play >= e_vbox_index_num) + goto no_messages; + if (e_vbox_index_num == 0) /* nothing to play */ + { + goto no_calls; + } + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) play call #%d.\n", ea_endpoint->ep_serial, e_vbox_play+1); + if (e_vbox_state>VBOX_STATE_CALLINFO_BEGIN && e_vbox_stateep_serial, e_vbox_play+1); + /* the callinfo is played, so we start with the call */ + e_vbox_counter = 0; + e_vbox_counter_last = 0; + e_vbox_counter_max = 0; + e_vbox_speed = 1; + e_vbox_state = VBOX_STATE_PLAY; + SPRINT(e_vbox_display, "#%d %%s", e_vbox_play+1); + if (e_ext.vbox_display == VBOX_DISPLAY_DETAILED) + UPRINT(strchr(e_vbox_display,'\0'), " (%s)", e_vbox_index_callerid); + set_play_vbox(e_vbox_index_file, 0); + break; + } else + if (e_vbox_state==VBOX_STATE_PLAY && e_vbox_speed!=1) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) play call #%d. play speed is different from 1, so we play now with normal speed\n", ea_endpoint->ep_serial, e_vbox_play+1); + /* we set play speed to normal */ + e_vbox_speed = 1; + set_play_speed(e_vbox_speed); + } else + if (e_vbox_state == VBOX_STATE_PLAY) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) play call #%d. play speed is equals 1, so we pause\n", ea_endpoint->ep_serial, e_vbox_play+1); + /* we pause the current play */ + e_vbox_state = VBOX_STATE_PAUSE; + SCPY(e_vbox_display, (char *)((language)?"druecke 2 f. wiedergabe":"press 2 to play")); + set_tone_vbox("pause"); + } else + if (e_vbox_state == VBOX_STATE_PAUSE) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) play call #%d. currently pause, so we continue play\n", ea_endpoint->ep_serial, e_vbox_play+1); + /* we continue the current play */ + e_vbox_state = VBOX_STATE_PLAY; + SPRINT(e_vbox_display, "#%d %%s", e_vbox_play+1); + if (e_ext.vbox_display == VBOX_DISPLAY_DETAILED) + UPRINT(strchr(e_vbox_display,'\0'), " (%s)", e_vbox_index_callerid); + set_play_vbox(e_vbox_index_file, e_vbox_counter); + } else + { + /* now we have something else going on, so we announce the call */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) play call #%d. announcing call during any other state\n", ea_endpoint->ep_serial, e_vbox_play+1); + goto announce_call; + } + break; + + case '3': /* next */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) next call is selected.\n", ea_endpoint->ep_serial); + if (e_vbox_index_num == 0) /* nothing to play */ + { + goto no_calls; + } + e_vbox_play++; + if (e_vbox_play >= e_vbox_index_num) + { + no_messages: + e_vbox_play = e_vbox_index_num; + + e_vbox_state = VBOX_STATE_MENU; + SCPY(e_vbox_display, (char *)((language)?"kein weiterer Anruf":"no next call")); + set_tone_vbox("nothing"); + break; + } + /* announce call */ + goto announce_call; + break; + + case '4': /* rewind */ + if (e_vbox_state==VBOX_STATE_PLAY) + { + if (e_vbox_speed >= -1) + e_vbox_speed = -1; + e_vbox_speed = e_vbox_speed * 2; + set_play_speed(e_vbox_speed); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) rewind speed has been changed to: %d\n", ea_endpoint->ep_serial, e_vbox_speed); + } + break; + + case '5': /* stop */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) stop is pressed, so we hear the menu\n", ea_endpoint->ep_serial); + e_vbox_state = VBOX_STATE_MENU; + SCPY(e_vbox_display, (char *)((language)?"druecke 2 f. wiedergabe":"press 2 to play")); + set_tone_vbox("menu"); + break; + + case '6': /* wind */ + if (e_vbox_state==VBOX_STATE_PLAY) + { + if (e_vbox_speed <= 1) + e_vbox_speed = 1; + e_vbox_speed = e_vbox_speed * 2; + set_play_speed(e_vbox_speed); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) wind speed has been changed to: %d\n", ea_endpoint->ep_serial, e_vbox_speed); + } + break; + + case '7': /* record announcement */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) entering the record announcement menu\n", ea_endpoint->ep_serial); + record_ask: + e_vbox_state = VBOX_STATE_RECORD_ASK; + SCPY(e_vbox_display, (char *)((language)?"1=Aufn. 2=Wied. 3=nein":"1=record 2=play 3=back")); + set_tone_vbox("record_ask"); + break; + + case '8': /* store file */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) entering the store menu\n", ea_endpoint->ep_serial); + if (e_vbox_play >= e_vbox_index_num) + goto no_messages; + if (e_vbox_index_num == 0) /* nothing to play */ + { + goto no_calls; + } + e_vbox_state = VBOX_STATE_STORE_ASK; + SCPY(e_vbox_display, (char *)((language)?"speichern 1=ja 3=nein":"store 1=yes 3=back")); + set_tone_vbox("store_ask"); + break; + + case '9': /* delete file */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) entering the delete menu\n", ea_endpoint->ep_serial); + if (e_vbox_play >= e_vbox_index_num) + goto no_messages; + if (e_vbox_index_num == 0) /* nothing to play */ + { + goto no_calls; + } + e_vbox_state = VBOX_STATE_DELETE_ASK; + SCPY(e_vbox_display, (char *)((language)?"loeschen 1=ja 3=nein":"delete 1=yes 3=back")); + set_tone_vbox("delete_ask"); + break; + + + /* process the menu */ + case '#': + if (e_vbox_menu < 0) + e_vbox_menu = 0; + else + e_vbox_menu++; + if (vbox_menu[e_vbox_menu].english == NULL) + e_vbox_menu = 0; + /* show menu */ + show_menu: + SPRINT(e_vbox_display, "%c: %s", vbox_menu[e_vbox_menu].digit, (language)?vbox_menu[e_vbox_menu].german:vbox_menu[e_vbox_menu].english); + break; + + case '0': + if (e_vbox_menu < 0) /* only if menu selection is pressed before*/ + { + /* call if phonenumber is given */ + if (e_vbox_index_num) + if (e_vbox_index_callerid[0]!='\0' && !!strcmp(e_vbox_index_callerid,"anonymous") && !!strcmp(e_vbox_index_callerid,"unknown")) + { + set_tone(portlist, "dialing"); + SPRINT(e_dialinginfo.number, "extern:%s", e_vbox_index_callerid); + e_extdialing = e_dialinginfo.number; + e_action = NULL; + process_dialing(); + return; + } + break; + } + e_extdialing[0] = vbox_menu[e_vbox_menu].digit; + e_extdialing[1] = '\0'; + e_vbox_menu = -1; + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) executing selected menu:%d\n", e_extdialing[0]); + action_dialing_vbox_play(); /* redo this method using the digit */ + return; + + case '*': + if (e_vbox_menu < 0) + e_vbox_menu = 0; + else + e_vbox_menu--; + if (e_vbox_menu < 0) + while(vbox_menu[e_vbox_menu+1].english) /* jump to the end */ + e_vbox_menu++; + /* show menu */ + goto show_menu; + break; + + default: + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) unsupported digit '%c'\n", ea_endpoint->ep_serial, e_extdialing); + } + + done: + /* reset menu after dialing a function */ + if (e_extdialing[0]!='*' && e_extdialing[0]!='#') + e_vbox_menu = -1; + + + e_extdialing[0] = '\0'; + +} + + +/* + * this handler is called by Epoint::handler(), whenever the action is NUMB_ACTION_VBOX_PLAY + */ +void EndpointAppPBX::vbox_handler(void) +{ + /* refresh if counter changes */ + if (e_vbox_state==VBOX_STATE_PLAY || e_vbox_state==VBOX_STATE_RECORD_PLAY) + if (e_vbox_counter != e_vbox_counter_last) + { + e_vbox_counter_last = e_vbox_counter; + e_vbox_display_refresh = 1; + } + + /* refresh display, if required (include counter) */ + if (e_vbox_display_refresh && e_ext.vbox_display!=VBOX_DISPLAY_OFF) + { + char counter[32]; + struct message *message; + + SPRINT(counter, "%02d:%02d", e_vbox_counter/60, e_vbox_counter%60); + if (e_vbox_counter_max) + UPRINT(strchr(counter,'\0'), " of %02d:%02d", e_vbox_counter_max/60, e_vbox_counter_max%60); + + e_vbox_display_refresh = 0; + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_portlist->port_id, EPOINT_TO_PORT, MESSAGE_NOTIFY); + SPRINT(message->param.notifyinfo.display, e_vbox_display, counter); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) terminal %s pending display:%s\n", ea_endpoint->ep_serial, e_terminal, message->param.notifyinfo.display); + message_put(message); + logmessage(message); + } +} + + +/* + * the audio file has ended + * this is called by Endpoint::message_port(), whenever an audio of has been received + */ +void EndpointAppPBX::vbox_message_eof(void) +{ + char buffer[32]; + int language = e_ext.vbox_language; + + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) terminal %s end of file during state: %d\n", ea_endpoint->ep_serial, e_terminal, e_vbox_state); + + switch(e_vbox_state) + { + case VBOX_STATE_MENU: + case VBOX_STATE_NOTHING: + e_vbox_state = VBOX_STATE_MENU; + SCPY(e_vbox_display, (char *)((language)?"druecke 2 f. wiedergabe":"press 2 to play")); + e_vbox_display_refresh = 1; + set_tone_vbox("menu"); + break; + + case VBOX_STATE_PLAY: + if (e_vbox_speed > 0) + { + e_vbox_state = VBOX_STATE_MENU; + SCPY(e_vbox_display, (char *)((language)?"druecke 3 f. Naechste":"press 3 for next")); + e_vbox_display_refresh = 1; + set_tone_vbox("menu"); + } else + { + /* if we have endoffile because we were playing backwards, we continue to play forward */ + e_vbox_speed = 1; + e_vbox_counter = 1; + set_play_vbox(e_vbox_index_file, e_vbox_counter); + } + break; + + case VBOX_STATE_PAUSE: + SCPY(e_vbox_display, (char *)((language)?"druecke 2 f. weiterspielen":"press 2 to continue")); + e_vbox_display_refresh = 1; + break; + + case VBOX_STATE_CALLINFO_INTRO: + if (e_vbox_index_mday==now_tm->tm_mday && e_vbox_index_mon==now_tm->tm_mon && e_vbox_index_year==now_tm->tm_year) + goto skip_day_month; + e_vbox_state = VBOX_STATE_CALLINFO_MONTH; //german day + if (e_ext.vbox_language) + /* german starts with day */ + SPRINT(buffer, "day_%02d", e_vbox_index_mday); + else + /* english starts with month */ + SPRINT(buffer, "month_%02d", e_vbox_index_mon+1); + set_tone_vbox(buffer); + break; + + case VBOX_STATE_CALLINFO_MONTH: + e_vbox_state = VBOX_STATE_CALLINFO_DAY; //german month + if (e_ext.vbox_language) + { + /* done with month, so we send the month*/ + SPRINT(buffer, "month_%02d", e_vbox_index_mon+1); + } else + { + /* done with day, so we send the day */ + SPRINT(buffer, "day_%02d", e_vbox_index_mday); + } + set_tone_vbox(buffer); + break; + + case VBOX_STATE_CALLINFO_DAY: //german month + skip_day_month: + e_vbox_state = VBOX_STATE_CALLINFO_HOUR; + if (e_ext.vbox_language) + { + if (e_vbox_index_hour == 1) + SCPY(buffer, "number_ein"); + else + SPRINT(buffer, "number_%02d", e_vbox_index_hour); /* 1-23 hours */ + } else + { + SPRINT(buffer, "number_%02d", ((e_vbox_index_hour+11)%12)+1); /* 12 hours am/pm */ + } + set_tone_vbox(buffer); + break; + + case VBOX_STATE_CALLINFO_HOUR: + e_vbox_state = VBOX_STATE_CALLINFO_OCLOCK; + if (e_ext.vbox_language) + { + set_tone_vbox("oclock"); + } else + { + if (e_vbox_index_hour >= 12) + set_tone_vbox("oclock_pm"); + else + set_tone_vbox("oclock_am"); + } + break; + + case VBOX_STATE_CALLINFO_OCLOCK: + e_vbox_state = VBOX_STATE_CALLINFO_MIN; + if (e_ext.vbox_language) + { +// german says "zwlfuhr und eins" +// if (e_vbox_index_min == 1) +// SCPY(buffer, "number_eine"); +// else + SPRINT(buffer, "number_%02d", e_vbox_index_min); /* 1-59 minutes */ + } else + { + SPRINT(buffer, "number_%02d", e_vbox_index_min); + } + set_tone_vbox(buffer); + break; + + case VBOX_STATE_CALLINFO_MIN: + if (e_ext.vbox_language) + goto start_digits; + e_vbox_state = VBOX_STATE_CALLINFO_MINUTES; + if (e_vbox_index_mday == 1) + set_tone_vbox("minute"); + else + set_tone_vbox("minutes"); + break; + + case VBOX_STATE_CALLINFO_MINUTES: + start_digits: + e_vbox_state = VBOX_STATE_CALLINFO_DIGIT; + if (e_vbox_index_callerid[0]=='\0' || !strcmp(e_vbox_index_callerid,"anonymous") || !strcmp(e_vbox_index_callerid,"unknown")) + { + set_tone_vbox("call_anonymous"); + e_vbox_index_callerid_index = strlen(e_vbox_index_callerid); + } else + { + set_tone_vbox("call_from"); + e_vbox_index_callerid_index = 0; + } + break; + + case VBOX_STATE_CALLINFO_DIGIT: + while (e_vbox_index_callerid[e_vbox_index_callerid_index] && (e_vbox_index_callerid[e_vbox_index_callerid_index]<'0' || e_vbox_index_callerid[e_vbox_index_callerid_index]>'9')) + e_vbox_index_callerid_index++; + if (e_vbox_index_callerid[e_vbox_index_callerid_index]) + { + SPRINT(buffer, "number_%02d", e_vbox_index_callerid[e_vbox_index_callerid_index]-'0'); + set_tone_vbox(buffer); + e_vbox_index_callerid_index ++; + } else + { + /* the callinfo is played, so we start with the call */ + e_vbox_counter = 0; + e_vbox_counter_last = 0; + e_vbox_counter_max = 0; + e_vbox_speed = 1; + e_vbox_state = VBOX_STATE_PLAY; + SPRINT(e_vbox_display, "#%d %%s", e_vbox_play); + if (e_ext.vbox_display == VBOX_DISPLAY_DETAILED) + UPRINT(strchr(e_vbox_display,'\0'), " (%s)", e_vbox_index_callerid); + e_vbox_display_refresh = 1; + set_play_vbox(e_vbox_index_file, 0); + } + break; + + case VBOX_STATE_RECORD_ASK: + set_tone_vbox("record_ask"); + e_vbox_display_refresh = 1; + break; + + case VBOX_STATE_STORE_ASK: + set_tone_vbox("store_ask"); + e_vbox_display_refresh = 1; + break; + + case VBOX_STATE_DELETE_ASK: + set_tone_vbox("delete_ask"); + e_vbox_display_refresh = 1; + break; + + case VBOX_STATE_RECORD_PLAY: + e_vbox_state = VBOX_STATE_RECORD_ASK; + SCPY(e_vbox_display, (char *)((language)?"1=Aufn. 2=Wied. 3=nein":"1=record 2=play 3=no")); + e_vbox_display_refresh = 1; + set_tone_vbox("record_ask"); + break; + + case VBOX_STATE_STORE_DONE: + case VBOX_STATE_DELETE_DONE: + if (e_vbox_index_num == 0) /* nothing to play */ + { + e_vbox_state = VBOX_STATE_MENU; + SCPY(e_vbox_display, (char *)((language)?"keine Anrufe":"no calls")); + e_vbox_display_refresh = 1; + set_tone_vbox("nothing"); + } else + { + e_vbox_state = VBOX_STATE_MENU; + SCPY(e_vbox_display, (char *)((language)?"druecke 2 f. wiedergabe":"press 2 to play")); + e_vbox_display_refresh = 1; + set_tone_vbox("menu"); + } + break; + + default: + PERROR("vbox_message_eof(ep%d): terminal %s unknown state: %d\n", ea_endpoint->ep_serial, e_terminal, e_vbox_state); + } +} + + + +/* + * set the given vbox-tone with full path (without appending) + * the tone is played and after eof, a message is received + */ +void EndpointAppPBX::set_tone_vbox(char *tone) +{ + struct message *message; + + if (tone == NULL) + tone = ""; + + if (!ea_endpoint->ep_portlist) + { + PERROR("EPOINT(%d) no portlist\n", ea_endpoint->ep_serial); + } + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_portlist->port_id, EPOINT_TO_PORT, MESSAGE_VBOX_TONE); + SCPY(message->param.tone.dir, (char *)((e_ext.vbox_language)?"vbox_german":"vbox_english")); + SCPY(message->param.tone.name, tone); + message_put(message); + + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) terminal %s set tone '%s'\n", ea_endpoint->ep_serial, e_terminal, tone); +} + + +/* + * set the given recording file + * the appendix is removed + * the file is played and after eof, a message is received + * the current counter value is also received by a message + * set the offset in seconds of the current recording + */ +void EndpointAppPBX::set_play_vbox(char *file, int offset) +{ + char filename[256]; + struct message *message; + + SPRINT(filename, "%s/%s/%s/vbox/%s", INSTALL_DATA, options.extensions_dir, e_vbox, file); + + /* remove .wav */ + if (!strcmp(filename+strlen(filename)-4, ".wav")) /* filename is always more than 4 digits long */ + filename[strlen(filename)-4] = '\0'; + else // to not check twice + /* remove .isdn */ + if (!strcmp(filename+strlen(filename)-5, ".isdn")) /* filename is always more than 5 digits long */ + filename[strlen(filename)-5] = '\0'; + + if (!ea_endpoint->ep_portlist) + { + PERROR("EPOINT(%d) no portlist\n", ea_endpoint->ep_serial); + } + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_portlist->port_id, EPOINT_TO_PORT, MESSAGE_VBOX_PLAY); + SCPY(message->param.play.file, filename); + message->param.play.offset = offset; + message_put(message); + + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) terminal %s set play '%s'\n", ea_endpoint->ep_serial, e_terminal, filename); +} + + +/* + * change speed of the recording file, the default is 1 + * negative values cause negative speed + */ +void EndpointAppPBX::set_play_speed(int speed) +{ + struct message *message; + + if (!ea_endpoint->ep_portlist) + { + PERROR("EPOINT(%d) no portlist\n", ea_endpoint->ep_serial); + } + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_portlist->port_id, EPOINT_TO_PORT, MESSAGE_VBOX_PLAY_SPEED); + message->param.speed = speed; + message_put(message); + + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) terminal %s set speed '%d'\n", ea_endpoint->ep_serial, e_terminal, speed); +} + + + diff --git a/admin.h b/admin.h new file mode 100644 index 0000000..3e7b7ed --- /dev/null +++ b/admin.h @@ -0,0 +1,147 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** Administration tool header file ** +** ** +\*****************************************************************************/ + +#define SOCKET_NAME "/var/run/PBX4Linux.socket" + +/* structures that define message between admin-tool and pbx */ + +enum { /* messages */ + ADMIN_REQUEST_CMD_INTERFACE, + ADMIN_RESPONSE_CMD_INTERFACE, + ADMIN_REQUEST_CMD_ROUTE, + ADMIN_RESPONSE_CMD_ROUTE, + ADMIN_REQUEST_CMD_DIAL, + ADMIN_RESPONSE_CMD_DIAL, + ADMIN_REQUEST_CMD_RELEASE, + ADMIN_RESPONSE_CMD_RELEASE, + ADMIN_REQUEST_STATE, + ADMIN_RESPONSE_STATE, + ADMIN_RESPONSE_S_INTERFACE, + ADMIN_RESPONSE_S_PORT, + ADMIN_RESPONSE_S_EPOINT, + ADMIN_RESPONSE_S_CALL, + ADMIN_CALL_SETUP, + ADMIN_CALL_SETUP_ACK, + ADMIN_CALL_PROCEEDING, + ADMIN_CALL_ALERTING, + ADMIN_CALL_CONNECT, + ADMIN_CALL_DISCONNECT, + ADMIN_CALL_RELEASE, + ADMIN_CALL_NOTIFY, +}; + +struct admin_response_cmd { + int error; /* error code 0 = ok*/ + char message[256]; /* info / response text */ +}; + +struct admin_response_state { + char version_string[64]; + struct tm tm; + char logfile[128]; + int interfaces; + int calls; + int epoints; + int ports; +}; + +struct admin_response_interface { + int portnum; + char interface_name[32]; + int ntmode; + int ptp; + int pri; + int iftype; + int use; /* number of ports that use this interface */ + int l1link; /* down(0) or up(1) */ + int l2link; /* down(0) or up(1) */ + int channels; + int busy[256]; /* if port is idle(0) busy(1) */ + unsigned long port[256]; /* current port */ +}; + +struct admin_response_call { + unsigned long serial; /* call serial number */ + unsigned long partyline; +}; + +struct admin_response_epoint { + unsigned long serial; + unsigned long call; /* link to call */ +// int call_notify; /* if relation notified on hold */ +// int call_hold; /* if relation on hold */ + int rx_state; + int tx_state; + int state; + char terminal[16]; + char callerid[64]; + char dialing[64]; + char action[32]; + int park; /* if parked */ + int park_len; + unsigned char park_callid[8]; + int crypt; /* crypt state */ +}; + +struct admin_response_port { + unsigned long serial; /* port serial number */ + char name[64]; /* name of port */ + unsigned long epoint; /* link to epoint */ + int state; + int isdn; /* if port is isdn */ + int isdn_chan; /* bchannel number */ + int isdn_hold; /* on hold */ + int isdn_ces; /* ces to use (>=0)*/ +}; + +struct admin_call { + char interface[64]; /* name of port */ + char callerid[64]; /* use caller id */ + char dialing[64]; /* number to dial */ + int present; /* presentation */ + int cause; /* cause to send */ + int location; + int notify; + int bc_capa; + int bc_mode; + int bc_info1; + int hlc; + int exthlc; +}; + +struct admin_message { + int message; /* type of admin message */ + union u { + struct admin_response_cmd x; + struct admin_response_state s; + struct admin_response_interface i; + struct admin_response_port p; + struct admin_response_epoint e; + struct admin_response_call c; + struct admin_call call; + } u; +}; + +/* call states */ +enum { + ADMIN_STATE_IDLE, + ADMIN_STATE_IN_SETUP, + ADMIN_STATE_OUT_SETUP, + ADMIN_STATE_IN_OVERLAP, + ADMIN_STATE_OUT_OVERLAP, + ADMIN_STATE_IN_PROCEEDING, + ADMIN_STATE_OUT_PROCEEDING, + ADMIN_STATE_IN_ALERTING, + ADMIN_STATE_OUT_ALERTING, + ADMIN_STATE_CONNECT, + ADMIN_STATE_IN_DISCONNECT, + ADMIN_STATE_OUT_DISCONNECT, +}; diff --git a/admin_client.c b/admin_client.c new file mode 100644 index 0000000..41430f6 --- /dev/null +++ b/admin_client.c @@ -0,0 +1,1323 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** Administration tool ** +** ** +\*****************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "save.h" +#include "call.h" +#include "callpbx.h" +#include "admin.h" +#include "cause.h" + +#define LTEE {addch(ACS_LTEE);addch(ACS_HLINE);addch(ACS_HLINE);} +#define LLCORNER {addch(ACS_LLCORNER);addch(ACS_HLINE);addch(ACS_HLINE);} +#define VLINE {addch(ACS_VLINE);addstr(" ");} +#define EMPTY {addstr(" ");} +//char rotator[] = {'-', '\\', '|', '/'}; +int lastlines, lastcols; +int show_interfaces = 2, + show_calls = 1, + show_log = 1; + +enum { + MODE_STATE, + MODE_INTERFACE, + MODE_ROUTE, + MODE_DIAL, + MODE_RELEASE, + MODE_TESTCALL, +}; + +char *text_interfaces[] = { + "off", + "brief", + "active channels", + "all channels", +}; + +char *text_calls[] = { + "off", + "brief", + "structured", +}; + +char red = 1, + green = 2, + yellow = 3, + blue = 4, + mangenta = 5, + cyan = 6, + white = 7; + +#define LOGLINES 128 +char logline[LOGLINES][256]; +unsigned long logcur = 0; +int logfh = -1; +char logfile[128]; + +/* + * curses + */ +void init_curses(void) +{ + /* init curses */ + initscr(); cbreak(); noecho(); + start_color(); + nodelay(stdscr, TRUE); + if (COLOR_PAIRS>=8 && COLORS>=8) + { + init_pair(1,1,0); + init_pair(2,2,0); + init_pair(3,3,0); + init_pair(4,4,0); + init_pair(5,5,0); + init_pair(6,6,0); + init_pair(7,7,0); + } + lastlines = LINES; + lastcols = COLS; +} + +void cleanup_curses(void) +{ + endwin(); +} + +void color(int color) +{ + if (COLOR_PAIRS>=8 && COLORS>=8) + attrset(COLOR_PAIR(color)); +} + +/* + * permanently show current state using ncurses + */ +int debug_port(struct admin_message *msg, struct admin_message *m, int line, int i, int vline) +{ + char buffer[256]; + + color(white); + addstr("PORT:"); + color(yellow); + SPRINT(buffer,"%s(%d)", m[i].u.p.name,m[i].u.p.serial); + addstr(buffer); + color(cyan); + addstr(" state="); + switch (m[i].u.p.state) + { + case ADMIN_STATE_IDLE: + color(red); + addstr("'idle'"); + break; + case ADMIN_STATE_IN_SETUP: + color(red); + addstr("'in << setup'"); + break; + case ADMIN_STATE_OUT_SETUP: + color(red); + addstr("'out >> setup'"); + break; + case ADMIN_STATE_IN_OVERLAP: + color(yellow); + addstr("'in << overlap'"); + break; + case ADMIN_STATE_OUT_OVERLAP: + color(yellow); + addstr("'out >> overlap'"); + break; + case ADMIN_STATE_IN_PROCEEDING: + color(mangenta); + addstr("'in << proc'"); + break; + case ADMIN_STATE_OUT_PROCEEDING: + color(mangenta); + addstr("'out >> proc'"); + break; + case ADMIN_STATE_IN_ALERTING: + color(cyan); + addstr("'in << alert'"); + break; + case ADMIN_STATE_OUT_ALERTING: + color(cyan); + addstr("'out >> alert'"); + break; + case ADMIN_STATE_CONNECT: + color(white); + addstr("'connect'"); + break; + case ADMIN_STATE_IN_DISCONNECT: + color(blue); + addstr("'in << disc'"); + break; + case ADMIN_STATE_OUT_DISCONNECT: + color(blue); + addstr("'out >> disc'"); + break; + default: + color(blue); + addstr("'--NONE--'"); + } + + if (m[i].u.p.isdn) + { + color(cyan); + addstr(" bchannel="); + color(white); + SPRINT(buffer,"%d", m[i].u.p.isdn_chan); + addstr(buffer); + if (m[i].u.p.isdn_ces >= 0) + { + color(cyan); + addstr(" ces="); + color(yellow); + SPRINT(buffer, "%d", m[i].u.p.isdn_ces); + addstr(buffer); + } + if (m[i].u.p.isdn_hold) + { + color(red); + addstr(" hold"); + } + } + + return(line); +} +int debug_epoint(struct admin_message *msg, struct admin_message *m, int line, int i, int vline) +{ + unsigned long epoint = m[i].u.e.serial; + char buffer[256]; + unsigned char c; + int j, jj; + int ltee; + + color(white); + SPRINT(buffer,"EPOINT(%d)", epoint); + addstr(buffer); + color(cyan); + addstr(" state="); + switch (m[i].u.e.state) + { + case ADMIN_STATE_IDLE: + color(red); + addstr("'idle'"); + break; + case ADMIN_STATE_IN_SETUP: + color(red); + addstr("'in << setup'"); + break; + case ADMIN_STATE_OUT_SETUP: + color(red); + addstr("'out >> setup'"); + break; + case ADMIN_STATE_IN_OVERLAP: + color(yellow); + addstr("'in << overlap'"); + break; + case ADMIN_STATE_OUT_OVERLAP: + color(yellow); + addstr("'out >> overlap'"); + break; + case ADMIN_STATE_IN_PROCEEDING: + color(mangenta); + addstr("'in << proc'"); + break; + case ADMIN_STATE_OUT_PROCEEDING: + color(mangenta); + addstr("'out >> proc'"); + break; + case ADMIN_STATE_IN_ALERTING: + color(cyan); + addstr("'in << alert'"); + break; + case ADMIN_STATE_OUT_ALERTING: + color(cyan); + addstr("'out >> alert'"); + break; + case ADMIN_STATE_CONNECT: + color(white); + addstr("'connect'"); + break; + case ADMIN_STATE_IN_DISCONNECT: + color(blue); + addstr("'in << disc'"); + break; + case ADMIN_STATE_OUT_DISCONNECT: + color(blue); + addstr("'out >> disc'"); + break; + default: + color(blue); + addstr("'--NONE--'"); + } + if (m[i].u.e.terminal[0]) + { + color(cyan); + addstr(" terminal="); + color(green); + addstr(m[i].u.e.terminal); + } + color(white); + SPRINT(buffer, " %s", m[i].u.e.callerid); + addstr(buffer); + color(cyan); + addstr("->"); + color(white); + addstr(m[i].u.e.dialing); + if (m[i].u.e.action[0]) + { + color(cyan); + addstr(" action="); + color(yellow); + addstr(m[i].u.e.action); + } + if (m[i].u.e.park) + { + color(cyan); + addstr(" park="); /* 9 digits */ + color(green); + UCPY(buffer, "\""); /* 9 digits */ + j = 0; + jj = m[i].u.e.park_len; + while(j < jj) + { + c = m[i].u.e.park_callid[j]; + if (c >= 32 && c < 127 && c != '[') + { + SCCAT(buffer, c); + } else + UPRINT(buffer+strlen(buffer), "[%02x]", c); + j++; + } + SCAT(buffer, "\""); + addstr(buffer); + } else + { + color(red); + switch(m[i].u.e.rx_state) + { + case NOTIFY_STATE_SUSPEND: + addstr(" in=suspend"); + break; + case NOTIFY_STATE_HOLD: + addstr(" in=hold"); + break; + case NOTIFY_STATE_CONFERENCE: + addstr(" in=conference"); + break; + } + switch(m[i].u.e.tx_state) + { + case NOTIFY_STATE_SUSPEND: + addstr(" out=suspend"); + break; + case NOTIFY_STATE_HOLD: + addstr(" out=hold"); + break; + case NOTIFY_STATE_CONFERENCE: + addstr(" out=conference"); + break; + } + } + if (m[i].u.e.crypt) + { + color(cyan); + addstr(" crypt="); + if (m[i].u.e.crypt) /* crypt on */ + { + color(green); + addstr("active"); + } else + { + color(yellow); + addstr("pending"); + } + } + /* loop all related ports */ + ltee = 0; + j = msg->u.s.interfaces+msg->u.s.calls+msg->u.s.epoints; + jj = j + msg->u.s.ports; + while(j < jj) + { + if (m[j].u.p.epoint == epoint) + { + color(cyan); + move(++line>1?line:1, 1); + if (vline) + VLINE + else + EMPTY + move(line>1?line:1, 5); + LTEE + ltee = line; + move(line>1?line:1, 8); + if (line+2 >= LINES) break; + line = debug_port(msg, m, line, j, vline); + if (line+2 >= LINES) break; + } + j++; + } + if (ltee) + { + color(cyan); + move(ltee>1?line:1, 5); + LLCORNER + } + + return(line); +} +int debug_call(struct admin_message *msg, struct admin_message *m, int line, int i) +{ + unsigned long call = m[i].u.c.serial; + char buffer[256]; + int j, jj; + + color(white); + SPRINT(buffer,"CALL(%d)", call); + addstr(buffer); + if (m[i].u.c.partyline) + { + color(cyan); + addstr(" partyline="); + color(white); + SPRINT(buffer, "%d\n", m[i].u.c.partyline); + addstr(buffer); + } + /* find number of epoints */ + j = msg->u.s.interfaces+msg->u.s.calls; + jj = j + msg->u.s.epoints; + i = 0; + while(j < jj) + { + if (m[j].u.e.call == call) + i++; + j++; + } + /* loop all related endpoints */ + j = msg->u.s.interfaces+msg->u.s.calls; + jj = j + msg->u.s.epoints; + while(j < jj) + { + if (m[j].u.e.call == call) + { + i--; + move(++line>1?line:1, 1); + color(cyan); + if (i) + LTEE + else + LLCORNER + move(line>1?line:1, 4); + if (line+2 >= LINES) break; + line = debug_epoint(msg, m, line, j, i?1:0); + if (line+2 >= LINES) break; + } + j++; + } + + return(line); +} +char *admin_state(int sock) +{ + struct admin_message msg, + *m; + char buffer[256], + *p; + int line, offset = 0; + int i, ii, j, jj, k; + unsigned long l, ll; + int num; + int len; + int off; + int ltee; + int anything; + + /* flush logfile name */ + logfile[0] = '\0'; + + /* init curses */ + init_curses(); + + again: + /* send reload command */ + memset(&msg, 0, sizeof(msg)); + msg.message = ADMIN_REQUEST_STATE; +// printf("sizeof=%d\n",sizeof(msg)); + if (write(sock, &msg, sizeof(msg)) != sizeof(msg)) + { + cleanup_curses(); + return("Broken pipe while sending command."); + } + + /* receive response */ + if (read(sock, &msg, sizeof(msg)) != sizeof(msg)) + { + cleanup_curses(); + return("Broken pipe while receiving response."); + } + if (msg.message != ADMIN_RESPONSE_STATE) + { + cleanup_curses(); + return("Response not valid. Expecting state response."); + } + num = msg.u.s.interfaces + msg.u.s.calls + msg.u.s.epoints + msg.u.s.ports; + if (!(m = (struct admin_message *)malloc(num*sizeof(struct admin_message)))) + { + cleanup_curses(); + return("Not enough memory for messages."); + } + off=0; +readagain: + if ((len = read(sock, ((unsigned char *)(m))+off, + num*sizeof(struct admin_message)-off)) != num*sizeof(struct admin_message)-off) + { + if (len <= 0) { + free(m); +// fprintf(stderr, "got=%d expected=%d\n", i, num*sizeof(struct admin_message)); + cleanup_curses(); + return("Broken pipe while receiving state infos."); + } + if (len < num*sizeof(struct admin_message)) + { + off+=len; + goto readagain; + } + } + j = 0; + i = 0; +// fprintf("getting =%d interfaces\n", msg.u.s.interfaces); + while(i < msg.u.s.interfaces) + { +// fprintf(stderr, "j=%d message=%d\n", j, m[j].message); + if (m[j].message != ADMIN_RESPONSE_S_INTERFACE) + { + free(m); + cleanup_curses(); + return("Response not valid. Expecting interface information."); + } + i++; + j++; + } + i = 0; + while(i < msg.u.s.calls) + { + if (m[j].message != ADMIN_RESPONSE_S_CALL) + { + free(m); + cleanup_curses(); + return("Response not valid. Expecting call information."); + } + i++; + j++; + } + i = 0; + while(i < msg.u.s.epoints) + { + if (m[j].message != ADMIN_RESPONSE_S_EPOINT) + { + free(m); + cleanup_curses(); + return("Response not valid. Expecting endpoint information."); + } + i++; + j++; + } + i = 0; + while(i < msg.u.s.ports) + { + if (m[j].message != ADMIN_RESPONSE_S_PORT) + { + free(m); + cleanup_curses(); + return("Response not valid. Expecting port information."); + } + i++; + j++; + } + // now j is the number of message blocks + + /* display start */ + erase(); + + line = 1-offset; + + /* change log */ + if (!!strcmp(logfile, msg.u.s.logfile)) + { + SCPY(logfile, msg.u.s.logfile); + if (logfh >= 0) + close(logfh); + i = 0; + ii = LOGLINES; + while(i < ii) + { + logline[i][0] = '~'; + logline[i][1] = '\0'; + i++; + } + logcur = 0; + logfh = open(logfile, O_RDONLY|O_NONBLOCK); + if (logfh >= 0) + { + /* seek at the end -8000 chars */ + lseek(logfh, -8000, SEEK_END); + /* if not at the beginning, read until endofline */ + logline[logcur % LOGLINES][0] = '\0'; + l = read(logfh, logline[logcur % LOGLINES], sizeof(logline[logcur % LOGLINES])-1); + if (l > 0) + { + /* read first line and skip junk */ + logline[logcur % LOGLINES][l] = '\0'; + if ((p = strchr(logline[logcur % LOGLINES],'\n'))) + { + logcur++; + SCPY(logline[logcur % LOGLINES], p+1); + SCPY(logline[(logcur-1) % LOGLINES], "..."); + } + goto finish_line; + } + } + } + + /* read log */ + if (logfh >= 0) + { + while(42) + { + ll = strlen(logline[logcur % LOGLINES]); + l = read(logfh, logline[logcur % LOGLINES]+ll, sizeof(logline[logcur % LOGLINES])-ll-1); + if (l<=0) + break; + logline[logcur % LOGLINES][ll+l] = '\0'; + finish_line: + /* put data to lines */ + while ((p = strchr(logline[logcur % LOGLINES],'\n'))) + { + *p = '\0'; + logcur++; + SCPY(logline[logcur % LOGLINES], p+1); + } + /* if line is full without return, go next line */ + if (strlen(logline[logcur % LOGLINES]) == sizeof(logline[logcur % LOGLINES])-1) + { + logcur++; + logline[logcur % LOGLINES][0] = '\0'; + } + } + } + + /* display interfaces */ + if (show_interfaces > 0) + { + anything = 0; + i = 0; + ii = i + msg.u.s.interfaces; + while(i < ii) + { + /* show interface summary */ + move(++line>1?line:1, 0); + color(white); + + SPRINT(buffer, "%s(%d) '%s' %s use:%d ", (m[i].u.i.ntmode)?"NT":"TE", m[i].u.i.portnum, m[i].u.i.interface_name, (m[i].u.i.ptp)?"ptp ":"ptmp", m[i].u.i.use); + addstr(buffer); + if (m[i].u.i.ptp || !m[i].u.i.ntmode) + { + color((m[i].u.i.l2link)?green:red); + addstr((m[i].u.i.l2link)?" L2 UP":" L2 down"); + } + color((m[i].u.i.l1link)?green:blue); + addstr((m[i].u.i.l1link)?" L1 ACTIVE":" L1 inactive"); + if (line+2 >= LINES) goto end; + /* show channels */ + if (show_interfaces > 1) + { + ltee = 0; + j = k =0; + jj = m[i].u.i.channels; + while(j < jj) + { + /* show all channels */ + if (show_interfaces>2 || m[i].u.i.busy[j]>0) + { + color(cyan); + /* show left side / right side */ + if ((k & 1) && (COLS > 70)) + { + move(line>1?line:1,4+((COLS-4)/2)); + } else + { + move(++line>1?line:1, 1); + LTEE + ltee = 1; + } + k++; + color(white); + if (m[i].u.i.pri) + SPRINT(buffer,"S%2d: ", j+1+(j>=15)); + else + SPRINT(buffer,"B%2d: ", j+1); + addstr(buffer); + if (!m[i].u.i.ptp) + goto ptmp; + if (m[i].u.i.l2link) + { + ptmp: + color((m[i].u.i.busy[j])?yellow:blue); + addstr((m[i].u.i.busy[j])?"busy":"idle"); + } else + { + color(red); + addstr("blk "); + } + if (m[i].u.i.port[j]) + { + /* search for port */ + l = msg.u.s.interfaces+msg.u.s.calls+msg.u.s.epoints; + ll = l+msg.u.s.ports; + while(l < ll) + { + if (m[l].u.p.serial == m[i].u.i.port[j]) + { + SPRINT(buffer, " %s(%ld)", m[l].u.p.name, m[l].u.p.serial); + addstr(buffer); + } + l++; + } + } + if (line+2 >= LINES) + { + if (ltee) + { + color(cyan); + move(line>1?line:1, 1); + LLCORNER + } + goto end; + } + } + j++; + } + if (ltee) + { + color(cyan); + move(line>1?line:1, 1); + LLCORNER + } + if (line+2 >= LINES) goto end; + /* show summary if no channels were shown */ + if (show_interfaces<2 && ltee==0) + { + color(cyan); + move(++line>1?line:1, 1); + LLCORNER + + if (m[i].u.i.l2link) + { + color(green); + SPRINT(buffer,"all %d channels free", m[i].u.i.channels); + } else + { + color(red); + SPRINT(buffer,"all %d channels blocked", m[i].u.i.channels); + } + addstr(buffer); + } + if (line+2 >= LINES) goto end; + } + i++; + anything = 1; + } + if (anything) + line++; + if (line+2 >= LINES) goto end; + } + /* display calls (brief) */ + if (show_calls == 1) + { + anything = 0; + i = msg.u.s.interfaces+msg.u.s.calls; + ii = i+msg.u.s.epoints; + while(i < ii) + { + /* for each endpoint... */ + if (!m[i].u.e.call) + { + move(++line>1?line:1, 0); + color(white); + SPRINT(buffer, "(%d): ", m[i].u.e.serial); + addstr(buffer); + color(cyan); + if (m[i].u.e.terminal[0]) + { + addstr("intern="); + color(green); + addstr(m[i].u.e.terminal); + } else + addstr("extern"); + color(white); + SPRINT(buffer, " %s", m[i].u.e.callerid); + addstr(buffer); + color(cyan); + addstr("->"); + color(white); + SPRINT(buffer, "%s", m[i].u.e.dialing); + addstr(buffer); + if (m[i].u.e.action[0]) + { + color(cyan); + addstr(" action="); + color(yellow); + addstr(m[i].u.e.action); + } + if (line+2 >= LINES) goto end; + } + i++; + anything = 1; + } + j = msg.u.s.interfaces; + jj = j+msg.u.s.calls; + while(j < jj) + { + /* for each call... */ + move(++line>1?line:1, 0); + color(white); + SPRINT(buffer, "(%d):", m[j].u.c.serial); + addstr(buffer); + i = msg.u.s.interfaces+msg.u.s.calls; + ii = i+msg.u.s.epoints; + while(i < ii) + { + /* for each endpoint... */ + if (m[i].u.e.call == m[j].u.c.serial) + { + color(white); + SPRINT(buffer, " (%d)", m[i].u.e.serial); + addstr(buffer); + color(cyan); + if (m[i].u.e.terminal[0]) + { + addstr("int="); + color(green); + addstr(m[i].u.e.terminal); + } else + addstr("ext"); + color(white); + SPRINT(buffer, "-%s", m[i].u.e.callerid); + addstr(buffer); + color(cyan); + addstr(">"); + color(white); + SPRINT(buffer, "%s", m[i].u.e.dialing); + addstr(buffer); + } + i++; + anything = 1; + } + if (line+2 >= LINES) goto end; + j++; + } + if (anything) + line++; + if (line+2 >= LINES) goto end; + } + /* display calls (structurd) */ + if (show_calls == 2) + { + /* show all ports with no epoint */ + anything = 0; + i = msg.u.s.interfaces+msg.u.s.calls+msg.u.s.epoints; + ii = i+msg.u.s.ports; + while(i < ii) + { + if (!m[i].u.p.epoint) + { + move(++line>1?line:1, 8); + if (line+2 >= LINES) goto end; + line = debug_port(&msg, m, line, i, 0); + if (line+2 >= LINES) goto end; + anything = 1; + } + i++; + } + if (anything) + line++; + if (line+2 >= LINES) goto end; + + /* show all epoints with no call */ + anything = 0; + i = msg.u.s.interfaces+msg.u.s.calls; + ii = i+msg.u.s.epoints; + while(i < ii) + { + if (!m[i].u.e.call) + { + move(++line>1?line:1, 4); + if (line+2 >= LINES) goto end; + line = debug_epoint(&msg, m, line, i, 0); + if (line+2 >= LINES) goto end; + anything = 1; + } + i++; + } + if (anything) + line++; + if (line+2 >= LINES) goto end; + + /* show all calls */ + anything = 0; + i = msg.u.s.interfaces; + ii = i+msg.u.s.calls; + while(i < ii) + { + move(++line>1?line:1, 0); + if (line+2 >= LINES) goto end; + line = debug_call(&msg, m, line, i); + if (line+2 >= LINES) goto end; + i++; + anything = 1; + } + if (anything) + line++; + if (line+2 >= LINES) goto end; + + } + + /* show log */ + if (show_log) + { + if (line+2 < LINES) + { + move(line++>1?line-1:1, 0); + color(blue); + hline(ACS_HLINE, COLS); + color(white); + + l = logcur-(LINES-line-2); + ll = logcur; + if (ll-l >= LOGLINES) + l = ll-LOGLINES+1; + while(l!=ll) + { + move(line++>1?line-1:1, 0); + SCPY(buffer, logline[l % LOGLINES]); + if (COLS < (int)sizeof(buffer)) + buffer[COLS] = '\0'; + addstr(buffer); + l++; + } + } + } + + end: + /* free memory */ + free(m); + /* display name/time */ +// move(0, 0); +// hline(' ', COLS); + move(0, 0); + color(white); + msg.u.s.version_string[sizeof(msg.u.s.version_string)-1] = '\0'; + SPRINT(buffer, "PBX4Linux %s", msg.u.s.version_string); + addstr(buffer); + if (COLS>50) + { + move(0, COLS-19); + SPRINT(buffer, "%04d-%02d-%02d %02d:%02d:%02d", + msg.u.s.tm.tm_year+1900, msg.u.s.tm.tm_mon+1, msg.u.s.tm.tm_mday, + msg.u.s.tm.tm_hour, msg.u.s.tm.tm_min, msg.u.s.tm.tm_sec); + addstr(buffer); + } + /* displeay head line */ + move(1, 0); + color(blue); + hline(ACS_HLINE, COLS); + if (offset) + { + move(1, 1); + SPRINT(buffer, "Offset +%d", offset); + color(red); + addstr(buffer); + } + /* display end */ + move(LINES-2, 0); + color(white); + hline(ACS_HLINE, COLS); + move(LINES-1, 0); + color(white); + SPRINT(buffer, "i = interfaces '%s' c = calls '%s' l = log q = quit +/- = scroll", text_interfaces[show_interfaces], text_calls[show_calls]); + addstr(buffer); + refresh(); + + /* resize */ + if (lastlines!=LINES || lastcols!=COLS) + { + cleanup_curses(); + init_curses(); + goto again; + } + + /* user input */ + switch(getch()) + { + case 12: /* refresh */ + cleanup_curses(); + init_curses(); + goto again; + break; + + case 3: /* abort */ + case 'q': + case 'Q': + break; + + case 'i': /* toggle interface */ + show_interfaces++; + if (show_interfaces > 3) show_interfaces = 0; + goto again; + + case 'c': /* toggle calls */ + show_calls++; + if (show_calls > 2) show_calls = 0; + goto again; + + case 'l': /* toggle log */ + show_log++; + if (show_log > 1) show_log = 0; + goto again; + + case '+': /* scroll down */ + offset++; + goto again; + + case '-': /* scroll up */ + if (offset) + offset--; + goto again; + + default: + usleep(250000); + goto again; + } + + /* check for logfh */ + if (logfh >= 0) + close(logfh); + logfh = -1; + + /* cleanup curses and exit */ + cleanup_curses(); + + return(NULL); +} + + +/* + * Send command and show error message. + */ +char *admin_cmd(int sock, int mode, char *extension, char *number) +{ + static struct admin_message msg; + + /* send reload command */ + memset(&msg, 0, sizeof(msg)); + switch(mode) + { + case MODE_INTERFACE: + msg.message = ADMIN_REQUEST_CMD_INTERFACE; + break; + case MODE_ROUTE: + msg.message = ADMIN_REQUEST_CMD_ROUTE; + break; + case MODE_DIAL: + msg.message = ADMIN_REQUEST_CMD_DIAL; + SPRINT(msg.u.x.message, "%s:%s", extension?:"", number?:""); + break; + case MODE_RELEASE: + msg.message = ADMIN_REQUEST_CMD_RELEASE; + SCPY(msg.u.x.message, number); + break; + } + + if (write(sock, &msg, sizeof(msg)) != sizeof(msg)) + return("Broken pipe while sending command."); + + /* receive response */ + if (read(sock, &msg, sizeof(msg)) != sizeof(msg)) + return("Broken pipe while receiving response."); + switch(mode) + { + case MODE_INTERFACE: + if (msg.message != ADMIN_RESPONSE_CMD_INTERFACE) + return("Response not valid."); + break; + case MODE_ROUTE: + if (msg.message != ADMIN_RESPONSE_CMD_ROUTE) + return("Response not valid."); + break; + case MODE_DIAL: + if (msg.message != ADMIN_RESPONSE_CMD_DIAL) + return("Response not valid."); + break; + case MODE_RELEASE: + if (msg.message != ADMIN_RESPONSE_CMD_RELEASE) + return("Response not valid."); + break; + } + + /* process response */ + if (msg.u.x.error) + { + return(msg.u.x.message); + } + printf("Command successfull.\n"); + return(NULL); +} + + +/* + * makes a testcall + */ +char *admin_testcall(int sock, int argc, char *argv[]) +{ + static struct admin_message msg; + + printf("pid=%d\n", getpid()); fflush(stdout); + + /* send reload command */ + memset(&msg, 0, sizeof(msg)); + msg.message = ADMIN_CALL_SETUP; + if (argc > 2) + { + SCPY(msg.u.call.interface, argv[2]); + } + if (argc > 3) + { + SCPY(msg.u.call.callerid, argv[3]); + } + if (argc > 4) + { + SCPY(msg.u.call.dialing, argv[4]); + } + if (argc > 5) + { + if (argv[5][0] == 'p') + msg.u.call.present = 1; + } + msg.u.call.bc_capa = 0x00; /*INFO_BC_SPEECH*/ + msg.u.call.bc_mode = 0x00; /*INFO_BMODE_CIRCUIT*/ + msg.u.call.bc_info1 = 0; + msg.u.call.hlc = 0; + msg.u.call.exthlc = 0; + if (argc > 6) + msg.u.call.bc_capa = strtol(argv[6],NULL,0); + else + msg.u.call.bc_info1 = 3 | 0x80; /* alaw, if no capability is given at all */ + if (argc > 7) { + msg.u.call.bc_mode = strtol(argv[7],NULL,0); + if (msg.u.call.bc_mode) msg.u.call.bc_mode = 2; + } + if (argc > 8) { + msg.u.call.bc_info1 = strtol(argv[8],NULL,0); + if (msg.u.call.bc_info1 < 0) + msg.u.call.bc_info1 = 0; + else + msg.u.call.bc_info1 |= 0x80; + } + if (argc > 9) { + msg.u.call.hlc = strtol(argv[9],NULL,0); + if (msg.u.call.hlc < 0) + msg.u.call.hlc = 0; + else + msg.u.call.hlc |= 0x80; + } +// printf("hlc=%d\n", msg.u.call.hlc); + if (argc > 10) { + msg.u.call.exthlc = strtol(argv[10],NULL,0); + if (msg.u.call.exthlc < 0) + msg.u.call.exthlc = 0; + else + msg.u.call.exthlc |= 0x80; + } + + if (write(sock, &msg, sizeof(msg)) != sizeof(msg)) + return("Broken pipe while sending command."); + + /* receive response */ +next: + if (read(sock, &msg, sizeof(msg)) != sizeof(msg)) + return("Broken pipe while receiving response."); + switch(msg.message) + { + case ADMIN_CALL_SETUP_ACK: + printf("SETUP ACKNOWLEDGE\n"); fflush(stdout); + goto next; + + case ADMIN_CALL_PROCEEDING: + printf("PROCEEDING\n"); fflush(stdout); + goto next; + + case ADMIN_CALL_ALERTING: + printf("ALERTING\n"); fflush(stdout); + goto next; + + case ADMIN_CALL_CONNECT: + printf("CONNECT\n number=%s\n", msg.u.call.callerid); fflush(stdout); + goto next; + + case ADMIN_CALL_NOTIFY: + printf("NOTIFY\n notify=%d\n number=%s\n", msg.u.call.notify, msg.u.call.callerid); fflush(stdout); + goto next; + + case ADMIN_CALL_DISCONNECT: + printf("DISCONNECT\n cause=%d %s\n location=%d %s\n", msg.u.call.cause, (msg.u.call.cause>0 && msg.u.call.cause<128)?isdn_cause[msg.u.call.cause].german:"", msg.u.call.location, (msg.u.call.location>=0 && msg.u.call.location<128)?isdn_location[msg.u.call.location].german:""); fflush(stdout); + goto next; + + case ADMIN_CALL_RELEASE: + printf("RELEASE\n cause=%d %s\n location=%d %s\n", msg.u.call.cause, (msg.u.call.cause>0 && msg.u.call.cause<128)?isdn_cause[msg.u.call.cause].german:"", msg.u.call.location, (msg.u.call.location>=0 && msg.u.call.location<128)?isdn_location[msg.u.call.location].german:""); fflush(stdout); + break; + + default: + return("Response not valid."); + } + + printf("Command successfull.\n"); + return(NULL); +} + + +/* + * main function + */ +int main(int argc, char *argv[]) +{ + int mode; + char *socket_name = SOCKET_NAME; + int sock, conn; + struct sockaddr_un sock_address; + char *ret; + + + /* show options */ + if (argc <= 1) + { + usage: + printf("\n"); + printf("Usage: %s state | interface | route | dial ...\n", argv[0]); + printf("state - View current states using graphical console output.\n"); + printf("interface - Tell PBX to reload \"interface.conf\".\n"); + printf("route - Tell PBX to reload \"route.conf\".\n"); + printf("dial - Tell PBX the next number to dial for extension.\n"); + printf("release - Tell PBX to release endpoint with given number.\n"); + printf("testcall [present|restrict []] - Testcall\n"); + printf(" -> capability = (Values must be numbers, -1 to omit.)\n"); + printf("\n"); + return(0); + } + + /* check mode */ + if (!(strcasecmp(argv[1],"state"))) + { + mode = MODE_STATE; + } else + if (!(strcasecmp(argv[1],"interface"))) + { + mode = MODE_INTERFACE; + } else + if (!(strcasecmp(argv[1],"route"))) + { + mode = MODE_ROUTE; + } else + if (!(strcasecmp(argv[1],"dial"))) + { + if (argc <= 3) + goto usage; + mode = MODE_DIAL; + } else + if (!(strcasecmp(argv[1],"release"))) + { + if (argc <= 2) + goto usage; + mode = MODE_RELEASE; + } else + if (!(strcasecmp(argv[1],"testcall"))) + { + if (argc <= 4) + goto usage; + mode = MODE_TESTCALL; + } else + { + goto usage; + } + +//pipeagain: + /* open socket */ + if ((sock = socket(PF_UNIX, SOCK_STREAM, 0)) < 0) + { + fprintf(stderr, "Failed to create socket.\n"); + exit(EXIT_FAILURE); + } + memset(&sock_address, 0, sizeof(sock_address)); + sock_address.sun_family = PF_UNIX; + UCPY(sock_address.sun_path, socket_name); + if ((conn = connect(sock, (struct sockaddr *)&sock_address, SUN_LEN(&sock_address))) < 0) + { + close(sock); + fprintf(stderr, "Failed to connect to socket \"%s\".\nIs PBX4Linux running?\n", sock_address.sun_path); + exit(EXIT_FAILURE); + } + + /* process mode */ + switch(mode) + { + case MODE_STATE: + ret = admin_state(sock); + break; + + case MODE_INTERFACE: + case MODE_ROUTE: + ret = admin_cmd(sock, mode, NULL, NULL); + break; + + case MODE_DIAL: + ret = admin_cmd(sock, mode, argv[2], argv[3]); + break; + + case MODE_RELEASE: + ret = admin_cmd(sock, mode, NULL, argv[2]); + break; + + case MODE_TESTCALL: + ret = admin_testcall(sock, argc, argv); + } + + close(sock); + /* now we say good bye */ + if (ret) + { +// if (!strncasecmp(ret, "Broken Pipe", 11)) +// goto pipeagain; + printf("%s\n", ret); + exit(EXIT_FAILURE); + } +} + + + + + diff --git a/admin_server.c b/admin_server.c new file mode 100644 index 0000000..80f2875 --- /dev/null +++ b/admin_server.c @@ -0,0 +1,991 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** Socket link ** +** ** +\*****************************************************************************/ + +#include +//#include +//#include +#include +//#include +//#include +//#include +//#include +//#include +#include +//#include +//#include +//#include +//#include +#include +#include +#include +#include "main.h" + + +char *socket_name = SOCKET_NAME; +int sock = -1; +struct sockaddr_un sock_address; + +struct admin_list *admin_list = NULL; + +/* + * initialize admin socket + */ +int admin_init(void) +{ + unsigned long on = 1; + + /* open and bind socket */ + if ((sock = socket(PF_UNIX, SOCK_STREAM, 0)) < 0) + { + PERROR("Failed to create admin socket. (errno=%d)\n", errno); + return(-1); + } + fhuse++; + memset(&sock_address, 0, sizeof(sock_address)); + sock_address.sun_family = AF_UNIX; + UCPY(sock_address.sun_path, socket_name); + unlink(socket_name); + if (bind(sock, (struct sockaddr *)(&sock_address), SUN_LEN(&sock_address)) < 0) + { + close(sock); + unlink(socket_name); + fhuse--; + sock = -1; + PERROR("Failed to bind admin socket to \"%s\". (errno=%d)\n", sock_address.sun_path, errno); + return(-1); + } + if (listen(sock, 5) < 0) + { + close(sock); + unlink(socket_name); + fhuse--; + sock = -1; + PERROR("Failed to listen to socket \"%s\". (errno=%d)\n", sock_address.sun_path, errno); + return(-1); + } + if (ioctl(sock, FIONBIO, (unsigned char *)(&on)) < 0) + { + close(sock); + unlink(socket_name); + fhuse--; + sock = -1; + PERROR("Failed to set socket \"%s\" into non-blocking mode. (errno=%d)\n", sock_address.sun_path, errno); + return(-1); + } + return(0); +} + + +/* + * free connection + */ +void free_connection(struct admin_list *admin) +{ + struct admin_queue *response; + void *temp; + + if (admin->sock >= 0) + { + close(admin->sock); + fhuse--; + } +// printf("new\n", response); + response = admin->response; + while (response) + { +//#warning +// printf("%x\n", response); + temp = response->next; + free(response); + memuse--; + response = (struct admin_queue *)temp; + } +// printf("new2\n", response); + free(admin); +// printf("new3\n", response); + memuse--; +} + + +/* + * cleanup admin socket + */ +void admin_cleanup(void) +{ + struct admin_list *admin, *next;; + + admin = admin_list; + while(admin) + { +//printf("clean\n"); + next = admin->next; + free_connection(admin); + admin = next; + } + + if (sock >= 0) + { + close(sock); + fhuse--; + } +} + + +/* + * do interface reload + */ +int admin_interface(struct admin_queue **responsep) +{ + struct admin_queue *response; /* response pointer */ + char *err_txt = ""; + int err = 0; + + if (read_interfaces()) + { + relink_interfaces(); + free_interfaces(interface_first); + interface_first = interface_newlist; + interface_newlist = NULL; + } else + { + err_txt = interface_error; + err = -1; + } + /* create state response */ + response = (struct admin_queue *)malloc(sizeof(struct admin_queue)+sizeof(admin_message)); + if (!response) + return(-1); + memuse++; + memset(response, 0, sizeof(admin_queue)); + response->num = 1; + /* message */ + response->am[0].message = ADMIN_RESPONSE_CMD_INTERFACE; + /* error */ + response->am[0].u.x.error = err; + /* message */ + SCPY(response->am[0].u.x.message, err_txt); + /* attach to response chain */ + *responsep = response; + responsep = &response->next; + + return(0); +} + + +/* + * do route reload + */ +int admin_route(struct admin_queue **responsep) +{ + struct route_ruleset *ruleset_new; + struct admin_queue *response; /* response pointer */ + char err_txt[256] = ""; + int err = 0; +#if 0 + int n; +#endif + class EndpointAppPBX *apppbx; + +#if 0 + n = 0; + apppbx = apppbx_first; + while(apppbx) + { + n++; + apppbx = apppbx->next; + } + if (apppbx_first) + { + SPRINT(err_txt, "Cannot reload routing, because %d endpoints active\n", n); + err = -1; + goto response; + } +#endif + if (!(ruleset_new = ruleset_parse())) + { + SPRINT(err_txt, ruleset_error); + err = -1; + goto response; + } + ruleset_free(ruleset_first); + ruleset_first = ruleset_new; + ruleset_main = getrulesetbyname("main"); + if (!ruleset_main) + { + SPRINT(err_txt, "Ruleset reloaded, but rule 'main' not found.\n"); + err = -1; + } + apppbx = apppbx_first; + while(apppbx) + { + if (apppbx->e_action) + { + switch(apppbx->e_action->index) + { + case ACTION_INTERNAL: + apppbx->e_action = &action_internal; + break; + case ACTION_EXTERNAL: + apppbx->e_action = &action_external; + break; + case ACTION_H323: + apppbx->e_action = &action_h323; + break; + case ACTION_CHAN: + apppbx->e_action = &action_chan; + break; + case ACTION_VBOX_RECORD: + apppbx->e_action = &action_vbox; + break; + case ACTION_PARTYLINE: + apppbx->e_action = &action_partyline; + break; + default: + goto release; + } + } else if (apppbx->e_state != EPOINT_STATE_CONNECT) + { + release: + apppbx->e_callback = 0; + apppbx->e_action = NULL; + apppbx->release(RELEASE_ALL, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL); + printlog("%3d endpoint ADMIN Kicking due to reload of routing.\n", apppbx->ea_endpoint->ep_serial); + } + + apppbx->e_action_timeout = NULL; + apppbx->e_rule = NULL; + apppbx->e_ruleset = NULL; + + apppbx = apppbx->next; + } + + response: + /* create state response */ + response = (struct admin_queue *)malloc(sizeof(struct admin_queue)+sizeof(admin_message)); + if (!response) + return(-1); + memuse++; + memset(response, 0, sizeof(admin_queue)); + response->num = 1; + /* message */ + response->am[0].message = ADMIN_RESPONSE_CMD_ROUTE; + /* error */ + response->am[0].u.x.error = err; + /* message */ + SCPY(response->am[0].u.x.message, err_txt); + /* attach to response chain */ + *responsep = response; + responsep = &response->next; + + return(0); +} + + +/* + * do dialing + */ +int admin_dial(struct admin_queue **responsep, char *message) +{ + struct extension ext; /* temporary extension's settings */ + struct admin_queue *response; /* response pointer */ + char *p; /* pointer to dialing digits */ + + /* create state response */ + response = (struct admin_queue *)malloc(sizeof(struct admin_queue)+sizeof(admin_message)); + if (!response) + return(-1); + memuse++; + memset(response, 0, sizeof(admin_queue)); + response->num = 1; + /* message */ + response->am[0].message = ADMIN_RESPONSE_CMD_DIAL; + + /* process request */ + if (!(p = strchr(message,':'))) + { + response->am[0].u.x.error = -EINVAL; + SPRINT(response->am[0].u.x.message, "no seperator ':' in message to seperate number from extension"); + goto out; + } + *p++ = 0; + + /* modify extension */ + if (!read_extension(&ext, message)) + { + response->am[0].u.x.error = -EINVAL; + SPRINT(response->am[0].u.x.message, "extension doesn't exist"); + goto out; + } + SCPY(ext.next, p); + write_extension(&ext, message); + + out: + /* attach to response chain */ + *responsep = response; + responsep = &response->next; + return(0); +} + + +/* + * do release + */ +int admin_release(struct admin_queue **responsep, char *message) +{ + unsigned long id; + struct admin_queue *response; /* response pointer */ + class EndpointAppPBX *apppbx; + + /* create state response */ + response = (struct admin_queue *)malloc(sizeof(struct admin_queue)+sizeof(admin_message)); + if (!response) + return(-1); + memuse++; + memset(response, 0, sizeof(admin_queue)); + response->num = 1; + /* message */ + response->am[0].message = ADMIN_RESPONSE_CMD_RELEASE; + + id = atoi(message); + apppbx = apppbx_first; + while(apppbx) + { + if (apppbx->ea_endpoint->ep_serial == id) + break; + apppbx = apppbx->next; + } + if (!apppbx) + { + response->am[0].u.x.error = -EINVAL; + SPRINT(response->am[0].u.x.message, "Given endpoint %d doesn't exist.", id); + goto out; + } + + apppbx->e_callback = 0; + apppbx->release(RELEASE_ALL, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL); + + out: + /* attach to response chain */ + *responsep = response; + responsep = &response->next; + return(0); +} + + +/* + * do call + */ +int admin_call(struct admin_list *admin, struct admin_message *msg) +{ + class Endpoint *epoint; + class EndpointAppPBX *apppbx; + + if (!(epoint = new Endpoint(0,0))) + return(-1); + + if (!(epoint->ep_app = apppbx = new DEFAULT_ENDPOINT_APP(epoint))) + { + PERROR("no memory for application\n"); + exit(-1); + } + apppbx->e_adminid = admin->sockserial; + admin->epointid = epoint->ep_serial; + SCPY(apppbx->e_callerinfo.id, nationalize_callerinfo(msg->u.call.callerid, &apppbx->e_callerinfo.ntype)); + if (msg->u.call.present) + apppbx->e_callerinfo.present = INFO_PRESENT_ALLOWED; + else + apppbx->e_callerinfo.present = INFO_PRESENT_RESTRICTED; + apppbx->e_callerinfo.screen = INFO_SCREEN_NETWORK; + +//printf("hh=%d\n", apppbx->e_capainfo.hlc); + + apppbx->e_capainfo.bearer_capa = msg->u.call.bc_capa; + apppbx->e_capainfo.bearer_mode = msg->u.call.bc_mode; + apppbx->e_capainfo.bearer_info1 = msg->u.call.bc_info1; + apppbx->e_capainfo.hlc = msg->u.call.hlc; + apppbx->e_capainfo.exthlc = msg->u.call.exthlc; + SCPY(apppbx->e_dialinginfo.number, msg->u.call.dialing); + SCPY(apppbx->e_dialinginfo.interfaces, msg->u.call.interface); + apppbx->e_dialinginfo.sending_complete = 1; + + apppbx->new_state(PORT_STATE_OUT_SETUP); + apppbx->out_setup(); + return(0); +} + + +/* + * this function is called for response whenever a call state changes. + */ +void admin_call_response(int adminid, int message, char *connected, int cause, int location, int notify) +{ + struct admin_list *admin; + struct admin_queue *response, **responsep; /* response pointer */ + + /* searching for admin id + * maybe there is no admin instance, because the calling port was not + * initiated by admin_call */ + admin = admin_list; + while(admin) + { + if (adminid == admin->sockserial) + break; + admin = admin->next; + } + if (!admin) + return; + + /* seek to end of response list */ + response = admin->response; + responsep = &admin->response; + while(response) + { + responsep = &response->next; + response = response->next; + } + + /* create state response */ + response = (struct admin_queue *)malloc(sizeof(struct admin_queue)+sizeof(admin_message)); + if (!response) + return; + memuse++; + memset(response, 0, sizeof(admin_queue)); + response->num = 1; + /* message */ + response->am[0].message = message; +// printf("MESSAGE: %d\n", message); + + SCPY(response->am[0].u.call.callerid, connected); + response->am[0].u.call.cause = cause; + response->am[0].u.call.location = location; + response->am[0].u.call.notify = notify; + + /* attach to response chain */ + *responsep = response; + responsep = &response->next; +} + + +/* + * do state debugging + */ +int admin_state(struct admin_queue **responsep) +{ + + class Port *port; + class EndpointAppPBX *apppbx; + class Call *call; + class Pdss1 *pdss1; + struct mISDNport *mISDNport; + int i; + int num; + int anybusy; + struct admin_queue *response; + + /* create state response */ + response = (struct admin_queue *)malloc(sizeof(struct admin_queue)+sizeof(admin_message)); + if (!response) + return(-1); + memuse++; + memset(response, 0, sizeof(admin_queue)); + response->num = 1; + /* message */ + response->am[0].message = ADMIN_RESPONSE_STATE; + /* version */ + SCPY(response->am[0].u.s.version_string, VERSION_STRING); + /* time */ + memcpy(&response->am[0].u.s.tm, now_tm, sizeof(struct tm)); + /* log file */ + SCPY(response->am[0].u.s.logfile, options.log); + /* interface count */ + mISDNport = mISDNport_first; + i = 0; + while(mISDNport) + { + i++; + mISDNport = mISDNport->next; + } + response->am[0].u.s.interfaces = i; + /* call count */ + call = call_first; + i = 0; + while(call) + { + i++; + call = call->next; + } + response->am[0].u.s.calls = i; + /* apppbx count */ + apppbx = apppbx_first; + i = 0; + while(apppbx) + { + i++; + apppbx = apppbx->next; + } + response->am[0].u.s.epoints = i; + /* port count */ + port = port_first; + i = 0; + while(port) + { + i++; + port = port->next; + } + response->am[0].u.s.ports = i; + /* attach to response chain */ + *responsep = response; + responsep = &response->next; + + /* create response for all interfaces */ + num = (response->am[0].u.s.interfaces)+(response->am[0].u.s.calls)+(response->am[0].u.s.epoints)+(response->am[0].u.s.ports); + response = (struct admin_queue *)malloc(sizeof(admin_queue)+(num*sizeof(admin_message))); + if (!response) + return(-1); + memuse++; + memset(response, 0, sizeof(admin_queue)+(num*sizeof(admin_queue))); + response->num = num; + *responsep = response; + responsep = &response->next; + mISDNport = mISDNport_first; + num = 0; + while(mISDNport) + { + /* message */ + response->am[num].message = ADMIN_RESPONSE_S_INTERFACE; + /* portnum */ + response->am[num].u.i.portnum = mISDNport->portnum; + /* interface */ + SCPY(response->am[num].u.i.interface_name, mISDNport->interface_name); + /* iftype */ + response->am[num].u.i.iftype = mISDNport->iftype; + /* ptp */ + response->am[num].u.i.ptp = mISDNport->ptp; + /* ntmode */ + response->am[num].u.i.ntmode = mISDNport->ntmode; + /* pri */ + response->am[num].u.i.pri = mISDNport->pri; + /* use */ + response->am[num].u.i.use = mISDNport->use; + /* l1link */ + response->am[num].u.i.l1link = mISDNport->l1link; + /* l2link */ + response->am[num].u.i.l2link = mISDNport->l2link; + /* channels */ + response->am[num].u.i.channels = mISDNport->b_num; + /* channel info */ + i = 0; + anybusy = 0; + while(i < mISDNport->b_num) + { + response->am[num].u.i.busy[i] = mISDNport->b_state[i]; + if (mISDNport->b_port[i]) + response->am[num].u.i.port[i] = mISDNport->b_port[i]->p_serial; + i++; + } + mISDNport = mISDNport->next; + num++; + } + + /* create response for all calls */ + call = call_first; + while(call) + { + /* message */ + response->am[num].message = ADMIN_RESPONSE_S_CALL; + /* serial */ + response->am[num].u.c.serial = call->c_serial; + /* partyline */ + if (call->c_type == CALL_TYPE_PBX) + response->am[num].u.c.partyline = ((class CallPBX *)call)->c_partyline; + /* */ + call = call->next; + num++; + } + + /* create response for all endpoint */ + apppbx = apppbx_first; + while(apppbx) + { + /* message */ + response->am[num].message = ADMIN_RESPONSE_S_EPOINT; + /* serial */ + response->am[num].u.e.serial = apppbx->ea_endpoint->ep_serial; + /* call */ + response->am[num].u.e.call = apppbx->ea_endpoint->ep_call_id; + /* rx notification */ + response->am[num].u.e.rx_state = apppbx->e_rx_state; + /* tx notification */ + response->am[num].u.e.tx_state = apppbx->e_tx_state; + /* state */ + switch(apppbx->e_state) + { + case EPOINT_STATE_IN_SETUP: + response->am[num].u.e.state = ADMIN_STATE_IN_SETUP; + break; + case EPOINT_STATE_OUT_SETUP: + response->am[num].u.e.state = ADMIN_STATE_OUT_SETUP; + break; + case EPOINT_STATE_IN_OVERLAP: + response->am[num].u.e.state = ADMIN_STATE_IN_OVERLAP; + break; + case EPOINT_STATE_OUT_OVERLAP: + response->am[num].u.e.state = ADMIN_STATE_OUT_OVERLAP; + break; + case EPOINT_STATE_IN_PROCEEDING: + response->am[num].u.e.state = ADMIN_STATE_IN_PROCEEDING; + break; + case EPOINT_STATE_OUT_PROCEEDING: + response->am[num].u.e.state = ADMIN_STATE_OUT_PROCEEDING; + break; + case EPOINT_STATE_IN_ALERTING: + response->am[num].u.e.state = ADMIN_STATE_IN_ALERTING; + break; + case EPOINT_STATE_OUT_ALERTING: + response->am[num].u.e.state = ADMIN_STATE_OUT_ALERTING; + break; + case EPOINT_STATE_CONNECT: + response->am[num].u.e.state = ADMIN_STATE_CONNECT; + break; + case EPOINT_STATE_IN_DISCONNECT: + response->am[num].u.e.state = ADMIN_STATE_IN_DISCONNECT; + break; + case EPOINT_STATE_OUT_DISCONNECT: + response->am[num].u.e.state = ADMIN_STATE_OUT_DISCONNECT; + break; + default: + response->am[num].u.e.state = ADMIN_STATE_IDLE; + } + /* terminal */ + SCPY(response->am[num].u.e.terminal, apppbx->e_terminal); + /* callerid */ + SCPY(response->am[num].u.e.callerid, apppbx->e_callerinfo.id); + /* dialing */ + SCPY(response->am[num].u.e.dialing, apppbx->e_dialinginfo.number); + /* action string */ + if (apppbx->e_action) + SCPY(response->am[num].u.e.action, action_defs[apppbx->e_action->index].name); +// if (apppbx->e_action) +// printf("action=%s\n",action_defs[apppbx->e_action->index].name); + /* park */ + response->am[num].u.e.park = apppbx->ea_endpoint->ep_park; + if (apppbx->ea_endpoint->ep_park && apppbx->ea_endpoint->ep_park_len && apppbx->ea_endpoint->ep_park_len<=(int)sizeof(response->am[num].u.e.park_callid)) + memcpy(response->am[num].u.e.park_callid, apppbx->ea_endpoint->ep_park_callid, apppbx->ea_endpoint->ep_park_len); + response->am[num].u.e.park_len = apppbx->ea_endpoint->ep_park_len; + /* crypt */ + if (apppbx->e_crypt == CRYPT_ON) + response->am[num].u.e.crypt = 1; + /* */ + apppbx = apppbx->next; + num++; + } + + /* create response for all ports */ + port = port_first; + while(port) + { + /* message */ + response->am[num].message = ADMIN_RESPONSE_S_PORT; + /* serial */ + response->am[num].u.p.serial = port->p_serial; + /* name */ + SCPY(response->am[num].u.p.name, port->p_name); + /* epoint */ + response->am[num].u.p.epoint = ACTIVE_EPOINT(port->p_epointlist); + /* state */ + switch(port->p_state) + { + case PORT_STATE_IN_SETUP: + response->am[num].u.p.state = ADMIN_STATE_IN_SETUP; + break; + case PORT_STATE_OUT_SETUP: + response->am[num].u.p.state = ADMIN_STATE_OUT_SETUP; + break; + case PORT_STATE_IN_OVERLAP: + response->am[num].u.p.state = ADMIN_STATE_IN_OVERLAP; + break; + case PORT_STATE_OUT_OVERLAP: + response->am[num].u.p.state = ADMIN_STATE_OUT_OVERLAP; + break; + case PORT_STATE_IN_PROCEEDING: + response->am[num].u.p.state = ADMIN_STATE_IN_PROCEEDING; + break; + case PORT_STATE_OUT_PROCEEDING: + response->am[num].u.p.state = ADMIN_STATE_OUT_PROCEEDING; + break; + case PORT_STATE_IN_ALERTING: + response->am[num].u.p.state = ADMIN_STATE_IN_ALERTING; + break; + case PORT_STATE_OUT_ALERTING: + response->am[num].u.p.state = ADMIN_STATE_OUT_ALERTING; + break; + case PORT_STATE_CONNECT: + response->am[num].u.p.state = ADMIN_STATE_CONNECT; + break; + case PORT_STATE_IN_DISCONNECT: + response->am[num].u.p.state = ADMIN_STATE_IN_DISCONNECT; + break; + case PORT_STATE_OUT_DISCONNECT: + response->am[num].u.p.state = ADMIN_STATE_OUT_DISCONNECT; + break; + default: + response->am[num].u.p.state = ADMIN_STATE_IDLE; + } + /* isdn */ + if ((port->p_type&PORT_CLASS_mISDN_MASK) == PORT_CLASS_mISDN_DSS1) + { + response->am[num].u.p.isdn = 1; + pdss1 = (class Pdss1 *)port; + response->am[num].u.p.isdn_chan = pdss1->p_m_b_channel; + response->am[num].u.p.isdn_hold = pdss1->p_m_hold; + response->am[num].u.p.isdn_ces = pdss1->p_m_d_ces; + } + /* */ + port = port->next; + num++; + } + return(0); +} + +int sockserial = 1; // must start with 1, because 0 is used if no serial is set +/* + * handle admin socket (non blocking) + */ +int admin_handle(void) +{ + struct admin_list *admin, **adminp; + void *temp; + struct admin_message msg; + int len; + int new_sock; + socklen_t sock_len = sizeof(sock_address); + unsigned long on = 1; + int work = 0; /* if work was done */ + struct Endpoint *epoint; + + if (sock < 0) + return(0); + + /* check for new incomming connections */ + if ((new_sock = accept(sock, (struct sockaddr *)&sock_address, &sock_len)) >= 0) + { + work = 1; + /* insert new socket */ + admin = (struct admin_list *)malloc(sizeof(struct admin_list)); + if (admin) + { + if (ioctl(new_sock, FIONBIO, (unsigned char *)(&on)) >= 0) + { +//#warning +// PERROR("DEBUG incomming socket %d, serial=%d\n", new_sock, sockserial); + memuse++; + fhuse++; + memset(admin, 0, sizeof(struct admin_list)); + admin->sockserial = sockserial++; + admin->next = admin_list; + admin_list = admin; + admin->sock = new_sock; + } else { + close(new_sock); + free(admin); + } + } else + close(new_sock); + } else + { + if (errno != EWOULDBLOCK) + { + PERROR("Failed to accept connection from socket \"%s\". (errno=%d) Closing socket.\n", sock_address.sun_path, errno); + admin_cleanup(); + return(1); + } + } + + /* loop all current socket connections */ + admin = admin_list; + adminp = &admin_list; + while(admin) + { + /* read command */ + len = read(admin->sock, &msg, sizeof(msg)); + if (len < 0) + { + if (errno != EWOULDBLOCK) + { + work = 1; + brokenpipe: + printf("Broken pipe on socket %d. (errno=%d).\n", admin->sock, errno); + PDEBUG(DEBUG_LOG, "Broken pipe on socket %d. (errno=%d).\n", admin->sock, errno); + *adminp = admin->next; + free_connection(admin); + admin = *adminp; + continue; + } + goto send_data; + } + work = 1; +//#warning +//PERROR("DEBUG socket %d got data. serial=%d\n", admin->sock, admin->sockserial); + if (len == 0) + { + end: + + /*release endpoint if exists */ + if (admin->epointid) + { + epoint = find_epoint_id(admin->epointid); + if (epoint) + { + ((class DEFAULT_ENDPOINT_APP *)epoint->ep_app)-> + release(RELEASE_ALL, CAUSE_NORMAL, LOCATION_PRIVATE_LOCAL, 0, 0); + } + } + +//#warning +//PERROR("DEBUG socket %d closed by remote.\n", admin->sock); + *adminp = admin->next; + free_connection(admin); + admin = *adminp; +//PERROR("DEBUG (admin_list=%x)\n", admin_list); + continue; + } + if (len != sizeof(msg)) + { + PERROR("Short/long read on socket %d. (len=%d != size=%d).\n", admin->sock, len, sizeof(msg)); + *adminp = admin->next; + free_connection(admin); + admin = *adminp; + continue; + } + /* process socket command */ + if (admin->response) + { + PERROR("Data from socket %d while sending response.\n", admin->sock); + *adminp = admin->next; + free_connection(admin); + admin = *adminp; + continue; + } + switch (msg.message) + { + case ADMIN_REQUEST_CMD_INTERFACE: + if (admin_interface(&admin->response) < 0) + { + PERROR("Failed to create dial response for socket %d.\n", admin->sock); + goto response_error; + } + break; + + case ADMIN_REQUEST_CMD_ROUTE: + if (admin_route(&admin->response) < 0) + { + PERROR("Failed to create dial response for socket %d.\n", admin->sock); + goto response_error; + } + break; + + case ADMIN_REQUEST_CMD_DIAL: + if (admin_dial(&admin->response, msg.u.x.message) < 0) + { + PERROR("Failed to create dial response for socket %d.\n", admin->sock); + goto response_error; + } + break; + + case ADMIN_REQUEST_CMD_RELEASE: + if (admin_release(&admin->response, msg.u.x.message) < 0) + { + PERROR("Failed to create release response for socket %d.\n", admin->sock); + goto response_error; + } + break; + + case ADMIN_REQUEST_STATE: + if (admin_state(&admin->response) < 0) + { + PERROR("Failed to create state response for socket %d.\n", admin->sock); + response_error: + *adminp = admin->next; + free_connection(admin); + admin = *adminp; + continue; + } +#if 0 +#warning DEBUGGING +{ + struct admin_queue *response; + printf("Chain: "); + response = admin->response; + while(response) + { + printf("%c", '0'+response->am[0].message); + response=response->next; + } + printf("\n"); +} +#endif + break; + + case ADMIN_CALL_SETUP: + if (admin_call(admin, &msg)) + { + PERROR("Failed to create call for socket %d.\n", admin->sock); + goto response_error; + } + break; + + default: + PERROR("Invalid message %d from socket %d.\n", msg.message, admin->sock); + *adminp = admin->next; + free_connection(admin); + admin = *adminp; + continue; + } + /* write queue */ + send_data: + if (admin->response) + { +//#warning +//PERROR("DEBUG socket %d sending data.\n", admin->sock); + len = write(admin->sock, ((unsigned char *)(admin->response->am))+admin->response->offset, sizeof(struct admin_message)*(admin->response->num)-admin->response->offset); + if (len < 0) + { + if (errno != EWOULDBLOCK) + { + work = 1; + goto brokenpipe; + } + goto next; + } + work = 1; + if (len == 0) + goto end; + if (len < (int)(sizeof(struct admin_message)*(admin->response->num)-admin->response->offset)) + { + admin->response->offset+=len; + goto next; + } else + { + temp = admin->response; + admin->response = admin->response->next; + free(temp); + memuse--; + } + } + /* done with socket instance */ + next: + adminp = &admin->next; + admin = admin->next; + } + + return(work); +} + diff --git a/admin_server.h b/admin_server.h new file mode 100644 index 0000000..9361b3f --- /dev/null +++ b/admin_server.h @@ -0,0 +1,35 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** Administration tool header file (server) ** +** ** +\*****************************************************************************/ + +#include "admin.h" + +struct admin_queue { + struct admin_queue *next; + ulong offset; /* current offset writing */ + ulong num; /* number of admin messages */ + struct admin_message am[0]; +}; + +struct admin_list { + struct admin_list *next; + int sock; + int sockserial; + unsigned long epointid; + struct admin_queue *response; +}; + +int admin_init(void); +void admin_cleanup(void); +int admin_handle(void); +void admin_call_response(int adminid, int message, char *connected, int cause, int location, int notify); + + + diff --git a/alawulaw.c b/alawulaw.c new file mode 100644 index 0000000..07d5351 --- /dev/null +++ b/alawulaw.c @@ -0,0 +1,266 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** audio conversions for alaw and ulaw ** +** ** +\*****************************************************************************/ + +signed long *audio_law_to_s32; + +/* ulaw -> signed 16-bit */ +static signed long audio_ulaw_to_s32[] = +{ + 0xffff8284, 0xffff8684, 0xffff8a84, 0xffff8e84, + 0xffff9284, 0xffff9684, 0xffff9a84, 0xffff9e84, + 0xffffa284, 0xffffa684, 0xffffaa84, 0xffffae84, + 0xffffb284, 0xffffb684, 0xffffba84, 0xffffbe84, + 0xffffc184, 0xffffc384, 0xffffc584, 0xffffc784, + 0xffffc984, 0xffffcb84, 0xffffcd84, 0xffffcf84, + 0xffffd184, 0xffffd384, 0xffffd584, 0xffffd784, + 0xffffd984, 0xffffdb84, 0xffffdd84, 0xffffdf84, + 0xffffe104, 0xffffe204, 0xffffe304, 0xffffe404, + 0xffffe504, 0xffffe604, 0xffffe704, 0xffffe804, + 0xffffe904, 0xffffea04, 0xffffeb04, 0xffffec04, + 0xffffed04, 0xffffee04, 0xffffef04, 0xfffff004, + 0xfffff0c4, 0xfffff144, 0xfffff1c4, 0xfffff244, + 0xfffff2c4, 0xfffff344, 0xfffff3c4, 0xfffff444, + 0xfffff4c4, 0xfffff544, 0xfffff5c4, 0xfffff644, + 0xfffff6c4, 0xfffff744, 0xfffff7c4, 0xfffff844, + 0xfffff8a4, 0xfffff8e4, 0xfffff924, 0xfffff964, + 0xfffff9a4, 0xfffff9e4, 0xfffffa24, 0xfffffa64, + 0xfffffaa4, 0xfffffae4, 0xfffffb24, 0xfffffb64, + 0xfffffba4, 0xfffffbe4, 0xfffffc24, 0xfffffc64, + 0xfffffc94, 0xfffffcb4, 0xfffffcd4, 0xfffffcf4, + 0xfffffd14, 0xfffffd34, 0xfffffd54, 0xfffffd74, + 0xfffffd94, 0xfffffdb4, 0xfffffdd4, 0xfffffdf4, + 0xfffffe14, 0xfffffe34, 0xfffffe54, 0xfffffe74, + 0xfffffe8c, 0xfffffe9c, 0xfffffeac, 0xfffffebc, + 0xfffffecc, 0xfffffedc, 0xfffffeec, 0xfffffefc, + 0xffffff0c, 0xffffff1c, 0xffffff2c, 0xffffff3c, + 0xffffff4c, 0xffffff5c, 0xffffff6c, 0xffffff7c, + 0xffffff88, 0xffffff90, 0xffffff98, 0xffffffa0, + 0xffffffa8, 0xffffffb0, 0xffffffb8, 0xffffffc0, + 0xffffffc8, 0xffffffd0, 0xffffffd8, 0xffffffe0, + 0xffffffe8, 0xfffffff0, 0xfffffff8, 0xffffffff, + 0x00007d7c, 0x0000797c, 0x0000757c, 0x0000717c, + 0x00006d7c, 0x0000697c, 0x0000657c, 0x0000617c, + 0x00005d7c, 0x0000597c, 0x0000557c, 0x0000517c, + 0x00004d7c, 0x0000497c, 0x0000457c, 0x0000417c, + 0x00003e7c, 0x00003c7c, 0x00003a7c, 0x0000387c, + 0x0000367c, 0x0000347c, 0x0000327c, 0x0000307c, + 0x00002e7c, 0x00002c7c, 0x00002a7c, 0x0000287c, + 0x0000267c, 0x0000247c, 0x0000227c, 0x0000207c, + 0x00001efc, 0x00001dfc, 0x00001cfc, 0x00001bfc, + 0x00001afc, 0x000019fc, 0x000018fc, 0x000017fc, + 0x000016fc, 0x000015fc, 0x000014fc, 0x000013fc, + 0x000012fc, 0x000011fc, 0x000010fc, 0x00000ffc, + 0x00000f3c, 0x00000ebc, 0x00000e3c, 0x00000dbc, + 0x00000d3c, 0x00000cbc, 0x00000c3c, 0x00000bbc, + 0x00000b3c, 0x00000abc, 0x00000a3c, 0x000009bc, + 0x0000093c, 0x000008bc, 0x0000083c, 0x000007bc, + 0x0000075c, 0x0000071c, 0x000006dc, 0x0000069c, + 0x0000065c, 0x0000061c, 0x000005dc, 0x0000059c, + 0x0000055c, 0x0000051c, 0x000004dc, 0x0000049c, + 0x0000045c, 0x0000041c, 0x000003dc, 0x0000039c, + 0x0000036c, 0x0000034c, 0x0000032c, 0x0000030c, + 0x000002ec, 0x000002cc, 0x000002ac, 0x0000028c, + 0x0000026c, 0x0000024c, 0x0000022c, 0x0000020c, + 0x000001ec, 0x000001cc, 0x000001ac, 0x0000018c, + 0x00000174, 0x00000164, 0x00000154, 0x00000144, + 0x00000134, 0x00000124, 0x00000114, 0x00000104, + 0x000000f4, 0x000000e4, 0x000000d4, 0x000000c4, + 0x000000b4, 0x000000a4, 0x00000094, 0x00000084, + 0x00000078, 0x00000070, 0x00000068, 0x00000060, + 0x00000058, 0x00000050, 0x00000048, 0x00000040, + 0x00000038, 0x00000030, 0x00000028, 0x00000020, + 0x00000018, 0x00000010, 0x00000008, 0x00000000 +}; + +/* alaw -> signed 16-bit */ +static signed long audio_alaw_to_s32[] = +{ + 0x000013fc, 0xffffec04, 0x00000144, 0xfffffebc, + 0x0000517c, 0xffffae84, 0x0000051c, 0xfffffae4, + 0x00000a3c, 0xfffff5c4, 0x00000048, 0xffffffb8, + 0x0000287c, 0xffffd784, 0x0000028c, 0xfffffd74, + 0x00001bfc, 0xffffe404, 0x000001cc, 0xfffffe34, + 0x0000717c, 0xffff8e84, 0x0000071c, 0xfffff8e4, + 0x00000e3c, 0xfffff1c4, 0x000000c4, 0xffffff3c, + 0x0000387c, 0xffffc784, 0x0000039c, 0xfffffc64, + 0x00000ffc, 0xfffff004, 0x00000104, 0xfffffefc, + 0x0000417c, 0xffffbe84, 0x0000041c, 0xfffffbe4, + 0x0000083c, 0xfffff7c4, 0x00000008, 0xfffffff8, + 0x0000207c, 0xffffdf84, 0x0000020c, 0xfffffdf4, + 0x000017fc, 0xffffe804, 0x0000018c, 0xfffffe74, + 0x0000617c, 0xffff9e84, 0x0000061c, 0xfffff9e4, + 0x00000c3c, 0xfffff3c4, 0x00000084, 0xffffff7c, + 0x0000307c, 0xffffcf84, 0x0000030c, 0xfffffcf4, + 0x000015fc, 0xffffea04, 0x00000164, 0xfffffe9c, + 0x0000597c, 0xffffa684, 0x0000059c, 0xfffffa64, + 0x00000b3c, 0xfffff4c4, 0x00000068, 0xffffff98, + 0x00002c7c, 0xffffd384, 0x000002cc, 0xfffffd34, + 0x00001dfc, 0xffffe204, 0x000001ec, 0xfffffe14, + 0x0000797c, 0xffff8684, 0x000007bc, 0xfffff844, + 0x00000f3c, 0xfffff0c4, 0x000000e4, 0xffffff1c, + 0x00003c7c, 0xffffc384, 0x000003dc, 0xfffffc24, + 0x000011fc, 0xffffee04, 0x00000124, 0xfffffedc, + 0x0000497c, 0xffffb684, 0x0000049c, 0xfffffb64, + 0x0000093c, 0xfffff6c4, 0x00000028, 0xffffffd8, + 0x0000247c, 0xffffdb84, 0x0000024c, 0xfffffdb4, + 0x000019fc, 0xffffe604, 0x000001ac, 0xfffffe54, + 0x0000697c, 0xffff9684, 0x0000069c, 0xfffff964, + 0x00000d3c, 0xfffff2c4, 0x000000a4, 0xffffff5c, + 0x0000347c, 0xffffcb84, 0x0000034c, 0xfffffcb4, + 0x000012fc, 0xffffed04, 0x00000134, 0xfffffecc, + 0x00004d7c, 0xffffb284, 0x000004dc, 0xfffffb24, + 0x000009bc, 0xfffff644, 0x00000038, 0xffffffc8, + 0x0000267c, 0xffffd984, 0x0000026c, 0xfffffd94, + 0x00001afc, 0xffffe504, 0x000001ac, 0xfffffe54, + 0x00006d7c, 0xffff9284, 0x000006dc, 0xfffff924, + 0x00000dbc, 0xfffff244, 0x000000b4, 0xffffff4c, + 0x0000367c, 0xffffc984, 0x0000036c, 0xfffffc94, + 0x00000f3c, 0xfffff0c4, 0x000000f4, 0xffffff0c, + 0x00003e7c, 0xffffc184, 0x000003dc, 0xfffffc24, + 0x000007bc, 0xfffff844, 0x00000008, 0xfffffff8, + 0x00001efc, 0xffffe104, 0x000001ec, 0xfffffe14, + 0x000016fc, 0xffffe904, 0x00000174, 0xfffffe8c, + 0x00005d7c, 0xffffa284, 0x000005dc, 0xfffffa24, + 0x00000bbc, 0xfffff444, 0x00000078, 0xffffff88, + 0x00002e7c, 0xffffd184, 0x000002ec, 0xfffffd14, + 0x000014fc, 0xffffeb04, 0x00000154, 0xfffffeac, + 0x0000557c, 0xffffaa84, 0x0000055c, 0xfffffaa4, + 0x00000abc, 0xfffff544, 0x00000058, 0xffffffa8, + 0x00002a7c, 0xffffd584, 0x000002ac, 0xfffffd54, + 0x00001cfc, 0xffffe304, 0x000001cc, 0xfffffe34, + 0x0000757c, 0xffff8a84, 0x0000075c, 0xfffff8a4, + 0x00000ebc, 0xfffff144, 0x000000d4, 0xffffff2c, + 0x00003a7c, 0xffffc584, 0x0000039c, 0xfffffc64, + 0x000010fc, 0xffffef04, 0x00000114, 0xfffffeec, + 0x0000457c, 0xffffba84, 0x0000045c, 0xfffffba4, + 0x000008bc, 0xfffff744, 0x00000018, 0xffffffe8, + 0x0000227c, 0xffffdd84, 0x0000022c, 0xfffffdd4, + 0x000018fc, 0xffffe704, 0x0000018c, 0xfffffe74, + 0x0000657c, 0xffff9a84, 0x0000065c, 0xfffff9a4, + 0x00000cbc, 0xfffff344, 0x00000094, 0xffffff6c, + 0x0000327c, 0xffffcd84, 0x0000032c, 0xfffffcd4 +}; + +/* signed 16-bit -> Xlaw */ +unsigned char audio_s16_to_law[65536]; + + +/* table is used to generate s16_to_alaw */ +static short audio_alaw_relations[] = +{ + 0x8684, 0x55, 0x8a84, 0xd5, 0x8e84, 0x15, 0x9284, 0x95, + 0x9684, 0x75, 0x9a84, 0xf5, 0x9e84, 0x35, 0xa284, 0xb5, + 0xa684, 0x45, 0xaa84, 0xc5, 0xae84, 0x05, 0xb284, 0x85, + 0xb684, 0x65, 0xba84, 0xe5, 0xbe84, 0x25, 0xc184, 0xa5, + 0xc384, 0x5d, 0xc584, 0xdd, 0xc784, 0x1d, 0xc984, 0x9d, + 0xcb84, 0x7d, 0xcd84, 0xfd, 0xcf84, 0x3d, 0xd184, 0xbd, + 0xd384, 0x4d, 0xd584, 0xcd, 0xd784, 0x0d, 0xd984, 0x8d, + 0xdb84, 0x6d, 0xdd84, 0xed, 0xdf84, 0x2d, 0xe104, 0xad, + 0xe204, 0x51, 0xe304, 0xd1, 0xe404, 0x11, 0xe504, 0x91, + 0xe604, 0x71, 0xe704, 0xf1, 0xe804, 0x31, 0xe904, 0xb1, + 0xea04, 0x41, 0xeb04, 0xc1, 0xec04, 0x01, 0xed04, 0x81, + 0xee04, 0x61, 0xef04, 0xe1, 0xf004, 0x21, 0xf0c4, 0x59, + 0xf0c4, 0xa1, 0xf144, 0xd9, 0xf1c4, 0x19, 0xf244, 0x99, + 0xf2c4, 0x79, 0xf344, 0xf9, 0xf3c4, 0x39, 0xf444, 0xb9, + 0xf4c4, 0x49, 0xf544, 0xc9, 0xf5c4, 0x09, 0xf644, 0x89, + 0xf6c4, 0x69, 0xf744, 0xe9, 0xf7c4, 0x29, 0xf844, 0x57, + 0xf844, 0xa9, 0xf8a4, 0xd7, 0xf8e4, 0x17, 0xf924, 0x97, + 0xf964, 0x77, 0xf9a4, 0xf7, 0xf9e4, 0x37, 0xfa24, 0xb7, + 0xfa64, 0x47, 0xfaa4, 0xc7, 0xfae4, 0x07, 0xfb24, 0x87, + 0xfb64, 0x67, 0xfba4, 0xe7, 0xfbe4, 0x27, 0xfc24, 0x5f, + 0xfc24, 0xa7, 0xfc64, 0x1f, 0xfc64, 0xdf, 0xfc94, 0x9f, + 0xfcb4, 0x7f, 0xfcd4, 0xff, 0xfcf4, 0x3f, 0xfd14, 0xbf, + 0xfd34, 0x4f, 0xfd54, 0xcf, 0xfd74, 0x0f, 0xfd94, 0x8f, + 0xfdb4, 0x6f, 0xfdd4, 0xef, 0xfdf4, 0x2f, 0xfe14, 0x53, + 0xfe14, 0xaf, 0xfe34, 0x13, 0xfe34, 0xd3, 0xfe54, 0x73, + 0xfe54, 0x93, 0xfe74, 0x33, 0xfe74, 0xf3, 0xfe8c, 0xb3, + 0xfe9c, 0x43, 0xfeac, 0xc3, 0xfebc, 0x03, 0xfecc, 0x83, + 0xfedc, 0x63, 0xfeec, 0xe3, 0xfefc, 0x23, 0xff0c, 0xa3, + 0xff1c, 0x5b, 0xff2c, 0xdb, 0xff3c, 0x1b, 0xff4c, 0x9b, + 0xff5c, 0x7b, 0xff6c, 0xfb, 0xff7c, 0x3b, 0xff88, 0xbb, + 0xff98, 0x4b, 0xffa8, 0xcb, 0xffb8, 0x0b, 0xffc8, 0x8b, + 0xffd8, 0x6b, 0xffe8, 0xeb, 0xfff8, 0x2b, 0xfff8, 0xab, + 0x0008, 0x2a, 0x0008, 0xaa, 0x0018, 0xea, 0x0028, 0x6a, + 0x0038, 0x8a, 0x0048, 0x0a, 0x0058, 0xca, 0x0068, 0x4a, + 0x0078, 0xba, 0x0084, 0x3a, 0x0094, 0xfa, 0x00a4, 0x7a, + 0x00b4, 0x9a, 0x00c4, 0x1a, 0x00d4, 0xda, 0x00e4, 0x5a, + 0x00f4, 0xa2, 0x0104, 0x22, 0x0114, 0xe2, 0x0124, 0x62, + 0x0134, 0x82, 0x0144, 0x02, 0x0154, 0xc2, 0x0164, 0x42, + 0x0174, 0xb2, 0x018c, 0x32, 0x018c, 0xf2, 0x01ac, 0x72, + 0x01ac, 0x92, 0x01cc, 0x12, 0x01cc, 0xd2, 0x01ec, 0x52, + 0x01ec, 0xae, 0x020c, 0x2e, 0x022c, 0xee, 0x024c, 0x6e, + 0x026c, 0x8e, 0x028c, 0x0e, 0x02ac, 0xce, 0x02cc, 0x4e, + 0x02ec, 0xbe, 0x030c, 0x3e, 0x032c, 0xfe, 0x034c, 0x7e, + 0x036c, 0x9e, 0x039c, 0x1e, 0x039c, 0xde, 0x03dc, 0x5e, + 0x03dc, 0xa6, 0x041c, 0x26, 0x045c, 0xe6, 0x049c, 0x66, + 0x04dc, 0x86, 0x051c, 0x06, 0x055c, 0xc6, 0x059c, 0x46, + 0x05dc, 0xb6, 0x061c, 0x36, 0x065c, 0xf6, 0x069c, 0x76, + 0x06dc, 0x96, 0x071c, 0x16, 0x075c, 0xd6, 0x07bc, 0x56, + 0x07bc, 0xa8, 0x083c, 0x28, 0x08bc, 0xe8, 0x093c, 0x68, + 0x09bc, 0x88, 0x0a3c, 0x08, 0x0abc, 0xc8, 0x0b3c, 0x48, + 0x0bbc, 0xb8, 0x0c3c, 0x38, 0x0cbc, 0xf8, 0x0d3c, 0x78, + 0x0dbc, 0x98, 0x0e3c, 0x18, 0x0ebc, 0xd8, 0x0f3c, 0x58, + 0x0f3c, 0xa0, 0x0ffc, 0x20, 0x10fc, 0xe0, 0x11fc, 0x60, + 0x12fc, 0x80, 0x13fc, 0x00, 0x14fc, 0xc0, 0x15fc, 0x40, + 0x16fc, 0xb0, 0x17fc, 0x30, 0x18fc, 0xf0, 0x19fc, 0x70, + 0x1afc, 0x90, 0x1bfc, 0x10, 0x1cfc, 0xd0, 0x1dfc, 0x50, + 0x1efc, 0xac, 0x207c, 0x2c, 0x227c, 0xec, 0x247c, 0x6c, + 0x267c, 0x8c, 0x287c, 0x0c, 0x2a7c, 0xcc, 0x2c7c, 0x4c, + 0x2e7c, 0xbc, 0x307c, 0x3c, 0x327c, 0xfc, 0x347c, 0x7c, + 0x367c, 0x9c, 0x387c, 0x1c, 0x3a7c, 0xdc, 0x3c7c, 0x5c, + 0x3e7c, 0xa4, 0x417c, 0x24, 0x457c, 0xe4, 0x497c, 0x64, + 0x4d7c, 0x84, 0x517c, 0x04, 0x557c, 0xc4, 0x597c, 0x44, + 0x5d7c, 0xb4, 0x617c, 0x34, 0x657c, 0xf4, 0x697c, 0x74, + 0x6d7c, 0x94, 0x717c, 0x14, 0x757c, 0xd4, 0x797c, 0x54 +}; + +/* generate tables for conversion of s16 to alaw/ulaw + */ +void generate_tables(char law) +{ + int i, j; + + if (law == 'a') + { + audio_law_to_s32=audio_alaw_to_s32; + /* generating alaw-table */ + i = j = 0; + while(i < 65536) { + if (i-32768 > audio_alaw_relations[j<<1]) + j++; + if (j>255) + j=255; + audio_s16_to_law[(i-32768) & 0xffff] + = audio_alaw_relations[(j<<1)|1]; + i++; + } + } else + { + audio_law_to_s32=audio_ulaw_to_s32; + /* generating ulaw-table */ + i = j = 0; + while(i < 32768) { + if (i-32768 > audio_ulaw_to_s32[j]) + j++; + audio_s16_to_law[(i-32768) & 0xffff] = j; + i++; + } + j = 255; + while(i < 65536) { + if (i-0x32768 > audio_ulaw_to_s32[j]) + j--; + audio_s16_to_law[(i-32768) & 0xffff] = j; + i++; + } + } +} + + diff --git a/alawulaw.h b/alawulaw.h new file mode 100644 index 0000000..96c170a --- /dev/null +++ b/alawulaw.h @@ -0,0 +1,5 @@ + +extern signed long *audio_law_to_s32; +extern unsigned char audio_s16_to_law[65536]; +extern short audio_alaw_relations[]; +void generate_tables(char law); diff --git a/apppbx.cpp b/apppbx.cpp new file mode 100644 index 0000000..1d07900 --- /dev/null +++ b/apppbx.cpp @@ -0,0 +1,4476 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** The EndpointAppPBX implements PBX4Linux ** +** ** +\*****************************************************************************/ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include "main.h" + + +class EndpointAppPBX *apppbx_first = NULL; + +/* + * EndpointAppPBX constructor + */ +EndpointAppPBX::EndpointAppPBX(class Endpoint *epoint) : EndpointApp(epoint) +{ + class EndpointAppPBX **apppointer; + + /* add application to chain */ + next = NULL; + apppointer = &apppbx_first; + while(*apppointer) + apppointer = &((*apppointer)->next); + *apppointer = this; + + /* initialize */ + memset(&e_ext, 0, sizeof(struct extension)); + e_ext.rights = 4; /* international */ + e_ext.rxvol = e_ext.txvol = 256; + e_state = EPOINT_STATE_IDLE; + e_terminal[0] = '\0'; + e_terminal_interface[0] = '\0'; + memset(&e_callerinfo, 0, sizeof(struct caller_info)); + memset(&e_dialinginfo, 0, sizeof(struct dialing_info)); + memset(&e_connectinfo, 0, sizeof(struct connect_info)); + memset(&e_redirinfo, 0, sizeof(struct redir_info)); + memset(&e_capainfo, 0, sizeof(struct capa_info)); + e_start = e_stop = 0; +// e_origin = 0; + e_ruleset = ruleset_main; + if (e_ruleset) + e_rule = e_ruleset->rule_first; + e_rule_nesting = 0; + e_action = NULL; + e_action_timeout = 0; + e_match_timeout = 0; + e_match_to_action = NULL; + e_select = 0; + e_extdialing = e_dialinginfo.number; +// e_knocking = 0; +// e_knocktime = 0; + e_hold = 0; +// e_call_tone[0] = e_hold_tone[0] = '\0'; + e_call_pattern /*= e_hold_pattern*/ = 0; + e_redial = 0; + e_tone[0] = '\0'; + e_adminid = 0; // will be set, if call was initiated via admin socket + e_powerdialing = 0; + e_powerdelay = 0; + e_powerlimit = 0; + e_callback = 0; + e_cbdialing[0] = '\0'; + e_cbcaller[0] = '\0'; + e_cbto[0] = '\0'; + memset(&e_callbackinfo, 0, sizeof(struct caller_info)); + e_connectedmode = 0; + e_dtmf = 0; + e_dtmf_time = 0; + e_dtmf_last = 0; + e_cfnr_release = 0; + e_cfnr_call = 0; + e_password_timeout = 0; + e_multipoint_cause = CAUSE_NOUSER; + e_multipoint_location = LOCATION_PRIVATE_LOCAL; + e_dialing_queue[0] = '\0'; + e_crypt = CRYPT_OFF; + e_crypt_state = CM_ST_NULL; + e_crypt_keyengine_busy = 0; + e_crypt_info[0] = '\0'; + e_overlap = 0; + e_vbox[0] = '\0'; + e_tx_state = NOTIFY_STATE_ACTIVE; + e_rx_state = NOTIFY_STATE_ACTIVE; + e_call_cause = e_call_location = 0; +/********************************* + ********************************* + ********* ATTENTION ************* + ********************************* + *********************************/ +/* if you add new values, that must be initialized, also check if they must + * be initialized when doing callback + */ + +} + +/* + * EpointAppPBX destructor + */ +EndpointAppPBX::~EndpointAppPBX(void) +{ + class EndpointAppPBX *temp, **tempp; + + /* detach */ + temp =apppbx_first; + tempp = &apppbx_first; + while(temp) + { + if (temp == this) + break; + + tempp = &temp->next; + temp = temp->next; + } + if (temp == 0) + { + PERROR("error: endpoint not in endpoint's list, exitting.\n"); + exit(-1); + } + *tempp = next; + +} + + +EPOINT_STATE_NAMES + +/* set new endpoint state + */ +void EndpointAppPBX::new_state(int state) +{ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) new state %s --> %s\n", ea_endpoint->ep_serial, state_name[e_state], state_name[state]); + e_state = state; +} + + +/* release call and port (as specified) + */ +void EndpointAppPBX::release(int release, int calllocation, int callcause, int portlocation, int portcause) +{ + struct port_list *portlist; + struct message *message; + char cause[16]; + class Call *call; + + /* message to test call */ + admin_call_response(e_adminid, ADMIN_CALL_RELEASE, "", callcause, calllocation, 0); + + /* if a release is pending */ + if (release==RELEASE_CALL || release==RELEASE_ALL || release==RELEASE_PORT_CALLONLY) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): do pending release (callcause %d location %d)\n", ea_endpoint->ep_serial, callcause, calllocation); + if (ea_endpoint->ep_call_id) + { + call = find_call_id(ea_endpoint->ep_call_id); + if (call) + call->release(ea_endpoint->ep_serial, 0, calllocation, callcause); + } + ea_endpoint->ep_call_id = 0; + e_call_pattern = 0; +#if 0 + if (release != RELEASE_PORT_CALLONLY) + { + if (e_hold_id) + call_release(e_hold_id, ea_endpoint->ep_serial, 1, calllocation, callcause); + e_hold_id = 0; + } +#endif + } + if (release==RELEASE_ALL || release==RELEASE_PORT_CALLONLY) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) do pending release (portcause %d portlocation)\n", ea_endpoint->ep_serial, portcause, portlocation); + while((portlist = ea_endpoint->ep_portlist)) + { + if (portlist->port_id) + { + SPRINT(cause, "cause_%02x", portcause); + set_tone(portlist, cause); + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_RELEASE); + message->param.disconnectinfo.cause = portcause; + message->param.disconnectinfo.location = portlocation; + message_put(message); + logmessage(message); + } + ea_endpoint->free_portlist(portlist); + } + + /* if callback is enabled, call back with the given caller id */ + if (e_callback) + { + /* reset some stuff */ + new_state(EPOINT_STATE_IDLE); + memset(&e_connectinfo, 0, sizeof(struct connect_info)); + memset(&e_redirinfo, 0, sizeof(struct redir_info)); + e_start = e_stop = 0; + e_ruleset = ruleset_main; + if (e_ruleset) + e_rule = e_ruleset->rule_first; + e_action = NULL; + e_action_timeout = 0; + e_match_timeout = 0; + e_match_to_action = NULL; + //e_select = 0; + e_extdialing = e_dialinginfo.number; + e_connectedmode = 0; + e_dtmf = 0; + e_dtmf_time = 0; + e_dtmf_last = 0; + e_cfnr_release = 0; + e_cfnr_call = 0; + e_multipoint_cause = CAUSE_NOUSER; + e_multipoint_location = LOCATION_PRIVATE_LOCAL; + e_dialing_queue[0] = '\0'; + e_crypt = 0; + e_crypt_state = CM_ST_NULL; + e_crypt_keyengine_busy = 0; + e_crypt_info[0] = '\0'; + e_tone[0] = '\0'; + e_overlap = 0; + e_vbox[0] = '\0'; + e_tx_state = NOTIFY_STATE_ACTIVE; + e_rx_state = NOTIFY_STATE_ACTIVE; + e_call_cause = e_call_location = 0; + e_rule_nesting = 0; + /* the caller info of the callback user */ + memcpy(&e_callbackinfo, &e_callerinfo, sizeof(e_callbackinfo)); + memset(&e_dialinginfo, 0, sizeof(e_dialinginfo)); + /* create dialing by callerinfo */ + if (e_terminal[0] && e_terminal_interface[0]) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) preparing callback to internal: %s interface %s\n", ea_endpoint->ep_serial, e_terminal, e_terminal_interface); + /* create callback to the current terminal */ + SCPY(e_dialinginfo.number, e_terminal); + SCPY(e_dialinginfo.interfaces, e_terminal_interface); + e_dialinginfo.itype = INFO_ITYPE_ISDN_EXTENSION; + e_dialinginfo.ntype = INFO_NTYPE_UNKNOWN; + } else + { + if (e_cbto[0]) + { + SCPY(e_dialinginfo.number, e_cbto); + } else + { + /* numberrize caller id and use it to dial to the callback */ + SCPY(e_dialinginfo.number, numberrize_callerinfo(e_callerinfo.id,e_callerinfo.ntype)); + } + e_dialinginfo.itype = INFO_ITYPE_ISDN; + e_dialinginfo.ntype = INFO_NTYPE_UNKNOWN; + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) preparing callback to external: %s\n", ea_endpoint->ep_serial, e_dialinginfo.number); + } + return; + } + + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) do pending release of epoint itself.\n", ea_endpoint->ep_serial); + ea_endpoint->ep_use--; /* when e_lock is 0, the endpoint will be deleted */ + return; + } +} + + +/* cancel callerid if restricted, unless anon-ignore is enabled at extension or port is of type external (so called police gets caller id :)*/ +void apply_callerid_restriction(int anon_ignore, int port_type, char *id, int *ntype, int *present, int *screen, char *voip, char *intern, char *name) +{ + PDEBUG(DEBUG_EPOINT, "id='%s' ntype=%d present=%d screen=%d voip='%s' intern='%s' name='%s'\n", (id)?id:"NULL", (ntype)?*ntype:-1, (present)?*present:-1, (screen)?*screen:-1, (voip)?voip:"NULL", (intern)?intern:"NULL", (name)?name:"NULL"); + + /* caller id is not restricted, so we do nothing */ + if (*present != INFO_PRESENT_RESTRICTED) + return; + + /* external ports receive no restricted caller id */ + if (port_type==PORT_TYPE_DSS1_TE_IN || port_type==PORT_TYPE_DSS1_TE_OUT) + return; + + /* if we enabled anonymouse ignore */ + if (anon_ignore) + return; + + /* else we remove the caller id */ + if (id) + id[0] = '\0'; + if (ntype) + *ntype = INFO_NTYPE_UNKNOWN; +// if (screen) +// *screen = INFO_SCREEN_USER; +// maybe we should not make voip address anonymous +// if (voip) +// voip[0] = '\0'; +// maybe it's no fraud to present internal id +// if (intern) +// intern[0] = '\0'; + if (name) + name[0] = '\0'; +} + +/* used display message to display callerid as available */ +char *EndpointAppPBX::apply_callerid_display(char *id, int itype, int ntype, int present, int screen, char *voip, char *intern, char *name) +{ + static char display[81]; + + display[0] = '\0'; + char *cid = numberrize_callerinfo(id, ntype); + + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) id='%s' itype=%d ntype=%d present=%d screen=%d voip='%s' intern='%s' name='%s'\n", ea_endpoint->ep_serial, (id)?id:"NULL", itype, ntype, present, screen, (voip)?voip:"NULL", (intern)?intern:"NULL", (name)?name:"NULL"); + + if (!id) + id = ""; + if (!voip) + voip = ""; + if (!intern) + intern = ""; + if (!name) + name = ""; + + /* NOTE: is caller is is not available for this extesion, it has been removed by apply_callerid_restriction already */ + + /* internal extension's caller id */ + if (intern[0] && e_ext.display_int) + { + if (!display[0]) + SCAT(display, intern); + if (display[0]) + SCAT(display, " "); + if (itype == INFO_ITYPE_VBOX) + SCAT(display, "(vbox)"); + else + SCAT(display, "(int)"); + } + + /* external caller id */ + if (!intern[0] && !voip[0] && e_ext.display_ext) + { + if (!display[0]) + { + if (!cid[0]) + { + if (present == INFO_PRESENT_RESTRICTED) + SCAT(display, "anonymous"); + else + SCAT(display, "unknown"); + } + else + SCAT(display, cid); + } + } + + /* voip caller id */ + if (voip[0] && e_ext.display_voip) + { + if (!display[0] && cid[0]) + SCAT(display, cid); + if (display[0]) + SCAT(display, " "); + SCAT(display, voip); + } + + /* display if callerid is anonymouse but available due anon-ignore */ + if (e_ext.display_anon && present==INFO_PRESENT_RESTRICTED) + { + if (!cid[0]) + SCAT(display, "unknown"); + else + SCAT(display, cid); + SCAT(display, " anon"); + } + + /* display if callerid is anonymouse but available due anon-ignore */ + if (e_ext.display_fake && screen==INFO_SCREEN_USER && present!=INFO_PRESENT_NULL) + { + if (!display[0]) + { + if (!id[0]) + { + if (present == INFO_PRESENT_RESTRICTED) + SCAT(display, "anonymous"); + else + SCAT(display, "unknown"); + } + else + SCAT(display, cid); + } + SCAT(display, " fake"); + } + + /* caller name */ + if (name[0] && e_ext.display_name) + { + if (!display[0] && cid[0]) + SCAT(display, cid); + if (display[0]) + SCAT(display, " "); + SCAT(display, name); + } + + return(display); +} + +/* + * uses the current state to notify activity + */ +void EndpointAppPBX::notify_active(void) +{ + struct port_list *portlist = ea_endpoint->ep_portlist; + struct message *message; + int notify = 0; + + switch(e_tx_state) + { + case NOTIFY_STATE_ACTIVE: + /* we are already active, so we don't do anything */ + break; + + case NOTIFY_STATE_SUSPEND: + notify = INFO_NOTIFY_USER_RESUMED; + while(portlist) + { + set_tone(portlist, NULL); + portlist = portlist->next; + } + portlist = ea_endpoint->ep_portlist; + break; + + case NOTIFY_STATE_HOLD: + notify = INFO_NOTIFY_REMOTE_RETRIEVAL; + while(portlist) + { + set_tone(portlist, NULL); + portlist = portlist->next; + } + portlist = ea_endpoint->ep_portlist; + break; + + case NOTIFY_STATE_CONFERENCE: + notify = INFO_NOTIFY_CONFERENCE_DISCONNECTED; + while(portlist) + { + set_tone(portlist, NULL); + portlist = portlist->next; + } + portlist = ea_endpoint->ep_portlist; + break; + + default: + PERROR("unknown e_tx_state = %d\n", e_tx_state); + } + + if (notify) + while(portlist) + { + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_NOTIFY); + message->param.notifyinfo.notify = notify; + message_put(message); + logmessage(message); + portlist = portlist->next; + } +} + + +/* + * keypad functions during call. one example to use this is to put a call on hold or start a conference + */ +void EndpointAppPBX::keypad_function(char digit) +{ + + /* we must be in a call, in order to send messages to the call */ + if (e_terminal[0] == '\0') + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) IGNORING keypad received not from extension.\n", ea_endpoint->ep_serial); + return; + } + + switch(digit) + { + /* join conference */ + case '3': + if (ea_endpoint->ep_call_id == 0) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) keypad received during connect but not during a call.\n", ea_endpoint->ep_serial); + break; + } + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) join call with call on hold\n", ea_endpoint->ep_serial); + join_call(); + break; + + /* crypt shared */ + case '7': + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) shared key encryption selected.\n", ea_endpoint->ep_serial); + encrypt_shared(); + break; + + /* crypt key-exchange */ + case '8': + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) key exchange encryption selected.\n", ea_endpoint->ep_serial); + encrypt_keyex(); + break; + + /* crypt off */ + case '9': + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) encryption off selected.\n", ea_endpoint->ep_serial); + encrypt_off(); + break; + + default: + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) unsupported keypad digit '%c'.\n", ea_endpoint->ep_serial, digit); + } +} + + +/* set tone pattern for port */ +void EndpointAppPBX::set_tone(struct port_list *portlist, char *tone) +{ + struct message *message; + + if (!tone) + tone = ""; + + /* store for suspended processes */ + SCPY(e_tone, tone); + + if (!portlist) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) no endpoint to notify tone.\n", ea_endpoint->ep_serial); + return; + } + + if (e_call_pattern /* pattern are provided */ + && !(e_ext.own_setup && e_state == EPOINT_STATE_IN_SETUP) + && !(e_ext.own_setup && e_state == EPOINT_STATE_IN_OVERLAP) + && !(e_ext.own_proceeding && e_state == EPOINT_STATE_IN_PROCEEDING) + && !(e_ext.own_alerting && e_state == EPOINT_STATE_IN_ALERTING) + && !(e_ext.own_cause && e_state == EPOINT_STATE_IN_DISCONNECT) + && !(e_ext.own_setup && e_state == EPOINT_STATE_OUT_SETUP) + && !(e_ext.own_setup && e_state == EPOINT_STATE_OUT_OVERLAP) + && !(e_ext.own_proceeding && e_state == EPOINT_STATE_OUT_PROCEEDING) + && !(e_ext.own_alerting && e_state == EPOINT_STATE_OUT_ALERTING) + && !(e_ext.own_cause && e_state == EPOINT_STATE_OUT_DISCONNECT) + && tone[0] && !!strncmp(tone,"crypt_*",6)) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) tone not provided since patterns are available\n", ea_endpoint->ep_serial); + tone = ""; + } + + if (portlist) + { + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_TONE); + SCPY(message->param.tone.dir, e_ext.tones_dir[0]?e_ext.tones_dir:options.tones_dir); + SCPY(message->param.tone.name, tone); + message_put(message); + logmessage(message); + } +} + + +/* + * hunts an mISDNport that is available for an outgoing call + * if no ifname was given, any interface that is not an extension + * will be searched. + */ +static struct mISDNport *EndpointAppPBX::hunt_port(char *ifname, int *channel) +{ + struct interface *interface; + struct mISDNport *mISDNport; + + interface = interface_first; + + /* first find the given interface or, if not given, one with no extension */ + checknext: + if (!interface) + return(null); + + /* check for given interface */ + if (ifname) + { + if (!strcasecmp(interface->name, ifname)) + { + /* found explicit interface */ + printlog("%3d interface %s found as given\n", ea_endpoint->ep_serial, ifname); + goto found; + } + + } else + { + if (!interface->extension) + { + /* found non extension */ + printlog("%3d interface %s found, that is not an extension\n", ea_endpoint->ep_serial, interface->name); + goto found; + } + } + + interface = interface->next; + goto checknext; + + /* see if interface has ports */ + if (!interface->ifport) + { + /* no ports */ + printlog("%3d interface %s has no active ports, skipping.\n", ea_endpoint->ep_serial, interface->name); + interface = interface->next; + goto checknext; + } + + /* select port by algorithm */ + ifport_start = interface->port; + index = 0; + if (interface->hunt == HUNT_ROUNDROBIN) + { + while(ifport_start->next && indexhunt_next) + { + ifport_start = ifport_start->next; + i++; + } + printlog("%3d starting with port#%d position %d (round-robin)\n", ea_endpoint->ep_serial, ifport_start->portnum, index); + } + + /* loop ports */ + ifport = ifport_start; + nextport: + + /* see if port is available */ + if (!ifport->mISDNport) + { + printlog("%3d port#%d position %d is not available, skipping.\n", ea_endpoint->ep_serial, ifport_start->portnum, index); + goto portbusy; + } + mISDNport = ifport->mISDNport; + +#warning admin block auch bei incomming calls +#warning calls releasen, wenn port entfernt wird, geblockt wird + /* see if port is administratively blocked */ + if (ifport->block) + { + printlog("%3d port#%d position %d is administratively blocked, skipping.\n", ea_endpoint->ep_serial, ifport_start->portnum, index); + goto portbusy; + } + + /* see if link is up */ + if (mISDNport->ptp && !mISDNport->l2link) + { + printlog("%3d port#%d position %d is ptp but layer 2 is down.\n", ea_endpoint->ep_serial, ifport_start->portnum, index); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) skipping because it is PTP with L2 down\n", ea_endpoint->ep_serial); + goto portbusy; + } + + /* check for channel form selection list */ + *channel = 0; + selchannel = ifport->selchannel; + while(selchannel) + { + switch(selchannel->channel) + { + case CHANNEL_FREE: /* free channel */ + if (mISDNport->b_inuse >= mISDNport->b_num) + break; /* all channel in use or reserverd */ + /* find channel */ + i = 0; + while(i < mISDNport->b_num) + { + if (mISDNport->b_port[i] == NULL) + { + *channel = i+1+(i>=15); + printlog("%3d port#%d position %d selecting free channel %d\n", ea_endpoint->ep_serial, ifport_start->portnum, index, *channel); + break; + } + i++; + } + break; + + case CHANNEL_ANY: /* don't ask for channel */ + if (mISDNport->b_inuse >= mISDNport->b_num) + { + break; /* all channel in use or reserverd */ + } + printlog("%3d port#%d position %d using with 'any channel'\n", ea_endpoint->ep_serial, ifport_start->portnum, index); + *channel = SEL_CHANNEL_ANY; + break; + + case CHANNEL_NO: /* call waiting */ + printlog("%3d port#%d position %d using with 'no channel'\n", ea_endpoint->ep_serial, ifport_start->portnum, index); + *channel = SEL_CHANNEL_NO; + break; + + default: + if (selchannel->channel<1 || selchannel->channel==16) + break; /* invalid channels */ + i = selchannel->channel-1-(selchannel->channel>=17); + if (i >= mISDNport->b_num) + break; /* channel not in port */ + if (mISDNport->b_port[i] == NULL) + { + *channel = selchannel->channel; + printlog("%3d port#%d position %d selecting given channel %d\n", ea_endpoint->ep_serial, ifport_start->portnum, index, *channel); + break; + } + break; + } + if (*channel) + break; /* found channel */ + printlog("%3d port#%d position %d skipping, because no channel found.\n", ea_endpoint->ep_serial, ifport_start->portnum, index); + selchannel = selchannel->next; + } + + /* if channel was found, return mISDNport and channel */ + if (*channel) + { + /* setting next port to start next time */ + if (interface->hunt == HUNT_ROUNDROBIN) + { + index++; + if (!ifport->next) + index = 0; + interface->hunt_next = index; + } + + return(mISDNport); + } + + portbusy: + /* go next port, until all ports are checked */ + index++; + ifport = ifport->next; + if (!ifport) + { + index = 0; + ifport = interface->ifport; + } + if (ifport != ifport_start) + goto nextport; + + return(NULL); /* no port found */ +} + +/* outgoing setup to port(s) + * ports will be created and a setup is sent if everything is ok. otherwhise + * the endpoint is destroyed. + */ +void EndpointAppPBX::out_setup(void) +{ + struct dialing_info dialinginfo; + class Port *port; +// class pdss1 *pdss1; + struct port_list *portlist; + struct message *message; + int anycall = 0; + int cause = CAUSE_RESSOURCEUNAVAIL; + char *p; + char cfp[64]; + struct mISDNport *mISDNport; + char portname[32]; + char *dirname; + class EndpointAppPBX *atemp; +// char allowed_ports[256]; +// char exten[256]; + int i, ii; + int use; + char ifname[sizeof(e_ext.interfaces)], + number[256]; + struct port_settings port_settings; + int channel = 0; + + /* create settings for creating port */ + memset(&port_settings, 0, sizeof(port_settings)); + if (e_ext.tones_dir) + SCPY(port_settings.tones_dir, e_ext.tones_dir); + else + SCPY(port_settings.tones_dir, options.tones_dir); + port_settings.tout_setup = e_ext.tout_setup; + port_settings.tout_dialing = e_ext.tout_dialing; + port_settings.tout_proceeding = e_ext.tout_proceeding; + port_settings.tout_alerting = e_ext.tout_alerting; + port_settings.tout_disconnect = e_ext.tout_disconnect; +// port_settings.tout_hold = e_ext.tout_hold; +// port_settings.tout_park = e_ext.tout_park; + port_settings.no_seconds = e_ext.no_seconds; + + /* NOTE: currently the try_card feature is not supported. it should be used later to try another card, if the outgoing call fails on one port */ + + /* check what dialinginfo.itype we got */ + switch(e_dialinginfo.itype) + { + /* *********************** call to extension or vbox */ + case INFO_ITYPE_ISDN_EXTENSION: + /* check if we deny incoming calls when we use an extension */ + if (e_ext.noknocking) + { + atemp = apppbx_first; + while(atemp) + { + if (atemp != this) + if (!strcmp(atemp->e_terminal, e_terminal)) + break; + atemp = atemp->next; + } + if (atemp) + { + PERROR("EPOINT(%d) noknocking and currently a call\n", ea_endpoint->ep_serial); + release(RELEASE_ALL, LOCATION_PRIVATE_LOCAL, CAUSE_BUSY, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL); /* RELEASE_TYSPE_ call, port */ + return; /* must exit here */ + } + } + /* FALL THROUGH !!!! */ + case INFO_ITYPE_VBOX: + /* get dialed extension's info */ +// SCPY(exten, e_dialinginfo.number); +// if (strchr(exten, ',')) +// *strchr(exten, ',') = '\0'; +// if (!read_extension(&e_ext, exten)) + if (!read_extension(&e_ext, e_dialinginfo.number)) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) extension %s not configured\n", ea_endpoint->ep_serial, e_dialinginfo.number); + release(RELEASE_ALL, LOCATION_PRIVATE_LOCAL, CAUSE_OUTOFORDER, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL); /* RELEASE_TYPE, call, port */ + return; /* must exit here */ + } + + if (e_dialinginfo.itype == INFO_ITYPE_VBOX) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) dialing directly to VBOX\n", ea_endpoint->ep_serial); + p = "vbox"; + goto vbox_only; + } + + /* string from unconditional call forward (cfu) */ + p = e_ext.cfu; + if (*p) + { + /* present to forwarded party */ + if (e_ext.anon_ignore && e_callerinfo.id[0]) + { + e_callerinfo.present = INFO_PRESENT_ALLOWED; + } + if (!!strcmp(p, "vbox") || (e_capainfo.bearer_capa==INFO_BC_AUDIO) || (e_capainfo.bearer_capa==INFO_BC_SPEECH)) + goto cfu_only; + } + + /* string from busy call forward (cfb) */ + p = e_ext.cfb; + if (*p) + { + class EndpointAppPBX *checkapp = apppbx_first; + while(checkapp) + { + if (checkapp != this) /* any other endpoint except our own */ + { + if (!strcmp(checkapp->e_terminal, e_terminal)) + { + /* present to forwarded party */ + if (e_ext.anon_ignore && e_callerinfo.id[0]) + { + e_callerinfo.present = INFO_PRESENT_ALLOWED; + } + if (!!strcmp(p, "vbox") || (e_capainfo.bearer_capa==INFO_BC_AUDIO) || (e_capainfo.bearer_capa==INFO_BC_SPEECH)) + goto cfb_only; + } + } + checkapp = checkapp->next; + } + } + + /* string from no-response call forward (cfnr) */ + p = e_ext.cfnr; + if (*p) + { + /* when cfnr is done, out_setup() will setup the call */ + if (e_cfnr_call) + { + /* present to forwarded party */ + if (e_ext.anon_ignore && e_callerinfo.id[0]) + { + e_callerinfo.present = INFO_PRESENT_ALLOWED; + } + goto cfnr_only; + } + if (!!strcmp(p, "vbox") || (e_capainfo.bearer_capa==INFO_BC_AUDIO) || (e_capainfo.bearer_capa==INFO_BC_SPEECH)) + { + e_cfnr_release = now + e_ext.cfnr_delay; + e_cfnr_call = now + e_ext.cfnr_delay + 1; /* call one second after release */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) setting time for call-forward-busy to %s with delay %ld.\n", ea_endpoint->ep_serial, e_ext.cfnr, e_ext.cfnr_delay); + } + } + + /* call to all internal interfaces */ + p = e_ext.interfaces; + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) generating multiple calls for extension %s to interfaces %s\n", ea_endpoint->ep_serial, e_dialinginfo.number, p); + while(*p) + { + ifname[0] = '\0'; + while(*p!=',' && *p!='\0') + if (*p > ' ') + SCCAT(ifname, *p++); + if (*p == ',') + p++; + /* found interface */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) calling to interface %s\n", ea_endpoint->ep_serial, ifname); + /* hunt for mISDNport and create Port */ + mISDNport = hunt_port(ifname, &channel); + if (!mISDNport) + { + printlog("%3d endpoint INTERFACE '%s' not found or busy\n", ea_endpoint->ep_serial, ifname); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) given interface: '%s' not found or too busy to accept calls.\n", ea_endpoint->ep_serial, e_ext.interfaces); + continue; + } + /* creating INTERNAL port */ + SPRINT(portname, "%s-%d-out", mISDNport->interface_name, mISDNport->portnum); + port = new Pdss1((mISDNport->ntmode)?PORT_TYPE_DSS1_NT_OUT:PORT_TYPE_DSS1_TE_OUT, mISDNport, portname, &port_settings, channel, mISDNport->ifport.channel_force); + if (!port) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) port '%s' failed to create\n", ea_endpoint->ep_serial, mISDNport->interface_name); + goto check_anycall_intern; + } + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) got port %s\n", ea_endpoint->ep_serial, port->p_name); + memset(&dialinginfo, 0, sizeof(dialinginfo)); + SCPY(dialinginfo.number, e_dialinginfo.number); + dialinginfo.itype = INFO_ITYPE_INTERN; + dialinginfo.ntype = e_dialinginfo.ntype; + /* create port_list relation */ + portlist = ea_endpoint->portlist_new(port->p_serial, port->p_type); + if (!portlist) + { + PERROR("EPOINT(%d) cannot allocate port_list relation\n", ea_endpoint->ep_serial); + delete port; + goto check_anycall_intern; + } + /* directory.list */ + if (e_callerinfo.id[0] && (e_ext.centrex || e_ext.display_name)) + { + dirname = parse_directory(e_callerinfo.id, e_callerinfo.ntype); + if (dirname) + SCPY(e_callerinfo.name, dirname); + } +// dss1 = (class Pdss1 *)port; + /* message */ +//printf("INTERNAL caller=%s,id=%s,dial=%s\n", param.setup.networkid, param.setup.callerinfo.id, param.setup.dialinginfo.number); + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_SETUP); + memcpy(&message->param.setup.dialinginfo, &dialinginfo, sizeof(struct dialing_info)); + memcpy(&message->param.setup.redirinfo, &e_redirinfo, sizeof(struct redir_info)); + memcpy(&message->param.setup.callerinfo, &e_callerinfo, sizeof(struct caller_info)); + memcpy(&message->param.setup.capainfo, &e_capainfo, sizeof(struct capa_info)); +//terminal SCPY(message->param.setup.from_terminal, e_terminal); +//terminal if (e_dialinginfo.number) +//terminal SCPY(message->param.setup.to_terminal, e_dialinginfo.number); + /* handle restricted caller ids */ + apply_callerid_restriction(e_ext.anon_ignore, port->p_type, message->param.setup.callerinfo.id, &message->param.setup.callerinfo.ntype, &message->param.setup.callerinfo.present, &message->param.setup.callerinfo.screen, message->param.setup.callerinfo.voip, message->param.setup.callerinfo.intern, message->param.setup.callerinfo.name); + apply_callerid_restriction(e_ext.anon_ignore, port->p_type, message->param.setup.redirinfo.id, &message->param.setup.redirinfo.ntype, &message->param.setup.redirinfo.present, NULL, message->param.setup.redirinfo.voip, message->param.setup.redirinfo.intern, 0); + /* display callerid if desired for extension */ + SCPY(message->param.setup.callerinfo.display, apply_callerid_display(message->param.setup.callerinfo.id, message->param.setup.callerinfo.itype, message->param.setup.callerinfo.ntype, message->param.setup.callerinfo.present, message->param.setup.callerinfo.screen, message->param.setup.callerinfo.voip, message->param.setup.callerinfo.intern, message->param.setup.callerinfo.name)); +//printf("\n\ndisplay = %s\n\n\n",message->param.setup.callerinfo.display); + /* use cnip, if enabld */ + if (!e_ext.centrex) + message->param.setup.callerinfo.name[0] = '\0'; + /* screen clip if prefix is required */ + if (message->param.setup.callerinfo.id[0] && e_ext.clip_prefix[0]) + { + SCPY(message->param.setup.callerinfo.id, e_ext.clip_prefix); + SCAT(message->param.setup.callerinfo.id, numberrize_callerinfo(e_callerinfo.id,e_callerinfo.ntype)); + message->param.setup.callerinfo.ntype = INFO_NTYPE_UNKNOWN; + } + /* use internal caller id */ + if (e_callerinfo.intern[0] && (message->param.setup.callerinfo.present!=INFO_PRESENT_RESTRICTED || e_ext.anon_ignore)) + { + SCPY(message->param.setup.callerinfo.id, e_callerinfo.intern); + message->param.setup.callerinfo.ntype = INFO_NTYPE_UNKNOWN; + } + message_put(message); + logmessage(message); + anycall = 1; + } + + /* string from parallel call forward (cfp) */ + p = e_ext.cfp; + if (*p) + { + if (e_ext.anon_ignore && e_callerinfo.id[0]) + { + e_callerinfo.present = INFO_PRESENT_ALLOWED; + } + } + + vbox_only: /* entry point for answering machine only */ + cfu_only: /* entry point for cfu */ + cfb_only: /* entry point for cfb */ + cfnr_only: /* entry point for cfnr */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) call extension %s for external destiantion(s) '%s'\n", ea_endpoint->ep_serial, e_dialinginfo.number, p); +// i=0; + while(*p) + { + /* only if vbox should be dialed, and terminal is given */ + if (!strcmp(p, "vbox") && e_terminal[0]) + { + /* go to the end of p */ + p += strlen(p); + + /* answering vbox call */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) answering machine\n", ea_endpoint->ep_serial); + /* alloc port */ + if (!(port = new VBoxPort(PORT_TYPE_VBOX_OUT, &port_settings))) + { + PERROR("EPOINT(%d) no mem for port\n", ea_endpoint->ep_serial); + break; + } + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) allocated port %s\n", ea_endpoint->ep_serial, port->p_name); + UCPY(cfp, e_terminal); /* cfp or any other direct forward/vbox */ + } else + { + cfp[0] = '\0'; + while(*p!=',' && *p!='\0') + SCCAT(cfp, *p++); + if (*p == ',') + p++; + hier auch wie oben + /* external call */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) cfp external %s\n", ea_endpoint->ep_serial, cfp); + /* hunt for mISDNport and create Port */ + mISDNport = mISDNport_first; + port = NULL; + while(mISDNport) + { + /* check for external or given interface */ + if (((!e_dialinginfo.interfaces[0])&&mISDNport->iftype==IF_EXTERN) || !strcmp(mISDNport->interface_name, e_dialinginfo.interfaces)) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) interface '%s' found\n", ea_endpoint->ep_serial, mISDNport->interface_name); + cause = CAUSE_NOCHANNEL; /* when failing: out of channels */ + /* if PTP, skip all down links */ + if (mISDNport->ptp && !mISDNport->l2link) + { + printlog("%3d endpoint INTERFACE Layer 2 of interface '%s' is down.\n", ea_endpoint->ep_serial, mISDNport->interface_name); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) skipping because it is PTP with L2 down\n", ea_endpoint->ep_serial); + mISDNport = mISDNport->next; + continue; + } + /* if no channel is available */ + if (mISDNport->multilink || !mISDNport->ntmode || mISDNport->ptp) + { + use = 0; + i = 0; + ii = mISDNport->b_num; + while(i < ii) + { + if (mISDNport->b_state[i]) + use++; + i++; + } + if (use >= mISDNport->b_num) + { + printlog("%3d endpoint INTERFACE Interface '%s' has no free channel.\n", ea_endpoint->ep_serial, mISDNport->interface_name); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) skipping because it is not single link port_list NT-modem OR no channel available.\n", ea_endpoint->ep_serial); + mISDNport = mISDNport->next; + continue; + } + } + /* found interface */ + printlog("%3d endpoint INTERFACE Interface '%s' found for external call.\n", ea_endpoint->ep_serial, mISDNport->interface_name); + break; + } + mISDNport = mISDNport->next; + } + if (mISDNport) + { + /* creating EXTERNAL port*/ + SPRINT(portname, "%s-%d-out", mISDNport->interface_name, mISDNport->portnum); + port = new Pdss1((mISDNport->ntmode)?PORT_TYPE_DSS1_NT_OUT:PORT_TYPE_DSS1_TE_OUT, mISDNport, portname, &port_settings); + } else + { + port = NULL; + printlog("%3d endpoint INTERFACE External interface not found or busy.\n", ea_endpoint->ep_serial); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) given interface: '%s' too busy to accept calls.\n", ea_endpoint->ep_serial, e_dialinginfo.interfaces[0]?e_dialinginfo.interfaces:"any interface"); + } + } + if (!port) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) no port found or created, which is idle.\n", ea_endpoint->ep_serial); + goto check_anycall_intern; + } + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) found or created port %s\n", ea_endpoint->ep_serial, port->p_name); + memset(&dialinginfo, 0, sizeof(dialinginfo)); + SCPY(dialinginfo.number, cfp); + dialinginfo.itype = INFO_ITYPE_EXTERN; + dialinginfo.ntype = e_dialinginfo.ntype; + portlist = ea_endpoint->portlist_new(port->p_serial, port->p_type); + if (!portlist) + { + PERROR("EPOINT(%d) cannot allocate port_list relation\n", ea_endpoint->ep_serial); + delete port; + goto check_anycall_intern; + } +//printf("EXTERNAL caller=%s,id=%s,dial=%s\n", param.setup.networkid, param.setup.callerinfo.id, param.setup.dialinginfo.number); + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_SETUP); + memcpy(&message->param.setup.dialinginfo, &dialinginfo, sizeof(struct dialing_info)); + memcpy(&message->param.setup.redirinfo, &e_redirinfo, sizeof(struct redir_info)); + memcpy(&message->param.setup.callerinfo, &e_callerinfo, sizeof(struct caller_info)); + /* if clip is hidden */ + if (e_ext.clip==CLIP_HIDE && port->p_type!=PORT_TYPE_VBOX_OUT) + { + SCPY(message->param.setup.callerinfo.id, e_ext.callerid); + SCPY(message->param.setup.callerinfo.intern, e_terminal); + message->param.setup.callerinfo.ntype = e_ext.callerid_type; + message->param.setup.callerinfo.present = e_ext.callerid_present; + } + memcpy(&message->param.setup.capainfo, &e_capainfo, sizeof(struct capa_info)); +//terminal SCPY(message->param.setup.from_terminal, e_terminal); +//terminal if (e_dialinginfo.number) +//terminal SCPY(message->param.setup.to_terminal, e_dialinginfo.number); + /* handle restricted caller ids */ + apply_callerid_restriction(e_ext.anon_ignore, port->p_type, message->param.setup.callerinfo.id, &message->param.setup.callerinfo.ntype, &message->param.setup.callerinfo.present, &message->param.setup.callerinfo.screen, message->param.setup.callerinfo.voip, message->param.setup.callerinfo.intern, message->param.setup.callerinfo.name); + apply_callerid_restriction(e_ext.anon_ignore, port->p_type, message->param.setup.redirinfo.id, &message->param.setup.redirinfo.ntype, &message->param.setup.redirinfo.present, NULL, message->param.setup.redirinfo.voip, message->param.setup.redirinfo.intern, 0); + /* display callerid if desired for extension */ + SCPY(message->param.setup.callerinfo.display, apply_callerid_display(message->param.setup.callerinfo.id, message->param.setup.callerinfo.itype, message->param.setup.callerinfo.ntype, message->param.setup.callerinfo.present, message->param.setup.callerinfo.screen, message->param.setup.callerinfo.voip, message->param.setup.callerinfo.intern, message->param.setup.callerinfo.name)); + message_put(message); + logmessage(message); + anycall = 1; + } + + check_anycall_intern: + /* now we have all ports created */ + if (!anycall) + { + printlog("%3d endpoint INTERFACE No port or no parallel forwarding defined. Nothing to call to.\n", ea_endpoint->ep_serial); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) no port or no cfp defined for extension, nothing to dial.\n", ea_endpoint->ep_serial); + if (!ea_endpoint->ep_call_id) + break; + release(RELEASE_ALL, LOCATION_PRIVATE_LOCAL, cause, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL); /* RELEASE_TYPE, call, port */ + return; /* must exit here */ + } + break; + +#ifdef H323 + /* *********************** h323 call */ + case INFO_ITYPE_H323: + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) dialing H323: '%s'\n", ea_endpoint->ep_serial, e_dialinginfo.number); + + /* alloc port */ + if (!(port = new H323Port(PORT_TYPE_H323_OUT, "H323-out", &port_settings))) + { + PERROR("EPOINT(%d) no mem for port\n", ea_endpoint->ep_serial); + break; + } + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) allocated port %s\n", ea_endpoint->ep_serial, port->p_name); + memset(&dialinginfo, 0, sizeof(dialinginfo)); + SCPY(dialinginfo.number, e_dialinginfo.number); + dialinginfo.itype = INFO_ITYPE_H323; + dialinginfo.ntype = e_dialinginfo.ntype; + portlist = ea_endpoint->portlist_new(port->p_serial, port->p_type); + if (!portlist) + { + PERROR("EPOINT(%d) cannot allocate port_list relation\n", ea_endpoint->ep_serial); + delete port; + release(RELEASE_ALL, LOCATION_PRIVATE_LOCAL, cause, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL); /* RELEASE_TYPE, call, port */ + return; + } +//printf("INTERNAL caller=%s,id=%s,dial=%s\n", param.setup.networkid, param.setup.callerinfo.id, param.setup.dialinginfo.number); + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_SETUP); + memcpy(&message->param.setup.dialinginfo, &dialinginfo, sizeof(struct dialing_info)); + memcpy(&message->param.setup.redirinfo, &e_redirinfo, sizeof(struct redir_info)); + memcpy(&message->param.setup.callerinfo, &e_callerinfo, sizeof(struct caller_info)); + memcpy(&message->param.setup.capainfo, &e_capainfo, sizeof(struct capa_info)); +//terminal SCPY(message->param.setup.from_terminal, e_terminal); +//terminal if (e_dialinginfo.number) +//terminal SCPY(message->param.setup.to_terminal, e_dialinginfo.number); + /* handle restricted caller ids */ + apply_callerid_restriction(e_ext.anon_ignore, port->p_type, message->param.setup.callerinfo.id, &message->param.setup.callerinfo.ntype, &message->param.setup.callerinfo.present, &message->param.setup.callerinfo.screen, message->param.setup.callerinfo.voip, message->param.setup.callerinfo.intern, message->param.setup.callerinfo.name); + apply_callerid_restriction(e_ext.anon_ignore, port->p_type, message->param.setup.redirinfo.id, &message->param.setup.redirinfo.ntype, &message->param.setup.redirinfo.present, NULL, message->param.setup.redirinfo.voip, message->param.setup.redirinfo.intern, 0); + /* display callerid if desired for extension */ + SCPY(message->param.setup.callerinfo.display, apply_callerid_display(message->param.setup.callerinfo.id, message->param.setup.callerinfo.itype, message->param.setup.callerinfo.ntype, message->param.setup.callerinfo.present, message->param.setup.callerinfo.screen, message->param.setup.callerinfo.voip, message->param.setup.callerinfo.intern, message->param.setup.callerinfo.name)); + message_put(message); + logmessage(message); + break; +#endif +#ifdef SIP + /* *********************** sip call */ + case INFO_ITYPE_SIP: + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) dialing SIP: '%s'\n", ea_endpoint->ep_serial, e_dialinginfo.number); + + /* alloc port */ + if (!(port = new Psip(PORT_TYPE_SIP_OUT, 0, 0, e_dialinginfo.number))) + { + PERROR("EPOINT(%d) no mem for port\n", ea_endpoint->ep_serial); + break; + } + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) allocated port %s\n", ea_endpoint->ep_serial, port->p_name); + memset(&dialinginfo, 0, sizeof(dialinginfo)); + SCPY(dialinginfo.number, e_dialinginfo.number); + dialinginfo.itype = INFO_ITYPE_SIP; + dialinginfo.ntype = e_dialinginfo.ntype; + portlist = ea_endpoint->portlist_new(port->p_serial, port->p_type); + if (!portlist) + { + PERROR("EPOINT(%d) cannot allocate port_list relation\n", ea_endpoint->ep_serial); + delete port; + release(RELEASE_ALL, LOCATION_PRIVATE_LOCAL, cause, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL); /* RELEASE_TYPE, call, port */ + return; + } +//printf("INTERNAL caller=%s,id=%s,dial=%s\n", param.setup.networkid, param.setup.callerinfo.id, param.setup.dialinginfo.number); + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_SETUP); + memcpy(&message->param.setup.dialinginfo, &dialinginfo, sizeof(struct dialing_info)); + memcpy(&message->param.setup.redirinfo, &e_redirinfo, sizeof(struct redir_info)); + memcpy(&message->param.setup.callerinfo, &e_callerinfo, sizeof(struct caller_info)); + memcpy(&message->param.setup.capainfo, &e_capainfo, sizeof(struct capa_info)); +//terminal SCPY(message->param.setup.from_terminal, e_terminal); +//terminal if (e_dialinginfo.number) +//terminal SCPY(message->param.setup.to_terminal, e_dialinginfo.number); + /* handle restricted caller ids */ + apply_callerid_restriction(e_ext.anon_ignore, port->p_type, message->param.setup.callerinfo.id, &message->param.setup.callerinfo.ntype, &message->param.setup.callerinfo.present, &message->param.setup.callerinfo.screen, message->param.setup.callerinfo.voip, message->param.setup.callerinfo.intern, message->param.setup.callerinfo.name); + apply_callerid_restriction(e_ext.anon_ignore, port->p_type, message->param.setup.redirinfo.id, &message->param.setup.redirinfo.ntype, &message->param.setup.redirinfo.present, NULL, message->param.setup.redirinfo.voip, message->param.setup.redirinfo.intern, 0); + /* display callerid if desired for extension */ + SCPY(message->param.setup.callerinfo.display, apply_callerid_display(message->param.setup.callerinfo.id, message->param.setup.callerinfo.itype, message->param.setup.callerinfo.ntype, message->param.setup.callerinfo.present, message->param.setup.callerinfo.screen, message->param.setup.callerinfo.voip, message->param.setup.callerinfo.intern, message->param.setup.callerinfo.name)); + message_put(message); + logmessage(message); + break; +#endif + + /* *********************** external call */ + default: + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) dialing external: '%s'\n", ea_endpoint->ep_serial, e_dialinginfo.number); + /* call to extenal interfaces */ + p = e_dialinginfo.number; + do + { + number[0] = '\0'; + while(*p!=',' && *p!='\0') + SCCAT(number, *p++); + if (*p == ',') + p++; + /* found number */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) calling to number '%s' interface '%s'\n", ea_endpoint->ep_serial, number, e_dialinginfo.interfaces[0]?e_dialinginfo.interfaces:"any interface"); + /* hunt for mISDNport and create Port */ + mISDNport = mISDNport_first; + port = NULL; + while(mISDNport) + { + /* check for external or given interface */ + if ((!e_dialinginfo.interfaces[0]&&mISDNport->iftype==IF_EXTERN) || !strcmp(mISDNport->interface_name, e_dialinginfo.interfaces)) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) interface '%s' found\n", ea_endpoint->ep_serial, mISDNport->interface_name); + cause = CAUSE_NOCHANNEL; /* when failing: out of channels */ + /* if PTP, skip all down links */ + if (mISDNport->ptp && !mISDNport->l2link) + { + printlog("%3d endpoint INTERFACE Layer 2 of interface '%s' is down.\n", ea_endpoint->ep_serial, mISDNport->interface_name); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) skipping because it is PTP with L2 down\n", ea_endpoint->ep_serial); + mISDNport = mISDNport->next; + continue; + } + /* if no channel is available */ + if (mISDNport->multilink || !mISDNport->ntmode || mISDNport->ptp) + { + use = 0; + i = 0; + ii = mISDNport->b_num; + while(i < ii) + { + if (mISDNport->b_state[i]) + use++; + i++; + } + if (use >= mISDNport->b_num) + { + printlog("%3d endpoint INTERFACE Interface '%s' has no free channel.\n", ea_endpoint->ep_serial, mISDNport->interface_name); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) skipping because it is not single link port_list NT-modem OR no channel available.\n", ea_endpoint->ep_serial); + mISDNport = mISDNport->next; + continue; + } + } + /* found interface */ + printlog("%3d endpoint INTERFACE Interface '%s' found for external call.\n", ea_endpoint->ep_serial, mISDNport->interface_name); + break; + } + mISDNport = mISDNport->next; + } + if (!mISDNport) + { + printlog("%3d endpoint INTERFACE External interface not found or busy.\n", ea_endpoint->ep_serial); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) given interface: '%s' too busy to accept calls.\n", ea_endpoint->ep_serial, e_dialinginfo.interfaces[0]?e_dialinginfo.interfaces:"any interface"); + goto check_anycall_extern; + } + /* creating EXTERNAL port*/ + SPRINT(portname, "%s-%d-out", mISDNport->interface_name, mISDNport->portnum); + port = new Pdss1((mISDNport->ntmode)?PORT_TYPE_DSS1_NT_OUT:PORT_TYPE_DSS1_TE_OUT, mISDNport, portname, &port_settings); + if (!port) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) no external port available\n", ea_endpoint->ep_serial); + goto check_anycall_extern; + } + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) created port %s\n", ea_endpoint->ep_serial, port->p_name); + memset(&dialinginfo, 0, sizeof(dialinginfo)); + SCPY(dialinginfo.number, number); + dialinginfo.itype = INFO_ITYPE_EXTERN; + dialinginfo.ntype = e_dialinginfo.ntype; + portlist = ea_endpoint->portlist_new(port->p_serial, port->p_type); + if (!portlist) + { + PERROR("EPOINT(%d) cannot allocate port_list relation\n", ea_endpoint->ep_serial); + delete port; + goto check_anycall_extern; + } +// dss1 = (class Pdss1 *)port; +//printf("EXTERNAL caller=%s,id=%s,dial=%s\n", param.setup.networkid, param.setup.callerinfo.id, param.setup.dialinginfo.number); + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_SETUP); + memcpy(&message->param.setup.dialinginfo, &dialinginfo, sizeof(struct dialing_info)); + SCPY(message->param.setup.dialinginfo.number, number); + memcpy(&message->param.setup.redirinfo, &e_redirinfo, sizeof(struct redir_info)); + memcpy(&message->param.setup.callerinfo, &e_callerinfo, sizeof(struct caller_info)); + memcpy(&message->param.setup.capainfo, &e_capainfo, sizeof(struct capa_info)); +//terminal SCPY(message->param.setup.from_terminal, e_terminal); +//terminal if (e_dialinginfo.number) +//terminal SCPY(message->param.setup.to_terminal, e_dialinginfo.number); + /* handle restricted caller ids */ + apply_callerid_restriction(e_ext.anon_ignore, port->p_type, message->param.setup.callerinfo.id, &message->param.setup.callerinfo.ntype, &message->param.setup.callerinfo.present, &message->param.setup.callerinfo.screen, message->param.setup.callerinfo.voip, message->param.setup.callerinfo.intern, message->param.setup.callerinfo.name); + apply_callerid_restriction(e_ext.anon_ignore, port->p_type, message->param.setup.redirinfo.id, &message->param.setup.redirinfo.ntype, &message->param.setup.redirinfo.present, NULL, message->param.setup.redirinfo.voip, message->param.setup.redirinfo.intern, 0); + /* display callerid if desired for extension */ + SCPY(message->param.setup.callerinfo.display, apply_callerid_display(message->param.setup.callerinfo.id, message->param.setup.callerinfo.itype, message->param.setup.callerinfo.ntype, message->param.setup.callerinfo.present, message->param.setup.callerinfo.screen, message->param.setup.callerinfo.voip, message->param.setup.callerinfo.intern, message->param.setup.callerinfo.name)); + message_put(message); + logmessage(message); + anycall = 1; + } while(*p); + + check_anycall_extern: + /* now we have all ports created */ + if (!anycall) + { + printlog("%3d endpoint INTERFACE No free port found for making any call.\n", ea_endpoint->ep_serial); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) no port found which is idle for at least one number\n", ea_endpoint->ep_serial); + if (!ea_endpoint->ep_call_id) + break; + release(RELEASE_ALL, LOCATION_PRIVATE_LOCAL, CAUSE_NOCHANNEL, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL); /* RELEASE_TYPE, call, port */ + return; /* must exit here */ + } + break; + } + +} + + +/* handler for endpoint + */ + +extern int quit; +int EndpointAppPBX::handler(void) +{ + if (e_crypt_state!=CM_ST_NULL) + { + cryptman_handler(); + } + + /* process answering machine (play) handling */ + if (e_action) + { + if (e_action->index == ACTION_VBOX_PLAY) + vbox_handler(); + + /* process action timeout */ + if (e_action_timeout) + if (now_d >= e_action_timeout) + { + if (e_state!=EPOINT_STATE_CONNECT) + { + e_redial = 0; + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) current action timed out.\n", ea_endpoint->ep_serial); + e_multipoint_cause = CAUSE_NOUSER; + e_multipoint_location = LOCATION_PRIVATE_LOCAL; + new_state(EPOINT_STATE_IN_OVERLAP); + e_call_pattern = 0; + process_dialing(); + return(1); /* we must exit, because our endpoint might be gone */ + } else + e_action_timeout = 0; + } + } else { + /* process action timeout */ + if (e_match_timeout) + if (now_d >= e_match_timeout) + { + e_redial = 0; + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) we got a match timeout.\n", ea_endpoint->ep_serial); + process_dialing(); + return(1); /* we must exit, because our endpoint might be gone */ + } + } + + + /* process redialing (epoint redials to port) */ + if (e_redial) + { + if (now_d >= e_redial) + { + e_redial = 0; + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) starting redial.\n", ea_endpoint->ep_serial); + + new_state(EPOINT_STATE_OUT_SETUP); + /* call special setup routine */ + out_setup(); + + return(1); + } + } + + /* process powerdialing (epoint redials to epoint) */ + if (e_powerdialing > 0) + { + if (now_d >= e_powerdialing) + { + e_powerdialing = -1; /* leave power dialing on */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) starting redial of powerdial.\n", ea_endpoint->ep_serial); + + /* redial */ + e_ruleset = ruleset_main; + if (e_ruleset) + e_rule = e_ruleset->rule_first; + e_action = NULL; + new_state(EPOINT_STATE_IN_OVERLAP); + process_dialing(); + return(1); + } + } + + /* process call forward no response */ + if (e_cfnr_release) + { + struct port_list *portlist; + struct message *message; + + if (now >= e_cfnr_release) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) call-forward-no-response time has expired, hanging up.\n", ea_endpoint->ep_serial); + e_cfnr_release = 0; + + /* release all ports */ + while((portlist = ea_endpoint->ep_portlist)) + { + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_RELEASE); + message->param.disconnectinfo.cause = CAUSE_NORMAL; /* normal clearing */ + message->param.disconnectinfo.location = LOCATION_PRIVATE_LOCAL; + message_put(message); + logmessage(message); + ea_endpoint->free_portlist(portlist); + } + /* put on hold */ + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, MESSAGE_CHANNEL); + message->param.channel = CHANNEL_STATE_HOLD; + message_put(message); + /* indicate no patterns */ + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, MESSAGE_NOPATTERN); + message_put(message); + /* set setup state, since we have no response from the new call */ + new_state(EPOINT_STATE_OUT_SETUP); + } + } else + if (e_cfnr_call) + { + if (now >= e_cfnr_call) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) call-forward-busy time has expired, calling the forwarded number: %s.\n", ea_endpoint->ep_serial, e_ext.cfnr); + out_setup(); + e_cfnr_call = 0; + } + } + + /* handle connection to user */ + if (e_state == EPOINT_STATE_IDLE) + { + /* epoint is idle, check callback */ + if (e_callback) + if (now_d >= e_callback) + { + e_callback = 0; /* done with callback */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) starting callback.\n", ea_endpoint->ep_serial); + new_state(EPOINT_STATE_OUT_SETUP); + out_setup(); + return(1); + } + } + + /* check for password timeout */ + if (e_action) + if (e_action->index==ACTION_PASSWORD || e_action->index==ACTION_PASSWORD_WRITE) + { + struct port_list *portlist; + + if (now >= e_password_timeout) + { + e_ruleset = ruleset_main; + if (e_ruleset) + e_rule = e_ruleset->rule_first; + e_action = NULL; + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) password timeout %s\n", ea_endpoint->ep_serial, e_extdialing); + printlog("%3d endpoint PASSWORD timeout\n", ea_endpoint->ep_serial); + e_connectedmode = 0; + e_dtmf = 0; + new_state(EPOINT_STATE_OUT_DISCONNECT); + portlist = ea_endpoint->ep_portlist; + if (portlist) + { + message_disconnect_port(portlist, CAUSE_NORMAL, LOCATION_PRIVATE_LOCAL, ""); + set_tone(portlist, "cause_10"); + } + return(1); + } + } + + return(0); +} + + +/* doing a hookflash */ +void EndpointAppPBX::hookflash(void) +{ + class Port *port; + + /* be sure that we are active */ + notify_active(); + e_tx_state = NOTIFY_STATE_ACTIVE; + + printlog("%3d endpoint HOOKFLASH\n", ea_endpoint->ep_serial); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) dtmf hookflash detected.\n", ea_endpoint->ep_serial); + if (ea_endpoint->ep_use > 1) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) cannot hooflash while child process is running.\n", ea_endpoint->ep_serial); + return; + } + /* dialtone after pressing the hash key */ + process_hangup(e_call_cause, e_call_location); + e_multipoint_cause = CAUSE_NOUSER; + e_multipoint_location = LOCATION_PRIVATE_LOCAL; + port = find_port_id(ea_endpoint->ep_portlist->port_id); + if (port) + { + port->set_echotest(0); + } + if (ea_endpoint->ep_call_id) + { + release(RELEASE_CALL, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL); /* RELEASE_TYPE, call, port */ + } + e_ruleset = ruleset_main; + if (e_ruleset) + e_rule = e_ruleset->rule_first; + e_action = NULL; + new_state(EPOINT_STATE_IN_OVERLAP); + e_connectedmode = 1; + SCPY(e_dialinginfo.number, e_ext.prefix); + e_extdialing = e_dialinginfo.number; + e_call_pattern = 0; + if (e_dialinginfo.number[0]) + { + set_tone(ea_endpoint->ep_portlist, "dialing"); + process_dialing(); + } else + { + set_tone(ea_endpoint->ep_portlist, "dialpbx"); + } + e_dtmf_time = now; + e_dtmf_last = '\0'; +} + + +/* messages from port + */ +/* port MESSAGE_SETUP */ +void EndpointAppPBX::port_setup(struct port_list *portlist, int message_type, union parameter *param) +{ + struct message *message; + char buffer[256]; + struct interface *interface; + char extension[32]; + char extension1[32]; + char *p; + int writeext; /* flags need to write extension after modification */ + class Port *port; + + portlist->port_type = param->setup.port_type; + memcpy(&e_callerinfo, ¶m->setup.callerinfo, sizeof(e_callerinfo)); + memcpy(&e_dialinginfo, ¶m->setup.dialinginfo, sizeof(e_dialinginfo)); + memcpy(&e_redirinfo, ¶m->setup.redirinfo, sizeof(e_redirinfo)); + memcpy(&e_capainfo, ¶m->setup.capainfo, sizeof(e_capainfo)); + e_dtmf = param->setup.dtmf; + + /* check where the call is from */ + if ((param->setup.port_type&PORT_CLASS_mISDN_MASK) == PORT_CLASS_mISDN_DSS1) + { + interface = interface_first; + while(interface) + { + if (param->setup.isdn_port>=0 && param->setup.isdn_port<(int)sizeof(interface->ports)) + { + if (interface->ports[param->setup.isdn_port]) + break; + } + interface = interface->next; + } + if (interface) + { + /* interface is known */ + if (interface->iftype==IF_INTERN) + { + /* interface is internal */ + if (interface->extensions[0]) + { + /* extensions are assigned to interface */ + p = interface->extensions; + extension1[0] = '\0'; + while(*p) + { + extension[0] = '\0'; + while(*p!=',' && *p!='\0') + SCCAT(extension, *p++); + if (*p == ',') + p++; + if (!extension1[0]) + SCPY(extension1, extension); + if (!strcmp(extension, e_callerinfo.id)) + break; + extension[0] = '\0'; /* NOTE: empty if we did not find */ + } + if (extension[0]) + { + /* id was found at extension's list */ + e_callerinfo.itype = INFO_ITYPE_INTERN; + SCPY(e_callerinfo.intern, extension); + } else + if (extension1[0]) + { + /* if was provided by default */ + e_callerinfo.itype = INFO_ITYPE_INTERN; + printlog("%3d endpoint INTERFACE Caller ID '%s' not in list for interface '%s', using first ID '%s'.\n", ea_endpoint->ep_serial, e_callerinfo.id, interface->name, extension1); + SCPY(e_callerinfo.intern, extension1); + } + } else + { + /* no extension given, so we use the caller id */ + e_callerinfo.itype = INFO_ITYPE_INTERN; + SCPY(e_callerinfo.intern, e_callerinfo.id); + } + } else + { + /* interface is external */ + e_callerinfo.intern[0] = '\0'; + } + } else + { + /* interface is unknown */ + message_disconnect_port(portlist, CAUSE_REJECTED, LOCATION_PRIVATE_LOCAL, ""); + new_state(EPOINT_STATE_OUT_DISCONNECT); + set_tone(portlist, "cause_80"); /* pbx cause: extension not authorized */ + e_terminal[0] = '\0'; /* no terminal */ + return; + } + } + + if (e_callerinfo.itype == INFO_ITYPE_INTERN) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) incoming call is internal\n", ea_endpoint->ep_serial); + /* port makes call from extension */ + SCPY(e_callerinfo.id, e_callerinfo.intern); + SCPY(e_terminal, e_callerinfo.intern); + SCPY(e_terminal_interface, e_callerinfo.interface); + } else + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) incoming call is external or voip\n", ea_endpoint->ep_serial); + } + printlog("%3d incoming %s='%s'%s%s%s%s dialing='%s'\n", + ea_endpoint->ep_serial, + (e_callerinfo.intern[0])?"SETUP from intern":"SETUP from extern", + (e_callerinfo.intern[0])?e_callerinfo.intern:e_callerinfo.id, + (e_callerinfo.present==INFO_PRESENT_RESTRICTED)?" anonymous":"", + (e_redirinfo.id[0])?"redirected='":"", + e_redirinfo.id, + (e_redirinfo.id[0])?"'":"", + e_dialinginfo.number + ); + + if (e_callerinfo.itype == INFO_ITYPE_INTERN) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) call from extension '%s'\n", ea_endpoint->ep_serial, e_terminal); + + /* get extension's info about caller */ + if (!read_extension(&e_ext, e_terminal)) + { + /* extension doesn't exist */ + printlog("%3d endpoint EXTENSION '%s' doesn't exist, please check or create.\n", ea_endpoint->ep_serial, e_callerinfo.id); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) rejecting call from not existing extension: '%s'\n", ea_endpoint->ep_serial, e_terminal); + message_disconnect_port(portlist, CAUSE_REJECTED, LOCATION_PRIVATE_LOCAL, ""); + new_state(EPOINT_STATE_OUT_DISCONNECT); + set_tone(portlist, "cause_80"); /* pbx cause: extension not authorized */ + e_terminal[0] = '\0'; /* no terminal */ + return; + } + writeext = 0; + + /* put prefix (next) in front of e_dialinginfo.number */ + if (e_ext.next[0]) + { + SPRINT(buffer, "%s%s", e_ext.next, e_dialinginfo.number); + SCPY(e_dialinginfo.number, buffer); + e_ext.next[0] = '\0'; + writeext = 1; + } else if (e_ext.prefix[0]) + { + SPRINT(buffer, "%s%s", e_ext.prefix, e_dialinginfo.number); + SCPY(e_dialinginfo.number, buffer); + } + + /* screen caller id */ + e_callerinfo.screen = INFO_SCREEN_NETWORK; + if (e_ext.name[0]) + SCPY(e_callerinfo.name, e_ext.name); + /* use caller id (or if exist: id_next_call) for this call */ + if (e_ext.id_next_call_present >= 0) + { + SCPY(e_callerinfo.id, e_ext.id_next_call); + /* if we restrict the pesentation */ + if (e_ext.id_next_call_present==INFO_PRESENT_ALLOWED && e_callerinfo.present==INFO_PRESENT_RESTRICTED) + e_callerinfo.present = INFO_PRESENT_RESTRICTED; + else e_callerinfo.present = e_ext.id_next_call_present; + e_callerinfo.ntype = e_ext.id_next_call_type; + e_ext.id_next_call_present = -1; + writeext = 1; + } else + { + SCPY(e_callerinfo.id, e_ext.callerid); + /* if we restrict the pesentation */ + if (e_ext.callerid_present==INFO_PRESENT_ALLOWED && e_callerinfo.present==INFO_PRESENT_RESTRICTED) + e_callerinfo.present = INFO_PRESENT_RESTRICTED; + else e_callerinfo.present = e_ext.callerid_present; + e_callerinfo.ntype = e_ext.callerid_type; + } + + /* extension is written */ + if (writeext) + write_extension(&e_ext, e_terminal); + + /* set volume of rx and tx */ + if (param->setup.callerinfo.itype == INFO_ITYPE_INTERN) + if (e_ext.txvol!=256 || e_ext.rxvol!=256) + { + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_mISDNSIGNAL); + message->param.mISDNsignal.message = mISDNSIGNAL_VOLUME; + message->param.mISDNsignal.rxvol = e_ext.txvol; + message->param.mISDNsignal.txvol = e_ext.rxvol; + message_put(message); + } + + /* start recording if enabled */ + if (e_ext.record!=CODEC_OFF && (e_capainfo.bearer_capa==INFO_BC_SPEECH || e_capainfo.bearer_capa==INFO_BC_AUDIO)) + { + /* check if we are a terminal */ + if (e_terminal[0] == '\0') + PERROR("Port(%d) cannot record because we are not a terminal\n", ea_endpoint->ep_serial); + else + { + port = find_port_id(portlist->port_id); + if (port) + port->open_record(e_ext.record, 0, 0, e_terminal, e_ext.anon_ignore, "", 0); + } + } + } else + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) call from external port\n", ea_endpoint->ep_serial); + /* no terminal identification */ + e_terminal[0] = '\0'; + e_terminal_interface[0] = '\0'; + memset(&e_ext, 0, sizeof(e_ext)); + e_ext.rights = 4; /* right to dial internat */ + } + + /* incoming call */ + e_ruleset = ruleset_main; + if (e_ruleset) + e_rule = e_ruleset->rule_first; + e_action = NULL; + e_extdialing = e_dialinginfo.number; + new_state(EPOINT_STATE_IN_SETUP); + if (e_dialinginfo.number[0]) + { + set_tone(portlist, "dialing"); + } else + { + if (e_terminal[0]) + set_tone(portlist, "dialpbx"); + else + set_tone(portlist, "dialtone"); + } + process_dialing(); + if (e_state == EPOINT_STATE_IN_SETUP) + { + /* request MORE info, if not already at higher state */ + new_state(EPOINT_STATE_IN_OVERLAP); + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_OVERLAP); + message_put(message); + logmessage(message); + } +} + +/* port MESSAGE_INFORMATION */ +void EndpointAppPBX::port_information(struct port_list *portlist, int message_type, union parameter *param) +{ + printlog("%3d incoming INFORMATION information='%s'\n", + ea_endpoint->ep_serial, + param->information.number + ); + e_overlap = 1; + + /* turn off dtmf detection, in case dtmf is sent with keypad information */ + if (e_dtmf) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) received dialing information, so dtmf is now disabled, to prevent double detection by keypad+dtmf.\n", ea_endpoint->ep_serial, param->information.number, e_terminal, e_callerinfo.id); + e_dtmf = 0; + } + + /* if vbox_play is done, the information are just used as they come */ + if (e_action) + if (e_action->index == ACTION_VBOX_PLAY) + { + /* concat dialing string */ + SCAT(e_dialinginfo.number, param->information.number); + process_dialing(); + return; + } + + /* keypad when disconnect but in connected mode */ + if (e_state==EPOINT_STATE_OUT_DISCONNECT && e_connectedmode) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) keypad information received after disconnect: %s.\n", ea_endpoint->ep_serial, param->information.number); + /* processing keypad function */ + if (param->information.number[0] == '0') + { + hookflash(); + } + return; + } + + /* keypad when connected */ + if (e_state == EPOINT_STATE_CONNECT && e_ext.keypad) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) keypad information received during connect: %s.\n", ea_endpoint->ep_serial, param->information.number); + /* processing keypad function */ + if (param->information.number[0] == '0') + { + hookflash(); + } + if (param->information.number[0]) + keypad_function(param->information.number[0]); + return; + } + if (e_state != EPOINT_STATE_IN_OVERLAP) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) ignored because we are not in overlap, or connect state.\n", ea_endpoint->ep_serial); + return; + } + if (!param->information.number[0]) + return; + if (e_dialinginfo.number[0]=='\0' && !e_action) + { + set_tone(portlist, "dialing"); + } + if (e_action) + if (e_action->index==ACTION_OUTDIAL + || e_action->index==ACTION_EXTERNAL) + { + if (!e_extdialing) + set_tone(portlist, "dialing"); + else if (!e_extdialing[0]) + set_tone(portlist, "dialing"); + } + /* concat dialing string */ + SCAT(e_dialinginfo.number, param->information.number); + process_dialing(); +} + +/* port MESSAGE_DTMF */ +void EndpointAppPBX::port_dtmf(struct port_list *portlist, int message_type, union parameter *param) +{ + printlog("%3d incoming DTMF digit='%c'\n", + ea_endpoint->ep_serial, + param->dtmf + ); + /* only if dtmf detection is enabled */ + if (!e_dtmf) + { + PDEBUG(DEBUG_EPOINT, "dtmf detection is disabled\n"); + return; + } + +#if 0 +NOTE: vbox is now handled due to overlap state + /* if vbox_play is done, the dtmf digits are just used as they come */ + if (e_action) + if (e_action->index == ACTION_VBOX_PLAY) + { + /* concat dialing string */ + if (strlen(e_dialinginfo.number)+1 < sizeof(e_dialinginfo.number)) + { + e_dialinginfo.number[strlen(e_dialinginfo.number)+1] = '\0'; + e_dialinginfo.number[strlen(e_dialinginfo.number)] = param->dtmf; + process_dialing(); + } + /* continue to process *X# sequences */ + } +#endif + + /* check for *X# sequence */ + if (e_state == EPOINT_STATE_CONNECT) + { + if (e_dtmf_time+3 < now) + { + /* the last digit was too far in the past to be a sequence */ + if (param->dtmf == '*') + /* only start is allowed in the sequence */ + e_dtmf_last = '*'; + else + e_dtmf_last = '\0'; + } else + { + /* we have a sequence of digits, see what we got */ + if (param->dtmf == '*') + e_dtmf_last = '*'; + else if (param->dtmf>='0' && param->dtmf<='9') + { + /* we need to have a star before we receive the digit of the sequence */ + if (e_dtmf_last == '*') + e_dtmf_last = param->dtmf; + } else if (param->dtmf == '#') + { + /* the hash key */ + if (e_dtmf_last>='0' && e_dtmf_last<='9') + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) dtmf sequence *%c# detected.\n", ea_endpoint->ep_serial, e_dtmf_last); + if (e_dtmf_last == '0') + { + hookflash(); + return; + } + /* processing keypad function */ + if (param->dtmf) + keypad_function(e_dtmf_last); + e_dtmf_last = '\0'; + } + } + } + + /* set last time of dtmf */ + e_dtmf_time = now; + return; + } + + /* check for ## hookflash during dialing */ + if (e_action) + if (e_action->index==ACTION_PASSWORD + || e_action->index==ACTION_PASSWORD_WRITE) + goto password; + if (param->dtmf=='#') /* current digit is '#' */ + { + if (e_state==EPOINT_STATE_IN_DISCONNECT + || (e_state!=EPOINT_STATE_CONNECT && e_dtmf_time+3>=now && e_dtmf_last=='#')) /* when disconnected, just #. when dialing, ##. */ + { + hookflash(); + return; + } else + { + e_dtmf_time = now; + e_dtmf_last = '#'; + } + } else + { + password: + e_dtmf_time = now; + e_dtmf_last = '\0'; + } + + + /* dialing using dtmf digit */ + if (e_state==EPOINT_STATE_IN_OVERLAP)// && e_state==e_connectedmode) + { + if (e_dialinginfo.number[0]=='\0' && !e_action) + { + set_tone(portlist, "dialing"); + } + /* concat dialing string */ + if (strlen(e_dialinginfo.number)+1 < sizeof(e_dialinginfo.number)) + { + e_dialinginfo.number[strlen(e_dialinginfo.number)+1] = '\0'; + e_dialinginfo.number[strlen(e_dialinginfo.number)] = param->dtmf; + process_dialing(); + } + } +} + +/* port MESSAGE_CRYPT */ +void EndpointAppPBX::port_crypt(struct port_list *portlist, int message_type, union parameter *param) +{ + /* send crypt response to cryptman */ + if (param->crypt.type == CR_MESSAGE_IND) + cryptman_msg2man(param->crypt.data, param->crypt.len); + else + cryptman_message(param->crypt.type, param->crypt.data, param->crypt.len); +} + +/* port MESSAGE_OVERLAP */ +void EndpointAppPBX::port_overlap(struct port_list *portlist, int message_type, union parameter *param) +{ + struct message *message; + + /* signal to call tool */ + admin_call_response(e_adminid, ADMIN_CALL_SETUP_ACK, "", 0, 0, 0); + + printlog("%3d incoming SETUP ACKNOWLEDGE\n", + ea_endpoint->ep_serial + ); + if (e_dialing_queue[0] && portlist) + { + /* send what we have not dialed yet, because we had no setup complete */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) dialing pending digits: '%s'\n", ea_endpoint->ep_serial, e_dialing_queue); + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_portlist->port_id, EPOINT_TO_PORT, MESSAGE_INFORMATION); + SCPY(message->param.information.number, e_dialing_queue); + message->param.information.ntype = INFO_NTYPE_UNKNOWN; + message_put(message); + logmessage(message); + e_dialing_queue[0] = '\0'; + } + /* check if pattern is available */ + if (!ea_endpoint->ep_portlist->next && portlist->port_type==PORT_TYPE_DSS1_TE_OUT) /* one port_list relation and outgoing external*/ + { + /* indicate patterns */ + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, MESSAGE_PATTERN); + message_put(message); + + /* connect audio, if not already */ + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, MESSAGE_CHANNEL); + message->param.channel = CHANNEL_STATE_CONNECT; + message_put(message); + } else + { + /* indicate no patterns */ + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, MESSAGE_PATTERN); + message_put(message); + + /* disconnect audio, if not already */ + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, MESSAGE_CHANNEL); + message->param.channel = CHANNEL_STATE_HOLD; + message_put(message); + } + new_state(EPOINT_STATE_OUT_OVERLAP); + /* if we are in a call */ + if (ea_endpoint->ep_call_id) + { + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, message_type); + memcpy(&message->param, param, sizeof(union parameter)); + message_put(message); + } +} + +/* port MESSAGE_PROCEEDING */ +void EndpointAppPBX::port_proceeding(struct port_list *portlist, int message_type, union parameter *param) +{ + struct message *message; + + /* signal to call tool */ + admin_call_response(e_adminid, ADMIN_CALL_PROCEEDING, "", 0, 0, 0); + + printlog("%3d incoming PROCEEDING\n", + ea_endpoint->ep_serial + ); + e_state = EPOINT_STATE_OUT_PROCEEDING; + /* check if pattern is availatle */ + if (!ea_endpoint->ep_portlist->next && (portlist->port_type==PORT_TYPE_DSS1_TE_OUT || portlist->port_type==PORT_TYPE_VBOX_OUT)) /* one port_list relation and outgoing external*/ + { + /* indicate patterns */ + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, MESSAGE_PATTERN); + message_put(message); + + /* connect audio, if not already */ + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, MESSAGE_CHANNEL); + message->param.channel = CHANNEL_STATE_CONNECT; + message_put(message); + } else + { + /* indicate no patterns */ + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, MESSAGE_PATTERN); + message_put(message); + + /* disconnect audio, if not already */ + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, MESSAGE_CHANNEL); + message->param.channel = CHANNEL_STATE_HOLD; + message_put(message); + } + /* if we are in a call */ + if (ea_endpoint->ep_call_id) + { + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, message_type); + memcpy(&message->param, param, sizeof(union parameter)); + message_put(message); + } +} + +/* port MESSAGE_ALERTING */ +void EndpointAppPBX::port_alerting(struct port_list *portlist, int message_type, union parameter *param) +{ + struct message *message; + + /* signal to call tool */ + admin_call_response(e_adminid, ADMIN_CALL_ALERTING, "", 0, 0, 0); + + printlog("%3d incoming ALERTING\n", + ea_endpoint->ep_serial + ); + new_state(EPOINT_STATE_OUT_ALERTING); + /* check if pattern is available */ + if (!ea_endpoint->ep_portlist->next && (portlist->port_type==PORT_TYPE_DSS1_TE_OUT || portlist->port_type==PORT_TYPE_VBOX_OUT)) /* one port_list relation and outgoing external*/ + { + /* indicate patterns */ + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, MESSAGE_PATTERN); + message_put(message); + + /* connect audio, if not already */ + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, MESSAGE_CHANNEL); + message->param.channel = CHANNEL_STATE_CONNECT; + message_put(message); + } else + { + /* indicate no patterns */ + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, MESSAGE_NOPATTERN); + message_put(message); + + /* disconnect audio, if not already */ + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, MESSAGE_CHANNEL); + message->param.channel = CHANNEL_STATE_HOLD; + message_put(message); + } + /* if we are in a call */ + if (ea_endpoint->ep_call_id) + { + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, message_type); + memcpy(&message->param, param, sizeof(union parameter)); + message_put(message); + } +} + +/* port MESSAGE_CONNECT */ +void EndpointAppPBX::port_connect(struct port_list *portlist, int message_type, union parameter *param) +{ + struct message *message; + char buffer[256]; + unsigned long port_id = portlist->port_id; + struct port_list *tportlist; + class Port *port; + + /* signal to call tool */ + admin_call_response(e_adminid, ADMIN_CALL_CONNECT, numberrize_callerinfo(param->connectinfo.id,param->connectinfo.ntype), 0, 0, 0); + + memcpy(&e_connectinfo, ¶m->connectinfo, sizeof(e_connectinfo)); + printlog("%3d incoming CONNECT id='%s'%s\n", + ea_endpoint->ep_serial, + (e_connectinfo.intern[0])?e_connectinfo.intern:e_connectinfo.id, + (e_connectinfo.present==INFO_PRESENT_RESTRICTED)?" anonymous":"" + ); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) removing all other ports (start)\n", ea_endpoint->ep_serial); + while(ea_endpoint->ep_portlist->next) /* as long as we have at least two ports */ + { + tportlist = ea_endpoint->ep_portlist; + if (tportlist->port_id == port_id) /* if the first portlist is the calling one, the second must be a different one */ + tportlist = tportlist->next; + if (tportlist->port_id == port_id) + { + PERROR("EPOINT(%d) software error: this should not happen since the portlist list must not have two links to the same port - exitting.\n"); + exit(-1); + } + message = message_create(ea_endpoint->ep_serial, tportlist->port_id, EPOINT_TO_PORT, MESSAGE_RELEASE); + message->param.disconnectinfo.cause = 26; /* non selected user clearing */ + message->param.disconnectinfo.location = LOCATION_PRIVATE_LOCAL; + message_put(message); + logmessage(message); + ea_endpoint->free_portlist(tportlist); + } + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) removing all other ports (end)\n", ea_endpoint->ep_serial); + + e_start = now; + + /* screen connected name */ + if (e_ext.name[0]) + SCPY(e_connectinfo.name, e_ext.name); + + /* add internal id to colp */ + SCPY(e_connectinfo.intern, e_terminal); + + /* we store the connected port number */ + SCPY(e_terminal_interface, e_connectinfo.interfaces); + + /* for internal and am calls, we get the extension's id */ + /* also for hidden calls to extension */ + if (portlist->port_type==PORT_TYPE_DSS1_NT_OUT || portlist->port_type==PORT_TYPE_VBOX_OUT || e_ext.colp==COLP_HIDE) + { + SCPY(e_connectinfo.id, e_ext.callerid); + SCPY(e_connectinfo.intern, e_terminal); + e_connectinfo.itype = INFO_ITYPE_INTERN; + e_connectinfo.ntype = e_ext.callerid_type; + e_connectinfo.present = e_ext.callerid_present; + } + if (portlist->port_type==PORT_TYPE_VBOX_OUT) + { + e_connectinfo.itype = INFO_ITYPE_VBOX; + e_connectinfo.ntype = INFO_NTYPE_UNKNOWN; + } + + new_state(EPOINT_STATE_CONNECT); + + /* set volume of rx and tx */ + if (e_ext.txvol!=256 || e_ext.rxvol!=256) + { + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_mISDNSIGNAL); + message->param.mISDNsignal.message = mISDNSIGNAL_VOLUME; + message->param.mISDNsignal.rxvol = e_ext.txvol; + message->param.mISDNsignal.txvol = e_ext.rxvol; + message_put(message); + } + + e_cfnr_call = e_cfnr_release = 0; + if (e_terminal[0]) + e_dtmf = 1; /* allow dtmf */ +// if (call_countrelations(ea_endpoint->ep_call_id) == 2) + { + /* modify colp */ + /* other calls with no caller id (or not available for the extension) and force colp */ + if ((e_connectinfo.id[0]=='\0' || (e_connectinfo.present==INFO_PRESENT_RESTRICTED && !e_ext.anon_ignore))&& e_ext.colp==COLP_FORCE) + { + e_connectinfo.present = INFO_PRESENT_NOTAVAIL; + if (portlist->port_type==PORT_TYPE_DSS1_TE_OUT || portlist->port_type==PORT_TYPE_DSS1_NT_OUT) /* external extension answered */ + { + port = find_port_id(portlist->port_id); + if (port) + { + SCPY(e_connectinfo.id, nationalize_callerinfo(port->p_dialinginfo.number, &e_connectinfo.ntype)); + e_connectinfo.present = INFO_PRESENT_ALLOWED; + } + } + if (portlist->port_type==PORT_TYPE_H323_OUT) /* h323 extension answered */ + { + SCPY(e_connectinfo.voip, port->p_dialinginfo.number); + e_connectinfo.present = INFO_PRESENT_ALLOWED; +// e_connectinfo.ntype = INFO_NTYPE_UNKNOWN; + } + if (portlist->port_type==PORT_TYPE_SIP_OUT) /* sip extension answered */ + { + SCPY(e_connectinfo.voip, port->p_dialinginfo.number); + e_connectinfo.present = INFO_PRESENT_ALLOWED; +// e_connectinfo.ntype = INFO_NTYPE_UNKNOWN; + } + } + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, message_type); + memcpy(&message->param.connectinfo, &e_connectinfo, sizeof(struct connect_info)); + message_put(message); + } + if (ea_endpoint->ep_call_id) + { + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, MESSAGE_CHANNEL); + message->param.channel = CHANNEL_STATE_CONNECT; + message_put(message); + } else if (!e_adminid) + { + /* callback */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) we have a callback, so we create a call with cbcaller: \"%s\".\n", ea_endpoint->ep_serial, e_cbcaller); + SCPY(e_terminal, e_cbcaller); + new_state(EPOINT_STATE_IN_OVERLAP); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) callback from extension '%s'\n", ea_endpoint->ep_serial, e_terminal); + + /* get extension's info about terminal */ + if (!read_extension(&e_ext, e_terminal)) + { + /* extension doesn't exist */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) rejecting callback from not existing extension: '%s'\n", ea_endpoint->ep_serial, e_terminal); + message_disconnect_port(portlist, CAUSE_REJECTED, LOCATION_PRIVATE_LOCAL, ""); + new_state(EPOINT_STATE_OUT_DISCONNECT); + set_tone(portlist, "cause_80"); /* pbx cause: extension not authorized */ + return; + } + + /* put prefix in front of e_cbdialing */ + SPRINT(buffer, "%s%s", e_ext.prefix, e_cbdialing); + SCPY(e_dialinginfo.number, buffer); + e_dialinginfo.itype = INFO_ITYPE_EXTERN; + e_dialinginfo.ntype = INFO_NTYPE_UNKNOWN; + + /* use caller id (or if exist: id_next_call) for this call */ + e_callerinfo.screen = INFO_SCREEN_NETWORK; + SCPY(e_callerinfo.intern, e_terminal); + if (e_ext.id_next_call_present >= 0) + { + SCPY(e_callerinfo.id, e_ext.id_next_call); + e_callerinfo.present = e_ext.id_next_call_present; + e_callerinfo.ntype = e_ext.id_next_call_type; + e_ext.id_next_call_present = -1; + /* extension is written */ + write_extension(&e_ext, e_terminal); + } else + { + SCPY(e_callerinfo.id, e_ext.callerid); + e_callerinfo.present = e_ext.callerid_present; + e_callerinfo.ntype = e_ext.callerid_type; + } + + e_connectedmode = 1; /* dtmf-hangup & disconnect prevention */ + e_dtmf = 1; + + /* check if caller id is NOT authenticated */ + if (!parse_callbackauth(e_terminal, &e_callbackinfo)) + { + /* make call state to enter password */ + new_state(EPOINT_STATE_IN_OVERLAP); + e_action = &action_password_write; + e_match_timeout = 0; + e_match_to_action = NULL; + e_dialinginfo.number[0] = '\0'; + e_extdialing = strchr(e_dialinginfo.number, '\0'); + e_password_timeout = now+20; + process_dialing(); + } else + { + /* incoming call (callback) */ + e_ruleset = ruleset_main; + if (e_ruleset) + e_rule = e_ruleset->rule_first; + e_action = NULL; + e_extdialing = e_dialinginfo.number; + if (e_dialinginfo.number[0]) + { + set_tone(portlist, "dialing"); + process_dialing(); + } else + { + set_tone(portlist, "dialpbx"); + } + } + } else /* testcall */ + { + set_tone(portlist, "hold"); + } + + /* start recording if enabled, not when answering machine answers */ + if (param->connectinfo.itype!=INFO_ITYPE_VBOX && e_terminal[0] && e_ext.record!=CODEC_OFF && (e_capainfo.bearer_capa==INFO_BC_SPEECH || e_capainfo.bearer_capa==INFO_BC_AUDIO)) + { + /* check if we are a terminal */ + if (e_terminal[0] == '\0') + PERROR("Port(%d) cannot record because we are not a terminal\n", ea_endpoint->ep_serial); + else + { + port = find_port_id(portlist->port_id); + if (port) + port->open_record(e_ext.record, 0, 0, e_terminal, e_ext.anon_ignore, "", 0); + } + } +} + +/* port MESSAGE_DISCONNECT MESSAGE_RELEASE */ +void EndpointAppPBX::port_disconnect_release(struct port_list *portlist, int message_type, union parameter *param) +{ + struct message *message; + char buffer[256]; + unsigned long port_id = portlist->port_id; + int cause, + location; + + /* signal to call tool */ + admin_call_response(e_adminid, (message_type==MESSAGE_DISCONNECT)?ADMIN_CALL_DISCONNECT:ADMIN_CALL_RELEASE, "", param->disconnectinfo.cause, param->disconnectinfo.location, 0); + + printlog("%3d incoming %s cause='%d' (%s) location='%d' (%s)\n", + ea_endpoint->ep_serial, + (message_type==MESSAGE_DISCONNECT)?"DISCONNECT":"RELEASE", + param->disconnectinfo.cause, + (param->disconnectinfo.cause>0 && param->disconnectinfo.cause<128)?isdn_cause[param->disconnectinfo.cause].english:"-", + param->disconnectinfo.location, + (param->disconnectinfo.location>=0 && param->disconnectinfo.location<16)?isdn_location[param->disconnectinfo.location].english:"-" + ); + +//#warning does this work? only disconnect when incoming port hat not already disconnected yet? + if (e_state==EPOINT_STATE_IN_DISCONNECT && message_type!=MESSAGE_RELEASE)// || e_state==EPOINT_STATE_OUT_DISCONNECT || e_state==EPOINT_STATE_IDLE) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) ignored because we are already disconnected.\n", ea_endpoint->ep_serial); + return; + } + + /* collect cause */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) current multipoint cause %d location %d, received cause %d location %d.\n", ea_endpoint->ep_serial, e_multipoint_cause, e_multipoint_location, param->disconnectinfo.cause, param->disconnectinfo.location); + if (param->disconnectinfo.cause == CAUSE_REJECTED) /* call rejected */ + { + e_multipoint_cause = CAUSE_REJECTED; + e_multipoint_location = param->disconnectinfo.location; + } else + if (param->disconnectinfo.cause==CAUSE_NORMAL && e_multipoint_cause!=CAUSE_REJECTED) /* reject via hangup */ + { + e_multipoint_cause = CAUSE_NORMAL; + e_multipoint_location = param->disconnectinfo.location; + } else + if (param->disconnectinfo.cause==CAUSE_BUSY && e_multipoint_cause!=CAUSE_REJECTED && e_multipoint_cause!=CAUSE_NORMAL) /* busy */ + { + e_multipoint_cause = CAUSE_BUSY; + e_multipoint_location = param->disconnectinfo.location; + } else + if (param->disconnectinfo.cause==CAUSE_OUTOFORDER && e_multipoint_cause!=CAUSE_BUSY && e_multipoint_cause!=CAUSE_REJECTED && e_multipoint_cause!=CAUSE_NORMAL) /* no L1 */ + { + e_multipoint_cause = CAUSE_OUTOFORDER; + e_multipoint_location = param->disconnectinfo.location; + } else + if (param->disconnectinfo.cause!=CAUSE_NOUSER && e_multipoint_cause!=CAUSE_OUTOFORDER && e_multipoint_cause!=CAUSE_BUSY && e_multipoint_cause!=CAUSE_REJECTED && e_multipoint_cause!=CAUSE_NORMAL) /* anything but not 18 */ + { + e_multipoint_cause = param->disconnectinfo.cause; + e_multipoint_location = param->disconnectinfo.location; + } + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) new multipoint cause %d location %d.\n", ea_endpoint->ep_serial, e_multipoint_cause, e_multipoint_location); + + /* check if we have more than one portlist relation and we just ignore the disconnect */ + if (ea_endpoint->ep_portlist) if (ea_endpoint->ep_portlist->next) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) the disconnect was from a multipoint call. we just release that relation.\n", ea_endpoint->ep_serial); + portlist = ea_endpoint->ep_portlist; + while(portlist) + { + if (portlist->port_id == port_id) + break; + portlist = portlist->next; + } + if (!portlist) + { + PERROR("EPOINT(%d) software error: no portlist related to the calling port.\n", ea_endpoint->ep_serial); + exit(-1); + } + if (message_type != MESSAGE_RELEASE) + { + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_RELEASE); + message->param.disconnectinfo.cause = CAUSE_NORMAL; /* normal clearing */ + message->param.disconnectinfo.location = LOCATION_PRIVATE_LOCAL; + message_put(message); + logmessage(message); + } + ea_endpoint->free_portlist(portlist); + return; /* one relation removed */ + } + if (e_multipoint_cause) + { + cause = e_multipoint_cause; + location = e_multipoint_location; + } else + { + cause = param->disconnectinfo.cause; + location = param->disconnectinfo.location; + } + + e_cfnr_call = e_cfnr_release = 0; + + /* process hangup */ + process_hangup(e_call_cause, e_call_location); + e_multipoint_cause = 0; + e_multipoint_location = LOCATION_PRIVATE_LOCAL; + + /* tone to disconnected end */ + SPRINT(buffer, "cause_%02x", cause); + if (ea_endpoint->ep_portlist) + set_tone(ea_endpoint->ep_portlist, buffer); + + new_state(EPOINT_STATE_IN_DISCONNECT); + if (ea_endpoint->ep_call_id) + { + int haspatterns = 0; + /* check if pattern is available */ + if (ea_endpoint->ep_portlist) + if (!ea_endpoint->ep_portlist->next) + if ((ea_endpoint->ep_portlist->port_type==PORT_TYPE_DSS1_TE_OUT) || (ea_endpoint->ep_portlist->port_type==PORT_TYPE_DSS1_TE_IN)) +#warning wie ist das bei einem asterisk, gibts auch tones? + if (callpbx_countrelations(ea_endpoint->ep_call_id)==2 // we must count relations, in order not to disturb the conference ; NOTE: + && message_type != MESSAGE_RELEASE) // if we release, we are done + haspatterns = 1; + if (haspatterns) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) the port has patterns.\n", ea_endpoint->ep_serial); + /* indicate patterns */ + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, MESSAGE_PATTERN); + message_put(message); + /* connect audio, if not already */ + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, MESSAGE_CHANNEL); + message->param.channel = CHANNEL_STATE_CONNECT; + message_put(message); + /* send disconnect */ + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, message_type); + memcpy(&message->param, param, sizeof(union parameter)); + message_put(message); + /* disable encryption if disconnected */ +//PERROR("REMOVE ME: state =%d, %d\n", e_crypt_state, e_crypt); + if (e_crypt_state) + cryptman_message(CI_DISCONNECT_IND, NULL, 0); + return; + } else + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) the port has no patterns.\n", ea_endpoint->ep_serial); + } + } + release(RELEASE_ALL, location, cause, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL); /* RELEASE_TYPE, callcause, portcause */ + return; /* must exit here */ +} + +/* port MESSAGE_TIMEOUT */ +void EndpointAppPBX::port_timeout(struct port_list *portlist, int message_type, union parameter *param) +{ + char cause[16]; + + printlog("%3d incoming TIMEOUT\n", + ea_endpoint->ep_serial + ); + message_type = MESSAGE_DISCONNECT; + switch (param->state) + { + case PORT_STATE_OUT_SETUP: + case PORT_STATE_OUT_OVERLAP: + /* no user responding */ + release(RELEASE_ALL, LOCATION_PRIVATE_LOCAL, CAUSE_NOUSER, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL); + return; /* must exit here */ + + case PORT_STATE_IN_SETUP: + case PORT_STATE_IN_OVERLAP: + param->disconnectinfo.cause = CAUSE_INVALID; /* number incomplete */ + param->disconnectinfo.location = LOCATION_PRIVATE_LOCAL; + break; + + case PORT_STATE_OUT_PROCEEDING: + param->disconnectinfo.cause = CAUSE_NOUSER; /* no user responding */ + param->disconnectinfo.location = LOCATION_PRIVATE_LOCAL; + release(RELEASE_ALL, LOCATION_PRIVATE_LOCAL, CAUSE_NOUSER, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL); + return; /* must exit here */ + + case PORT_STATE_IN_PROCEEDING: + param->disconnectinfo.cause = CAUSE_NOUSER; + param->disconnectinfo.location = LOCATION_PRIVATE_LOCAL; /* no user responding */ + break; + + case PORT_STATE_OUT_ALERTING: + param->disconnectinfo.cause = CAUSE_NOANSWER; /* no answer */ + param->disconnectinfo.location = LOCATION_PRIVATE_LOCAL; + release(RELEASE_ALL, LOCATION_PRIVATE_LOCAL, CAUSE_NOANSWER, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL); + return; /* must exit here */ + + case PORT_STATE_IN_ALERTING: + param->disconnectinfo.cause = CAUSE_NOANSWER; + param->disconnectinfo.location = LOCATION_PRIVATE_LOCAL; + break; + + case PORT_STATE_IN_DISCONNECT: + case PORT_STATE_OUT_DISCONNECT: + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) in this special case, we release due to disconnect timeout.\n", ea_endpoint->ep_serial); + release(RELEASE_ALL, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL); + return; /* must exit here */ + + default: + param->disconnectinfo.cause = 31; /* normal unspecified */ + param->disconnectinfo.location = LOCATION_PRIVATE_LOCAL; + } + /* release call, disconnect isdn */ + e_call_pattern = 0; + new_state(EPOINT_STATE_OUT_DISCONNECT); + SPRINT(cause, "cause_%02x", param->disconnectinfo.cause); + SCPY(e_tone, cause); + while(portlist) + { + set_tone(portlist, cause); + message_disconnect_port(portlist, param->disconnectinfo.cause, param->disconnectinfo.location, ""); + portlist = portlist->next; + } + release(RELEASE_CALL, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL); /* RELEASE_TYPE, call, port */ +} + +/* port MESSAGE_NOTIFY */ +void EndpointAppPBX::port_notify(struct port_list *portlist, int message_type, union parameter *param) +{ + struct message *message; + char *logtext = ""; + char buffer[64]; + + /* signal to call tool */ + admin_call_response(e_adminid, ADMIN_CALL_NOTIFY, numberrize_callerinfo(param->notifyinfo.id,param->notifyinfo.ntype), 0, 0, param->notifyinfo.notify); + if (param->notifyinfo.notify) + { + e_rx_state = track_notify(e_rx_state, param->notifyinfo.notify); + } + + /* if we get notification from stack, local shows if we disabled/enabled audio stream */ + if (param->notifyinfo.local) switch(param->notifyinfo.notify) + { + case INFO_NOTIFY_REMOTE_HOLD: + case INFO_NOTIFY_USER_SUSPENDED: + /* tell call about it */ + if (ea_endpoint->ep_call_id) + { + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, MESSAGE_CHANNEL); + message->param.channel = CHANNEL_STATE_HOLD; + message_put(message); + } + break; + + case INFO_NOTIFY_REMOTE_RETRIEVAL: + case INFO_NOTIFY_USER_RESUMED: + /* set volume of rx and tx */ + if (param->setup.callerinfo.itype == INFO_ITYPE_INTERN) + if (e_ext.txvol!=256 || e_ext.rxvol!=256) + if (portlist) + { + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_mISDNSIGNAL); + message->param.mISDNsignal.message = mISDNSIGNAL_VOLUME; + message->param.mISDNsignal.rxvol = e_ext.txvol; + message->param.mISDNsignal.txvol = e_ext.rxvol; + message_put(message); + } + /* set current tone */ + if (portlist) + set_tone(portlist, e_tone); + /* tell call about it */ + if (ea_endpoint->ep_call_id) + { + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, MESSAGE_CHANNEL); + message->param.channel = CHANNEL_STATE_CONNECT; + message_put(message); + } + break; + } + + /* get name of notify */ + switch(param->notifyinfo.notify) + { + case 0x00: + logtext = "NULL"; + break; + case 0x80: + logtext = "USER_SUSPENDED"; + break; + case 0x82: + logtext = "BEARER_SERVICE_CHANGED"; + break; + case 0x81: + logtext = "USER_RESUMED"; + break; + case 0xc2: + logtext = "CONFERENCE_ESTABLISHED"; + break; + case 0xc3: + logtext = "CONFERENCE_DISCONNECTED"; + break; + case 0xc4: + logtext = "OTHER_PARTY_ADDED"; + break; + case 0xc5: + logtext = "ISOLATED"; + break; + case 0xc6: + logtext = "REATTACHED"; + break; + case 0xc7: + logtext = "OTHER_PARTY_ISOLATED"; + break; + case 0xc8: + logtext = "OTHER_PARTY_REATTACHED"; + break; + case 0xc9: + logtext = "OTHER_PARTY_SPLIT"; + break; + case 0xca: + logtext = "OTHER_PARTY_DISCONNECTED"; + break; + case 0xcb: + logtext = "CONFERENCE_FLOATING"; + break; + case 0xcc: + logtext = "CONFERENCE_DISCONNECTED_PREEMTED"; + break; + case 0xcf: + logtext = "CONFERENCE_FLOATING_SERVED_USER_PREEMTED"; + break; + case 0xe0: + logtext = "CALL_IS_A_WAITING_CALL"; + break; + case 0xe8: + logtext = "DIVERSION_ACTIVATED"; + break; + case 0xe9: + logtext = "RESERVED_CT_1"; + break; + case 0xea: + logtext = "RESERVED_CT_2"; + break; + case 0xee: + logtext = "REVERSE_CHARGING"; + break; + case 0xf9: + logtext = "REMOTE_HOLD"; + break; + case 0xfa: + logtext = "REMOTE_RETRIEVAL"; + break; + case 0xfb: + logtext = "CALL_IS_DIVERTING"; + break; + default: + SPRINT(buffer, "indicator=%d", param->notifyinfo.notify - 0x80); + logtext = buffer; + + } + printlog("%3d incoming NOTIFY notify='%s' id='%s'%s\n", + ea_endpoint->ep_serial, + logtext, + param->notifyinfo.id, + (param->notifyinfo.present==INFO_PRESENT_RESTRICTED)?" anonymous":"" + ); + + /* notify call if available */ + if (ea_endpoint->ep_call_id) + { + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, MESSAGE_NOTIFY); + memcpy(&message->param.notifyinfo, ¶m->notifyinfo, sizeof(struct notify_info)); + message_put(message); + } + +} + +/* port MESSAGE_FACILITY */ +void EndpointAppPBX::port_facility(struct port_list *portlist, int message_type, union parameter *param) +{ + struct message *message; + + printlog("%3d incoming FACILITY len='%d'\n", + ea_endpoint->ep_serial, + param->facilityinfo.len + ); + + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, MESSAGE_FACILITY); + memcpy(&message->param.facilityinfo, ¶m->facilityinfo, sizeof(struct facility_info)); + message_put(message); +} + +/* port MESSAGE_SUSPEND */ +/* NOTE: before supending, the inactive-notification must be done in order to set call mixer */ +void EndpointAppPBX::port_suspend(struct port_list *portlist, int message_type, union parameter *param) +{ + printlog("%3d incoming SUSPEND\n", + ea_endpoint->ep_serial + ); + /* epoint is now parked */ + ea_endpoint->ep_park = 1; + memcpy(ea_endpoint->ep_park_callid, param->parkinfo.callid, sizeof(ea_endpoint->ep_park_callid)); + ea_endpoint->ep_park_len = (param->parkinfo.len>8)?8:param->parkinfo.len; + + /* remove port relation */ + ea_endpoint->free_portlist(portlist); +} + +/* port MESSAGE_RESUME */ +/* NOTE: before resume, the active-notification must be done in order to set call mixer */ +void EndpointAppPBX::port_resume(struct port_list *portlist, int message_type, union parameter *param) +{ + printlog("%3d incoming RESUME\n", + ea_endpoint->ep_serial + ); + /* epoint is now resumed */ + ea_endpoint->ep_park = 0; + +} + + +/* port sends message to the endpoint + */ +void EndpointAppPBX::ea_message_port(unsigned long port_id, int message_type, union parameter *param) +{ + struct port_list *portlist; + struct message *message; + class Port *port; + + portlist = ea_endpoint->ep_portlist; + while(portlist) + { + if (port_id == portlist->port_id) + break; + portlist = portlist->next; + } + if (!portlist) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) warning: port is not related to this endpoint. This may happen, if port has been released after the message was created.\n", ea_endpoint->ep_serial); + return; + } + +// PDEBUG(DEBUG_EPOINT, "received message %d (terminal %s, caller id %s)\n", message, e_terminal, e_callerinfo.id); + switch(message_type) + { + case MESSAGE_DATA: /* data from port */ + /* send back to source for recording */ + if (port_id) + { + message = message_create(ea_endpoint->ep_serial, port_id, EPOINT_TO_PORT, message_type); + memcpy(&message->param, param, sizeof(union parameter)); + message_put(message); + } + + /* check if there is a call */ + if (!ea_endpoint->ep_call_id) + break; + /* continue if only one portlist */ + if (ea_endpoint->ep_portlist->next != NULL) + break; + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, message_type); + memcpy(&message->param, param, sizeof(union parameter)); + message_put(message); + break; + + case MESSAGE_TONE_EOF: /* tone is end of file */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) current tone is now end of file.\n", ea_endpoint->ep_serial); + if (e_action) + { + if (e_action->index == ACTION_VBOX_PLAY) + { + vbox_message_eof(); + } + if (e_action->index == ACTION_EFI) + { + efi_message_eof(); + } + } + break; + + case MESSAGE_TONE_COUNTER: /* counter info received */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) received counter information: %d / %d seconds after start of tone.\n", ea_endpoint->ep_serial, param->counter.current, param->counter.max); + if (e_action) + if (e_action->index == ACTION_VBOX_PLAY) + { + e_vbox_counter = param->counter.current; + if (param->counter.max >= 0) + e_vbox_counter_max = param->counter.max; + } + break; + + /* PORT sends SETUP message */ + case MESSAGE_SETUP: + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) incoming call from callerid=%s, dialing=%s\n", ea_endpoint->ep_serial, param->setup.callerinfo.id, param->setup.dialinginfo.number); + if (e_state!=EPOINT_STATE_IDLE) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) ignored because we are not in idle state.\n", ea_endpoint->ep_serial); + break; + } + port_setup(portlist, message_type, param); + break; + + /* PORT sends INFORMATION message */ + case MESSAGE_INFORMATION: /* additional digits received */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) incoming call dialing more=%s (terminal '%s', caller id '%s')\n", ea_endpoint->ep_serial, param->information.number, e_terminal, e_callerinfo.id); + port_information(portlist, message_type, param); + break; + + /* PORT sends FACILITY message */ + case MESSAGE_FACILITY: + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) incoming facility (terminal '%s', caller id '%s')\n", ea_endpoint->ep_serial, e_terminal, e_callerinfo.id); + port_facility(portlist, message_type, param); + break; + + /* PORT sends DTMF message */ + case MESSAGE_DTMF: /* dtmf digits received */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) dtmf digit=%c (terminal '%s', caller id '%s')\n", ea_endpoint->ep_serial, param->dtmf, e_terminal, e_callerinfo.id); + port_dtmf(portlist, message_type, param); + break; + + /* PORT sends CRYPT message */ + case MESSAGE_CRYPT: /* crypt response received */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) crypt response=%d\n", ea_endpoint->ep_serial, param->crypt.type); + port_crypt(portlist, message_type, param); + break; + + /* PORT sends MORE message */ + case MESSAGE_OVERLAP: + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) outgoing call is accepted [overlap dialing] (terminal '%s', caller id '%s')\n", ea_endpoint->ep_serial, e_terminal, e_callerinfo.id); + if (e_state != EPOINT_STATE_OUT_SETUP) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) ignored because we are not in setup state (for port_list: another portlist might have changed the state already).\n", ea_endpoint->ep_serial); + break; + } + port_overlap(portlist, message_type, param); + break; + + /* PORT sends PROCEEDING message */ + case MESSAGE_PROCEEDING: /* port is proceeding */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) outgoing call is proceeding (terminal '%s', caller id '%s')\n", ea_endpoint->ep_serial, e_terminal, e_callerinfo.id); + if (e_state!=EPOINT_STATE_OUT_SETUP + && e_state!=EPOINT_STATE_OUT_OVERLAP) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) ignored because we are not in overlap state (for port_list: another portlist might have changed the state already).\n", ea_endpoint->ep_serial); + break; + } + port_proceeding(portlist, message_type, param); + break; + + /* PORT sends ALERTING message */ + case MESSAGE_ALERTING: + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) outgoing call is ringing (terminal '%s', caller id '%s')\n", ea_endpoint->ep_serial, e_terminal, e_callerinfo.id); + if (e_state!=EPOINT_STATE_OUT_SETUP + && e_state!=EPOINT_STATE_OUT_OVERLAP + && e_state!=EPOINT_STATE_OUT_PROCEEDING) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) ignored because we are not in setup or proceeding state (for port_list: another portlist might have changed the state already).\n", ea_endpoint->ep_serial); + break; + } + port_alerting(portlist, message_type, param); + break; + + /* PORT sends CONNECT message */ + case MESSAGE_CONNECT: + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) outgoing call connected to %s (terminal '%s', caller id '%s')\n", ea_endpoint->ep_serial, e_connectinfo.id, e_terminal, e_callerinfo.id); + if (e_state!=EPOINT_STATE_OUT_SETUP + && e_state!=EPOINT_STATE_OUT_OVERLAP + && e_state!=EPOINT_STATE_OUT_PROCEEDING + && e_state!=EPOINT_STATE_OUT_ALERTING) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) ignored because we are not in setup, proceeding or alerting state.\n", ea_endpoint->ep_serial); + break; + } + port_connect(portlist, message_type, param); + break; + + /* PORT sends DISCONNECT message */ + case MESSAGE_DISCONNECT: /* port is disconnected */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) call disconnect with cause=%d location=%d (terminal '%s', caller id '%s')\n", ea_endpoint->ep_serial, param->disconnectinfo.cause, param->disconnectinfo.location, e_terminal, e_callerinfo.id); + port_disconnect_release(portlist, message_type, param); + break; + + /* PORT sends a RELEASE message */ + case MESSAGE_RELEASE: /* port releases */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) release with cause=%d location=%d (terminal '%s', caller id '%s')\n", ea_endpoint->ep_serial, param->disconnectinfo.cause, param->disconnectinfo.location, e_terminal, e_callerinfo.id); + /* portlist is release at port_disconnect_release, thanx Paul */ + port_disconnect_release(portlist, message_type, param); + break; + + /* PORT sends a TIMEOUT message */ + case MESSAGE_TIMEOUT: + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) epoint with terminal '%s' (caller id '%s') received timeout (state=%d).\n", ea_endpoint->ep_serial, e_terminal, e_callerinfo.id, param->state); + port_timeout(portlist, message_type, param); + break; /* release */ + + /* PORT sends a NOTIFY message */ + case MESSAGE_NOTIFY: + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) epoint with terminal '%s' (caller id '%s') received notify.\n", ea_endpoint->ep_serial, e_terminal, e_callerinfo.id); + port_notify(portlist, message_type, param); + break; + + /* PORT sends a SUSPEND message */ + case MESSAGE_SUSPEND: + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) epoint with terminal '%s' (caller id '%s') received suspend.\n", ea_endpoint->ep_serial, e_terminal, e_callerinfo.id); + port_suspend(portlist, message_type, param); + break; /* suspend */ + + /* PORT sends a RESUME message */ + case MESSAGE_RESUME: + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) epoint with terminal '%s' (caller id '%s') received resume.\n", ea_endpoint->ep_serial, e_terminal, e_callerinfo.id); + port_resume(portlist, message_type, param); + break; + + case MESSAGE_VBOX_RECORD: + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) epoint with terminal '%s' (caller id '%s') received recording message from vbox.\n", ea_endpoint->ep_serial, e_terminal, e_callerinfo.id); + /* check if we are a terminal */ + if (e_terminal[0] == '\0') + PERROR("Port(%d) cannot record because we are not a terminal\n", ea_endpoint->ep_serial); + else + { + port = find_port_id(portlist->port_id); + if (port) + port->open_record(e_ext.vbox_codec, 2, 0, e_terminal, e_ext.anon_ignore, e_ext.vbox_email, e_ext.vbox_email_file); + } + /* the recording is done to the vbox directory rather than to the recording directory (using vbox_codec) */ + break; + + default: + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) epoint with terminal '%s' (caller id '%s') received a wrong message: %d\n", ea_endpoint->ep_serial, e_terminal, e_callerinfo.id, message); + } + + /* Note: this endpoint may be destroyed, so we MUST return */ +} + + +/* messages from port + */ +/* call MESSAGE_CRYPT */ +void EndpointAppPBX::call_crypt(struct port_list *portlist, int message_type, union parameter *param) +{ + switch(param->crypt.type) + { + /* message from remote port to "crypt manager" */ + case CU_ACTK_REQ: /* activate key-exchange */ + case CU_ACTS_REQ: /* activate shared key */ + case CU_DACT_REQ: /* deactivate */ + case CU_INFO_REQ: /* request last info message */ + cryptman_message(param->crypt.type, param->crypt.data, param->crypt.len); + break; + + /* message from "crypt manager" to user */ + case CU_ACTK_CONF: /* key-echange done */ + case CU_ACTS_CONF: /* shared key done */ + case CU_DACT_CONF: /* deactivated */ + case CU_DACT_IND: /* deactivated */ + case CU_ERROR_IND: /* receive error message */ + case CU_INFO_IND: /* receive info message */ + case CU_INFO_CONF: /* receive info message */ + encrypt_result(param->crypt.type, (char *)param->crypt.data); + break; + + default: + PERROR("EPOINT(%d) epoint with terminal '%s' (caller id '%s') unknown crypt message: '%d'\n", ea_endpoint->ep_serial, e_terminal, e_callerinfo.id, param->crypt.type); + } +} + +/* call MESSAGE_INFORMATION */ +void EndpointAppPBX::call_information(struct port_list *portlist, int message_type, union parameter *param) +{ + struct message *message; + + e_overlap = 1; + + while(portlist) + { + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_INFORMATION); + memcpy(&message->param.information, ¶m->information, sizeof(struct dialing_info)); + message_put(message); + logmessage(message); + portlist = portlist->next; + } +} + +/* call MESSAGE_FACILITY */ +void EndpointAppPBX::call_facility(struct port_list *portlist, int message_type, union parameter *param) +{ + struct message *message; + + if (!e_ext.facility) + { + return; + } + + while(portlist) + { + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_FACILITY); + memcpy(&message->param.facilityinfo, ¶m->facilityinfo, sizeof(struct facility_info)); + message_put(message); + logmessage(message); + portlist = portlist->next; + } +} + +/* call MESSAGE_MORE */ +void EndpointAppPBX::call_overlap(struct port_list *portlist, int message_type, union parameter *param) +{ + struct message *message; + + new_state(EPOINT_STATE_IN_OVERLAP); + + /* own dialtone */ + if (e_call_pattern && e_ext.own_setup) + { + /* disconnect audio */ + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, MESSAGE_CHANNEL); + message->param.channel = CHANNEL_STATE_HOLD; + message_put(message); + } + if (e_action) if (e_action->index == ACTION_OUTDIAL || e_action->index == ACTION_EXTERNAL) + { + set_tone(portlist, "dialtone"); + return; + } + if (e_terminal[0]) + set_tone(portlist, "dialpbx"); + else + set_tone(portlist, "dialtone"); +} + +/* call MESSAGE_PROCEEDING */ +void EndpointAppPBX::call_proceeding(struct port_list *portlist, int message_type, union parameter *param) +{ + struct message *message; + + new_state(EPOINT_STATE_IN_PROCEEDING); + + /* own proceeding tone */ + if (e_call_pattern) + { + /* connect / disconnect audio */ + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, MESSAGE_CHANNEL); + if (e_ext.own_proceeding) + message->param.channel = CHANNEL_STATE_HOLD; + else + message->param.channel = CHANNEL_STATE_CONNECT; + message_put(message); + } +// UCPY(e_call_tone, "proceeding"); + if (portlist) + { + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_PROCEEDING); + message_put(message); + logmessage(message); + } + set_tone(portlist, "proceeding"); +} + +/* call MESSAGE_ALERTING */ +void EndpointAppPBX::call_alerting(struct port_list *portlist, int message_type, union parameter *param) +{ + struct message *message; + + new_state(EPOINT_STATE_IN_ALERTING); + + /* own alerting tone */ + if (e_call_pattern) + { + /* connect / disconnect audio */ + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, MESSAGE_CHANNEL); + if (e_ext.own_alerting) + message->param.channel = CHANNEL_STATE_HOLD; + else + message->param.channel = CHANNEL_STATE_CONNECT; + message_put(message); + } + if (portlist) + { + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_ALERTING); + message_put(message); + logmessage(message); + } + if (e_action) if (e_action->index == ACTION_OUTDIAL || e_action->index == ACTION_EXTERNAL) + { + set_tone(portlist, "ringing"); + return; + } + if (e_terminal[0]) + set_tone(portlist, "ringpbx"); + else + set_tone(portlist, "ringing"); +} + +/* call MESSAGE_CONNECT */ +void EndpointAppPBX::call_connect(struct port_list *portlist, int message_type, union parameter *param) +{ + struct message *message; + + new_state(EPOINT_STATE_CONNECT); +// UCPY(e_call_tone, ""); + if (e_terminal[0]) + e_dtmf = 1; /* allow dtmf */ + e_powerdialing = 0; + memcpy(&e_connectinfo, ¶m->connectinfo, sizeof(e_callerinfo)); + if(portlist) + { + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_CONNECT); + memcpy(&message->param, param, sizeof(union parameter)); + /* screen clip if prefix is required */ + if (e_terminal[0] && message->param.connectinfo.id[0] && e_ext.clip_prefix[0]) + { + SCPY(message->param.connectinfo.id, e_ext.clip_prefix); + SCAT(message->param.connectinfo.id, numberrize_callerinfo(e_connectinfo.id,e_connectinfo.ntype)); + message->param.connectinfo.ntype = INFO_NTYPE_UNKNOWN; + } + /* use internal caller id */ + if (e_terminal[0] && e_connectinfo.intern[0] && (message->param.connectinfo.present!=INFO_PRESENT_RESTRICTED || e_ext.anon_ignore)) + { + SCPY(message->param.connectinfo.id, e_connectinfo.intern); + message->param.connectinfo.ntype = INFO_NTYPE_UNKNOWN; + } + /* handle restricted caller ids */ + apply_callerid_restriction(e_ext.anon_ignore, portlist->port_type, message->param.connectinfo.id, &message->param.connectinfo.ntype, &message->param.connectinfo.present, &message->param.connectinfo.screen, message->param.connectinfo.voip, message->param.connectinfo.intern, message->param.connectinfo.name); + /* display callerid if desired for extension */ + SCPY(message->param.connectinfo.display, apply_callerid_display(message->param.connectinfo.id, message->param.connectinfo.itype, message->param.connectinfo.ntype, message->param.connectinfo.present, message->param.connectinfo.screen, message->param.connectinfo.voip, message->param.connectinfo.intern, message->param.connectinfo.name)); + /* use conp, if enabld */ + if (!e_ext.centrex) + message->param.connectinfo.name[0] = '\0'; + /* send connect */ + message_put(message); + logmessage(message); + } + set_tone(portlist, NULL); + e_call_pattern = 0; + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, MESSAGE_CHANNEL); + message->param.channel = CHANNEL_STATE_CONNECT; + message_put(message); + e_start = now; +} + +/* call MESSAGE_DISCONNECT MESSAGE_RELEASE */ +void EndpointAppPBX::call_disconnect_release(struct port_list *portlist, int message_type, union parameter *param) +{ + char cause[16]; + struct message *message; + + + /* be sure that we are active */ + notify_active(); + e_tx_state = NOTIFY_STATE_ACTIVE; + + /* we are powerdialing, if e_powerdialing is set and limit is not exceeded if given */ + if (e_powerdialing && ((e_powercount+1)ep_portlist) + { + e_call_pattern = 0; + } + set_tone(ea_endpoint->ep_portlist, "redial"); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) epoint with terminal '%s' (caller id '%s') redialing in %d seconds\n", ea_endpoint->ep_serial, e_terminal, e_callerinfo.id, (int)e_powerdelay); + /* send proceeding when powerdialing and still setup (avoid dialing timeout) */ + if (e_state==EPOINT_STATE_IN_OVERLAP) + { + new_state(EPOINT_STATE_IN_PROCEEDING); + if (portlist) + { + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_PROCEEDING); + message_put(message); + logmessage(message); + } +/* caused the error, that the first knock sound was not there */ +/* set_tone(portlist, "proceeding"); */ + } + /* send display of powerdialing */ + if (e_ext.display_dialing) + { + while (portlist) + { + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_NOTIFY); + if (e_powerlimit) + SPRINT(message->param.notifyinfo.display, "Retry %d of %d", e_powercount, e_powerlimit); + else + SPRINT(message->param.notifyinfo.display, "Retry %d", e_powercount); + message_put(message); + logmessage(message); + portlist = portlist->next; + } + } + return; + } + + /* set stop time */ + e_stop = now; + + if ((e_state!=EPOINT_STATE_CONNECT + && e_state!=EPOINT_STATE_OUT_DISCONNECT + && e_state!=EPOINT_STATE_IN_OVERLAP + && e_state!=EPOINT_STATE_IN_PROCEEDING + && e_state!=EPOINT_STATE_IN_ALERTING) + || !ea_endpoint->ep_portlist) /* or no port */ + { + process_hangup(param->disconnectinfo.cause, param->disconnectinfo.location); + release(RELEASE_ALL, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL, LOCATION_PRIVATE_LOCAL, param->disconnectinfo.cause); /* RELEASE_TYPE, call, port */ + return; /* must exit here */ + } + /* save cause */ + if (!e_call_cause) + { + e_call_cause = param->disconnectinfo.cause; + e_call_location = param->disconnectinfo.location; + } + + /* on release we need the audio again! */ + if (message_type == MESSAGE_RELEASE) + { + e_call_pattern = 0; + ea_endpoint->ep_call_id = 0; + } + /* disconnect and select tone */ + new_state(EPOINT_STATE_OUT_DISCONNECT); + SPRINT(cause, "cause_%02x", param->disconnectinfo.cause); + /* if own_cause, we must release the call */ + if (e_ext.own_cause /* own cause */ + || !e_call_pattern) /* no patterns */ + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) we have own cause or we have no patterns. (own_cause=%d pattern=%d)\n", ea_endpoint->ep_serial, e_ext.own_cause, e_call_pattern); + if (message_type != MESSAGE_RELEASE) + release(RELEASE_CALL, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL); /* RELEASE_TYPE, call, port */ + e_call_pattern = 0; + } else /* else we enable audio */ + { + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, MESSAGE_CHANNEL); + message->param.channel = CHANNEL_STATE_CONNECT; + message_put(message); + } + /* send disconnect message */ + SCPY(e_tone, cause); + while(portlist) + { + set_tone(portlist, cause); + message_disconnect_port(portlist, param->disconnectinfo.cause, param->disconnectinfo.location, ""); + portlist = portlist->next; + } +} + +/* call MESSAGE_SETUP */ +void EndpointAppPBX::call_setup(struct port_list *portlist, int message_type, union parameter *param) +{ + struct message *message; + + /* if we already in setup state, we just update the dialing with new digits */ + if (e_state == EPOINT_STATE_OUT_SETUP + || e_state == EPOINT_STATE_OUT_OVERLAP) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) we are in setup state, so we do overlap dialing.\n", ea_endpoint->ep_serial); + /* if digits changed, what we have already dialed */ + if (!!strncmp(e_dialinginfo.number,param->setup.dialinginfo.number,strlen(e_dialinginfo.number))) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) we have dialed digits which have been changed or we have a new multidial, so we must redial.\n", ea_endpoint->ep_serial); + /* release all ports */ + while((portlist = ea_endpoint->ep_portlist)) + { + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_RELEASE); + message->param.disconnectinfo.cause = CAUSE_NORMAL; /* normal clearing */ + message->param.disconnectinfo.location = LOCATION_PRIVATE_LOCAL; + message_put(message); + logmessage(message); + ea_endpoint->free_portlist(portlist); + } + + /* disconnect audio */ + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, MESSAGE_CHANNEL); + message->param.channel = CHANNEL_STATE_HOLD; + message_put(message); + + /* get dialing info */ + memcpy(&e_callerinfo, ¶m->setup.callerinfo, sizeof(e_callerinfo)); + memcpy(&e_dialinginfo, ¶m->setup.dialinginfo, sizeof(e_dialinginfo)); + memcpy(&e_redirinfo, ¶m->setup.redirinfo, sizeof(e_redirinfo)); + memcpy(&e_capainfo, ¶m->setup.capainfo, sizeof(e_capainfo)); + new_state(EPOINT_STATE_OUT_OVERLAP); + + /* get time */ + e_redial = now_d + 1; /* set redial one second in the future */ + return; + } + /* if we have a pending redial, so we just adjust the dialing number */ + if (e_redial) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) redial in progress, so we update the dialing number to %s.\n", ea_endpoint->ep_serial, param->setup.dialinginfo.number); + memcpy(&e_dialinginfo, ¶m->setup.dialinginfo, sizeof(e_dialinginfo)); + return; + } + if (!ea_endpoint->ep_portlist) + { + PERROR("ERROR: overlap dialing to a NULL port relation\n"); + } + if (ea_endpoint->ep_portlist->next) + { + PERROR("ERROR: overlap dialing to a port_list port relation\n"); + } + if (e_state == EPOINT_STATE_OUT_SETUP) + { + /* queue digits */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) digits '%s' are queued because we didn't receive a setup acknowledge.\n", ea_endpoint->ep_serial, param->setup.dialinginfo.number); + SCAT(e_dialing_queue, param->setup.dialinginfo.number + strlen(e_dialinginfo.number)); + + } else + { + /* get what we have not dialed yet */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) we have already dialed '%s', we received '%s', what's left '%s'.\n", ea_endpoint->ep_serial, e_dialinginfo.number, param->setup.dialinginfo.number, param->setup.dialinginfo.number+strlen(e_dialinginfo.number)); + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_portlist->port_id, EPOINT_TO_PORT, MESSAGE_INFORMATION); + SCPY(message->param.information.number, param->setup.dialinginfo.number + strlen(e_dialinginfo.number)); + message->param.information.ntype = INFO_NTYPE_UNKNOWN; + message_put(message); + logmessage(message); + } + /* always store what we have dialed or queued */ + memcpy(&e_dialinginfo, ¶m->setup.dialinginfo, sizeof(e_dialinginfo)); + + return; + } + if (e_state != EPOINT_STATE_IDLE) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) ignored because we are not in idle state.\n", ea_endpoint->ep_serial); + return; + } + /* if an internal extension is dialed, copy that number */ + if (param->setup.dialinginfo.itype==INFO_ITYPE_INTERN || param->setup.dialinginfo.itype==INFO_ITYPE_VBOX) + SCPY(e_terminal, param->setup.dialinginfo.number); + /* if an internal extension is dialed, get extension's info about caller */ + if (e_terminal[0]) + { + if (!read_extension(&e_ext, e_terminal)) + { + e_terminal[0] = '\0'; + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) the called terminal='%s' is not found in directory tree!\n", ea_endpoint->ep_serial, e_terminal); + } + } + + memcpy(&e_callerinfo, ¶m->setup.callerinfo, sizeof(e_callerinfo)); + memcpy(&e_dialinginfo, ¶m->setup.dialinginfo, sizeof(e_dialinginfo)); + memcpy(&e_redirinfo, ¶m->setup.redirinfo, sizeof(e_redirinfo)); + memcpy(&e_capainfo, ¶m->setup.capainfo, sizeof(e_capainfo)); + + /* process (voice over) data calls */ + if (e_ext.datacall && e_capainfo.bearer_capa!=INFO_BC_SPEECH && e_capainfo.bearer_capa!=INFO_BC_AUDIO) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) handling data call as audio call: '%s'\n", ea_endpoint->ep_serial, e_terminal); + memset(&e_capainfo, 0, sizeof(e_capainfo)); + e_capainfo.bearer_capa = INFO_BC_AUDIO; + e_capainfo.bearer_mode = INFO_BMODE_CIRCUIT; + e_capainfo.bearer_info1 = (options.law=='u')?INFO_INFO1_ULAW:INFO_INFO1_ALAW; + } + + new_state(EPOINT_STATE_OUT_SETUP); + /* call special setup routine */ + out_setup(); +} + +/* call MESSAGE_mISDNSIGNAL */ +void EndpointAppPBX::call_mISDNsignal(struct port_list *portlist, int message_type, union parameter *param) +{ + struct message *message; + + while(portlist) + { + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_mISDNSIGNAL); + memcpy(&message->param, param, sizeof(union parameter)); + message_put(message); + portlist = portlist->next; + } +} + +/* call MESSAGE_NOTIFY */ +void EndpointAppPBX::call_notify(struct port_list *portlist, int message_type, union parameter *param) +{ + struct message *message; + int new_state; + + if (param->notifyinfo.notify) + { + new_state = track_notify(e_tx_state, param->notifyinfo.notify); +// /* if notification was generated locally, we turn hold music on/off */ +// if (param->notifyinfo.local) +// NOTE: we always assume that we send hold music on suspension of call, because we don't track if audio is available or not (we assume that we always have no audio, to make it easier) + { + if (e_hold) + { + /* unhold if */ + if (new_state!=NOTIFY_STATE_HOLD && new_state!=NOTIFY_STATE_SUSPEND) + { + while(portlist) + { + set_tone(portlist, ""); + portlist = portlist->next; + } + portlist = ea_endpoint->ep_portlist; + e_hold = 0; + } + } else { + /* hold if */ + if (new_state==NOTIFY_STATE_HOLD || new_state==NOTIFY_STATE_SUSPEND) + { + while(portlist) + { + set_tone(portlist, "hold"); + portlist = portlist->next; + } + portlist = ea_endpoint->ep_portlist; + e_hold = 1; + } + } + } + /* save new state */ + e_tx_state = new_state; + } + + /* notify port(s) about it */ + while(portlist) + { + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_NOTIFY); + memcpy(&message->param.notifyinfo, ¶m->notifyinfo, sizeof(struct notify_info)); + /* handle restricted caller ids */ + apply_callerid_restriction(e_ext.anon_ignore, portlist->port_type, message->param.notifyinfo.id, &message->param.notifyinfo.ntype, &message->param.notifyinfo.present, NULL, message->param.notifyinfo.voip, message->param.notifyinfo.intern, 0); + /* display callerid if desired for extension */ + SCPY(message->param.notifyinfo.display, apply_callerid_display(message->param.notifyinfo.id, message->param.notifyinfo.itype, message->param.notifyinfo.ntype, message->param.notifyinfo.present, 0, message->param.notifyinfo.voip, message->param.notifyinfo.intern, NULL)); + message_put(message); + logmessage(message); + portlist = portlist->next; + } +} + +/* call sends messages to the endpoint + */ +void EndpointAppPBX::ea_message_call(unsigned long call_id, int message_type, union parameter *param) +{ + struct port_list *portlist; + struct message *message; + + if (!call_id) + { + PERROR("EPOINT(%d) error: call == NULL.\n", ea_endpoint->ep_serial); + return; + } + + portlist = ea_endpoint->ep_portlist; + + /* send MESSAGE_DATA to port */ + if (call_id == ea_endpoint->ep_call_id) + { + if (message_type == MESSAGE_DATA) + { + /* skip if no port relation */ + if (!portlist) + return; + /* skip if more than one port relation */ + if (portlist->next) + return; + /* send audio data to port */ + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_DATA); + memcpy(&message->param, param, sizeof(union parameter)); + message_put(message); + return; + } + } + +// PDEBUG(DEBUG_EPOINT, "EPOINT(%d) received message %d for active call (terminal %s, caller id %s state=%d)\n", ea_endpoint->ep_serial, message, e_terminal, e_callerinfo.id, e_state); + switch(message_type) + { + /* CALL SENDS CRYPT message */ + case MESSAGE_CRYPT: + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) epoint with terminal '%s' (caller id '%s') received crypt message: '%d'\n", ea_endpoint->ep_serial, e_terminal, e_callerinfo.id, param->crypt.type); + call_crypt(portlist, message_type, param); + break; + + /* CALL sends INFORMATION message */ + case MESSAGE_INFORMATION: + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) epoint with terminal '%s' (caller id '%s') received more digits: '%s'\n", ea_endpoint->ep_serial, e_terminal, e_callerinfo.id, param->information.number); + call_information(portlist, message_type, param); + break; + + /* CALL sends FACILITY message */ + case MESSAGE_FACILITY: + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) epoint with terminal '%s' (caller id '%s') received facility\n", ea_endpoint->ep_serial, e_terminal, e_callerinfo.id); + call_facility(portlist, message_type, param); + break; + + /* CALL sends OVERLAP message */ + case MESSAGE_OVERLAP: + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) epoint with terminal '%s' (caller id '%s') received 'more info available'\n", ea_endpoint->ep_serial, e_terminal, e_callerinfo.id); + if (e_state!=EPOINT_STATE_IN_SETUP + && e_state!=EPOINT_STATE_IN_OVERLAP) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) ignored because we are not in setup state.\n", ea_endpoint->ep_serial); + break; + } + call_overlap(portlist, message_type, param); + break; + + /* CALL sends PROCEEDING message */ + case MESSAGE_PROCEEDING: + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) epoint with terminal '%s (caller id '%s') received proceeding\n", ea_endpoint->ep_serial, e_terminal, e_callerinfo.id); + if(e_state!=EPOINT_STATE_IN_OVERLAP) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) ignored because we are not in setup state.\n", ea_endpoint->ep_serial); + break; + } + call_proceeding(portlist, message_type, param); + break; + + /* CALL sends ALERTING message */ + case MESSAGE_ALERTING: + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) epoint with terminal '%s' (caller id '%s') received alerting\n", ea_endpoint->ep_serial, e_terminal, e_callerinfo.id); + if (e_state!=EPOINT_STATE_IN_OVERLAP + && e_state!=EPOINT_STATE_IN_PROCEEDING) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) ignored because we are not in setup or proceeding state.\n", ea_endpoint->ep_serial); + break; + } + call_alerting(portlist, message_type, param); + break; + + /* CALL sends CONNECT message */ + case MESSAGE_CONNECT: + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) epoint with terminal '%s' (caller id '%s') received connect\n", ea_endpoint->ep_serial, e_terminal, e_callerinfo.id); + if (e_state!=EPOINT_STATE_IN_OVERLAP + && e_state!=EPOINT_STATE_IN_PROCEEDING + && e_state!=EPOINT_STATE_IN_ALERTING) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) ignored because we are not in setup, proceeding or alerting state.\n", ea_endpoint->ep_serial); + break; + } + call_connect(portlist, message_type, param); + break; + + /* CALL sends DISCONNECT/RELEASE message */ + case MESSAGE_DISCONNECT: /* call disconnect */ + case MESSAGE_RELEASE: /* call releases */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) epoint with terminal '%s' (caller id '%s') received %s with cause %d location %d\n", ea_endpoint->ep_serial, e_terminal, e_callerinfo.id, (message_type==MESSAGE_DISCONNECT)?"disconnect":"release", param->disconnectinfo.cause, param->disconnectinfo.location); + call_disconnect_release(portlist, message_type, param); + break; + + /* CALL sends SETUP message */ + case MESSAGE_SETUP: + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) epoint received setup from terminal='%s',id='%s' to id='%s' (dialing itype=%d)\n", ea_endpoint->ep_serial, param->setup.callerinfo.intern, param->setup.callerinfo.id, param->setup.dialinginfo.number, param->setup.dialinginfo.itype); + call_setup(portlist, message_type, param); + return; + break; + + /* CALL sends special mISDNSIGNAL message */ + case MESSAGE_mISDNSIGNAL: /* isdn message to port */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) epoint with terminal '%s' (caller id '%s') received mISDNsignal message.\n", ea_endpoint->ep_serial, e_terminal, e_callerinfo.id); + call_mISDNsignal(portlist, message_type, param); + break; + + /* CALL has pattern available */ + case MESSAGE_PATTERN: /* indicating pattern available */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) epoint with terminal '%s' (caller id '%s') received pattern availability.\n", ea_endpoint->ep_serial, e_terminal, e_callerinfo.id); + if (!e_call_pattern) + { + PDEBUG(DEBUG_EPOINT, "-> pattern becomes available\n"); + e_call_pattern = 1; + SCPY(e_tone, ""); + while(portlist) + { + set_tone(portlist, NULL); + portlist = portlist->next; + } + /* connect our audio tx and rx (blueboxing should be possibe before connect :)*/ + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, MESSAGE_CHANNEL); + message->param.channel = CHANNEL_STATE_CONNECT; + message_put(message); + /* tell remote epoint to connect audio also, because we like to hear the patterns */ + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, MESSAGE_REMOTE_AUDIO); + message->param.channel = CHANNEL_STATE_CONNECT; + message_put(message); + } + break; + + /* CALL has no pattern available */ + case MESSAGE_NOPATTERN: /* indicating no pattern available */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) epoint with terminal '%s' (caller id '%s') received pattern NOT available.\n", ea_endpoint->ep_serial, e_terminal, e_callerinfo.id); + if (e_call_pattern) + { + PDEBUG(DEBUG_EPOINT, "-> pattern becomes unavailable\n"); + e_call_pattern = 0; + /* disconnect our audio tx and rx */ + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, MESSAGE_CHANNEL); + message->param.channel = CHANNEL_STATE_HOLD; + message_put(message); + } + break; + + /* CALL (dunno at the moment) */ + case MESSAGE_REMOTE_AUDIO: + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) epoint with terminal '%s' (caller id '%s') received audio remote request.\n", ea_endpoint->ep_serial, e_terminal, e_callerinfo.id); + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, MESSAGE_CHANNEL); + message->param.channel = param->channel; + message_put(message); + break; + + /* CALL sends a notify message */ + case MESSAGE_NOTIFY: + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) epoint with terminal '%s' (caller id '%s') received notify.\n", ea_endpoint->ep_serial, e_terminal, e_callerinfo.id); + call_notify(portlist, message_type, param); + break; + + default: + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) epoint with terminal '%s' (caller id '%s') received a wrong message: #%d\n", ea_endpoint->ep_serial, e_terminal, e_callerinfo.id, message); + } +} + + +/* pick_call will connect the first incoming call found. the endpoint + * will receivce a MESSAGE_CONNECT. + */ +int match_list(char *list, char *item) +{ + char *end, *next = NULL; + + /* no list make matching */ + if (!list) + return(1); + + while(42) + { + /* eliminate white spaces */ + while (*list <= ' ') + list++; + if (*list == ',') + { + list++; + continue; + } + /* if end of list is reached, we return */ + if (list[0] == '\0') + return(0); + /* if we have more than one entry (left) */ + if ((end = strchr(list, ','))) + next = end + 1; + else + next = end = strchr(list, '\0'); + while (*(end-1) <= ' ') + end--; + /* if string part matches item */ + if (!strncmp(list, item, end-list)) + return(1); + list = next; + } +} + +void EndpointAppPBX::pick_call(char *extensions) +{ + struct message *message; + struct port_list *portlist; + class Port *port; + class EndpointAppPBX *eapp, *found; + class Call *call; + class CallPBX *callpbx; + struct call_relation *relation; + int vbox; + + /* find an endpoint that is ringing internally or vbox with higher priority */ + vbox = 0; + found = NULL; + eapp = apppbx_first; + while(eapp) + { + if (eapp!=this && ea_endpoint->ep_portlist) + { + portlist = eapp->ea_endpoint->ep_portlist; + while(portlist) + { + if ((port = find_port_id(portlist->port_id))) + { + if (port->p_type == PORT_TYPE_VBOX_OUT) + { + if (match_list(extensions, eapp->e_terminal)) + { + found = eapp; + vbox = 1; + break; + } + } + if ((port->p_type==PORT_TYPE_DSS1_NT_OUT || port->p_type==PORT_TYPE_DSS1_TE_OUT) + && port->p_state==PORT_STATE_OUT_ALERTING) + if (match_list(extensions, eapp->e_terminal)) + { + found = eapp; + } + } + portlist = portlist->next; + } + if (portlist) + break; + } + eapp = eapp->next; + } + + /* if no endpoint found */ + if (!found) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) nobody is ringing internally (or we don't have her in the access list), so we disconnect.\n", ea_endpoint->ep_serial); +reject: + set_tone(ea_endpoint->ep_portlist, "cause_10"); + message_disconnect_port(ea_endpoint->ep_portlist, CAUSE_NORMAL, LOCATION_PRIVATE_LOCAL, ""); + new_state(EPOINT_STATE_OUT_DISCONNECT); + return; + } + eapp = found; + + if (ea_endpoint->ep_call_id) + { + PERROR("EPOINT(%d) we already have a call. SOFTWARE ERROR.\n", ea_endpoint->ep_serial); + goto reject; + } + if (!eapp->ea_endpoint->ep_call_id) + { + PERROR("EPOINT(%d) ringing endpoint has no call.\n", ea_endpoint->ep_serial); + goto reject; + } + call = find_call_id(eapp->ea_endpoint->ep_call_id); + if (!call) + { + PERROR("EPOINT(%d) ringing endpoint's call not found.\n", ea_endpoint->ep_serial); + goto reject; + } + if (callpbx->c_type != CALL_TYPE_PBX) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) ringing endpoint's call is not a PBX call, so we must reject.\n", ea_endpoint->ep_serial); + goto reject; + } + callpbx = (class CallPBX *)call; + relation = callpbx->c_relation; + if (!relation) + { + PERROR("EPOINT(%d) ringing endpoint's call has no relation. SOFTWARE ERROR.\n", ea_endpoint->ep_serial); + goto reject; + } + while (relation->epoint_id != eapp->ea_endpoint->ep_serial) + { + relation = relation->next; + if (!relation) + { + PERROR("EPOINT(%d) ringing endpoint's call has no relation to that call. SOFTWARE ERROR.\n", ea_endpoint->ep_serial); + goto reject; + } + } + + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) found ringing endpoint: %d.\n", ea_endpoint->ep_serial, eapp->ea_endpoint->ep_serial); + + if (options.deb & DEBUG_EPOINT) + { + class Call *debug_c = call_first; + class Endpoint *debug_e = epoint_first; + class Port *debug_p = port_first; + + callpbx_debug(callpbx, "EndpointAppPBX::pick_call(before)"); + + PDEBUG(DEBUG_EPOINT, "showing all calls:\n"); + while(debug_c) + { + PDEBUG(DEBUG_EPOINT, "call=%ld\n", debug_c->c_serial); + debug_c = debug_c->next; + } + PDEBUG(DEBUG_EPOINT, "showing all endpoints:\n"); + while(debug_e) + { + PDEBUG(DEBUG_EPOINT, "ep=%ld, call=%ld\n", debug_e->ep_serial, debug_e->ep_call_id); + debug_e = debug_e->next; + } + PDEBUG(DEBUG_EPOINT, "showing all ports:\n"); + while(debug_p) + { + PDEBUG(DEBUG_EPOINT, "port=%ld, ep=%ld (active)\n", debug_p->p_serial, ACTIVE_EPOINT(debug_p->p_epointlist)); + debug_p = debug_p->next; + } + } + + /* relink call */ + ea_endpoint->ep_call_id = eapp->ea_endpoint->ep_call_id; /* we get the call */ + relation->epoint_id = ea_endpoint->ep_serial; /* the call gets us */ + eapp->ea_endpoint->ep_call_id = 0; /* the ringing endpoint will get disconnected */ + + /* connnecting our endpoint */ + new_state(EPOINT_STATE_CONNECT); + e_dtmf = 1; + set_tone(ea_endpoint->ep_portlist, NULL); + + /* now we send a release to the ringing endpoint */ + message = message_create(ea_endpoint->ep_call_id, eapp->ea_endpoint->ep_serial, CALL_TO_EPOINT, MESSAGE_RELEASE); + message->param.disconnectinfo.cause = 26; /* non selected user clearing */ + message->param.disconnectinfo.location = LOCATION_PRIVATE_LOCAL; + message_put(message); + + /* we send a connect to the call with our caller id */ + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, MESSAGE_CONNECT); + SCPY(message->param.connectinfo.id, e_callerinfo.id); + message->param.connectinfo.present = e_callerinfo.present; + message->param.connectinfo.screen = e_callerinfo.screen; + message->param.connectinfo.itype = e_callerinfo.itype; + message->param.connectinfo.ntype = e_callerinfo.ntype; + message_put(message); + + /* we send a connect to our port with the remote callerid */ + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_portlist->port_id, EPOINT_TO_PORT, MESSAGE_CONNECT); + SCPY(message->param.connectinfo.id, eapp->e_callerinfo.id); + message->param.connectinfo.present = eapp->e_callerinfo.present; + message->param.connectinfo.screen = eapp->e_callerinfo.screen; + message->param.connectinfo.itype = eapp->e_callerinfo.itype; + message->param.connectinfo.ntype = eapp->e_callerinfo.ntype; + /* handle restricted caller ids */ + apply_callerid_restriction(e_ext.anon_ignore, ea_endpoint->ep_portlist->port_type, message->param.connectinfo.id, &message->param.connectinfo.ntype, &message->param.connectinfo.present, &message->param.connectinfo.screen, message->param.connectinfo.voip, message->param.connectinfo.intern, message->param.connectinfo.name); + /* display callerid if desired for extension */ + SCPY(message->param.connectinfo.display, apply_callerid_display(message->param.connectinfo.id, message->param.connectinfo.itype, message->param.connectinfo.ntype, message->param.connectinfo.present, message->param.connectinfo.screen, message->param.connectinfo.voip, message->param.connectinfo.intern, message->param.connectinfo.name)); + message_put(message); + + /* we send a connect to the audio path (not for vbox) */ + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, MESSAGE_CHANNEL); + message->param.channel = CHANNEL_STATE_CONNECT; + message_put(message); + + /* beeing paranoid, we make call update */ + callpbx->c_mixer = 1; + + if (options.deb & DEBUG_EPOINT) + { + class Call *debug_c = call_first; + class Endpoint *debug_e = epoint_first; + class Port *debug_p = port_first; + + callpbx_debug(callpbx, "EndpointAppPBX::pick_call(after)"); + + PDEBUG(DEBUG_EPOINT, "showing all calls:\n"); + while(debug_c) + { + PDEBUG(DEBUG_EPOINT, "call=%ld\n", debug_c->c_serial); + debug_c = debug_c->next; + } + PDEBUG(DEBUG_EPOINT, "showing all endpoints:\n"); + while(debug_e) + { + PDEBUG(DEBUG_EPOINT, "ep=%ld, call=%ld\n", debug_e->ep_serial, debug_e->ep_call_id); + debug_e = debug_e->next; + } + PDEBUG(DEBUG_EPOINT, "showing all ports:\n"); + while(debug_p) + { + PDEBUG(DEBUG_EPOINT, "port=%ld, ep=%ld\n", debug_p->p_serial, ACTIVE_EPOINT(debug_p->p_epointlist)); + debug_p = debug_p->next; + } + } +} + + +/* join calls (look for a call that is on hold (same isdn interface/terminal)) + */ +void EndpointAppPBX::join_call(void) +{ + struct message *message; + struct call_relation *our_relation, *other_relation; + struct call_relation **our_relation_pointer, **other_relation_pointer; + class Call *our_call, *other_call; + class CallPBX *our_callpbx, *other_callpbx; + class EndpointAppPBX *other_eapp; class Endpoint *temp_epoint; + class Port *our_port, *other_port; + class Pdss1 *our_pdss1, *other_pdss1; + + /* are we a candidate to join a call */ + our_call = find_call_id(ea_endpoint->ep_call_id); + if (!our_call) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) cannot join: our call doesn't exist anymore.\n", ea_endpoint->ep_serial); + return; + } + if (our_call->c_type != CALL_TYPE_PBX) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) cannot join: call is not a pbx call.\n", ea_endpoint->ep_serial); + return; + } + our_callpbx = (class CallPBX *)our_call; + if (!ea_endpoint->ep_portlist) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) cannot join: we have no port.\n", ea_endpoint->ep_serial); + return; + } + if (!e_terminal[0]) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) cannot join: we are not internal extension.\n", ea_endpoint->ep_serial); + return; + } + our_port = find_port_id(ea_endpoint->ep_portlist->port_id); + if (!our_port) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) cannot join: our port doesn't exist anymore.\n", ea_endpoint->ep_serial); + return; + } + if ((our_port->p_type&PORT_CLASS_mISDN_MASK) != PORT_CLASS_mISDN_DSS1) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) cannot join: our port is not isdn.\n", ea_endpoint->ep_serial); + return; + } + our_pdss1 = (class Pdss1 *)our_port; + + /* find an endpoint that is on hold and has the same mISDNport that we are on */ + other_eapp = apppbx_first; + while(other_eapp) + { + if (other_eapp == this) + { + other_eapp = other_eapp->next; + continue; + } + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) comparing other endpoint candiate: (ep%d) terminal='%s' port=%s call=%d.\n", ea_endpoint->ep_serial, other_eapp->ea_endpoint->ep_serial, other_eapp->e_terminal, (other_eapp->ea_endpoint->ep_portlist)?"YES":"NO", other_eapp->ea_endpoint->ep_call_id); + if (other_eapp->e_terminal[0] /* has terminal */ + && other_eapp->ea_endpoint->ep_portlist /* has port */ + && other_eapp->ea_endpoint->ep_call_id) /* has call */ + { + other_port = find_port_id(other_eapp->ea_endpoint->ep_portlist->port_id); + if (other_port) /* port still exists */ + { + if (other_port->p_type==PORT_TYPE_DSS1_NT_OUT + || other_port->p_type==PORT_TYPE_DSS1_NT_IN) /* port is internal isdn */ + { + other_pdss1 = (class Pdss1 *)other_port; + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) comparing other endpoint's port is of type isdn! comparing our portnum=%d with other's portnum=%d hold=%s ces=%d\n", ea_endpoint->ep_serial, our_pdss1->p_m_mISDNport->portnum, other_pdss1->p_m_mISDNport->portnum, (other_pdss1->p_m_hold)?"YES":"NO", other_pdss1->p_m_d_ces); + if (other_pdss1->p_m_hold /* port is on hold */ + && other_pdss1->p_m_mISDNport == our_pdss1->p_m_mISDNport /* same isdn interface */ + && other_pdss1->p_m_d_ces == our_pdss1->p_m_d_ces) /* same tei+sapi */ + break; + } else + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) comparing other endpoint's port is of other type!\n", ea_endpoint->ep_serial); + } + } else + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) comparing other endpoint's port doesn't exist enymore.\n", ea_endpoint->ep_serial); + } + } + other_eapp = other_eapp->next; + } + if (!other_eapp) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) cannot join: no other endpoint on same isdn interface with port on hold.\n", ea_endpoint->ep_serial); + return; + } + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) port on hold found.\n", ea_endpoint->ep_serial); + + /* if we have the same call */ + if (other_eapp->ea_endpoint->ep_call_id == ea_endpoint->ep_call_id) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) cannot join: we an the other have the same call.\n", ea_endpoint->ep_serial); + return; + } + other_call = find_call_id(other_eapp->ea_endpoint->ep_call_id); + if (!other_call) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) cannot join: other call doesn't exist anymore.\n", ea_endpoint->ep_serial); + return; + } + if (other_call->c_type != CALL_TYPE_PBX) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) cannot join: other call is not a pbx call.\n", ea_endpoint->ep_serial); + return; + } + other_callpbx = (class CallPBX *)other_call; + if (our_callpbx->c_partyline && other_callpbx->c_partyline) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) cannot join: both calls are partylines.\n", ea_endpoint->ep_serial); + return; + } + + /* remove relation to endpoint for call on hold */ + other_relation = other_callpbx->c_relation; + other_relation_pointer = &other_callpbx->c_relation; + while(other_relation) + { + if (other_relation->epoint_id == other_eapp->ea_endpoint->ep_serial) + { + /* detach other endpoint on hold */ + *other_relation_pointer = other_relation->next; + memset(other_relation, 0, sizeof(struct call_relation)); + free(other_relation); + cmemuse--; + other_relation = *other_relation_pointer; + other_eapp->ea_endpoint->ep_call_id = NULL; + continue; + } + + /* change call/hold pointer of endpoint to the new call */ + temp_epoint = find_epoint_id(other_relation->epoint_id); + if (temp_epoint) + { + if (temp_epoint->ep_call_id == other_call->c_serial) + temp_epoint->ep_call_id = our_call->c_serial; + } + + other_relation_pointer = &other_relation->next; + other_relation = other_relation->next; + } + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) endpoint on hold removed, other enpoints on call relinked (to our call).\n", ea_endpoint->ep_serial); + + /* join call relations */ + our_relation = our_callpbx->c_relation; + our_relation_pointer = &our_callpbx->c_relation; + while(our_relation) + { + our_relation_pointer = &our_relation->next; + our_relation = our_relation->next; + } + *our_relation_pointer = other_callpbx->c_relation; + other_callpbx->c_relation = NULL; + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) relations joined.\n", ea_endpoint->ep_serial); + + /* release endpoint on hold */ + message = message_create(other_callpbx->c_serial, other_eapp->ea_endpoint->ep_serial, CALL_TO_EPOINT, MESSAGE_RELEASE); + message->param.disconnectinfo.cause = CAUSE_NORMAL; /* normal */ + message->param.disconnectinfo.location = LOCATION_PRIVATE_LOCAL; + message_put(message); + + /* if we are not a partyline, we get partyline state from other call */ + our_callpbx->c_partyline += other_callpbx->c_partyline; + + /* remove empty call */ + delete other_call; + PDEBUG(DEBUG_EPOINT, "EPOINT(%d)d-call completely removed!\n"); + + /* mixer must update */ + our_callpbx->c_mixer = 1; /* update mixer flag */ + + /* we send a retrieve to that endpoint */ + // mixer will update the hold-state of the call and send it to the endpoints is changes +} + + +/* check if we have an external call + * this is used to check for encryption ability + */ +int EndpointAppPBX::check_external(char **errstr, class Port **port) +{ + struct call_relation *relation; + class Call *call; + class CallPBX *callpbx; + class Endpoint *epoint; + + /* some paranoia check */ + if (!ea_endpoint->ep_portlist) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) error: we have no port.\n", ea_endpoint->ep_serial); + *errstr = "No Call"; + return(1); + } + if (!e_terminal[0]) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) error: we are not internal extension.\n", ea_endpoint->ep_serial); + *errstr = "No Call"; + return(1); + } + + /* check if we have a call with 2 parties */ + call = find_call_id(ea_endpoint->ep_call_id); + if (!call) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) we have currently no call.\n", ea_endpoint->ep_serial); + *errstr = "No Call"; + return(1); + } + if (call->c_type != CALL_TYPE_PBX) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) call is nto a pbx call.\n", ea_endpoint->ep_serial); + *errstr = "No PBX Call"; + return(1); + } + callpbx = (class CallPBX *)call; + relation = callpbx->c_relation; + if (!relation) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) call has no relation.\n", ea_endpoint->ep_serial); + *errstr = "No Call"; + return(1); + } + if (!relation->next) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) call has no 2nd relation.\n", ea_endpoint->ep_serial); + *errstr = "No Call"; + return(1); + } + if (relation->next->next) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) call has more than two relations.\n", ea_endpoint->ep_serial); + *errstr = "Err: Conference"; + return(1); + } + if (relation->epoint_id == ea_endpoint->ep_serial) + { + relation = relation->next; + if (relation->epoint_id == ea_endpoint->ep_serial) + { + PERROR("EPOINT(%d) SOFTWARE ERROR: both call relations are related to our endpoint.\n", ea_endpoint->ep_serial); + *errstr = "Software Error"; + return(1); + } + } + + /* check remote port for external call */ + epoint = find_epoint_id(relation->epoint_id); + if (!epoint) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) call has no 2nd endpoint.\n", ea_endpoint->ep_serial); + *errstr = "No Call"; + return(1); + } + if (!epoint->ep_portlist) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) 2nd endpoint has not port.\n", ea_endpoint->ep_serial); + *errstr = "No Call"; + return(1); + } + *port = find_port_id(epoint->ep_portlist->port_id); + if (!(*port)) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) 2nd endpoint has an none existing port.\n", ea_endpoint->ep_serial); + *errstr = "No Call"; + return(1); + } + if (((*port)->p_type&PORT_CLASS_mISDN_MASK)!=PORT_CLASS_mISDN_DSS1) /* port is not external isdn */ + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) 2nd endpoint has not an external port.\n", ea_endpoint->ep_serial); + *errstr = "No Ext Call"; + return(1); + } + if ((*port)->p_state != PORT_STATE_CONNECT) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) 2nd endpoint's port is not in connected state.\n", ea_endpoint->ep_serial); + *errstr = "No Ext Connect"; + return(1); + } + return(0); +} + +void EndpointAppPBX::logmessage(struct message *message) +{ + class Port *port; + class Pdss1 *pdss1; + char *logtext = "unknown"; + char buffer[64]; + + if (message->flow != EPOINT_TO_PORT) + { + PERROR("EPOINT(%d) message not of correct flow type-\n", ea_endpoint->ep_serial); + return; + } + + switch(message->type) + { + case MESSAGE_SETUP: + port = find_port_id(message->id_to); + if (!port) + return; + if (port->p_type == PORT_TYPE_DSS1_NT_OUT) + { + pdss1 = (class Pdss1 *)port; + printlog("%3d outgoing SETUP from %s='%s'%s%s%s%s to intern='%s' port='%d' (NT)\n", + ea_endpoint->ep_serial, + (message->param.setup.callerinfo.intern[0])?"intern":"extern", + (message->param.setup.callerinfo.intern[0])?e_callerinfo.intern:e_callerinfo.id, + (message->param.setup.callerinfo.present==INFO_PRESENT_RESTRICTED)?" anonymous":"", + (message->param.setup.redirinfo.id[0])?"redirected='":"", + message->param.setup.redirinfo.id, + (message->param.setup.redirinfo.id[0])?"'":"", + message->param.setup.dialinginfo.number, + pdss1->p_m_mISDNport->portnum + ); + } + if (port->p_type == PORT_TYPE_DSS1_TE_OUT) + { + pdss1 = (class Pdss1 *)port; + printlog("%3d outgoing SETUP from %s='%s'%s%s%s%s to extern='%s' port='%d' (TE)\n", + ea_endpoint->ep_serial, + (message->param.setup.callerinfo.intern[0])?"intern":"extern", + (message->param.setup.callerinfo.intern[0])?e_callerinfo.intern:e_callerinfo.id, + (message->param.setup.callerinfo.present==INFO_PRESENT_RESTRICTED)?" anonymous":"", + (message->param.setup.redirinfo.id[0])?"redirected='":"", + message->param.setup.redirinfo.id, + (message->param.setup.redirinfo.id[0])?"'":"", + message->param.setup.dialinginfo.number, + pdss1->p_m_mISDNport->portnum + ); + } + if (port->p_type == PORT_TYPE_H323_OUT) + { + printlog("%3d outgoing SETUP from %s='%s'%s%s%s%s to h323='%s'\n", + ea_endpoint->ep_serial, + (message->param.setup.callerinfo.intern[0])?"intern":"extern", + (message->param.setup.callerinfo.intern[0])?e_callerinfo.intern:e_callerinfo.id, + (message->param.setup.callerinfo.present==INFO_PRESENT_RESTRICTED)?" anonymous":"", + (message->param.setup.redirinfo.id[0])?"redirected='":"", + message->param.setup.redirinfo.id, + (message->param.setup.redirinfo.id[0])?"'":"", + message->param.setup.dialinginfo.number + ); + } + if (port->p_type == PORT_TYPE_SIP_OUT) + { + printlog("%3d outgoing SETUP from %s='%s'%s%s%s%s to sip='%s'\n", + ea_endpoint->ep_serial, + (message->param.setup.callerinfo.intern[0])?"intern":"extern", + (message->param.setup.callerinfo.intern[0])?e_callerinfo.intern:e_callerinfo.id, + (message->param.setup.callerinfo.present==INFO_PRESENT_RESTRICTED)?" anonymous":"", + (message->param.setup.redirinfo.id[0])?"redirected='":"", + message->param.setup.redirinfo.id, + (message->param.setup.redirinfo.id[0])?"'":"", + message->param.setup.dialinginfo.number + ); + } + if (port->p_type == PORT_TYPE_VBOX_OUT) + { + printlog("%3d outgoing SETUP from %s='%s'%s%s%s%s to vbox='%s'\n", + ea_endpoint->ep_serial, + (message->param.setup.callerinfo.intern[0])?"intern":"extern", + (message->param.setup.callerinfo.intern[0])?e_callerinfo.intern:e_callerinfo.id, + (message->param.setup.callerinfo.present==INFO_PRESENT_RESTRICTED)?" anonymous":"", + (message->param.setup.redirinfo.id[0])?"redirected='":"", + message->param.setup.redirinfo.id, + (message->param.setup.redirinfo.id[0])?"'":"", + message->param.setup.dialinginfo.number + ); + } + break; + + case MESSAGE_OVERLAP: + printlog("%3d outgoing SETUP ACKNOWLEDGE\n", + ea_endpoint->ep_serial + ); + break; + + case MESSAGE_PROCEEDING: + printlog("%3d outgoing PROCEEDING\n", + ea_endpoint->ep_serial + ); + break; + + case MESSAGE_ALERTING: + printlog("%3d outgoing ALERTING\n", + ea_endpoint->ep_serial + ); + break; + + case MESSAGE_CONNECT: + printlog("%3d outgoing CONNECT id='%s'%s\n", + ea_endpoint->ep_serial, + message->param.connectinfo.id, + (message->param.connectinfo.present==INFO_PRESENT_RESTRICTED)?" anonymous":"" + ); + break; + + case MESSAGE_DISCONNECT: + printlog("%3d outgoing DISCONNECT cause='%d' (%s) location='%d' (%s) display='%s'\n", + ea_endpoint->ep_serial, + message->param.disconnectinfo.cause, + (message->param.disconnectinfo.cause>0 && message->param.disconnectinfo.cause<128)?isdn_cause[message->param.disconnectinfo.cause].english:"-", + message->param.disconnectinfo.location, + (message->param.disconnectinfo.location>=0 && message->param.disconnectinfo.location<16)?isdn_location[message->param.disconnectinfo.location].english:"-", + message->param.disconnectinfo.display + ); + break; + + case MESSAGE_RELEASE: + printlog("%3d outgoing RELEASE cause='%d' (%s) location='%d' (%s)\n", + ea_endpoint->ep_serial, + message->param.disconnectinfo.cause, + (message->param.disconnectinfo.cause>0 && message->param.disconnectinfo.cause<128)?isdn_cause[message->param.disconnectinfo.cause].english:"-", + message->param.disconnectinfo.location, + (message->param.disconnectinfo.location>=0 && message->param.disconnectinfo.location<16)?isdn_location[message->param.disconnectinfo.location].english:"-" + ); + break; + + case MESSAGE_NOTIFY: + switch(message->param.notifyinfo.notify) + { + case 0x00: + logtext = "NULL"; + break; + case 0x80: + logtext = "USER_SUSPENDED"; + break; + case 0x82: + logtext = "BEARER_SERVICE_CHANGED"; + break; + case 0x81: + logtext = "USER_RESUMED"; + break; + case 0xc2: + logtext = "CONFERENCE_ESTABLISHED"; + break; + case 0xc3: + logtext = "CONFERENCE_DISCONNECTED"; + break; + case 0xc4: + logtext = "OTHER_PARTY_ADDED"; + break; + case 0xc5: + logtext = "ISOLATED"; + break; + case 0xc6: + logtext = "REATTACHED"; + break; + case 0xc7: + logtext = "OTHER_PARTY_ISOLATED"; + break; + case 0xc8: + logtext = "OTHER_PARTY_REATTACHED"; + break; + case 0xc9: + logtext = "OTHER_PARTY_SPLIT"; + break; + case 0xca: + logtext = "OTHER_PARTY_DISCONNECTED"; + break; + case 0xcb: + logtext = "CONFERENCE_FLOATING"; + break; + case 0xcc: + logtext = "CONFERENCE_DISCONNECTED_PREEMTED"; + break; + case 0xcf: + logtext = "CONFERENCE_FLOATING_SERVED_USER_PREEMTED"; + break; + case 0xe0: + logtext = "CALL_IS_A_WAITING_CALL"; + break; + case 0xe8: + logtext = "DIVERSION_ACTIVATED"; + break; + case 0xe9: + logtext = "RESERVED_CT_1"; + break; + case 0xea: + logtext = "RESERVED_CT_2"; + break; + case 0xee: + logtext = "REVERSE_CHARGING"; + break; + case 0xf9: + logtext = "REMOTE_HOLD"; + break; + case 0xfa: + logtext = "REMOTE_RETRIEVAL"; + break; + case 0xfb: + logtext = "CALL_IS_DIVERTING"; + break; + default: + SPRINT(buffer, "indicator=%d", message->param.notifyinfo.notify - 0x80); + logtext = buffer; + + } + printlog("%3d outgoing NOTIFY notify='%s' id='%s'%s display='%s'\n", + ea_endpoint->ep_serial, + logtext, + message->param.notifyinfo.id, + (message->param.notifyinfo.present==INFO_PRESENT_RESTRICTED)?" anonymous":"", + message->param.notifyinfo.display + ); + break; + + case MESSAGE_INFORMATION: + printlog("%3d outgoing INFORMATION information='%s'\n", + ea_endpoint->ep_serial, + message->param.information.number + ); + break; + + case MESSAGE_FACILITY: + printlog("%3d outgoing FACILITY len='%d'\n", + ea_endpoint->ep_serial, + message->param.facilityinfo.len + ); + break; + + case MESSAGE_TONE: + printlog("%3d outgoing TONE dir='%s' name='%s'\n", + ea_endpoint->ep_serial, + message->param.tone.dir, + message->param.tone.name + ); + break; + + default: + PERROR("EPOINT(%d) message not of correct type (%d)\n", ea_endpoint->ep_serial, message->type); + } +} + +void EndpointAppPBX::message_disconnect_port(struct port_list *portlist, int cause, int location, char *display) +{ + struct message *message; + + if (!portlist) + return; + if (!portlist->port_id) + return; + + if (!e_connectedmode) + { + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_DISCONNECT); + message->param.disconnectinfo.cause = cause; + message->param.disconnectinfo.location = location; + if (display[0]) + SCPY(message->param.disconnectinfo.display, display); + else + SCPY(message->param.disconnectinfo.display, get_isdn_cause(cause, location, e_ext.display_cause)); + } else + { + message = message_create(ea_endpoint->ep_serial, portlist->port_id, EPOINT_TO_PORT, MESSAGE_NOTIFY); + if (display[0]) + SCPY(message->param.notifyinfo.display, display); + else + SCPY(message->param.notifyinfo.display, get_isdn_cause(cause, location, e_ext.display_cause)); + } + message_put(message); + logmessage(message); +} diff --git a/apppbx.h b/apppbx.h new file mode 100644 index 0000000..e424b2f --- /dev/null +++ b/apppbx.h @@ -0,0 +1,357 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** EndpointAppPBX header file ** +** ** +\*****************************************************************************/ + + +enum { /* release actions: see epoint.release */ + RELEASE_NONE, + RELEASE_CALL, /* call, hold */ + RELEASE_PORT_CALLONLY, /* call, port */ + RELEASE_ALL, /* call, hold, port */ +}; + +enum { /* states as viewed from io port (state of calls are always connected) */ + EPOINT_STATE_IDLE, /* no call */ + EPOINT_STATE_IN_SETUP, /* setup sent */ + EPOINT_STATE_OUT_SETUP, /* setup sent */ + EPOINT_STATE_IN_OVERLAP, /* more information */ + EPOINT_STATE_OUT_OVERLAP, /* more information */ + EPOINT_STATE_IN_PROCEEDING, /* proceeding */ + EPOINT_STATE_OUT_PROCEEDING, /* proceeding */ + EPOINT_STATE_IN_ALERTING, /* ringing */ + EPOINT_STATE_OUT_ALERTING, /* ringing */ + EPOINT_STATE_CONNECT, /* connected */ + EPOINT_STATE_IN_DISCONNECT, /* disconnected receiving tones */ + EPOINT_STATE_OUT_DISCONNECT, /* disconnected sending tones */ +}; + +#define EPOINT_STATE_NAMES \ +static char *state_name[] = { \ + "EPOINT_STATE_IDLE", \ + "EPOINT_STATE_IN_SETUP", \ + "EPOINT_STATE_OUT_SETUP", \ + "EPOINT_STATE_IN_OVERLAP", \ + "EPOINT_STATE_OUT_OVERLAP", \ + "EPOINT_STATE_IN_PROCEEDING", \ + "EPOINT_STATE_OUT_PROCEEDING", \ + "EPOINT_STATE_IN_ALERTING", \ + "EPOINT_STATE_OUT_ALERTING", \ + "EPOINT_STATE_CONNECT", \ + "EPOINT_STATE_IN_DISCONNECT", \ + "EPOINT_STATE_OUT_DISCONNECT", \ +}; \ +int state_name_num = sizeof(state_name) / sizeof(char *); + +extern class EndpointAppPBX *apppbx_first; + +/* structure of an EndpointAppPBX */ +class EndpointAppPBX : public EndpointApp +{ + public: + EndpointAppPBX(class Endpoint *epoint); + ~EndpointAppPBX(); + + class EndpointAppPBX *next; + int handler(void); + + int e_hold; /* is this endpoint on hold ? */ + char e_tone[256]; /* save tone for resuming ports */ + + unsigned long e_adminid; + + /* states */ + int e_state; /* state of endpoint */ + char e_terminal[32]; /* real id of terminal, "" for external calls */ + char e_terminal_interface[32];/* current internal isdn interface (usefull for callback to internal phone) */ + struct caller_info e_callerinfo; /* information about the caller */ + struct dialing_info e_dialinginfo; /* information about dialing */ + struct connect_info e_connectinfo; /* information about connected line */ + struct redir_info e_redirinfo; /* info on redirection (to the calling user) */ + struct capa_info e_capainfo; /* info on l3,l2 capacity */ + time_t e_start, e_stop; /* time */ +// int e_origin; /* origin of call */ + struct route_ruleset *e_ruleset; /* current ruleset pointer (NULL=no ruleset) */ + struct route_rule *e_rule; /* current rule pointer (NULL=no rule) */ + struct route_action *e_action; /* current action pointer (NULL=no action) */ + double e_action_timeout; /* when to timeout */ + int e_rule_nesting; /* 'goto'/'menu' recrusion counter to prevent infinie loops */ + double e_match_timeout; /* set for the next possible timeout time */ + struct route_action *e_match_to_action; /* what todo when timeout */ + char *e_match_to_extdialing; /* dialing after matching timeout rule */ + int e_select; /* current selection for various selector options */ + char *e_extdialing; /* dialing after matching rule */ + int e_overlap; /* is set if additional information is/are received after setup */ + struct extension e_ext; /* extension information */ + +// int e_knocking; /* true, if knocking */ +// double e_knocktime; /* next time to knock */ + +// char e_call_tone[64], e_hold_tone[64]; /* current tone */ + int e_call_pattern/*, e_hold_pattern*/; /* pattern available */ + + /* action */ + char e_dialing_queue[32]; /* holds dialing during setup state */ + double e_redial; /* time when redialing 0=off */ + double e_powerdialing; /* on disconnect redial! 0=off, >0=redial time, -1=on */ + double e_powerdelay; /* delay when to redial */ + int e_powercount; /* power count */ + int e_powerlimit; /* power limit */ + double e_callback; /* time when callback (when idle reached) 0=off */ + signed long e_cfnr_release; /* time stamp when to do the release for call forward on no response */ + signed long e_cfnr_call; /* time stamp when to do the call for call forward on no response */ + signed long e_password_timeout; /* time stamp when to do the release for password timeout */ + + /* port relation */ + int e_multipoint_cause; /* cause value of disconnected multiport calls (highest priority) */ + int e_multipoint_location; /* location of cause with highest priority */ + + /* call relation */ + int e_call_cause; + int e_call_location; + + /* callback */ + char e_cbdialing[256]; /* dialing information after callback */ + char e_cbcaller[256]; /* extension for the epoint which calls back */ + char e_cbto[32]; /* override callerid to call back to */ + struct caller_info e_callbackinfo; /* information about the callback caller */ + + /* dtmf stuff */ + int e_connectedmode; /* if the port should stay connected if the enpoint disconnects or releases (usefull for callback) */ + int e_dtmf; /* allow dtmf */ + /* read doc/keypad.txt for more information */ + int e_dtmf_time; /* time when the last key was received. */ + int e_dtmf_last; /* last dtmf key */ + + /* transmit and receive state */ + int e_tx_state; /* current endpoint's state */ + int e_rx_state; /* current endpoint's state */ + + /* vbox playback variables */ + char e_vbox[32]; /* current vbox extension (during playback) */ + int e_vbox_state; /* state of vbox during playback */ + int e_vbox_menu; /* currently selected menu using '*' and '#' */ + char e_vbox_display[128]; /* current display message */ + int e_vbox_display_refresh; /* display must be refreshed du to change */ + int e_vbox_counter; /* current playback counter in seconds */ + int e_vbox_counter_max; /* size of file in seconds */ + int e_vbox_counter_last; /* temp variable to recognise a change in seconds */ + int e_vbox_play; /* current file that is played */ + int e_vbox_speed; /* current speed to play */ + int e_vbox_index_num; /* number of files */ + char e_vbox_index_file[128]; /* current file name */ + int e_vbox_index_hour; /* current time the file recorded... */ + int e_vbox_index_min; + int e_vbox_index_mon; + int e_vbox_index_mday; + int e_vbox_index_year; + char e_vbox_index_callerid[128]; /* current caller id */ + int e_vbox_index_callerid_index; /* next digit to speak */ + + /* efi */ + int e_efi_state; /* current spoken sample */ + int e_efi_digit; /* current spoken digit */ + + /* crypt states and vars */ + int e_crypt; /* current user level crypt state */ + int e_crypt_state; /* current crypt manager state */ + char e_crypt_info[33]; /* last information text */ + int e_crypt_timeout_sec; /* timer */ + int e_crypt_timeout_usec; /* timer */ + unsigned long e_crypt_random; /* current random number for ident */ + unsigned long e_crypt_bogomips; /* bogomips for ident */ + unsigned char e_crypt_key[256]; /* the session key */ + int e_crypt_key_len; + unsigned char e_crypt_ckey[256]; /* the encrypted session key */ + int e_crypt_ckey_len; + unsigned char e_crypt_rsa_n[512]; /* rsa key */ + unsigned char e_crypt_rsa_e[16]; + unsigned char e_crypt_rsa_d[512]; + unsigned char e_crypt_rsa_p[512]; + unsigned char e_crypt_rsa_q[512]; + unsigned char e_crypt_rsa_dmp1[512]; + unsigned char e_crypt_rsa_dmq1[512]; + unsigned char e_crypt_rsa_iqmp[512]; + int e_crypt_rsa_n_len; + int e_crypt_rsa_e_len; + int e_crypt_rsa_d_len; + int e_crypt_rsa_p_len; + int e_crypt_rsa_q_len; + int e_crypt_rsa_dmp1_len; + int e_crypt_rsa_dmq1_len; + int e_crypt_rsa_iqmp_len; + int e_crypt_keyengine_busy; /* current job and busy state */ + int e_crypt_keyengine_return; /* return */ + + /* messages */ + void hookflash(void); + void ea_message_port(unsigned long port_id, int message, union parameter *param); + void port_setup(struct port_list *portlist, int message_type, union parameter *param); + void port_information(struct port_list *portlist, int message_type, union parameter *param); + void port_dtmf(struct port_list *portlist, int message_type, union parameter *param); + void port_crypt(struct port_list *portlist, int message_type, union parameter *param); + void port_overlap(struct port_list *portlist, int message_type, union parameter *param); + void port_proceeding(struct port_list *portlist, int message_type, union parameter *param); + void port_alerting(struct port_list *portlist, int message_type, union parameter *param); + void port_connect(struct port_list *portlist, int message_type, union parameter *param); + void port_disconnect_release(struct port_list *portlist, int message_type, union parameter *param); + void port_timeout(struct port_list *portlist, int message_type, union parameter *param); + void port_notify(struct port_list *portlist, int message_type, union parameter *param); + void port_facility(struct port_list *portlist, int message_type, union parameter *param); + void port_suspend(struct port_list *portlist, int message_type, union parameter *param); + void port_resume(struct port_list *portlist, int message_type, union parameter *param); + void ea_message_call(unsigned long call_id, int message, union parameter *param); + void call_crypt(struct port_list *portlist, int message_type, union parameter *param); + void call_mISDNsignal(struct port_list *portlist, int message_type, union parameter *param); + void call_setup(struct port_list *portlist, int message_type, union parameter *param); + void call_information(struct port_list *portlist, int message_type, union parameter *param); + void call_overlap(struct port_list *portlist, int message_type, union parameter *param); + void call_proceeding(struct port_list *portlist, int message_type, union parameter *param); + void call_alerting(struct port_list *portlist, int message_type, union parameter *param); + void call_connect(struct port_list *portlist, int message_type, union parameter *param); + void call_disconnect_release(struct port_list *portlist, int message_type, union parameter *param); + void call_notify(struct port_list *portlist, int message_type, union parameter *param); + void call_facility(struct port_list *portlist, int message_type, union parameter *param); + + /* epoint */ + void new_state(int state); + void release(int release, int calllocation, int callcause, int portlocation, int portcause); + void notify_active(void); + void keypad_function(char digit); + void set_tone(struct port_list *portlist, char *tone); + void out_setup(void); + char *apply_callerid_display(char *id, int itype, int ntype, int present, int screen, char *h323, char *intern, char *name); + void auth(int job, int bit_num); + + /* vbox playback stuff */ + void vbox_init(void); + void vbox_index_read(int num); + void vbox_index_remove(int num); + void vbox_handler(void); + void efi_message_eof(void); + void vbox_message_eof(void); + void set_tone_vbox(char *tone); + void set_play_vbox(char *file, int offset); + void set_play_speed(int speed); + + /* efi */ + void set_tone_efi(char *tone); + + /* routing */ + struct route_ruleset *rulesetbyname(char *name); + struct route_action *route(struct route_ruleset *ruleset); + struct route_param *routeparam(struct route_action *action, unsigned long long id); + + /* init / dialing / hangup */ + void _action_init_call(int chan); + void action_init_call(void); + void action_init_chan(void); + void action_dialing_internal(void); + void action_dialing_external(void); + void action_dialing_h323(void); + void action_dialing_chan(void); + void action_dialing_vbox_record(void); + void action_init_partyline(void); + void action_hangup_call(void); + void action_dialing_login(void); + void action_init_change_callerid(void); + void _action_callerid_calleridnext(int next); + void action_dialing_callerid(void); + void action_dialing_calleridnext(void); + void action_init_change_forward(void); + void action_dialing_forward(void); + void action_init_redial_reply(void); + void _action_redial_reply(int in); + void action_dialing_redial(void); + void action_dialing_reply(void); + void action_dialing_powerdial(void); + void action_dialing_callback(void); + void action_hangup_callback(void); + void action_dialing_abbrev(void); + void action_dialing_test(void); + void action_init_play(void); + void action_init_vbox_play(void); + void action_init_efi(void); + void action_dialing_vbox_play(void); + void action_dialing_calculator(void); + void action_dialing_timer(void); + void _action_goto_menu(int mode); + void action_dialing_goto(void); + void action_dialing_menu(void); + void action_dialing_disconnect(void); + void action_dialing_help(void); + void action_dialing_deflect(void); + void action_dialing_setforward(void); + void action_hangup_execute(void); + void action_hangup_file(void); + void action_init_pick(void); + void action_dialing_password(void); + void action_dialing_password_wr(void); + void process_dialing(void); + void process_hangup(int cause, int location); + + /* facility function */ + void pick_call(char *extension); + void join_call(void); + void encrypt_shared(void); + void encrypt_keyex(void); + void encrypt_off(void); + void encrypt_result(int message, char *text); + int check_external(char **errstr, class Port **port); + + /* crypt */ + void cryptman_keyengine(int job); + void cryptman_handler(void); + void cr_ident(int message, unsigned char *param, int len); + void cr_activate(int message, unsigned char *param, int len); + void cr_deactivate(int message, unsigned char *param, int len); + void cr_master(int message, unsigned char *param, int len); + void cr_slave(int message, unsigned char *param, int len); + void cr_looped(int message, unsigned char *param, int len); + void cr_abort(int message, unsigned char *param, int len); + void cr_abort_engine(int message, unsigned char *param, int len); + void cr_abort_wait(int message, unsigned char *param, int len); + void cr_genrsa(int message, unsigned char *param, int len); + void cr_keyerror(int message, unsigned char *param, int len); + void cr_pubkey(int message, unsigned char *param, int len); + void cr_cptrsa(int message, unsigned char *param, int len); + void cr_cskey(int message, unsigned char *param, int len); + void cr_decrsa(int message, unsigned char *param, int len); + void cr_waitdelay(int message, unsigned char *param, int len); + void cr_bfactive(int message, unsigned char *param, int len); + void cr_crypterror(int message, unsigned char *param, int len); + void cr_release(int message, unsigned char *param, int len); + void cr_sactivate(int message, unsigned char *param, int len); + void cr_sdeactivate(int message, unsigned char *param, int len); + void cr_sbfactive(int message, unsigned char *param, int len); + void cr_scrypterror(int message, unsigned char *param, int len); + void cr_sabort(int message, unsigned char *param, int len); + void cr_info(int message, unsigned char *param, int len); + void cryptman_message(int message, unsigned char *param, int len); + void cryptman_msg2man(unsigned char *param, int len); + void cryptman_addinf(unsigned char *buf, int buf_size, int element, int len, void *data); + int cryptman_sizeofinf(unsigned char *buf, int element); + unsigned char *cryptman_getinf(unsigned char *buf, int element, unsigned char *to); + void cryptman_msg2peer(unsigned char *buf); + void cryptman_msg2user(int msg, char *text); + void cryptman_msg2crengine(int msg, unsigned char *buf, int len); + void cryptman_state(int state); + void cryptman_timeout(int secs); + + void message_disconnect_port(struct port_list *portlist, int cause, int location, char *display); + void logmessage(struct message *messsage); +}; + + +char *nationalize_callerinfo(char *string, int *type); +char *numberrize_callerinfo(char *string, int type); +void apply_callerid_restriction(int anon_ignore, int port_type, char *id, int *ntype, int *present, int *screen, char *h323, char *intern, char *name); +void send_mail(char *filename, char *callerid, char *callerintern, char *callername, char *vbox_email, int vbox_year, int vbox_mon, int vbox_mday, int vbox_hour, int vbox_min, char *terminal); + + diff --git a/call.cpp b/call.cpp new file mode 100644 index 0000000..a566080 --- /dev/null +++ b/call.cpp @@ -0,0 +1,147 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** call functions ** +** ** +\*****************************************************************************/ + +#include +//#include +//#include +//#include +//#include +//#include +//#include +//#include +#include "main.h" +//#define __u8 unsigned char +//#define __u16 unsigned short +//#define __u32 unsigned long +//#include "linux/isdnif.h" + +unsigned long call_serial = 1; /* must be 1, because 0== no call */ + +//CALL_STATES + +class Call *call_first = NULL; + +/* + * find the call with call_id + */ +class Call *find_call_id(unsigned long call_id) +{ + class Call *call = call_first; + + while(call) + { +//printf("comparing: '%s' with '%s'\n", name, call->c_name); + if (call->c_serial == call_id) + return(call); + call = call->next; + } + + return(NULL); +} + + +/* + * constructor for a new call + */ +Call::Call(class Endpoint *epoint) +{ + class Call **callp; + + if (!epoint) + { + PERROR("software error, epoint is NULL.\n"); + exit(-1); + } + c_serial = call_serial++; + c_type = CALL_TYPE_NONE; + + /* attach to chain */ + next = NULL; + callp = &call_first; + while(*callp) + callp = &((*callp)->next); + *callp = this; + + classuse++; +} + + +/* + * call descructor + */ +Call::~Call() +{ + class Call *cl, **clp; + + classuse--; + + cl = call_first; + clp = &call_first; + while(cl) + { + if (cl == this) + break; + clp = &cl->next; + cl = cl->next; + } + if (!cl) + { + PERROR("software error, call not in chain! exitting\n"); + exit(-1); + } + *clp = cl->next; /* detach from chain */ +} + + + +/* epoint sends a message to a call + * + */ +void Call::message_epoint(unsigned long epoint_id, int message_type, union parameter *param) +{ +} + + +/* call process is called from the main loop + * it processes the current calling state. + * returns 0 if call nothing was done + */ +int Call::handler(void) +{ + return(0); +} + +void Call::release(unsigned long epoint_id, int hold, int location, int cause) +{ +} + +/* free all call structures */ +void call_free(void) +{ + + if (!call_first) + { + PDEBUG(DEBUG_CALL, "no more pending call(s), done!\n"); + return; + } + while(call_first) + { + if (options.deb & DEBUG_CALL) + { + PDEBUG(DEBUG_CALL, "freeing pending call\n"); + } + + delete call_first; + } +} + + + diff --git a/call.h b/call.h new file mode 100644 index 0000000..ff2fc15 --- /dev/null +++ b/call.h @@ -0,0 +1,39 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** call header file ** +** ** +\*****************************************************************************/ + +enum { CALL_TYPE_NONE, CALL_TYPE_PBX, CALL_TYPE_CHAN}; + +/* call + * + * abstraction for pbx calls and asterisk calls + */ + + +class Call +{ + public: + Call(class Endpoint *epoint); + virtual ~Call(); + class Call *next; /* next node in list of calls */ + virtual void message_epoint(unsigned long epoint_id, int message, union parameter *param); + virtual int handler(void); + virtual void release(unsigned long epoint_id, int hold, int location, int cause); + + unsigned long c_type; /* call type (pbx or asterisk) */ + unsigned long c_serial; /* serial/unique number of call */ +}; + +void call_free(void); + +extern class Call *call_first; + +class Call *find_call_id(unsigned long call_id); + diff --git a/callchan.cpp b/callchan.cpp new file mode 100644 index 0000000..0c946c5 --- /dev/null +++ b/callchan.cpp @@ -0,0 +1,87 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** call functions for channel driver ** +** ** +\*****************************************************************************/ + +#include +#include +#include +//#include +//#include +//#include +//#include +//#include +#include "main.h" +//#define __u8 unsigned char +//#define __u16 unsigned short +//#define __u32 unsigned long +//#include "linux/isdnif.h" + + +/* + * constructor for a new call + * the call will have a relation to the calling endpoint + */ +CallChan::CallChan(class Endpoint *epoint) : Call(epoint) +{ + if (!epoint) + { + PERROR("software error, epoint is NULL.\n"); + exit(-1); + } + + PDEBUG(DEBUG_CALL, "creating new call and connecting it to the endpoint.\n"); + + c_type = CALL_TYPE_CHAN; + c_epoint_id = epoint->ep_serial; + + PDEBUG(DEBUG_CALL, "Constructor(new call)"); +} + + +/* + * call descructor + */ +CallChan::~CallChan() +{ + +} + + +/* release call from endpoint + * if the call has two relations, all relations are freed and the call will be + * destroyed + */ +void CallChan::release(unsigned long epoint_id, int hold, int location, int cause) +{ + if (!epoint_id) + { + PERROR("software error, epoint is NULL.\n"); + return; + } + + c_epoint_id = 0; + + PDEBUG(DEBUG_CALL, "call_release(): ended.\n"); +} + + +/* call process is called from the main loop + * it processes the current calling state. + * returns 0 if call nothing was done + */ +int CallChan::handler(void) +{ + return(0); +} + +void CallChan::message_epoint(unsigned long epoint_id, int message_type, union parameter *param) +{ +} + diff --git a/callchan.h b/callchan.h new file mode 100644 index 0000000..080bdbe --- /dev/null +++ b/callchan.h @@ -0,0 +1,24 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** call header file for channel interface ** +** ** +\*****************************************************************************/ + +class CallChan : public Call +{ + public: + CallChan(class Endpoint *epoint); + ~CallChan(); + void message_epoint(unsigned long epoint_id, int message, union parameter *param); + int handler(void); + void release(unsigned long epoint_id, int hold, int location, int cause); + + unsigned long c_epoint_id; +}; + + diff --git a/callpbx.cpp b/callpbx.cpp new file mode 100644 index 0000000..bb644d0 --- /dev/null +++ b/callpbx.cpp @@ -0,0 +1,993 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** call functions ** +** ** +\*****************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "main.h" +#define __u8 unsigned char +#define __u16 unsigned short +#define __u32 unsigned long +#include "linux/isdnif.h" + + +/* notify endpoint about state change (if any) */ +static int notify_state_change(int call_id, int epoint_id, int old_state, int new_state) +{ + int notify_off = 0, notify_on = 0; + struct message *message; + + if (old_state == new_state) + return(old_state); + + switch(old_state) + { + case NOTIFY_STATE_ACTIVE: + switch(new_state) + { + case NOTIFY_STATE_HOLD: + notify_on = INFO_NOTIFY_REMOTE_HOLD; + break; + case NOTIFY_STATE_SUSPEND: + notify_on = INFO_NOTIFY_USER_SUSPENDED; + break; + case NOTIFY_STATE_CONFERENCE: + notify_on = INFO_NOTIFY_CONFERENCE_ESTABLISHED; + break; + } + break; + + case NOTIFY_STATE_HOLD: + switch(new_state) + { + case NOTIFY_STATE_ACTIVE: + notify_off = INFO_NOTIFY_REMOTE_RETRIEVAL; + break; + case NOTIFY_STATE_SUSPEND: + notify_off = INFO_NOTIFY_REMOTE_RETRIEVAL; + notify_on = INFO_NOTIFY_USER_SUSPENDED; + break; + case NOTIFY_STATE_CONFERENCE: + notify_off = INFO_NOTIFY_REMOTE_RETRIEVAL; + notify_on = INFO_NOTIFY_CONFERENCE_ESTABLISHED; + break; + } + break; + + case NOTIFY_STATE_SUSPEND: + switch(new_state) + { + case NOTIFY_STATE_ACTIVE: + notify_off = INFO_NOTIFY_USER_RESUMED; + break; + case NOTIFY_STATE_HOLD: + notify_off = INFO_NOTIFY_USER_RESUMED; + notify_on = INFO_NOTIFY_REMOTE_HOLD; + break; + case NOTIFY_STATE_CONFERENCE: + notify_off = INFO_NOTIFY_USER_RESUMED; + notify_on = INFO_NOTIFY_CONFERENCE_ESTABLISHED; + break; + } + break; + + case NOTIFY_STATE_CONFERENCE: + switch(new_state) + { + case NOTIFY_STATE_ACTIVE: + notify_off = INFO_NOTIFY_CONFERENCE_DISCONNECTED; + break; + case NOTIFY_STATE_HOLD: + notify_off = INFO_NOTIFY_CONFERENCE_DISCONNECTED; + notify_on = INFO_NOTIFY_REMOTE_HOLD; + break; + case NOTIFY_STATE_SUSPEND: + notify_off = INFO_NOTIFY_CONFERENCE_DISCONNECTED; + notify_on = INFO_NOTIFY_USER_SUSPENDED; + break; + } + break; + } + + if (call_id && notify_off) + { + message = message_create(call_id, epoint_id, CALL_TO_EPOINT, MESSAGE_NOTIFY); + message->param.notifyinfo.notify = notify_off; + message_put(message); + } + + if (call_id && notify_on) + { + message = message_create(call_id, epoint_id, CALL_TO_EPOINT, MESSAGE_NOTIFY); + message->param.notifyinfo.notify = notify_on; + message_put(message); + } + + return(new_state); +} + + +/* debug function for call */ +void callpbx_debug(class CallPBX *callpbx, char *function) +{ + struct call_relation *relation; + struct port_list *portlist; + class Endpoint *epoint; + class Port *port; + char buffer[512]; + + if (!(options.deb & DEBUG_CALL)) + return; + + PDEBUG(DEBUG_CALL, "CALL(%d) start (called from %s)\n", callpbx->c_serial, function); + + relation = callpbx->c_relation; + + if (!relation) + PDEBUG(DEBUG_CALL, "call has no relations\n"); + while(relation) + { + epoint = find_epoint_id(relation->epoint_id); + if (!epoint) + { + PDEBUG(DEBUG_CALL, "warning: relations epoint id=%ld doesn't exists!\n", relation->epoint_id); + relation = relation->next; + continue; + } + buffer[0] = '\0'; + UPRINT(strchr(buffer,0), "*** ep%ld", relation->epoint_id); + UPRINT(strchr(buffer,0), " ifs="); + portlist = epoint->ep_portlist; + while(portlist) + { + port = find_port_id(portlist->port_id); + if (port) + UPRINT(strchr(buffer,0), "%s,", port->p_name); + else + UPRINT(strchr(buffer,0), ",", portlist->port_id); + portlist = portlist->next; + } +// UPRINT(strchr(buffer,0), " endpoint=%d on=%s hold=%s", epoint->ep_serial, (epoint->ep_call_id==callpbx->c_serial)?"yes":"no", (epoint->get_hold_id()==callpbx->c_serial)?"yes":"no"); + UPRINT(strchr(buffer,0), " endpoint=%d on=%s", epoint->ep_serial, (epoint->ep_call_id==callpbx->c_serial)?"yes":"no"); + switch(relation->type) + { + case RELATION_TYPE_CALLING: + UPRINT(strchr(buffer,0), " type=CALLING"); + break; + case RELATION_TYPE_SETUP: + UPRINT(strchr(buffer,0), " type=SETUP"); + break; + case RELATION_TYPE_CONNECT: + UPRINT(strchr(buffer,0), " type=CONNECT"); + break; + default: + UPRINT(strchr(buffer,0), " type=unknown"); + break; + } + switch(relation->channel_state) + { + case CHANNEL_STATE_CONNECT: + UPRINT(strchr(buffer,0), " channel=CONNECT"); + break; + case CHANNEL_STATE_HOLD: + UPRINT(strchr(buffer,0), " channel=HOLD"); + break; + default: + UPRINT(strchr(buffer,0), " channel=unknown"); + break; + } + switch(relation->tx_state) + { + case NOTIFY_STATE_ACTIVE: + UPRINT(strchr(buffer,0), " tx_state=ACTIVE"); + break; + case NOTIFY_STATE_HOLD: + UPRINT(strchr(buffer,0), " tx_state=HOLD"); + break; + case NOTIFY_STATE_SUSPEND: + UPRINT(strchr(buffer,0), " tx_state=SUSPEND"); + break; + case NOTIFY_STATE_CONFERENCE: + UPRINT(strchr(buffer,0), " tx_state=CONFERENCE"); + break; + default: + UPRINT(strchr(buffer,0), " tx_state=unknown"); + break; + } + switch(relation->rx_state) + { + case NOTIFY_STATE_ACTIVE: + UPRINT(strchr(buffer,0), " rx_state=ACTIVE"); + break; + case NOTIFY_STATE_HOLD: + UPRINT(strchr(buffer,0), " rx_state=HOLD"); + break; + case NOTIFY_STATE_SUSPEND: + UPRINT(strchr(buffer,0), " rx_state=SUSPEND"); + break; + case NOTIFY_STATE_CONFERENCE: + UPRINT(strchr(buffer,0), " rx_state=CONFERENCE"); + break; + default: + UPRINT(strchr(buffer,0), " rx_state=unknown"); + break; + } + PDEBUG(DEBUG_CALL, "%s\n", buffer); + relation = relation->next; + } + + PDEBUG(DEBUG_CALL, "end\n"); +} + + +/* + * constructor for a new call + * the call will have a relation to the calling endpoint + */ +CallPBX::CallPBX(class Endpoint *epoint) : Call(epoint) +{ + struct call_relation *relation; +// char filename[256]; + + if (!epoint) + { + PERROR("software error, epoint is NULL.\n"); + exit(-1); + } + + PDEBUG(DEBUG_CALL, "creating new call and connecting it to the endpoint.\n"); + + c_type = CALL_TYPE_PBX; + c_caller[0] = '\0'; + c_caller_id[0] = '\0'; + c_dialed[0] = '\0'; + c_todial[0] = '\0'; + c_mixer = 0; + c_partyline = 0; + + /* initialize a relation only to the calling interface */ + relation = c_relation = (struct call_relation *)calloc(1, sizeof(struct call_relation)); + if (!relation) + { + PERROR("no memory, exitting..\n"); + exit(-1); + } + cmemuse++; + memset(relation, 0, sizeof(struct call_relation)); + relation->type = RELATION_TYPE_CALLING; + relation->channel_state = CHANNEL_STATE_HOLD; /* audio is assumed on a new call */ + relation->tx_state = NOTIFY_STATE_ACTIVE; /* new calls always assumed to be active */ + relation->rx_state = NOTIFY_STATE_ACTIVE; /* new calls always assumed to be active */ + relation->epoint_id = epoint->ep_serial; + + + if (options.deb & DEBUG_CALL) + callpbx_debug(this, "CallPBX::Constructor(new call)"); +} + + +/* + * call descructor + */ +CallPBX::~CallPBX() +{ + struct call_relation *relation, *rtemp; + + relation = c_relation; + while(relation) + { + rtemp = relation->next; + memset(relation, 0, sizeof(struct call_relation)); + free(relation); + cmemuse--; + relation = rtemp; + } +} + + +/* mixer sets the mixer of hisax bchannels + * the mixer() will set the mixer for the hisax ports which is done + * at kernel space. + */ +void CallPBX::mixer(void) +{ + struct call_relation *relation; + struct message *message; + int numconnect, relations; + class Endpoint *epoint; + struct port_list *portlist; + class Port *port; + int nodata = 1; + + relation = c_relation; + while(relation) + { + epoint = find_epoint_id(relation->epoint_id); + if (!epoint) + { + PERROR("software error: relation without existing endpoints.\n"); + relation = relation->next; + continue; + } + portlist = epoint->ep_portlist; + if (!portlist) + { + PDEBUG((DEBUG_CALL|DEBUG_PORT), "ignoring relation without interfaces.\n"); +//#warning testing: keep on hold until single audio stream available + relation->channel_state = CHANNEL_STATE_HOLD; + relation = relation->next; + continue; + } + if (portlist->next) + { + PDEBUG((DEBUG_CALL|DEBUG_PORT), "ignoring relation with ep%d due to port_list.\n", epoint->ep_serial); +//#warning testing: keep on hold until single audio stream available + relation->channel_state = CHANNEL_STATE_HOLD; + relation = relation->next; + continue; + } + port = find_port_id(portlist->port_id); + if (!port) + { + PDEBUG((DEBUG_CALL|DEBUG_PORT), "software error: relation without existing port.\n"); + relation = relation->next; + continue; + } + if (port->p_record) + { + PDEBUG(DEBUG_CALL|DEBUG_PORT, "mixer(): relation ep%d does recording, so we must get data from all members.\n", epoint->ep_serial); + if (nodata) + { + PDEBUG(DEBUG_CALL|DEBUG_PORT, "mixer(): at least one endpoint wants data.\n"); + nodata = 0; + } + } + if ((port->p_type&PORT_CLASS_MASK)!=PORT_CLASS_mISDN) + { + PDEBUG((DEBUG_CALL|DEBUG_PORT), "ignoring relation ep%d because it is not mISDN.\n", epoint->ep_serial); + if (nodata) + { + PDEBUG((DEBUG_CALL|DEBUG_PORT), "not all endpoints are mISDN.\n"); + nodata = 0; + } + relation = relation->next; + continue; + } +// remove unconnected parties from conference, also remove remotely disconnected parties so conference will not be disturbed. + if (relation->channel_state == CHANNEL_STATE_CONNECT + && relation->rx_state != NOTIFY_STATE_HOLD + && relation->rx_state != NOTIFY_STATE_SUSPEND) + { + message = message_create(c_serial, relation->epoint_id, CALL_TO_EPOINT, MESSAGE_mISDNSIGNAL); + message->param.mISDNsignal.message = mISDNSIGNAL_CONF; + message->param.mISDNsignal.conf = (c_serial<<1) + 1; + PDEBUG(DEBUG_CALL, "%s +on+ id: 0x%08x\n", port->p_name, message->param.mISDNsignal.conf); + message_put(message); + } else + { + message = message_create(c_serial, relation->epoint_id, CALL_TO_EPOINT, MESSAGE_mISDNSIGNAL); + message->param.mISDNsignal.message = mISDNSIGNAL_CONF; + message->param.mISDNsignal.conf = 0; + PDEBUG(DEBUG_CALL, "%s +off+ id: 0x%08x\n", port->p_name, message->param.mISDNsignal.conf); + message_put(message); + } + relation = relation->next; + } + /* we notify all relations about rxdata. */ + relation = c_relation; + while(relation) + { + message = message_create(c_serial, relation->epoint_id, CALL_TO_EPOINT, MESSAGE_mISDNSIGNAL); + message->param.mISDNsignal.message = mISDNSIGNAL_NODATA; + message->param.mISDNsignal.nodata = nodata; + PDEBUG(DEBUG_CALL, "call %d sets alldata on port %s to %d\n", c_serial, port->p_name, nodata); + message_put(message); + relation = relation->next; + } + + /* count relations and states */ + relation = c_relation; + numconnect = 0; + relations = 0; + while(relation) /* count audio-connected and active relations */ + { + relations ++; + if ((relation->channel_state == CHANNEL_STATE_CONNECT) + && (relation->rx_state != NOTIFY_STATE_SUSPEND) + && (relation->rx_state != NOTIFY_STATE_HOLD)) + numconnect ++; + relation = relation->next; + } + + if (relations==2 && !c_partyline) /* two people just exchange their states */ + { + relation = c_relation; + relation->tx_state = notify_state_change(c_serial, relation->epoint_id, relation->tx_state, relation->next->rx_state); + relation->next->tx_state = notify_state_change(c_serial, relation->next->epoint_id, relation->next->tx_state, relation->rx_state); + } else + if ((relations==1 || numconnect==1) /*&& !c_partyline*/) /* one member in a call, so we put her on hold */ + { + relation = c_relation; + while(relation) + { + if ((relation->channel_state == CHANNEL_STATE_CONNECT) + && (relation->rx_state != NOTIFY_STATE_SUSPEND) + && (relation->rx_state != NOTIFY_STATE_HOLD)) + relation->tx_state = notify_state_change(c_serial, relation->epoint_id, relation->tx_state, NOTIFY_STATE_HOLD); + relation = relation->next; + } + } else + /* if conference/partyline or (more than two members and more than one is connected), so we set conference state */ + { + relation = c_relation; + while(relation) + { + if ((relation->channel_state == CHANNEL_STATE_CONNECT) + && (relation->rx_state != NOTIFY_STATE_SUSPEND) + && (relation->rx_state != NOTIFY_STATE_HOLD)) + relation->tx_state = notify_state_change(c_serial, relation->epoint_id, relation->tx_state, NOTIFY_STATE_CONFERENCE); + relation = relation->next; + } + } +} + + +/* send audio data to endpoints which do not come from an endpoint connected + * to an isdn port and do not go to an endpoint which is connected to an + * isdn port. in this case the mixing cannot be done with kernel space + */ +void CallPBX::call_mixer(unsigned long epoint_from, struct call_relation *relation_from, union parameter *param) +{ + struct call_relation *relation_to; + struct message *message; + + /* skip if source endpoint has NOT audio mode CONNECT */ + if (relation_from->channel_state != CHANNEL_STATE_CONNECT) + { + return; + } + + /* loop all endpoints and skip the endpoint where the audio is from + * so we do not get a loop (echo) + */ + relation_to = c_relation; + while(relation_to) + { + /* skip source endpoint */ + if (relation_to->epoint_id == epoint_from) + { + relation_to = relation_to->next; + continue; + } + + /* skip if destination endpoint has audio mode HOLD */ + if (relation_to->channel_state != CHANNEL_STATE_CONNECT) + { + relation_to = relation_to->next; + continue; + } + + /* now we may send our data to the endpoint where it + * will be delivered to the port + */ +//PDEBUG(DEBUG_CALL, "mixing from %d to %d\n", epoint_from, relation_to->epoint_id); + message = message_create(c_serial, relation_to->epoint_id, CALL_TO_EPOINT, MESSAGE_DATA); + memcpy(&message->param, param, sizeof(union parameter)); + message_put(message); + + relation_to = relation_to->next; + } +} + + +/* release call from endpoint + * if the call has two relations, all relations are freed and the call will be + * destroyed + */ +void CallPBX::release(unsigned long epoint_id, int hold, int location, int cause) +{ + struct call_relation *relation, **relationpointer; + struct message *message; + + class Call *call; + + if (!epoint_id) + { + PERROR("software error, epoint is NULL.\n"); + return; + } + + if (options.deb & DEBUG_CALL) + callpbx_debug(this, "call_release{before}"); + + /* find relation */ + relation = c_relation; + while(relation) + { + if (relation->epoint_id == epoint_id) + break; + relation = relation->next; + } + if (!relation) + { + PERROR("software error, epoint has a call with no relation to the epoint.\n"); + return; + } + + /* remove from mixer */ + if (relation->channel_state != CHANNEL_STATE_HOLD) + { + relation->channel_state = CHANNEL_STATE_HOLD; + c_mixer = 1; /* update mixer flag */ + } + + /* detach given interface */ + relation = c_relation; + relationpointer = &c_relation; + while(relation) + { + /* endpoint of function call */ + if (relation->epoint_id == epoint_id) + { + *relationpointer = relation->next; + memset(relation, 0, sizeof(struct call_relation)); + free(relation); + cmemuse--; + relation = *relationpointer; + continue; + } + relationpointer = &relation->next; + relation = relation->next; + } + + /* if no more relation */ + if (!c_relation) + { + PDEBUG(DEBUG_CALL, "call is completely removed.\n"); + /* there is no more endpoint related to the call */ + delete this; + // end of call object! + PDEBUG(DEBUG_CALL, "call completely removed!\n"); + } else + /* if call is a party line */ + if (c_partyline) + { + PDEBUG(DEBUG_CALL, "call is a conference room, so we keep it alive until the last party left.\n"); + } else + /* if only one relation left */ + if (!c_relation->next) + { + PDEBUG(DEBUG_CALL, "call has one relation left, so we send it a release with the given cause %d.\n", cause); + message = message_create(c_serial, c_relation->epoint_id, CALL_TO_EPOINT, MESSAGE_RELEASE); + message->param.disconnectinfo.cause = cause; + message->param.disconnectinfo.location = location; + message_put(message); + delete this; + // end of call object! + PDEBUG(DEBUG_CALL, "call completely removed!\n"); + } + + call = call_first; + while(call) + { + if (options.deb & DEBUG_CALL && call->c_type==CALL_TYPE_PBX) + callpbx_debug((class CallPBX *)call, "call_release{all calls left}"); + call = call->next; + } + PDEBUG(DEBUG_CALL, "call_release(): ended.\n"); +} + +/* count number of relations in a call + */ +int callpbx_countrelations(unsigned long call_id) +{ + struct call_relation *relation; + int i; + class Call *call; + class CallPBX *callpbx; + + call = find_call_id(call_id); + + if (!call) + return(0); + + if (call->c_type != CALL_TYPE_PBX) + return(0); + callpbx = (class CallPBX *)call; + + i = 0; + relation = callpbx->c_relation; + while(relation) + { + i++; + relation = relation->next; + } + + return(i); +} + +void CallPBX::remove_relation(struct call_relation *relation) +{ + struct call_relation *temp, **tempp; + + if (!relation) + return; + + temp = c_relation; + tempp = &c_relation; + while(temp) + { + if (temp == relation) + break; + tempp = &temp->next; + temp = temp->next; + } + if (!temp) + { + PERROR("relation not in call.\n"); + return; + } + + PDEBUG(DEBUG_CALL, "removing relation.\n"); + *tempp = relation->next; + memset(temp, 0, sizeof(struct call_relation)); + free(temp); + cmemuse--; +} + + +struct call_relation *CallPBX::add_relation(void) +{ + struct call_relation *relation; + + if (!c_relation) + { + PERROR("there is no first relation to this call\n"); + return(NULL); + } + relation = c_relation; + while(relation->next) + relation = relation->next; + + relation->next = (struct call_relation *)calloc(1, sizeof(struct call_relation)); + if (!relation->next) + { + PERROR("no memory\n"); + return(NULL); + } + cmemuse++; + memset(relation->next, 0, sizeof(struct call_relation)); + /* the record pointer is set at the first time the data is received for the relation */ + +// if (options.deb & DEBUG_CALL) +// callpbx_debug(call, "add_relation"); + return(relation->next); +} + +/* epoint sends a message to a call + * + */ +void CallPBX::message_epoint(unsigned long epoint_id, int message_type, union parameter *param) +{ + class Call *cl; + struct call_relation *relation, *rel; + int num; + int new_state; + struct message *message; +// int size, writesize, oldpointer; + class Endpoint *epoint; + char *number; + + if (!epoint_id) + { + PERROR("software error, epoint == NULL\n"); + return; + } + +// if (options.deb & DEBUG_CALL) +// { +// PDEBUG(DEBUG_CALL, "message %d received from ep%d.\n", message, epoint->ep_serial); +// callpbx_debug(call,"Call::message_epoint"); +// } + if (options.deb & DEBUG_CALL) + { + if (message_type != MESSAGE_DATA) + { + cl = call_first; + while(cl) + { + if (cl->c_type == CALL_TYPE_PBX) + callpbx_debug((class CallPBX *)cl, "Call::message_epoint{all calls before processing}"); + cl = cl->next; + } + } + } + + /* check relation */ + relation = c_relation; + while(relation) + { + if (relation->epoint_id == epoint_id) + break; + relation = relation->next; + } + if (!relation) + { +// PERROR("no relation back to the endpoint found, ignoring (call=%d, endpoint=%d\n", c_serial, epoint_id); + return; + } + + switch(message_type) + { + /* process channel message */ + case MESSAGE_CHANNEL: + PDEBUG(DEBUG_CALL, "call received channel message: %d.\n", param->channel); + if (relation->channel_state != param->channel) + { + relation->channel_state = param->channel; + c_mixer = 1; /* update mixer flag */ + if (options.deb & DEBUG_CALL) + callpbx_debug(this, "Call::message_epoint{after setting new channel state}"); + } + return; + + /* track notify */ + case MESSAGE_NOTIFY: + switch(param->notifyinfo.notify) + { + case INFO_NOTIFY_USER_SUSPENDED: + case INFO_NOTIFY_USER_RESUMED: + case INFO_NOTIFY_REMOTE_HOLD: + case INFO_NOTIFY_REMOTE_RETRIEVAL: + case INFO_NOTIFY_CONFERENCE_ESTABLISHED: + case INFO_NOTIFY_CONFERENCE_DISCONNECTED: + new_state = track_notify(relation->rx_state, param->notifyinfo.notify); + if (new_state != relation->rx_state) + { + relation->rx_state = new_state; + c_mixer = 1; + if (options.deb & DEBUG_CALL) + callpbx_debug(this, "Call::message_epoint{after setting new rx state}"); + } + break; + + default: + /* send notification to all other endpoints */ + rel = c_relation; + while(rel) + { + if (rel->epoint_id!=epoint_id && rel->epoint_id) + { + message = message_create(c_serial, rel->epoint_id, CALL_TO_EPOINT, MESSAGE_NOTIFY); + memcpy(&message->param, param, sizeof(union parameter)); + message_put(message); + } + rel = rel->next; + } + } + return; + + /* audio data */ + case MESSAGE_DATA: + /* now send audio data to all endpoints connected */ + call_mixer(epoint_id, relation, param); + return; + } + + /* process party line */ + if (message_type == MESSAGE_SETUP) if (param->setup.partyline) + { + PDEBUG(DEBUG_CALL, "respsone with connect in partyline mode.\n"); + c_partyline = param->setup.partyline; + message = message_create(c_serial, epoint_id, CALL_TO_EPOINT, MESSAGE_CONNECT); + message->param.setup.partyline = c_partyline; + message_put(message); + c_mixer = 1; /* update mixer flag */ + } + if (c_partyline) + { + if (message_type == MESSAGE_DISCONNECT) + { + PDEBUG(DEBUG_CALL, "releasing after receiving disconnect, because call in partyline mode.\n"); +// remove_relation(relation); + message = message_create(c_serial, epoint_id, CALL_TO_EPOINT, MESSAGE_RELEASE); + message->param.disconnectinfo.cause = CAUSE_NORMAL; + message->param.disconnectinfo.location = LOCATION_PRIVATE_LOCAL; + message_put(message); +// c_mixer = 1; /* update mixer flag */ + return; + } + } + if (c_partyline) + { + PDEBUG(DEBUG_CALL, "ignoring message, because call in partyline mode.\n"); + return; + } + + /* count relations */ + num=callpbx_countrelations(c_serial); + + /* check number of relations */ + if (num > 2) + { + PDEBUG(DEBUG_CALL, "call has more than two relations so there is no need to send a message.\n"); + return; + } + + /* find interfaces not related to calling epoint */ + relation = c_relation; + while(relation) + { + if (relation->epoint_id != epoint_id) + break; + relation = relation->next; + } + if (!relation) + { + switch(message_type) + { + case MESSAGE_SETUP: + if (param->dialinginfo.itype == INFO_ITYPE_ISDN_EXTENSION) + { + while(number = strsep(¶m->dialinginfo.number, ',')) + { + if (out_setup(epoint_id, message_type, param, number)) + return; // call destroyed + } + break; + } + if (out_setup(epoint_id, message_type, param, NULL)) + return; // call destroyed + break; + + default: + PDEBUG(DEBUG_CALL, "no need to send a message because there is no other endpoint than the calling one.\n"); + } + } else + { + PDEBUG(DEBUG_CALL, "sending message ep%ld -> ep%ld.\n", epoint_id, relation->epoint_id); + message = message_create(c_serial, relation->epoint_id, CALL_TO_EPOINT, message_type); + memcpy(&message->param, param, sizeof(union parameter)); + message_put(message); + PDEBUG(DEBUG_CALL, "message sent.\n"); + } +} + + +/* call process is called from the main loop + * it processes the current calling state. + * returns 0 if call nothing was done + */ +int CallPBX::handler(void) +{ +// struct call_relation *relation; +// char dialing[32][32]; +// int port[32]; +// int found; +// int i, j; +// char *p; + + /* the mixer must be updated */ + if (c_mixer) + { + mixer(); + c_mixer = 0; + return(1); + } + + return(0); +} + + +int track_notify(int oldstate, int notify) +{ + int newstate = oldstate; + + switch(notify) + { + case INFO_NOTIFY_USER_RESUMED: + case INFO_NOTIFY_REMOTE_RETRIEVAL: + case INFO_NOTIFY_CONFERENCE_DISCONNECTED: + case INFO_NOTIFY_RESERVED_CT_1: + case INFO_NOTIFY_RESERVED_CT_2: + case INFO_NOTIFY_CALL_IS_DIVERTING: + newstate = NOTIFY_STATE_ACTIVE; + break; + + case INFO_NOTIFY_USER_SUSPENDED: + newstate = NOTIFY_STATE_SUSPEND; + break; + + case INFO_NOTIFY_REMOTE_HOLD: + newstate = NOTIFY_STATE_HOLD; + break; + + case INFO_NOTIFY_CONFERENCE_ESTABLISHED: + newstate = NOTIFY_STATE_CONFERENCE; + break; + } + + return(newstate); +} + + +/* + * setup to exactly one endpoint + * if it fails, the calling endpoint is released. + * if other outgoing endpoints already exists, they are release as well. + * note: if this functions fails, it will destroy its own call object! + */ +int CallPBX::out_setup(unsigned long epoint_id, int message_type, union parameter *param, char *newnumber) +{ + struct call_relation *relation; + struct message *message; + class Endpoint *epoint; + + PDEBUG(DEBUG_CALL, "no endpoint found, so we will create an endpoint and send the setup message we have.\n"); + /* create a new relation */ + if (!(relation=add_relation())) + { + /* release due to error */ + ressource_error: + relation = c_relation; + while(relation) + { + message = message_create(c_serial, releation->epoint_id, CALL_TO_EPOINT, MESSAGE_RELEASE); + message->param.disconnectinfo.cause = (relation->epoint_id==epoint_id)CAUSE_RESSOURCEUNAVAIL?:CAUSE_NORMAL; + message->param.disconnectinfo.location = LOCATION_PRIVATE_LOCAL; + message_put(message); + relation = relation->next; + } + delete this; + return(-ENOMEM); + } + relation->type = RELATION_TYPE_SETUP; + relation->channel_state = CHANNEL_STATE_HOLD; /* audio is assumed on a new call */ + relation->tx_state = NOTIFY_STATE_ACTIVE; /* new calls always assumed to be active */ + relation->rx_state = NOTIFY_STATE_ACTIVE; /* new calls always assumed to be active */ + /* create a new endpoint */ + epoint = new Endpoint(0, c_serial); + if (!epoint) + { + remove_relation(relation); + goto ressource_error; + } + if (!(epoint->ep_app = new DEFAULT_ENDPOINT_APP(epoint))) + { + PERROR("ERROR:No endpoint's app.\n"); + delete epoint; + remove_relation(relation); + goto ressource_error; + } + relation->epoint_id = epoint->ep_serial; + /* send setup message to new endpoint */ +//printf("JOLLY DEBUG: %d\n",call_countrelations(c_serial)); +//i if (options.deb & DEBUG_CALL) +// callpbx_debug(call, "Call::message_epoint"); + message = message_create(c_serial, relation->epoint_id, CALL_TO_EPOINT, message_type); + memcpy(&message->param, param, sizeof(union parameter)); + if (newnumber) + SCPY(message->param.setup.dialinginfo.number, newnumber); + PDEBUG(DEBUG_CALL, "setup message sent to ep %d with number='%s'.\n", relation->epoint_id, message->param.setup.dialinginfo.number); + message_put(message); + return(0); +} + +todo: beim release von einem relation_type_setup muss der cause gesammelt werden, bis keine weitere setup-relation mehr existiert +beim letzten den collected cause senden +mixer kann ruhig loslegen, das aber dokumentieren +mixer berdenken: wer sendet, welche tne verfgbar sind, u.s.w + diff --git a/callpbx.h b/callpbx.h new file mode 100644 index 0000000..a72d171 --- /dev/null +++ b/callpbx.h @@ -0,0 +1,81 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** call header file for pbx calls ** +** ** +\*****************************************************************************/ + + +/* call + * + * calls connect interfaces together + * calls are linked in a chain + * interfaces can have 0, 1 or more references to a call + * the call can have many references to interfaces + * calls receive and send messages + */ + +#define RECORD_BUFFER_SIZE 16000 + +enum { /* relation types */ + RELATION_TYPE_CALLING, /* initiator of a call */ + RELATION_TYPE_SETUP, /* interface which is to be set up */ + RELATION_TYPE_CONNECT, /* interface is connected */ +}; + +enum { /* relation audio state */ + CHANNEL_STATE_CONNECT, /* endpoint is connected to the call voice transmission in both dirs */ + CHANNEL_STATE_HOLD, /* endpoint is on hold state, no audio */ +}; + +enum { /* states that results from last notification */ + NOTIFY_STATE_ACTIVE, /* just the normal case, the party is active */ + NOTIFY_STATE_SUSPEND, /* the party is inactive, because she has parked */ + NOTIFY_STATE_HOLD, /* the party is inactive, because she holds the line */ + NOTIFY_STATE_CONFERENCE, /* the parties joined a conference */ +}; + + +struct call_relation { /* relation to an interface */ + struct call_relation *next; /* next node */ + int type; /* type of relation */ + unsigned long epoint_id; /* interface to link call to */ + int channel_state; /* if audio is available */ + int rx_state; /* current state of what we received from endpoint */ + int tx_state; /* current state of what we sent to endpoint */ +}; + +class CallPBX : public Call +{ + public: + CallPBX(class Endpoint *epoint); + ~CallPBX(); + void message_epoint(unsigned long epoint_id, int message, union parameter *param); + int handler(void); + void release(unsigned long epoint_id, int hold, int location, int cause); + + char c_caller[32]; /* caller number */ + char c_caller_id[32]; /* caller id to signal */ + char c_dialed[1024]; /* dial string of (all) number(s) */ + char c_todial[32]; /* overlap dialing (part not signalled yet) */ + + int c_mixer; /* mixer must be updated */ + struct call_relation *c_relation; /* list of endpoints that are related to the call */ + + int c_partyline; /* if set, call is conference room */ + + void mixer(void); + void call_mixer(unsigned long epoint_from, struct call_relation *relation_from, union parameter *param); + void remove_relation(struct call_relation *relation); + struct call_relation *add_relation(void); + int out_setup(unsigned long epoint_id, int message, union parameter *param, char *newnumber); +}; + +void callpbx_debug(class CallPBX *callpbx, char *function); +int callpbx_countrelations(unsigned long call_id); +int track_notify(int oldstate, int notify); + diff --git a/cause.c b/cause.c new file mode 100644 index 0000000..c6ca903 --- /dev/null +++ b/cause.c @@ -0,0 +1,375 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** cause database ** +** ** +\*****************************************************************************/ + +#include "stdio.h" +#include "sys/types.h" +#include "string.h" +#include "main.h" + +struct isdn_cause isdn_cause[128] = { + /********************************* - **/ /*38*/ + { /*0*/ "", + "" }, + { /*1*/ "Unallocated number", + "Nummer nicht vergeben" }, + { /*2*/ "No route to transit network", + "Keine Verbindung zum Netz" }, + { /*3*/ "No route to destination", + "Zielnummer nicht erreichbar" }, + { /*4*/ "", + "" }, + { /*5*/ "Misdialed trunk prefix.", + "Falscher Carrier-Code" }, + { /*6*/ "Channel unacceptable", + "Kanal nicht akzeptiert" }, + { /*7*/ "", + "" }, + { /*8*/ "Preemption", + "Vorkauf" }, + { /*9*/ "Preemption - circuit reserved", + "Vorkauf - Gasse reserviert" }, + { /*10*/ "", + "" }, + { /*11*/ "", + "" }, + { /*12*/ "", + "" }, + { /*13*/ "", + "" }, + { /*14*/ "", + "" }, + { /*15*/ "", + "" }, + { /*16*/ "Normal call clearing", + "Normaler Verbindungsabbau" }, + { /*17*/ "User busy", + "Teilnehmer besetzt" }, + { /*18*/ "No user responding", + "Teilnehmer antwortet nicht" }, + { /*19*/ "No answer from user", + "Teilnehmer nimmt nicht ab" }, + { /*20*/ "Subscriber absent", + "Teilnehmer nicht anwesend" }, + { /*21*/ "Call rejected", + "Gespraech abgewiesen" }, + { /*22*/ "Number changed", + "Rufnummer hat sich geaendert" }, + { /*23*/ "", + "" }, + { /*24*/ "", + "" }, + { /*25*/ "", + "" }, + { /*26*/ "Non-selected user clearing", + "Gespraech woanders angenommen" }, + { /*27*/ "Destination out of order", + "Gegenstelle ausser Betrieb" }, + { /*28*/ "Invalid number (incomplete)", + "Fehlerhafte Nummer (n. komplett)" }, + { /*29*/ "Facility rejected", + "Funktion nicht verfuegbar" }, + { /*30*/ "", + "" }, + { /*31*/ "Normal, unspecified", + "Normal, unspezifisch" }, + { /*32*/ "", + "" }, + { /*33*/ "", + "" }, + { /*34*/ "No circuit/channel available", + "Keine Gasse/Kanal verfuegbar" }, + { /*35*/ "", + "" }, + { /*36*/ "", + "" }, + { /*37*/ "", + "" }, + { /*38*/ "", + "" }, + { /*39*/ "", + "" }, + { /*40*/ "", + "" }, + { /*41*/ "Temporary failure", + "Vorruebergehende Fehlfunktion" }, + { /*42*/ "Switchting equipment congestion", + "Vermittlungstelle ueberlastet" }, + { /*43*/ "Access informationen discarded", + "Zugriffsinformationen geloescht" }, + { /*44*/ "No requested circuit/channel", + "Keine angeforderte Gasse/Kanal" }, + { /*45*/ "", + "" }, + { /*46*/ "Precedence call blocked", + "Vorverkaufanruf gesperrt" }, + { /*47*/ "Resource unavailable, unspecified", + "" }, + { /*48*/ "", + "" }, + { /*49*/ "Quality of service not available", + "Qualitaetsmerkmal nicht verfuegbar" }, + { /*50*/ "Requested facility not subscribed", + "Funktion nicht freigeschaltet" }, + { /*51*/ "", + "" }, + { /*52*/ "", + "" }, + { /*53*/ "Outgoing calls barred within CUG", + "CUG erlaubt keine gehenden Rufe" }, + { /*54*/ "", + "" }, + { /*55*/ "Incoming calls barred within CUG", + "CUG erlaubt keine kommenden Rufe" }, + { /*56*/ "", + "" }, + { /*57*/ "Bearer capability not authorized", + "Verbindungseigenschaft verboten" }, + { /*58*/ "Bearer capability not present", + "Verb.eigenschaft n. verfuegbar" }, + { /*59*/ "", + "" }, + { /*60*/ "", + "" }, + { /*61*/ "", + "" }, + { /*62*/ "", + "" }, + { /*63*/ "Service or option not available", + "Dienst oder Merkmal nicht verf." }, + { /*64*/ "", + "" }, + { /*65*/ "Bearer capability not implement.", + "Verb.eigenschaft nicht unterstue." }, + { /*66*/ "Channel type not implemented", + "Kanalart nicht unterstuetzt" }, + { /*67*/ "", + "" }, + { /*68*/ "", + "" }, + { /*69*/ "Requested facility not implement.", + "Funktion nicht unterstuetzt" }, + { /*70*/ "restricted digital informat. only", + "Nur eingeschraenkte digitale inf." }, + { /*71*/ "", + "" }, + { /*72*/ "", + "" }, + { /*73*/ "", + "" }, + { /*74*/ "", + "" }, + { /*75*/ "", + "" }, + { /*76*/ "", + "" }, + { /*77*/ "", + "" }, + { /*78*/ "", + "" }, + { /*79*/ "Service or option not implemented", + "Dienst oder Merkmal n. unterstue." }, + { /*80*/ "", + "" }, + { /*81*/ "Invalid call reference value", + "Falsche call reference" }, + { /*82*/ "Identified channel does not exist", + "Erkannter Kanal existiert nicht" }, + { /*83*/ "No suspended call with this id", + "Kein geparktes Gespr. f. diese ID" }, + { /*84*/ "Call identity in use", + "ID in gebrauch" }, + { /*85*/ "No call suspended", + "Kein geparktes Gespraech" }, + { /*86*/ "Suspended call has been cleared", + "Geparktes Gespraech wurde beendet" }, + { /*87*/ "User not member of CUG", + "Teilnehmer nicht in der CUG" }, + { /*88*/ "Incompatibel destination", + "Gegenstelle nicht kompatibel" }, + { /*89*/ "", + "" }, + { /*90*/ "Non-existent CUG", + "CUG existiert nicht" }, + { /*91*/ "Invalid transit network selection", + "Falscher Carrier-Code" }, + { /*92*/ "", + "" }, + { /*93*/ "", + "" }, + { /*94*/ "", + "" }, + { /*95*/ "Invalid message, unspecified", + "Fehlerhafte Daten, unbekannt" }, + { /*96*/ "Information element missing", + "Information wird vermisst" }, + { /*97*/ "Message type non-existent", + "Message exisitiert nicht" }, + { /*98*/ "Message not compatible with state", + "Message nicht komatibel" }, + { /*99*/ "Information element not impl.", + "Information nicht implementiert" }, + { /*100*/ "Invalid info element contents", + "Fehlerhafterhafte Information" }, + { /*101*/ "Message not compatible with state", + "Message not kompatibel" }, + { /*102*/ "Recovery on timer expiry", + "Fehler durch Zeitueberschreitung" }, + { /*103*/ "Parameter non-existent", + "Parameter fehlt" }, + { /*104*/ "", + "" }, + { /*105*/ "", + "" }, + { /*106*/ "", + "" }, + { /*107*/ "", + "" }, + { /*108*/ "", + "" }, + { /*109*/ "", + "" }, + { /*110*/ "", + "" }, + { /*111*/ "Protocol error, unspecified", + "Protokollfehler, unbekannt" }, + { /*112*/ "", + "" }, + { /*113*/ "", + "" }, + { /*114*/ "", + "" }, + { /*115*/ "", + "" }, + { /*116*/ "", + "" }, + { /*117*/ "", + "" }, + { /*118*/ "", + "" }, + { /*119*/ "", + "" }, + { /*120*/ "", + "" }, + { /*121*/ "", + "" }, + { /*122*/ "", + "" }, + { /*123*/ "", + "" }, + { /*124*/ "", + "" }, + { /*125*/ "", + "" }, + { /*126*/ "", + "" }, + { /*127*/ "Interworking, unspecified", + "Zusammenspiel, unbekannt" }, +}; + +struct isdn_cause isdn_cause_class[8] = { + /********************************* - **/ /*38*/ + { /*0*/ "(Normal class)", + "(Normale Fehlerklasse)" }, + { /*16*/ "(Normal class)", + "(Normale Fehlerklasse)" }, + { /*32*/ "(Resource unavailable class)", + "(Ressourcen nicht verfuegbar)" }, + { /*48*/ "(Service or option unavailable)", + "(Dienst oder Merkmal n. verfueg.)" }, + { /*64*/ "(Service or option n.implemented)", + "(Dienst oder Merkmal n. vorhand.)" }, + { /*80*/ "(Invalid message class)", + "(Fehlerhafte Message)" }, + { /*96*/ "(Protocol error class)", + "(Klasse der Protokollfehler)" }, + { /*112*/ "(Interworking class)", + "(Klasse des Zusammenspiels)" }, +}; + +struct isdn_location isdn_location[16] = { + { /*0*/ "User", + "Endgert" }, + { /*1*/ "Private (Local)", + "Anlage (Lokal)" }, + { /*2*/ "Public (Local)", + "Vermittlung (Lokal)" }, + { /*3*/ "Transit", + "Knotenvermittlung" }, + { /*4*/ "Public (Remote)", + "Vermittlung (Gegenstelle)" }, + { /*5*/ "Private (Remote)", + "Anlage (Gegenstelle)" }, + { /*6*/ "", + "" }, + { /*7*/ "International", + "Fernvermittlung" }, + { /*8*/ "", + "" }, + { /*9*/ "", + "" }, + { /*10*/ "Beyond Interworking", + "Nicht verfuegbar" }, + { /*11*/ "", + "" }, + { /*12*/ "", + "" }, + { /*13*/ "", + "" }, + { /*14*/ "", + "" }, + { /*15*/ "", + "" }, +}; + +char *get_isdn_cause(int cause, int location, int type) +{ + static char result[128]; + + /* protect us */ + if (cause<0 || cause>127) + cause = 0; + + switch(type) + { + case DISPLAY_CAUSE_NUMBER: + SPRINT(result, "Cause %d", cause); + break; + + case DISPLAY_CAUSE_ENGLISH: + if (isdn_cause[cause].english[0]) + SPRINT(result, "%d - %s", cause, isdn_cause[cause].english); + else SPRINT(result, "%d - %s", cause, isdn_cause_class[cause>>4].english); + break; + + case DISPLAY_CAUSE_GERMAN: + if (isdn_cause[cause].german[0]) + SPRINT(result, "%d - %s", cause, isdn_cause[cause].german); + else SPRINT(result, "%d - %s", cause, isdn_cause_class[cause>>4].german); + break; + + case DISPLAY_LOCATION_ENGLISH: + if (isdn_location[location].english[0]) + SPRINT(result, "%d - %s", cause, isdn_location[location].english); + else SPRINT(result, "%d - Location code %d", cause, location); + break; + + case DISPLAY_LOCATION_GERMAN: + if (isdn_location[location].german[0]) + SPRINT(result, "%d - %s", cause, isdn_location[location].german); + else SPRINT(result, "%d - Lokationscode %d", cause, location); + break; + + default: + result[0] = '\0'; + } + + return(result); +} diff --git a/cause.h b/cause.h new file mode 100644 index 0000000..21d53f1 --- /dev/null +++ b/cause.h @@ -0,0 +1,51 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** cause header file ** +** ** +\*****************************************************************************/ + +/* location (equivalent to the q.850 coding) */ +#define LOCATION_USER 0 +#define LOCATION_PRIVATE_LOCAL 1 +#define LOCATION_PUBLIC_LOCAL 2 +#define LOCATION_TRANSIT 3 +#define LOCATION_PUBLIC_REMOTE 4 +#define LOCATION_PRIVATE_REMOTE 5 +#define LOCATION_INTERNATIONAL 7 +#define LOCATION_BEYOND 10 + +/* some causes (equivalent to the q.850 coding) */ +#define CAUSE_UNALLOCATED 1 +#define CAUSE_NORMAL 16 +#define CAUSE_BUSY 17 +#define CAUSE_NOUSER 18 +#define CAUSE_NOANSWER 19 +#define CAUSE_REJECTED 21 +#define CAUSE_OUTOFORDER 27 +#define CAUSE_INVALID 28 +#define CAUSE_FACILITYREJECTED 29 +#define CAUSE_UNSPECIFIED 31 +#define CAUSE_NOCHANNEL 34 +#define CAUSE_TEMPOFAIL 41 +#define CAUSE_RESSOURCEUNAVAIL 47 +#define CAUSE_SERVICEUNAVAIL 63 +#define CAUSE_UNIMPLEMENTED 79 + +struct isdn_cause { + char *english; + char *german; +}; + +struct isdn_location { + char *english; + char *german; +}; + +extern struct isdn_cause isdn_cause[128]; +extern struct isdn_location isdn_location[16]; +char *get_isdn_cause(int cause, int location, int type); diff --git a/crypt.cpp b/crypt.cpp new file mode 100644 index 0000000..2babfb7 --- /dev/null +++ b/crypt.cpp @@ -0,0 +1,2046 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** cryption stuff ** +** ** +\*****************************************************************************/ + +/* how authentication is performed: + +Alice Bob +----------------------------------------------------------------- + unencrypted call +start * + | -----> sending random number -----> (gets lost) + | + | * start +comparing | <----- sending random number <----- | +master state | | + | -----> sending "slave" code -----> | slave state +calculating | | +rsa key pair | | + | | +done | -----> sending public key -----> | + | | crpyting + | | session key + | | + | <----- sending session key <----- | done +decrypting | | enable crypt +dession key | * stop + | +done | +enable crypt | +stop * + encrypted call + +When Bob and Alice activate their authentication process, they will make +up a random number. + +Lets assume Alice starts encryption first. She activates the authentication +process. Bob hat not activates the process yet. Alice sends a random number +to Bob, but he will ignore it, because he is not listening. + +Bob also activates the authentication process, and sends his random number. +Now Alice will receive that number and compares the values. If the values +are equal, the process will fail and Alice will send the message "LOOPED". +If Alice's random number is greater, she will identify herself as "master". +Bob will get a "SLAVE" message. Bob might also send a "MASTER" message, +if he got Alice's random number, due to parallel activation of the +authentication. + +After transmission or reception of a master message, more messages are +ignored. After reception of a "RANDOM" message, more messages are +ignored. A reception of a "RANDOM" message always causes to identify who +is slave. + +Now Alice starts calculating his public/private key pair, because she is +"master". When Bob receives the "SLAVE" message, he will change the timeout +value. If no random number or "SLAVE", "MASTER" or "LOOPED" is received within +a timeout value, the "ABORT" message is sent. If the "ABORT" message is +received at any state of the process, the process is aborted. + +After the key of Alices is calculated, she will send it to Bob. Bob will use +the key to start encryption of a random session key. Both will change their +timeout values. + +After Bob has finished is crypted session key, he will send it to Alice and +enable encryption. Bob has finished his process now. + +As soon as Alice received the encrypted key, she will encrypt it and also +enable encryption with the same key as Bob. Alis has finished her process now. + +Both will get displayed some of the first digits of the public key. Both can +talk about the digits now. A man in the middle cannot change the keys without +changing the public key. The voice of Alice and/or Bob is used to "sign" and +"check" that the public key is not modified. + +If Alice or Bob wants to stop encryption, one will send the "ABORT" message. +After transmission or reception. + + +The states of the process: + +CM_ST_NULL +---------- +no encryption + +CM_ST_IDENT +----------- +Waiting for the remote random number or "MASTER", "SLAVE", "LOOPED" message. + +CM_ST_KEYGEN +------------ +The master generates the key and waits for the key engine to finish. + +CM_ST_KEYWAIT +------------- +The slave waits for the master to send the key. + +CM_ST_CSKEY +----------- +The slave generates the session key and waits for the encryption engine to +finish. + +CM_ST_CSWAIT +------------ +The master waits for the slave to send the crypted session key. + +CM_ST_DSKEY +----------- +The master waits for the decryption engine to finish decryption of the session +key. + +CM_ST_ACTIVE +------------ +The encryption is established. + + +Timouts +------- +CM_TO_IDENT = waiting for the remote party to enable encryption +CM_TO_KEY = waiting for key generation +CM_TO_CSKEY = waiting for session key encryption +CM_TO_DSKEY = waiting for session key decryption + + +Structure of message: +--------------------- + +one octet message element +two octets element length (first octet = high-byte) +data as given in length + +last element is 0 +the message type is encoded as element + + +*/ + +#include +#include +#include +#include +#ifdef CRYPTO +#include +#endif +#include "main.h" + + +/* convert key string to binary key vector + * returns 0 if an error ocurred + */ +unsigned char *crypt_key(unsigned char *key, int *binary_len) +{ + static unsigned char binary_key[2048]; + int i = 0; + + binary_key[0] = '\0'; + + if (!key[0]) + return(NULL); + + /* check for 0xXXXX... type of key */ + if (!strncmp((char *)key, "0x", 2)) + { + key+=2; + while(*key) + { + if (i == (int)sizeof(binary_key)) + return(NULL); + + if (*key>='0' && *key<='9') + binary_key[i] = (*key-'0') << 8; + else if (*key>='a' && *key<='f') + binary_key[i] = (*key-'a'+10) << 8; + else if (*key>='A' && *key<='F') + binary_key[i] = (*key-'A'+10) << 8; + else + return(NULL); + key++; + + if (*key>='0' && *key<='9') + binary_key[i] += (*key - '0'); + else if (*key>='a' && *key<='f') + binary_key[i] += (*key - 'a' + 10); + else if (*key>='A' && *key<='F') + binary_key[i] += (*key - 'A' + 10); + else + return(NULL); + key++; + + i++; + } + *binary_len = i; + return(binary_key); + } + + /* ascii key too long */ + if (strlen((char *)key) >= sizeof((char *)binary_key)) + return(NULL); + + memcpy(binary_key, key, strlen((char *)key)); + *binary_len = strlen((char *)key); + return(binary_key); +} + +/* + * support routine to get cpu speed + */ +static unsigned long get_bogomips(void) +{ + FILE *fp; + char buffer[64], *p; + + fp = fopen("/proc/cpuinfo", "r"); + if (!fp) + { + PERROR("Cannot access /proc/cpuinfo. Will not use cpuinfo for identification of pear\n"); + return(0); + } + fduse++; + buffer[sizeof(buffer-1)] = '\0'; + while(fgets(buffer, sizeof(buffer)-1, fp)) + { + if (!!strncmp(buffer, "bogomips", 8)) + continue; + if (!strchr(buffer, ':')) + continue; + p = strchr(buffer, ':')+1; + while(*p == ' ') + p++; + if (strchr(p, '.')) + *strchr(p, '.') = '\0'; + fclose(fp); + fduse--; + return(atoi(p)); + } + fclose(fp); + fduse--; + PERROR("Cannot find 'bogomips' in /proc/cpuinfo. Will not use cpuinfo for identification of pear\n"); + return(0); +} + + +/* + * crc 32 stuff + */ +static unsigned long crc_reflect(unsigned long ref, char ch) +{ + unsigned long value = 0; + int i; + + i = 1; + while(i < ch+1) + { + if(ref & 1) + value |= 1 << (ch - i); + ref >>= 1; + i++; + } + return(value); +} + +static unsigned long crc32_table[256]; +static int crc_initialized = 0; + +void crc_init(void) +{ + unsigned long ulPolynomial = 0x04c11db7; + int i, j; + + i = 0; + while(i < 256) + { + crc32_table[i] = crc_reflect(i, 8) << 24; + j = 0; + while(j < 8) + { + crc32_table[i] = (crc32_table[i] << 1) ^ (crc32_table[i] & (1 << 31) ? ulPolynomial : 0); + j++; + } + crc32_table[i] = crc_reflect(crc32_table[i], 32); + i++; + } + crc_initialized = 1; +} + +unsigned long crc32(unsigned char *data, int len) +{ + unsigned long crc = 0xffffffff; + + if (!crc_initialized) + { + PERROR("crc not initialized, exitting..."); + exit(-1); + } + + while (len--) + crc = (crc >> 8) ^ crc32_table[(crc & 0xFF) ^ *data++]; + return(crc^0xffffffff); +} + + +CM_ST_NAMES + +/* give name of state */ +static char *statename(int state) +{ + if (state>=0 && state>"); +} + +/* + * authentication key generation, encryption, decryption + */ +struct auth_args { + class EndpointAppPBX *apppbx; + int job; +}; + +static void *keyengine_child(void *arg) +{ + struct auth_args *args = (struct auth_args *)arg; + class EndpointAppPBX *apppbx = args->apppbx; + int job = args->job; +#ifdef CRYPTO + RSA *rsa; + int exponent; + int i; +#endif + + struct sched_param schedp; + int ret; + + PDEBUG((DEBUG_EPOINT | DEBUG_CRYPT), "EPOINT(%d) child process started for using libcrypto\n", apppbx->ea_endpoint->ep_serial); + + /* lower priority to keep pbx running fluently */ + if (options.schedule > 0) + { + memset(&schedp, 0, sizeof(schedp)); + schedp.sched_priority = 0; + ret = sched_setscheduler(0, SCHED_OTHER, &schedp); + if (ret < 0) + { + PERROR("Scheduling to normal priority failed (errno = %d).\nExitting child process...\n", errno); + goto done; + } + } + + switch(job) + { + /* generate rsa key pair */ + case CK_GENRSA_REQ: +#ifndef CRYPTO + PERROR("Not compliled wiht crypto.\n"); + apppbx->e_crypt_keyengine_return = -1; +#else + srandom(*((unsigned int *)mISDN_rand) ^ random()); +// exponent = (((random()<<1)|1) & 0x7f) + 0x80; /* odd */ + exponent = 65537; +// if (exponent < 3) exponent = 3; /* >= 3 */ + rsa = RSA_generate_key(RSA_BITS, exponent, NULL, NULL); + if (!rsa) + { + PERROR("Failed to generate rsa key pair.\n"); + apppbx->e_crypt_keyengine_return = -1; + break; + } + ememuse++; + apppbx->e_crypt_rsa_n_len = BN_num_bytes(rsa->n); + if (apppbx->e_crypt_rsa_n_len > (int)sizeof(apppbx->e_crypt_rsa_n)) + { + kerror_buffer: + PERROR("e_crypt_rsa_* too small for bignum.\n"); + apppbx->e_crypt_keyengine_return = -1; + RSA_free(rsa); + ememuse--; + break; + } + BN_bn2bin(rsa->n, apppbx->e_crypt_rsa_n); + apppbx->e_crypt_rsa_n_len = BN_num_bytes(rsa->n); + if (apppbx->e_crypt_rsa_e_len > (int)sizeof(apppbx->e_crypt_rsa_e)) + goto kerror_buffer; + BN_bn2bin(rsa->e, apppbx->e_crypt_rsa_e); + apppbx->e_crypt_rsa_e_len = BN_num_bytes(rsa->e); + if (apppbx->e_crypt_rsa_d_len > (int)sizeof(apppbx->e_crypt_rsa_d)) + goto kerror_buffer; + BN_bn2bin(rsa->d, apppbx->e_crypt_rsa_d); + apppbx->e_crypt_rsa_p_len = BN_num_bytes(rsa->p); + if (apppbx->e_crypt_rsa_p_len > (int)sizeof(apppbx->e_crypt_rsa_p)) + goto kerror_buffer; + BN_bn2bin(rsa->p, apppbx->e_crypt_rsa_p); + apppbx->e_crypt_rsa_q_len = BN_num_bytes(rsa->q); + if (apppbx->e_crypt_rsa_q_len > (int)sizeof(apppbx->e_crypt_rsa_q)) + goto kerror_buffer; + BN_bn2bin(rsa->q, apppbx->e_crypt_rsa_q); + apppbx->e_crypt_rsa_dmp1_len = BN_num_bytes(rsa->dmp1); + if (apppbx->e_crypt_rsa_dmp1_len > (int)sizeof(apppbx->e_crypt_rsa_dmp1)) + goto kerror_buffer; + BN_bn2bin(rsa->dmp1, apppbx->e_crypt_rsa_dmp1); + apppbx->e_crypt_rsa_dmq1_len = BN_num_bytes(rsa->dmq1); + if (apppbx->e_crypt_rsa_dmq1_len > (int)sizeof(apppbx->e_crypt_rsa_dmq1)) + goto kerror_buffer; + BN_bn2bin(rsa->dmq1, apppbx->e_crypt_rsa_dmq1); + apppbx->e_crypt_rsa_iqmp_len = BN_num_bytes(rsa->iqmp); + if (apppbx->e_crypt_rsa_iqmp_len > (int)sizeof(apppbx->e_crypt_rsa_iqmp)) + goto kerror_buffer; + BN_bn2bin(rsa->iqmp, apppbx->e_crypt_rsa_iqmp); + PDEBUG(DEBUG_CRYPT, "gen: rsa n=%02x...\n", *apppbx->e_crypt_rsa_n); + PDEBUG(DEBUG_CRYPT, "gen: rsa e=%02x...\n", *apppbx->e_crypt_rsa_e); + PDEBUG(DEBUG_CRYPT, "gen: rsa d=%02x...\n", *apppbx->e_crypt_rsa_d); + PDEBUG(DEBUG_CRYPT, "gen: rsa p=%02x...\n", *apppbx->e_crypt_rsa_p); + PDEBUG(DEBUG_CRYPT, "gen: rsa q=%02x...\n", *apppbx->e_crypt_rsa_q); + PDEBUG(DEBUG_CRYPT, "gen: rsa dmp1=%02x...\n", *apppbx->e_crypt_rsa_dmp1); + PDEBUG(DEBUG_CRYPT, "gen: rsa dmq1=%02x...\n", *apppbx->e_crypt_rsa_dmq1); + PDEBUG(DEBUG_CRYPT, "gen: rsa iqmp=%02x...\n", *apppbx->e_crypt_rsa_iqmp); + apppbx->e_crypt_keyengine_return = 1; + RSA_free(rsa); + ememuse--; +#endif + break; + + /* encrypt session key */ + case CK_CPTRSA_REQ: +#ifndef CRYPTO + PERROR("No crypto lib.\n"); + apppbx->e_crypt_keyengine_return = -1; +#else + /* generating session key */ + srandom(*((unsigned int *)mISDN_rand) ^ random()); + i = 0; + while(i < 56) + { + apppbx->e_crypt_key[i] = random(); + apppbx->e_crypt_key[i] ^= mISDN_rand[random() & 0xff]; + i++; + } + apppbx->e_crypt_key_len = i; + /* encrypt via rsa */ + rsa = RSA_new(); + if (!rsa) + { + PERROR("Failed to allocate rsa structure.\n"); + apppbx->e_crypt_keyengine_return = 1; + break; + } + ememuse++; + rsa->n = BN_new(); + rsa->e = BN_new(); + if (!rsa->n || !rsa->e) + { + PERROR("Failed to generate rsa structure.\n"); + apppbx->e_crypt_keyengine_return = -1; + RSA_free(rsa); + ememuse--; + break; + } + if (!BN_bin2bn(apppbx->e_crypt_rsa_n, apppbx->e_crypt_rsa_n_len, rsa->n)) + { + eerror_bin2bn: + PERROR("Failed to convert binary to bignum.\n"); + apppbx->e_crypt_keyengine_return = -1; + RSA_free(rsa); + ememuse--; + break; + } + if ((apppbx->e_crypt_rsa_n_len*8) != BN_num_bits(rsa->n)) + { + PERROR("SOFTWARE API ERROR: length not equal stored data. (%d != %d)\n", apppbx->e_crypt_rsa_n_len*8, BN_num_bits(rsa->n)); + apppbx->e_crypt_keyengine_return = -1; + RSA_free(rsa); + ememuse--; + break; + } + if (!BN_bin2bn(apppbx->e_crypt_rsa_e, apppbx->e_crypt_rsa_e_len, rsa->e)) + goto eerror_bin2bn; + PDEBUG(DEBUG_CRYPT, "crypt: rsa n=%02x...\n", *apppbx->e_crypt_rsa_n); + PDEBUG(DEBUG_CRYPT, "crypt: rsa e=%02x...\n", *apppbx->e_crypt_rsa_e); + PDEBUG(DEBUG_CRYPT, "crypt: key =%02x%02x%02x%02x... (len=%d)\n", apppbx->e_crypt_key[0], apppbx->e_crypt_key[1], apppbx->e_crypt_key[2], apppbx->e_crypt_key[3], apppbx->e_crypt_key_len); + apppbx->e_crypt_ckey_len = RSA_public_encrypt( + apppbx->e_crypt_key_len, + apppbx->e_crypt_key, + apppbx->e_crypt_ckey, + rsa, + RSA_PKCS1_PADDING); + PDEBUG(DEBUG_CRYPT, "crypt: ckey =%02x%02x%02x%02x... (len=%d)\n", apppbx->e_crypt_ckey[0], apppbx->e_crypt_ckey[1], apppbx->e_crypt_ckey[2], apppbx->e_crypt_ckey[3], apppbx->e_crypt_ckey_len); + RSA_free(rsa); + ememuse--; + if (apppbx->e_crypt_ckey_len > 0) + apppbx->e_crypt_keyengine_return = 1; + else + apppbx->e_crypt_keyengine_return = -1; +#endif + break; + + /* decrypt session key */ + case CK_DECRSA_REQ: +#ifndef CRYPTO + PERROR("No crypto lib.\n"); + apppbx->e_crypt_keyengine_return = -1; +#else + rsa = RSA_new(); + if (!rsa) + { + PERROR("Failed to allocate rsa structure.\n"); + apppbx->e_crypt_keyengine_return = 1; + break; + } + ememuse++; + rsa->n = BN_new(); + rsa->e = BN_new(); + rsa->d = BN_new(); + rsa->p = BN_new(); + rsa->q = BN_new(); + rsa->dmp1 = BN_new(); + rsa->dmq1 = BN_new(); + rsa->iqmp = BN_new(); + if (!rsa->n || !rsa->e + || !rsa->d || !rsa->p + || !rsa->q || !rsa->dmp1 + || !rsa->dmq1 || !rsa->iqmp) + { + PERROR("Failed to generate rsa structure.\n"); + apppbx->e_crypt_keyengine_return = 1; + RSA_free(rsa); + ememuse--; + break; + } + if (!BN_bin2bn(apppbx->e_crypt_rsa_n, apppbx->e_crypt_rsa_n_len, rsa->n)) + { + derror_bin2bn: + PERROR("Failed to convert binary to bignum.\n"); + apppbx->e_crypt_keyengine_return = -1; + RSA_free(rsa); + ememuse--; + break; + } + if (!BN_bin2bn(apppbx->e_crypt_rsa_e, apppbx->e_crypt_rsa_e_len, rsa->e)) + goto derror_bin2bn; + if (!BN_bin2bn(apppbx->e_crypt_rsa_d, apppbx->e_crypt_rsa_d_len, rsa->d)) + goto derror_bin2bn; + if (!BN_bin2bn(apppbx->e_crypt_rsa_p, apppbx->e_crypt_rsa_p_len, rsa->p)) + goto derror_bin2bn; + if (!BN_bin2bn(apppbx->e_crypt_rsa_q, apppbx->e_crypt_rsa_q_len, rsa->q)) + goto derror_bin2bn; + if (!BN_bin2bn(apppbx->e_crypt_rsa_dmp1, apppbx->e_crypt_rsa_dmp1_len, rsa->dmp1)) + goto derror_bin2bn; + if (!BN_bin2bn(apppbx->e_crypt_rsa_dmq1, apppbx->e_crypt_rsa_dmq1_len, rsa->dmq1)) + goto derror_bin2bn; + if (!BN_bin2bn(apppbx->e_crypt_rsa_iqmp, apppbx->e_crypt_rsa_iqmp_len, rsa->iqmp)) + goto derror_bin2bn; + PDEBUG(DEBUG_CRYPT, "decrypt: ckey =%02x%02x%02x%02x... (len=%d)\n", apppbx->e_crypt_ckey[0], apppbx->e_crypt_ckey[1], apppbx->e_crypt_ckey[2], apppbx->e_crypt_ckey[3], apppbx->e_crypt_ckey_len); + apppbx->e_crypt_key_len = RSA_private_decrypt( + apppbx->e_crypt_ckey_len, + apppbx->e_crypt_ckey, + apppbx->e_crypt_key, + rsa, + RSA_PKCS1_PADDING); + PDEBUG(DEBUG_CRYPT, "decrypt: key =%02x%02x%02x%02x... (len=%d)\n", apppbx->e_crypt_key[0], apppbx->e_crypt_key[1], apppbx->e_crypt_key[2], apppbx->e_crypt_key[3], apppbx->e_crypt_key_len); + RSA_free(rsa); + ememuse--; + apppbx->e_crypt_keyengine_return = 1; +#endif + break; + + default: + PERROR("Unknown job %d\n", job); + apppbx->e_crypt_keyengine_return = -1; + } + + done: + PDEBUG((DEBUG_EPOINT | DEBUG_CRYPT), "child process done after using libcrypto with return value %d\n", apppbx->e_crypt_keyengine_return); + + /* exit process */ + apppbx->ea_endpoint->ep_use--; + memset(args, 0, sizeof(struct auth_args)); + free(args); + amemuse--; + return(NULL); +} + +void EndpointAppPBX::cryptman_keyengine(int job) +{ + struct auth_args *arg; + pthread_t tid; + + if (e_crypt_keyengine_busy) + { + e_crypt_keyengine_return = -1; + PERROR("engine currently busy.\n"); + return; + } + + arg = (struct auth_args *)calloc(1, sizeof(struct auth_args)); + if (!arg) + { + PERROR("failed to alloc memory.\n"); + e_crypt_keyengine_return = -1; + return; + } + + arg->apppbx = this; + arg->job = job; + e_crypt_keyengine_return = 0; + e_crypt_keyengine_busy = job; + + ea_endpoint->ep_use++; + if ((pthread_create(&tid, NULL, keyengine_child, arg)<0)) + { + ea_endpoint->ep_use--; + PERROR("failed to create keyengine-thread.\n"); + e_crypt_keyengine_return = -1; + return; + } + amemuse++; + + PDEBUG((DEBUG_EPOINT | DEBUG_CRYPT), "send_mail(%d): child process created for doing crypto stuff\n", ea_endpoint->ep_serial); + +} + + +/* handler for authentication (called by apppbx's handler) + */ +void EndpointAppPBX::cryptman_handler(void) +{ + if (e_crypt_keyengine_busy) + { + if (e_crypt_keyengine_return < 0) + { + e_crypt_keyengine_busy = 0; + cryptman_message(CK_ERROR_IND, NULL, 0); + } else + if (e_crypt_keyengine_return > 0) + { + switch(e_crypt_keyengine_busy) + { + case CK_GENRSA_REQ: + e_crypt_keyengine_busy = 0; + cryptman_message(CK_GENRSA_CONF, NULL, 0); + break; + case CK_CPTRSA_REQ: + e_crypt_keyengine_busy = 0; + cryptman_message(CK_CPTRSA_CONF, NULL, 0); + break; + case CK_DECRSA_REQ: + e_crypt_keyengine_busy = 0; + cryptman_message(CK_DECRSA_CONF, NULL, 0); + break; + } + } + } + + /* check for event, make next event */ + if (e_crypt_timeout_sec) if (e_crypt_timeout_secep_serial, l); + return; + } + p = CM_GETINF(CM_INFO_RANDOM, buf); + ran = (p[0]<<24) + (p[1]<<16) + (p[2]<<8) + p[3]; + l = CM_SIZEOFINF(CM_INFO_BOGOMIPS); + if (l != 4) + { + PDEBUG(DEBUG_CRYPT, "EPOINT(%d) missing (or corrupt) random bogomips, just comparing random (len = %d)\n", ea_endpoint->ep_serial, l); + goto compare_random; + } + p = CM_GETINF(CM_INFO_BOGOMIPS, buf); + bogomips = (p[0]<<24) + (p[1]<<16) + (p[2]<<8) + p[3]; + if (e_crypt_bogomips > bogomips) + { + PDEBUG(DEBUG_CRYPT, "EPOINT(%d) our cpu is faster, so we are master (%d > %d)\n", ea_endpoint->ep_serial, e_crypt_bogomips, bogomips); + cr_master(message, NULL, 0); + return; + } + if (e_crypt_bogomips < bogomips) + { + PDEBUG(DEBUG_CRYPT, "EPOINT(%d) our cpu is slower, so we are slave (%d < %d)\n", ea_endpoint->ep_serial, e_crypt_bogomips, bogomips); + cr_slave(message, NULL, 0); + return; + } + PDEBUG(DEBUG_CRYPT, "EPOINT(%d) our cpu is equal speed, so we check for random value (%d == %d)\n", ea_endpoint->ep_serial, e_crypt_bogomips, bogomips); + compare_random: + /* bogomips are equal, so we compare */ + if (e_crypt_random > ran) + { + PDEBUG(DEBUG_CRYPT, "EPOINT(%d) our random value is greater, so we are master (%d > %d)\n", ea_endpoint->ep_serial, e_crypt_random, ran); + cr_master(message, NULL, 0); + return; + } + if (e_crypt_random < ran) + { + PDEBUG(DEBUG_CRYPT, "EPOINT(%d) our random value is smaller, so we are slave (%d < %d)\n", ea_endpoint->ep_serial, e_crypt_random, ran); + cr_slave(message, NULL, 0); + return; + } + PDEBUG(DEBUG_CRYPT, "EPOINT(%d) random values are equal, so we are looped (%d == %d)\n", ea_endpoint->ep_serial, e_crypt_random, ran); + cr_looped(message, NULL, 0); +} + +/* key-exchange activation by the user */ +void EndpointAppPBX::cr_activate(int message, unsigned char *param, int len) +{ + unsigned char buf[128] = ""; + unsigned char msg; + unsigned char bogomips[4], ran[4]; + + /* activate listener */ + cryptman_msg2crengine(CR_LISTEN_REQ, NULL, 0); + /* send ident message */ + msg = CMSG_IDENT; + CM_ADDINF(CM_INFO_MESSAGE, 1, &msg); + /* random number element */ + srandom(now_tv.tv_sec ^ now_tv.tv_usec ^ random()); + e_crypt_random = random(); + ran[0] = e_crypt_random >> 24; + ran[1] = e_crypt_random >> 16; + ran[2] = e_crypt_random >> 8; + ran[3] = e_crypt_random; + CM_ADDINF(CM_INFO_RANDOM, 4, ran); + /* cpu speed element */ + e_crypt_bogomips = get_bogomips(); + if (e_crypt_bogomips > 0) + { + bogomips[0] = e_crypt_bogomips >> 24; + bogomips[1] = e_crypt_bogomips >> 16; + bogomips[2] = e_crypt_bogomips >> 8; + bogomips[3] = e_crypt_bogomips; + CM_ADDINF(CM_INFO_BOGOMIPS, 4, bogomips); + } + /* send ident message */ + cryptman_msg2peer(buf); + /* change state */ + cryptman_state(CM_ST_IDENT); + /* set timeout */ + cryptman_timeout(CM_TO_IDENT); +} + +/* deactivation by the user */ +void EndpointAppPBX::cr_deactivate(int message, unsigned char *param, int len) +{ + unsigned char buf[128] = ""; + unsigned char msg; + + /* deactivate listener (if not already) */ + cryptman_msg2crengine(CR_UNLISTEN_REQ, NULL, 0); + /* message */ + msg = CMSG_ABORT; + CM_ADDINF(CM_INFO_MESSAGE, 1, &msg); + cryptman_msg2peer(buf); + /* deactivate encryption */ + cryptman_msg2crengine(CC_DACT_REQ, NULL, 0); + /* change state */ + cryptman_state(CM_ST_NULL); + /* send message to user */ + cryptman_msg2user(CU_DACT_CONF, "Deactivated"); +} + +/* remote peer tells us to be master */ +void EndpointAppPBX::cr_master(int message, unsigned char *param, int len) +{ + unsigned char buf[128] = ""; + unsigned char msg; + + /* change to master state */ + cryptman_state(CM_ST_KEYGEN); + if (message == CP_IDENT) + { + /* send you-are-slave-message */ + msg = CMSG_SLAVE; + CM_ADDINF(CM_INFO_MESSAGE, 1, &msg); + cryptman_msg2peer(buf); + } + /* start generation of key */ + cryptman_keyengine(CK_GENRSA_REQ); + /* disable timeout */ + cryptman_timeout(0); + /* send message to user */ + cryptman_msg2user(CU_INFO_IND, "Master"); +} + +/* remote peer tells us to be slave */ +void EndpointAppPBX::cr_slave(int message, unsigned char *param, int len) +{ + unsigned char buf[128] = ""; + unsigned char msg; + + /* change to slave state */ + cryptman_state(CM_ST_KEYWAIT); + if (message == CP_IDENT) + { + /* send you-are-slave-message */ + msg = CMSG_MASTER; + /* message */ + CM_ADDINF(CM_INFO_MESSAGE, 1, &msg); + cryptman_msg2peer(buf); + } + /* set timeout */ + cryptman_timeout(CM_TO_PUBKEY); + /* send message to user */ + cryptman_msg2user(CU_INFO_IND, "Slave"); +} + +/* remote peer tells us about loop */ +void EndpointAppPBX::cr_looped(int message, unsigned char *param, int len) +{ + unsigned char buf[128] = ""; + unsigned char msg; + + /* change to idle state */ + cryptman_state(CM_ST_NULL); + /* deactivate listener */ + cryptman_msg2crengine(CR_UNLISTEN_REQ, NULL, 0); + if (message == CP_IDENT) + { + /* send looped */ + msg = CMSG_LOOPED; + /* message */ + CM_ADDINF(CM_INFO_MESSAGE, 1, &msg); + cryptman_msg2peer(buf); + } + /* disable timeout */ + cryptman_timeout(0); + /* send message to user */ + cryptman_msg2user(CU_ERROR_IND, "Loop Detected"); +} + +/* abort */ +void EndpointAppPBX::cr_abort(int message, unsigned char *param, int len) +{ + /* if already encrypting */ + if (e_crypt_state==CM_ST_WAIT_CRYPT + || e_crypt_state==CM_ST_SWAIT + || e_crypt_state==CM_ST_ACTIVE) + { + /* deactivate blowfish */ + cryptman_msg2crengine(CC_DACT_REQ, NULL, 0); + } + /* change to idle state */ + cryptman_state(CM_ST_NULL); + /* deactivate listener */ + cryptman_msg2crengine(CR_UNLISTEN_REQ, NULL, 0); + /* disable timeout */ + cryptman_timeout(0); + /* send message to user */ + if (message == CT_TIMEOUT) + cryptman_msg2user(CU_ERROR_IND, "Timeout"); + else if (message == CP_ABORT) + cryptman_msg2user(CU_ERROR_IND, "Remote Abort"); + else + cryptman_msg2user(CU_DACT_IND, NULL); +} + +/* abort but wait for engine to release*/ +void EndpointAppPBX::cr_abort_engine(int message, unsigned char *param, int len) +{ + /* change to release state */ + cryptman_state(CM_ST_RELEASE); + /* deactivate listener */ + cryptman_msg2crengine(CR_UNLISTEN_REQ, NULL, 0); + /* disable timeout */ + cryptman_timeout(0); + /* send message to user */ + if (message == CT_TIMEOUT) + cryptman_msg2user(CU_ERROR_IND, "Timeout"); + else if (message == CP_ABORT) + cryptman_msg2user(CU_ERROR_IND, "Remote Abort"); + else + cryptman_msg2user(CU_DACT_IND, NULL); +} + +/* abort and disable crypt engine */ +void EndpointAppPBX::cr_abort_wait(int message, unsigned char *param, int len) +{ + /* change to idle state */ + cryptman_state(CM_ST_NULL); + /* deactivate listener (if not already) */ + cryptman_msg2crengine(CR_UNLISTEN_REQ, NULL, 0); + /* deactivate blowfish */ + cryptman_msg2crengine(CC_DACT_REQ, NULL, 0); + /* disable timeout */ + cryptman_timeout(0); + /* send message to user */ + if (message == CT_TIMEOUT) + cryptman_msg2user(CU_ERROR_IND, "Timeout"); + else if (message == CP_ABORT) + cryptman_msg2user(CU_ERROR_IND, "Remote Abort"); + else + cryptman_msg2user(CU_DACT_IND, NULL); +} + +/* key engine tells us that the rsa is ready */ +void EndpointAppPBX::cr_genrsa(int message, unsigned char *param, int len) +{ + unsigned char buf[1024] = ""; + unsigned char msg; + + /* change to wait for crypted session key state */ + cryptman_state(CM_ST_CSWAIT); + /* message */ + msg = CMSG_PUBKEY; + CM_ADDINF(CM_INFO_MESSAGE, 1, &msg); + CM_ADDINF(CM_INFO_PUBKEY, e_crypt_rsa_n_len, &e_crypt_rsa_n); + CM_ADDINF(CM_INFO_PUBEXPONENT, e_crypt_rsa_e_len, &e_crypt_rsa_e); + cryptman_msg2peer(buf); + /* set timeout */ + cryptman_timeout(CM_TO_CSKEY); +} + +/* our engine has a key error */ +void EndpointAppPBX::cr_keyerror(int message, unsigned char *param, int len) +{ + unsigned char buf[128] = ""; + unsigned char msg; + + /* change to idle state */ + cryptman_state(CM_ST_NULL); + /* deactivate listener */ + cryptman_msg2crengine(CR_UNLISTEN_REQ, NULL, 0); + /* message */ + msg = CMSG_ABORT; + CM_ADDINF(CM_INFO_MESSAGE, 1, &msg); + cryptman_msg2peer(buf); + /* send message to user */ + cryptman_msg2user(CU_ERROR_IND, "Local Key Error"); +} + +/* remote sends us the rsa public key */ +void EndpointAppPBX::cr_pubkey(int message, unsigned char *param, int len) +{ + unsigned char buf[128] = ""; + unsigned char msg = CMSG_ABORT; + int l; + + l = CM_SIZEOFINF(CM_INFO_PUBKEY); + if (l<1 || l>(int)sizeof(e_crypt_rsa_n)) + { + size_error: + /* change to idle state */ + cryptman_state(CM_ST_NULL); + /* deactivate listener */ + cryptman_msg2crengine(CR_UNLISTEN_REQ, NULL, 0); + /* message */ + CM_ADDINF(CM_INFO_MESSAGE, 1, &msg); + cryptman_msg2peer(buf); + /* send message to user */ + cryptman_msg2user(CU_ERROR_IND, "Remote Key Error"); + return; + } + CM_GETINF(CM_INFO_PUBKEY, e_crypt_rsa_n); + e_crypt_rsa_n_len = l; + l = CM_SIZEOFINF(CM_INFO_PUBEXPONENT); + if (l<1 || l>(int)sizeof(e_crypt_rsa_e)) + goto size_error; + CM_GETINF(CM_INFO_PUBEXPONENT, e_crypt_rsa_e); + e_crypt_rsa_e_len = l; + /* change to generating encrypted sessnion key state */ + cryptman_state(CM_ST_CSKEY); + /* start generation of crypted session key */ + cryptman_keyengine(CK_CPTRSA_REQ); + /* disable timeout */ + cryptman_timeout(0); +} + +/* key engine tells us that the crypted session key is ready */ +void EndpointAppPBX::cr_cptrsa(int message, unsigned char *param, int len) +{ + unsigned char buf[1024] = ""; + unsigned char msg = CMSG_CSKEY; + + /* change to wait for crypt engine state */ + cryptman_state(CM_ST_WAIT_DELAY); + /* message */ + CM_ADDINF(CM_INFO_MESSAGE, 1, &msg); + CM_ADDINF(CM_INFO_CSKEY, e_crypt_ckey_len, &e_crypt_ckey); + cryptman_msg2peer(buf); + /* deactivate listener */ + cryptman_msg2crengine(CR_UNLISTEN_REQ, NULL, 0); + /* timeout 1 sec */ + cryptman_timeout(1); +} + +/* now we waited for the remote to receive and decrypt the session key */ +void EndpointAppPBX::cr_waitdelay(int message, unsigned char *param, int len) +{ + /* change to wait for crypt engine state */ + cryptman_state(CM_ST_WAIT_CRYPT); + /* disable timeout */ + cryptman_timeout(0); + /* send message to crypt engine */ + cryptman_msg2crengine(CC_ACTBF_REQ, e_crypt_key, e_crypt_key_len); +} + +/* remote sends us the crypted session key */ +void EndpointAppPBX::cr_cskey(int message, unsigned char *param, int len) +{ + unsigned char buf[128] = ""; + unsigned char msg = CMSG_ABORT; + int l; + + /* disable timeout */ + cryptman_timeout(0); + l = CM_SIZEOFINF(CM_INFO_CSKEY); + if (l<1 || l>(int)sizeof(e_crypt_ckey)) + { + /* change to idle state */ + cryptman_state(CM_ST_NULL); + /* deactivate listener */ + cryptman_msg2crengine(CR_UNLISTEN_REQ, NULL, 0); + /* message */ + CM_ADDINF(CM_INFO_MESSAGE, 1, &msg); + cryptman_msg2peer(buf); + /* send message to user */ + cryptman_msg2user(CU_ERROR_IND, "Remote Key Error"); + return; + } + CM_GETINF(CM_INFO_CSKEY, e_crypt_ckey); + e_crypt_ckey_len = l; + /* change to generating decrypted session key state */ + cryptman_state(CM_ST_SESSION); + /* start generation of decrypted session key */ + cryptman_keyengine(CK_DECRSA_REQ); +} + +/* key engine tells us that the decrypted session key is ready */ +void EndpointAppPBX::cr_decrsa(int message, unsigned char *param, int len) +{ + /* change to wait for crypt engine state */ + cryptman_state(CM_ST_WAIT_CRYPT); + /* deactivate listener */ + cryptman_msg2crengine(CR_UNLISTEN_REQ, NULL, 0); + /* send message to crypt engine */ + cryptman_msg2crengine(CC_ACTBF_REQ, e_crypt_key, e_crypt_key_len); +} + +/* blowfish now active */ +void EndpointAppPBX::cr_bfactive(int message, unsigned char *param, int len) +{ + char text[64]; + + /* change to active state */ + cryptman_state(CM_ST_ACTIVE); + /* send message to user */ + SPRINT(text, "PUB %02x%02x %02x%02x %02x%02x %02x%02x", e_crypt_key[0], e_crypt_key[1], e_crypt_key[2], e_crypt_key[3], e_crypt_key[4], e_crypt_key[5], e_crypt_key[6], e_crypt_key[7]); + cryptman_msg2user(CU_ACTK_CONF, text); +} + +/* our crypt engine sends an error */ +void EndpointAppPBX::cr_crypterror(int message, unsigned char *param, int len) +{ + unsigned char buf[128] = ""; + unsigned char msg = CMSG_ABORT; + + /* change to idle state */ + cryptman_state(CM_ST_NULL); + /* deactivate listener */ + cryptman_msg2crengine(CR_UNLISTEN_REQ, NULL, 0); + /* message */ + CM_ADDINF(CM_INFO_MESSAGE, 1, &msg); + cryptman_msg2peer(buf); + /* send message to user */ + cryptman_msg2user(CU_ERROR_IND, "Blowfish Error"); +} + +/* engine is done, now we are done with release */ +void EndpointAppPBX::cr_release(int message, unsigned char *param, int len) +{ + /* change to idle state */ + cryptman_state(CM_ST_NULL); +} + +/* activate using shared key */ +void EndpointAppPBX::cr_sactivate(int message, unsigned char *param, int len) +{ + /* change to 'wait for crypt engine' state */ + cryptman_state(CM_ST_SWAIT); + /* disable timeout */ + cryptman_timeout(0); + /* send key to crypt engine */ + cryptman_msg2crengine(CC_ACTBF_REQ, param, len); +} + +/* share key deactivation by the user */ +void EndpointAppPBX::cr_sdeactivate(int message, unsigned char *param, int len) +{ + /* deactivate encryption */ + cryptman_msg2crengine(CC_DACT_REQ, NULL, 0); + /* change state */ + cryptman_state(CM_ST_NULL); + /* send message to user */ + cryptman_msg2user(CU_DACT_CONF, NULL); +} + +/* shared key abort */ +void EndpointAppPBX::cr_sabort(int message, unsigned char *param, int len) +{ + /* change to idle state */ + cryptman_state(CM_ST_NULL); + /* send message to user */ + cryptman_msg2user(CU_DACT_IND, "Deactivated"); +} + +/* shared key: our crypt engine sends an error */ +void EndpointAppPBX::cr_scrypterror(int message, unsigned char *param, int len) +{ + /* change to idle state */ + cryptman_state(CM_ST_NULL); + /* send message to user */ + cryptman_msg2user(CU_ERROR_IND, "Blowfish Error"); +} + +/* blowfish now active */ +void EndpointAppPBX::cr_sbfactive(int message, unsigned char *param, int len) +{ + char text[64]; + + /* change to active state */ + cryptman_state(CM_ST_SACTIVE); + /* send message to user */ + SPRINT(text, "Call Secure"); + cryptman_msg2user(CU_ACTS_CONF, text); +} + +/* user requests info */ +void EndpointAppPBX::cr_info(int message, unsigned char *param, int len) +{ + /* send message to user */ + cryptman_msg2user(CU_INFO_CONF, e_crypt_info); +} + + +CM_MSG_NAMES + +void EndpointAppPBX::cryptman_message(int message, unsigned char *param, int len) +{ + char *msgtext = "<>"; + + if (message>=0 && messageep_serial, statename(e_crypt_state), msgtext, len); + + /* all states */ + if (message == CU_INFO_REQ) + { cr_info(message, param, len); return; } + + switch(e_crypt_state) + { + /* in idle state */ + case CM_ST_NULL: + if (message == CU_ACTK_REQ) /* request key-exchange encryption */ + { cr_activate(message, param, len); return; } + if (message == CU_ACTS_REQ) /* request shared encryption */ + { cr_sactivate(message, param, len); return; } + break; + + /* identifying state */ + case CM_ST_IDENT: + if (message == CP_IDENT) /* request encryption */ + { cr_ident(message, param, len); return; } + if (message == CP_SLAVE) /* we are slave */ + { cr_slave(message, param, len); return; } + if (message == CP_MASTER) /* we are master */ + { cr_master(message, param, len); return; } + if (message == CP_LOOPED) /* we are looped */ + { cr_looped(message, param, len); return; } + if (message == CI_DISCONNECT_IND /* request aborting */ + || message == CT_TIMEOUT /* timeout */ + || message == CP_ABORT) /* request aborting */ + { cr_abort(message, param, len); return; } + break; + + /* generating public key state */ + case CM_ST_KEYGEN: + if (message == CK_GENRSA_CONF) /* public key is done */ + { cr_genrsa(message, param, len); return; } + if (message == CK_ERROR_IND) /* key failed */ + { cr_keyerror(message, param, len); return; } + if (message == CI_DISCONNECT_IND /* request aborting */ + || message == CP_ABORT) /* request aborting */ + { cr_abort_engine(message, param, len); return; } + break; + + /* waiting for public key state */ + case CM_ST_KEYWAIT: + if (message == CP_PUBKEY) /* getting public key from remote */ + { cr_pubkey(message, param, len); return; } + if (message == CI_DISCONNECT_IND /* request aborting */ + || message == CT_TIMEOUT /* timeout */ + || message == CP_ABORT) /* request aborting */ + { cr_abort(message, param, len); return; } + break; + + /* generating crypted session key state */ + case CM_ST_CSKEY: + if (message == CK_CPTRSA_CONF) /* crypted session key is done */ + { cr_cptrsa(message, param, len); return; } + if (message == CK_ERROR_IND) /* key failed */ + { cr_keyerror(message, param, len); return; } + if (message == CI_DISCONNECT_IND /* request aborting */ + || message == CP_ABORT) /* request aborting */ + { cr_abort_engine(message, param, len); return; } + break; + + /* waiting for crypted session key state */ + case CM_ST_CSWAIT: + if (message == CP_CSKEY) /* getting crypted session key from remote */ + { cr_cskey(message, param, len); return; } + if (message == CI_DISCONNECT_IND /* request aborting */ + || message == CT_TIMEOUT /* timeout */ + || message == CP_ABORT) /* request aborting */ + { cr_abort(message, param, len); return; } + break; + + /* generating decrypted session key state */ + case CM_ST_SESSION: + if (message == CK_DECRSA_CONF) /* decrypted is done */ + { cr_decrsa(message, param, len); return; } + if (message == CK_ERROR_IND) /* key failed */ + { cr_keyerror(message, param, len); return; } + if (message == CI_DISCONNECT_IND /* request aborting */ + || message == CP_ABORT) /* request aborting */ + { cr_abort_engine(message, param, len); return; } + break; + + /* wait encryption on state */ + case CM_ST_WAIT_DELAY: + if (message == CT_TIMEOUT) /* timeout of delay */ + { cr_waitdelay(message, param, len); return; } + if (message == CC_ERROR_IND) /* encrpytion error */ + { cr_crypterror(message, param, len); return; } + if (message == CI_DISCONNECT_IND /* request aborting */ + || message == CP_ABORT) /* request aborting */ + { cr_abort_wait(message, param, len); return; } + break; + + /* wait encryption on state */ + case CM_ST_WAIT_CRYPT: + if (message == CC_ACTBF_CONF) /* encrpytion active */ + { cr_bfactive(message, param, len); return; } + if (message == CC_ERROR_IND) /* encrpytion error */ + { cr_crypterror(message, param, len); return; } + if (message == CI_DISCONNECT_IND /* request aborting */ + || message == CP_ABORT) /* request aborting */ + { cr_abort_wait(message, param, len); return; } + break; + + /* active state */ + case CM_ST_ACTIVE: + if (message == CU_DACT_REQ) /* deactivating encryption */ + { cr_deactivate(message, param, len); return; } + if (message == CI_DISCONNECT_IND /* request aborting */ + || message == CP_ABORT) /* request aborting */ + { cr_abort(message, param, len); return; } + break; + + + /* engine done after abort state */ + case CM_ST_RELEASE: + if (message == CK_GENRSA_CONF /* engine done */ + || message == CK_CPTRSA_CONF /* engine done */ + || message == CK_DECRSA_CONF /* engine done */ + || message == CK_ERROR_IND) /* engine error */ + { cr_release(message, param, len); return; } + break; + + /* shared active state */ + case CM_ST_SACTIVE: + if (message == CU_DACT_REQ) /* deactivating encryption */ + { cr_sdeactivate(message, param, len); return; } + if (message == CI_DISCONNECT_IND) /* request aborting */ + { cr_sabort(message, param, len); return; } + break; + + /* wait shared encryption on state */ + case CM_ST_SWAIT: + if (message == CC_ACTBF_CONF) /* encrpytion active */ + { cr_sbfactive(message, param, len); return; } + if (message == CC_ERROR_IND) /* encrpytion error */ + { cr_scrypterror(message, param, len); return; } + if (message == CI_DISCONNECT_IND) /* request aborting */ + { cr_sabort(message, param, len); return; } + break; + + } + + PDEBUG(DEBUG_CRYPT, "message not handled in state %d\n", e_crypt_state); +} + + +/* + * analyze the message element within the received message from peer and call 'cryptman_message' + */ +void EndpointAppPBX::cryptman_msg2man(unsigned char *param, int len) +{ + unsigned char *p; + unsigned char msg; + int i, l; + + /* check if frame is correct */ + PDEBUG(DEBUG_CRYPT, "EPOINT(%d) message from peer to crypt_manager.\n", ea_endpoint->ep_serial); + if (len == 0) + { + PDEBUG(DEBUG_CRYPT, "ignoring message with 0-length.\n"); + return; + } + i = 0; + p = param; + while(*p) + { + if (i == len) + { + PDEBUG(DEBUG_CRYPT, "end of message without 0-termination.\n"); + return; + } + if (i+3 > len) + { + PDEBUG(DEBUG_CRYPT, "message with element size, outside the frame length.\n"); + return; + } + l = (p[1]<<8) + p[2]; +// PDEBUG(DEBUG_CRYPT, " inf %d (len = %d)\n", *p, l); + if (i+3+l > len) + { + PDEBUG(DEBUG_CRYPT, "message with element data, outside the frame length.\n"); + return; + } + i += l + 3; + p += l + 3; + } + if (i+1 != len) + { + PDEBUG(DEBUG_CRYPT, "warning: received null-element before end of frame.\n"); + } + + l = CM_SIZEOFINF(CM_INFO_MESSAGE); + if (l != 1) + { + PDEBUG(DEBUG_CRYPT, "received message without (valid) message element (len = %d)\n", len); + return; + } + CM_GETINF(CM_INFO_MESSAGE, &msg); + switch (msg) + { + case CMSG_IDENT: + cryptman_message(CP_IDENT, param, len); + break; + case CMSG_SLAVE: + cryptman_message(CP_SLAVE, param, len); + break; + case CMSG_MASTER: + cryptman_message(CP_MASTER, param, len); + break; + case CMSG_PUBKEY: + cryptman_message(CP_PUBKEY, param, len); + break; + case CMSG_CSKEY: + cryptman_message(CP_CSKEY, param, len); + break; + case CMSG_ABORT: + cryptman_message(CP_ABORT, param, len); + break; + default: + PDEBUG(DEBUG_CRYPT, "received unknown message element %d\n", msg); + } +} + +/* add information element to buffer + */ +void EndpointAppPBX::cryptman_addinf(unsigned char *buf, int buf_size, int element, int len, void *data) +{ + int l; + + /* skip what we already have in the buffer */ + while (buf[0]) + { + l = (buf[1]<<8) + buf[2]; + if (l >= buf_size-3) + { + PERROR("EPOINT(%d) buffer overflow while adding information to peer message.\n", ea_endpoint->ep_serial); + return; + } + buf_size -= l + 3; + buf += l + 3; + } + /* check if we have not enough space to add element including id, len, data, and the null-termination */ + if (len+4 > buf_size) + { + PERROR("EPOINT(%d) cannot add element to message, because buffer would overflow.\n", ea_endpoint->ep_serial); + return; + } + buf[0] = element; + buf[1] = len >> 8; + buf[2] = len; + memcpy(buf+3, data, len); +} + + +/* get size of element in buffer + */ +int EndpointAppPBX::cryptman_sizeofinf(unsigned char *buf, int element) +{ + int l; + + /* skip what we already have in the buffer */ + while (buf[0]) + { + l = (buf[1]<<8) + buf[2]; + if (buf[0] == element) + return(l); + buf += l + 3; + } + return(-1); +} + + +/* get information element from buffer + */ +unsigned char *EndpointAppPBX::cryptman_getinf(unsigned char *buf, int element, unsigned char *to) +{ + int l; + + /* skip what we already have in the buffer */ + while (buf[0]) + { + l = (buf[1]<<8) + buf[2]; + if (buf[0] == element) + { + memcpy(to, buf+3, l); + return(to); + } + buf += l + 3; + } + return(NULL); +} + + +/* send message to peer + */ +void EndpointAppPBX::cryptman_msg2peer(unsigned char *buf) +{ + struct message *message; + unsigned char *p = buf; + int len = 0; + int l; + + /* get len */ + while(p[0]) + { + l = (p[1]<<8) + p[2]; + len += l + 3; + p += l + 3; + } + if (len+1 > (int)sizeof(message->param.crypt.data)) + { + PERROR("EPOINT(%d) message larger than allowed in param->crypt.data.\n", ea_endpoint->ep_serial); + return; + } + /* send message */ + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_portlist->port_id, EPOINT_TO_PORT, MESSAGE_CRYPT); + message->param.crypt.type = CR_MESSAGE_REQ; + message->param.crypt.len = len+1; + memcpy(message->param.crypt.data, buf, len+1); + message_put(message); + + if (options.deb & DEBUG_CRYPT) + { + PDEBUG(DEBUG_CRYPT, "EPOINT(%d) sending message\n", ea_endpoint->ep_serial); + p = buf; + while(p[0]) + { + l = (p[1]<<8) + p[2]; + PDEBUG(DEBUG_CRYPT, " inf %d (len = %d)\n", p[0], l); + len += l + 3; + p += l + 3; + } + } +} + +/* send message to crypt engine + */ +void EndpointAppPBX::cryptman_msg2crengine(int msg, unsigned char *buf, int len) +{ + struct message *message; + + if (len > (int)sizeof(message->param.crypt.data)) + { + PERROR("EPOINT(%d) message larger than allowed in param->crypt.data.\n", ea_endpoint->ep_serial); + return; + } + /* send message */ + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_portlist->port_id, EPOINT_TO_PORT, MESSAGE_CRYPT); + message->param.crypt.type = msg; + message->param.crypt.len = len; + if (len) + memcpy(message->param.crypt.data, buf, len); + message_put(message); + + if (options.deb & DEBUG_CRYPT) + { + char *msgtext = "<>"; + + if (msg>=0 && msgep_serial, msgtext, len); + } +} + +/* send message to user + */ +void EndpointAppPBX::cryptman_msg2user(int msg, char *text) +{ + struct message *message; + /* send message */ + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, MESSAGE_CRYPT); + message->param.crypt.type = msg; + if (!text) + text = ""; + SCPY(e_crypt_info, text); + if (text[0]) + { + UNCPY((char *)message->param.crypt.data, e_crypt_info, sizeof(message->param.crypt.data)-1); + message->param.crypt.len = strlen((char *)message->param.crypt.data)+1; + } + message_put(message); + + if (options.deb & DEBUG_CRYPT) + { + char *msgtext = "<>"; + + if (msg>=0 && msgep_serial, msgtext, text?text:""); + } +} + +/* change state + */ +void EndpointAppPBX::cryptman_state(int state) +{ + PDEBUG(DEBUG_CRYPT, "Changing state from %s to %s\n", statename(e_crypt_state), statename(state)); + e_crypt_state = state; +} + + +/* set timeout + */ +void EndpointAppPBX::cryptman_timeout(int secs) +{ + if (secs) + { + e_crypt_timeout_sec = now_tv.tv_sec+secs; + e_crypt_timeout_usec = now_tv.tv_usec; + PDEBUG(DEBUG_CRYPT, "Changing timeout to %d seconds\n", secs); + } else + { + e_crypt_timeout_sec = 0; + e_crypt_timeout_usec = 0; + PDEBUG(DEBUG_CRYPT, "turning timeout off\n", secs); + } +} + +/* encode a message to be sent via b-channel + */ +int cryptman_encode_bch(unsigned char *data, int len, unsigned char *buf, int buf_len) +{ + unsigned long crc; + int overhead = 18; + + len--; /* without null-termination */ + if (buf_len < len+overhead) + { + PERROR("frame too long for buffer"); + return(0); + } + PDEBUG(DEBUG_CRYPT, "encoding a block of %d bytes.\n", len); + + /* write identification sequence to the header */ + UNCPY((char *)buf, "CRYPTMAN" ,8); + buf += 8; + /* length + checksumme */ + buf[0] = len >> 8; + buf[1] = len & 0xff; + crc = crc32(buf, 2); + buf += 2; + buf[0] = crc >> 24; + buf[1] = crc >> 16; + buf[2] = crc >> 8; + buf[3] = crc; + buf += 4; + /* data + checksumme */ + memcpy(buf, data, len); + crc = crc32(buf, len); + buf += len; + buf[0] = crc >> 24; + buf[1] = crc >> 16; + buf[2] = crc >> 8; + buf[3] = crc; + buf += 4; + return(len + overhead); +} + +/* decode a message from b-channel + */ +void PmISDN::cryptman_listen_bch(unsigned char *p, int l) +{ + int i; + struct message *message; + + retry: + if (!l) + return; + + /* check for the keyword */ + if (p_m_crypt_listen_state == 0) + { + while((*p++)!='C' && l) + l--; + if (!l) + return; + l--; + p_m_crypt_listen_state++; + if (!l) + return; + } + if (p_m_crypt_listen_state < 8) + { + i = p_m_crypt_listen_state; + while(i < 8) + { + l--; + if (*p++ != "CRYPTMAN"[i]) + { + p_m_crypt_listen_state = 0; + goto retry; + } + p_m_crypt_listen_state++; + if (!l) + break; + i++; + } + if (!l) + return; + } + /* high byte of length */ + if (p_m_crypt_listen_state == 8) + { + p_m_crypt_listen_len = (*p++) << 8; + p_m_crypt_listen_state++; + if (!(--l)) + return; + } + /* low byte of length */ + if (p_m_crypt_listen_state == 9) + { + p_m_crypt_listen_len += *p++; + p_m_crypt_listen_state++; + if (!(--l)) + return; + } + /* crc */ + if (p_m_crypt_listen_state == 10) + { + p_m_crypt_listen_crc = (*p++) << 24; + p_m_crypt_listen_state++; + if (!(--l)) + return; + } + if (p_m_crypt_listen_state == 11) + { + p_m_crypt_listen_crc += (*p++) << 16; + p_m_crypt_listen_state++; + if (!(--l)) + return; + } + if (p_m_crypt_listen_state == 12) + { + p_m_crypt_listen_crc += (*p++) << 8; + p_m_crypt_listen_state++; + if (!(--l)) + return; + } + if (p_m_crypt_listen_state == 13) + { + unsigned char lencheck[2]; + p_m_crypt_listen_crc += *p++; + /* check for CRC */ + lencheck[0] = p_m_crypt_listen_len >> 8; + lencheck[1] = p_m_crypt_listen_len & 0xff; + if (crc32(lencheck, 2) != p_m_crypt_listen_crc) + { + PDEBUG(DEBUG_CRYPT, "PmISDN(%s) received a block of %d bytes, but checksumme of length is incorrect (must %08x is %08x\n", p_name, p_m_crypt_listen_len, crc32(lencheck, 2), p_m_crypt_listen_crc); + p_m_crypt_listen_state = 0; + goto retry; + } + if (p_m_crypt_listen_len > (int)sizeof(p_m_crypt_listen_msg)) + { + PDEBUG(DEBUG_CRYPT, "PmISDN(%s) received a block of %d bytes, but too big for buffer (%d bytes)\n", p_name, p_m_crypt_listen_len, sizeof(p_m_crypt_listen_msg)); + p_m_crypt_listen_state = 0; + goto retry; + } + if (!p_m_crypt_listen_len) + { + PDEBUG(DEBUG_CRYPT, "PmISDN(%s) received a block of 0 bytes\n", p_name); + p_m_crypt_listen_state = 0; + goto retry; + } + p_m_crypt_listen_state++; + if (!(--l)) + return; + } + /* read message */ + while (p_m_crypt_listen_state>=14 && p_m_crypt_listen_state<(p_m_crypt_listen_len+14)) + { + p_m_crypt_listen_msg[p_m_crypt_listen_state-14] = *p++; + p_m_crypt_listen_state++; + if (!(--l)) + return; + } + /* crc */ + if (p_m_crypt_listen_state == 14+p_m_crypt_listen_len) + { + p_m_crypt_listen_crc = (*p++) << 24; + p_m_crypt_listen_state++; + if (!(--l)) + return; + } + if (p_m_crypt_listen_state == 15+p_m_crypt_listen_len) + { + p_m_crypt_listen_crc += (*p++) << 16; + p_m_crypt_listen_state++; + if (!(--l)) + return; + } + if (p_m_crypt_listen_state == 16+p_m_crypt_listen_len) + { + p_m_crypt_listen_crc += (*p++) << 8; + p_m_crypt_listen_state++; + if (!(--l)) + return; + } + if (p_m_crypt_listen_state == 17+p_m_crypt_listen_len) + { + l--; + p_m_crypt_listen_crc += *p++; + /* check for CRC */ + if (crc32(p_m_crypt_listen_msg, p_m_crypt_listen_len) != p_m_crypt_listen_crc) + { + PDEBUG(DEBUG_CRYPT, "PmISDN(%s) received a block of %d bytes, but checksumme of data block is incorrect\n", p_name, p_m_crypt_listen_len); + p_m_crypt_listen_state = 0; + if (!l) + return; + goto retry; + } + /* now send message */ + p_m_crypt_listen_state = 0; + PDEBUG(DEBUG_CRYPT, "PmISDN(%s) received a block of %d bytes sending to crypt manager\n", p_name, p_m_crypt_listen_len); + if ((int)sizeof(message->param.crypt.data) < p_m_crypt_listen_len+1) /* null-terminated */ + { + PDEBUG(DEBUG_CRYPT, "PmISDN(%s) received a block of %d bytes that is too large for message buffer\n", p_name, p_m_crypt_listen_len); + if (!l) + return; + goto retry; + } + message = message_create(p_serial, ACTIVE_EPOINT(p_epointlist), PORT_TO_EPOINT, MESSAGE_CRYPT); + message->param.crypt.type = CR_MESSAGE_IND; + message->param.crypt.len = p_m_crypt_listen_len+1; /* null termination */ + memcpy(message->param.crypt.data, p_m_crypt_listen_msg, p_m_crypt_listen_len); + message_put(message); + p_m_crypt_listen_state = 0; + if (!l) + return; + goto retry; + } +} + + +/* encrypt call using share secret (keypad function) + */ +void EndpointAppPBX::encrypt_shared(void) +{ + struct message *message; + char *errstr = ""; + class Port *port; + int type, key_len; + unsigned char *key; + char *auth_pointer, *crypt_pointer, *key_pointer; + int ret; + + /* redisplay current crypt display */ + if (e_crypt != CRYPT_OFF) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) encryption in progress, so we request the current message.\n", ea_endpoint->ep_serial); + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, MESSAGE_CRYPT); + message->param.crypt.type = CU_INFO_REQ; + message_put(message); + return; + } + + if (check_external(&errstr, &port)) + { + reject: + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_portlist->port_id, EPOINT_TO_PORT, MESSAGE_NOTIFY); + SCPY(message->param.notifyinfo.display, errstr); + message_put(message); + set_tone(ea_endpoint->ep_portlist, "crypt_off"); + e_tone[0] = '\0'; + return; + } + + /* check the key for the call */ + if (port->p_type==PORT_TYPE_DSS1_TE_OUT || port->p_type==PORT_TYPE_DSS1_NT_OUT || port->p_type==PORT_TYPE_SIP_OUT) + ret = parse_secrets((char *)e_terminal, (char *)port->p_dialinginfo.number, &auth_pointer, &crypt_pointer, &key_pointer); + else + { + if (!port->p_callerinfo.id[0]) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) incoming remote call has no caller ID.\n", ea_endpoint->ep_serial); + errstr = "No Remote ID"; + goto reject; + } + ret = parse_secrets((char *)e_terminal, (char *)numberrize_callerinfo(port->p_callerinfo.id, port->p_callerinfo.ntype), &auth_pointer, &crypt_pointer, &key_pointer); + } + if (!ret) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) Key was not found.\n", ea_endpoint->ep_serial); + errstr = "No Key"; + goto reject; + } + key = crypt_key((unsigned char *)key_pointer, &key_len); + if (!key) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) Key invalid.\n", ea_endpoint->ep_serial); + errstr = "Invalid Key"; + goto reject; + } + if (key_len > 128) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) Key too long.\n", ea_endpoint->ep_serial); + errstr = "Key Too Long"; + goto reject; + } + if (!!strcasecmp(auth_pointer, "manual")) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) Wrong authentication method.\n", ea_endpoint->ep_serial); + errstr = "Wrong Auth Type"; + goto reject; + } + if (!strcasecmp(crypt_pointer, "blowfish")) + { + type = CC_ACTBF_REQ; + if (key_len < 4) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) Key too short.\n", ea_endpoint->ep_serial); + errstr = "Key Too Short"; + goto reject; + } + if (key_len > 56) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) Key too long.\n", ea_endpoint->ep_serial); + errstr = "Key Too Long"; + goto reject; + } + } else + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) Wrong crypt method.\n", ea_endpoint->ep_serial); + errstr = "Wrong Crypt Type"; + goto reject; + } + + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) Key is ok, sending activation+key to cryptman.\n", ea_endpoint->ep_serial); + /* setting display message and state */ +// SPRINT(e_crypt_display, "Shared Key"); + e_crypt = CRYPT_SWAIT; + /* sending activation */ + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, MESSAGE_CRYPT); + message->param.crypt.type = CU_ACTS_REQ; + message->param.crypt.len = key_len; + memcpy(message->param.crypt.data, key, key_len); + message_put(message); +} + + +/* encrypt call using rsa authentication (keypad function) + */ +void EndpointAppPBX::encrypt_keyex(void) +{ + struct message *message; + char *errstr = ""; + class Port *port; + + /* redisplay current crypt display */ + if (e_crypt != CRYPT_OFF) + { + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) encryption in progress, so we request the current message.\n", ea_endpoint->ep_serial); + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, MESSAGE_CRYPT); + message->param.crypt.type = CU_INFO_REQ; + message_put(message); + return; + } + + + if (check_external(&errstr, &port)) + { + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_portlist->port_id, EPOINT_TO_PORT, MESSAGE_NOTIFY); + SCPY(message->param.notifyinfo.display, errstr); + message_put(message); + set_tone(ea_endpoint->ep_portlist, "crypt_off"); + e_tone[0] = '\0'; + return; + } + +#ifndef CRYPTO + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_portlist->port_id, EPOINT_TO_PORT, MESSAGE_NOTIFY); + SCPY(message->param.notifyinfo.display, "Not Compiled"); + message_put(message); + set_tone(ea_endpoint->ep_portlist, "crypt_off"); + e_tone[0] = '\0'; +#else + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) Sending key-exchange activation to cryptman.\n", ea_endpoint->ep_serial); + /* setting display message and state */ +// SPRINT(e_crypt_display, "Key-Exchange"); + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_portlist->port_id, EPOINT_TO_PORT, MESSAGE_NOTIFY); + SCPY(message->param.notifyinfo.display, "Key-Exchange"); + message_put(message); + e_crypt = CRYPT_KWAIT; + /* sending activation */ + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, MESSAGE_CRYPT); + message->param.crypt.type = CU_ACTK_REQ; + message_put(message); +#endif /* CRYPTO */ +} + + +/* turn encryption off (keypad function) + */ +void EndpointAppPBX::encrypt_off(void) +{ + struct message *message; + + if (e_crypt!=CRYPT_ON && e_crypt!=CRYPT_OFF) + { + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_portlist->port_id, EPOINT_TO_PORT, MESSAGE_NOTIFY); + SCPY(message->param.notifyinfo.display, "Please Wait"); + message_put(message); + return; + } + if (e_crypt == CRYPT_OFF) + { + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_portlist->port_id, EPOINT_TO_PORT, MESSAGE_NOTIFY); + SCPY(message->param.notifyinfo.display, "No Encryption"); + message_put(message); + set_tone(ea_endpoint->ep_portlist, "crypt_off"); + e_tone[0] = '\0'; + return; + } + + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) Sending deactivation to cryptman.\n", ea_endpoint->ep_serial); + /* setting display message and state */ +// SPRINT(e_crypt_display, "Deactivating"); + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_portlist->port_id, EPOINT_TO_PORT, MESSAGE_NOTIFY); + SCPY(message->param.notifyinfo.display, "Deactivating"); + message_put(message); + e_crypt = CRYPT_RELEASE; + /* sending activation */ + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_call_id, EPOINT_TO_CALL, MESSAGE_CRYPT); + message->param.crypt.type = CU_DACT_REQ; + message_put(message); +} + + +/* messages from manager to endpoint + */ +void EndpointAppPBX::encrypt_result(int msg, char *text) +{ + struct message *message; + + switch(msg) + { + case CU_ACTK_CONF: + case CU_ACTS_CONF: + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) encryption now active.\n", ea_endpoint->ep_serial); + set_tone(ea_endpoint->ep_portlist, "crypt_on"); + e_tone[0] = '\0'; + e_crypt = CRYPT_ON; + display: + if (text) if (text[0]) + { + SCPY(e_crypt_info, text); + message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_portlist->port_id, EPOINT_TO_PORT, MESSAGE_NOTIFY); + SCPY(message->param.notifyinfo.display, e_crypt_info); + message_put(message); + } + break; + + case CU_ERROR_IND: + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) encryption error. (%s)\n", ea_endpoint->ep_serial, text); + set_tone(ea_endpoint->ep_portlist, "crypt_off"); + e_tone[0] = '\0'; + e_crypt = CRYPT_OFF; + goto display; + break; + + case CU_DACT_CONF: + case CU_DACT_IND: + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) encryption now off. (%s)\n", ea_endpoint->ep_serial, text); + set_tone(ea_endpoint->ep_portlist, "crypt_off"); + e_tone[0] = '\0'; + e_crypt = CRYPT_OFF; + goto display; + break; + + case CU_INFO_CONF: + case CU_INFO_IND: + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) information. (%s)\n", ea_endpoint->ep_serial, text); + goto display; + break; + + default: + PERROR("EPOINT(%d) crypt manager sends us an invalid message. (type = %d)\n", ea_endpoint->ep_serial, msg); + } +} + diff --git a/crypt.h b/crypt.h new file mode 100644 index 0000000..26d1c3e --- /dev/null +++ b/crypt.h @@ -0,0 +1,173 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** crypt header file ** +** ** +\*****************************************************************************/ + + +enum { /* enpoint's user states */ + CRYPT_OFF, /* no encryption */ + CRYPT_KWAIT, /* wait for key-exchange mehtod */ + CRYPT_SWAIT, /* wait for shared secret method */ + CRYPT_ON, /* crypting */ + CRYPT_RELEASE, /* wait for deactivation */ +}; + +#define CM_TO_IDENT 10 /* timeout for identifying remote peer */ +#define CM_TO_PUBKEY 60 /* timeout for public key generation */ +#define CM_TO_CSKEY 5 /* timeout for crypting session key */ + +enum { /* crypt manager states */ + CM_ST_NULL, /* no encryption used */ + CM_ST_IDENT, /* find the remote pary */ + CM_ST_KEYGEN, /* generating public/private key */ + CM_ST_KEYWAIT, /* waiting for public key */ + CM_ST_CSKEY, /* generate crypted session key */ + CM_ST_CSWAIT, /* wait for CSKey */ + CM_ST_SESSION, /* wait for session key decryption */ + CM_ST_WAIT_DELAY, /* wait sone time until the cskey is transferred */ + CM_ST_WAIT_CRYPT, /* wait for encryption from session engine */ + CM_ST_ACTIVE, /* done with encryption */ + CM_ST_RELEASE, /* wait until key engine has finished, after abort */ + + CM_ST_SWAIT, /* wait for share key establishment */ + CM_ST_SACTIVE, /* shared key established */ +}; + +#define CM_ST_NAMES \ +static char *cm_st_name[] = { \ + "NULL", \ + "IDENT", \ + "KEYGEN", \ + "KEYWAIT", \ + "CSKEY", \ + "CSWAIT", \ + "SESSION", \ + "WAIT_DELAY", \ + "WAIT_CRYPT", \ + "ACTIVE", \ + "RELEASE", \ + "SWAIT", \ + "SACTIVE", \ +}; \ +int cm_st_num = sizeof(cm_st_name) / sizeof(char *); + +enum { /* messages */ + /* messages to/from peer */ + CP_IDENT, /* send random number, cpu power */ + CP_SLAVE, /* tell remote to be slave */ + CP_MASTER, /* tell remote to be master */ + CP_LOOPED, /* tell remote (us) that the call is looped */ + CP_PUBKEY, /* send public key */ + CP_CSKEY, /* send encrypted session key */ + CP_ABORT, /* send abort message */ + /* messages to/from "key engine" */ + CK_GENRSA_REQ, /* generate rsa key */ + CK_GENRSA_CONF, /* rsa key result */ + CK_CPTRSA_REQ, /* crypt session key */ + CK_CPTRSA_CONF, /* session key result */ + CK_DECRSA_REQ, /* decode session key */ + CK_DECRSA_CONF, /* session key result */ + CK_ERROR_IND, /* error of engine */ + /* messages to/from "crypt engine" */ + CC_ACTBF_REQ, /* activate blowfish */ + CC_ACTBF_CONF, /* blowfish activated */ + CC_ERROR_IND, /* failed to activate session encryption */ + CC_DACT_REQ, /* deactivate session encryption */ + /* messages to/from user interface */ + CU_ACTK_REQ, /* request encryption with key exchange */ + CU_ACTK_CONF, /* encryption now active */ + CU_ACTS_REQ, /* request shared key encryption */ + CU_ACTS_CONF, /* encryption now active */ + CU_ERROR_IND, /* encryption failed */ + CU_INFO_REQ, /* info reques */ + CU_INFO_CONF, /* info to the user*/ + CU_INFO_IND, /* info to the user*/ + CU_DACT_REQ, /* deactivate encryption */ + CU_DACT_CONF, /* encryption now inactive */ + CU_DACT_IND, /* encryption now inactive */ + /* messages to/from message transponder */ + CR_LISTEN_REQ, /* start listening to messages */ + CR_UNLISTEN_REQ, /* stop listening to messages */ + CR_MESSAGE_REQ, /* send message */ + CR_MESSAGE_IND, /* receive message */ + /* messages from ISDN */ + CI_DISCONNECT_IND, /* call is disconnected */ + /* message timeout */ + CT_TIMEOUT, /* current state timed out */ +}; + +#define CM_MSG_NAMES \ +static char *cm_msg_name[] = { \ + "CP_IDENT", \ + "CP_SLAVE", \ + "CP_MASTER", \ + "CP_LOOPED", \ + "CP_PUBKEY", \ + "CP_CSKEY", \ + "CP_ABORT", \ + "CK_GENRSA_REQ", \ + "CK_GENRSA_CONF", \ + "CK_CPTRSA_REQ", \ + "CK_CPTRSA_CONF", \ + "CK_DECRSA_REQ", \ + "CK_DECRSA_CONF", \ + "CK_ERROR_IND", \ + "CC_ACTBF_REQ", \ + "CC_ACTBF_CONF", \ + "CC_ERROR_IND", \ + "CC_DACT_REQ", \ + "CU_ACTK_REQ", \ + "CU_ACTK_CONF", \ + "CU_ACTS_REQ", \ + "CU_ACTS_CONF", \ + "CU_ERROR_IND", \ + "CU_INFO_REQ", \ + "CU_INFO_CONF", \ + "CU_INFO_IND", \ + "CU_DACT_REQ", \ + "CU_DACT_CONF", \ + "CU_DACT_IND", \ + "CR_LISTEN_REQ", \ + "CR_UNLISTEN_REQ", \ + "CR_MESSAGE_REQ", \ + "CR_MESSAGE_IND", \ + "CI_DISCONNECT_IND", \ + "CT_TIMEOUT", \ +}; \ +int cm_msg_num = sizeof(cm_msg_name) / sizeof(char *); + +/* peer2peer messages */ +#define CMSG_IDENT 0x01 +#define CMSG_MASTER 0x11 +#define CMSG_SLAVE 0x12 +#define CMSG_LOOPED 0x13 +#define CMSG_PUBKEY 0x21 +#define CMSG_CSKEY 0x22 +#define CMSG_ABORT 0x81 + +/* peer2peer info elements */ +#define CM_INFO_MESSAGE 0x01 +#define CM_INFO_RANDOM 0x10 +#define CM_INFO_BOGOMIPS 0x11 +#define CM_INFO_PUBKEY 0x12 +#define CM_INFO_PUBEXPONENT 0x13 +#define CM_INFO_CSKEY 0x14 + + +#define CM_ADDINF(a, b, c) \ + cryptman_addinf(buf, sizeof(buf), a, b, c); +#define CM_SIZEOFINF(a) \ + cryptman_sizeofinf(param, a); +#define CM_GETINF(a, b) \ + cryptman_getinf(param, a, b); + +void crc_init(void); +unsigned long crc32(unsigned char *data, int len); +int cryptman_encode_bch(unsigned char *data, int len, unsigned char *buf, int buf_len); + diff --git a/default/directory.list b/default/directory.list new file mode 100644 index 0000000..10f2897 --- /dev/null +++ b/default/directory.list @@ -0,0 +1,21 @@ +# The directory translates caller IDs to names. +# Format: \n"); + +# The number must be given as received: +# National number: The national prefix must be included or 'n' must be used. +# E.g.: n9036681733 or 19036681733 (in case '1' is the national prefix) +# E.g.: n21250993 or 021250993 (in case '0' is the national prefix) +# International number: The international prefix must be included or 'i'. +# E.g.: i4921256483 or 0114921256493 (in case '011' is the intl. prefix) +# E.g.: i19036681733 or 0019036681733 (in case '00' is the intl. prefix) +# Subscriber number: No prefix mus be included or 's' must be used. +# E.g.: s50993 or 1733 + +# Note: National numbers always require the area code. International numbers +# always require the country code + area code. + +021250993 German number +0019036681739 American number +n48416600 German hospital + + diff --git a/default/h323_gateway.conf b/default/h323_gateway.conf new file mode 100644 index 0000000..96a8f8e --- /dev/null +++ b/default/h323_gateway.conf @@ -0,0 +1,13 @@ +# Gateway configuration for incoming h323 calls +# +# Incoming calls will be mapped to the given extensions. If calling host +# is not listed here, it will be processed as extenal call. +# IP numbers must be given here, not host names. +# The "connect" option allows to send back a connect before the call is +# actually answered. Some H323 client will only allow entering of digits +# after a connect. +# Using "dtmf" connects and also enables DTMF detection. +# +# [connect | dtmf] +192.168.0.2 200 + diff --git a/default/interface.conf b/default/interface.conf new file mode 100644 index 0000000..6df206c --- /dev/null +++ b/default/interface.conf @@ -0,0 +1,88 @@ +# interface.conf +################ + + +# Example of an ISDN interface on port 1 + +#[Ext] +#port 1 + +# Example of a multilink ISDN interface (Anlagenanschluss) on port 3 +# and 4 + +#[Ext] +#port 3 +#port 4 + +# Example of an ISDN interface on port 2, which accepts all extensions + +#[Int] +#extension +#port 2 + + +# Example of an ISDN interface on port 2, which accepts only extensions +# 201, 202 and 203 + +#[Int] +#extension +#msn 201,202,203 +#port 2 + + +# Example of three ISDN interfaces on port 2, 3 and 4, which accept +# extension 201 on all interfaces, and extension 202 and 203 on the first port +# only. +# Hint: To make extension ring on all three interfaces parallel, use +# "interface Int1,Int2,In3" in extension's settings file. + +#[Int1] +#extension +#msn 201,202,203 +#port 2 + +#[Int2] +#extension +#msn 201 +#port 3 + +#[Int3] +#extension +#msn 201 +#port 4 + + +# Example of an ISDN interface on port 1 that requires screening of caller IDs. +# This is required if the connected line doesn't screen caller IDs. +# Also this interface will connect bchannel during call setup, so tones are +# required. +#[Ext] +#screen_out unknown 300 national 21250993300 +#screen_out unknown 2* national 212509932* +#tones yes +#port 1 + + +# Example of an ISDN PRI interface on port 1 that has directed channels. +# 10 channels (channel 1-10) are incomming only. +# 10 channels (channel 11-15,17-21) are outgoing only. +# 10 channels (channel 22-31) are both way. +# We prefer to use directed channels first, then we request any channel: +#[Ext] +#port 1 +#channel force,11,12,13,14,15,17,18,19,20,21,any + + +# Add your interfaces here: + + +[Ext] +port 1 + + +[Int] +extension +msn 201,202,203 +port 2 + + diff --git a/default/options.conf b/default/options.conf new file mode 100644 index 0000000..e639350 --- /dev/null +++ b/default/options.conf @@ -0,0 +1,165 @@ +# PBX options +############# + +# Turn debugging all on=0xffff or off=0x0000 (default= 0x0000) +#define DEBUG_CONFIG 0x0001 +#define DEBUG_MSG 0x0002 +#define DEBUG_STACK 0x0004 +#define DEBUG_BCHANNEL 0x0008 +#define DEBUG_PORT 0x0100 +#define DEBUG_ISDN 0x0110 +#define DEBUG_H323 0x0120 +#define DEBUG_VBOX 0x0180 +#define DEBUG_EPOINT 0x0200 +#define DEBUG_CALL 0x0400 +#define DEBUG_CRYPT 0x1000 +#define DEBUG_ROUTE 0x2000 +#define DEBUG_IDLETIME 0x4000 +#define DEBUG_LOG 0x7fff + +#debug 0x0000 + +# The log file can be used to track actions by the PBX. Omit the parameter +# to turn off log file. By default, log file is located inside the directory +# "/usr/local/pbx/log". +#log /usr/local/pbx/log + +# Use "alaw" (default) or "ulaw" samples. +#alaw + +# The pbx should run as real time process. Because audio is streamed and +# ISDN protocol requires a certain response time, we must have high priority. +# By default, the process runs with realtime scheduling and high priority. +# To debug, it is whise to use "schedule" with no parameter to turn off +# realtime scheduling. In case of an endless loop bug, PBX4Linux will take +# all CPU time forever - your machine hangs. +#schedule 0 + +# Use tone sets (default= tones_american). +# This can be overridden by the extension setting +#tones_dir tones_american + +# Fetch tone sets as specified here. +# The tone sets will be loaded during startup, and no harddisk access is +# required. Specify all tone sets seperated by komma. +# By default, no tone is fetched. Tone sets, that are not specified here, will +# be streamed from hard disk. +# Don't use spaces to seperate! +#fetch_tones tones_american,tones_german,vbox_english,vbox_german + +# Extensions directory where all configuration files and messages for all +# extensions are stored (default= extensions). +#extensions_dir extensions + +# Prefix to dial national call (default= 0). +# If you omit the prefix, all subscriber numbers are national numbers. +# (example: Danmark) +#national 0 + +# Prefix to dial international call (default= 00). +# If you omit the prefix, all subscriber numbers are international numbers. +#international 00 + +# On external calls, dialing can be done via normal called party number +# information element or via keypad facility. Some telephone systems require +# dialing via keypad to enable/disable special functions. +# By default keypad facility is disabled. +#keypad + +# Internal/external ports (cards connected to your isdn line) +# MUST be the card number. Use "./pbx query" to list. +# Add "ptp" for using internal port as point-to-point. (Only required for NT mode ports.) +# Example: port 2 +# port 3 ptp +port 2 +port 3 + +# Specify the H323 endpoint name. If omitted the hostname is used. +#h323_name PBX4Linux + +# Incoming H323 calls can be connected prior answer, because some clients will +# not play any inband tones during ringing, they just wait as nothing would +# happen. +# This only works for external calls. If a H323 caller is authenticated via +# h323_gateway.conf, a special "connect" option may be used to connect as +# soon as the call is received. +# By default this feature is turned off. +#h323_ringconnect + +# Specify which codecs may be used for H323 calls +# "h323_law" ALaw and muLaw codec which requre more than 64k internet +# connection cause by overhead. The parameter defines the frame +# size. The size range is 10 - 240. +# "h323_g726" The adpcm codec G726. The parameter defines the bits per sample. +# The bits must be 2, 3, 4, or 5. (16, 24, 32, 40 kbits/s) +# The given value will always include all modes with lower value. +# "h323_gsm" GSM0610 and MicrosoftGSM codecs (not compatible with netmeeting) +# The prameter defines the frame size. The frame range is 1 - 7. +# "h323_lpc10" Codec with very low bandwith usage which can even be used on +# slow internetconnections like 9600 kBit (about 300 bytes/s) +# "h323_speex" Non standard Speex codec. The parameter defines the mode. +# The mode range is 2 - 6. +# The given value will always include all modes with lower value. +# "h323_xspeex" Non standard XiphSpeex codec. The parameter defines the mode. +# The mode range is 2 - 6. +# The given value will always include all modes with lower value. +# The priority of the codecs to use is given by it's order. +# By default, no codec is used +h323_gsm 4 +h323_g726 2 +#h323_lpc10 +#h323_speex 4 +#h323_xspeex 4 +h323_law 64 + +# To allow incoming calls via H323, the following option is used: +# "h323_icall []" +# The given prefix is used for incoming calls which do not send any dialing +# information. If you like to route calls to an extension, give extension +# dialing as specified at numbering_ext.conf. +# By default no calls are accepted. +# Omit the prefix and it must be dialed by the caller. +h323_icall 0 + +# Specify the port to listen on incoming H323 connections. +# The default value is 1720. +#h323_port 1720 + +# To register with a gatekeeper, the following option is used: +# "h323_gatekeeper [] +# If no parameter is given, the gatekeeper is searched automatically. +#h323_gatekeeper + +# To use dtmf detection for call from or to ISDN, uncomment the keyword "dtmf". +# By default dtmf detection is used. Note that dtmf detection needs cpu time. +# Dtmf detection is essential when handling the call after connect using +# keypad. (conferrence, callback, ect...) +#nodtmf + +# For calls to external where caller id is not available, this id is used. +# It is sent of type "subscriber number". This ID is only usefull if the +# external line will not screen caller id. It will be sent anonymous. +# If you don't know what to use it for, you don't need it. +# Default is nothing. +#dummyid 0 + +# If your external ISDN line(s) support inband patterns prior call connect, +# you may say 'yes' here. In this case the PBX's tones are used for incoming +# calls. This may require a special subscription because it can be abused +# to transfer audio prior charge of call +#inbandpattern no + +# Tones/announcements are streamed from user space. It is possible to use +# the module "mISDN_dsp.o" instead. It provides simple tones with much less cpu +# usage. If supported by special hardware, tones are loops that require no +# bus/cpu load at all, except when the tone changes. +# This works only for ISDN ports. It can be overridden by extension's tone set. +# Defautlt is streaming of tones. Use parameter "american", "german", or +# "oldgerman". "oldgerman" sounds like the old german telephone system (POTS). +#dsptones none + +# Source email address of the PBX. E.g. it is used when sending a mail +# from the voice box. It is not the address the mails are sent to. +# Most mail servers require an existing domain in order to accept mails. +#email pbx@jolly.de + diff --git a/default/routing.conf b/default/routing.conf new file mode 100644 index 0000000..ff7207f --- /dev/null +++ b/default/routing.conf @@ -0,0 +1,65 @@ +# PBX4Linux routing configuration "routing.conf" + + +# Ruleset: MAIN +# Calls with different origins will be processed in different rulesets. + +[main] +h323 : goto ruleset=voip +extern : goto ruleset=extern +intern : goto ruleset=intern + : disconnect cause=31 + +# Ruleset: EXTERN +# All calls from external lines are processed here. + +[extern] +dialing=0,1234 : intern extension=200 +dialing=200-299 : intern +dialing=81 : partyline room=42 +timeout=6 : intern extension=200 +default : disconnect cause=1 + + +# Ruleset: INTERN +# All calls from internal ports are processed here. + +[intern] +dialing=0 : extern +dialing=1 : extern capability=digital-unrestricted +dialing=200-299 : intern +dialing=3 : pick +dialing=4 : h323 +dialing=5 : reply +dialing=6 enblock : redial +dialing=6 : redial select +dialing=7 enblock : abbrev +dialing=7 : abbrev select +dialing=80 : vbox-play +dialing=81 : partyline room=42 +dialing=90 : powerdial +dialing=91 : callerid +dialing=92 : calleridnext +#dialing=93 : login +#dialing=94 : powerdial +#dialing=950 real : callback +#dialing=953 : forward diversion=cfu +#dialing=954 : forward diversion=cfb +#dialing=955 : forward diversion=cfnr delay=26 +#dialing=956 : forward diversion=cfp +#dialing=957 : forward diversion=cfu dest=vbox +#dialing=958 : forward diversion=cfb dest=vbox +#dialing=959 : forward diversion=cfnr dest=vbox delay=20 +#dialing=96 : dtmf +#dialing=970 : calculator connect +dialing=99 : test +default : disconnect cause=1 display="Invalid Code" + + +# Ruleset: VOIP +# All calls will be forwarded to extension 200 + +[voip] + : intern extension=200 + + diff --git a/dss1.cpp b/dss1.cpp new file mode 100644 index 0000000..e146653 --- /dev/null +++ b/dss1.cpp @@ -0,0 +1,3370 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** mISDN dss1 ** +** ** +\*****************************************************************************/ + + +#include +#include +#include +#include "main.h" +#include +#include +#include +#include +#include +#include +#include +extern "C" { +#include +} + +//#define CENTREX + +#include "q931.h" +#include "ie.cpp" + + +/* + * constructor + */ +Pdss1::Pdss1(int type, mISDNport *mISDNport, char *portname, struct port_settings *settings, int channel, int exclusive) : PmISDN(type, mISDNport, portname, settings, channel, exclusive) +{ + p_callerinfo.itype = INFO_ITYPE_ISDN; + p_m_d_ntmode = mISDNport->ntmode; + p_m_d_l3id = 0; + p_m_d_ces = -1; + p_m_d_queue = NULL; + p_m_d_notify_pending = NULL; + p_m_d_collect_cause = CAUSE_NOUSER; + p_m_d_collect_location = LOCATION_PRIVATE_LOCAL; + + + PDEBUG(DEBUG_ISDN, "Created new mISDNPort(%s). Currently %d objects use, %s port #%d\n", portname, mISDNport->use, (mISDNport->ntmode)?"NT":"TE", p_m_portnum); +} + + +/* + * destructor + */ +Pdss1::~Pdss1() +{ + /* remove queued message */ + if (p_m_d_queue) + message_free(p_m_d_queue); + + if (p_m_d_notify_pending) + message_free(p_m_d_notify_pending); + + /* check how many processes are left */ + if (p_m_d_ntmode == 1) + { + if (p_m_mISDNport->nst.layer3->proc) + PDEBUG(DEBUG_ISDN, "destroyed mISDNPort(%s). WARNING: There is still a layer 3 process left. Ignore this, if currently are other calls. This message is not an error!\n", p_name); + } +} + + +/* + * create layer 3 message + */ +static msg_t *create_l3msg(int prim, int mt, int dinfo, int size, int ntmode) +{ + int i = 0; + msg_t *dmsg; + Q931_info_t *qi; + iframe_t *frm; + + if (!ntmode) + size = sizeof(Q931_info_t)+2; + + while(i < 10) + { + if (ntmode) + { + dmsg = prep_l3data_msg(prim, dinfo, size, 256, NULL); + if (dmsg) + { + return(dmsg); + } + } else + { + dmsg = alloc_msg(size+256+mISDN_HEADER_LEN+DEFAULT_HEADROOM); + if (dmsg) + { + memset(msg_put(dmsg,size+mISDN_HEADER_LEN), 0, size+mISDN_HEADER_LEN); + frm = (iframe_t *)dmsg->data; + frm->prim = prim; + frm->dinfo = dinfo; + qi = (Q931_info_t *)(dmsg->data + mISDN_HEADER_LEN); + qi->type = mt; + return(dmsg); + } + } + + if (!i) + PERROR("cannot allocate memory, trying again...\n"); + i++; + usleep(50000); + } + PERROR("cannot allocate memory, system overloaded.\n"); + exit(-1); +} + +msg_t *create_l2msg(int prim, int dinfo, int size) /* NT only */ +{ + int i = 0; + msg_t *dmsg; + + while(i < 10) + { + dmsg = prep_l3data_msg(prim, dinfo, size, 256, NULL); + if (dmsg) + return(dmsg); + + if (!i) + PERROR("cannot allocate memory, trying again...\n"); + i++; + usleep(50000); + } + PERROR("cannot allocate memory, system overloaded.\n"); + exit(-1); +} + + +/* isdn messaging */ +static struct isdn_message { + char *name; + unsigned long value; +} isdn_message[] = { + {"TIMEOUT", CC_TIMEOUT}, + {"SETUP", CC_SETUP}, + {"SETUP_ACKNOWLEDGE", CC_SETUP_ACKNOWLEDGE}, + {"PROCEEDING", CC_PROCEEDING}, + {"ALERTING", CC_ALERTING}, + {"CONNECT", CC_CONNECT}, + {"CONNECT RESPONSE", CC_CONNECT}, + {"CONNECT_ACKNOWLEDGE", CC_CONNECT_ACKNOWLEDGE}, + {"DISCONNECT", CC_DISCONNECT}, + {"RELEASE", CC_RELEASE}, + {"RELEASE_COMPLETE", CC_RELEASE_COMPLETE}, + {"INFORMATION", CC_INFORMATION}, + {"PROGRESS", CC_PROGRESS}, + {"NOTIFY", CC_NOTIFY}, + {"SUSPEND", CC_SUSPEND}, + {"SUSPEND_ACKNOWLEDGE", CC_SUSPEND_ACKNOWLEDGE}, + {"SUSPEND_REJECT", CC_SUSPEND_REJECT}, + {"RESUME", CC_RESUME}, + {"RESUME_ACKNOWLEDGE", CC_RESUME_ACKNOWLEDGE}, + {"RESUME_REJECTE", CC_RESUME_REJECT}, + {"HOLD", CC_HOLD}, + {"HOLD_ACKNOWLEDGE", CC_HOLD_ACKNOWLEDGE}, + {"HOLD_REJECT", CC_HOLD_REJECT}, + {"RETRIEVE", CC_RETRIEVE}, + {"RETRIEVE_ACKNOWLEDGE", CC_RETRIEVE_ACKNOWLEDGE}, + {"RETRIEVE_REJECTE", CC_RETRIEVE_REJECT}, + {"FACILITY", CC_FACILITY}, + {"STATUS", CC_STATUS}, + {"RESTART", CC_RESTART}, + {"RELEASE_CR", CC_RELEASE_CR}, + {"NEW_CR", CC_NEW_CR}, + + {NULL, 0}, +}; + +static char *isdn_prim[4] = { + "REQUEST", + "CONFIRM", + "INDICATION", + "RESPONSE", +}; + + +/* + * show message to debug + */ +void Pdss1::isdn_show_send_message(unsigned long prim, msg_t *msg) +{ + int i; + char *msgtext = "<>"; + char *primtext; + + i = 0; + while(isdn_message[i].name) + { + if (isdn_message[i].value == (prim&0xffffff00)) + { + msgtext = isdn_message[i].name; + break; + } + i++; + } + primtext = isdn_prim[prim&0x00000003]; + printisdn(">>> outgoing prim: %s %s (0x%x)\n", msgtext, primtext, prim); +} + + +/* + * if we received a first reply to the setup message, + * we will check if we have now channel information + * return: <0: error, call is released, -cause is given + * 0: ok, nothing to do + */ +int Pdss1::received_first_reply_to_setup(unsigned long prim, int channel, int exclusive) +{ + int ret; + int headerlen = (p_m_d_ntmode)?mISDNUSER_HEAD_SIZE:mISDN_HEADER_LEN; + RELEASE_COMPLETE_t *release_complete; + msg_t *dmsg; + + /* corret exclusive to 0, if no explicit channel was given */ + if (exclusive<0 || channel<=0) + exclusive = 0; + + /* select scenario */ + if (p_m_b_channel && p_m_b_exclusive) + { + /*** we gave an exclusive channel (or if we are done) ***/ + + /* if not first reply, we are done */ + if (p_state != PORT_STATE_OUT_SETUP) + return(0); + + /* if give channel not accepted or not equal */ + if (channel!=-1 && p_m_b_channel!=channel) + { + PDEBUG(DEBUG_BCHANNEL, "- our forced channel %d was not accepted\n", p_m_b_channel); + ret = -44; + goto channelerror; + } + + /* activate our exclusive channel */ + bchannel_activate(p_m_mISDNport, p_m_b_index); + } else + if (p_m_b_channel) + { + /*** we gave a non-exclusive channel ***/ + + /* if not first reply, we are done */ + if (p_state != PORT_STATE_OUT_SETUP) + return(0); + + /* if channel was accepted as given */ + if (channel==-1 || p_m_b_channel==channel) + { + PDEBUG(DEBUG_BCHANNEL, "- our suggested channel %d was accpted\n", p_m_b_channel); + p_m_b_exclusive = 1; // we are done + bchannel_activate(p_m_mISDNport, p_m_b_index); + return(0); + } + + /* if channel value is faulty */ + if (channel <= 0) + { + PDEBUG(DEBUG_BCHANNEL, "- our suggested channel %d was replied with no channel value.\n", p_m_b_channel); + ret = -111; // protocol error + goto channelerror; + } + + /* if channel was not accepted, try to get it */ + PDEBUG(DEBUG_BCHANNEL, "- our suggested channel %d was not accepted, but %d was given.\n", p_m_b_channel, channel); + ret = seize_bchannel(channel, 1); // exclusively + if (ret < 0) + { + PDEBUG(DEBUG_BCHANNEL, "- the replied channel %d is not available (cause %d).\n", channel, -ret); + goto channelerror; + } + PDEBUG(DEBUG_BCHANNEL, "- we accepted channel %d.\n", channel); + + /* activate channel given by remote */ + bchannel_activate(p_m_mISDNport, p_m_b_index); + } else + if (p_m_b_reserve) + { + /*** we sent 'any channel acceptable' ***/ + + /* if not first reply, we are done */ + if (p_state != PORT_STATE_OUT_SETUP) + return(0); + + /* if no channel was given */ + if (channel <= 0) + { + PDEBUG(DEBUG_BCHANNEL, "- our channel request was not replied by a channel.\n", p_m_b_channel); + ret = -111; // protocol error + goto channelerror; + } + + /* we will see, if our received channel is available */ + PDEBUG(DEBUG_BCHANNEL, "- our channel request was replied with channel %d.\n", channel); + ret = seize_bchannel(channel, 1); // exclusively + if (ret < 0) + { + PDEBUG(DEBUG_BCHANNEL, "- the replied channel %d is not available (cause %d).\n", channel, -ret); + goto channelerror; + } + PDEBUG(DEBUG_BCHANNEL, "- we accepted channel %d.\n", channel); + + /* activate channel given by remote */ + bchannel_activate(p_m_mISDNport, p_m_b_index); + } else + { + /*** we sent 'no channel available' ***/ + + /* if not the first reply, but a connect, we are forced */ + if (prim==(CC_CONNECT | INDICATION) && p_state!=PORT_STATE_OUT_SETUP) + { + if (channel > 0) + { + PDEBUG(DEBUG_BCHANNEL, "- while call-waiting, we get a channel inside connect message, so we use it.\n", p_m_b_channel); + goto use_from_connect; + } + PDEBUG(DEBUG_BCHANNEL, "- there is no channel inside connect message during call-waiting, so we request one.\n", p_m_b_channel); + ret = seize_bchannel(CHANNEL_ANY, 0); // any channel + if (ret < 0) + { + PDEBUG(DEBUG_BCHANNEL, "- during call-waiting, we got a connect, but no available channel (cause=%d).\n", -ret); + goto channelerror; + } + p_m_b_exclusive = 1; // we are done + + /* activate channel given by remote */ + bchannel_activate(p_m_mISDNport, p_m_b_index); + return(0); + } + + /* if not first reply, we are done */ + if (p_state != PORT_STATE_OUT_SETUP) + return(0); + + /* if first reply has no channel, we are done */ + if (channel <= 0) + { + PDEBUG(DEBUG_BCHANNEL, "- while call-waiting, we got no channel as first reply, this is good.\n"); + return(0); + } + + /* we will see, if our received channel is available */ + PDEBUG(DEBUG_BCHANNEL, "- our during call-waiting, we get channel %d as first reply.\n", channel); + use_from_connect: + ret = seize_bchannel(channel, exclusive); + if (ret <= 0) + { + PDEBUG(DEBUG_BCHANNEL, "- the given channel %d is not available (cause %d).\n", channel, -ret); + goto channelerror; + } + PDEBUG(DEBUG_BCHANNEL, "- we accepted channel %d.\n", channel); + p_m_b_exclusive = 1; // we are done + + /* activate channel given by remote */ + bchannel_activate(p_m_mISDNport, p_m_b_index); + } + return(0); + + channelerror: + dmsg = create_l3msg(CC_RELEASE_COMPLETE | REQUEST, MT_RELEASE_COMPLETE, p_m_d_l3id, sizeof(RELEASE_COMPLETE_t), p_m_d_ntmode); + isdn_show_send_message(CC_RELEASE_COMPLETE | REQUEST, dmsg); + + release_complete = (RELEASE_COMPLETE_t *)(dmsg->data + headerlen); + enc_ie_cause(&release_complete->CAUSE, dmsg, (p_m_d_ntmode)?LOCATION_PRIVATE_LOCAL:LOCATION_PRIVATE_REMOTE, -ret); + msg_queue_tail(&p_m_mISDNport->downqueue, dmsg); + new_state(PORT_STATE_RELEASE); + p_m_delete = 1; + return(-34); /* to epoint: no channel available */ +} + + +/* + * handles all indications + */ +/* CC_SETUP INDICATION */ +void Pdss1::setup_ind(unsigned long prim, unsigned long dinfo, void *data) +{ + int headerlen = (p_m_d_ntmode)?mISDNUSER_HEAD_SIZE:mISDN_HEADER_LEN; + SETUP_t *setup = (SETUP_t *)((unsigned long)data + headerlen); + int type, plan, present, screen, reason; + int coding, capability, mode, rate, multi, user, presentation, interpretation, hlc, exthlc; + int exclusive, channel; + int ret; + msg_t *dmsg; + unsigned char keypad[32] = ""; + unsigned char useruser[128]; + int useruser_len = 0, useruser_protocol; + class Endpoint *epoint; + struct message *message; + + /* caller information */ + dec_ie_calling_pn(setup->CALLING_PN, (Q931_info_t *)((unsigned long)data+headerlen), &type, &plan, &present, &screen, (unsigned char *)p_callerinfo.id, sizeof(p_callerinfo.id)); + switch (present) + { + case 1: + p_callerinfo.present = INFO_PRESENT_RESTRICTED; + break; + case 2: + p_callerinfo.present = INFO_PRESENT_NOTAVAIL; + break; + default: + p_callerinfo.present = INFO_PRESENT_ALLOWED; + break; + } + switch (screen) + { + case 0: + p_callerinfo.screen = INFO_SCREEN_USER; + break; + default: + p_callerinfo.screen = INFO_SCREEN_NETWORK; + break; + } + switch (type) + { + case -1: + p_callerinfo.ntype = INFO_NTYPE_UNKNOWN; + p_callerinfo.present = INFO_PRESENT_NOTAVAIL; + p_callerinfo.screen = INFO_SCREEN_NETWORK; + break; + case 0x1: + p_callerinfo.ntype = INFO_NTYPE_INTERNATIONAL; + break; + case 0x2: + p_callerinfo.ntype = INFO_NTYPE_NATIONAL; + break; + case 0x4: + p_callerinfo.ntype = INFO_NTYPE_SUBSCRIBER; + break; + default: + p_callerinfo.ntype = INFO_NTYPE_UNKNOWN; + break; + } + p_callerinfo.isdn_port = p_m_portnum; + /* dialing information */ + dec_ie_called_pn(setup->CALLED_PN, (Q931_info_t *)((unsigned long)data+headerlen), &type, &plan, (unsigned char *)p_dialinginfo.number, sizeof(p_dialinginfo.number)); + dec_ie_keypad(setup->KEYPAD, (Q931_info_t *)((unsigned long)data+headerlen), (unsigned char *)keypad, sizeof(keypad)); + SCAT(p_dialinginfo.number, (char *)keypad); + switch (type) + { + case 0x1: + p_dialinginfo.ntype = INFO_NTYPE_INTERNATIONAL; + break; + case 0x2: + p_dialinginfo.ntype = INFO_NTYPE_NATIONAL; + break; + case 0x4: + p_dialinginfo.ntype = INFO_NTYPE_SUBSCRIBER; + break; + default: + p_dialinginfo.ntype = INFO_NTYPE_UNKNOWN; + break; + } +#ifdef CENTREX + /* te-mode: CNIP (calling name identification presentation) */ + if (!p_m_d_ntmode) + dec_facility_centrex(setup->FACILITY, (Q931_info_t *)((unsigned long)data+headerlen), (unsigned char *)p_callerinfo.name, sizeof(p_callerinfo.name)); +#endif + + /* uus */ + dec_ie_useruser(setup->USER_USER, (Q931_info_t *)((unsigned long)data+headerlen), &useruser_protocol, useruser, &useruser_len); + + /* sending complete */ + dec_ie_complete(setup->COMPLETE, (Q931_info_t *)((unsigned long)data+headerlen), &p_dialinginfo.sending_complete); + /* redirecting number */ + dec_ie_redir_nr(setup->REDIR_NR, (Q931_info_t *)((unsigned long)data+headerlen), &type, &plan, &present, &screen, &reason, (unsigned char *)p_redirinfo.id, sizeof(p_redirinfo.id)); + switch (present) + { + case 1: + p_redirinfo.present = INFO_PRESENT_RESTRICTED; + break; + case 2: + p_redirinfo.present = INFO_PRESENT_NOTAVAIL; + break; + default: + p_redirinfo.present = INFO_PRESENT_ALLOWED; + break; + } + switch (screen) + { + case 0: + p_redirinfo.screen = INFO_SCREEN_USER; + break; + default: + p_redirinfo.screen = INFO_SCREEN_NETWORK; + break; + } + switch (reason) + { + case 1: + p_redirinfo.reason = INFO_REDIR_BUSY; + break; + case 2: + p_redirinfo.reason = INFO_REDIR_NORESPONSE; + break; + case 15: + p_redirinfo.reason = INFO_REDIR_UNCONDITIONAL; + break; + case 10: + p_redirinfo.reason = INFO_REDIR_CALLDEFLECT; + break; + case 9: + p_redirinfo.reason = INFO_REDIR_OUTOFORDER; + break; + default: + p_redirinfo.reason = INFO_REDIR_UNKNOWN; + break; + } + switch (type) + { + case -1: + p_redirinfo.ntype = INFO_NTYPE_UNKNOWN; + p_redirinfo.present = INFO_PRESENT_NULL; /* not redirecting */ + p_redirinfo.reason = INFO_REDIR_UNKNOWN; + break; + case 0x1: + p_redirinfo.ntype = INFO_NTYPE_INTERNATIONAL; + break; + case 0x2: + p_redirinfo.ntype = INFO_NTYPE_NATIONAL; + break; + case 0x4: + p_redirinfo.ntype = INFO_NTYPE_SUBSCRIBER; + break; + default: + p_redirinfo.ntype = INFO_NTYPE_UNKNOWN; + break; + } + p_redirinfo.isdn_port = p_m_portnum; + /* bearer capability */ + dec_ie_bearer(setup->BEARER, (Q931_info_t *)((unsigned long)data+headerlen), &coding, &capability, &mode, &rate, &multi, &user); + switch (capability) + { + case -1: + p_capainfo.bearer_capa = INFO_BC_AUDIO; + user = (options.law=='a')?3:2; + break; + default: + p_capainfo.bearer_capa = capability; + break; + } + switch (mode) + { + case 2: + p_capainfo.bearer_mode = INFO_BMODE_PACKET; + break; + default: + p_capainfo.bearer_mode = INFO_BMODE_CIRCUIT; + break; + } + switch (user) + { + case -1: + p_capainfo.bearer_info1 = INFO_INFO1_NONE; + break; + default: + p_capainfo.bearer_info1 = user + 0x80; + break; + } + + /* hlc */ + dec_ie_hlc(setup->HLC, (Q931_info_t *)((unsigned long)data+headerlen), &coding, &interpretation, &presentation, &hlc, &exthlc); + switch (hlc) + { + case -1: + p_capainfo.hlc = INFO_HLC_NONE; + break; + default: + p_capainfo.hlc = hlc + 0x80; + break; + } + switch (exthlc) + { + case -1: + p_capainfo.exthlc = INFO_HLC_NONE; + break; + default: + p_capainfo.exthlc = exthlc + 0x80; + break; + } + + /* channel_id */ jolly todo + dec_ie_channel_id(setup->CHANNEL_ID, (Q931_info_t *)((unsigned long)data+headerlen), &exclusive, &channel); + if (exclusive<0) + exclusive = 0; + if (channel==CHANNEL_NO && p_type==PORT_TYPE_DSS1_TE_IN) + PDEBUG(DEBUG_BCHANNEL, "- no channel is given by the network, causing to fail, since CW is not possible for external lines\n"); + if (channel <= 0) /* not given, no channel, whatever.. */ + channel = CHANNEL_ANY; /* any channel */ + if (channel == CHANNE_ANY) + { + PDEBUG(DEBUG_BCHANNEL, "- any channel is assumed from the %s, so we need to return the a channel from our list\n", (p_m_d_ntmode)?"user":"network"); + /* check for any channel form selection list */ + channel = 0; + selchannel = ifport->channel_in; + while(selchannel) + { + switch(selchannel->channel) + { + case CHANNEL_FREE: /* free channel */ + if (mISDNport->b_inuse >= mISDNport->b_num) + break; /* all channel in use or reserverd */ + /* find channel */ + i = 0; + while(i < mISDNport->b_num) + { + if (mISDNport->b_port[i] == NULL) + { + channel = i+1+(i>=15); + //printlog("%3d port#%d position %d selecting free channel %d\n", ea_endpoint->ep_serial, ifport_start->portnum, index, *channel); + break; + } + i++; + } + break; + + default: + if (selchannel->channel<1 || selchannel->channel==16) + break; /* invalid channels */ + i = selchannel->channel-1-(selchannel->channel>=17); + if (i >= mISDNport->b_num) + break; /* channel not in port */ + if (mISDNport->b_port[i] == NULL) + { + channel = selchannel->channel; + //printlog("%3d port#%d position %d selecting given channel %d\n", ea_endpoint->ep_serial, ifport_start->portnum, index, *channel); + break; + } + break; + } + if (channel) + break; /* found channel */ + //printlog("%3d port#%d position %d skipping, because no channel found.\n", ea_endpoint->ep_serial, ifport_start->portnum, index); + selchannel = selchannel->next; + } + if (!channel) + { + ret = -34; // no channel + goto no_channel; + } + } + if (channel > 0) + /* check for given channel in selection list */ + selchannel = ifport->channel_in; + while(selchannel) + { + if (selchannel->channel == channel || selchannel->channel == CHANNEL_FREE) + break; + //printlog("%3d port#%d position %d skipping, because no channel found.\n", ea_endpoint->ep_serial, ifport_start->portnum, index); + selchannel = selchannel->next; + } + if (!selchannel) + channel = 0; + + if (exclusive) + { + if (!channel) + { + PDEBUG(DEBUG_BCHANNEL, "- exclusive channel %d is selected, but not in list of incomming channel.\n", channel); + ret = 6; // unacceptable + goto no_channel; + } + PDEBUG(DEBUG_BCHANNEL, "- exclusive channel %d is selected, as in list of incomming channels.\n", channel); + } else + if (channel) + { + PDEBUG(DEBUG_BCHANNEL, "- channel %d given, found in list.\n", channel); + i = selchannel->channel-1-(selchannel->channel>=17); + if (mISDNport->b_port[i] == NULL) + { + goto use_channel; + } + goto inuse_search_differnt; + } else + { + inuse_search_different: + PDEBUG(DEBUG_BCHANNEL, "- channel %d given, but not in list of incomming channels.\n", channel); + + /* check for first free channel in list */ + selchannel = ifport->channel_in; + while(selchannel) + { + switch(selchannel->channel) + { + case CHANNEL_FREE: /* free channel */ + if (mISDNport->b_inuse >= mISDNport->b_num) + break; /* all channel in use or reserverd */ + /* find channel */ + i = 0; + while(i < mISDNport->b_num) + { + if (mISDNport->b_port[i] == NULL) + { + channel = i+1+(i>=15); + //printlog("%3d port#%d position %d selecting free channel %d\n", ea_endpoint->ep_serial, ifport_start->portnum, index, *channel); + break; + } + i++; + } + break; + + default: + if (selchannel->channel<1 || selchannel->channel==16) + break; /* invalid channels */ + i = selchannel->channel-1-(selchannel->channel>=17); + if (i >= mISDNport->b_num) + break; /* channel not in port */ + if (mISDNport->b_port[i] == NULL) + { + channel = selchannel->channel; + //printlog("%3d port#%d position %d selecting given channel %d\n", ea_endpoint->ep_serial, ifport_start->portnum, index, *channel); + break; + } + break; + } + if (channel) + break; /* found channel */ + //printlog("%3d port#%d position %d skipping, because no channel found.\n", ea_endpoint->ep_serial, ifport_start->portnum, index); + selchannel = selchannel->next; + } + if (!channel) + { + ret = 6; // unacceptable + goto no_channel; + } + } +channel whlen + /* open channel */ + use_channel: + ret = seize_bchannel(channel, 1); + if (ret < 0) + { + no_channel: + PDEBUG(DEBUG_BCHANNEL, "- channel is not available (cause=%d), so we send a release_complete.\n", -ret); + RELEASE_COMPLETE_t *release_complete; + + dmsg = create_l3msg(CC_RELEASE_COMPLETE | REQUEST, MT_RELEASE_COMPLETE, dinfo, sizeof(RELEASE_COMPLETE_t), p_m_d_ntmode); + isdn_show_send_message(CC_RELEASE_COMPLETE | REQUEST, dmsg); + release_complete = (RELEASE_COMPLETE_t *)(dmsg->data + headerlen); + enc_ie_cause(&release_complete->CAUSE, dmsg, (p_m_d_ntmode)?LOCATION_PRIVATE_LOCAL:LOCATION_PRIVATE_REMOTE, -ret); + msg_queue_tail(&p_m_mISDNport->downqueue, dmsg); + new_state(PORT_STATE_RELEASE); + p_m_delete = 1; + return; + } + PDEBUG(DEBUG_BCHANNEL, "- channel is available, we selected channel %d.\n", ret); + /* create endpoint */ + if (p_epointlist) + { + PERROR("SOFTWARE ERROR: incoming call but already got an endpoint, exitting...\n"); + exit(-1); + } + if (!(epoint = new Endpoint(p_serial, 0))) + { + RELEASE_COMPLETE_t *release_complete; + + dmsg = create_l3msg(CC_RELEASE_COMPLETE | REQUEST, MT_RELEASE_COMPLETE, dinfo, sizeof(RELEASE_COMPLETE_t), p_m_d_ntmode); + isdn_show_send_message(CC_RELEASE_COMPLETE | REQUEST, dmsg); + release_complete = (RELEASE_COMPLETE_t *)(dmsg->data + headerlen); + enc_ie_cause(&release_complete->CAUSE, dmsg, (p_m_d_ntmode)?LOCATION_PRIVATE_LOCAL:LOCATION_PRIVATE_REMOTE, 41); /* temporary failure */ + msg_queue_tail(&p_m_mISDNport->downqueue, dmsg); + new_state(PORT_STATE_RELEASE); + p_m_delete = 1; + return; + } + if (!(epoint->ep_app = new DEFAULT_ENDPOINT_APP(epoint))) + { + PERROR("no memory for application\n"); + exit(-1); + } + if (!(epointlist_new(epoint->ep_serial))) + { + PERROR("no memory for epointlist\n"); + exit(-1); + } + if (p_m_d_ntmode) + { + /* nt-library now gives us the id via CC_SETUP */ + if (dinfo&(~0xff) == 0xff00) + { + PERROR("fatal software error: l3-stack gives us a process id 0xff00-0xffff\n"); + exit(-1); + } + printisdn(" l3id 0x%x changes to 0x%x\n", p_m_d_l3id, dinfo); + if (p_m_d_l3id&(~0xff) == 0xff00) + p_m_mISDNport->procids[p_m_d_l3id&0xff] = 0; + p_m_d_l3id = dinfo; + p_m_d_ces = setup->ces; + PDEBUG(DEBUG_ISDN, "Pdss1(%s) nt-mode gives us new l3id via setup ind: 0x%x\n", p_name, p_m_d_l3id); + } + + PDEBUG(DEBUG_ISDN, "Pdss1(%s) setup: %s->%s\n", p_name, p_callerinfo.id, p_dialinginfo.number); + message = message_create(p_serial, ACTIVE_EPOINT(p_epointlist), PORT_TO_EPOINT, MESSAGE_SETUP); + message->param.setup.isdn_port = p_m_portnum; + message->param.setup.port_type = p_type; + p_callerinfo.isdn_port = p_m_portnum; + SCPY(p_callerinfo.interface, p_m_mISDNport->ifport->interface->name);; + memcpy(&message->param.setup.dialinginfo, &p_dialinginfo, sizeof(struct dialing_info)); + memcpy(&message->param.setup.callerinfo, &p_callerinfo, sizeof(struct caller_info)); + memcpy(&message->param.setup.redirinfo, &p_redirinfo, sizeof(struct redir_info)); + memcpy(&message->param.setup.capainfo, &p_capainfo, sizeof(struct capa_info)); + memcpy(message->param.setup.useruser.data, &useruser, useruser_len); + message->param.setup.useruser.len = useruser_len; + message->param.setup.useruser.protocol = useruser_protocol; + message_put(message); + + new_state(PORT_STATE_IN_SETUP); +} + +/* CC_INFORMATION INDICATION */ +void Pdss1::information_ind(unsigned long prim, unsigned long dinfo, void *data) +{ + int headerlen = (p_m_d_ntmode)?mISDNUSER_HEAD_SIZE:mISDN_HEADER_LEN; + INFORMATION_t *information = (INFORMATION_t *)((unsigned long)data + headerlen); + int type, plan; + unsigned char keypad[32] = ""; + struct message *message; + + /* dialing information */ + dec_ie_called_pn(information->CALLED_PN, (Q931_info_t *)((unsigned long)data+headerlen), &type, &plan, (unsigned char *)p_dialinginfo.number, sizeof(p_dialinginfo.number)); + dec_ie_keypad(information->KEYPAD, (Q931_info_t *)((unsigned long)data+headerlen), (unsigned char *)keypad, sizeof(keypad)); + SCAT(p_dialinginfo.number, (char *)keypad); + switch (type) + { + case 0x1: + p_dialinginfo.ntype = INFO_NTYPE_INTERNATIONAL; + break; + case 0x2: + p_dialinginfo.ntype = INFO_NTYPE_NATIONAL; + break; + case 0x4: + p_dialinginfo.ntype = INFO_NTYPE_SUBSCRIBER; + break; + default: + p_dialinginfo.ntype = INFO_NTYPE_UNKNOWN; + break; + } + /* sending complete */ + dec_ie_complete(information->COMPLETE, (Q931_info_t *)((unsigned long)data+headerlen), &p_dialinginfo.sending_complete);; + PDEBUG(DEBUG_ISDN, "Pdss1(%s) more digits: %s\n", p_name,p_dialinginfo.number); + message = message_create(p_serial, ACTIVE_EPOINT(p_epointlist), PORT_TO_EPOINT, MESSAGE_INFORMATION); + memcpy(&message->param.information, &p_dialinginfo, sizeof(struct dialing_info)); + message_put(message); + /* reset overlap timeout */ + new_state(p_state); +} + +/* CC_SETUP_ACCNOWLEDGE INDICATION */ +void Pdss1::setup_acknowledge_ind(unsigned long prim, unsigned long dinfo, void *data) +{ + int headerlen = (p_m_d_ntmode)?mISDNUSER_HEAD_SIZE:mISDN_HEADER_LEN; + SETUP_ACKNOWLEDGE_t *setup_acknowledge = (SETUP_ACKNOWLEDGE_t *)((unsigned long)data + headerlen); + int exclusive, channel; + int coding, location, progress; + int ret; + struct message *message; + + /* channel_id */ + dec_ie_channel_id(setup_acknowledge->CHANNEL_ID, (Q931_info_t *)((unsigned long)data+headerlen), &exclusive, &channel); + dec_ie_progress(setup_acknowledge->PROGRESS, (Q931_info_t *)((unsigned long)data+headerlen), &coding, &location, &progress); + ret = received_first_reply_to_setup(prim, exclusive, channel); + if (ret < 0) + { + message = message_create(p_serial, ACTIVE_EPOINT(p_epointlist), PORT_TO_EPOINT, MESSAGE_RELEASE); + message->param.disconnectinfo.cause = -ret; + message->param.disconnectinfo.location = LOCATION_PRIVATE_LOCAL; + message_put(message); + new_state(PORT_STATE_RELEASE); + p_m_delete = 1; + return; + } + message = message_create(p_serial, ACTIVE_EPOINT(p_epointlist), PORT_TO_EPOINT, MESSAGE_OVERLAP); + message_put(message); + + new_state(PORT_STATE_OUT_OVERLAP); +} + +/* CC_PROCEEDING INDICATION */ +void Pdss1::proceeding_ind(unsigned long prim, unsigned long dinfo, void *data) +{ + int headerlen = (p_m_d_ntmode)?mISDNUSER_HEAD_SIZE:mISDN_HEADER_LEN; + CALL_PROCEEDING_t *proceeding = (CALL_PROCEEDING_t *)((unsigned long)data + headerlen); + int exclusive, channel; + int coding, location, progress; + int ret; + struct message *message; + int notify = -1, type, plan, present; + char redir[32]; + + /* channel id */ + dec_ie_channel_id(proceeding->CHANNEL_ID, (Q931_info_t *)((unsigned long)data+headerlen), &exclusive, &channel); + dec_ie_progress(proceeding->PROGRESS, (Q931_info_t *)((unsigned long)data+headerlen), &coding, &location, &progress); + ret = received_first_reply_to_setup(prim, exclusive, channel); + if (ret < 0) + { + message = message_create(p_serial, ACTIVE_EPOINT(p_epointlist), PORT_TO_EPOINT, MESSAGE_RELEASE); + message->param.disconnectinfo.cause = -ret; + message->param.disconnectinfo.location = LOCATION_PRIVATE_LOCAL; + message_put(message); + new_state(PORT_STATE_RELEASE); + p_m_delete = 1; + return; + } + message = message_create(p_serial, ACTIVE_EPOINT(p_epointlist), PORT_TO_EPOINT, MESSAGE_PROCEEDING); + message_put(message); + + new_state(PORT_STATE_OUT_PROCEEDING); + + dec_ie_notify(NULL/*proceeding->NOTIFY*/, (Q931_info_t *)((unsigned long)data+headerlen), ¬ify); + if (notify >= 0) + notify |= 0x80; + else + notify = 0; + dec_ie_redir_dn(proceeding->REDIR_DN, (Q931_info_t *)((unsigned long)data+headerlen), &type, &plan, &present, (unsigned char *)redir, sizeof(redir)); + if (type >= 0 || notify) + { + if (!notify && type >= 0) + notify = 251; + message = message_create(p_serial, ACTIVE_EPOINT(p_epointlist), PORT_TO_EPOINT, MESSAGE_NOTIFY); + message->param.notifyinfo.notify = notify; + SCPY(message->param.notifyinfo.id, redir); + /* redirection number */ + switch (present) + { + case 1: + message->param.notifyinfo.present = INFO_PRESENT_RESTRICTED; + break; + case 2: + message->param.notifyinfo.present = INFO_PRESENT_NOTAVAIL; + break; + default: + message->param.notifyinfo.present = INFO_PRESENT_ALLOWED; + break; + } + switch (type) + { + case -1: + message->param.notifyinfo.ntype = INFO_NTYPE_UNKNOWN; + message->param.notifyinfo.present = INFO_PRESENT_NULL; + break; + case 1: + message->param.notifyinfo.ntype = INFO_NTYPE_INTERNATIONAL; + break; + case 2: + message->param.notifyinfo.ntype = INFO_NTYPE_NATIONAL; + break; + case 4: + message->param.notifyinfo.ntype = INFO_NTYPE_SUBSCRIBER; + break; + default: + message->param.notifyinfo.ntype = INFO_NTYPE_UNKNOWN; + break; + } + message->param.notifyinfo.isdn_port = p_m_portnum; + message_put(message); + } +} + +/* CC_ALERTING INDICATION */ +void Pdss1::alerting_ind(unsigned long prim, unsigned long dinfo, void *data) +{ + int headerlen = (p_m_d_ntmode)?mISDNUSER_HEAD_SIZE:mISDN_HEADER_LEN; + ALERTING_t *alerting = (ALERTING_t *)((unsigned long)data + headerlen); + int exclusive, channel; + int coding, location, progress; + int ret; + struct message *message; + int notify = -1, type, plan, present; + char redir[32]; + + /* channel id */ + dec_ie_channel_id(alerting->CHANNEL_ID, (Q931_info_t *)((unsigned long)data+headerlen), &exclusive, &channel); + dec_ie_progress(alerting->PROGRESS, (Q931_info_t *)((unsigned long)data+headerlen), &coding, &location, &progress); + ret = received_first_reply_to_setup(prim, exclusive, channel); + if (ret < 0) + { + message = message_create(p_serial, ACTIVE_EPOINT(p_epointlist), PORT_TO_EPOINT, MESSAGE_RELEASE); + message->param.disconnectinfo.cause = -ret; + message->param.disconnectinfo.location = LOCATION_PRIVATE_LOCAL; + message_put(message); + new_state(PORT_STATE_RELEASE); + p_m_delete = 1; + return; + } + message = message_create(p_serial, ACTIVE_EPOINT(p_epointlist), PORT_TO_EPOINT, MESSAGE_ALERTING); + message_put(message); + + new_state(PORT_STATE_OUT_ALERTING); + + dec_ie_notify(NULL/*alerting->NOTIFY*/, (Q931_info_t *)((unsigned long)data+headerlen), ¬ify); + if (notify >= 0) + notify |= 0x80; + else + notify = 0; + dec_ie_redir_dn(alerting->REDIR_DN, (Q931_info_t *)((unsigned long)data+headerlen), &type, &plan, &present, (unsigned char *)redir, sizeof(redir)); + if (type >= 0 || notify) + { + if (!notify && type >= 0) + notify = 251; + message = message_create(p_serial, ACTIVE_EPOINT(p_epointlist), PORT_TO_EPOINT, MESSAGE_NOTIFY); + message->param.notifyinfo.notify = notify; + SCPY(message->param.notifyinfo.id, redir); + switch (present) + { + case 1: + message->param.notifyinfo.present = INFO_PRESENT_RESTRICTED; + break; + case 2: + message->param.notifyinfo.present = INFO_PRESENT_NOTAVAIL; + break; + default: + message->param.notifyinfo.present = INFO_PRESENT_ALLOWED; + break; + } + switch (type) + { + case -1: + message->param.notifyinfo.ntype = INFO_NTYPE_UNKNOWN; + message->param.notifyinfo.present = INFO_PRESENT_NULL; + break; + case 1: + message->param.notifyinfo.ntype = INFO_NTYPE_INTERNATIONAL; + break; + case 2: + message->param.notifyinfo.ntype = INFO_NTYPE_NATIONAL; + break; + case 4: + message->param.notifyinfo.ntype = INFO_NTYPE_SUBSCRIBER; + break; + default: + message->param.notifyinfo.ntype = INFO_NTYPE_UNKNOWN; + break; + } + message->param.notifyinfo.isdn_port = p_m_portnum; + message_put(message); + } +} + +/* CC_CONNECT INDICATION */ +void Pdss1::connect_ind(unsigned long prim, unsigned long dinfo, void *data) +{ + int headerlen = (p_m_d_ntmode)?mISDNUSER_HEAD_SIZE:mISDN_HEADER_LEN; + CONNECT_t *connect = (CONNECT_t *)((unsigned long)data + headerlen); + int exclusive, channel; + int type, plan, present, screen; + int ret; + msg_t *dmsg; + struct message *message; + int bchannel_before; + + if (p_m_d_ntmode) + p_m_d_ces = connect->ces; + + /* NOTE: we do not check the connected channel, since we + * ready sent a channel to the remote side + */ + /* channel id */ + dec_ie_channel_id(connect->CHANNEL_ID, (Q931_info_t *)((unsigned long)data+headerlen), &exclusive, &channel); + bchannel_before = p_m_b_channel; + ret = received_first_reply_to_setup(prim, exclusive, channel); + if (ret < 0) + { + message = message_create(p_serial, ACTIVE_EPOINT(p_epointlist), PORT_TO_EPOINT, MESSAGE_RELEASE); + message->param.disconnectinfo.cause = -ret; + message->param.disconnectinfo.location = LOCATION_PRIVATE_LOCAL; + message_put(message); + new_state(PORT_STATE_RELEASE); + p_m_delete = 1; + return; + } + /* connect information */ + dec_ie_connected_pn(connect->CONNECT_PN, (Q931_info_t *)((unsigned long)data+headerlen), &type, &plan, &present, &screen, (unsigned char *)p_connectinfo.id, sizeof(p_connectinfo.id)); + switch (present) + { + case 1: + p_connectinfo.present = INFO_PRESENT_RESTRICTED; + break; + case 2: + p_connectinfo.present = INFO_PRESENT_NOTAVAIL; + break; + default: + p_connectinfo.present = INFO_PRESENT_ALLOWED; + break; + } + switch (screen) + { + case 0: + p_connectinfo.screen = INFO_SCREEN_USER; + break; + default: + p_connectinfo.screen = INFO_SCREEN_NETWORK; + break; + } + switch (type) + { + case 0x0: + p_connectinfo.present = INFO_PRESENT_NULL; /* no COLP info */ + p_connectinfo.ntype = INFO_NTYPE_UNKNOWN; + break; + case 0x1: + p_connectinfo.ntype = INFO_NTYPE_INTERNATIONAL; + break; + case 0x2: + p_connectinfo.ntype = INFO_NTYPE_NATIONAL; + break; + case 0x4: + p_connectinfo.ntype = INFO_NTYPE_SUBSCRIBER; + break; + default: + p_connectinfo.ntype = INFO_NTYPE_UNKNOWN; + break; + } + p_connectinfo.isdn_port = p_m_portnum; +#ifdef CENTREX + /* te-mode: CONP (connected name identification presentation) */ + if (!p_m_d_ntmode) + dec_facility_centrex(connect->FACILITY, (Q931_info_t *)((unsigned long)data+headerlen), (unsigned char *)p_connectinfo.name, sizeof(p_connectinfo.name)); +#endif + /* send connect acknowledge */ + CONNECT_ACKNOWLEDGE_t *connect_acknowledge; + + dmsg = create_l3msg(CC_CONNECT | RESPONSE, MT_CONNECT, dinfo, sizeof(CONNECT_ACKNOWLEDGE_t), p_m_d_ntmode); + isdn_show_send_message(CC_CONNECT | RESPONSE, dmsg); + connect_acknowledge = (CONNECT_ACKNOWLEDGE_t *)(dmsg->data + headerlen); + /* if we had no bchannel before, we send it now */ + if (!bchannel_before && p_m_b_channel) + enc_ie_channel_id(&connect_acknowledge->CHANNEL_ID, dmsg, 1, p_m_b_channel); + msg_queue_tail(&p_m_mISDNport->downqueue, dmsg); + + PDEBUG(DEBUG_ISDN, "Pdss1(%s) connect (to '%s' COLP: '%s')\n", p_name, p_dialinginfo.number, p_connectinfo.id); + message = message_create(p_serial, ACTIVE_EPOINT(p_epointlist), PORT_TO_EPOINT, MESSAGE_CONNECT); + memcpy(&message->param.connectinfo, &p_connectinfo, sizeof(struct connect_info)); + message_put(message); + + new_state(PORT_STATE_CONNECT); +} + +/* CC_DISCONNECT INDICATION */ +void Pdss1::disconnect_ind(unsigned long prim, unsigned long dinfo, void *data) +{ + int headerlen = (p_m_d_ntmode)?mISDNUSER_HEAD_SIZE:mISDN_HEADER_LEN; + DISCONNECT_t *disconnect = (DISCONNECT_t *)((unsigned long)data + headerlen); + int location, cause; + int coding, proglocation, progress; + struct message *message; + + /* cause */ + dec_ie_progress(disconnect->PROGRESS, (Q931_info_t *)((unsigned long)data+headerlen), &coding, &proglocation, &progress); + dec_ie_cause(disconnect->CAUSE, (Q931_info_t *)((unsigned long)data+headerlen), &location, &cause); + if (cause < 0) + cause = 16; + + /* release if we are internal, since internal TEs don't send tones */ + if (p_m_d_ntmode) // || !options.inbandpattern) + { + RELEASE_t *release; + msg_t *dmsg; + + PDEBUG(DEBUG_ISDN, "Pdss1(%s) send release because internal phone disconnects OR inbandpatterns are not enabled.\n", p_name); + dmsg = create_l3msg(CC_RELEASE | REQUEST, MT_RELEASE, dinfo, sizeof(RELEASE_t), p_m_d_ntmode); + isdn_show_send_message(CC_RELEASE | REQUEST, dmsg); + release = (RELEASE_t *)(dmsg->data + headerlen); + enc_ie_cause(&release->CAUSE, dmsg, (p_m_d_ntmode)?LOCATION_PRIVATE_LOCAL:LOCATION_PRIVATE_REMOTE, 16); /* normal */ + msg_queue_tail(&p_m_mISDNport->downqueue, dmsg); + + /* sending release to endpoint */ + while(p_epointlist) + { + message = message_create(p_serial, p_epointlist->epoint_id, PORT_TO_EPOINT, MESSAGE_RELEASE); + message->param.disconnectinfo.cause = cause; + message->param.disconnectinfo.location = location; + message_put(message); + /* remove epoint */ + free_epointlist(p_epointlist); + } + new_state(PORT_STATE_RELEASE); + p_m_delete = 1; + return; + } + + /* sending disconnect to active endpoint and release to inactive endpoints */ + if (ACTIVE_EPOINT(p_epointlist)) + { + message = message_create(p_serial, ACTIVE_EPOINT(p_epointlist), PORT_TO_EPOINT, MESSAGE_DISCONNECT); + message->param.disconnectinfo.location = location; + message->param.disconnectinfo.cause = cause; + message_put(message); + } + while(INACTIVE_EPOINT(p_epointlist)) + { + message = message_create(p_serial, INACTIVE_EPOINT(p_epointlist), PORT_TO_EPOINT, MESSAGE_RELEASE); + message->param.disconnectinfo.location = location; + message->param.disconnectinfo.cause = cause; + message_put(message); + /* remove epoint */ + free_epointid(INACTIVE_EPOINT(p_epointlist)); + } + new_state(PORT_STATE_IN_DISCONNECT); +} + +/* CC_DISCONNECT INDICATION */ +void Pdss1::disconnect_ind_i(unsigned long prim, unsigned long dinfo, void *data) +{ + int headerlen = (p_m_d_ntmode)?mISDNUSER_HEAD_SIZE:mISDN_HEADER_LEN; + DISCONNECT_t *disconnect = (DISCONNECT_t *)((unsigned long)data + headerlen); + int location, cause; + + /* cause */ + dec_ie_cause(disconnect->CAUSE, (Q931_info_t *)((unsigned long)data+headerlen), &location, &cause); + + /* collect cause */ + PDEBUG(DEBUG_ISDN, "PORT(%d) collecting cause %d location %d.\n", p_serial, cause, location); + if (cause == CAUSE_REJECTED) /* call rejected */ + { + p_m_d_collect_cause = CAUSE_REJECTED; + p_m_d_collect_location = location; + } else + if (cause==CAUSE_NORMAL && p_m_d_collect_cause!=CAUSE_REJECTED) /* reject via hangup */ + { + p_m_d_collect_cause = CAUSE_NORMAL; + p_m_d_collect_location = location; + } else + if (cause==CAUSE_BUSY && p_m_d_collect_cause!=CAUSE_REJECTED && p_m_d_collect_cause!=CAUSE_NORMAL) /* busy */ + { + p_m_d_collect_cause = CAUSE_BUSY; + p_m_d_collect_location = location; + } else + if (cause==CAUSE_OUTOFORDER && p_m_d_collect_cause!=CAUSE_BUSY && p_m_d_collect_cause!=CAUSE_REJECTED && p_m_d_collect_cause!=CAUSE_NORMAL) /* no L1 */ + { + p_m_d_collect_cause = CAUSE_OUTOFORDER; + p_m_d_collect_location = location; + } else + if (cause!=0 && cause!=CAUSE_NOUSER && p_m_d_collect_cause!=CAUSE_OUTOFORDER && p_m_d_collect_cause!=CAUSE_BUSY && p_m_d_collect_cause!=CAUSE_REJECTED && p_m_d_collect_cause!=CAUSE_NORMAL) /* anything if cause exists and not 18 */ + { + p_m_d_collect_cause = cause; + p_m_d_collect_location = location; + } + PDEBUG(DEBUG_ISDN, "PORT(%d) new multipoint cause %d location %d.\n", p_serial, p_m_d_collect_cause, p_m_d_collect_location); + +} + +/* CC_RELEASE INDICATION */ +void Pdss1::release_ind(unsigned long prim, unsigned long dinfo, void *data) +{ + int headerlen = (p_m_d_ntmode)?mISDNUSER_HEAD_SIZE:mISDN_HEADER_LEN; + RELEASE_t *release = (RELEASE_t *)((unsigned long)data + headerlen); + msg_t *dmsg; + int location, cause; + struct message *message; + + /* cause */ + dec_ie_cause(release->CAUSE, (Q931_info_t *)((unsigned long)data+headerlen), &location, &cause); + if (cause < 0) + cause = 16; + + /* sending release to endpoint */ + while(p_epointlist) + { + message = message_create(p_serial, p_epointlist->epoint_id, PORT_TO_EPOINT, MESSAGE_RELEASE); + message->param.disconnectinfo.cause = cause; + message->param.disconnectinfo.location = location; + message_put(message); + /* remove epoint */ + free_epointlist(p_epointlist); + } + + /* only in NT mode we must send release_complete, if we got a release confirm */ + if (prim == (CC_RELEASE | CONFIRM)) + { + /* sending release complete */ + RELEASE_COMPLETE_t *release_complete; + + dmsg = create_l3msg(CC_RELEASE_COMPLETE | REQUEST, MT_RELEASE_COMPLETE, dinfo, sizeof(RELEASE_COMPLETE_t), p_m_d_ntmode); + isdn_show_send_message(CC_RELEASE_COMPLETE | REQUEST, dmsg); + release_complete = (RELEASE_COMPLETE_t *)(dmsg->data + headerlen); + enc_ie_cause(&release_complete->CAUSE, dmsg, (p_m_d_ntmode)?LOCATION_PRIVATE_LOCAL:LOCATION_PRIVATE_REMOTE, 16); + msg_queue_tail(&p_m_mISDNport->downqueue, dmsg); + } + + new_state(PORT_STATE_RELEASE); + p_m_delete = 1; +} + +/* CC_RELEASE_COMPLETE INDICATION */ +void Pdss1::release_complete_ind(unsigned long prim, unsigned long dinfo, void *data) +{ + int headerlen = (p_m_d_ntmode)?mISDNUSER_HEAD_SIZE:mISDN_HEADER_LEN; + RELEASE_COMPLETE_t *release_complete = (RELEASE_COMPLETE_t *)((unsigned long)data + headerlen); + int location, cause; + struct message *message; + + /* cause */ + dec_ie_cause(release_complete->CAUSE, (Q931_info_t *)((unsigned long)data+headerlen), &location, &cause); + if (cause < 0) + cause = 16; + + /* sending release to endpoint */ + while(p_epointlist) + { + message = message_create(p_serial, p_epointlist->epoint_id, PORT_TO_EPOINT, MESSAGE_RELEASE); + message->param.disconnectinfo.cause = cause; + message->param.disconnectinfo.location = location; + message_put(message); + /* remove epoint */ + free_epointlist(p_epointlist); + } + + PDEBUG(DEBUG_ISDN, "Pdss1(%s) release_complete (cause %d)\n", p_name, cause); + new_state(PORT_STATE_RELEASE); + p_m_delete = 1; +} + +/* T312 timeout */ +void Pdss1::t312_timeout(unsigned long prim, unsigned long dinfo, void *data) +{ + struct message *message; + + /* sending release to endpoint */ + while(p_epointlist) + { + message = message_create(p_serial, p_epointlist->epoint_id, PORT_TO_EPOINT, MESSAGE_RELEASE); + message->param.disconnectinfo.cause = p_m_d_collect_cause; + message->param.disconnectinfo.location = p_m_d_collect_location; + message_put(message); + /* remove epoint */ + free_epointlist(p_epointlist); + } + + PDEBUG(DEBUG_ISDN, "Pdss1(%s) t312_timeout (collected cause %d location %d)\n", p_name, p_m_d_collect_cause, p_m_d_collect_location); + new_state(PORT_STATE_RELEASE); + p_m_delete = 1; +} + +/* CC_NOTIFY INDICATION */ +void Pdss1::notify_ind(unsigned long prim, unsigned long dinfo, void *data) +{ + int headerlen = (p_m_d_ntmode)?mISDNUSER_HEAD_SIZE:mISDN_HEADER_LEN; + NOTIFY_t *notifying = (NOTIFY_t *)((unsigned long)data + headerlen); + struct message *message; + int notify, type, plan, present; + + if (!ACTIVE_EPOINT(p_epointlist)) + { + PDEBUG(DEBUG_ISDN, "Pdss1(%s) there is no active endpoint to notify to.\n", p_name); + return; + } + /* notification indicator */ + dec_ie_notify(notifying->NOTIFY, (Q931_info_t *)((unsigned long)data+headerlen), ¬ify); + if (notify < 0) + return; + notify |= 0x80; + message = message_create(p_serial, ACTIVE_EPOINT(p_epointlist), PORT_TO_EPOINT, MESSAGE_NOTIFY); + message->param.notifyinfo.notify = notify; + /* redirection number */ + dec_ie_redir_dn(notifying->REDIR_DN, (Q931_info_t *)((unsigned long)data+headerlen), &type, &plan, &present, (unsigned char *)message->param.notifyinfo.id, sizeof(message->param.notifyinfo.id)); + switch (present) + { + case 1: + message->param.notifyinfo.present = INFO_PRESENT_RESTRICTED; + break; + case 2: + message->param.notifyinfo.present = INFO_PRESENT_NOTAVAIL; + break; + default: + message->param.notifyinfo.present = INFO_PRESENT_ALLOWED; + break; + } + switch (type) + { + case -1: + message->param.notifyinfo.ntype = INFO_NTYPE_UNKNOWN; + message->param.notifyinfo.present = INFO_PRESENT_NULL; + break; + case 1: + message->param.notifyinfo.ntype = INFO_NTYPE_INTERNATIONAL; + break; + case 2: + message->param.notifyinfo.ntype = INFO_NTYPE_NATIONAL; + break; + case 4: + message->param.notifyinfo.ntype = INFO_NTYPE_SUBSCRIBER; + break; + default: + message->param.notifyinfo.ntype = INFO_NTYPE_UNKNOWN; + break; + } + message->param.notifyinfo.isdn_port = p_m_portnum; + message_put(message); +} + + +/* CC_HOLD INDICATION */ +void Pdss1::hold_ind(unsigned long prim, unsigned long dinfo, void *data) +{ + int headerlen = (p_m_d_ntmode)?mISDNUSER_HEAD_SIZE:mISDN_HEADER_LEN; +// HOLD_t *hold = (HOLD_t *)((unsigned long)data + headerlen); + struct message *message; + HOLD_REJECT_t *hold_reject; + HOLD_ACKNOWLEDGE_t *hold_acknowledge; + msg_t *dmsg; +// class Endpoint *epoint; + + if (!ACTIVE_EPOINT(p_epointlist) || p_m_hold) + { + + PDEBUG(DEBUG_ISDN, "Pdss1(%s) there is no endpoint to notify hold OR we are already on hold, so we reject.\n", p_name); + + dmsg = create_l3msg(CC_HOLD_REJECT | REQUEST, MT_HOLD_REJECT, dinfo, sizeof(HOLD_REJECT_t), p_m_d_ntmode); + isdn_show_send_message(CC_HOLD_REJECT | REQUEST, dmsg); + hold_reject = (HOLD_REJECT_t *)(dmsg->data + headerlen); + enc_ie_cause(&hold_reject->CAUSE, dmsg, (p_m_d_ntmode)?LOCATION_PRIVATE_LOCAL:LOCATION_PRIVATE_REMOTE, p_m_hold?101:31); /* normal unspecified / incompatible state */ + msg_queue_tail(&p_m_mISDNport->downqueue, dmsg); + + return; + } + + /* notify the hold of call */ + message = message_create(p_serial, ACTIVE_EPOINT(p_epointlist), PORT_TO_EPOINT, MESSAGE_NOTIFY); + message->param.notifyinfo.notify = INFO_NOTIFY_REMOTE_HOLD; + message->param.notifyinfo.local = 1; /* call is held by supplementary service */ + message_put(message); + + /* deactivate bchannel */ + free_bchannel(); + + /* set hold state */ + p_m_hold = 1; +#if 0 + epoint = find_epoint_id(ACTIVE_EPOINT(p_epointlist)); + if (epoint && p_m_d_ntmode) + { + p_m_timeout = p_settings.tout_hold; + time(&p_m_timer); + } +#endif + + /* acknowledge hold */ + dmsg = create_l3msg(CC_HOLD_ACKNOWLEDGE | REQUEST, MT_HOLD_ACKNOWLEDGE, dinfo, sizeof(HOLD_ACKNOWLEDGE_t), p_m_d_ntmode); + isdn_show_send_message(CC_HOLD_ACKNOWLEDGE | REQUEST, dmsg); + hold_acknowledge = (HOLD_ACKNOWLEDGE_t *)(dmsg->data + headerlen); + msg_queue_tail(&p_m_mISDNport->downqueue, dmsg); +} + + +/* CC_RETRIEVE INDICATION */ +void Pdss1::retrieve_ind(unsigned long prim, unsigned long dinfo, void *data) +{ + int headerlen = (p_m_d_ntmode)?mISDNUSER_HEAD_SIZE:mISDN_HEADER_LEN; + RETRIEVE_t *retrieve = (RETRIEVE_t *)((unsigned long)data + headerlen); + RETRIEVE_REJECT_t *retrieve_reject; + RETRIEVE_ACKNOWLEDGE_t *retrieve_acknowledge; + struct message *message; + int channel, exclusive, cause; + msg_t *dmsg; + int ret; + + if (!p_m_hold) + { + cause = 101; /* incompatible state */ + reject: + PDEBUG(DEBUG_ISDN, "Pdss1(%s) we are not on hold, so we reject (cazse %d).\n", p_name, cause); + + dmsg = create_l3msg(CC_RETRIEVE_REJECT | REQUEST, MT_RETRIEVE_REJECT, dinfo, sizeof(RETRIEVE_REJECT_t), p_m_d_ntmode); + isdn_show_send_message(CC_RETRIEVE_REJECT | REQUEST, dmsg); + retrieve_reject = (RETRIEVE_REJECT_t *)(dmsg->data + headerlen); + enc_ie_cause(&retrieve_reject->CAUSE, dmsg, (p_m_d_ntmode)?LOCATION_PRIVATE_LOCAL:LOCATION_PRIVATE_REMOTE, cause); + msg_queue_tail(&p_m_mISDNport->downqueue, dmsg); + + return; + } + + /* notify the retrieve of call */ + message = message_create(p_serial, ACTIVE_EPOINT(p_epointlist), PORT_TO_EPOINT, MESSAGE_NOTIFY); + message->param.notifyinfo.notify = INFO_NOTIFY_REMOTE_RETRIEVAL; + message->param.notifyinfo.local = 1; /* call is retrieved by supplementary service */ + message_put(message); + + /* channel_id */ + dec_ie_channel_id(retrieve->CHANNEL_ID, (Q931_info_t *)((unsigned long)data+headerlen), &exclusive, &channel); + if (exclusive<0) + exclusive = 0; + if (channel < 0) + channel = -1; /* any channel */ + if (channel == ANY_CHANNEL) + channel = -1; /* any channel */ + /* debug */ + if (channel < 0) + PDEBUG(DEBUG_BCHANNEL, "- any channel is selected the %s, so we need to return the selected channel\n", (p_m_d_ntmode)?"user":"network"); + if (channel==0 && (p_type==PORT_TYPE_DSS1_TE_IN||p_type==PORT_TYPE_DSS1_TE_OUT)) + PDEBUG(DEBUG_BCHANNEL, "- no channel is given by the network, causing to fail, since CW is not possible for external lines\n"); + if (channel >= 0) + if (exclusive) + PDEBUG(DEBUG_BCHANNEL, "- exclusive channel(%d) is selected.\n", channel); + else + PDEBUG(DEBUG_BCHANNEL, "- channel(%d) given, but we select a different channel if not available.\n", channel); + /* open channel */ + ret = alloc_bchannel(channel, exclusive); + if (ret < 0) + { + PDEBUG(DEBUG_BCHANNEL, "- channel is not available (cause=%d), so we send a retrieve_reject.\n", -ret); + cause = -ret; + goto reject; + } + + /* set hold state */ + p_m_hold = 0; + p_m_timeout = 0; + + /* acknowledge retrieve */ + dmsg = create_l3msg(CC_RETRIEVE_ACKNOWLEDGE | REQUEST, MT_RETRIEVE_ACKNOWLEDGE, dinfo, sizeof(RETRIEVE_ACKNOWLEDGE_t), p_m_d_ntmode); + isdn_show_send_message(CC_RETRIEVE_ACKNOWLEDGE | REQUEST, dmsg); + retrieve_acknowledge = (RETRIEVE_ACKNOWLEDGE_t *)(dmsg->data + headerlen); + /* channel information */ + enc_ie_channel_id(&retrieve_acknowledge->CHANNEL_ID, dmsg, 1, p_m_b_channel); + msg_queue_tail(&p_m_mISDNport->downqueue, dmsg); +} + +/* CC_SUSPEND INDICATION */ +void Pdss1::suspend_ind(unsigned long prim, unsigned long dinfo, void *data) +{ + int headerlen = (p_m_d_ntmode)?mISDNUSER_HEAD_SIZE:mISDN_HEADER_LEN; + SUSPEND_t *suspend = (SUSPEND_t *)((unsigned long)data + headerlen); + SUSPEND_ACKNOWLEDGE_t *suspend_acknowledge; + SUSPEND_REJECT_t *suspend_reject; + struct message *message; + class Endpoint *epoint; + unsigned char callid[8]; + int len; + msg_t *dmsg; + int ret = -31; /* normal, unspecified */ + + if (!ACTIVE_EPOINT(p_epointlist)) + { + PDEBUG(DEBUG_ISDN, "Pdss1(%s) there is no endpoint to notify suspend, so we reject.\n", p_name); + + reject: + dmsg = create_l3msg(CC_SUSPEND_REJECT | REQUEST, MT_SUSPEND_REJECT, dinfo, sizeof(SUSPEND_REJECT_t), p_m_d_ntmode); + isdn_show_send_message(CC_SUSPEND_REJECT | REQUEST, dmsg); + suspend_reject = (SUSPEND_REJECT_t *)(dmsg->data + headerlen); + enc_ie_cause(&suspend_reject->CAUSE, dmsg, (p_m_d_ntmode)?LOCATION_PRIVATE_LOCAL:LOCATION_PRIVATE_REMOTE, -ret); + msg_queue_tail(&p_m_mISDNport->downqueue, dmsg); + + return; + } + + /* call id */ + dec_ie_call_id(suspend->CALL_ID, (Q931_info_t *)((unsigned long)data+headerlen), callid, &len); + if (len<0) len = 0; + + /* check if call id is in use */ + epoint = epoint_first; + while(epoint) + { + if (epoint->ep_park) + { + if (epoint->ep_park_len == len) + if (!memcmp(epoint->ep_park_callid, callid, len)) + { + PDEBUG(DEBUG_ISDN, "Pdss1(%s) call id is in use, so we reject.\n", p_name); + ret = -84; /* call id in use */ + goto reject; + } + } + epoint = epoint->next; + } + + /* notify the hold of call */ + message = message_create(p_serial, ACTIVE_EPOINT(p_epointlist), PORT_TO_EPOINT, MESSAGE_NOTIFY); + message->param.notifyinfo.notify = INFO_NOTIFY_USER_SUSPENDED; + message->param.notifyinfo.local = 1; /* call is held by supplementary service */ + message_put(message); + + /* deactivate bchannel */ + free_bchannel(); + + /* sending suspend to endpoint */ + while (p_epointlist) + { + message = message_create(p_serial, p_epointlist->epoint_id, PORT_TO_EPOINT, MESSAGE_SUSPEND); + memcpy(message->param.parkinfo.callid, callid, sizeof(message->param.parkinfo.callid)); + message->param.parkinfo.len = len; + message_put(message); + /* remove epoint */ + free_epointlist(p_epointlist); + } + + /* sending SUSPEND_ACKNOWLEDGE */ + dmsg = create_l3msg(CC_SUSPEND_ACKNOWLEDGE | REQUEST, MT_SUSPEND_ACKNOWLEDGE, dinfo, sizeof(SUSPEND_ACKNOWLEDGE_t), p_m_d_ntmode); + isdn_show_send_message(CC_SUSPEND_ACKNOWLEDGE | REQUEST, dmsg); + suspend_acknowledge = (SUSPEND_ACKNOWLEDGE_t *)(dmsg->data + headerlen); + msg_queue_tail(&p_m_mISDNport->downqueue, dmsg); + + new_state(PORT_STATE_RELEASE); + p_m_delete = 1; +} + +/* CC_RESUME INDICATION */ +void Pdss1::resume_ind(unsigned long prim, unsigned long dinfo, void *data) +{ + int headerlen = (p_m_d_ntmode)?mISDNUSER_HEAD_SIZE:mISDN_HEADER_LEN; + RESUME_t *resume = (RESUME_t *)((unsigned long)data + headerlen); + RESUME_REJECT_t *resume_reject; + RESUME_ACKNOWLEDGE_t *resume_acknowledge; + unsigned char callid[8]; + int len; + int channel, exclusive; + msg_t *dmsg; + class Endpoint *epoint; + struct message *message; + int ret; + + /* call id */ + dec_ie_call_id(resume->CALL_ID, (Q931_info_t *)((unsigned long)data+headerlen), callid, &len); + if (len<0) len = 0; + + /* channel_id */ + exclusive = 0; + channel = -1; /* any channel */ + PDEBUG(DEBUG_BCHANNEL, "- any channel is selected the %s, so we need to return the selected channel\n", (p_m_d_ntmode)?"user":"network"); + /* open channel */ + ret = alloc_bchannel(channel, exclusive); + if (ret < 0) + { + PDEBUG(DEBUG_BCHANNEL, "- channel is not available (cause=%d), so we send a RESUME_REJECT.\n", -ret); + + reject: + dmsg = create_l3msg(CC_RESUME_REJECT | REQUEST, MT_RESUME_REJECT, dinfo, sizeof(RESUME_REJECT_t), p_m_d_ntmode); + isdn_show_send_message(CC_RESUME_REJECT | REQUEST, dmsg); + resume_reject = (RESUME_REJECT_t *)(dmsg->data + headerlen); + enc_ie_cause(&resume_reject->CAUSE, dmsg, (p_m_d_ntmode)?LOCATION_PRIVATE_LOCAL:LOCATION_PRIVATE_REMOTE, -ret); + msg_queue_tail(&p_m_mISDNport->downqueue, dmsg); + new_state(PORT_STATE_RELEASE); + p_m_delete = 1; + return; + } + PDEBUG(DEBUG_BCHANNEL, "- channel is available, we selected channel %d.\n", ret); + /* create endpoint */ + if (p_epointlist) + { + PERROR("SOFTWARE ERROR: incoming resume but already got an endpoint, exitting...\n"); + exit(-1); + } + ret = -85; /* no call suspended */ + epoint = epoint_first; + while(epoint) + { + if (epoint->ep_park) + { + ret = -83; /* suspended call exists, but this not */ + if (epoint->ep_park_len == len) + if (!memcmp(epoint->ep_park_callid, callid, len)) + break; + } + epoint = epoint->next; + } + if (!epoint) + { + PDEBUG(DEBUG_ISDN, "Pdss1(%s) no suspended call, so we reject with cause %d.\n", p_name, ret); + goto reject; + } + + if (!(epointlist_new(epoint->ep_serial))) + { + PERROR("no memory for epointlist\n"); + exit(-1); + } + if (!(epoint->portlist_new(p_serial, p_type))) + { + PERROR("no memory for portlist\n"); + exit(-1); + } + if (p_m_d_ntmode) + { + /* nt-library now gives us the id via CC_RESUME */ + if (dinfo&(~0xff) == 0xff00) + { + PERROR("fatal software error: l3-stack gives us a process id 0xff00-0xffff\n"); + exit(-1); + } + printisdn(" l3id 0x%x changes to 0x%x\n", p_m_d_l3id, dinfo); + if (p_m_d_l3id&(~0xff) == 0xff00) + p_m_mISDNport->procids[p_m_d_l3id&0xff] = 0; + p_m_d_l3id = dinfo; + p_m_d_ces = resume->ces; + PDEBUG(DEBUG_ISDN, "Pdss1(%s: nt-mode gives us new l3id via resume ind: 0x%x\n", p_name, p_m_d_l3id); + } + + PDEBUG(DEBUG_ISDN, "Pdss1(%s) resume\n", p_name); + message = message_create(p_serial, ACTIVE_EPOINT(p_epointlist), PORT_TO_EPOINT, MESSAGE_RESUME); + message_put(message); + + /* notify the resume of call */ + message = message_create(p_serial, ACTIVE_EPOINT(p_epointlist), PORT_TO_EPOINT, MESSAGE_NOTIFY); + message->param.notifyinfo.notify = INFO_NOTIFY_USER_RESUMED; + message->param.notifyinfo.local = 1; /* call is retrieved by supplementary service */ + message_put(message); + + /* sending RESUME_ACKNOWLEDGE */ + dmsg = create_l3msg(CC_RESUME_ACKNOWLEDGE | REQUEST, MT_RESUME_ACKNOWLEDGE, dinfo, sizeof(RESUME_ACKNOWLEDGE_t), p_m_d_ntmode); + isdn_show_send_message(CC_RESUME_ACKNOWLEDGE | REQUEST, dmsg); + resume_acknowledge = (RESUME_ACKNOWLEDGE_t *)(dmsg->data + headerlen); + /* channel information */ + enc_ie_channel_id(&resume_acknowledge->CHANNEL_ID, dmsg, 1, p_m_b_channel); + msg_queue_tail(&p_m_mISDNport->downqueue, dmsg); + + new_state(PORT_STATE_CONNECT); +} + + +/* CC_FACILITY INDICATION */ +void Pdss1::facility_ind(unsigned long prim, unsigned long dinfo, void *data) +{ + int headerlen = (p_m_d_ntmode)?mISDNUSER_HEAD_SIZE:mISDN_HEADER_LEN; + FACILITY_t *facility = (FACILITY_t *)((unsigned long)data + headerlen); + unsigned char facil[256]; + int facil_len; + struct message *message; + + /* facility */ + dec_ie_facility(facility->FACILITY, (Q931_info_t *)((unsigned long)data+headerlen), facil, &facil_len); + if (facil_len<=0) + return; + + PDEBUG(DEBUG_ISDN, "Pdss1(%s) facility\n", p_name); + message = message_create(p_serial, ACTIVE_EPOINT(p_epointlist), PORT_TO_EPOINT, MESSAGE_FACILITY); + message->param.facilityinfo.len = facil_len; + memcpy(message->param.facilityinfo.data, facil, facil_len); + message_put(message); +} + + +/* + * handler for isdn connections + * incoming information are parsed and sent via message to the endpoint + */ +void Pdss1::message_isdn(unsigned long prim, unsigned long dinfo, void *data) +{ + char *msgtext = "<>"; + char *primtext; + int i; + int new_l3id; + + i = 0; + while(isdn_message[i].name) + { + if (isdn_message[i].value == (prim&0xffffff00)) + { + msgtext = isdn_message[i].name; + break; + } + i++; + } + primtext = isdn_prim[prim&0x00000003]; + printisdn("<<< incoming prim: %s %s (0x%x)\n", msgtext, primtext, prim); + switch (prim) + { + case CC_TIMEOUT | INDICATION: + if (p_m_d_ntmode) + { + int headerlen = (p_m_d_ntmode)?mISDNUSER_HEAD_SIZE:mISDN_HEADER_LEN; + int t = *((int *)(((char *)data)+headerlen)); + PDEBUG(DEBUG_ISDN, "Pdss1(%s) timeout (t%x in NT-mode)\n", p_name, t); + if (t == 0x312) + t312_timeout(prim, dinfo, data); + } else { + PDEBUG(DEBUG_ISDN, "Pdss1(%s) timeout (ignoring)\n", p_name); + } + break; + + case CC_SETUP | INDICATION: + PDEBUG((DEBUG_BCHANNEL|DEBUG_ISDN), "Pdss1(%s) setup\n", p_name); + if (p_state != PORT_STATE_IDLE) + { + PDEBUG(DEBUG_ISDN, "Pdss1(%s) received setup again, IGNORING.\n", p_name); + break; + } + setup_ind(prim, dinfo, data); + break; + + case CC_SETUP | CONFIRM: + if (p_m_d_ntmode) + { + /* nt-library now gives us a new id via CC_SETUP_CONFIRM */ + if ((p_m_d_l3id&0xff00) == 0xff00) + { +// p_m_mISDNport->procids[p_m_d_l3id&0xff] = 0; +// printisdn(" procid 0x%x freed\n", p_m_d_l3id&0xff); + printisdn(" procid 0x%x still in use\n", p_m_d_l3id&0xff); + } else + { + printisdn(" strange setup-procid 0x%x\n", p_m_d_l3id); + } + p_m_d_l3id = *((int *)(((u_char *)data)+ mISDNUSER_HEAD_SIZE)); + printisdn(" l3id changes to 0x%x\n", p_m_d_l3id); + } + PDEBUG(DEBUG_ISDN, "Pdss1(%s) setup confirm (l3id=0x%x)\n", p_name, p_m_d_l3id); + break; + + case CC_INFORMATION | INDICATION: + PDEBUG(DEBUG_ISDN, "Pdss1(%s) information\n", p_name); + information_ind(prim, dinfo, data); + break; + + case CC_SETUP_ACKNOWLEDGE | INDICATION: + PDEBUG(DEBUG_ISDN, "Pdss1(%s) setup acknowledge\n", p_name); + if (p_state != PORT_STATE_OUT_SETUP) + { + PDEBUG(DEBUG_ISDN, "Pdss1(%s) received setup_acknowledge, but we are not in outgoing setup state, IGNORING.\n", p_name); + break; + } + setup_acknowledge_ind(prim, dinfo, data); + break; + + case CC_PROCEEDING | INDICATION: + PDEBUG(DEBUG_ISDN, "Pdss1(%s) proceeding\n", p_name); + if (p_state != PORT_STATE_OUT_SETUP + && p_state != PORT_STATE_OUT_OVERLAP) + { + PDEBUG(DEBUG_ISDN, "Pdss1(%s) received proceeding, but we are not in outgoing setup OR overlap state, IGNORING.\n", p_name); + break; + } + proceeding_ind(prim, dinfo, data); + break; + + case CC_ALERTING | INDICATION: + PDEBUG(DEBUG_ISDN, "Pdss1(%s) alerting\n", p_name); + if (p_state != PORT_STATE_OUT_SETUP + && p_state != PORT_STATE_OUT_OVERLAP + && p_state != PORT_STATE_OUT_PROCEEDING) + { + PDEBUG(DEBUG_ISDN, "Pdss1(%s) received alerting, but we are not in outgoing setup OR overlap OR proceeding state, IGNORING.\n", p_name); + break; + } + alerting_ind(prim, dinfo, data); + break; + + case CC_CONNECT | INDICATION: + PDEBUG(DEBUG_ISDN, "Pdss1(%s) connect\n", p_name); + if (p_state != PORT_STATE_OUT_SETUP + && p_state != PORT_STATE_OUT_OVERLAP + && p_state != PORT_STATE_OUT_PROCEEDING + && p_state != PORT_STATE_OUT_ALERTING) + { + PDEBUG(DEBUG_ISDN, "Pdss1(%s) received alerting, but we are not in outgoing setup OR overlap OR proceeding OR ALERTING state, IGNORING.\n", p_name); + break; + } + connect_ind(prim, dinfo, data); + if (p_m_d_notify_pending) + { + PDEBUG(DEBUG_ISDN, "received or connect, so we send pending notify message.\n"); + message_notify(ACTIVE_EPOINT(p_epointlist), p_m_d_notify_pending->type, &p_m_d_notify_pending->param); + message_free(p_m_d_notify_pending); + p_m_d_notify_pending = NULL; + } + break; + + case CC_CONNECT_ACKNOWLEDGE | INDICATION: + case CC_CONNECT | CONFIRM: + PDEBUG(DEBUG_ISDN, "Pdss1(%s) connect_acknowlege.\n", p_name); + if (p_state == PORT_STATE_CONNECT_WAITING) + new_state(PORT_STATE_CONNECT); + if (p_m_d_notify_pending) + { + PDEBUG(DEBUG_ISDN, "received or connect-ack, so we send pending notify message.\n"); + message_notify(ACTIVE_EPOINT(p_epointlist), p_m_d_notify_pending->type, &p_m_d_notify_pending->param); + message_free(p_m_d_notify_pending); + p_m_d_notify_pending = NULL; + } + break; + + case CC_DISCONNECT | INDICATION: + PDEBUG(DEBUG_ISDN, "Pdss1(%s) disconnect\n", p_name); + disconnect_ind(prim, dinfo, data); + break; + + case CC_RELEASE | CONFIRM: + PDEBUG(DEBUG_ISDN, "Pdss1(%s) release confirm\n", p_name); + case CC_RELEASE | INDICATION: + PDEBUG(DEBUG_ISDN, "Pdss1(%s) release\n", p_name); + release_ind(prim, dinfo, data); + break; + + case CC_RELEASE_COMPLETE | INDICATION: + PDEBUG(DEBUG_ISDN, "Pdss1(%s) release_complete.\n", p_name); + release_complete_ind(prim, dinfo, data); + break; + + case CC_RELEASE_COMPLETE | CONFIRM: + PDEBUG(DEBUG_ISDN, "Pdss1(%s) release_complete (confirm).\n", p_name); + break; + + case CC_NOTIFY | INDICATION: + PDEBUG(DEBUG_ISDN, "Pdss1(%s) notify\n", p_name); + notify_ind(prim, dinfo, data); + break; + + case CC_HOLD | INDICATION: + PDEBUG(DEBUG_ISDN, "Pdss1(%s) hold\n", p_name); + hold_ind(prim, dinfo, data); + break; + + case CC_RETRIEVE | INDICATION: + PDEBUG(DEBUG_ISDN, "Pdss1(%s) retrieve\n", p_name); + retrieve_ind(prim, dinfo, data); + break; + + case CC_SUSPEND | INDICATION: + PDEBUG(DEBUG_ISDN, "Pdss1(%s) suspend\n", p_name); + suspend_ind(prim, dinfo, data); + break; + + case CC_RESUME | INDICATION: + PDEBUG(DEBUG_ISDN, "Pdss1(%s) resume\n", p_name); + resume_ind(prim, dinfo, data); + break; + + case CC_FACILITY | INDICATION: + PDEBUG(DEBUG_ISDN, "Pdss1(%s) facility\n", p_name); + facility_ind(prim, dinfo, data); + break; + + case CC_RELEASE_CR | INDICATION: + PDEBUG(DEBUG_ISDN, "Pdss1(%s) call ref is released (l3id=0x%x)\n", p_name, p_m_d_l3id); + printisdn(" process 0x%x released\n", p_m_d_l3id); + if (p_m_d_ntmode) + { + if ((p_m_d_l3id&0xff00) == 0xff00) + { + p_m_mISDNport->procids[p_m_d_l3id&0xff] = 0; + printisdn(" procid 0x%x freed\n", p_m_d_l3id&0xff); + } + } + p_m_d_l3id = 0; + p_m_delete = 1; + /* sending release to endpoint in case we still have an endpoint + * NOTE: this only happens if the stack releases due to layer1 + * or layer2 breakdown. otherwhise a release is received first. + */ + while(p_epointlist) + { + struct message *message; + message = message_create(p_serial, p_epointlist->epoint_id, PORT_TO_EPOINT, MESSAGE_RELEASE); + message->param.disconnectinfo.cause = (p_m_d_collect_cause!=CAUSE_NOUSER)?p_m_d_collect_cause:CAUSE_UNSPECIFIED; + message->param.disconnectinfo.location = (p_m_d_collect_cause!=CAUSE_NOUSER)?p_m_d_collect_location:LOCATION_PRIVATE_LOCAL; + message_put(message); + /* remove epoint */ + free_epointlist(p_epointlist); + + PDEBUG(DEBUG_ISDN, "Pdss1(%s) release due to breakdown of l3-process.\n", p_name); + new_state(PORT_STATE_RELEASE); + } + break; + + case CC_NEW_CR | INDICATION: + if (p_m_d_ntmode) + { + new_l3id = *((int *)(((u_char *)data+mISDNUSER_HEAD_SIZE))); + printisdn(" process 0x%x received\n", new_l3id); + if (((new_l3id&0xff00)!=0xff00) && ((p_m_d_l3id&0xff00)==0xff00)) + { + p_m_mISDNport->procids[p_m_d_l3id&0xff] = 0; + printisdn(" procid 0x%x freed\n", p_m_d_l3id&0xff); + } + } else + { + new_l3id = dinfo; + printisdn(" process 0x%x received\n", new_l3id); + } + p_m_d_l3id = new_l3id; + PDEBUG(DEBUG_ISDN, "Pdss1(%s) call ref is created (l3id=0x%x)\n", p_name, p_m_d_l3id); + break; + + default: + PDEBUG(DEBUG_ISDN, "Pdss1(%s) unhandled prim: 0x%x\n", p_name, prim); + } +} + +void Pdss1::new_state(int state) +{ + class Endpoint *epoint; + + /* set timeout */ + epoint = find_epoint_id(ACTIVE_EPOINT(p_epointlist)); + if (epoint && p_m_d_ntmode) + { + if (state == PORT_STATE_IN_OVERLAP) + { + p_m_timeout = p_settings.tout_dialing; + time(&p_m_timer); + } + if (state != p_state) + { +#if 0 + if (state == PORT_STATE_OUT_SETUP + || state == PORT_STATE_OUT_OVERLAP) + { + p_m_timeout = 8; + time(&p_m_timer); + } +#endif + if (state == PORT_STATE_IN_SETUP + || state == PORT_STATE_IN_OVERLAP) + { + p_m_timeout = p_settings.tout_setup; + time(&p_m_timer); + } + if (state == PORT_STATE_IN_PROCEEDING + || state == PORT_STATE_OUT_PROCEEDING) + { + p_m_timeout = p_settings.tout_proceeding; + time(&p_m_timer); + } + if (state == PORT_STATE_IN_ALERTING + || state == PORT_STATE_OUT_ALERTING) + { + p_m_timeout = p_settings.tout_alerting; + time(&p_m_timer); + } + if (state == PORT_STATE_CONNECT + || state == PORT_STATE_CONNECT_WAITING) + { + p_m_timeout = 0; + } + if (state == PORT_STATE_IN_DISCONNECT + || state == PORT_STATE_OUT_DISCONNECT) + { + p_m_timeout = p_settings.tout_disconnect; + time(&p_m_timer); + } + } + } + + Port::new_state(state); +} + + +/* + * handler + */ +int Pdss1::handler(void) +{ + /* handle destruction */ + if (p_m_delete && p_m_d_l3id==0) + { + PDEBUG(DEBUG_ISDN, "Pdss1(%s) doing pending release.\n", p_name); + delete this; + return(-1); + } + + return(PmISDN::handler()); +} + + +/* + * handles all messages from endpoint + */ +/* MESSAGE_INFORMATION */ +void Pdss1::message_information(unsigned long epoint_id, int message_id, union parameter *param) +{ + int headerlen = (p_m_d_ntmode)?mISDNUSER_HEAD_SIZE:mISDN_HEADER_LEN; + INFORMATION_t *information; + msg_t *dmsg; + + if (param->information.number[0]) /* only if we have something to dial */ + { + dmsg = create_l3msg(CC_INFORMATION | REQUEST, MT_INFORMATION, p_m_d_l3id, sizeof(INFORMATION_t), p_m_d_ntmode); + isdn_show_send_message(CC_INFORMATION | REQUEST, dmsg); + information = (INFORMATION_t *)(dmsg->data + headerlen); + enc_ie_called_pn(&information->CALLED_PN, dmsg, 0, 1, (unsigned char *)param->information.number); + msg_queue_tail(&p_m_mISDNport->downqueue, dmsg); + } + new_state(p_state); +} + + +int newteid = 0; + +/* MESSAGE_SETUP */ +void Pdss1::message_setup(unsigned long epoint_id, int message_id, union parameter *param) +{ + int headerlen = (p_m_d_ntmode)?mISDNUSER_HEAD_SIZE:mISDN_HEADER_LEN; + INFORMATION_t *information; + SETUP_t *setup; + msg_t *dmsg; + int plan, type, screen, present, reason; + int capability, mode, rate, coding, user, presentation, interpretation, hlc, exthlc; + int channel, exclusive; + int i; + struct epoint_list *epointlist; + + /* copy setup infos to port */ + memcpy(&p_callerinfo, ¶m->setup.callerinfo, sizeof(p_callerinfo)); + memcpy(&p_dialinginfo, ¶m->setup.dialinginfo, sizeof(p_dialinginfo)); + memcpy(&p_capainfo, ¶m->setup.capainfo, sizeof(p_capainfo)); + memcpy(&p_redirinfo, ¶m->setup.redirinfo, sizeof(p_redirinfo)); +// SCPY(&p_m_tones_dir, param->setup.ext.tones_dir); + + /* only display at connect state: this case happens if endpoint is in connected mode */ + if (p_state==PORT_STATE_CONNECT) + { + if (p_type!=PORT_TYPE_DSS1_NT_OUT + && p_type!=PORT_TYPE_DSS1_NT_IN) + return; + if (p_callerinfo.display[0]) + { + /* sending information */ + dmsg = create_l3msg(CC_INFORMATION | REQUEST, MT_INFORMATION, p_m_d_l3id, sizeof(INFORMATION_t), p_m_d_ntmode); + isdn_show_send_message(CC_INFORMATION | REQUEST, dmsg); + information = (INFORMATION_t *)(dmsg->data + headerlen); + if (p_m_d_ntmode) + enc_ie_display(&information->DISPLAY, dmsg, (unsigned char *)p_callerinfo.display); + msg_queue_tail(&p_m_mISDNport->downqueue, dmsg); + return; + } + } + + /* attach only if not already */ + epointlist = p_epointlist; + while(epointlist) + { + if (epointlist->epoint_id == epoint_id) + break; + epointlist = epointlist->next; + } + if (!epointlist) + { + if (!(epointlist_new(epoint_id))) + { + PERROR("no memory for epointlist\n"); + exit(-1); + } + } + + /* get channel */ + exclusive = 0; + if (p_m_b_channel) + { + channel = p_m_b_channel; + exclusive = p_m_b_exclusive; + } else + channel = CHANNEL_ANY; + /* nt-port with no channel, not reserverd */ + if (!p_m_b_channel && !p_m_b_reserve && p_type==PORT_TYPE_DSS1_NT_OUT) + channel = CHANNEL_NO; + + /* creating l3id */ + if (p_m_d_ntmode) + { + i = 0; + while(i < 0x100) + { + if (p_m_mISDNport->procids[i] == 0) + break; + i++; + } + if (i == 0x100) + { + struct message *message; + + printisdn(" no free process id\n"); + PDEBUG(DEBUG_ISDN, "no more free process ID for port.\n"); + message = message_create(p_serial, ACTIVE_EPOINT(p_epointlist), PORT_TO_EPOINT, MESSAGE_RELEASE); + message->param.disconnectinfo.cause = 47; + message->param.disconnectinfo.location = LOCATION_PRIVATE_LOCAL; + message_put(message); + new_state(PORT_STATE_RELEASE); + p_m_delete = 1; + return; + } + p_m_mISDNport->procids[i] = 1; + printisdn(" procid 0x%x allocated\n", i); + p_m_d_l3id = 0xff00 | i; + printisdn(" l3id is now 0x%x\n", p_m_d_l3id); + } else + { + iframe_t ncr; + /* if we are in te-mode, we need to create a process first */ + if (newteid++ > 0x7fff) + newteid = 0x0001; + p_m_d_l3id = (entity<<16) | newteid; + /* preparing message */ + ncr.prim = CC_NEW_CR | REQUEST; + ncr.addr = p_m_mISDNport->upper_id | FLG_MSG_DOWN; + ncr.dinfo = p_m_d_l3id; + ncr.len = 0; + isdn_show_send_message(CC_NEW_CR | REQUEST, NULL); + /* send message */ + mISDN_write(mISDNdevice, &ncr, mISDN_HEADER_LEN+ncr.len, TIMEOUT_1SEC); +// if (!dmsg) +// goto nomem; + } + + /* preparing setup message */ + dmsg = create_l3msg(CC_SETUP | REQUEST, MT_SETUP, p_m_d_l3id, sizeof(SETUP_t), p_m_d_ntmode); + isdn_show_send_message(CC_SETUP | REQUEST, dmsg); + setup = (SETUP_t *)(dmsg->data + headerlen); + /* channel information */ + if (channel >= 0) /* it should */ + { + enc_ie_channel_id(&setup->CHANNEL_ID, dmsg, exclusive, channel); + } + /* caller information */ + plan = 1; + switch (p_callerinfo.ntype) + { + case INFO_NTYPE_INTERNATIONAL: + type = 0x1; + break; + case INFO_NTYPE_NATIONAL: + type = 0x2; + break; + case INFO_NTYPE_SUBSCRIBER: + type = 0x4; + break; + default: /* INFO_NTYPE_UNKNOWN */ + type = 0x0; + break; + } + switch (p_callerinfo.screen) + { + case INFO_SCREEN_USER: + screen = 0; + break; + default: /* INFO_SCREEN_NETWORK */ + screen = 3; + break; + } + switch (p_callerinfo.present) + { + case INFO_PRESENT_RESTRICTED: + present = 1; + break; + case INFO_PRESENT_NOTAVAIL: + present = 2; + break; + default: /* INFO_PRESENT_ALLOWED */ + present = 0; + break; + } + if (type >= 0) + enc_ie_calling_pn(&setup->CALLING_PN, dmsg, type, plan, present, screen, (unsigned char *)p_callerinfo.id); + /* dialing information */ + if (p_dialinginfo.number[0]) /* only if we have something to dial */ + { + enc_ie_called_pn(&setup->CALLED_PN, dmsg, 0, 1, (unsigned char *)p_dialinginfo.number); + } + /* sending complete */ + if (p_dialinginfo.sending_complete) + enc_ie_complete(&setup->COMPLETE, dmsg, 1); + /* sending user-user */ + if (param->setup.useruser.len) + { + enc_ie_useruser(&setup->USER_USER, dmsg, param->setup.useruser.protocol, param->setup.useruser.data, param->setup.useruser.len); + } + /* redirecting number */ + plan = 1; + switch (p_redirinfo.ntype) + { + case INFO_NTYPE_INTERNATIONAL: + type = 0x1; + break; + case INFO_NTYPE_NATIONAL: + type = 0x2; + break; + case INFO_NTYPE_SUBSCRIBER: + type = 0x4; + break; + default: /* INFO_NTYPE_UNKNOWN */ + type = 0x0; + break; + } + switch (p_redirinfo.screen) + { + case INFO_SCREEN_USER: + screen = 0; + break; + default: /* INFO_SCREE_NETWORK */ + screen = 3; + break; + } + switch (p_redirinfo.reason) + { + case INFO_REDIR_BUSY: + reason = 1; + break; + case INFO_REDIR_NORESPONSE: + reason = 2; + break; + case INFO_REDIR_UNCONDITIONAL: + reason = 15; + break; + case INFO_REDIR_CALLDEFLECT: + reason = 10; + break; + case INFO_REDIR_OUTOFORDER: + reason = 9; + break; + default: /* INFO_REDIR_UNKNOWN */ + reason = 0; + break; + } + switch (p_redirinfo.present) + { + case INFO_PRESENT_NULL: /* no redir at all */ + present = -1; + screen = -1; + reason = -1; + plan = -1; + type = -1; + break; + case INFO_PRESENT_RESTRICTED: + present = 1; + break; + case INFO_PRESENT_NOTAVAIL: + present = 2; + break; + default: /* INFO_PRESENT_ALLOWED */ + present = 0; + break; + } + /* sending redirecting number only in ntmode */ + if (type >= 0 && p_m_d_ntmode) + enc_ie_redir_nr(&setup->REDIR_NR, dmsg, type, plan, present, screen, reason, (unsigned char *)p_redirinfo.id); + /* bearer capability */ +//printf("hlc=%d\n",p_capainfo.hlc); + coding = 0; + capability = p_capainfo.bearer_capa; + mode = p_capainfo.bearer_mode; + rate = (mode==INFO_BMODE_CIRCUIT)?0x10:0x00; + switch (p_capainfo.bearer_info1) + { + case INFO_INFO1_NONE: + user = -1; + break; + default: + user = p_capainfo.bearer_info1 & 0x7f; + break; + } + enc_ie_bearer(&setup->BEARER, dmsg, coding, capability, mode, rate, -1, user); + /* hlc */ + if (p_capainfo.hlc) + { + coding = 0; + interpretation = 4; + presentation = 1; + hlc = p_capainfo.hlc & 0x7f; + exthlc = -1; + if (p_capainfo.exthlc) + exthlc = p_capainfo.exthlc & 0x7f; + enc_ie_hlc(&setup->HLC, dmsg, coding, interpretation, presentation, hlc, exthlc); + } + + /* display */ + if (p_callerinfo.display[0] && p_m_d_ntmode) + enc_ie_display(&setup->DISPLAY, dmsg, (unsigned char *)p_callerinfo.display); +#ifdef CENTREX + /* nt-mode: CNIP (calling name identification presentation) */ + if (p_callerinfo.name[0] && p_m_d_ntmode) + enc_facility_centrex(&setup->FACILITY, dmsg, (unsigned char *)p_callerinfo.name, 1); +#endif + + /* send setup message now */ + msg_queue_tail(&p_m_mISDNport->downqueue, dmsg); + + new_state(PORT_STATE_OUT_SETUP); +} + +/* MESSAGE_FACILITY */ +void Pdss1::message_facility(unsigned long epoint_id, int message_id, union parameter *param) +{ + int headerlen = (p_m_d_ntmode)?mISDNUSER_HEAD_SIZE:mISDN_HEADER_LEN; + FACILITY_t *facility; + msg_t *dmsg; + + /* facility will not be sent to external lines */ + if (!p_m_d_ntmode) + return; + + PDEBUG(DEBUG_ISDN, "Pdss1(%s) sending facility message\n", p_name); + + /* sending facility */ + dmsg = create_l3msg(CC_FACILITY | REQUEST, MT_FACILITY, p_m_d_l3id, sizeof(FACILITY_t), p_m_d_ntmode); + isdn_show_send_message(CC_FACILITY | REQUEST, dmsg); + facility = (FACILITY_t *)(dmsg->data + headerlen); + enc_ie_facility(&facility->FACILITY, dmsg, (unsigned char *)param->facilityinfo.data, param->facilityinfo.len); + msg_queue_tail(&p_m_mISDNport->downqueue, dmsg); +} + +/* MESSAGE_NOTIFY */ +void Pdss1::message_notify(unsigned long epoint_id, int message_id, union parameter *param) +{ + int headerlen = (p_m_d_ntmode)?mISDNUSER_HEAD_SIZE:mISDN_HEADER_LEN; + INFORMATION_t *information; + NOTIFY_t *notification; + int notify; + int plan, type = -1, present; + msg_t *dmsg; + + PDEBUG(DEBUG_ISDN, "Pdss1(%s) sending information message\n", p_name); + if (param->notifyinfo.notify>INFO_NOTIFY_NONE) + notify = param->notifyinfo.notify & 0x7f; + else + notify = -1; + if (p_state != PORT_STATE_CONNECT) + { + /* notify only allowed in active state */ + notify = -1; + } + if (notify >= 0) + { + plan = 1; + switch (param->notifyinfo.ntype) + { + case INFO_NTYPE_INTERNATIONAL: + type = 1; + break; + case INFO_NTYPE_NATIONAL: + type = 2; + break; + case INFO_NTYPE_SUBSCRIBER: + type = 4; + break; + default: /* INFO_NTYPE_UNKNOWN */ + type = 0; + break; + } + switch (param->notifyinfo.present) + { + case INFO_PRESENT_NULL: /* no redir at all */ + present = -1; + plan = -1; + type = -1; + break; + case INFO_PRESENT_RESTRICTED: + present = 1; + break; + case INFO_PRESENT_NOTAVAIL: + present = 2; + break; + default: /* INFO_PRESENT_ALLOWED */ + present = 0; + break; + } + } + + if (notify<0 && !param->notifyinfo.display[0]) + { + PDEBUG(DEBUG_ISDN, "Pdss1(%s) nothing to notify, nothing to display\n", p_name); + return; + } + + if (notify >= 0) + { + if (p_state!=PORT_STATE_CONNECT) + { + /* queue notification */ + PDEBUG(DEBUG_ISDN, "Pdss1(%s) queueing notification because isdn port is not active state.\n", p_name); + if (p_m_d_notify_pending) + message_free(p_m_d_notify_pending); + p_m_d_notify_pending = message_create(ACTIVE_EPOINT(p_epointlist), p_serial, EPOINT_TO_PORT, message_id); + memcpy(&p_m_d_notify_pending->param, param, sizeof(union parameter)); + } else + { + /* sending notification */ + dmsg = create_l3msg(CC_NOTIFY | REQUEST, MT_NOTIFY, p_m_d_l3id, sizeof(NOTIFY_t), p_m_d_ntmode); + isdn_show_send_message(CC_NOTIFY | REQUEST, dmsg); + notification = (NOTIFY_t *)(dmsg->data + headerlen); + enc_ie_notify(¬ification->NOTIFY, dmsg, notify); + /* sending redirection number only in ntmode */ + if (type >= 0 && p_m_d_ntmode) + enc_ie_redir_dn(¬ification->REDIR_DN, dmsg, type, plan, present, (unsigned char *)param->notifyinfo.id); + if (param->notifyinfo.display[0] && p_m_d_ntmode) + enc_ie_display(¬ification->DISPLAY, dmsg, (unsigned char *)param->notifyinfo.display); + msg_queue_tail(&p_m_mISDNport->downqueue, dmsg); + } + } else if (p_m_d_ntmode) + { + /* sending information */ + dmsg = create_l3msg(CC_INFORMATION | REQUEST, MT_INFORMATION, p_m_d_l3id, sizeof(INFORMATION_t), p_m_d_ntmode); + isdn_show_send_message(CC_INFORMATION | REQUEST, dmsg); + information = (INFORMATION_t *)(dmsg->data + headerlen); + enc_ie_display(&information->DISPLAY, dmsg, (unsigned char *)param->notifyinfo.display); + msg_queue_tail(&p_m_mISDNport->downqueue, dmsg); + } +} + +/* MESSAGE_OVERLAP */ +void Pdss1::message_overlap(unsigned long epoint_id, int message_id, union parameter *param) +{ + int headerlen = (p_m_d_ntmode)?mISDNUSER_HEAD_SIZE:mISDN_HEADER_LEN; + SETUP_ACKNOWLEDGE_t *setup_acknowledge; + msg_t *dmsg; + + /* sending setup_acknowledge */ + dmsg = create_l3msg(CC_SETUP_ACKNOWLEDGE | REQUEST, MT_SETUP_ACKNOWLEDGE, p_m_d_l3id, sizeof(SETUP_ACKNOWLEDGE_t), p_m_d_ntmode); + isdn_show_send_message(CC_SETUP_ACKNOWLEDGE | REQUEST, dmsg); + setup_acknowledge = (SETUP_ACKNOWLEDGE_t *)(dmsg->data + headerlen); + /* channel information */ + if (p_state == PORT_STATE_IN_SETUP) + enc_ie_channel_id(&setup_acknowledge->CHANNEL_ID, dmsg, 1, p_m_b_channel); + /* progress information */ + if (p_capainfo.bearer_capa==INFO_BC_SPEECH + || p_capainfo.bearer_capa==INFO_BC_AUDIO + || p_capainfo.bearer_capa==INFO_BC_DATAUNRESTRICTED_TONES) + if (p_m_d_ntmode || options.inbandpattern) + enc_ie_progress(&setup_acknowledge->PROGRESS, dmsg, 0, p_m_d_ntmode?1:5, 8); + msg_queue_tail(&p_m_mISDNport->downqueue, dmsg); + + new_state(PORT_STATE_IN_OVERLAP); +} + +/* MESSAGE_PROCEEDING */ +void Pdss1::message_proceeding(unsigned long epoint_id, int message_id, union parameter *param) +{ + int headerlen = (p_m_d_ntmode)?mISDNUSER_HEAD_SIZE:mISDN_HEADER_LEN; + CALL_PROCEEDING_t *proceeding; + msg_t *dmsg; + + /* sending proceeding */ + dmsg = create_l3msg(CC_PROCEEDING | REQUEST, MT_CALL_PROCEEDING, p_m_d_l3id, sizeof(CALL_PROCEEDING_t), p_m_d_ntmode); + isdn_show_send_message(CC_PROCEEDING | REQUEST, dmsg); + proceeding = (CALL_PROCEEDING_t *)(dmsg->data + headerlen); + /* channel information */ + if (p_state == PORT_STATE_IN_SETUP) + enc_ie_channel_id(&proceeding->CHANNEL_ID, dmsg, 1, p_m_b_channel); + /* progress information */ + if (p_capainfo.bearer_capa==INFO_BC_SPEECH + || p_capainfo.bearer_capa==INFO_BC_AUDIO + || p_capainfo.bearer_capa==INFO_BC_DATAUNRESTRICTED_TONES) + if (p_m_d_ntmode || options.inbandpattern) + enc_ie_progress(&proceeding->PROGRESS, dmsg, 0, p_m_d_ntmode?1:5, 8); + msg_queue_tail(&p_m_mISDNport->downqueue, dmsg); + + new_state(PORT_STATE_IN_PROCEEDING); +} + +/* MESSAGE_ALERTING */ +void Pdss1::message_alerting(unsigned long epoint_id, int message_id, union parameter *param) +{ + int headerlen = (p_m_d_ntmode)?mISDNUSER_HEAD_SIZE:mISDN_HEADER_LEN; + ALERTING_t *alerting; + msg_t *dmsg; + + /* NT-MODE in setup state we must send PROCEEDING first */ + if (p_m_d_ntmode && p_state==PORT_STATE_IN_SETUP) + { + CALL_PROCEEDING_t *proceeding; + + /* sending proceeding */ + dmsg = create_l3msg(CC_PROCEEDING | REQUEST, MT_CALL_PROCEEDING, p_m_d_l3id, sizeof(CALL_PROCEEDING_t), p_m_d_ntmode); + isdn_show_send_message(CC_PROCEEDING | REQUEST, dmsg); + proceeding = (CALL_PROCEEDING_t *)(dmsg->data + headerlen); + /* channel information */ + enc_ie_channel_id(&proceeding->CHANNEL_ID, dmsg, 1, p_m_b_channel); + /* progress information */ + if (p_capainfo.bearer_capa==INFO_BC_SPEECH + || p_capainfo.bearer_capa==INFO_BC_AUDIO + || p_capainfo.bearer_capa==INFO_BC_DATAUNRESTRICTED_TONES) + enc_ie_progress(&proceeding->PROGRESS, dmsg, 0, p_m_d_ntmode?1:5, 8); + msg_queue_tail(&p_m_mISDNport->downqueue, dmsg); + new_state(PORT_STATE_IN_PROCEEDING); + } + + /* sending alerting */ + dmsg = create_l3msg(CC_ALERTING | REQUEST, MT_ALERTING, p_m_d_l3id, sizeof(ALERTING_t), p_m_d_ntmode); + isdn_show_send_message(CC_ALERTING | REQUEST, dmsg); + alerting = (ALERTING_t *)(dmsg->data + headerlen); + /* channel information */ + if (p_state == PORT_STATE_IN_SETUP) + enc_ie_channel_id(&alerting->CHANNEL_ID, dmsg, 1, p_m_b_channel); + /* progress information */ + if (p_capainfo.bearer_capa==INFO_BC_SPEECH + || p_capainfo.bearer_capa==INFO_BC_AUDIO + || p_capainfo.bearer_capa==INFO_BC_DATAUNRESTRICTED_TONES) + if (p_m_d_ntmode || options.inbandpattern) + enc_ie_progress(&alerting->PROGRESS, dmsg, 0, p_m_d_ntmode?1:5, 8); + msg_queue_tail(&p_m_mISDNport->downqueue, dmsg); + + new_state(PORT_STATE_IN_ALERTING); +} + +/* MESSAGE_CONNECT */ +void Pdss1::message_connect(unsigned long epoint_id, int message_id, union parameter *param) +{ + int headerlen = (p_m_d_ntmode)?mISDNUSER_HEAD_SIZE:mISDN_HEADER_LEN; + INFORMATION_t *information; + CONNECT_t *connect; + int type, plan, present, screen; + msg_t *dmsg; + class Endpoint *epoint; + + /* NT-MODE in setup state we must send PROCEEDING first */ + if (p_m_d_ntmode && p_state==PORT_STATE_IN_SETUP) + { + CALL_PROCEEDING_t *proceeding; + + /* sending proceeding */ + dmsg = create_l3msg(CC_PROCEEDING | REQUEST, MT_CALL_PROCEEDING, p_m_d_l3id, sizeof(CALL_PROCEEDING_t), p_m_d_ntmode); + isdn_show_send_message(CC_PROCEEDING | REQUEST, dmsg); + proceeding = (CALL_PROCEEDING_t *)(dmsg->data + headerlen); + /* channel information */ + enc_ie_channel_id(&proceeding->CHANNEL_ID, dmsg, 1, p_m_b_channel); +// /* progress information */ +// if (p_capainfo.bearer_capa==INFO_BC_SPEECH +// || p_capainfo.bearer_capa==INFO_BC_AUDIO +// || p_capainfo.bearer_capa==INFO_BC_DATAUNRESTRICTED_TONES) +// enc_ie_progress(&proceeding->PROGRESS, dmsg, 0, p_m_d_ntmode?1:5, 8); + msg_queue_tail(&p_m_mISDNport->downqueue, dmsg); + new_state(PORT_STATE_IN_PROCEEDING); + } + + /* copy connected information */ + memcpy(&p_connectinfo, ¶m->connectinfo, sizeof(p_connectinfo)); + + /* only display at connect state */ + if (p_state == PORT_STATE_CONNECT) + if (p_connectinfo.display[0]) + { + /* sending information */ + dmsg = create_l3msg(CC_INFORMATION | REQUEST, MT_INFORMATION, p_m_d_l3id, sizeof(INFORMATION_t), p_m_d_ntmode); + isdn_show_send_message(CC_INFORMATION | REQUEST, dmsg); + information = (INFORMATION_t *)(dmsg->data + headerlen); + if (p_m_d_ntmode) + enc_ie_display(&information->DISPLAY, dmsg, (unsigned char *)p_connectinfo.display); + msg_queue_tail(&p_m_mISDNport->downqueue, dmsg); + return; + } + + if (p_state!=PORT_STATE_IN_SETUP && p_state!=PORT_STATE_IN_OVERLAP && p_state!=PORT_STATE_IN_PROCEEDING && p_state!=PORT_STATE_IN_ALERTING) + { + PDEBUG(DEBUG_ISDN, "Pdss1(%s) connect command only possible in setup, proceeding or alerting state.\n", p_name); + return; + } + + /* preparing connect message */ + dmsg = create_l3msg(CC_CONNECT | REQUEST, MT_CONNECT, p_m_d_l3id, sizeof(CONNECT_t), p_m_d_ntmode); + isdn_show_send_message(CC_CONNECT | REQUEST, dmsg); + connect = (CONNECT_t *)(dmsg->data + headerlen); + /* connect information */ + plan = 1; + switch (p_connectinfo.ntype) + { + case INFO_NTYPE_INTERNATIONAL: + type = 0x1; + break; + case INFO_NTYPE_NATIONAL: + type = 0x2; + break; + case INFO_NTYPE_SUBSCRIBER: + type = 0x4; + break; + default: /* INFO_NTYPE_UNKNOWN */ + type = 0x0; + break; + } + switch (param->connectinfo.screen) + { + case INFO_SCREEN_USER: + screen = 0; + break; + default: /* INFO_SCREE_NETWORK */ + screen = 3; + break; + } + switch (p_connectinfo.present) + { + case INFO_PRESENT_NULL: /* no colp at all */ + present = -1; + screen = -1; + plan = -1; + type = -1; + break; + case INFO_PRESENT_RESTRICTED: + present = 1; + break; + case INFO_PRESENT_NOTAVAIL: + present = 2; + break; + default: /* INFO_PRESENT_ALLOWED */ + present = 0; + break; + } + if (type >= 0) + enc_ie_connected_pn(&connect->CONNECT_PN, dmsg, type, plan, present, screen, (unsigned char *)p_connectinfo.id); + /* display */ + if (p_connectinfo.display[0] && p_m_d_ntmode) + enc_ie_display(&connect->DISPLAY, dmsg, (unsigned char *)p_connectinfo.display); +#ifdef CENTREX + /* nt-mode: CONP (connected name identification presentation) */ + if (p_connectinfo.name[0] && p_m_d_ntmode) + enc_facility_centrex(&connect->FACILITY, dmsg, (unsigned char *)p_connectinfo.name, 0); +#endif + /* date & time */ + if (p_m_d_ntmode) + { + epoint = find_epoint_id(epoint_id); + enc_ie_date(&connect->DATE, dmsg, now, p_settings.no_seconds); + } + /* finally send message */ + msg_queue_tail(&p_m_mISDNport->downqueue, dmsg); + + if (p_m_d_ntmode) + new_state(PORT_STATE_CONNECT); + else + new_state(PORT_STATE_CONNECT_WAITING); + set_tone("", NULL); +} + +/* MESSAGE_DISCONNECT */ +void Pdss1::message_disconnect(unsigned long epoint_id, int message_id, union parameter *param) +{ + int headerlen = (p_m_d_ntmode)?mISDNUSER_HEAD_SIZE:mISDN_HEADER_LEN; + DISCONNECT_t *disconnect; + RELEASE_COMPLETE_t *release_complete; + msg_t *dmsg; + struct message *message; + char *p = NULL; + + /* we reject during incoming setup when we have no inbandpatterns. also if we are in outgoing setup state */ + if ((!p_m_d_ntmode && p_state==PORT_STATE_IN_SETUP && !options.inbandpattern) + || p_state==PORT_STATE_OUT_SETUP) + { + /* sending release to endpoint */ + while(p_epointlist) + { + message = message_create(p_serial, p_epointlist->epoint_id, PORT_TO_EPOINT, MESSAGE_RELEASE); + message->param.disconnectinfo.cause = 16; + message->param.disconnectinfo.location = LOCATION_PRIVATE_LOCAL; + message_put(message); + /* remove epoint */ + free_epointlist(p_epointlist); + } + /* sending release */ + dmsg = create_l3msg(CC_RELEASE_COMPLETE | REQUEST, MT_RELEASE_COMPLETE, p_m_d_l3id, sizeof(RELEASE_COMPLETE_t), p_m_d_ntmode); + isdn_show_send_message(CC_RELEASE_COMPLETE | REQUEST, dmsg); + release_complete = (RELEASE_COMPLETE_t *)(dmsg->data + headerlen); + /* send cause */ + enc_ie_cause(&release_complete->CAUSE, dmsg, (p_m_d_ntmode && param->disconnectinfo.location==LOCATION_PRIVATE_LOCAL)?LOCATION_PRIVATE_LOCAL:param->disconnectinfo.location, param->disconnectinfo.cause); + new_state(PORT_STATE_RELEASE); + msg_queue_tail(&p_m_mISDNport->downqueue, dmsg); + p_m_delete = 1; + return; + } + + /* NT-MODE in setup state we must send PROCEEDING first */ + if (p_state==PORT_STATE_IN_SETUP) + { + CALL_PROCEEDING_t *proceeding; + + /* sending proceeding */ + dmsg = create_l3msg(CC_PROCEEDING | REQUEST, MT_CALL_PROCEEDING, p_m_d_l3id, sizeof(CALL_PROCEEDING_t), p_m_d_ntmode); + isdn_show_send_message(CC_PROCEEDING | REQUEST, dmsg); + proceeding = (CALL_PROCEEDING_t *)(dmsg->data + headerlen); + /* channel information */ + enc_ie_channel_id(&proceeding->CHANNEL_ID, dmsg, 1, p_m_b_channel); + /* progress information */ + if (p_capainfo.bearer_capa==INFO_BC_SPEECH + || p_capainfo.bearer_capa==INFO_BC_AUDIO + || p_capainfo.bearer_capa==INFO_BC_DATAUNRESTRICTED_TONES) + enc_ie_progress(&proceeding->PROGRESS, dmsg, 0, p_m_d_ntmode?1:5, 8); + msg_queue_tail(&p_m_mISDNport->downqueue, dmsg); + new_state(PORT_STATE_IN_PROCEEDING); + } + + /* sending disconnect */ + dmsg = create_l3msg(CC_DISCONNECT | REQUEST, MT_DISCONNECT, p_m_d_l3id, sizeof(DISCONNECT_t), p_m_d_ntmode); + isdn_show_send_message(CC_DISCONNECT | REQUEST, dmsg); + disconnect = (DISCONNECT_t *)(dmsg->data + headerlen); + /* progress information */ + if (p_capainfo.bearer_capa==INFO_BC_SPEECH + || p_capainfo.bearer_capa==INFO_BC_AUDIO + || p_capainfo.bearer_capa==INFO_BC_DATAUNRESTRICTED_TONES) + if (p_m_d_ntmode || options.inbandpattern) + enc_ie_progress(&disconnect->PROGRESS, dmsg, 0, p_m_d_ntmode?1:5, 8); + /* send cause */ + enc_ie_cause(&disconnect->CAUSE, dmsg, (p_m_d_ntmode && param->disconnectinfo.location==LOCATION_PRIVATE_LOCAL)?LOCATION_PRIVATE_LOCAL:param->disconnectinfo.location, param->disconnectinfo.cause); + /* send display */ + if (param->disconnectinfo.display[0]) + p = param->disconnectinfo.display; + if (p) if (*p && p_m_d_ntmode) + enc_ie_display(&disconnect->DISPLAY, dmsg, (unsigned char *)p); + new_state(PORT_STATE_OUT_DISCONNECT); + msg_queue_tail(&p_m_mISDNport->downqueue, dmsg); +} + +/* MESSAGE_RELEASE */ +void Pdss1::message_release(unsigned long epoint_id, int message_id, union parameter *param) +{ + int headerlen = (p_m_d_ntmode)?mISDNUSER_HEAD_SIZE:mISDN_HEADER_LEN; + RELEASE_t *release; + RELEASE_COMPLETE_t *release_complete; + DISCONNECT_t *disconnect; + msg_t *dmsg; + class Endpoint *epoint; + char *p = NULL; + + /* if we have incoming disconnected, we may release */ + if (p_state==PORT_STATE_IN_DISCONNECT + || p_state==PORT_STATE_OUT_DISCONNECT) + { + /* sending release */ + dmsg = create_l3msg(CC_RELEASE | REQUEST, MT_RELEASE, p_m_d_l3id, sizeof(RELEASE_t), p_m_d_ntmode); + isdn_show_send_message(CC_RELEASE | REQUEST, dmsg); + release = (RELEASE_t *)(dmsg->data + headerlen); + /* send cause */ + enc_ie_cause(&release->CAUSE, dmsg, (p_m_d_ntmode && param->disconnectinfo.location==LOCATION_PRIVATE_LOCAL)?LOCATION_PRIVATE_LOCAL:param->disconnectinfo.location, param->disconnectinfo.cause); + new_state(PORT_STATE_RELEASE); + msg_queue_tail(&p_m_mISDNport->downqueue, dmsg); + /* remove epoint */ + remove_endpoint: + free_epointid(epoint_id); + if (p_m_d_ntmode) + { + if ((p_m_d_l3id&0xff00) == 0xff00) + { + p_m_mISDNport->procids[p_m_d_l3id&0xff] = 0; + printisdn(" procid 0x%x freed\n", p_m_d_l3id&0xff); + } + } + p_m_d_l3id = 0; + p_m_delete = 1; + return; + } + /* if we are on outgoing/incoming call setup, we may release complete */ + if (p_state==PORT_STATE_OUT_SETUP + || p_state==PORT_STATE_IN_SETUP +// NOTE: a bug in mISDNuser (see disconnect_req_out !!!) + || p_state==PORT_STATE_OUT_PROCEEDING) + { + /* sending release */ + dmsg = create_l3msg(CC_RELEASE_COMPLETE | REQUEST, MT_RELEASE_COMPLETE, p_m_d_l3id, sizeof(RELEASE_COMPLETE_t), p_m_d_ntmode); + isdn_show_send_message(CC_RELEASE_COMPLETE | REQUEST, dmsg); + release_complete = (RELEASE_COMPLETE_t *)(dmsg->data + headerlen); + /* send cause */ + enc_ie_cause(&release_complete->CAUSE, dmsg, (p_m_d_ntmode && param->disconnectinfo.location==LOCATION_PRIVATE_LOCAL)?LOCATION_PRIVATE_LOCAL:param->disconnectinfo.location, param->disconnectinfo.cause); + new_state(PORT_STATE_RELEASE); + msg_queue_tail(&p_m_mISDNport->downqueue, dmsg); + goto remove_endpoint; + } + + /* NT-MODE in setup state we must send PROCEEDING first */ + if (p_m_d_ntmode && p_state==PORT_STATE_IN_SETUP) + { + CALL_PROCEEDING_t *proceeding; + + /* sending proceeding */ + dmsg = create_l3msg(CC_PROCEEDING | REQUEST, MT_CALL_PROCEEDING, p_m_d_l3id, sizeof(CALL_PROCEEDING_t), p_m_d_ntmode); + proceeding = (CALL_PROCEEDING_t *)(dmsg->data + headerlen); + /* channel information */ + enc_ie_channel_id(&proceeding->CHANNEL_ID, dmsg, 1, p_m_b_channel); + /* progress information */ + if (p_capainfo.bearer_capa==INFO_BC_SPEECH + || p_capainfo.bearer_capa==INFO_BC_AUDIO + || p_capainfo.bearer_capa==INFO_BC_DATAUNRESTRICTED_TONES) + enc_ie_progress(&proceeding->PROGRESS, dmsg, 0, p_m_d_ntmode?1:5, 8); + msg_queue_tail(&p_m_mISDNport->downqueue, dmsg); + } + + /* sending disconnect */ + dmsg = create_l3msg(CC_DISCONNECT | REQUEST, MT_DISCONNECT, p_m_d_l3id, sizeof(DISCONNECT_t), p_m_d_ntmode); + isdn_show_send_message(CC_DISCONNECT | REQUEST, dmsg); + disconnect = (DISCONNECT_t *)(dmsg->data + headerlen); + /* progress information */ + if (p_capainfo.bearer_capa==INFO_BC_SPEECH + || p_capainfo.bearer_capa==INFO_BC_AUDIO + || p_capainfo.bearer_capa==INFO_BC_DATAUNRESTRICTED_TONES) + if (p_m_d_ntmode || options.inbandpattern) + enc_ie_progress(&disconnect->PROGRESS, dmsg, 0, p_m_d_ntmode?1:5, 8); + /* send cause */ + enc_ie_cause(&disconnect->CAUSE, dmsg, (p_m_d_ntmode && param->disconnectinfo.location==LOCATION_PRIVATE_LOCAL)?LOCATION_PRIVATE_LOCAL:param->disconnectinfo.location, param->disconnectinfo.cause); + /* send display */ + epoint = find_epoint_id(epoint_id); + if (param->disconnectinfo.display[0]) + p = param->disconnectinfo.display; + if (p) if (*p && p_m_d_ntmode) + enc_ie_display(&disconnect->DISPLAY, dmsg, (unsigned char *)p); +#if 0 + /* sending release */ + dmsg = create_l3msg(CC_RELEASE | REQUEST, MT_RELEASE, p_m_d_l3id, sizeof(RELEASE_t), p_m_d_ntmode); + isdn_show_send_message(CC_RELEASE | REQUEST, dmsg); + release = (RELEASE_t *)(dmsg->data + headerlen); + /* send cause */ + enc_ie_cause(&release->CAUSE, dmsg, (p_m_d_ntmode && param->disconnectinfo.location==LOCATION_PRIVATE_LOCAL)?LOCATION_PRIVATE_LOCAL:param->disconnectinfo.location, param->disconnectinfo.cause); +#endif + new_state(PORT_STATE_RELEASE); + msg_queue_tail(&p_m_mISDNport->downqueue, dmsg); + free_epointid(epoint_id); +// p_m_delete = 1; +} + + +/* + * endpoint sends messages to the port + */ +int Pdss1::message_epoint(unsigned long epoint_id, int message_id, union parameter *param) +{ + struct message *message; + + if (PmISDN::message_epoint(epoint_id, message_id, param)) + return(1); + + switch(message_id) + { + case MESSAGE_INFORMATION: /* overlap dialing */ + PDEBUG(DEBUG_ISDN, "Pdss1(%s) received dialing info '%s'.\n", p_name, param->information.number); + if (p_type==PORT_TYPE_DSS1_NT_OUT + && p_state!=PORT_STATE_OUT_OVERLAP + && p_state!=PORT_STATE_CONNECT + && p_state!=PORT_STATE_OUT_DISCONNECT + && p_state!=PORT_STATE_IN_DISCONNECT) + { + PDEBUG(DEBUG_ISDN, "Pdss1(%s) (internal outgoing) ignoring information, invalid state.\n", p_name); + break; + } + if (p_type==PORT_TYPE_DSS1_TE_OUT + && p_state!=PORT_STATE_OUT_OVERLAP + && p_state!=PORT_STATE_OUT_PROCEEDING + && p_state!=PORT_STATE_OUT_ALERTING + && p_state!=PORT_STATE_CONNECT + && p_state!=PORT_STATE_OUT_DISCONNECT + && p_state!=PORT_STATE_IN_DISCONNECT) + { + if (options.deb & DEBUG_ISDN) + PERROR("Pdss1(%s) (external outgoing) ignoring information, invalid state.\n", p_name); + break; + } + if ((p_type==PORT_TYPE_DSS1_NT_IN || p_type==PORT_TYPE_DSS1_TE_IN) + && p_state!=PORT_STATE_IN_OVERLAP + && p_state!=PORT_STATE_IN_PROCEEDING + && p_state!=PORT_STATE_IN_ALERTING + && p_state!=PORT_STATE_CONNECT + && p_state!=PORT_STATE_CONNECT_WAITING + && p_state!=PORT_STATE_OUT_DISCONNECT + && p_state!=PORT_STATE_IN_DISCONNECT) + { + PDEBUG(DEBUG_ISDN, "Pdss1(%s) (incoming) ignoring information, invalid state.\n", p_name); + break; + } + message_information(epoint_id, message_id, param); + break; + + case MESSAGE_SETUP: /* dial-out command received from epoint */ + PDEBUG((DEBUG_ISDN | DEBUG_BCHANNEL), "Pdss1(%s) isdn port received setup from '%s' to '%s'\n", p_name, param->setup.callerinfo.id, param->setup.dialinginfo.number); + if (p_state!=PORT_STATE_IDLE + && p_state!=PORT_STATE_CONNECT) + { + PERROR("Pdss1(%s) ignoring setup because isdn port is not in idle state (or connected for sending display info).\n", p_name); + break; + } + if (p_epointlist && p_state==PORT_STATE_IDLE) + { + PERROR("Pdss1(%s): software error: epoint pointer is set in idle state, how bad!! exitting.\n", p_name); + exit(-1); + } + /* note: pri is a special case, because links must be up for pri */ + if (p_m_mISDNport->l1link || p_m_mISDNport->pri || !p_m_mISDNport->ntmode || p_state!=PORT_STATE_IDLE) + { + /* LAYER 1 is up, or we may send */ + message_setup(epoint_id, message_id, param); + } else { + iframe_t act; + /* LAYER 1 id down, so we queue */ + p_m_d_queue = message_create(epoint_id, p_serial, EPOINT_TO_PORT, message_id); + memcpy(&p_m_d_queue->param, param, sizeof(union parameter)); + /* attach us */ + if (!(epointlist_new(epoint_id))) + { + PERROR("no memory for epointlist\n"); + exit(-1); + } + /* activate link */ + PDEBUG(DEBUG_ISDN, "the L1 is down, we try to establish the link NT portnum=%d (%s).\n", p_m_mISDNport->portnum, p_name); + act.prim = PH_ACTIVATE | REQUEST; + act.addr = p_m_mISDNport->upper_id | FLG_MSG_DOWN; + act.dinfo = 0; + act.len = 0; + mISDN_write(mISDNdevice, &act, mISDN_HEADER_LEN+act.len, TIMEOUT_1SEC); +// /* set timeout */ +// p_m_mISDNport->l1timeout = now+3; + } + break; + + case MESSAGE_NOTIFY: /* display and notifications */ + PDEBUG(DEBUG_ISDN, "Pdss1(%s) isdn port with (caller id %s) received notification: display='%s' notify=%d phone=%s\n", p_name, p_callerinfo.id, param->notifyinfo.display, param->notifyinfo.notify, param->notifyinfo.id); + message_notify(epoint_id, message_id, param); + break; + + case MESSAGE_FACILITY: /* facility message */ + PDEBUG(DEBUG_ISDN, "Pdss1(%s) isdn port with (caller id %s) received facility.\n", p_name, p_callerinfo.id); + message_facility(epoint_id, message_id, param); + break; + + case MESSAGE_OVERLAP: /* more information is needed */ + PDEBUG(DEBUG_ISDN, "Pdss1(%s) isdn port with (caller id %s) received setup acknowledge\n", p_name, p_callerinfo.id); + if (p_state!=PORT_STATE_IN_SETUP) + { + PDEBUG(DEBUG_ISDN, "Pdss1(%s) ignoring setup acknowledge because isdn port is not incoming setup state.\n", p_name); + break; + } + message_overlap(epoint_id, message_id, param); + break; + + case MESSAGE_PROCEEDING: /* call of endpoint is proceeding */ + PDEBUG(DEBUG_ISDN, "Pdss1(%s) isdn port with (caller id %s) received proceeding\n", p_name, p_callerinfo.id); + if (p_state!=PORT_STATE_IN_SETUP + && p_state!=PORT_STATE_IN_OVERLAP) + { + PDEBUG(DEBUG_ISDN, "Pdss1(%s) ignoring: proceeding command not possible in current state.\n", p_name); + break; + } + message_proceeding(epoint_id, message_id, param); + break; + + case MESSAGE_ALERTING: /* call of endpoint is ringing */ + PDEBUG(DEBUG_ISDN, "Pdss1(%s) isdn port with (caller id %s) received alerting\n", p_name, p_callerinfo.id); + if (p_state!=PORT_STATE_IN_SETUP + && p_state!=PORT_STATE_IN_OVERLAP + && p_state!=PORT_STATE_IN_PROCEEDING) + { + PDEBUG(DEBUG_ISDN, "Pdss1(%s) ignoring: alerting command not possible in current state.\n", p_name); + break; + } + message_alerting(epoint_id, message_id, param); + break; + + case MESSAGE_CONNECT: /* call of endpoint is connected */ + PDEBUG(DEBUG_ISDN, "Pdss1(%s) isdn port with (caller id %s) received connect\n", p_name, p_callerinfo.id); + if (p_state!=PORT_STATE_IN_SETUP + && p_state!=PORT_STATE_IN_OVERLAP + && p_state!=PORT_STATE_IN_PROCEEDING + && p_state!=PORT_STATE_IN_ALERTING + && !(p_state==PORT_STATE_CONNECT && p_m_d_ntmode)) + { + PDEBUG(DEBUG_ISDN, "Pdss1(%s) ignoring: connect command not possible in current state.\n", p_name); + break; + } + message_connect(epoint_id, message_id, param); + break; + + case MESSAGE_DISCONNECT: /* call has been disconnected */ + PDEBUG(DEBUG_ISDN, "Pdss1(%s) isdn port with (caller id %s) received disconnect cause=%d\n", p_name, p_callerinfo.id, param->disconnectinfo.cause); + if (p_state!=PORT_STATE_IN_SETUP + && p_state!=PORT_STATE_IN_OVERLAP + && p_state!=PORT_STATE_IN_PROCEEDING + && p_state!=PORT_STATE_IN_ALERTING + && p_state!=PORT_STATE_OUT_SETUP + && p_state!=PORT_STATE_OUT_OVERLAP + && p_state!=PORT_STATE_OUT_PROCEEDING + && p_state!=PORT_STATE_OUT_ALERTING + && p_state!=PORT_STATE_CONNECT + && p_state!=PORT_STATE_CONNECT_WAITING) + { + PDEBUG(DEBUG_ISDN, "Pdss1(%s) ignoring: disconnect command not possible in current state.\n", p_name); + break; + } + message_disconnect(epoint_id, message_id, param); + break; + + case MESSAGE_RELEASE: /* release isdn port */ + PDEBUG(DEBUG_ISDN, "Pdss1(%s) isdn port with (caller id %s) received release cause=%d\n", p_name, p_callerinfo.id, param->disconnectinfo.cause); + if (p_state==PORT_STATE_RELEASE) + { + PDEBUG(DEBUG_ISDN, "Pdss1(%s) ignoring: release command not possible in RELEASE state.\n", p_name); + break; + } + message_release(epoint_id, message_id, param); + break; + + default: + PDEBUG(DEBUG_ISDN, "Pdss1(%s) isdn port with (caller id %s) received a wrong message: %d\n", p_name, p_callerinfo.id, message); + } + + return(1); +} + + + +/* + * data from isdn-stack (layer-3) to pbx (port class) + */ +/* NOTE: nt mode use mISDNuser_head_t as header */ +int stack2manager_nt(void *dat, void *arg) +{ + class Port *port; + class Pdss1 *pdss1; + manager_t *mgr = (manager_t *)dat; + msg_t *msg = (msg_t *)arg; + mISDNuser_head_t *hh; + struct mISDNport *mISDNport; + char name[32]; + + if (!msg || !mgr) + return(-EINVAL); + + /* note: nst is the first data feld of mISDNport */ + mISDNport = (struct mISDNport *)mgr->nst; + + hh = (mISDNuser_head_t *)msg->data; + PDEBUG(DEBUG_ISDN, "prim(0x%x) dinfo(0x%x) msg->len(%d)\n", hh->prim, hh->dinfo, msg->len); + + /* find Port object of type ISDN */ + port = port_first; + while(port) + { + if (port->p_type == PORT_TYPE_DSS1_NT_IN || port->p_type == PORT_TYPE_DSS1_NT_OUT) + { + pdss1 = (class Pdss1 *)port; +//PDEBUG(DEBUG_ISDN, "comparing dinfo = 0x%x with l3id 0x%x\n", hh->dinfo, pdss1->p_m_d_l3id); + /* check out correct stack */ + if (pdss1->p_m_mISDNport == mISDNport) + /* check out correct id */ + if ((hh->dinfo&0xffff0000) == (pdss1->p_m_d_l3id&0xffff0000)) + { + /* found port, the message belongs to */ + break; + } + } + port = port->next; + } + if (port) + { + /* if process id is master process, but a child disconnects */ + if ((hh->dinfo&0x0000ff00)!=0x0000ff00 && (pdss1->p_m_d_l3id&0x0000ff00)==0x0000ff00 && hh->prim==(CC_DISCONNECT|INDICATION)) + { + /* send special indication for child disconnect */ + pdss1->disconnect_ind_i(hh->prim, hh->dinfo, msg->data); + free_msg(msg); + return(0); + } + /* if process id and layer 3 id matches */ + if (hh->dinfo == pdss1->p_m_d_l3id) + { + pdss1->message_isdn(hh->prim, hh->dinfo, msg->data); + free_msg(msg); + return(0); + } + } + + /* d-message */ + switch(hh->prim) + { + case MGR_SHORTSTATUS | INDICATION: + case MGR_SHORTSTATUS | CONFIRM: + switch(hh->dinfo) { + case SSTATUS_L2_ESTABLISHED: + goto ss_estab; + case SSTATUS_L2_RELEASED: + goto ss_rel; + } + break; + + case DL_ESTABLISH | INDICATION: + case DL_ESTABLISH | CONFIRM: + ss_estab: + PDEBUG(DEBUG_ISDN, "establish data link (DL) NT portnum=%d TEI=%d\n", mISDNport->portnum, hh->dinfo); + if (mISDNport->ptp && hh->dinfo == 0) + { + if (mISDNport->l2establish) + { + mISDNport->l2establish = 0; + PDEBUG(DEBUG_ISDN, "the link became active before l2establish timer expiry.\n"); + } + mISDNport->l2link = 1; + if (mISDNport->pri); + mISDNport->l1link = 1; /* this is a hack, we also assume L1 to be active */ + } + break; + + case DL_RELEASE | INDICATION: + case DL_RELEASE | CONFIRM: + ss_rel: + PDEBUG(DEBUG_ISDN, "release data link (DL) NT portnum=%d TEI=%d\n", mISDNport->portnum, hh->dinfo); + if (mISDNport->ptp && hh->dinfo == 0) + { + mISDNport->l2link = 0; + time(&mISDNport->l2establish); + PDEBUG(DEBUG_ISDN, "because we are ptp, we set a l2establish timer.\n"); + } + break; + + case CC_SETUP | INDICATION: + /* creating port object */ + SPRINT(name, "%s-%d-in", mISDNport->ifport->interface->name, mISDNport->portnum); + if (!(pdss1 = new Pdss1(PORT_TYPE_DSS1_NT_IN, mISDNport, name, NULL, 0, 0))) + { + RELEASE_COMPLETE_t *release_complete; + msg_t *dmsg; + + fprintf(stderr, "FATAL ERROR: cannot create port object.\n"); + dmsg = create_l3msg(CC_RELEASE_COMPLETE | REQUEST, MT_RELEASE_COMPLETE, hh->dinfo, sizeof(RELEASE_COMPLETE_t), mISDNport->ntmode); + release_complete = (RELEASE_COMPLETE_t *)(dmsg->data + mISDN_HEADER_LEN); + enc_ie_cause_standalone(mISDNport->ntmode?&release_complete->CAUSE:NULL, dmsg, (mISDNport->ntmode)?LOCATION_PRIVATE_LOCAL:LOCATION_PRIVATE_REMOTE, 47); + msg_queue_tail(&mISDNport->downqueue, dmsg); + break; + } + pdss1->message_isdn(hh->prim, hh->dinfo, msg->data); + break; + + case CC_RESUME | INDICATION: + /* creating port object */ + SPRINT(name, "%s-%d-in", mISDNport->ifport->interface->name, mISDNport->portnum); + if (!(pdss1 = new Pdss1(PORT_TYPE_DSS1_NT_IN, mISDNport, name, NULL))) + { + SUSPEND_REJECT_t *suspend_reject; + msg_t *dmsg; + + fprintf(stderr, "FATAL ERROR: cannot create port object.\n"); + dmsg = create_l3msg(CC_SUSPEND_REJECT | REQUEST, MT_SUSPEND_REJECT, hh->dinfo, sizeof(SUSPEND_REJECT_t), mISDNport->ntmode); + suspend_reject = (SUSPEND_REJECT_t *)(dmsg->data + mISDN_HEADER_LEN); + enc_ie_cause_standalone(mISDNport->ntmode?&suspend_reject->CAUSE:NULL, dmsg, (mISDNport->ntmode)?1:0, 47); + msg_queue_tail(&mISDNport->downqueue, dmsg); + break; + } + pdss1->message_isdn(hh->prim, hh->dinfo, msg->data); + break; + + case CC_RELEASE_CR | INDICATION: + PDEBUG(DEBUG_ISDN, "%s: unhandled message from stack: call ref released (l3id=0x%x)\n", __FUNCTION__, hh->dinfo); + break; + + case CC_DISCONNECT | INDICATION: + + // fall throug + default: + PDEBUG(DEBUG_ISDN, "%s: unhandled message: prim(0x%x) dinfo(0x%x) msg->len(%d)\n", __FUNCTION__, hh->prim, hh->dinfo, msg->len); + return(-EINVAL); + } + free_msg(msg); + return(0); +} + +/* NOTE: te mode use iframe_t as header */ +int stack2manager_te(struct mISDNport *mISDNport, msg_t *msg) +{ + class Port *port; + class Pdss1 *pdss1; + iframe_t *frm; + char name[32]; + + if (!msg || !mISDNport) + return(-EINVAL); + frm = (iframe_t *)msg->data; + PDEBUG(DEBUG_ISDN, "prim(0x%x) dinfo(0x%x) msg->len(%d)\n", frm->prim, frm->dinfo, msg->len); + + /* find Port object of type ISDN */ + port = port_first; + while(port) + { + if (port->p_type == PORT_TYPE_DSS1_TE_IN || port->p_type == PORT_TYPE_DSS1_TE_OUT) + { + pdss1 = (class Pdss1 *)port; +//PDEBUG(DEBUG_ISDN, "comparing dinfo = 0x%x with l3id 0x%x\n", frm->dinfo, pdss1->p_m_d_l3id); + /* check out correct stack */ + if (pdss1->p_m_mISDNport == mISDNport) + /* check out correct id */ + if (frm->dinfo == pdss1->p_m_d_l3id) + { + /* found port, the message belongs to */ + break; + } + } + port = port->next; + } + if (port) + { + pdss1->message_isdn(frm->prim, frm->dinfo, msg->data); + free_msg(msg); + return(0); + } + + /* process new cr (before setup indication) */ +//printf("prim = 0x%x, looking for 0x%x\n",frm->prim, (CC_NEW_CR | INDICATION)); + if (frm->prim == (CC_NEW_CR | INDICATION)) + { + + /* creating port object */ + SPRINT(name, "%s-%d-in", mISDNport->ifport->interface->name, mISDNport->portnum); + if (!(pdss1 = new Pdss1(PORT_TYPE_DSS1_TE_IN, mISDNport, name, NULL))) + { + RELEASE_COMPLETE_t *release_complete; + msg_t *dmsg; + + fprintf(stderr, "FATAL ERROR: cannot create port object.\n"); + dmsg = create_l3msg(CC_RELEASE_COMPLETE | REQUEST, MT_RELEASE_COMPLETE, frm->dinfo, sizeof(RELEASE_COMPLETE_t), mISDNport->ntmode); + release_complete = (RELEASE_COMPLETE_t *)(dmsg->data + mISDN_HEADER_LEN); + enc_ie_cause_standalone(mISDNport->ntmode?&release_complete->CAUSE:NULL, dmsg, (mISDNport->ntmode)?LOCATION_PRIVATE_LOCAL:LOCATION_PRIVATE_REMOTE, 47); + msg_queue_tail(&mISDNport->downqueue, dmsg); + free_msg(msg); + return(0); + } + /* l3id will be set from dinfo at message_isdn */ + pdss1->message_isdn(frm->prim, frm->dinfo, msg->data); + free_msg(msg); + return(0); + } + + if (frm->prim == (CC_RELEASE_CR | INDICATION)) + { + PDEBUG(DEBUG_ISDN, "unhandled message from stack: call ref released (l3id=0x%x)\n", frm->dinfo); + free_msg(msg); + return(0); + } + PDEBUG(DEBUG_ISDN, "unhandled message: prim(0x%x) dinfo(0x%x) msg->len(%d)\n", frm->prim, frm->dinfo, msg->len); + return(-EINVAL); +} + + +/* + * sending message that were queued during L1 activation + * or releasing port if link is down + */ +void setup_queue(struct mISDNport *mISDNport, int link) +{ + class Port *port; + class Pdss1 *pdss1; + struct message *message; + + if (!mISDNport->ntmode) + return; + + /* check all port objects for pending message */ + port = port_first; + while(port) + { + if ((port->p_type&PORT_CLASS_mISDN_MASK) == PORT_CLASS_mISDN_DSS1) + { + pdss1 = (class Pdss1 *)port; + if (pdss1->p_m_mISDNport == mISDNport) + { + if (pdss1->p_m_d_queue) + { + if (link) + { + PDEBUG(DEBUG_ISDN, "the L1 became active, so we send queued message for portnum=%d (%s).\n", mISDNport->portnum, pdss1->p_name); + /* LAYER 1 is up, so we send */ + pdss1->message_setup(pdss1->p_m_d_queue->id_from, pdss1->p_m_d_queue->type, &pdss1->p_m_d_queue->param); + message_free(pdss1->p_m_d_queue); + pdss1->p_m_d_queue = NULL; + } else + { + PDEBUG(DEBUG_ISDN, "the L1 became NOT active, so we release port for portnum=%d (%s).\n", mISDNport->portnum, pdss1->p_name); + message = message_create(pdss1->p_serial, pdss1->p_m_d_queue->id_from, PORT_TO_EPOINT, MESSAGE_RELEASE); + message->param.disconnectinfo.cause = 27; + message->param.disconnectinfo.location = LOCATION_PRIVATE_LOCAL; + message_put(message); + pdss1->new_state(PORT_STATE_RELEASE); + pdss1->p_m_delete = 1; + } + } + } + } + port = port->next; + } +} + + + + + diff --git a/dss1.h b/dss1.h new file mode 100644 index 0000000..d8ffe49 --- /dev/null +++ b/dss1.h @@ -0,0 +1,103 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** dss1-port header file ** +** ** +\*****************************************************************************/ + +/* DSS1 port classes */ +class Pdss1 : public PmISDN +{ + public: + Pdss1(int type, struct mISDNport *mISDNport, char *portname, struct port_settings *settings, int channel); + ~Pdss1(); + int p_m_d_l3id; /* current l3 process id */ + int p_m_d_ces; /* ntmode: tei&sapi */ + int handler(void); + int message_epoint(unsigned long epoint_id, int message, union parameter *param); + void message_isdn(unsigned long prim, unsigned long dinfo, void *data); + + int p_m_d_ntmode; /* flags the nt-mode */ + struct message *p_m_d_queue; /* queue for SETUP if link is down */ + struct message *p_m_d_notify_pending; /* queue for NOTIFY if not connected */ + + int p_m_d_collect_cause; /* collecting cause and location */ + int p_m_d_collect_location; + + void new_state(int state); /* set new state */ + void isdn_show_send_message(unsigned long prim, msg_t *msg); + int received_first_reply_to_setup(unsigned long prim, int exclusive, int channel); + void information_ind(unsigned long prim, unsigned long dinfo, void *data); + void setup_ind(unsigned long prim, unsigned long dinfo, void *data); + void setup_acknowledge_ind(unsigned long prim, unsigned long dinfo, void *data); + void proceeding_ind(unsigned long prim, unsigned long dinfo, void *data); + void alerting_ind(unsigned long prim, unsigned long dinfo, void *data); + void connect_ind(unsigned long prim, unsigned long dinfo, void *data); + void disconnect_ind(unsigned long prim, unsigned long dinfo, void *data); + void release_ind(unsigned long prim, unsigned long dinfo, void *data); + void release_complete_ind(unsigned long prim, unsigned long dinfo, void *data); + void disconnect_ind_i(unsigned long prim, unsigned long dinfo, void *data); + void t312_timeout(unsigned long prim, unsigned long dinfo, void *data); + void notify_ind(unsigned long prim, unsigned long dinfo, void *data); + void facility_ind(unsigned long prim, unsigned long dinfo, void *data); + void hold_ind(unsigned long prim, unsigned long dinfo, void *data); + void retrieve_ind(unsigned long prim, unsigned long dinfo, void *data); + void suspend_ind(unsigned long prim, unsigned long dinfo, void *data); + void resume_ind(unsigned long prim, unsigned long dinfo, void *data); + void message_information(unsigned long epoint_id, int message_id, union parameter *param); + void message_setup(unsigned long epoint_id, int message_id, union parameter *param); + void message_notify(unsigned long epoint_id, int message_id, union parameter *param); + void message_facility(unsigned long epoint_id, int message_id, union parameter *param); + void message_overlap(unsigned long epoint_id, int message_id, union parameter *param); + void message_proceeding(unsigned long epoint_id, int message_id, union parameter *param); + void message_alerting(unsigned long epoint_id, int message_id, union parameter *param); + void message_connect(unsigned long epoint_id, int message_id, union parameter *param); + void message_disconnect(unsigned long epoint_id, int message_id, union parameter *param); + void message_release(unsigned long epoint_id, int message_id, union parameter *param); + + /* IE conversion */ + void enc_ie_complete(unsigned char **ntmode, msg_t *msg, int complete); + void dec_ie_complete(unsigned char *p, Q931_info_t *qi, int *complete); + void enc_ie_bearer(unsigned char **ntmode, msg_t *msg, int coding, int capability, int mode, int rate, int multi, int user); + void dec_ie_bearer(unsigned char *p, Q931_info_t *qi, int *coding, int *capability, int *mode, int *rate, int *multi, int *user); + void enc_ie_call_id(unsigned char **ntmode, msg_t *msg, unsigned char *callid, int callid_len); + void dec_ie_call_id(unsigned char *p, Q931_info_t *qi, unsigned char *callid, int *callid_len); + void enc_ie_called_pn(unsigned char **ntmode, msg_t *msg, int type, int plan, unsigned char *number); + void dec_ie_called_pn(unsigned char *p, Q931_info_t *qi, int *type, int *plan, unsigned char *number, int number_len); + void enc_ie_calling_pn(unsigned char **ntmode, msg_t *msg, int type, int plan, int present, int screen, unsigned char *number); + void dec_ie_calling_pn(unsigned char *p, Q931_info_t *qi, int *type, int *plan, int *present, int *screen, unsigned char *number, int number_len); + void enc_ie_connected_pn(unsigned char **ntmode, msg_t *msg, int type, int plan, int present, int screen, unsigned char *number); + void dec_ie_connected_pn(unsigned char *p, Q931_info_t *qi, int *type, int *plan, int *present, int *screen, unsigned char *number, int number_len); + void enc_ie_cause(unsigned char **ntmode, msg_t *msg, int location, int cause); + void dec_ie_cause(unsigned char *p, Q931_info_t *qi, int *location, int *cause); + void enc_ie_channel_id(unsigned char **ntmode, msg_t *msg, int exclusive, int channel); + void dec_ie_channel_id(unsigned char *p, Q931_info_t *qi, int *exclusive, int *channel); + void enc_ie_date(unsigned char **ntmode, msg_t *msg, time_t ti, int seconds); + void enc_ie_display(unsigned char **ntmode, msg_t *msg, unsigned char *display); + void dec_ie_display(unsigned char *p, Q931_info_t *qi, unsigned char *display, int display_len); + void enc_ie_keypad(unsigned char **ntmode, msg_t *msg, unsigned char *keypad); + void dec_ie_keypad(unsigned char *p, Q931_info_t *qi, unsigned char *keypad, int keypad_len); + void enc_ie_notify(unsigned char **ntmode, msg_t *msg, int notify); + void dec_ie_notify(unsigned char *p, Q931_info_t *qi, int *notify); + void enc_ie_progress(unsigned char **ntmode, msg_t *msg, int coding, int location, int progress); + void dec_ie_progress(unsigned char *p, Q931_info_t *qi, int *coding, int *location, int *progress); + void enc_ie_hlc(unsigned char **ntmode, msg_t *msg, int coding, int interpretation, int presentation, int hlc, int exthlc); + void dec_ie_hlc(unsigned char *p, Q931_info_t *qi, int *coding, int *interpretation, int *presentation, int *hlc, int *exthlc); + void enc_ie_redir_nr(unsigned char **ntmode, msg_t *msg, int type, int plan, int present, int screen, int reason, unsigned char *number); + void dec_ie_redir_nr(unsigned char *p, Q931_info_t *qi, int *type, int *plan, int *present, int *screen, int *reason, unsigned char *number, int number_len); + void enc_ie_redir_dn(unsigned char **ntmode, msg_t *msg, int type, int plan, int present, unsigned char *number); + void dec_ie_redir_dn(unsigned char *p, Q931_info_t *qi, int *type, int *plan, int *present, unsigned char *number, int number_len); + void enc_ie_facility(unsigned char **ntmode, msg_t *msg, unsigned char *facility, int facility_len); + void dec_ie_facility(unsigned char *p, Q931_info_t *qi, unsigned char *facility, int *facility_len); + void enc_facility_centrex(unsigned char **ntmode, msg_t *msg, unsigned char *cnip, int setup); + void dec_facility_centrex(unsigned char *p, Q931_info_t *qi, unsigned char *cnip, int cnip_len); + void enc_ie_useruser(unsigned char **ntmode, msg_t *msg, int protocol, unsigned char *user, int user_len); + void dec_ie_useruser(unsigned char *p, Q931_info_t *qi, int *protocol, unsigned char *user, int *user_len); + +}; + + diff --git a/endpoint.cpp b/endpoint.cpp new file mode 100644 index 0000000..3f67f41 --- /dev/null +++ b/endpoint.cpp @@ -0,0 +1,219 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** The Endpoint is the link between the call and the port. ** +** ** +\*****************************************************************************/ + +#include +#include "main.h" + +unsigned long epoint_serial = 1; /* initial value must be 1, because 0== no epoint */ + +class Endpoint *epoint_first = NULL; + + +/* + * find the epoint with epoint_id + */ +class Endpoint *find_epoint_id(unsigned long epoint_id) +{ + class Endpoint *epoint = epoint_first; + + while(epoint) + { +//printf("comparing: '%s' with '%s'\n", name, epoint->name); + if (epoint->ep_serial == epoint_id) + return(epoint); + epoint = epoint->next; + } + + return(NULL); +} + + +/* + * endpoint constructor (link with either port or call id) + */ +Endpoint::Endpoint(int port_id, int call_id) +{ + class Port *port; + class Endpoint **epointpointer; + + /* epoint structure */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d): Allocating enpoint %d and connecting it with:%s%s\n", epoint_serial, epoint_serial, (port_id)?" ioport":"", (call_id)?" call":""); + + ep_portlist = NULL; + ep_app = NULL; + ep_use = 1; + + /* add endpoint to chain */ + next = NULL; + epointpointer = &epoint_first; + while(*epointpointer) + epointpointer = &((*epointpointer)->next); + *epointpointer = this; + + /* serial */ + ep_serial = epoint_serial++; + + /* link to call or port */ + if (port_id) + { + port = find_port_id(port_id); + if (port) + if (!portlist_new(port_id, port->p_type)) + { + PERROR("no mem for portlist, exitting...\n"); + exit(-1); + } + } + ep_call_id = call_id; + + ep_park = 0; + ep_park_len = 0; + + classuse++; +} + + +/* + * endpoint destructor + */ +Endpoint::~Endpoint(void) +{ + class Endpoint *temp, **tempp; + struct port_list *portlist, *mtemp; + + classuse--; + + /* remote application */ + if (ep_app) + delete ep_app; + + /* free relations */ + if (ep_call_id) + { + PERROR("warning: still relation to call.\n"); + } + + /* free portlist */ + portlist = ep_portlist; + while(portlist) + { + if (portlist->port_id) + { + PERROR("warning: still relation to port (portlist list)\n"); + } + mtemp = portlist; + portlist = portlist->next; + memset(mtemp, 0, sizeof(struct port_list)); + free(mtemp); + ememuse--; + } + + /* detach */ + temp =epoint_first; + tempp = &epoint_first; + while(temp) + { + if (temp == this) + break; + + tempp = &temp->next; + temp = temp->next; + } + if (temp == 0) + { + PERROR("error: endpoint not in endpoint's list, exitting.\n"); + exit(-1); + } + *tempp = next; + + /* free */ + PDEBUG(DEBUG_EPOINT, "removed endpoint %d.\n", ep_serial); +} + +/* create new portlist relation + */ +struct port_list *Endpoint::portlist_new(unsigned long port_id, int port_type) +{ + struct port_list *portlist, **portlistpointer; + + /* portlist structure */ + portlist = (struct port_list *)calloc(1, sizeof(struct port_list)); + if (!portlist) + { + PERROR("no mem for allocating port_list\n"); + return(0); + } + ememuse++; + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) allocating port_list.\n", ep_serial); + memset(portlist, 0, sizeof(struct port_list)); + + /* add port_list to chain */ + portlist->next = NULL; + portlistpointer = &ep_portlist; + while(*portlistpointer) + portlistpointer = &((*portlistpointer)->next); + *portlistpointer = portlist; + + /* link to call or port */ + portlist->port_id = port_id; + portlist->port_type = port_type; + + return(portlist); +} + + +/* free portlist relation + */ +void Endpoint::free_portlist(struct port_list *portlist) +{ + struct port_list *temp, **tempp; + + temp = ep_portlist; + tempp = &ep_portlist; + while(temp) + { + if (temp == portlist) + break; + + tempp = &temp->next; + temp = temp->next; + } + if (temp == 0) + { + PERROR("port_list not in endpoint's list, exitting.\n"); + exit(-1); + } + /* detach */ + *tempp=portlist->next; + + /* free */ + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) removed port_list from endpoint\n", ep_serial); + memset(portlist, 0, sizeof(struct port_list)); + free(portlist); + ememuse--; +} + + +/* handler for endpoint + */ +int Endpoint::handler(void) +{ + if (ep_use <= 0) + { + delete this; + return(-1); + } + + /* call application handler */ + if (ep_app) + return(ep_app->handler()); + return(0); +} diff --git a/endpoint.h b/endpoint.h new file mode 100644 index 0000000..506689a --- /dev/null +++ b/endpoint.h @@ -0,0 +1,53 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** Endpoint header file ** +** ** +\*****************************************************************************/ + + +/* structure of port_list */ +struct port_list { + struct port_list *next; + unsigned long port_id; + int port_type; +}; + +/* structure of an Enpoint */ +class Endpoint +{ + public: + Endpoint(int port_id, int call_id); + ~Endpoint(); + class Endpoint *next; /* next in list */ + unsigned long ep_serial; /* a unique serial to identify */ + int handler(void); + + /* applocaton relation */ + class EndpointApp *ep_app; /* link to application class */ + + /* port relation */ + struct port_list *ep_portlist; /* link to list of ports */ + struct port_list *portlist_new(unsigned long port_id, int port_type); + void free_portlist(struct port_list *portlist); + + /* call relation */ + unsigned long ep_call_id; /* link to call */ + + /* if still used by threads */ + int ep_use; + + /* application indipendant states */ + int ep_park; /* indicates that the epoint is parked */ + unsigned char ep_park_callid[8]; + int ep_park_len; +}; + +extern class Endpoint *epoint_first; + +class Endpoint *find_epoint_id(unsigned long epoint_id); + diff --git a/endpointapp.cpp b/endpointapp.cpp new file mode 100644 index 0000000..3e1a6b9 --- /dev/null +++ b/endpointapp.cpp @@ -0,0 +1,49 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** The EndpointApp represents the application for the Endpoint. ** +** ** +\*****************************************************************************/ + + +#include +#include "main.h" + +/* + * EndpointApp constructor + */ +EndpointApp::EndpointApp(class Endpoint *epoint) +{ + ea_endpoint = epoint; + classuse++; +} + +/* + * endpoint destructor + */ +EndpointApp::~EndpointApp(void) +{ + classuse--; +} + +int EndpointApp::handler(void) +{ + return(0); +} + +/* mini application for test purpose only */ + +void EndpointApp::ea_message_port(unsigned long port_id, int message_type, union parameter *param) +{ + PDEBUG(DEBUG_EPOINT, "%s: Spare function.\n", __FUNCTION__); +} + +void EndpointApp::ea_message_call(unsigned long port_id, int message_type, union parameter *param) +{ + PDEBUG(DEBUG_EPOINT, "%s: Spare function.\n", __FUNCTION__); +} + diff --git a/endpointapp.h b/endpointapp.h new file mode 100644 index 0000000..299633e --- /dev/null +++ b/endpointapp.h @@ -0,0 +1,25 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** EndpointApp header file ** +** ** +\*****************************************************************************/ + + +/* structure of an EndpointApp */ +class EndpointApp +{ + public: + EndpointApp(class Endpoint *epoint); + virtual ~EndpointApp(); + + class Endpoint *ea_endpoint; + virtual int handler(void); + virtual void ea_message_port(unsigned long port_id, int message, union parameter *param); + virtual void ea_message_call(unsigned long call_id, int message, union parameter *param); +}; + diff --git a/extension.c b/extension.c new file mode 100644 index 0000000..83e3c35 --- /dev/null +++ b/extension.c @@ -0,0 +1,2070 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** reading and writing files for extensions ** +** ** +\*****************************************************************************/ + +#include "main.h" + +/* extension */ + +char *ext_rights[] = { + "none", + "internal", + "local", + "national", + "international", + NULL +}; + +char *ext_yesno[] = { + "no", + "yes", + NULL +}; + + +/* read extension + * + * reads extension from given extension number and fills structure + */ +int read_extension(struct extension *ext, char *number) +{ + FILE *fp=NULL; + char filename[256]; + char *p; + char option[32]; + char param[256],param2[256]; + unsigned int line,i; + char buffer[1024]; + int last_in_count = 0, last_out_count = 0; + + if (number[0] == '\0') + return(0); + + SPRINT(filename, "%s/%s/%s/settings", INSTALL_DATA, options.extensions_dir, number); + + if (!(fp = fopen(filename, "r"))) + { + PDEBUG(DEBUG_CONFIG, "the given extension doesn't exist: \"%s\"\n", filename); + return(0); + } + + /* default values */ + memset(ext, 0, sizeof(struct extension)); + ext->rights = 4; /* international */ + ext->tout_setup = 120; + ext->tout_dialing = 120; + ext->tout_proceeding = 120; + ext->tout_alerting = 120; + ext->tout_disconnect = 120; +// ext->tout_hold = 900; +// ext->tout_park = 900; + ext->cfnr_delay = 20; + ext->vbox_codec = CODEC_MONO; + + line=0; + while((fgets(buffer, sizeof(buffer), fp))) + { + line++; + buffer[sizeof(buffer)-1] = '\0'; + if (buffer[0]) buffer[strlen(buffer)-1] = '\0'; + p = buffer; + + while(*p <= 32) /* skip spaces */ + { + if (*p == 0) + break; + p++; + } + if (*p==0 || *p=='#') /* ignore comments and empty line */ + continue; + + option[0]=0; + i=0; /* read option */ + while(*p > 32) + { + if (i+1 >= sizeof(option)) + { + PERROR_RUNTIME("Error in %s (line %d): option too long.\n",filename,line); + break; + } + option[i+1] = '\0'; + option[i++] = *p++; + } + + while(*p <= 32) /* skip spaces */ + { + if (*p == 0) + break; + p++; + } + + param[0]=0; + param2[0]=0; + if (*p!=0 && *p!='#') /* param */ + { + i=0; /* read param */ + while(*p > 32) + { + if (i+1 >= sizeof(param)) + { + PERROR_RUNTIME("Error in %s (line %d): param too long.\n",filename,line); + break; + } + param[i+1] = '\0'; + param[i++] = *p++; + } + + while(*p <= 32) /* skip spaces */ + { + if (*p == 0) + break; + p++; + } + + if (*p!=0 && *p!='#') /* param2 */ + { + i=0; /* read param2 */ + while(*p >= 32) + { + if (i+1 >= sizeof(param2)) + { + PERROR_RUNTIME("Error in %s (line %d): param too long.\n",filename,line); + break; + } + param2[i+1] = '\0'; + param2[i++] = *p++; + } + } + } + + /* at this point we have option and param */ + + /* check option */ + if (!strcmp(option,"name")) + { + SCPY(ext->name, param); + if (param2[0]) + { + SCAT(ext->name, " "); + SCAT(ext->name, param2); + } + + PDEBUG(DEBUG_CONFIG, "name of extension: %s\n",param); + } else + if (!strcmp(option,"prefix")) + { + SCPY(ext->prefix, param); + + PDEBUG(DEBUG_CONFIG, "dial prefix on pickup: %s\n",param); + } else + if (!strcmp(option,"next")) + { + SCPY(ext->next, param); + + PDEBUG(DEBUG_CONFIG, "dial next on pickup: %s\n",param); + } else + if (!strcmp(option,"alarm")) + { + SCPY(ext->alarm, param); + + PDEBUG(DEBUG_CONFIG, "alarm message (if prefix): %s\n",param); + } else + if (!strcmp(option,"cfu")) + { + SCPY(ext->cfu, param); + + PDEBUG(DEBUG_CONFIG, "call forward unconditional: %s\n",param); + } else + if (!strcmp(option,"cfb")) + { + SCPY(ext->cfb, param); + + PDEBUG(DEBUG_CONFIG, "call forward when busy: %s\n",param); + } else + if (!strcmp(option,"cfnr")) + { + SCPY(ext->cfnr, param); + + PDEBUG(DEBUG_CONFIG, "call forward on no response: %s\n",param); + } else + if (!strcmp(option,"cfnr_delay")) + { + ext->cfnr_delay = atoi(param); + if (ext->cfnr_delay < 0) + ext->cfnr_delay = 1; + + PDEBUG(DEBUG_CONFIG, "call forward no response delay: %d\n",ext->cfnr_delay); + } else + if (!strcmp(option,"cfp")) + { + SCPY(ext->cfp, param); + + PDEBUG(DEBUG_CONFIG, "call forward parallel: %s\n",param); + } else + if (!strcmp(option,"change_forward")) + { + i=0; + while(ext_yesno[i]) + { + if (!strcasecmp(param,ext_yesno[i])) + break; + i++; + } + if (ext_yesno[i]) + { + ext->change_forward = i; + PDEBUG(DEBUG_CONFIG, "allow the change of forwarding: %s\n", ext_yesno[i]); + } else + { + PDEBUG(DEBUG_CONFIG, "unknown parameter for change_forward: %s\n", param); + } + } else + if (!strcmp(option,"interfaces")) + { + SCPY(ext->interfaces, param); + + PDEBUG(DEBUG_CONFIG, "interfaces to ring calls to extension: %s %s\n",param,param2); + } else + if (!strcmp(option,"callerid")) + { + ext->callerid_present = INFO_PRESENT_ALLOWED; + if (!strncasecmp(param2, "anonymous", 9)) + ext->callerid_present = INFO_PRESENT_RESTRICTED; + if (!strncasecmp(param, "non", 3)) + { + ext->callerid[0] = '\0'; + ext->callerid_present = INFO_PRESENT_NOTAVAIL; + ext->callerid_type = INFO_NTYPE_UNKNOWN; + PDEBUG(DEBUG_CONFIG, "caller id: ID NOT AVAILABLE\n"); + } else + switch(param[0]) + { + case 'i': + case 'I': + ext->callerid_type = INFO_NTYPE_INTERNATIONAL; + SCPY(ext->callerid, param+1); + PDEBUG(DEBUG_CONFIG, "caller id: %s INTERNATIONAL\n",param+1); + break; + case 'n': + case 'N': + ext->callerid_type = INFO_NTYPE_NATIONAL; + SCPY(ext->callerid, param+1); + PDEBUG(DEBUG_CONFIG, "caller id: %s NATIONAL\n",param+1); + break; + case 's': + case 'S': + ext->callerid_type = INFO_NTYPE_SUBSCRIBER; + SCPY(ext->callerid, param+1); + PDEBUG(DEBUG_CONFIG, "caller id: %s SUBSCRIBER\n",param+1); + break; + default: + ext->callerid_type = INFO_NTYPE_UNKNOWN; + SCPY(ext->callerid, param); + PDEBUG(DEBUG_CONFIG, "caller id: %s UNKNOWN\n",param); + } + ext->callerid[sizeof(ext->callerid)-1] = 0; + } else + if (!strcmp(option,"id_next_call")) + { + ext->id_next_call_present = INFO_PRESENT_ALLOWED; + if (!strncasecmp(param2, "anonymous", 9)) + ext->id_next_call_present = INFO_PRESENT_RESTRICTED; + if (param[0] == '\0') + { + ext->id_next_call_present = -1; + PDEBUG(DEBUG_CONFIG, "id next call: no id for next call\n"); + } else + if (!strncasecmp(param, "none", 3)) + { + ext->id_next_call[0] = '\0'; + ext->id_next_call_present = INFO_PRESENT_NOTAVAIL; + ext->id_next_call_type = INFO_NTYPE_UNKNOWN; + PDEBUG(DEBUG_CONFIG, "id next call: ID NOT AVAILABLE\n"); + } else + switch(param[0]) + { + case 'i': + case 'I': + ext->id_next_call_type = INFO_NTYPE_INTERNATIONAL; + SCPY(ext->id_next_call, param+1); + PDEBUG(DEBUG_CONFIG, "id next call: %s INTERNATIONAL\n",param+1); + break; + case 'n': + case 'N': + ext->id_next_call_type = INFO_NTYPE_NATIONAL; + SCPY(ext->id_next_call, param+1); + PDEBUG(DEBUG_CONFIG, "id next call: %s NATIONAL\n",param+1); + break; + case 's': + case 'S': + ext->id_next_call_type = INFO_NTYPE_SUBSCRIBER; + SCPY(ext->id_next_call, param+1); + PDEBUG(DEBUG_CONFIG, "id next call: %s SUBSCRIBER\n",param+1); + break; + default: + ext->id_next_call_type = INFO_NTYPE_UNKNOWN; + SCPY(ext->id_next_call, param); + PDEBUG(DEBUG_CONFIG, "id next call: %s UNKNOWN\n",param); + } + + + + } else + if (!strcmp(option,"change_callerid")) + { + i=0; + while(ext_yesno[i]) + { + if (!strcasecmp(param,ext_yesno[i])) + break; + i++; + } + if (ext_yesno[i]) + { + ext->change_callerid = i; + PDEBUG(DEBUG_CONFIG, "allow the change of caller id: %s\n", ext_yesno[i]); + } else + { + PDEBUG(DEBUG_CONFIG, "unknown parameter for change_callerid: %s\n", param); + } + } else + if (!strcmp(option,"anon-ignore")) + { + i=0; + while(ext_yesno[i]) + { + if (!strcasecmp(param,ext_yesno[i])) + break; + i++; + } + if (ext_yesno[i]) + { + ext->anon_ignore = i; + PDEBUG(DEBUG_CONFIG, "ignore restriction of CLIP & COLP %s\n", ext_yesno[i]); + } else + { + PDEBUG(DEBUG_CONFIG, "unknown parameter given anon-ignore: %s\n", param); + } + } else + if (!strcmp(option,"clip")) + { + if (!strcasecmp(param, "hide")) + ext->clip = CLIP_HIDE; + else + ext->clip = CLIP_ASIS; + + PDEBUG(DEBUG_CONFIG, "clip: %d\n",ext->clip); + } else + if (!strcmp(option,"colp")) + { + if (!strcasecmp(param, "hide")) + ext->colp = COLP_HIDE; + else if (!strcasecmp(param, "force")) + ext->colp = COLP_FORCE; + else + ext->colp = COLP_ASIS; + + PDEBUG(DEBUG_CONFIG, "colp: %d\n",ext->colp); + } else + if (!strcmp(option,"clip_prefix")) + { + SCPY(ext->clip_prefix, param); + + PDEBUG(DEBUG_CONFIG, "clip prefix: %s\n",param); + } else + if (!strcmp(option,"keypad")) + { + i=0; + while(ext_yesno[i]) + { + if (!strcasecmp(param,ext_yesno[i])) + break; + i++; + } + if (ext_yesno[i]) + { + ext->keypad = i; + PDEBUG(DEBUG_CONFIG, "use keypad to do call control %s\n", ext_yesno[i]); + } else + { + PDEBUG(DEBUG_CONFIG, "unknown parameter given keypad: %s\n", param); + } + } else + if (!strcmp(option,"centrex")) + { + i=0; + while(ext_yesno[i]) + { + if (!strcasecmp(param,ext_yesno[i])) + break; + i++; + } + if (ext_yesno[i]) + { + ext->centrex = i; + PDEBUG(DEBUG_CONFIG, "use centrex to display name %s\n", ext_yesno[i]); + } else + { + PDEBUG(DEBUG_CONFIG, "unknown parameter given centrex: %s\n", param); + } + } else + if (!strcmp(option,"rights")) + { + i=0; + while(ext_rights[i]) + { + if (!strcasecmp(param,ext_rights[i])) + break; + i++; + } + if (ext_rights[i]) + { + ext->rights = i; + PDEBUG(DEBUG_CONFIG, "rights to dial: %s\n", ext_rights[i]); + } else + { + PDEBUG(DEBUG_CONFIG, "given rights unknown: %s\n", param); + } + } else + if (!strcmp(option,"delete_ext")) + { + i=0; + while(ext_yesno[i]) + { + if (!strcasecmp(param,ext_yesno[i])) + break; + i++; + } + if (ext_yesno[i]) + { + ext->delete_ext = i; + PDEBUG(DEBUG_CONFIG, "enables the delete key function for external calls: %s\n", ext_yesno[i]); + } else + { + PDEBUG(DEBUG_CONFIG, "unknown parameter given delete: %s\n", param); + } + } else + if (!strcmp(option,"noknocking")) + { + i=0; + while(ext_yesno[i]) + { + if (!strcasecmp(param,ext_yesno[i])) + break; + i++; + } + if (ext_yesno[i]) + { + ext->noknocking = i; + PDEBUG(DEBUG_CONFIG, "noknocking %s\n", ext_yesno[i]); + } else + { + PDEBUG(DEBUG_CONFIG, "given noknocking param unknown: %s\n", param); + } + } else + if (!strcmp(option,"rxvol")) + { + ext->rxvol = atoi(param); + if (ext->rxvol<-8 || ext->rxvol>8) + ext->rxvol = 0; + + PDEBUG(DEBUG_CONFIG, "receive volume: %d\n",ext->rxvol); + } else + if (!strcmp(option,"txvol")) + { + ext->txvol = atoi(param); + if (ext->txvol<-8 || ext->txvol>8) + ext->txvol = 0; + + PDEBUG(DEBUG_CONFIG, "transmit volume: %d\n",ext->txvol); + } else + if (!strcmp(option,"tout_setup")) + { + ext->tout_setup = atoi(param); + if (ext->tout_setup < 0) + ext->tout_setup = 0; + + PDEBUG(DEBUG_CONFIG, "timeout setup: %d\n",ext->tout_setup); + } else + if (!strcmp(option,"tout_dialing")) + { + ext->tout_dialing = atoi(param); + if (ext->tout_dialing < 0) + ext->tout_dialing = 0; + + PDEBUG(DEBUG_CONFIG, "timeout dialing: %d\n",ext->tout_dialing); + } else + if (!strcmp(option,"tout_proceeding")) + { + ext->tout_proceeding = atoi(param); + if (ext->tout_proceeding < 0) + ext->tout_proceeding = 0; + + PDEBUG(DEBUG_CONFIG, "timeout proceeding: %d\n",ext->tout_proceeding); + } else + if (!strcmp(option,"tout_alerting")) + { + ext->tout_alerting = atoi(param); + if (ext->tout_alerting < 0) + ext->tout_alerting = 0; + + PDEBUG(DEBUG_CONFIG, "timeout alerting: %d\n",ext->tout_alerting); + } else + if (!strcmp(option,"tout_disconnect")) + { + ext->tout_disconnect = atoi(param); + if (ext->tout_disconnect < 0) + ext->tout_disconnect = 0; + + PDEBUG(DEBUG_CONFIG, "timeout disconnect: %d\n",ext->tout_disconnect); + } else +#if 0 + if (!strcmp(option,"tout_hold")) + { + ext->tout_hold = atoi(param); + if (ext->tout_hold < 0) + ext->tout_hold = 0; + + PDEBUG(DEBUG_CONFIG, "timeout hold: %d\n",ext->tout_hold); + } else + if (!strcmp(option,"tout_park")) + { + ext->tout_park = atoi(param); + if (ext->tout_park < 0) + ext->tout_park = 0; + + PDEBUG(DEBUG_CONFIG, "timeout park: %d\n",ext->tout_park); + } else +#endif + if (!strcmp(option,"own_setup")) + { + i=0; + while(ext_yesno[i]) + { + if (!strcasecmp(param,ext_yesno[i])) + break; + i++; + } + if (ext_yesno[i]) + { + ext->own_setup = i; + PDEBUG(DEBUG_CONFIG, "own_setup %s\n", ext_yesno[i]); + } else + { + PDEBUG(DEBUG_CONFIG, "given own_setup param unknown: %s\n", param); + } + } else + if (!strcmp(option,"own_proceeding")) + { + i=0; + while(ext_yesno[i]) + { + if (!strcasecmp(param,ext_yesno[i])) + break; + i++; + } + if (ext_yesno[i]) + { + ext->own_proceeding = i; + PDEBUG(DEBUG_CONFIG, "own_proceeding %s\n", ext_yesno[i]); + } else + { + PDEBUG(DEBUG_CONFIG, "given own_proceeding param unknown: %s\n", param); + } + } else + if (!strcmp(option,"own_alerting")) + { + i=0; + while(ext_yesno[i]) + { + if (!strcasecmp(param,ext_yesno[i])) + break; + i++; + } + if (ext_yesno[i]) + { + ext->own_alerting = i; + PDEBUG(DEBUG_CONFIG, "own_alerting %s\n", ext_yesno[i]); + } else + { + PDEBUG(DEBUG_CONFIG, "given own_alerting param unknown: %s\n", param); + } + } else + if (!strcmp(option,"own_cause")) + { + i=0; + while(ext_yesno[i]) + { + if (!strcasecmp(param,ext_yesno[i])) + break; + i++; + } + if (ext_yesno[i]) + { + ext->own_cause = i; + PDEBUG(DEBUG_CONFIG, "own_cause %s\n", ext_yesno[i]); + } else + { + PDEBUG(DEBUG_CONFIG, "given own_cause param unknown: %s\n", param); + } + } else + if (!strcmp(option,"facility")) + { + i=0; + while(ext_yesno[i]) + { + if (!strcasecmp(param,ext_yesno[i])) + break; + i++; + } + if (ext_yesno[i]) + { + ext->facility = i; + PDEBUG(DEBUG_CONFIG, "facility %s\n", ext_yesno[i]); + } else + { + PDEBUG(DEBUG_CONFIG, "given facility param unknown: %s\n", param); + } + } else + if (!strcmp(option,"display_cause")) + { + if (!strcasecmp(param, "german")) + ext->display_cause = DISPLAY_CAUSE_GERMAN; + else if (!strcasecmp(param, "english")) + ext->display_cause = DISPLAY_CAUSE_ENGLISH; + else if (!strcasecmp(param, "german-location")) + ext->display_cause = DISPLAY_LOCATION_GERMAN; + else if (!strcasecmp(param, "english-location")) + ext->display_cause = DISPLAY_LOCATION_ENGLISH; + else if (!strcasecmp(param, "number")) + ext->display_cause = DISPLAY_CAUSE_NUMBER; + else + ext->display_cause = DISPLAY_CAUSE_NONE; + + PDEBUG(DEBUG_CONFIG, "display cause: %d\n",ext->display_cause); + } else +#if 0 + if (!strcmp(option,"display_ext")) + { + if (!strcasecmp(param, "number")) + ext->display_ext = DISPLAY_CID_NUMBER; + else if (!strcasecmp(param, "abbrev")) + ext->display_ext = DISPLAY_CID_ABBREVIATION; + else if (!strcasecmp(param, "name")) + ext->display_ext = DISPLAY_CID_NAME; + else if (!strcasecmp(param, "number-name")) + ext->display_ext = DISPLAY_CID_NUMBER_NAME; + else if (!strcasecmp(param, "name-number")) + ext->display_ext = DISPLAY_CID_NAME_NUMBER; + else if (!strcasecmp(param, "abbrev-number")) + ext->display_ext = DISPLAY_CID_ABBREV_NUMBER; + else if (!strcasecmp(param, "abbrev-name")) + ext->display_ext = DISPLAY_CID_ABBREV_NAME; + else if (!strcasecmp(param, "abbrev-name-number")) + ext->display_ext = DISPLAY_CID_ABBREV_NAME_NUMBER; + else if (!strcasecmp(param, "abbrev-number-name")) + ext->display_ext = DISPLAY_CID_ABBREV_NUMBER_NAME; + else + ext->display_ext = DISPLAY_CID_ASIS; + + PDEBUG(DEBUG_CONFIG, "display ext: %d\n",ext->display_ext); + } else +#endif + if (!strcmp(option,"display_ext")) + { + i=0; + while(ext_yesno[i]) + { + if (!strcasecmp(param,ext_yesno[i])) + break; + i++; + } + if (ext_yesno[i]) + { + ext->display_ext = i; + PDEBUG(DEBUG_CONFIG, "display ext %s\n", ext_yesno[i]); + } else + { + PDEBUG(DEBUG_CONFIG, "given display_ext param unknown: %s\n", param); + } + } else + if (!strcmp(option,"display_int")) + { + i=0; + while(ext_yesno[i]) + { + if (!strcasecmp(param,ext_yesno[i])) + break; + i++; + } + if (ext_yesno[i]) + { + ext->display_int = i; + PDEBUG(DEBUG_CONFIG, "display int %s\n", ext_yesno[i]); + } else + { + PDEBUG(DEBUG_CONFIG, "given display_int param unknown: %s\n", param); + } + } else + if (!strcmp(option,"display_voip")) + { + i=0; + while(ext_yesno[i]) + { + if (!strcasecmp(param,ext_yesno[i])) + break; + i++; + } + if (ext_yesno[i]) + { + ext->display_voip = i; + PDEBUG(DEBUG_CONFIG, "display voip %s\n", ext_yesno[i]); + } else + { + PDEBUG(DEBUG_CONFIG, "given display_voip param unknown: %s\n", param); + } + } else + if (!strcmp(option,"display_fake")) + { + i=0; + while(ext_yesno[i]) + { + if (!strcasecmp(param,ext_yesno[i])) + break; + i++; + } + if (ext_yesno[i]) + { + ext->display_fake = i; + PDEBUG(DEBUG_CONFIG, "display fake caller ids %s\n", ext_yesno[i]); + } else + { + PDEBUG(DEBUG_CONFIG, "given display_fake param unknown: %s\n", param); + } + } else + if (!strcmp(option,"display_anon")) + { + i=0; + while(ext_yesno[i]) + { + if (!strcasecmp(param,ext_yesno[i])) + break; + i++; + } + if (ext_yesno[i]) + { + ext->display_anon = i; + PDEBUG(DEBUG_CONFIG, "display anonymouse ids %s\n", ext_yesno[i]); + } else + { + PDEBUG(DEBUG_CONFIG, "given display_anon param unknown: %s\n", param); + } + } else + if (!strcmp(option,"display_menu")) + { + i=0; + while(ext_yesno[i]) + { + if (!strcasecmp(param,ext_yesno[i])) + break; + i++; + } + if (ext_yesno[i]) + { + ext->display_menu = i; + PDEBUG(DEBUG_CONFIG, "display menu %s\n", ext_yesno[i]); + } else + { + PDEBUG(DEBUG_CONFIG, "given display_menu param unknown: %s\n", param); + } + } else + if (!strcmp(option,"display_dialing")) + { + i=0; + while(ext_yesno[i]) + { + if (!strcasecmp(param,ext_yesno[i])) + break; + i++; + } + if (ext_yesno[i]) + { + ext->display_dialing = i; + PDEBUG(DEBUG_CONFIG, "display dialing %s\n", ext_yesno[i]); + } else + { + PDEBUG(DEBUG_CONFIG, "given display_dialing param unknown: %s\n", param); + } + } else + if (!strcmp(option,"display_name")) + { + i=0; + while(ext_yesno[i]) + { + if (!strcasecmp(param,ext_yesno[i])) + break; + i++; + } + if (ext_yesno[i]) + { + ext->display_name = i; + PDEBUG(DEBUG_CONFIG, "display name %s\n", ext_yesno[i]); + } else + { + PDEBUG(DEBUG_CONFIG, "given display_name param unknown: %s\n", param); + } + } else + if (!strcmp(option,"tones_dir")) + { + if (param[strlen(param)-1] == '/') + param[strlen(param)-1]=0; + SCPY(ext->tones_dir, param); + + PDEBUG(DEBUG_CONFIG, "directory of tones: %s\n",param); + } else + if (!strcmp(option,"record")) + { + if (!strcasecmp(param, "mono")) + ext->record = CODEC_MONO; + else if (!strcasecmp(param, "stereo")) + ext->record = CODEC_STEREO; + else if (!strcasecmp(param, "8bit")) + ext->record = CODEC_8BIT; + else if (!strcasecmp(param, "law")) + ext->record = CODEC_LAW; + else + ext->record = CODEC_OFF; + PDEBUG(DEBUG_CONFIG, "given record param: %s\n", param); + } else + if (!strcmp(option,"password")) + { + SCPY(ext->password, param); + + PDEBUG(DEBUG_CONFIG, "password: %s\n",param); + } else + if (!strcmp(option,"vbox_mode")) + { + if (!strcasecmp(param, "parallel")) + ext->vbox_mode = VBOX_MODE_PARALLEL; + else if (!strcasecmp(param, "announcement")) + ext->vbox_mode = VBOX_MODE_ANNOUNCEMENT; + else + ext->vbox_mode = VBOX_MODE_NORMAL; + PDEBUG(DEBUG_CONFIG, "given vbox mode: %s\n", param); + } else + if (!strcmp(option,"vbox_codec")) + { + if (!strcasecmp(param, "stereo")) + ext->vbox_codec = CODEC_STEREO; + else if (!strcasecmp(param, "8bit")) + ext->vbox_codec = CODEC_8BIT; + else if (!strcasecmp(param, "law")) + ext->vbox_codec = CODEC_LAW; + else + ext->vbox_codec = CODEC_MONO; + PDEBUG(DEBUG_CONFIG, "given record param: %s\n", param); + } else + if (!strcmp(option,"vbox_time")) + { + ext->vbox_time = atoi(param); + if (ext->vbox_time < 0) + ext->vbox_time = 0; + + PDEBUG(DEBUG_CONFIG, "vbox time to record: %d\n",ext->vbox_time); + } else + if (!strcmp(option,"vbox_display")) + { + if (!strcasecmp(param, "detailed") + || !strcasecmp(param, "detailled")) + ext->vbox_display = VBOX_DISPLAY_DETAILED; + else if (!strcasecmp(param, "off")) + ext->vbox_display = VBOX_DISPLAY_OFF; + else + ext->vbox_display = VBOX_DISPLAY_BRIEF; + PDEBUG(DEBUG_CONFIG, "given vbox mode: %s\n", param); + } else + if (!strcmp(option,"vbox_language")) + { + if (!strcasecmp(param, "german")) + ext->vbox_language = VBOX_LANGUAGE_GERMAN; + else + ext->vbox_language = VBOX_LANGUAGE_ENGLISH; + PDEBUG(DEBUG_CONFIG, "given vbox mode: %s\n", param); + } else + if (!strcmp(option,"vbox_email")) + { + SCPY(ext->vbox_email, param); + PDEBUG(DEBUG_CONFIG, "given vbox email: %s\n", param); + } else + if (!strcmp(option,"vbox_email_file")) + { + i=0; + while(ext_yesno[i]) + { + if (!strcasecmp(param,ext_yesno[i])) + break; + i++; + } + if (ext_yesno[i]) + { + ext->vbox_email_file = i; + PDEBUG(DEBUG_CONFIG, "attach audio file %s\n", ext_yesno[i]); + } else + { + PDEBUG(DEBUG_CONFIG, "given vbox_email_file param unknown: %s\n", param); + } + } else + if (!strcmp(option,"vbox_free")) + { + i=0; + while(ext_yesno[i]) + { + if (!strcasecmp(param,ext_yesno[i])) + break; + i++; + } + if (ext_yesno[i]) + { + ext->vbox_free = i; + PDEBUG(DEBUG_CONFIG, "vbox_free %s\n", ext_yesno[i]); + } else + { + PDEBUG(DEBUG_CONFIG, "given vbox_free param unknown: %s\n", param); + } + } else + if (!strcmp(option,"last_in")) + { + if (param[0] && last_in_countlast_in[last_in_count], param); + last_in_count++; + } + PDEBUG(DEBUG_CONFIG, "last_in dialed number: %s\n",param); + } else + if (!strcmp(option,"last_out")) + { + if (param[0] && last_out_countlast_out[last_out_count], param); + last_out_count++; + } + PDEBUG(DEBUG_CONFIG, "last_out dialed number: %s\n",param); + } else + if (!strcmp(option,"datacall")) + { + i=0; + while(ext_yesno[i]) + { + if (!strcasecmp(param,ext_yesno[i])) + break; + i++; + } + if (ext_yesno[i]) + { + ext->datacall = i; + PDEBUG(DEBUG_CONFIG, "datacall %s\n", ext_yesno[i]); + } else + { + PDEBUG(DEBUG_CONFIG, "given datacall param unknown: %s\n", param); + } + } else + if (!strcmp(option,"seconds")) + { + i=0; + while(ext_yesno[i]) + { + if (!strcasecmp(param,ext_yesno[i])) + break; + i++; + } + if (ext_yesno[i]) + { + ext->no_seconds = 1-i; + PDEBUG(DEBUG_CONFIG, "seconds %s\n", ext_yesno[i]); + } else + { + PDEBUG(DEBUG_CONFIG, "unknown param for seconds: %s\n", param); + } + } else + { + PERROR_RUNTIME("Error in %s (line %d): wrong option keyword %s.\n",filename,line,option); + } + } + + if (fp) fclose(fp); + return(1); +} + + +/* write extension + * + * writes extension for given extension number from structure + */ +int write_extension(struct extension *ext, char *number) +{ + FILE *fp=NULL; + char filename[256]; + int i; + + if (number[0] == '\0') + return(0); + + SPRINT(filename, "%s/%s/%s/settings", INSTALL_DATA, options.extensions_dir, number); + + if (!(fp = fopen(filename, "w"))) + { + PERROR("Cannot open settings: \"%s\"\n", filename); + return(0); + } + + fprintf(fp,"# Settings of extension %s\n\n", number); + + fprintf(fp,"# Name of extension:\n"); + fprintf(fp,"name %s\n\n",ext->name); + + fprintf(fp,"# Predialed prefix after pick-up of the phone\n"); + fprintf(fp,"prefix %s\n\n",ext->prefix); + + fprintf(fp,"# Next prefix to dial pick-up of the phone\n"); + fprintf(fp,"# This will be cleared on hangup.\n"); + fprintf(fp,"next %s\n\n",ext->next); + +// fprintf(fp,"# Set up alarm message after prefix is dialed and connection is established\n"); +// fprintf(fp,"alarm %s\n\n",ext->alarm); + + fprintf(fp,"# Ports to ring on calls to extension (starting from 1)\n"); + fprintf(fp,"# Seperate ports by using komma. (example: 1,3 would ring incoming calls on\n# port 1 and 3)\n"); + fprintf(fp,"interfaces %s\n\n",ext->interfaces); + + fprintf(fp,"# Call Forward Unconditional (CFU)\n"); + fprintf(fp,"# No port will be called, CFB, CFNR and CFP is ignored.\n"); + fprintf(fp,"# Use keyword \"vbox\" to forward call directly to answering machine.\n"); + fprintf(fp,"cfu %s\n\n",ext->cfu); + + fprintf(fp,"# Call Forward when Busy (CFB)\n"); + fprintf(fp,"# If the extension is in use at least once, this forward is done.\n"); + fprintf(fp,"# In case of busy line, CFNR and CFP is ignored.\n"); + fprintf(fp,"# Use keyword \"vbox\" to forward call to answering machine when busy.\n"); + fprintf(fp,"cfb %s\n\n",ext->cfb); + + fprintf(fp,"# Call Forward on No Response (CFNR)\n"); + fprintf(fp,"# If noone answers, the call is forwarded, ports and CFP will be released.\n"); + fprintf(fp,"# The default delay is 20 seconds.\n"); + fprintf(fp,"# Use keyword \"vbox\" to forward call to answering machine on no response.\n"); + fprintf(fp,"cfnr %s\n",ext->cfnr); + fprintf(fp,"cfnr_delay %d\n\n",ext->cfnr_delay); + + fprintf(fp,"# Call Forward Parallel (CFP)\n"); + fprintf(fp,"# Call will ring on the forwarded number, simulaniousely with the ports.\n"); + fprintf(fp,"cfp %s\n\n",ext->cfp); + + fprintf(fp,"# Allow user to change call forwarding.\n"); + fprintf(fp,"change_forward %s\n\n", ext_yesno[ext->change_forward]); + + fprintf(fp,"# Caller id\n# This must be one of the following:\n"); + fprintf(fp,"# (as dialed from your local area)\n"); + fprintf(fp,"# anonymous (will only be shown to emergency phones)\n"); + fprintf(fp,"# none (no number available at all)\n"); + fprintf(fp,"# by default the number is of type UNKNOWN (for MULTIPOINT lines)\n"); + fprintf(fp,"# if your caller id is not screened on outgoing calls use one of the following:\n"); + fprintf(fp,"# use prefix 'i' for TYPE INTERNATIONAL (i)\n"); + fprintf(fp,"# use prefix 'n' for TYPE NATIONAL (n)\n"); + fprintf(fp,"# use prefix 's' for TYPE SUBSCRIBER (s)\n"); + if (ext->callerid_present == INFO_PRESENT_NOTAVAIL) + fprintf(fp,"callerid none\n\n"); + else + { + switch(ext->callerid_type) + { + case INFO_NTYPE_INTERNATIONAL: + fprintf(fp,"callerid i%s%s\n\n",ext->callerid, (ext->callerid_present==INFO_PRESENT_RESTRICTED)?" anonymous":""); + break; + case INFO_NTYPE_NATIONAL: + fprintf(fp,"callerid n%s%s\n\n",ext->callerid, (ext->callerid_present==INFO_PRESENT_RESTRICTED)?" anonymous":""); + break; + case INFO_NTYPE_SUBSCRIBER: + fprintf(fp,"callerid s%s%s\n\n",ext->callerid, (ext->callerid_present==INFO_PRESENT_RESTRICTED)?" anonymous":""); + break; + default: + fprintf(fp,"callerid %s%s\n\n",ext->callerid, (ext->callerid_present==INFO_PRESENT_RESTRICTED)?" anonymous":""); + } + } + + fprintf(fp,"# Caller id for next call (see caller id)\n"); + if (ext->id_next_call_present < 0) + fprintf(fp,"id_next_call \n\n"); + else if (ext->id_next_call_present == INFO_PRESENT_NOTAVAIL) + fprintf(fp,"id_next_call none\n\n"); + else + { + switch(ext->id_next_call_type) + { + case INFO_NTYPE_INTERNATIONAL: + fprintf(fp,"id_next_call i%s%s\n\n",ext->id_next_call, (ext->id_next_call_present==INFO_PRESENT_RESTRICTED)?" anonymous":""); + break; + case INFO_NTYPE_NATIONAL: + fprintf(fp,"id_next_call n%s%s\n\n",ext->id_next_call, (ext->id_next_call_present==INFO_PRESENT_RESTRICTED)?" anonymous":""); + break; + case INFO_NTYPE_SUBSCRIBER: + fprintf(fp,"id_next_call s%s%s\n\n",ext->id_next_call, (ext->id_next_call_present==INFO_PRESENT_RESTRICTED)?" anonymous":""); + break; + default: + fprintf(fp,"id_next_call %s%s\n\n",ext->id_next_call, (ext->id_next_call_present==INFO_PRESENT_RESTRICTED)?" anonymous":""); + } + } + + fprintf(fp,"# Allow user to change caller ID.\n"); + fprintf(fp,"change_callerid %s\n\n", ext_yesno[ext->change_callerid]); + + fprintf(fp,"# Caller Line Identification Presentation (CLIP)\n"); + fprintf(fp,"# clip (asis|hide)\n"); + fprintf(fp,"# asis: On forwarded calls the CLIP is used as presented by the calling party.\n"); + fprintf(fp,"# hide: Always use extension's caller id, even on forwared calls.\n"); + switch(ext->clip) + { + case CLIP_HIDE: + fprintf(fp,"clip hide\n\n"); + break; + default: + fprintf(fp,"clip asis\n\n"); + } + + fprintf(fp,"# Connected Line Identification Presentation (COLP)\n"); + fprintf(fp,"# colp (asis|hide|force)\n"); + fprintf(fp,"# asis: Provides colp as defined by the extension's caller id.\n"); + fprintf(fp,"# On forwarded calls the COLP is used as presented by the called party.\n"); + fprintf(fp,"# hide: Always use extension's caller id, even on forwared calls.\n"); + fprintf(fp,"# force: If COLP is not presented by forwarded calls the dialed number is used.\n"); + switch(ext->colp) + { + case COLP_HIDE: + fprintf(fp,"colp hide\n\n"); + break; + case COLP_FORCE: + fprintf(fp,"colp force\n\n"); + break; + default: + fprintf(fp,"colp asis\n\n"); + } + + fprintf(fp,"# CLIP Prefix\n"); + fprintf(fp,"# Adds a prefix to incomming caller IDs, so telephones will be able to respond\n"); + fprintf(fp,"# to unanswered calls from their list. The prefix must be the digit(s) to get\n"); + fprintf(fp,"# an external line. The caller ID will then be extendet so that they can be\n"); + fprintf(fp,"# dialed from internal telephones. Many telephones have this feature, but some\n"); + fprintf(fp,"# don't.\n"); + fprintf(fp,"clip_prefix %s\n\n",ext->clip_prefix); + + fprintf(fp,"# Keypad control\n"); + fprintf(fp,"# If supported by telephone, pressing a key on the keypad will not result in\n"); + fprintf(fp,"# DTMF tone, but the digit is transmitted via D-channel diaing info.\n"); + fprintf(fp,"keypad %s\n\n",(ext->keypad)?"yes":"no"); + + fprintf(fp,"# Called Name Identification Presentation (CNIP/CONP)\n"); + fprintf(fp,"# If supported by telephone, special information element on the d-channel are\n"); + fprintf(fp,"# used to show name of caller. It is supported by newer Siemens telephones\n# (Centrex).\n"); + fprintf(fp,"centrex %s #this is currently not working!!!\n\n",(ext->centrex)?"yes":"no"); + + fprintf(fp,"# Ignore restriction of COLP and CLIP\n"); + fprintf(fp,"# In this case even restricted numbers are presented to this extension.\n"); + fprintf(fp,"# This also works for incoming external anonymous calls IF:\n"); + fprintf(fp,"# You have the CLIRIGN feature like POLICE or equivalent.\n"); + fprintf(fp,"anon-ignore %s\n\n",(ext->anon_ignore)?"yes":"no"); + + fprintf(fp,"# Dialing rights (none|internal|local|national|international)\n"); + fprintf(fp,"rights %s\n\n",ext_rights[ext->rights]); + + fprintf(fp,"# Delete function for external calls. '*' will delete the last digit, '#' will\n"); + fprintf(fp,"# delete the complete number. Also enable 'display_dialing' to see on the\n"); + fprintf(fp,"# display what actually happens.\n"); + fprintf(fp,"delete_ext %s\n\n",ext_yesno[ext->delete_ext]); + + fprintf(fp,"# If noknocking is enabled, the caller will get a busy message when the\n"); + fprintf(fp,"# extension is doing at least one call.\n"); + fprintf(fp,"noknocking %s\n\n",ext_yesno[ext->noknocking]); + + fprintf(fp,"# Transmit volume (-8 .. 8)\n"); + fprintf(fp,"# 0 = normal\n"); + fprintf(fp,"# 1 = double, 2 = quadrupel, 8 = 256 times (amplitude)\n"); + fprintf(fp,"# -1 = half, -2 = quarter, 8 = 1/256th (amplitude)\n"); + fprintf(fp,"# Audio data is limited to the maximum value when exceeds limit.\n"); + fprintf(fp,"txvol %d\n\n",ext->txvol); + + fprintf(fp,"# Receive volume (-8 .. 8)\n"); + fprintf(fp,"# (see txvol)\n"); + fprintf(fp,"rxvol %d\n\n",ext->rxvol); + + fprintf(fp,"# Timeout values\n# The keywords specify the following timeouts:\n"); + fprintf(fp,"# tout_setup: after pickup before dialing anything. (default 60 seconds)\n"); + fprintf(fp,"# tout_dialing: after dialing last digit of uncomplete number (default 15)\n"); + fprintf(fp,"# tout_proceeding: after start proceeding (default 120)\n"); + fprintf(fp,"# tout_alerting: after start ringing (default 120)\n"); + fprintf(fp,"# tout_disconnect: after disconnect (default 120)\n"); +// fprintf(fp,"# tout_hold: maximum time to hold a call (default 900)\n"); +// fprintf(fp,"# tout_park: maximum time to park a call (default 900)\n"); + fprintf(fp,"# All timeouts may be disabled by using keyword 'off' instead of seconds.\n"); + fprintf(fp,"# All timeouts refer to internal ports only. External timeouts are controlled\n"); + fprintf(fp,"# by external line.\n"); + if (ext->tout_setup) + fprintf(fp,"tout_setup %d\n",ext->tout_setup); + else + fprintf(fp,"tout_setup off\n"); + if (ext->tout_dialing) + fprintf(fp,"tout_dialing %d\n",ext->tout_dialing); + else + fprintf(fp,"tout_dialing off\n"); + if (ext->tout_proceeding) + fprintf(fp,"tout_proceeding %d\n",ext->tout_proceeding); + else + fprintf(fp,"tout_proceeding off\n"); + if (ext->tout_alerting) + fprintf(fp,"tout_alerting %d\n",ext->tout_alerting); + else + fprintf(fp,"tout_alerting off\n"); + if (ext->tout_disconnect) + fprintf(fp,"tout_disconnect %d\n\n",ext->tout_disconnect); + else + fprintf(fp,"tout_disconnect off\n\n"); +// if (ext->tout_hold) +// fprintf(fp,"tout_hold %d\n",ext->tout_hold); +// else +// fprintf(fp,"tout_hold off\n"); +// if (ext->tout_park) +// fprintf(fp,"tout_park %d\n\n",ext->tout_park); +// else +// fprintf(fp,"tout_park off\n\n"); + + fprintf(fp,"# Force to use tones and announcements generated by the pbx.\n"); + fprintf(fp,"# For internal calls always own tones are used. You may specify own tones for\n"); + fprintf(fp,"# different call states:\n"); + fprintf(fp,"# own_setup (dialtone and during dialing)\n"); + fprintf(fp,"# own_proceeding (call in poceeding state)\n"); + fprintf(fp,"# own_alerting (call is ringing)\n"); + fprintf(fp,"# own_cause (when the call gets disconnected or failed to be completed)\n"); + fprintf(fp,"own_setup %s\n",ext_yesno[ext->own_setup]); + fprintf(fp,"own_proceeding %s\n",ext_yesno[ext->own_proceeding]); + fprintf(fp,"own_alerting %s\n",ext_yesno[ext->own_alerting]); + fprintf(fp,"own_cause %s\n\n",ext_yesno[ext->own_cause]); + + fprintf(fp,"# Allow facility information to be transfered to the telephone.\n"); + fprintf(fp,"# This is equired to receive advice of charge.\n"); + fprintf(fp,"facility %s\n\n",ext_yesno[ext->facility]); + + fprintf(fp,"# Display clear causes using display messages (Q.850)\n# This must be one of the following:\n"); + fprintf(fp,"# none (no displaying of clear causes)\n"); + fprintf(fp,"# english (display cause text in english)\n"); + fprintf(fp,"# german (display cause text in german)\n"); + fprintf(fp,"# number (display cause number only)\n"); + fprintf(fp,"# english-location (display cause text in english and location)\n"); + fprintf(fp,"# german-location (display cause text in german and location)\n"); + switch(ext->display_cause) + { + case DISPLAY_CAUSE_ENGLISH: + fprintf(fp,"display_cause english\n\n"); + break; + case DISPLAY_CAUSE_GERMAN: + fprintf(fp,"display_cause german\n\n"); + break; + case DISPLAY_LOCATION_ENGLISH: + fprintf(fp,"display_cause english-location\n\n"); + break; + case DISPLAY_LOCATION_GERMAN: + fprintf(fp,"display_cause german-location\n\n"); + break; + case DISPLAY_CAUSE_NUMBER: + fprintf(fp,"display_cause number\n\n"); + break; + default: + fprintf(fp,"display_cause none\n\n"); + } + + fprintf(fp,"# Display external caller ids using display override (yes or no)\n"); + fprintf(fp,"# example: \"15551212\"\n"); + fprintf(fp,"display_ext %s\n\n",(ext->display_ext)?"yes":"no"); + + fprintf(fp,"# Display internal caller ids using display override (yes or no)\n"); + fprintf(fp,"# example: \"200 (int)\"\n"); + fprintf(fp,"display_int %s\n\n",(ext->display_int)?"yes":"no"); + + fprintf(fp,"# Display H323 caller ids using display override (yes or no)\n"); + fprintf(fp,"# example: \"15551212 jolly@192.168.0.3\"\n"); + fprintf(fp,"display_voip %s\n\n",(ext->display_voip)?"yes":"no"); + + fprintf(fp,"# Display if calls are anonymous using display override (yes or no)\n"); + fprintf(fp,"# This makes only sense if the anon-ignore feature is enabled.\n"); + fprintf(fp,"# example: \"15551212 anon\"\n"); + fprintf(fp,"display_anon %s\n\n",(ext->display_anon)?"yes":"no"); + + fprintf(fp,"# Display fake caller ids using display override (yes or no)\n"); + fprintf(fp,"# If the caller uses \"clip no screening\", you will see if the number is\n"); + fprintf(fp,"# real or fake\n"); + fprintf(fp,"# example: \"15551212 fake\"\n"); + fprintf(fp,"display_fake %s\n\n",(ext->display_fake)?"yes":"no"); + + fprintf(fp,"# Display caller's name if available. (yes or no)\n"); + fprintf(fp,"# example: \"15551212 Axel\"\n"); + fprintf(fp,"display_name %s\n\n",(ext->display_name)?"yes":"no"); + + fprintf(fp,"# Display menu when '*' and '#' is pressed. The menu shows all prefixes for\n"); + fprintf(fp,"# internal dialing by pressing '*' for previous prefix and '#' for next prefix.\n"); + fprintf(fp,"# Also the dialed prefix is show on display. (yes or no)\n"); + fprintf(fp,"display_menu %s\n\n",(ext->display_menu)?"yes":"no"); + + fprintf(fp,"# Display digits as they are interpreted by pbx. (yes or no)\n"); + fprintf(fp,"display_dialing %s\n\n",(ext->display_dialing)?"yes":"no"); + + fprintf(fp,"# Tones directory for announcements and patterns\n"); + fprintf(fp,"# Enter nothing for default tones as selected by options.conf.\n"); + fprintf(fp,"tones_dir %s\n\n",ext->tones_dir); + + fprintf(fp,"# Record calls to extension's directory. The file is written as wave.\n"); + fprintf(fp,"# This must be one of the following:\n"); + fprintf(fp,"# off (no recording)\n"); + fprintf(fp,"# mono (records wave 16 bit mono, 128kbits/s)\n"); + fprintf(fp,"# stereo (records wave 32 bit stereo, 256kbits/s)\n"); + fprintf(fp,"# 8bit (records wave 8 bit mono, 64kbits/s)\n"); + fprintf(fp,"# law (records xLaw encoded, as specified in options.conf, 64kbps/s)\n"); + switch(ext->record) + { + case CODEC_MONO: + fprintf(fp,"record mono\n\n"); + break; + case CODEC_STEREO: + fprintf(fp,"record stereo\n\n"); + break; + case CODEC_8BIT: + fprintf(fp,"record 8bit\n\n"); + break; + case CODEC_LAW: + fprintf(fp,"record law\n\n"); + break; + default: + fprintf(fp,"record off\n\n"); + } + + fprintf(fp,"# Password for callback and login\n"); + fprintf(fp,"# Enter nothing if callback and login should not be possible.\n"); + fprintf(fp,"password %s\n\n",ext->password); + + fprintf(fp,"# The Answering Machine. Enter the mode of answering machine.\n"); + fprintf(fp,"# This must be one of the following:\n"); + fprintf(fp,"# normal (plays announcement and records after that)\n"); + fprintf(fp,"# parallel (plays announcement and records also DURING announcement.)\n"); + fprintf(fp,"# announcement (just plays announcement and hangs up)\n"); + switch(ext->vbox_mode) + { + case VBOX_MODE_PARALLEL: + fprintf(fp,"vbox_mode parallel\n\n"); + break; + case VBOX_MODE_ANNOUNCEMENT: + fprintf(fp,"vbox_mode announcement\n\n"); + break; + default: + fprintf(fp,"vbox_mode normal\n\n"); + } + + fprintf(fp,"# The Answering Machine. Enter the type of codec for recording.\n"); + fprintf(fp,"# This must be one of the following:\n"); + fprintf(fp,"# law (alaw/ulas codec, as specified in options.conf)\n"); + fprintf(fp,"# mono (16 bit mono wave file)\n"); + fprintf(fp,"# stereo (16 bit stereo wave file)\n"); + fprintf(fp,"# 8bit (8 bit mono wave file)\n"); + switch(ext->vbox_codec) + { + case CODEC_LAW: + fprintf(fp,"vbox_codec law\n\n"); + break; + case CODEC_STEREO: + fprintf(fp,"vbox_codec stereo\n\n"); + break; + case CODEC_8BIT: + fprintf(fp,"vbox_codec 8bit\n\n"); + break; + default: + fprintf(fp,"vbox_codec mono\n\n"); + } + + fprintf(fp,"# The Answering Machine. Enter maximum time to record after announcement.\n"); + fprintf(fp,"# Leave empty, enter \"infinite\" or give time in seconds.\n"); + fprintf(fp,"# Enter nothing if callback and login should not be possible.\n"); + if (ext->vbox_time) + fprintf(fp,"vbox_time %d\n\n",ext->vbox_time); + else + fprintf(fp,"vbox_time infinite\n\n"); + + fprintf(fp,"# The Answering Machine. Enter mode for display current state.\n"); + fprintf(fp,"# This must be one of the following:\n"); + fprintf(fp,"# brief (displays brief information, for small displays)\n"); + fprintf(fp,"# detailed (displays detailed information, for larger displays)\n"); + fprintf(fp,"# off (don't display anything)\n"); + switch(ext->vbox_display) + { + case VBOX_DISPLAY_OFF: + fprintf(fp,"vbox_display off\n\n"); + break; + case VBOX_DISPLAY_DETAILED: + fprintf(fp,"vbox_display detailed\n\n"); + break; + default: + fprintf(fp,"vbox_display brief\n\n"); + } + + fprintf(fp,"# The Answering Machine. Enter type of language: \"english\" or \"german\"\n"); + fprintf(fp,"# Display information of the menu, will be provided as specified.\n"); + fprintf(fp,"# The menu's voice is located in \"vbox_english\" and \"vbox_german\".\n"); + if (ext->vbox_language) + fprintf(fp,"vbox_language german\n\n"); + else + fprintf(fp,"vbox_language english\n\n"); + + fprintf(fp,"# The Answering Machine. Enter email to send incoming messages to:\n"); + fprintf(fp,"# All incoming message will be send to the given address.\n"); + fprintf(fp,"# The audio file is attached if \"vbox_email_file\" is 'yes'\n"); + fprintf(fp,"vbox_email %s\n", ext->vbox_email); + fprintf(fp,"vbox_email_file %s\n\n",ext_yesno[ext->vbox_email_file]); + + fprintf(fp,"# If audio path is connected prior answering of a call, say 'yes'\n"); + fprintf(fp,"# will cause the call to be billed after playing the announcement. (yes or no)\n"); + fprintf(fp,"vbox_free %s\n\n",(ext->vbox_free)?"yes":"no"); + + fprintf(fp,"# Accept incoming data calls as it would be an audio call.\n"); + fprintf(fp,"datacall %s\n\n",ext_yesno[ext->datacall]); + + fprintf(fp,"# Include seconds (time) in the connect message. (Should be always enabled.)\n"); + fprintf(fp,"seconds %s\n\n",ext_yesno[1-ext->no_seconds]); + + fprintf(fp,"# Last outgoing and incoming numbers (including prefix)\n"); + i = 0; + while(i < MAX_REMEMBER) + { + if (ext->last_out[i][0]) + fprintf(fp,"last_out %s\n",ext->last_out[i]); + i++; + } + i = 0; + while(i < MAX_REMEMBER) + { + if (ext->last_in[i][0]) + fprintf(fp,"last_in %s\n",ext->last_in[i]); + i++; + } + fprintf(fp,"\n"); + + + if (fp) fclose(fp); + return(1); +} + + +/* write log for extension + * + */ +int write_log(char *number, char *callerid, char *calledid, time_t start, time_t stop, int aoce, int cause, int location) +{ + char *mon[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; + FILE *fp=NULL; + char filename[256]; + struct tm *tm; + + if (callerid[0] == '\0') + callerid = ""; + + SPRINT(filename, "%s/%s/%s/log", INSTALL_DATA, options.extensions_dir, number); + + if (!(fp = fopen(filename, "a"))) + { + PERROR("Cannot open log: \"%s\"\n", filename); + return(0); + } + + tm = localtime(&start); + fprintf(fp,"%s %2d %04d %02d:%02d:%02d %s", mon[tm->tm_mon], tm->tm_mday, tm->tm_year+1900, tm->tm_hour, tm->tm_min, tm->tm_sec, number); + if (stop) + fprintf(fp," %2ld:%02ld:%02ld", (stop-start)/3600, (((unsigned long)(stop-start))/60)%60, ((unsigned long)(stop-start))%60); + else + fprintf(fp," --:--:--"); + fprintf(fp," %s -> %s", callerid, calledid); + if (cause >= 1 && cause <=127 && location>=0 && location<=15) + fprintf(fp," (cause=%d '%s' location=%d '%s')", cause, isdn_cause[cause].german, location, isdn_location[location].german); + fprintf(fp,"\n"); + + if (fp) fclose(fp); + return(1); +} + + +/* parse phonebook + * + * reads phone book of extextension and compares the given elements which + * are: abreviation, phone number, name (name is not compared) + * on success a 1 is returned and the pointers of elements are set to the + * result. + */ +int parse_phonebook(char *number, char **abbrev_pointer, char **phone_pointer, char **name_pointer) +{ + FILE *fp=NULL; + char filename[256]; + char *p; + static char abbrev[32], phone[256], name[256]; + unsigned int line,i; + char buffer[1024]; + int found = 0, found_if_more_digits = 0; + + SPRINT(filename, "%s/%s/%s/phonebook", INSTALL_DATA, options.extensions_dir, number); + + if (!(fp = fopen(filename, "r"))) + { + PERROR("Cannot open phonebook: \"%s\"\n", filename); + return(0); + } + + line=0; + while((fgets(buffer, sizeof(buffer), fp))) + { + line++; + buffer[sizeof(buffer)-1] = '\0'; + if (buffer[0]) buffer[strlen(buffer)-1] = '\0'; + p = buffer; + + while(*p <= 32) /* skip spaces */ + { + if (*p == 0) + break; + p++; + } + if (*p==0 || *p=='#') /* ignore comments and empty line */ + continue; + + abbrev[0]=0; + phone[0]=0; + name[0]=0; + + i=0; /* read abbrev */ + while(*p > 32) + { + if (i+1 >= sizeof(abbrev)) + { + PERROR_RUNTIME("Error in %s (line %d): abbrev too long.\n",filename,line); + break; + } + abbrev[i+1] = '\0'; + abbrev[i++] = *p++; + } + + while(*p <= 32) /* skip spaces */ + { + if (*p == 0) + break; + p++; + } + + if (*p!=0 && *p!='#') /* phone */ + { + i=0; /* read phone */ + while(*p > 32) + { + if (i+1 >= sizeof(phone)) + { + PERROR_RUNTIME("Error in %s (line %d): phone too long.\n",filename,line); + break; + } + phone[i+1] = '\0'; + phone[i++] = *p++; + } + while(*p <= 32) /* skip spaces */ + { + if (*p == 0) + break; + p++; + } + } + + if (*p!=0 && *p!='#') /* name */ + { + i=0; /* read name */ + while(*p > 0) + { + if (i+1 >= sizeof(name)) + { + PERROR_RUNTIME("Error in %s (line %d): name too long.\n",filename,line); + break; + } + name[i+1] = '\0'; + name[i++] = *p++; + } + } + + if (*abbrev_pointer) + { + if (!strncmp(*abbrev_pointer, abbrev, strlen(*abbrev_pointer))) + { + /* may match if abbreviation is longer */ + found_if_more_digits = 1; + } + if (!!strcasecmp(*abbrev_pointer, abbrev)) + continue; + } + if (*phone_pointer) + if (!!strcasecmp(*phone_pointer, phone)) + continue; + if (*name_pointer) + if (!!strcasecmp(*name_pointer, name)) + continue; + + found = 1; + break; /* found entry */ + } + + if (fp) fclose(fp); + + if (found) + { + *abbrev_pointer = abbrev; + *phone_pointer = phone; + *name_pointer = name; + } + + if (found == 0) + { + if (found_if_more_digits) + found = -1; + } + return(found); +} + +/* parsing secrets file + * + * 'number' specifies the externsion number, not the caller id + * 'remote_id' specifies the dialed number, or the caller id for incoming calls + * the result is the auth, crypt and key string, and 1 is returned. + * on failure or not matching number, the 0 is returned + */ +int parse_secrets(char *number, char *remote_id, char **auth_pointer, char **crypt_pointer, char **key_pointer) +{ + FILE *fp=NULL; + char filename[256]; + char *p; + char remote[128]; + static char auth[64], crypt[64], key[4096]; + unsigned int line,i; + char buffer[4096]; + int found = 0; + + SPRINT(filename, "%s/%s/%s/secrets", INSTALL_DATA, options.extensions_dir, number); + + if (!(fp = fopen(filename, "r"))) + { + PERROR("Cannot open secrets: \"%s\"\n", filename); + return(0); + } + + line=0; + while((fgets(buffer, sizeof(buffer), fp))) + { + line++; + buffer[sizeof(buffer)-1] = '\0'; + if (buffer[0]) buffer[strlen(buffer)-1] = '\0'; + p = buffer; + + while(*p <= 32) /* skip spaces */ + { + if (*p == 0) + break; + p++; + } + if (*p==0 || *p=='#') /* ignore comments and empty line */ + continue; + + remote[0]=0; + auth[0]=0; + crypt[0]=0; + key[0]=0; + + i=0; /* read auth */ + while(*p > 32) + { + if (i+1 >= sizeof(remote)) + { + PERROR_RUNTIME("Error in %s (line %d): remote too long.\n",filename,line); + break; + } + remote[i+1] = '\0'; + remote[i++] = *p++; + } + + while(*p <= 32) /* skip spaces */ + { + if (*p == 0) + break; + p++; + } + + if (*p!=0 && *p!='#') /* auth */ + { + i=0; /* read auth */ + while(*p > 32) + { + if (i+1 >= sizeof(auth)) + { + PERROR_RUNTIME("Error in %s (line %d): auth too long.\n",filename,line); + break; + } + auth[i+1] = '\0'; + auth[i++] = *p++; + } + while(*p <= 32) /* skip spaces */ + { + if (*p == 0) + break; + p++; + } + } + + if (*p!=0 && *p!='#') /* crypt */ + { + i=0; /* read crypt */ + while(*p > 32) + { + if (i+1 >= sizeof(crypt)) + { + PERROR_RUNTIME("Error in %s (line %d): crypt too long.\n",filename,line); + break; + } + crypt[i+1] = '\0'; + crypt[i++] = *p++; + } + while(*p <= 32) /* skip spaces */ + { + if (*p == 0) + break; + p++; + } + } + + if (*p!=0 && *p!='#') /* key */ + { + i=0; /* read key */ + while(*p > 0) + { + if (i+1 >= sizeof(key)) + { + PERROR_RUNTIME("Error in %s (line %d): key too long.\n",filename,line); + break; + } + key[i+1] = '\0'; + key[i++] = *p++; + } + } +//printf("COMPARING: '%s' with '%s' %s %s %s\n", remote_id, remote, auth, crypt, key); + + if (!!strcasecmp(remote, remote_id)) + continue; + + found = 1; + break; /* found entry */ + } + + if (fp) fclose(fp); + + if (found) + { + *auth_pointer = auth; + *crypt_pointer = crypt; + *key_pointer = key; + } + + return(found); +} + +/* parse directory + * + * the caller id is given and the name is returned. if the name is not found, + * NULL is returned. + * on success a 1 is returned and the pointers of elements are set to the + * result. + */ +char *parse_directory(char *number, int type) +{ + FILE *fp=NULL; + char filename[256]; + char *p; + static char phone[32], name[64]; + unsigned int line,i; + char buffer[256]; + int found = 0; + + SPRINT(filename, "%s/directory.list", INSTALL_DATA); + + if (!(fp = fopen(filename, "r"))) + { + PERROR("Cannot open directory: \"%s\"\n", filename); + return(NULL); + } + + line=0; + while((fgets(buffer, sizeof(buffer), fp))) + { + line++; + buffer[sizeof(buffer)-1] = '\0'; + if (buffer[0]) buffer[strlen(buffer)-1] = '\0'; + p = buffer; + + while(*p <= 32) /* skip spaces */ + { + if (*p == 0) + break; + p++; + } + if (*p==0 || *p=='#') /* ignore comments and empty line */ + continue; + + phone[0]=0; + name[0]=0; + + i=0; /* read number */ + while(*p > 32) + { + if (i+1 >= sizeof(phone)) + { + PERROR_RUNTIME("Error in %s (line %d): number too long.\n",filename,line); + break; + } + phone[i+1] = '\0'; + phone[i++] = *p++; + } + + while(*p <= 32) /* skip spaces */ + { + if (*p == 0) + break; + p++; + } + + i=0; /* read name */ + while(*p >= 32) + { + if (i+1 >= sizeof(name)) + { + PERROR_RUNTIME("Error in %s (line %d): name too long.\n",filename,line); + break; + } + name[i+1] = '\0'; + name[i++] = *p++; + } + + if (phone[0] == 'i') + { + if (type != INFO_NTYPE_INTERNATIONAL) + continue; + if (!strcmp(number, phone+1)) + { + found = 1; + break; + } + continue; + } + if (phone[0] == 'n') + { + if (type != INFO_NTYPE_NATIONAL) + continue; + if (!strcmp(number, phone+1)) + { + found = 1; + break; + } + continue; + } + if (phone[0] == 's') + { + if (type==INFO_NTYPE_NATIONAL || type==INFO_NTYPE_INTERNATIONAL) + continue; + if (!strcmp(number, phone+1)) + { + found = 1; + break; + } + continue; + } + if (!strncmp(phone, options.international, strlen(options.international))) + { + if (type != INFO_NTYPE_INTERNATIONAL) + continue; + if (!strcmp(number, phone+strlen(options.international))) + { + found = 1; + break; + } + continue; + } + if (!options.national[0]) /* no national prefix */ + { + if (type == INFO_NTYPE_INTERNATIONAL) + continue; + if (!strcmp(number, phone)) + { + found = 1; + break; + } + continue; + } + if (!strncmp(phone, options.national, strlen(options.national))) + { + if (type != INFO_NTYPE_NATIONAL) + continue; + if (!strcmp(number, phone+strlen(options.national))) + { + found = 1; + break; + } + continue; + } + if (type==INFO_NTYPE_NATIONAL || type==INFO_NTYPE_INTERNATIONAL) + continue; + if (!strcmp(number, phone)) + { + found = 1; + break; + } + } + + if (fp) fclose(fp); + + if (found) + return(name); + else + return(NULL); +} + +/* parse callbackauth + * + * searches for the given caller id and returns 1 == true or 0 == false + */ +int parse_callbackauth(char *number, struct caller_info *callerinfo) +{ + FILE *fp = NULL; + char filename[256]; + char *p; + unsigned int line,i; + char buffer[256]; + static char caller_type[32], caller_id[64]; + int found = 0; + + SPRINT(filename, "%s/%s/%s/callbackauth", INSTALL_DATA, options.extensions_dir, number); + + if (!(fp = fopen(filename, "r"))) + { + PDEBUG(DEBUG_EPOINT, "Cannot open callbackauth: \"%s\"\n", filename); + return(0); + } + + line=0; + while((fgets(buffer, sizeof(buffer), fp))) + { + line++; + buffer[sizeof(buffer)-1] = '\0'; + if (buffer[0]) buffer[strlen(buffer)-1] = '\0'; + p = buffer; + + while(*p <= 32) /* skip spaces */ + { + if (*p == 0) + break; + p++; + } + if (*p==0 || *p=='#') /* ignore comments and empty line */ + continue; + + caller_type[0]=0; + caller_id[0]=0; + + i=0; /* read caller_type */ + while(*p > 32) + { + if (i+1 >= sizeof(caller_type)) + { + PERROR_RUNTIME("Error in %s (line %d): caller_type too long.\n",filename,line); + break; + } + caller_type[i+1] = '\0'; + caller_type[i++] = *p++; + } + + while(*p <= 32) /* skip spaces */ + { + if (*p == 0) + break; + p++; + } + + if (*p!=0 && *p!='#') /* caller_id */ + { + i=0; /* read caller_id */ + while(*p > 32) + { + if (i+1 >= sizeof(caller_id)) + { + PERROR_RUNTIME("Error in %s (line %d): caller_id too long.\n",filename,line); + break; + } + caller_id[i+1] = '\0'; + caller_id[i++] = *p++; + } + // ignoring more + } + + if (caller_type[0]=='\0' && caller_id[0]=='\0') + continue; + + if (atoi(caller_type) != callerinfo->ntype) + continue; + + if (!!strcmp(caller_id, callerinfo->id)) + continue; + + found = 1; + break; /* found entry */ + } + + if (fp) fclose(fp); + + if (found) + return(1); + return(0); +} + + +/* append line to callbackauth + * + */ +void append_callbackauth(char *number, struct caller_info *callerinfo) +{ + FILE *fp = NULL; + char filename[256]; + + SPRINT(filename, "%s/%s/%s/callbackauth", INSTALL_DATA, options.extensions_dir, number); + + if (callerinfo->id[0]=='\0') + { + PERROR("caller has no id.\n"); + return; + } + if (!(fp = fopen(filename, "a"))) + { + PERROR("Cannot open callbackauth: \"%s\"\n", filename); + return; + } + + fprintf(fp, "%6d %s\n", callerinfo->ntype, callerinfo->id); + + fclose(fp); + +} + + diff --git a/extension.h b/extension.h new file mode 100644 index 0000000..c59bb6d --- /dev/null +++ b/extension.h @@ -0,0 +1,187 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** extension header file ** +** ** +\*****************************************************************************/ + +/* display of callerid on internal numbers */ + +enum { + DISPLAY_CID_ASIS, /* with type as defined */ + DISPLAY_CID_NUMBER, /* "5551212" */ + DISPLAY_CID_ABBREVIATION, /* "05" */ + DISPLAY_CID_NAME, /* "Axel" */ + DISPLAY_CID_NAME_NUMBER, /* "Axel 5551212" */ + DISPLAY_CID_NUMBER_NAME, /* "5551212 Axel" */ + DISPLAY_CID_ABBREV_NUMBER, /* "05 5551212" */ + DISPLAY_CID_ABBREV_NAME, /* "05 Axel" */ + DISPLAY_CID_ABBREV_NUMBER_NAME, /* "05 5551212 Axel" */ + DISPLAY_CID_ABBREV_NAME_NUMBER, /* "05 Axel 5551212" */ +}; +enum { + DISPLAY_CID_INTERNAL_OFF, /* "20" */ + DISPLAY_CID_INTERNAL_ON, /* "Intern 20" */ +}; + +/* display of clear causes using display messages */ + +enum { + DISPLAY_CAUSE_NONE, + DISPLAY_CAUSE_ENGLISH, /* "34 - no channel" */ + DISPLAY_CAUSE_GERMAN, /* "34 - kein Kanal" */ + DISPLAY_LOCATION_ENGLISH, /* "34 - Network (Remote)" */ + DISPLAY_LOCATION_GERMAN, /* "34 - Vermittlung (Gegenstelle)" */ + DISPLAY_CAUSE_NUMBER, /* "Cause 34" */ +}; + +/* clip */ + +enum { + CLIP_ASIS, /* use colp as presented by caller */ + CLIP_HIDE, /* use extension's caller id */ +}; + +/* colp */ + +enum { + COLP_ASIS, /* use colp as presented by called */ + COLP_HIDE, /* use extension's caller id */ + COLP_FORCE, /* use colp even if called dosn't provide or allow */ +}; + +/* codec to use */ + +enum { + CODEC_OFF, /* record wave off */ + CODEC_MONO, /* record wave mono */ + CODEC_STEREO, /* record wave stereo */ + CODEC_8BIT, /* record wave mono 8bit */ + CODEC_LAW, /* record LAW */ +}; + +/* VBOX mode */ + +enum { + VBOX_MODE_NORMAL, /* normal mode: send announcement, then record */ + VBOX_MODE_PARALLEL, /* parallel mode: send announcement and record during announcement */ + VBOX_MODE_ANNOUNCEMENT, /* announcement mode: send announcement and disconnect */ +}; + +/* VBOX display */ + +enum { + VBOX_DISPLAY_BRIEF, /* parallel mode: send announcement and record during announcement */ + VBOX_DISPLAY_DETAILED, /* announcement mode: send announcement and disconnect */ + VBOX_DISPLAY_OFF, /* normal mode: send announcement, then record */ +}; + +/* VBOX language */ + +enum { + VBOX_LANGUAGE_ENGLISH, /* display and announcements are in english */ + VBOX_LANGUAGE_GERMAN, /* display and announcements are in german */ +}; + +/* dsptones */ + +enum { + DSP_NONE, + DSP_AMERICAN, + DSP_GERMAN, + DSP_OLDGERMAN, +}; + + +/* extensions + * + * extensions are settings saved at //settings + * they carry all information and permissions about an extension + * they will be loaded when needed and saved when changed + */ + +struct extension { + char name[16]; + char prefix[32]; + char next[32]; /* next number to dial when pickup (temp prefix) */ + char alarm[32]; + char cfb[256]; + char cfu[256]; + char cfnr[256]; + int cfnr_delay; + int change_forward; + char cfp[256]; + char interfaces[128]; + char callerid[32]; + int callerid_type; + int callerid_present; + char id_next_call[32]; + int id_next_call_type; + int id_next_call_present; + int change_callerid; + int clip; /* how to present caller id on forwarded calls */ + int colp; /* how to present called line id on forwarded calls */ + char clip_prefix[32]; /* prefix for screening incomming clip */ + int keypad; /* support keypad for call control */ + int centrex; /* present name of caller/called on internal extension */ + int anon_ignore; /* ignore anonymouse calls */ + int rights; + int delete_ext; /* delete function for external dialing */ + int noknocking; /* deny knocking of incoming call */ + char last_out[MAX_REMEMBER][64]; /* numbers to redail */ + char last_in[MAX_REMEMBER][64]; /* numbers to reply */ + int txvol; + int rxvol; + int display_cause; /* clear cause using display message */ + int display_ext; /* display external caller ids */ + int display_int; /* display internal caller ids */ + int display_voip; /* display h323 caller ids */ + int display_fake; /* display fake caller ids */ + int display_anon; /* display anonymouse caller ids */ + int display_menu; /* display menu */ + int display_dialing; /* display interpreted digits while dialing */ + int display_name; /* display caller's name if available (CNIP) */ + char tones_dir[64]; /* directory of all tones/patterns */ + int record; /* SEE RECORD_* */ + char password[64]; /* callback / login password */ + + int vbox_mode; /* see VBOX_MODE_* */ + int vbox_codec; /* see CODEC_* */ + int vbox_time; /* time to recorde, 0=infinite */ + int vbox_display; /* see VBOX_DISPLAY_* */ + int vbox_language; /* see VBOX_LANGUAGE_* */ + char vbox_email[128]; /* send mail if given */ + int vbox_email_file; /* set, if also the audio fille will be attached */ + int vbox_free; /* if vbox shall connect after announcment */ + + int tout_setup; + int tout_dialing; + int tout_proceeding; + int tout_alerting; + int tout_disconnect; +// int tout_hold; +// int tout_park; + int own_setup; + int own_proceeding; + int own_alerting; + int own_cause; + + int facility; /* must be set to forward facility to terminal */ + int datacall; /* data calls are handled as voice calls */ + int no_seconds; /* don't include seconds in the connect message */ +}; + +int read_extension(struct extension *ext, char *number); +int write_extension(struct extension *ext, char *number); +int write_log(char *number, char *callerid, char *calledid, time_t start, time_t stop, int aoce, int cause, int location); +int parse_phonebook(char *number, char **abbrev_pointer, char **phone_pointer, char **name_pointer); +int parse_secrets(char *number, char *remote_id, char **auth_pointer, char **crypt_pointer, char **key_pointer); +char *parse_directory(char *number, int type); +int parse_callbackauth(char *number, struct caller_info *callerinfo); +void append_callbackauth(char *number, struct caller_info *callerinfo); + + diff --git a/genext.c b/genext.c new file mode 100644 index 0000000..f26b8f8 --- /dev/null +++ b/genext.c @@ -0,0 +1,148 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** generate extension ** +** ** +\*****************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "main.h" + +int memuse = 0; +int mmemuse = 0; +int cmemuse = 0; +int ememuse = 0; +int pmemuse = 0; +int classuse = 0; +int fduse = 0; +int fhuse = 0; +struct isdn_cause isdn_cause[128]; +struct isdn_location isdn_location[16]; + +void _printdebug(const char *function, int line, unsigned long mask, const char *fmt, ...) +{ +} + +void _printerror(const char *function, int line, const char *fmt, ...) +{ + char buffer[4096]; + va_list args; + + va_start(args,fmt); + VUNPRINT(buffer,sizeof(buffer)-1,fmt,args); + buffer[sizeof(buffer)-1]=0; + va_end(args); + + fprintf(stderr, "%s", buffer); +} + +int main(int argc, char *argv[]) +{ + struct extension ext; + char pathname[256]; + FILE *fp; + + if (!read_options()) + { + PERROR("Failed to read options.conf\n"); + return(-1); + } + + if (argc != 4) + { + printf("Usage: %s \n\n", argv[0]); + printf("extension: any number for the extension (e.g 200)\n"); + printf("interfaces: internal interface(es) to reach extension (seperated by commas. e.g Int1,Int2)\n"); + printf("callerid: normal undefined called is (use what your telco assigned you)\n"); + return(0); + } + + SPRINT(pathname, "%s/%s/%s", INSTALL_DATA, options.extensions_dir, argv[1]); + if (mkdir(pathname, 0755) < 0) + { + if (errno == EEXIST) + PERROR("Extension's directory already exists. Nothing done!\n"); + else PERROR("Cannot open extension's directory '%s'.\n", pathname); + return(-1); + } + + memset(&ext, 0, sizeof(ext)); + ext.rights = 4; + ext.tout_setup = 120; + ext.tout_dialing = 120; + ext.tout_proceeding = 120; + ext.tout_alerting = 120; + ext.tout_disconnect = 120; +// ext.tout_hold = 900; +// ext.tout_park = 900; + ext.cfnr_delay = 20; + ext.vbox_codec = CODEC_MONO; + UCPY(ext.interfaces, argv[2]); + UCPY(ext.callerid, argv[3]); + ext.callerid_present = INFO_PRESENT_ALLOWED; + ext.callerid_type = INFO_NTYPE_UNKNOWN; + ext.change_forward = 1; + ext.facility = 1; + write_extension(&ext, argv[1]); + + SPRINT(pathname, "%s/%s/%s/phonebook", INSTALL_DATA, options.extensions_dir, argv[1]); + if (!(fp = fopen(pathname, "w"))) + { + PERROR("Failed to write phonebook example '%s'.\n", pathname); + return(-1); + } else + { + fprintf(fp, "# fromat: []\n"); + fprintf(fp, "# The shotcut may have any number of digits. \n"); + fprintf(fp, "# The phone number must include the dialing code for external, internal or\n"); + fprintf(fp, "# other type of dialing. \n"); + fprintf(fp, "# The name must not be in quotes. All 2 or 3 attributes must be seperated by\n"); + fprintf(fp, "# white space(s) and/or tab(s)\n"); + fprintf(fp, "# Empty lines and lines starting with '#' will be ignored.\n"); + fprintf(fp, "\n"); + fprintf(fp, "0 008003301000 German Telekom Service\n"); + fprintf(fp, "10 011880 Directory Service Telegate\n"); + fprintf(fp, "11 011833 Directory Service DTAG\n"); + fprintf(fp, "12 011811 Directory Service Fred\n"); + fclose(fp); + } + + SPRINT(pathname, "%s/%s/%s/secrets", INSTALL_DATA, options.extensions_dir, argv[1]); + if (!(fp = fopen(pathname, "w"))) + { + PERROR("Failed to write secrets example '%s'.\n", pathname); + return(-1); + } else + { + fprintf(fp, "# Format: []\n"); + fprintf(fp, "# The remote number must match the dialed number for outgoing calls.\n"); + fprintf(fp, "# The remote number must match the caller id for incoming calls.\n"); + fprintf(fp, "# The caller id must include the prefix digits as received.\n"); + fprintf(fp, "# The key exchange method must be given: e.g 'manual'\n"); + fprintf(fp, "# The cypher method must be given: e.g 'blowfish'\n"); + fprintf(fp, "# The key must be a string of characters (ASCII) or 0xXXXXXX...\n"); + fprintf(fp, "# All 2 or 3 attributes must be seperated by white space(s) and/or tab(s)\n"); + fprintf(fp, "# Empty lines and lines starting with '#' will be ignored.\n\n"); + fprintf(fp, "###############################################################################\n"); + fprintf(fp, "## REFER TO THE DOCUMENTATION FOR DETAILS ON ENCRYPTION AND KEYS! ##\n"); + fprintf(fp, "###############################################################################\n"); + fprintf(fp, "\n"); + fprintf(fp, "# This examples explains the format, NEVER USE IT, it would be dumb!\n"); + fprintf(fp, "021250993 manual blowfish 0x012345678\n"); + fclose(fp); + } + printf("Extension %s created at %s/%s/%s/.\n", argv[1], INSTALL_DATA, options.extensions_dir, argv[1]); + + return(0); +} diff --git a/genrc.c b/genrc.c new file mode 100644 index 0000000..7b69cca --- /dev/null +++ b/genrc.c @@ -0,0 +1,268 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** generate start/stop script ** +** ** +\*****************************************************************************/ + +#include +#include +#include +#include +#include "save.h" + +char mode[256]; +int type[256]; +int ptp[256]; +int port[256]; +char name[256]; +int coredebug=0, carddebug=0, l1debug=0, l2debug=0, l3debug=0, dspdebug=0; +int lawopt=0; + +static struct cards { + char *card; + char *module; + int ntmode; + int isac; + int ports; +} cards[] = { + { "AVM Fritz PCI (PNP)", "avmfritz", 0, 1, 1}, + { "HFC PCI (Cologne Chip)", "hfcpci", 1, 0, 1}, + { "HFC-4S 4 S/T Ports (Cologne Chip)", "hfcmulti", 1, 0, 4}, + { "HFC-8S 8 S/T Ports (Cologne Chip)", "hfcmulti", 1, 0, 8}, + { "HFC-E1 1 E1 Port (Cologne Chip)", "hfcmulti", 1, 0, 1}, + { "HFC-S USB (Cologne Chip)", "hfcsusb", 1, 0, 1}, + { "HFC-S MINI (Cologne Chip)", "hfcsmini", 1, 0, 1}, + { "XHFC (Cologne Chip)", "xhfc", 1, 0, 1}, + { "Sedlbaur FAX", "sedlfax", 0, 1, 1}, + { "Winbond 6692 PCI", "w6692pci", 0, 0, 1}, + { NULL, NULL, 0, 0}, +}; + +int main(void) +{ + FILE *fp; + int i = 0, j, jj, n, anyte = 0, remove_isac; + char input[256]; + char protocol[1024], layermask[1024], types[256]; + + printf("\n\nThis program generates a script, which is used to start/stop/restart mISDN\n"); + printf("driver. All configuration of cards is done for using with the PBX.\n"); + + while(i < (int)sizeof(mode)) /* number of cards */ + { + moreports: + do + { + printf("\nEnter mode of isdn port #%d. Should it run in NT-mode (for internal\nphones), or in TE-mode (for external lines)? If you do not like to add more\ncards, say 'done'.\n[nt | te | done]: ", i+1); fflush(stdout); + scanf("%s", input); + } while (input[0]!='t' && input[0]!='n' && input[0]!='d'); + mode[i] = input[0]; + if (mode[i] == 'd') + break; + ptp[i] = 0; + do + { + printf("\nIs your port #%d connected to point-to-multipoint line/phone, which supports multiple\ntelephones (Mehrgerteanschluss) OR is it a point-to-point link which is used\nfor PBX and supports extension dialing (Anlagenanschluss)?\n[ptp | ptm]: ", i+1); fflush(stdout); + scanf("%s", input); + } while (!!strcmp(input,"ptp") && !!strcmp(input,"ptm")); + ptp[i] = (input[2]=='p')?1:0; + anyte = 1; + + if (!i) + { + askcard: + do + { + printf("\nSelect driver of ISDN port #%d.\n\n", i+1); + jj = 0; + while(cards[jj].card) + { + if (cards[jj].ntmode || mode[i]!='n') + printf(" (%d) %s\n", jj+1, cards[jj].card); + jj++; + } + printf("\n%sSelect card number[1-n]: ", (mode[i]=='n')?"Your card will run in NT-mode. The shown cards are capable of providing\nhardware layer for NT-mode.\n":""); fflush(stdout); + scanf("%s", input); + } while (atoi(input) <= 0); + type[i] = atoi(input); + port[i] = 1; + j = 0; + while(j < jj) + { + if (j+1==type[i] && (cards[j].ntmode || mode[i]!='n')) + break; + j++; + } + if (j == jj) + { + printf("\n\nWrong selection, please try again.\n"); + goto askcard; + } + } else + if (cards[type[i-1]-1].ports == port[i-1]) + goto askcard; + else { + type[i] = type[i-1]; + port[i] = port[i-1]+1; + printf("\nUsing port %d of card '%s'.", port[i], cards[type[i]-1].card); + } + + printf("\n\n\nSummary: Port #%d of type %s will run in %s-mode and %s-mode.\n", i+1, cards[type[i]-1].card, (mode[i]=='n')?"NT":"TE", (ptp[i])?"point-to-point":"point-to-multipoint"); + + i++; + } + + if (!i) + { + printf("\nNo ports/cards defined!\n"); + return(-1); + } + if (cards[type[i-1]-1].ports > port[i-1]) + { + printf("\nNot all ports for the last card are defined. Please do that even if they will be not\nused! Select 'NT-mode' for these unused ports.\n"); + goto moreports; + } + + printf("\nEnter LAW audio mode. For a-LAW (default), just enter 0. For u-LAW enter 1.\n[0..n | 0xn]: "); fflush(stdout); + scanf("%s", input); + lawopt = strtoul(input, NULL, 0); + printf("\nEnter debugging flags of mISDN core. For no debug, just enter 0.\n[0..n | 0xn]: "); fflush(stdout); + scanf("%s", input); + coredebug = strtoul(input, NULL, 0); + printf("\nEnter debugging flags of cards. For no debug, just enter 0.\n[0..n | 0xn]: "); fflush(stdout); + scanf("%s", input); + carddebug = strtoul(input, NULL, 0); + printf("\nEnter l1 debugging flags of driver. For no debug, just enter 0.\n[0..n | 0xn]: "); fflush(stdout); + scanf("%s", input); + l1debug = strtoul(input, NULL, 0); + printf("\nEnter l2 debugging flags of driver. For no debug, just enter 0.\n[0..n | 0xn]: "); fflush(stdout); + scanf("%s", input); + l2debug = strtoul(input, NULL, 0); + printf("\nEnter l3 debugging flags of driver. For no debug, just enter 0.\n[0..n | 0xn]: "); fflush(stdout); + scanf("%s", input); + l3debug = strtoul(input, NULL, 0); + printf("\nEnter dsp debugging flags of driver. For no debug, just enter 0.\n[0..n | 0xn]: "); fflush(stdout); + scanf("%s", input); + dspdebug = strtoul(input, NULL, 0); + + n = i; + + printf("\nWhere do you like to load the modules from, enter 0 for default, 1 for\n'/usr/local/pbx/modules/' or the full path.\n[0 | 1 | ]: "); fflush(stdout); + scanf("%s", input); + if (!strcmp(input, "0")) + SCPY(input, ""); + if (!strcmp(input, "1")) + SCPY(input, "/usr/local/pbx/modules"); + if (input[0]) if (input[strlen(input)-1] != '/') + SCAT(input, "/"); + + printf("\n\nFinally tell me where to write the mISDN rc file.\Enter the name 'mISDN' for current directory.\nYou may want to say '/usr/local/pbx/mISDN' or '/etc/rc.d/mISDN'\n: "); fflush(stdout); + scanf("%s", name); + if (!(fp=fopen(name, "w"))) + { + fprintf(stderr, "\nError: Failed to open '%s', try again.\n", name); + exit(-1); + } + fprintf(fp, "# rc script for mISDN driver\n\n"); + fprintf(fp, "case \"$1\" in\n"); + fprintf(fp, "\tstart|--start)\n"); + fprintf(fp, "\t\t%s %smISDN_core%s debug=0x%x\n", input[0]?"insmod -f":"modprobe", input, input[0]?".ko":"", coredebug); + if (anyte) + { + fprintf(fp, "\t\t%s %smISDN_l1%s debug=0x%x\n", input[0]?"insmod -f":"modprobe", input, input[0]?".ko":"", l1debug); + fprintf(fp, "\t\t%s %smISDN_l2%s debug=0x%x\n", input[0]?"insmod -f":"modprobe", input, input[0]?".ko":"", l2debug); + fprintf(fp, "\t\t%s %sl3udss1%s debug=0x%x\n", input[0]?"insmod -f":"modprobe", input, input[0]?".ko":"", l3debug); + } + fprintf(fp, "\t\t%s %smISDN_dsp%s debug=0x%x options=0x%x\n", input[0]?"insmod -f":"modprobe", input, input[0]?".ko":"", dspdebug, lawopt); + j = 0; + while(cards[j].card) + { + protocol[0] = layermask[0] = types[0] = '\0'; + i = 0; + while(i < n) + { + if (j+1 == type[i]) + { + if (!strcmp(cards[j].module, "hfcmulti") && port[i]==1) + UPRINT(strchr(types,'\0'), "0x%x,", cards[j].ports+((lawopt)?0x100:0)+0x200); + UPRINT(strchr(protocol,'\0'), "0x%x,", ((mode[i]=='n')?0x12:0x2) + (ptp[i]?0x20:0x0)); + UPRINT(strchr(layermask,'\0'), "0x%x,", (mode[i]=='n')?0x3:0x0f); + } + i++; + } + if (protocol[0]) + { + protocol[strlen(protocol)-1] = '\0'; + layermask[strlen(layermask)-1] = '\0'; + if (types[0]) + { + types[strlen(types)-1] = '\0'; + fprintf(fp, "\t\t%s %s%s%s type=%s protocol=%s layermask=%s debug=0x%x\n", input[0]?"insmod -f":"modprobe", input, cards[j].module, input[0]?".ko":"", types, protocol, layermask, carddebug); + } else + fprintf(fp, "\t\t%s %s%s%s protocol=%s layermask=%s debug=0x%x\n", input[0]?"insmod -f":"modprobe", input, cards[j].module, input[0]?".ko":"", protocol, layermask, carddebug); + } + j++; + } + fprintf(fp, "\t\tsleep 1\n"); + fprintf(fp, "\t\t;;\n\n"); + fprintf(fp, "\tstop|--stop)\n"); + remove_isac = 0; + j = 0; + while(cards[j].card) + { + protocol[0] = 0; + i = 0; + while(i < n) + { + if (j+1 == type[i]) + { + protocol[0] = 1; + } + i++; + } + if (protocol[0]) + { + fprintf(fp, "\t\trmmod %s\n", cards[j].module); + if (cards[j].isac) + remove_isac = 1; + } + j++; + } + if (remove_isac) + { + fprintf(fp, "\t\trmmod mISDN_isac\n"); + } + fprintf(fp, "\t\trmmod mISDN_dsp\n"); + if (anyte) + { + fprintf(fp, "\t\trmmod l3udss1\n"); + fprintf(fp, "\t\trmmod mISDN_l2\n"); + fprintf(fp, "\t\trmmod mISDN_l1\n"); + } + fprintf(fp, "\t\trmmod mISDN_core\n"); + fprintf(fp, "\t\t;;\n\n"); + fprintf(fp, "\trestart|--restart)\n"); + fprintf(fp, "\t\tsh $0 stop\n"); + fprintf(fp, "\t\tsleep 2 # some phones will release tei when layer 1 is down\n"); + fprintf(fp, "\t\tsh $0 start\n"); + fprintf(fp, "\t\t;;\n\n"); + fprintf(fp, "\thelp|--help)\n"); + fprintf(fp, "\t\techo \"Usage: $0 {start|stop|restart|help}\"\n"); + fprintf(fp, "\t\texit 0\n"); + fprintf(fp, "\t\t;;\n\n"); + fprintf(fp, "\t*)\n"); + fprintf(fp, "\t\techo \"Usage: $0 {start|stop|restart|help}\"\n"); + fprintf(fp, "\t\texit 2\n"); + fprintf(fp, "\t\t;;\n\n"); + fprintf(fp, "esac\n"); + fclose(fp); + + printf("\nFile '%s' is written to the current directory.\n", name); +} + + diff --git a/gentones.c b/gentones.c new file mode 100644 index 0000000..c7522fd --- /dev/null +++ b/gentones.c @@ -0,0 +1,379 @@ + +/* isdn tone generation + by jolly +*/ + +#include +#include +#include +#include + + +/* ulaw -> signed 16-bit */ +static short isdn_audio_ulaw_to_s16[] = +{ + 0x8284, 0x8684, 0x8a84, 0x8e84, 0x9284, 0x9684, 0x9a84, 0x9e84, + 0xa284, 0xa684, 0xaa84, 0xae84, 0xb284, 0xb684, 0xba84, 0xbe84, + 0xc184, 0xc384, 0xc584, 0xc784, 0xc984, 0xcb84, 0xcd84, 0xcf84, + 0xd184, 0xd384, 0xd584, 0xd784, 0xd984, 0xdb84, 0xdd84, 0xdf84, + 0xe104, 0xe204, 0xe304, 0xe404, 0xe504, 0xe604, 0xe704, 0xe804, + 0xe904, 0xea04, 0xeb04, 0xec04, 0xed04, 0xee04, 0xef04, 0xf004, + 0xf0c4, 0xf144, 0xf1c4, 0xf244, 0xf2c4, 0xf344, 0xf3c4, 0xf444, + 0xf4c4, 0xf544, 0xf5c4, 0xf644, 0xf6c4, 0xf744, 0xf7c4, 0xf844, + 0xf8a4, 0xf8e4, 0xf924, 0xf964, 0xf9a4, 0xf9e4, 0xfa24, 0xfa64, + 0xfaa4, 0xfae4, 0xfb24, 0xfb64, 0xfba4, 0xfbe4, 0xfc24, 0xfc64, + 0xfc94, 0xfcb4, 0xfcd4, 0xfcf4, 0xfd14, 0xfd34, 0xfd54, 0xfd74, + 0xfd94, 0xfdb4, 0xfdd4, 0xfdf4, 0xfe14, 0xfe34, 0xfe54, 0xfe74, + 0xfe8c, 0xfe9c, 0xfeac, 0xfebc, 0xfecc, 0xfedc, 0xfeec, 0xfefc, + 0xff0c, 0xff1c, 0xff2c, 0xff3c, 0xff4c, 0xff5c, 0xff6c, 0xff7c, + 0xff88, 0xff90, 0xff98, 0xffa0, 0xffa8, 0xffb0, 0xffb8, 0xffc0, + 0xffc8, 0xffd0, 0xffd8, 0xffe0, 0xffe8, 0xfff0, 0xfff8, 0x0000, + 0x7d7c, 0x797c, 0x757c, 0x717c, 0x6d7c, 0x697c, 0x657c, 0x617c, + 0x5d7c, 0x597c, 0x557c, 0x517c, 0x4d7c, 0x497c, 0x457c, 0x417c, + 0x3e7c, 0x3c7c, 0x3a7c, 0x387c, 0x367c, 0x347c, 0x327c, 0x307c, + 0x2e7c, 0x2c7c, 0x2a7c, 0x287c, 0x267c, 0x247c, 0x227c, 0x207c, + 0x1efc, 0x1dfc, 0x1cfc, 0x1bfc, 0x1afc, 0x19fc, 0x18fc, 0x17fc, + 0x16fc, 0x15fc, 0x14fc, 0x13fc, 0x12fc, 0x11fc, 0x10fc, 0x0ffc, + 0x0f3c, 0x0ebc, 0x0e3c, 0x0dbc, 0x0d3c, 0x0cbc, 0x0c3c, 0x0bbc, + 0x0b3c, 0x0abc, 0x0a3c, 0x09bc, 0x093c, 0x08bc, 0x083c, 0x07bc, + 0x075c, 0x071c, 0x06dc, 0x069c, 0x065c, 0x061c, 0x05dc, 0x059c, + 0x055c, 0x051c, 0x04dc, 0x049c, 0x045c, 0x041c, 0x03dc, 0x039c, + 0x036c, 0x034c, 0x032c, 0x030c, 0x02ec, 0x02cc, 0x02ac, 0x028c, + 0x026c, 0x024c, 0x022c, 0x020c, 0x01ec, 0x01cc, 0x01ac, 0x018c, + 0x0174, 0x0164, 0x0154, 0x0144, 0x0134, 0x0124, 0x0114, 0x0104, + 0x00f4, 0x00e4, 0x00d4, 0x00c4, 0x00b4, 0x00a4, 0x0094, 0x0084, + 0x0078, 0x0070, 0x0068, 0x0060, 0x0058, 0x0050, 0x0048, 0x0040, + 0x0038, 0x0030, 0x0028, 0x0020, 0x0018, 0x0010, 0x0008, 0x0000 +}; + +/* alaw -> signed 16-bit */ +static short isdn_audio_alaw_to_s16[] = +{ + 0x13fc, 0xec04, 0x0144, 0xfebc, 0x517c, 0xae84, 0x051c, 0xfae4, + 0x0a3c, 0xf5c4, 0x0048, 0xffb8, 0x287c, 0xd784, 0x028c, 0xfd74, + 0x1bfc, 0xe404, 0x01cc, 0xfe34, 0x717c, 0x8e84, 0x071c, 0xf8e4, + 0x0e3c, 0xf1c4, 0x00c4, 0xff3c, 0x387c, 0xc784, 0x039c, 0xfc64, + 0x0ffc, 0xf004, 0x0104, 0xfefc, 0x417c, 0xbe84, 0x041c, 0xfbe4, + 0x083c, 0xf7c4, 0x0008, 0xfff8, 0x207c, 0xdf84, 0x020c, 0xfdf4, + 0x17fc, 0xe804, 0x018c, 0xfe74, 0x617c, 0x9e84, 0x061c, 0xf9e4, + 0x0c3c, 0xf3c4, 0x0084, 0xff7c, 0x307c, 0xcf84, 0x030c, 0xfcf4, + 0x15fc, 0xea04, 0x0164, 0xfe9c, 0x597c, 0xa684, 0x059c, 0xfa64, + 0x0b3c, 0xf4c4, 0x0068, 0xff98, 0x2c7c, 0xd384, 0x02cc, 0xfd34, + 0x1dfc, 0xe204, 0x01ec, 0xfe14, 0x797c, 0x8684, 0x07bc, 0xf844, + 0x0f3c, 0xf0c4, 0x00e4, 0xff1c, 0x3c7c, 0xc384, 0x03dc, 0xfc24, + 0x11fc, 0xee04, 0x0124, 0xfedc, 0x497c, 0xb684, 0x049c, 0xfb64, + 0x093c, 0xf6c4, 0x0028, 0xffd8, 0x247c, 0xdb84, 0x024c, 0xfdb4, + 0x19fc, 0xe604, 0x01ac, 0xfe54, 0x697c, 0x9684, 0x069c, 0xf964, + 0x0d3c, 0xf2c4, 0x00a4, 0xff5c, 0x347c, 0xcb84, 0x034c, 0xfcb4, + 0x12fc, 0xed04, 0x0134, 0xfecc, 0x4d7c, 0xb284, 0x04dc, 0xfb24, + 0x09bc, 0xf644, 0x0038, 0xffc8, 0x267c, 0xd984, 0x026c, 0xfd94, + 0x1afc, 0xe504, 0x01ac, 0xfe54, 0x6d7c, 0x9284, 0x06dc, 0xf924, + 0x0dbc, 0xf244, 0x00b4, 0xff4c, 0x367c, 0xc984, 0x036c, 0xfc94, + 0x0f3c, 0xf0c4, 0x00f4, 0xff0c, 0x3e7c, 0xc184, 0x03dc, 0xfc24, + 0x07bc, 0xf844, 0x0008, 0xfff8, 0x1efc, 0xe104, 0x01ec, 0xfe14, + 0x16fc, 0xe904, 0x0174, 0xfe8c, 0x5d7c, 0xa284, 0x05dc, 0xfa24, + 0x0bbc, 0xf444, 0x0078, 0xff88, 0x2e7c, 0xd184, 0x02ec, 0xfd14, + 0x14fc, 0xeb04, 0x0154, 0xfeac, 0x557c, 0xaa84, 0x055c, 0xfaa4, + 0x0abc, 0xf544, 0x0058, 0xffa8, 0x2a7c, 0xd584, 0x02ac, 0xfd54, + 0x1cfc, 0xe304, 0x01cc, 0xfe34, 0x757c, 0x8a84, 0x075c, 0xf8a4, + 0x0ebc, 0xf144, 0x00d4, 0xff2c, 0x3a7c, 0xc584, 0x039c, 0xfc64, + 0x10fc, 0xef04, 0x0114, 0xfeec, 0x457c, 0xba84, 0x045c, 0xfba4, + 0x08bc, 0xf744, 0x0018, 0xffe8, 0x227c, 0xdd84, 0x022c, 0xfdd4, + 0x18fc, 0xe704, 0x018c, 0xfe74, 0x657c, 0x9a84, 0x065c, 0xf9a4, + 0x0cbc, 0xf344, 0x0094, 0xff6c, 0x327c, 0xcd84, 0x032c, 0xfcd4 +}; + + +unsigned char encode_isdn(short sample, char law) +{ + int best=-1; + int i,diff; + int best_diff; + + i=0; + while(i<256) + { + diff = (law=='u')?isdn_audio_ulaw_to_s16[i]:isdn_audio_alaw_to_s16[i]-sample; +//printf("s16=%d sample%d diff=%d\n",isdn_audio_to_s16[i],sample,diff); + if (diff<0) + diff=0-diff; +//printf("diff=%d\n",diff); + + if (diff 0) + { + if (size>0 && size<8) + { + fclose(wfp); + fprintf(stderr, "Error: Remaining file size %ld not large enough for next chunk.\n",size); + return; + } + fread(buffer,8,1,wfp); + chunk=(buffer[4]) + (buffer[5]<<8) + (buffer[6]<<16) + (buffer[7]<<24); +//printf("DEBUG: size(%ld) - (8+chunk(%ld) = size(%ld)\n", size, chunk, size-chunk-8); + size -= (8+chunk); + if (size < 0) + { + fclose(wfp); + fprintf(stderr, "Error: Chunk '%c%c%c%c' is larger than remainig file size (length=%ld)\n",buffer[0],buffer[1],buffer[2],buffer[3], chunk); + return; + } +// printf("%c%c%c%c lenght=%d\n",buffer[0],buffer[1],buffer[2],buffer[3],chunk); + if (!strncmp((char *)buffer, "fmt ", 4)) + { + if (chunk != 16) + { + fclose(wfp); + fprintf(stderr, "Error: Fmt chunk illegal size.\n"); + return; + } + fread(buffer, chunk, 1, wfp); + fmt = (struct fmt *)buffer; + if (fmt->channels<1 || fmt->channels>2) + { + fclose(wfp); + fprintf(stderr, "Error: Only support one or two channels file.\n"); + return; + } + channels = fmt->channels; + printf("Channels: %d\n", channels); + if (fmt->sample_rate != 8000) + { + fprintf(stderr, "Warning: File has sample rate of %ld.\n", fmt->sample_rate); + } + printf("Sample Rate: %ld\n", fmt->sample_rate); + if (fmt->bits_sample!=8 && fmt->bits_sample!=16) + { + fclose(wfp); + fprintf(stderr, "Error: File has neigher 8 nor 16 bit samples.\n"); + return; + } + bytes = (fmt->bits_sample==16)?2:1; + printf("Bit-Resolution: %d\n", bytes*16-16); + gotfmt = 1; + } else + if (!strncmp((char *)buffer, "data", 4)) + { + if (!gotfmt) + { + fclose(wfp); + fprintf(stderr, "Error: No fmt chunk fount in file.\n"); + return; + } + printf("Length: %ld samples (%ld.%03ld seconds)\n", chunk/bytes/channels, chunk/bytes/channels/8000, ((chunk/bytes/channels)%8000)*1000/8000); + i=0; + if (bytes==2 && channels==1) + { + while(i (signed long)sizeof(buffer)) + { + fread(buffer, sizeof(buffer), 1, wfp); + chunk -= sizeof(buffer); + } + if (chunk) + fread(buffer, chunk, 1, wfp); + } + + } + fclose(wfp); + if (!gotdata) + { + fprintf(stderr, "Error: No data chunk fount in file.\n"); + return; + } + } +} + +int main(int argc, char *argv[]) +{ + FILE *fp; + + if (argc <= 1) + { + usage: + printf("Usage:\n"); + printf("%s wave2alaw \n", argv[0]); + printf("%s wave2ulaw \n", argv[0]); + printf("%s tone2alaw \n", argv[0]); + printf("%s tone2ulaw \n", argv[0]); + printf("Length and fade lengths must be given in samples (8000 samples are one second).\n"); + printf("Tones will append to existing files, wav files don't.\n"); + printf("Frequencies may be given as floating point values.\n"); + return(0); + } + + if (!strcmp(argv[1], "wave2alaw")) + { + if (argc <= 3) + goto usage; + if ((fp=fopen(argv[3],"w"))) + { + write_wav(fp,argv[2],'a'); + fclose(fp); + } else + { + printf("Cannot open isdn file %s\n",argv[3]); + } + } else + if (!strcmp(argv[1], "wave2ulaw")) + { + if (argc <= 3) + goto usage; + if ((fp=fopen(argv[3],"w"))) + { + write_wav(fp,argv[2],'u'); + fclose(fp); + } else + { + printf("Cannot open isdn file %s\n",argv[3]); + } + } else + if (!strcmp(argv[1], "tone2alaw")) + { + if (argc <= 7) + goto usage; + if ((fp=fopen(argv[7],"a"))) + { + write_tone(fp,strtod(argv[2],NULL),strtod(argv[3],NULL),atoi(argv[4]),atoi(argv[5]),atoi(argv[6]),'a'); + fclose(fp); + } else + { + printf("Cannot open isdn file %s\n",argv[7]); + } + + } else + if (!strcmp(argv[1], "tone2ulaw")) + { + if (argc <= 7) + goto usage; + if ((fp=fopen(argv[7],"a"))) + { + write_tone(fp,atoi(argv[2]),atoi(argv[3]),atoi(argv[4]),atoi(argv[5]),atoi(argv[6]),'u'); + fclose(fp); + } else + { + printf("Cannot open isdn file %s\n",argv[7]); + } + } else + goto usage; + + return(0); +} diff --git a/genwave.c b/genwave.c new file mode 100644 index 0000000..d0d024e --- /dev/null +++ b/genwave.c @@ -0,0 +1,197 @@ + +/* isdn 2 wave + by jolly +*/ + +#include +#include +#include + + +/* ulaw -> signed 16-bit */ +static short isdn_audio_ulaw_to_s16[] = +{ + 0x8284, 0x8684, 0x8a84, 0x8e84, 0x9284, 0x9684, 0x9a84, 0x9e84, + 0xa284, 0xa684, 0xaa84, 0xae84, 0xb284, 0xb684, 0xba84, 0xbe84, + 0xc184, 0xc384, 0xc584, 0xc784, 0xc984, 0xcb84, 0xcd84, 0xcf84, + 0xd184, 0xd384, 0xd584, 0xd784, 0xd984, 0xdb84, 0xdd84, 0xdf84, + 0xe104, 0xe204, 0xe304, 0xe404, 0xe504, 0xe604, 0xe704, 0xe804, + 0xe904, 0xea04, 0xeb04, 0xec04, 0xed04, 0xee04, 0xef04, 0xf004, + 0xf0c4, 0xf144, 0xf1c4, 0xf244, 0xf2c4, 0xf344, 0xf3c4, 0xf444, + 0xf4c4, 0xf544, 0xf5c4, 0xf644, 0xf6c4, 0xf744, 0xf7c4, 0xf844, + 0xf8a4, 0xf8e4, 0xf924, 0xf964, 0xf9a4, 0xf9e4, 0xfa24, 0xfa64, + 0xfaa4, 0xfae4, 0xfb24, 0xfb64, 0xfba4, 0xfbe4, 0xfc24, 0xfc64, + 0xfc94, 0xfcb4, 0xfcd4, 0xfcf4, 0xfd14, 0xfd34, 0xfd54, 0xfd74, + 0xfd94, 0xfdb4, 0xfdd4, 0xfdf4, 0xfe14, 0xfe34, 0xfe54, 0xfe74, + 0xfe8c, 0xfe9c, 0xfeac, 0xfebc, 0xfecc, 0xfedc, 0xfeec, 0xfefc, + 0xff0c, 0xff1c, 0xff2c, 0xff3c, 0xff4c, 0xff5c, 0xff6c, 0xff7c, + 0xff88, 0xff90, 0xff98, 0xffa0, 0xffa8, 0xffb0, 0xffb8, 0xffc0, + 0xffc8, 0xffd0, 0xffd8, 0xffe0, 0xffe8, 0xfff0, 0xfff8, 0x0000, + 0x7d7c, 0x797c, 0x757c, 0x717c, 0x6d7c, 0x697c, 0x657c, 0x617c, + 0x5d7c, 0x597c, 0x557c, 0x517c, 0x4d7c, 0x497c, 0x457c, 0x417c, + 0x3e7c, 0x3c7c, 0x3a7c, 0x387c, 0x367c, 0x347c, 0x327c, 0x307c, + 0x2e7c, 0x2c7c, 0x2a7c, 0x287c, 0x267c, 0x247c, 0x227c, 0x207c, + 0x1efc, 0x1dfc, 0x1cfc, 0x1bfc, 0x1afc, 0x19fc, 0x18fc, 0x17fc, + 0x16fc, 0x15fc, 0x14fc, 0x13fc, 0x12fc, 0x11fc, 0x10fc, 0x0ffc, + 0x0f3c, 0x0ebc, 0x0e3c, 0x0dbc, 0x0d3c, 0x0cbc, 0x0c3c, 0x0bbc, + 0x0b3c, 0x0abc, 0x0a3c, 0x09bc, 0x093c, 0x08bc, 0x083c, 0x07bc, + 0x075c, 0x071c, 0x06dc, 0x069c, 0x065c, 0x061c, 0x05dc, 0x059c, + 0x055c, 0x051c, 0x04dc, 0x049c, 0x045c, 0x041c, 0x03dc, 0x039c, + 0x036c, 0x034c, 0x032c, 0x030c, 0x02ec, 0x02cc, 0x02ac, 0x028c, + 0x026c, 0x024c, 0x022c, 0x020c, 0x01ec, 0x01cc, 0x01ac, 0x018c, + 0x0174, 0x0164, 0x0154, 0x0144, 0x0134, 0x0124, 0x0114, 0x0104, + 0x00f4, 0x00e4, 0x00d4, 0x00c4, 0x00b4, 0x00a4, 0x0094, 0x0084, + 0x0078, 0x0070, 0x0068, 0x0060, 0x0058, 0x0050, 0x0048, 0x0040, + 0x0038, 0x0030, 0x0028, 0x0020, 0x0018, 0x0010, 0x0008, 0x0000 +}; + +/* alaw -> signed 16-bit */ +static short isdn_audio_alaw_to_s16[] = +{ + 0x13fc, 0xec04, 0x0144, 0xfebc, 0x517c, 0xae84, 0x051c, 0xfae4, + 0x0a3c, 0xf5c4, 0x0048, 0xffb8, 0x287c, 0xd784, 0x028c, 0xfd74, + 0x1bfc, 0xe404, 0x01cc, 0xfe34, 0x717c, 0x8e84, 0x071c, 0xf8e4, + 0x0e3c, 0xf1c4, 0x00c4, 0xff3c, 0x387c, 0xc784, 0x039c, 0xfc64, + 0x0ffc, 0xf004, 0x0104, 0xfefc, 0x417c, 0xbe84, 0x041c, 0xfbe4, + 0x083c, 0xf7c4, 0x0008, 0xfff8, 0x207c, 0xdf84, 0x020c, 0xfdf4, + 0x17fc, 0xe804, 0x018c, 0xfe74, 0x617c, 0x9e84, 0x061c, 0xf9e4, + 0x0c3c, 0xf3c4, 0x0084, 0xff7c, 0x307c, 0xcf84, 0x030c, 0xfcf4, + 0x15fc, 0xea04, 0x0164, 0xfe9c, 0x597c, 0xa684, 0x059c, 0xfa64, + 0x0b3c, 0xf4c4, 0x0068, 0xff98, 0x2c7c, 0xd384, 0x02cc, 0xfd34, + 0x1dfc, 0xe204, 0x01ec, 0xfe14, 0x797c, 0x8684, 0x07bc, 0xf844, + 0x0f3c, 0xf0c4, 0x00e4, 0xff1c, 0x3c7c, 0xc384, 0x03dc, 0xfc24, + 0x11fc, 0xee04, 0x0124, 0xfedc, 0x497c, 0xb684, 0x049c, 0xfb64, + 0x093c, 0xf6c4, 0x0028, 0xffd8, 0x247c, 0xdb84, 0x024c, 0xfdb4, + 0x19fc, 0xe604, 0x01ac, 0xfe54, 0x697c, 0x9684, 0x069c, 0xf964, + 0x0d3c, 0xf2c4, 0x00a4, 0xff5c, 0x347c, 0xcb84, 0x034c, 0xfcb4, + 0x12fc, 0xed04, 0x0134, 0xfecc, 0x4d7c, 0xb284, 0x04dc, 0xfb24, + 0x09bc, 0xf644, 0x0038, 0xffc8, 0x267c, 0xd984, 0x026c, 0xfd94, + 0x1afc, 0xe504, 0x01ac, 0xfe54, 0x6d7c, 0x9284, 0x06dc, 0xf924, + 0x0dbc, 0xf244, 0x00b4, 0xff4c, 0x367c, 0xc984, 0x036c, 0xfc94, + 0x0f3c, 0xf0c4, 0x00f4, 0xff0c, 0x3e7c, 0xc184, 0x03dc, 0xfc24, + 0x07bc, 0xf844, 0x0008, 0xfff8, 0x1efc, 0xe104, 0x01ec, 0xfe14, + 0x16fc, 0xe904, 0x0174, 0xfe8c, 0x5d7c, 0xa284, 0x05dc, 0xfa24, + 0x0bbc, 0xf444, 0x0078, 0xff88, 0x2e7c, 0xd184, 0x02ec, 0xfd14, + 0x14fc, 0xeb04, 0x0154, 0xfeac, 0x557c, 0xaa84, 0x055c, 0xfaa4, + 0x0abc, 0xf544, 0x0058, 0xffa8, 0x2a7c, 0xd584, 0x02ac, 0xfd54, + 0x1cfc, 0xe304, 0x01cc, 0xfe34, 0x757c, 0x8a84, 0x075c, 0xf8a4, + 0x0ebc, 0xf144, 0x00d4, 0xff2c, 0x3a7c, 0xc584, 0x039c, 0xfc64, + 0x10fc, 0xef04, 0x0114, 0xfeec, 0x457c, 0xba84, 0x045c, 0xfba4, + 0x08bc, 0xf744, 0x0018, 0xffe8, 0x227c, 0xdd84, 0x022c, 0xfdd4, + 0x18fc, 0xe704, 0x018c, 0xfe74, 0x657c, 0x9a84, 0x065c, 0xf9a4, + 0x0cbc, 0xf344, 0x0094, 0xff6c, 0x327c, 0xcd84, 0x032c, 0xfcd4 +}; + + +struct fmt { + unsigned short stereo; /* 1 = pcm, 2 = adpcm */ + unsigned short channels; /* number of channels */ + unsigned long sample_rate; /* sample rate */ + unsigned long data_rate; /* data rate */ + unsigned short bytes_sample; /* bytes per sample (all channels) */ + unsigned short bits_sample; /* bits per sample (one channel) */ +}; + +void write_law(FILE *fp, char *name, char law) +{ + unsigned char buffer[256]; + struct fmt fmt; + FILE *lfp; + unsigned long i; + short sample; + unsigned long size, wsize; + + if ((lfp=fopen(name,"r"))) + { + /* get size */ + fseek(lfp, 0, SEEK_END); + size = ftell(lfp); + printf("samples: %ld\n", size); + size += size; + fseek(lfp, 0, SEEK_SET); + + wsize = 4+8+sizeof(fmt)+8+size+8+4+8+4; + + /* RIFF */ + fprintf(fp, "RIFF%c%c%c%c", (char)(wsize&0xff), (char)((wsize>>8)&0xff), (char)((wsize>>16)&0xff), (char)(wsize>>24)); + + /* WAVE */ + fprintf(fp, "WAVE"); + + /* fmt */ + fprintf(fp, "fmt %c%c%c%c", sizeof(fmt), 0, 0, 0); + fmt.stereo = 1; + fmt.channels = 1; + fmt.sample_rate = 8000; + fmt.data_rate = 16000; + fmt.bytes_sample = 2; + fmt.bits_sample = 16; + fwrite(&fmt, sizeof(fmt), 1, fp); + + /* data */ + fprintf(fp, "data%c%c%c%c", (char)(size&0xff), (char)((size>>8)&0xff), (char)((size>>16)&0xff), (char)(size>>24)); + i = 0; + while(i < size) + { + fread(buffer, 1, 1, lfp); + if (law == 'a') + sample = isdn_audio_alaw_to_s16[*buffer]; + else + sample = isdn_audio_ulaw_to_s16[*buffer]; + fwrite(&sample, 2, 1, fp); + i+=2; + } + + /* cue */ + fprintf(fp, "cue %c%c%c%c%c%c%c%c", 4, 0, 0, 0, 0,0,0,0); + + /* LIST */ + fprintf(fp, "LIST%c%c%c%cadtl", 4, 0, 0, 0); + + fclose(lfp); + } +} + +int main(int argc, char *argv[]) +{ + FILE *fp; + + if (argc <= 1) + { + usage: + printf("Usage:\n"); + printf("%s ulaw2wave \n", argv[0]); + printf("%s alaw2wave \n", argv[0]); + return(0); + } + + if (!strcmp(argv[1], "alaw2wave")) + { + if (argc <= 3) + goto usage; + if ((fp=fopen(argv[3],"w"))) + { + write_law(fp,argv[2],'a'); + fclose(fp); + } else + { + printf("Cannot open wave file %s\n",argv[3]); + } + } else + if (!strcmp(argv[1], "ulaw2wave")) + { + if (argc <= 3) + goto usage; + if ((fp=fopen(argv[3],"w"))) + { + write_law(fp,argv[2],'u'); + fclose(fp); + } else + { + printf("Cannot open wave file %s\n",argv[3]); + } + } else + goto usage; + + return(0); +} diff --git a/h323.cpp b/h323.cpp new file mode 100644 index 0000000..6c31e5a --- /dev/null +++ b/h323.cpp @@ -0,0 +1,343 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** h323 port ** +** ** +\*****************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "main.h" + + +/* + * initialize h323 port + */ +H323Port::H323Port(int type, char *portname, struct port_settings *settings) : Port(type, portname, settings) +{ + p_h323_channel_in = p_h323_channel_out = NULL; + p_h323_connect = NULL; + + /* configure device */ + switch (type) + { + case PORT_TYPE_H323_IN: + break; + case PORT_TYPE_H323_OUT: + SPRINT(p_name, "H323_outgoing_port_#%lu", p_serial); + break; + } + if (options.law == 'u') + { + } +} + + +/* + * destructor + */ +H323Port::~H323Port() +{ +} + + +/* + * endpoint sends messages to the interface + */ +int H323Port::message_epoint(unsigned long epoint_id, int message_id, union parameter *param) +{ + H323Connection *connection; + H323Connection::CallEndReason h323_cause; + char name[sizeof(p_name)]; + + if (Port::message_epoint(epoint_id, message_id, param)) + return(1); + + switch(message_id) + { + case MESSAGE_mISDNSIGNAL: /* isdn command */ + PDEBUG(DEBUG_H323, "H323Port(%s) mISDN signal not supported.\n", p_name); + break; + + case MESSAGE_INFORMATION: /* additional digits from endpoint */ + PDEBUG(DEBUG_H323, "H323Port(%s) h323 port with (caller id %s) received more digit information: '%s'\n", p_name, p_callerinfo.id, param->information.number); +/* queue to be done */ + if (p_state != PORT_STATE_OUT_OVERLAP) + { + PERROR("H323Port(%s) additinal digits are only possible in outgoing overlap state.\n", p_name); + break; + } + if (strlen(param->information.number)>30) + { + PERROR("H323Port(%s) information string too long.\n", p_name); + break; + } + SCAT((char *)p_dialinginfo.number, param->information.number); + break; + + case MESSAGE_PROCEEDING: /* call of endpoint is proceeding */ + PDEBUG(DEBUG_H323, "H323Port(%s) h323 port with (caller id %s) received proceeding\n", p_name, p_callerinfo.id); + if (p_state != PORT_STATE_IN_OVERLAP) + { + PERROR("H323Port(%s) proceeding command only possible in setup state.\n", p_name); + break; + } + p_state = PORT_STATE_IN_PROCEEDING; + break; + + case MESSAGE_ALERTING: /* call of endpoint is ringing */ + PDEBUG(DEBUG_H323, "H323Port(%s) h323 port with (caller id %s) received alerting\n", p_name, p_callerinfo.id); + if (p_state != PORT_STATE_IN_OVERLAP + && p_state != PORT_STATE_IN_PROCEEDING) + { + PERROR("H323Port(%s) alerting command only possible in setup or proceeding state.\n", p_name); + break; + } + p_state = PORT_STATE_IN_ALERTING; + UCPY(name, p_name); + mutex_h323.Signal(); + connection = h323_ep->FindConnectionWithLock(name); + if (connection) + { + if (options.h323_ringconnect && !p_callerinfo.intern[0]) + { + connection->AnsweringCall(H323Connection::AnswerCallNow); + p_state = PORT_STATE_CONNECT; + } else + connection->AnsweringCall(H323Connection::AnswerCallPending); + connection->Unlock(); + } + mutex_h323.Wait(); + break; + + case MESSAGE_CONNECT: /* call of endpoint is connected */ + PDEBUG(DEBUG_H323, "H323Port(%s) h323 port with (caller id %s) received connect\n", p_name, p_callerinfo.id); + if (p_state != PORT_STATE_IN_OVERLAP + && p_state != PORT_STATE_IN_PROCEEDING + && p_state != PORT_STATE_IN_ALERTING) + { + PDEBUG(DEBUG_H323, "H323Port(%s) connect command only possible in setup, proceeding or alerting state.\n", p_name); + break; + } + new_state(PORT_STATE_CONNECT); + /* copy connected information */ + memcpy(&p_connectinfo, ¶m->connectinfo, sizeof(p_connectinfo)); + p_connectinfo.itype = INFO_ITYPE_H323; + UCPY(name, p_name); + mutex_h323.Signal(); + connection = h323_ep->FindConnectionWithLock(name); + if (connection) + { + int type, present, screen; + PString connect_number; + /* modify connectinfo (COLP) */ + if (p_connectinfo.present!=INFO_PRESENT_NULL) + { + connect_number = p_connectinfo.id; + switch(p_connectinfo.ntype) + { + case INFO_NTYPE_SUBSCRIBER: + type = Q931::SubscriberType; + break; + case INFO_NTYPE_NATIONAL: + type = Q931::NationalType; + break; + case INFO_NTYPE_INTERNATIONAL: + type = Q931::InternationalType; + break; + default: /* INFO_TYPE_UNKNOWN */ + type = Q931::UnknownType; + } + switch(p_connectinfo.present) + { + case INFO_PRESENT_RESTRICTED: + present = 1; + break; + case INFO_PRESENT_NOTAVAIL: + present = 2; + break; + default: /* INFO_PRESENT_ALLOWED */ + present = 0; + } + switch(p_connectinfo.screen) + { + case INFO_SCREEN_USER: + screen = 0; + break; + default: /* INFO_SCREEN_NETWORK */ + screen = 3; + } +#if 0 + if (p_h323_connect) + { +//PDEBUG(DEBUG_H323, "DDDEBUG: number %s, type=%d, present %d, screen %d\n", p_connectinfo.id, type, present, screen); + ((Q931 *)p_h323_connect)->SetConnectedNumber(connect_number, Q931::ISDNPlan, type, present, screen); + } + else + PERROR("missing p_h323_connect\n"); +#endif + } + + connection->AnsweringCall(H323Connection::AnswerCallNow); + connection->Unlock(); + } + mutex_h323.Wait(); + break; + + case MESSAGE_DISCONNECT: /* call has been disconnected */ +#if 0 + PDEBUG(DEBUG_H323, "H323Port(%s) h323 port with (caller id %s) received disconnect cause=%d\n", p_name, p_callerinfo.id, param->disconnectinfo.cause); + /* we just play what we hear from the remote site */ + if (p_state == PORT_STATE_IN_OVERLAP + || p_state == PORT_STATE_IN_PROCEEDING) + { + /* copy connected information */ + memcpy(&p_connectinfo, ¶m->connectinfo, sizeof(p_connectinfo)); + UCPY(name, p_name); + mutex_h323.Signal(); + connection = h323_ep->FindConnectionWithLock(name); + if (connection) + { + connection->AnsweringCall(H323Connection::AnswerCallNow); + connection->Unlock(); + } + mutex_h323.Wait(); + } + new_state(PORT_STATE_DISCONNECT); + break; +#endif + + case MESSAGE_RELEASE: /* release h323 port */ + PDEBUG(DEBUG_H323, "H323Port(%s) h323 port with (caller id %s) received disconnect cause=%d\n", p_name, p_callerinfo.id, param->disconnectinfo.cause); + if (p_state != PORT_STATE_IN_OVERLAP + && p_state != PORT_STATE_IN_PROCEEDING + && p_state != PORT_STATE_IN_ALERTING + && p_state != PORT_STATE_OUT_SETUP + && p_state != PORT_STATE_OUT_OVERLAP + && p_state != PORT_STATE_OUT_PROCEEDING + && p_state != PORT_STATE_OUT_ALERTING + && p_state != PORT_STATE_CONNECT) + { + PERROR("H323Port(%s) disconnect command only possible in setup, proceeding, alerting or connect state.\n", p_name); + break; + } + + switch(param->disconnectinfo.cause) + { + case 1: + h323_cause = H323Connection::EndedByNoUser; + break; + + case 2: + case 3: + case 5: + h323_cause = H323Connection::EndedByUnreachable; + break; + + case 17: + h323_cause = H323Connection::EndedByRemoteBusy; + break; + + case 18: + h323_cause = H323Connection::EndedByNoEndPoint; + break; + + case 19: + h323_cause = H323Connection::EndedByNoAnswer; + break; + + case 21: + h323_cause = H323Connection::EndedByRefusal; + break; + + case 27: + h323_cause = H323Connection::EndedByHostOffline; + break; + + case 47: + h323_cause = H323Connection::EndedByConnectFail; + break; + + case 65: + h323_cause = H323Connection::EndedByCapabilityExchange; + break; + + case 42: + h323_cause = H323Connection::EndedByRemoteCongestion; + break; + + case 41: + h323_cause = H323Connection::EndedByTemporaryFailure; + break; + + default: + h323_cause = H323Connection::EndedByRemoteUser; + break; + } + UCPY(name, p_name); + mutex_h323.Signal(); + h323_ep->ClearCall(name, h323_cause); + mutex_h323.Wait(); + + delete this; + break; + + case MESSAGE_SETUP: /* dial-out command received from epoint */ + PDEBUG(DEBUG_H323, "H323Port(%s) h323 port received setup from '%s' to '%s'\n", p_name, param->setup.callerinfo.id, param->setup.dialinginfo.number); + if (p_type!=PORT_TYPE_H323_OUT) + { + PERROR("H323Port(%s) cannot dial because h323 port not of outgoing type.\n", p_name); + break; + } + if (p_state != PORT_STATE_IDLE) + { + PERROR("H323Port(%s) error: dialing command only possible in idle state.\n", p_name); + break; + } + + /* link relation */ + if (p_epointlist) + { + PERROR("H323Port(%s) software error: epoint pointer is set in idle state, how bad!! exitting.\n", p_name); + exit(-1); + } + if (!(epointlist_new(epoint_id))) + { + PERROR("no memory for epointlist\n"); + exit(-1); + } + + /* copy setup infos to port */ + memcpy(&p_callerinfo, ¶m->setup.callerinfo, sizeof(p_callerinfo)); + memcpy(&p_dialinginfo, ¶m->setup.dialinginfo, sizeof(p_dialinginfo)); + memcpy(&p_capainfo, ¶m->setup.capainfo, sizeof(p_capainfo)); + memcpy(&p_redirinfo, ¶m->setup.redirinfo, sizeof(p_redirinfo)); + + p_state = PORT_STATE_OUT_SETUP; + + UCPY(name, p_name); + mutex_h323.Signal(); + h323_ep->Call(name, param->setup.callerinfo.id, param->setup.dialinginfo.number); + mutex_h323.Wait(); + break; + + default: + PDEBUG(DEBUG_H323, "H323Port(%s) h323 port with (caller id %s) received an unsupported message: %d\n", p_name, p_callerinfo.id, message_id); + } + + return(1); +} + + diff --git a/h323.h b/h323.h new file mode 100644 index 0000000..236a2d1 --- /dev/null +++ b/h323.h @@ -0,0 +1,27 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** h323-port header file ** +** ** +\*****************************************************************************/ + + +/* h323 port class */ +class H323_chan; +class H323Port : public Port +{ + public: + H323Port(int type, char *portname, struct port_settings *settings); + ~H323Port(); + int message_epoint(unsigned long epoint_id, int message, union parameter *param); + + H323_chan *p_h323_channel_in; /* channels of port */ + H323_chan *p_h323_channel_out; + void *p_h323_connect; /* q931 object of connect PDU */ +}; + + diff --git a/h323_chan.cpp b/h323_chan.cpp new file mode 100644 index 0000000..ca10cbb --- /dev/null +++ b/h323_chan.cpp @@ -0,0 +1,189 @@ +/////////////////////////////////////////////////////////////////////////////// +// // +// PBX4Linux // +// // +//---------------------------------------------------------------------------// +// Copyright: Andreas Eversberg // +// // +// H323_chan class // +// // +/////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include +#include "main.h" + +#include +#include +#include + +// +// constructor +// +H323_chan::H323_chan(const PString &token, BOOL isEncoding) : PIndirectChannel() +{ + d_token = token; +// d_isEncoding = isEncoding; + + PDEBUG(DEBUG_H323, "H323 channel constuctor of channel (%scoding)\n", (isEncoding)?"en":"de"); + + transfering = FALSE; +} + + +// +// destructor +// +H323_chan::~H323_chan(void) +{ + + PDEBUG(DEBUG_H323, "H323 channel destuctor\n"); +} + + +// +// Closes the +// +BOOL H323_chan::Close(void) +{ + PDEBUG(DEBUG_H323, "H323 channel Close\n"); + + return TRUE; +} + + +// +// IsOpen +// +BOOL H323_chan::IsOpen(void) const +{ + PDEBUG(DEBUG_H323, "H323 channel IsOpen\n"); + + return TRUE; +} + + +// +// Read +// +BOOL H323_chan::Read(void *buf, PINDEX len) +{ + int nr_words; + class H323Port *port; + const unsigned char *token_string = d_token; + PTime Now; + PTimeInterval diff; + + nr_words = len/2; + +// cout << "H323 channel Read " << nr_words << " words" << endl; + mutex_h323.Wait(); + + if (!(port = (class H323Port *)find_port_with_token((char *)token_string))) + { + PERROR("H323 channel Read() cannot find port with token %s\n", token_string); + mutex_h323.Signal(); + lastReadCount = 0; + return FALSE; + } + + nr_words = port->read_audio((unsigned char *)buf, nr_words, 0); + + mutex_h323.Signal(); + + // delay + if (!transfering) + { + PDEBUG(DEBUG_H323, "H323 channel Read(%s) sending to h323 the first time\n", token_string); + start = Now; + transfering = TRUE; + elapsed = 0; + } + diff = Now-start; + elapsed += nr_words*125; + if (elapsed > (diff.GetMilliSeconds()*1000)) + usleep(elapsed - (diff.GetMilliSeconds()*1000)); + + lastReadCount = 2 * nr_words; + + return TRUE; +} + + +// +// Write +// +BOOL H323_chan::Write(const void *buf, PINDEX len) +{ + int nr_words; + class H323Port *port; + const unsigned char *token_string = d_token; + PTime Now; + PTimeInterval diff; + unsigned char *data_temp; + unsigned long length_temp; + struct message *message; + + nr_words = len / 2; + +// cout << "H323 channel Write " << nr_words << " words" << endl; + mutex_h323.Wait(); + + if (!(port = (class H323Port *)find_port_with_token((char *)token_string))) + { + PERROR("H323 channel Write() cannot find port with token %s\n", token_string); + mutex_h323.Signal(); + lastReadCount = 0; + return FALSE; + } + + // send data message + length_temp = len; + data_temp = (unsigned char *)buf; + while(length_temp) + { + message = message_create(port->p_serial, ACTIVE_EPOINT(port->p_epointlist), PORT_TO_EPOINT, MESSAGE_DATA); + message->param.data.len = (length_temp>sizeof(message->param.data.data))?sizeof(message->param.data.data):length_temp; + memcpy(message->param.data.data, data_temp, message->param.data.len); + message->param.data.compressed = 0; +/* { // testin with law data + int i=0; + while (iparam.data.len) + { + ((unsigned char *)message->param.data.data)[i] = audio_s16_to_law[((signed short*)data_temp)[i] & 0xffff]; + i++; + } + } + message->param.data.len = message->param.data.len/2; + message->param.data.compressed = 1; +*/ + message->param.data.port_type = port->p_type; + message->param.data.port_id = port->p_serial; + message_put(message); + if (length_temp <= sizeof(message->param.data.data)) + break; + data_temp += sizeof(message->param.data.data); + length_temp -= sizeof(message->param.data.data); + } + + mutex_h323.Signal(); + + // delay + if (!transfering) + { + PDEBUG(DEBUG_H323, "H323 channel Write(%s) receiving from h323 the first time\n", token_string); + start = Now; + transfering = TRUE; + elapsed = 0; + } + diff = Now-start; + elapsed += nr_words*125; + if (elapsed > (diff.GetMilliSeconds()*1000)) + usleep(elapsed - (diff.GetMilliSeconds()*1000)); + + lastWriteCount = 2 * nr_words; + + return TRUE; +} + diff --git a/h323_chan.h b/h323_chan.h new file mode 100644 index 0000000..0556574 --- /dev/null +++ b/h323_chan.h @@ -0,0 +1,34 @@ +/////////////////////////////////////////////////////////////////////////////// +// // +// PBX4Linux // +// // +//---------------------------------------------------------------------------// +// Copyright: Andreas Eversberg // +// // +// h323_chan header file // +// // +/////////////////////////////////////////////////////////////////////////////// + + +#ifndef H323_CHAN_HEADER +#define H323_CHAN_HEADER + +class H323_chan : public PIndirectChannel +{ + public: + H323_chan(const PString &token, BOOL isEncoding); + ~H323_chan(void); + BOOL Close(void); + BOOL IsOpen(void) const; + BOOL Read(void *buf, PINDEX len); + BOOL Write(const void *buf, PINDEX len); + + private: + PString d_token; + PTime start; + BOOL transfering; + PInt64 elapsed; +}; + +#endif + diff --git a/h323_con.cpp b/h323_con.cpp new file mode 100644 index 0000000..069d1f3 --- /dev/null +++ b/h323_con.cpp @@ -0,0 +1,648 @@ +/////////////////////////////////////////////////////////////////////////////// +// // +// PBX4Linux // +// // +//---------------------------------------------------------------------------// +// Copyright: Andreas Eversberg // +// // +// h323_con connection class // +// // +/////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include +#include "main.h" + +#include +#include +#include + +// +// constructor +// +H323_con::H323_con(H323_ep &endpoint, unsigned callReference) : H323Connection(endpoint, callReference) +{ + PDEBUG(DEBUG_H323, "H323 connection constuctor\n"); + + SetAudioJitterDelay(0, 0); +} + + +// +// destructor +// +H323_con::~H323_con() +{ + class H323Port *port; + const unsigned char *token_string = callToken; + struct message *message; + + mutex_h323.Wait(); + + // get ioport + port = (class H323Port *)find_port_with_token((char *)token_string); + if (!port) + { + PERROR("no port with token '%s'\n", token_string); + } else + { + /* sending release (if not already) */ + message = message_create(port->p_serial, ACTIVE_EPOINT(port->p_epointlist), PORT_TO_EPOINT, MESSAGE_RELEASE); + message->param.disconnectinfo.cause = 16; + message->param.disconnectinfo.location = LOCATION_PRIVATE_LOCAL; + message_put(message); + } + + mutex_h323.Signal(); + + PDEBUG(DEBUG_H323, "H323 connection destuctor\n"); +} + + +// +// AnswerCallResponse (incoming call) +// +H323Connection::AnswerCallResponse H323_con::OnAnswerCall(const PString &, const H323SignalPDU &setupPDU, H323SignalPDU &connectPDU) +{ + class H323Port *port; + const char *calleraddress; + char callerip[32], *extension; + const char *dialing = NULL; + const H225_Setup_UUIE &setup = setupPDU.m_h323_uu_pdu.m_h323_message_body; + const H225_ArrayOf_AliasAddress &adr = setup.m_destinationAddress; + PINDEX i; + const unsigned char *token_string = callToken; + struct message *message; + class Endpoint *epoint; + + const Q931 setup_q931 = setupPDU.GetQ931(); + PString calling_number; + PString redir_number; + unsigned type, plan, present, screen, reason; + + struct caller_info *callerinfo; + struct dialing_info *dialinginfo; + struct capa_info *capainfo; + struct redir_info *redirinfo; + char option[64] = ""; + + PDEBUG(DEBUG_H323, "H323 connection incoming call\n"); + + mutex_h323.Wait(); + + // alloc new h323 port structure + if (!(port = new H323Port(PORT_TYPE_H323_IN, (char *)token_string, NULL))) + { + mutex_h323.Signal(); + return AnswerCallDenied; + } + callerinfo = &port->p_callerinfo; + redirinfo = &port->p_redirinfo; + capainfo = &port->p_capainfo; + dialinginfo = &port->p_dialinginfo; + + memset(callerinfo, 0, sizeof(struct caller_info)); + memset(redirinfo, 0, sizeof(struct redir_info)); + memset(capainfo, 0, sizeof(struct capa_info)); + memset(dialinginfo, 0, sizeof(struct dialing_info)); + + callerinfo->itype = INFO_ITYPE_H323; + + // get calling party information + if (setup_q931.GetCallingPartyNumber(calling_number, &plan, &type, &present, &screen)) + { + SCPY(callerinfo->id, calling_number.GetPointer()); + switch (present) + { + case 1: + callerinfo->present = INFO_PRESENT_RESTRICTED; + break; + case 2: + callerinfo->present = INFO_PRESENT_NOTAVAIL; + break; + default: + callerinfo->present = INFO_PRESENT_ALLOWED; + break; + } + switch (type) + { + case Q931::InternationalType: + callerinfo->ntype = INFO_NTYPE_INTERNATIONAL; + break; + case Q931::NationalType: + callerinfo->ntype = INFO_NTYPE_NATIONAL; + break; + case Q931::SubscriberType: + callerinfo->ntype = INFO_NTYPE_SUBSCRIBER; + break; + default: + callerinfo->ntype = INFO_NTYPE_UNKNOWN; + break; + } + switch (screen) + { + case 0: + callerinfo->screen = INFO_SCREEN_USER; + break; + default: + callerinfo->screen = INFO_SCREEN_NETWORK; + break; + } + } + redirinfo->itype = INFO_ITYPE_H323; + // get redirecting number information + if (setup_q931.GetRedirectingNumber(redir_number, &plan, &type, &present, &screen, &reason)) + { + SCPY(redirinfo->id, redir_number.GetPointer()); + switch (present) + { + case 1: + redirinfo->present = INFO_PRESENT_RESTRICTED; + break; + case 2: + redirinfo->present = INFO_PRESENT_NOTAVAIL; + break; + default: + redirinfo->present = INFO_PRESENT_ALLOWED; + break; + } + switch (type) + { + case Q931::InternationalType: + redirinfo->ntype = INFO_NTYPE_INTERNATIONAL; + break; + case Q931::NationalType: + redirinfo->ntype = INFO_NTYPE_NATIONAL; + break; + case Q931::SubscriberType: + redirinfo->ntype = INFO_NTYPE_SUBSCRIBER; + break; + default: + redirinfo->ntype = INFO_NTYPE_UNKNOWN; + break; + } + switch (screen) + { + case 0: + redirinfo->screen = INFO_SCREEN_USER; + break; + default: + redirinfo->screen = INFO_SCREEN_NETWORK; + break; + } + switch (reason) + { + case 1: + redirinfo->reason = INFO_REDIR_BUSY; + break; + case 2: + redirinfo->reason = INFO_REDIR_NORESPONSE; + break; + case 15: + redirinfo->reason = INFO_REDIR_UNCONDITIONAL; + break; + case 10: + redirinfo->reason = INFO_REDIR_CALLDEFLECT; + break; + case 9: + redirinfo->reason = INFO_REDIR_OUTOFORDER; + break; + default: + redirinfo->reason = INFO_REDIR_UNKNOWN; + break; + } + } + + // get remote party h323-address information + calleraddress = GetRemotePartyAddress(); + callerip[0] = '\0'; + if (calleraddress) + { + if (strstr(calleraddress, "ip$")) + { + SCPY(callerip, strstr(calleraddress, "ip$")+3); + if (strchr(callerip, ':')) + *strchr(callerip, ':') = '\0'; + memmove(strstr(calleraddress, "ip$"), strstr(calleraddress, "ip$")+3, strlen(strstr(calleraddress, "ip$")+3)+1); + } + if (strchr(calleraddress, ':')) + *strchr(calleraddress, ':') = '\0'; + } + + // get dialing information + for(i=0; ivoip, (char *)calleraddress); + capainfo->bearer_mode = INFO_BMODE_CIRCUIT; + capainfo->bearer_info1 = (options.law=='u')?INFO_INFO1_ULAW:INFO_INFO1_ALAW; + capainfo->bearer_capa = INFO_BC_SPEECH; + + // change to incoming setup state + port->new_state(PORT_STATE_IN_OVERLAP); + + // allocate new endpoint + if (!(epoint = new Endpoint(port->p_serial, 0))) + { + // error allocating endpoint + PDEBUG(DEBUG_H323, "h323-connection(%s) rejecting call because cannot create epoint for '%s'\n", port->p_name, callerinfo->id); + delete port; + port = NULL; + mutex_h323.Signal(); + return AnswerCallDenied; + } + if (!(epoint->ep_app = new DEFAULT_ENDPOINT_APP(epoint))) + { + PERROR("no memory for application\n"); + exit(-1); + } + if (!(port->epointlist_new(epoint->ep_serial))) + { + PERROR("no memory for epointlist\n"); + exit(-1); + } + port->set_tone(NULL, ""); + + // send setup message to endpoint + message = message_create(port->p_serial, ACTIVE_EPOINT(port->p_epointlist), PORT_TO_EPOINT, MESSAGE_SETUP); + message->param.setup.port_type = port->p_type; + + // before we start, we may check for h323_gateway entry + if (callerip[0]) + { + extension = parse_h323gateway(callerip, option, sizeof(option)); + if (extension) + { + PDEBUG(DEBUG_H323, "h323-connection(%s) gateway '%s' is mapped to extension '%s' (option= '%s')\n", port->p_name, callerip, extension, option); + SCPY(callerinfo->id, extension); + SCPY(callerinfo->intern, extension); + callerinfo->itype = INFO_ITYPE_INTERN; + callerinfo->screen = INFO_SCREEN_NETWORK; + } else + { + PDEBUG(DEBUG_H323, "h323-connection(%s) gateway '%s' is not mapped to any extension. (port_type=0x%x)\n", port->p_name, callerip, port->p_type); + // get the default dialing external dialing string + } + } + + // default dialing for extenal calls + if (!callerinfo->intern[0] && !dialing[0]) + dialing = options.h323_icall_prefix; + + // dialing information + if (callerip[0] || dialing[0]) + { + SCPY(dialinginfo->number, (char *)dialing); + dialinginfo->ntype = INFO_NTYPE_UNKNOWN; + } + + memcpy(&message->param.setup.callerinfo, callerinfo, sizeof(struct caller_info)); + memcpy(&message->param.setup.dialinginfo, dialinginfo, sizeof(struct dialing_info)); + memcpy(&message->param.setup.redirinfo, redirinfo, sizeof(struct redir_info)); + memcpy(&message->param.setup.capainfo, capainfo, sizeof(struct capa_info)); + message->param.setup.dtmf = 1; + message_put(message); + + port->p_h323_connect = &(connectPDU.GetQ931()); + + mutex_h323.Signal(); + + if (!strcasecmp(option, "connect") || !strcasecmp(option, "dtmf")) + { + port->new_state(PORT_STATE_CONNECT); + return AnswerCallNow; + } else + { + return AnswerCallDeferred; + } +} + + +// +// OnOutgoingCall (outgoing call) +// +BOOL H323_con::OnOutgoingCall(const H323SignalPDU &connectPDU) +{ + class H323Port *port; + const char *calleraddress; + char callerip[32]; + const unsigned char *token_string = callToken; + struct message *message; +// H225_Connect_UUIE &connect_uuie = connectPDU.m_h323_uu_pdu.m_h323_message_body; + + const Q931 connect_q931 = connectPDU.GetQ931(); + PString connect_number; + unsigned type = 0, plan = 0, present = 0, screen = 0; + struct connect_info *connectinfo; + + PDEBUG(DEBUG_H323, "H323 connection outgoing call is connected.\n"); + + mutex_h323.Wait(); + + if (!(port = (class H323Port *)find_port_with_token((char *)token_string))) + { + PERROR(" cannot find port with token '%s'\n", token_string); + mutex_h323.Signal(); + return FALSE; + } + connectinfo = &port->p_connectinfo; + + if (port->p_type == PORT_TYPE_H323_IN) + { + PDEBUG(DEBUG_H323, "H323 endpoint OnConnectionEstablished() incoming port\n"); + } + if (port->p_type == PORT_TYPE_H323_OUT) + { + PDEBUG(DEBUG_H323, "H323 endpoint OnConnectionEstablished() outgoing port\n"); + if (port->p_state==PORT_STATE_OUT_SETUP + || port->p_state==PORT_STATE_OUT_OVERLAP + || port->p_state==PORT_STATE_OUT_PROCEEDING + || port->p_state==PORT_STATE_OUT_ALERTING) + { + // get remote party h323-address information + calleraddress = GetRemotePartyAddress(); + callerip[0] = '\0'; + if (calleraddress) + { + if (strchr(calleraddress, '$')) + { + SCPY(callerip, strchr(calleraddress, '$')); + callerip[sizeof(callerip)-1] = '\0'; + if (strchr(callerip, ':')) + *strchr(callerip, ':') = '\0'; + } + SCPY(connectinfo->voip, (char *)calleraddress); + } + + // get COLP + memset(connectinfo, 0, sizeof(struct connect_info)); + connectinfo->itype = INFO_ITYPE_H323; + if (connect_q931.GetConnectedNumber(connect_number, &plan, &type, &present, &screen)) + { + SCPY(connectinfo->id, connect_number.GetPointer()); + switch (present) + { + case 1: + connectinfo->present = INFO_PRESENT_RESTRICTED; + break; + case 2: + connectinfo->present = INFO_PRESENT_NOTAVAIL; + break; + default: + connectinfo->present = INFO_PRESENT_ALLOWED; + } + switch (type) + { + case Q931::InternationalType: + connectinfo->ntype = INFO_NTYPE_INTERNATIONAL; + break; + case Q931::NationalType: + connectinfo->ntype = INFO_NTYPE_NATIONAL; + break; + case Q931::SubscriberType: + connectinfo->ntype = INFO_NTYPE_SUBSCRIBER; + break; + default: + connectinfo->ntype = INFO_NTYPE_UNKNOWN; + } + switch (screen) + { + case 0: + connectinfo->screen = INFO_SCREEN_USER; + break; + default: + connectinfo->screen = INFO_SCREEN_NETWORK; + } + } + port->new_state(PORT_STATE_CONNECT); + message = message_create(port->p_serial, ACTIVE_EPOINT(port->p_epointlist), PORT_TO_EPOINT, MESSAGE_CONNECT); + memcpy(&message->param.connectinfo, connectinfo, sizeof(struct connect_info)); + message_put(message); + } + } + + mutex_h323.Signal(); + + return H323Connection::OnOutgoingCall(connectPDU); +} + + +// +// send setup information to the called h323 user +// +BOOL H323_con::OnSendSignalSetup(H323SignalPDU &setupPDU) +{ + H225_Setup_UUIE &setup = setupPDU.m_h323_uu_pdu.m_h323_message_body; + H225_ArrayOf_AliasAddress &adr = setup.m_sourceAddress; + H225_AliasAddress new_alias; + PString calling_number; + PString calling_alias; + PString dialing_number; + PString redir_number; + int type, present, screen, reason; + class H323Port *port; + const unsigned char *token_string = callToken; + + struct caller_info *callerinfo; + struct dialing_info *dialinginfo; + struct capa_info *capainfo; + struct redir_info *redirinfo; + + mutex_h323.Wait(); + + if (!(port = (class H323Port *)find_port_with_token((char *)token_string))) + { + PERROR(" no port with token '%s'\n", token_string); + mutex_h323.Signal(); + return FALSE; + } + callerinfo = &port->p_callerinfo; + redirinfo = &port->p_redirinfo; + capainfo = &port->p_capainfo; + dialinginfo = &port->p_dialinginfo; + + PDEBUG(DEBUG_H323, "H323-connection sending modified setup signal '%s'->'%s'\n", callerinfo->id, dialinginfo->number); + + + if (callerinfo->present!=INFO_PRESENT_NULL) + { + calling_alias = numberrize_callerinfo(callerinfo->id, callerinfo->ntype); + H323SetAliasAddress(calling_alias, new_alias); + adr.SetSize(adr.GetSize()+1); + adr[adr.GetSize()-1] = new_alias; + + calling_number = callerinfo->id; + switch(callerinfo->ntype) + { + case INFO_NTYPE_SUBSCRIBER: + type = Q931::SubscriberType; + break; + case INFO_NTYPE_NATIONAL: + type = Q931::NationalType; + break; + case INFO_NTYPE_INTERNATIONAL: + type = Q931::InternationalType; + break; + default: /* INFO_NTYPE_UNKNOWN */ + type = Q931::UnknownType; + } + + switch(callerinfo->present) + { + case INFO_PRESENT_RESTRICTED: + present = 1; + break; + case INFO_PRESENT_NOTAVAIL: + present = 2; + break; + default: /* INFO_PRESENT_ALLOWED */ + present = 0; + } + switch(callerinfo->screen) + { + case INFO_SCREEN_USER: + screen = 0; + break; + default: /* INFO_SCREEN_NETWORK */ + screen = 3; + } + + Q931 &new_q931 = setupPDU.GetQ931(); + new_q931.SetCallingPartyNumber(calling_number, Q931::ISDNPlan, type, present, screen); + } + + if (redirinfo->present!=INFO_PRESENT_NULL) + { + if (redirinfo->present==INFO_PRESENT_ALLOWED) + { + redir_number = callerinfo->id; + } else + redir_number = ""; + + switch(redirinfo->ntype) + { + case INFO_NTYPE_SUBSCRIBER: + type = Q931::SubscriberType; + break; + case INFO_NTYPE_NATIONAL: + type = Q931::NationalType; + break; + case INFO_NTYPE_INTERNATIONAL: + type = Q931::InternationalType; + break; + default: /* INFO_TYPE_UNKNOWN */ + type = Q931::UnknownType; + } + + switch(redirinfo->present) + { + case INFO_PRESENT_RESTRICTED: + present = 1; + break; + case INFO_PRESENT_NOTAVAIL: + present = 2; + break; + default: /* INFO_PRESENT_ALLOWED */ + present = 0; + } + + switch(redirinfo->reason) + { + case INFO_REDIR_BUSY: + reason = 1; + break; + case INFO_REDIR_NORESPONSE: + reason = 2; + break; + case INFO_REDIR_UNCONDITIONAL: + reason = 15; + break; + case INFO_REDIR_OUTOFORDER: + reason = 9; + break; + case INFO_REDIR_CALLDEFLECT: + reason = 10; + break; + default: /* INFO_REDIR_UNKNOWN */ + reason = 0; + } + + Q931 &new_q931 = setupPDU.GetQ931(); + new_q931.SetRedirectingNumber(redir_number, Q931::ISDNPlan, type, present, screen, reason); + } + + if (dialinginfo->number[0]) + { + dialing_number = dialinginfo->number; + + Q931 &new_q931 = setupPDU.GetQ931(); + new_q931.SetCalledPartyNumber(dialing_number); + } + + mutex_h323.Signal(); + + return H323Connection::OnSendSignalSetup(setupPDU); +} + + +// +// callback for start of channel +// +BOOL H323_con::OnStartLogicalChannel(H323Channel &channel) +{ + if (!H323Connection::OnStartLogicalChannel(channel)) + { + PERROR("starting logical channel failed!\n"); + return FALSE; + } + + PDEBUG(DEBUG_H323, "H323 connection starting logical channel using \"%s\" codec %s :%s\n", + channel.GetCapability().GetFormatName().GetPointer(), + (channel.GetDirection()==H323Channel::IsTransmitter)?"transmit":"receive", + callToken.GetPointer()); + + return H323Connection::OnStartLogicalChannel(channel); +} + + +// +// user input received +// +void H323_con::OnUserInputString (const PString &value) +{ + class H323Port *port; + const unsigned char *token_string = callToken; + const unsigned char *value_string = value; + struct message *message; + + PDEBUG(DEBUG_H323, "H323-connection received user input'%s'\n", value_string); + + mutex_h323.Wait(); + + if (!(port = (class H323Port *)find_port_with_token((char *)token_string))) + { + PERROR("no port with token '%s'\n", token_string); + } else + { + while(*value_string) + { + message = message_create(port->p_serial, ACTIVE_EPOINT(port->p_epointlist), PORT_TO_EPOINT, MESSAGE_DTMF); + message->param.dtmf = *value_string++; + message_put(message); + } +#if 0 + message = message_create(port->p_serial, ACTIVE_EPOINT(port->p_epointlist), PORT_TO_EPOINT, MESSAGE_INFORMATION); + SCPY(message->param.information.number, (char *)value_string); + message_put(message); +#endif + } + + mutex_h323.Signal(); +} + diff --git a/h323_con.h b/h323_con.h new file mode 100644 index 0000000..e0645d3 --- /dev/null +++ b/h323_con.h @@ -0,0 +1,35 @@ +/////////////////////////////////////////////////////////////////////////////// +// // +// PBX4Linux // +// // +//---------------------------------------------------------------------------// +// Copyright: Andreas Eversberg // +// // +// h323_con connection header file // +// // +/////////////////////////////////////////////////////////////////////////////// + + +#ifndef H323_CON_HEADER +#define H323_CON_HEADER + +class H323_chan; +class H323_con : public H323Connection +{ + public: + + H323_con(H323_ep &endpoint, unsigned callReference); + ~H323_con(); + AnswerCallResponse OnAnswerCall(const PString &, const H323SignalPDU &, H323SignalPDU &); + BOOL OnOutgoingCall(const H323SignalPDU &connectPDU); + BOOL OnSendSignalSetup(H323SignalPDU &); + BOOL OnStartLogicalChannel(H323Channel &channel); + void OnUserInputString (const PString &value); + H323SignalPDU *GetConnectPDU(void); + + private: +}; + +#endif // H323_CON_HEADER + + diff --git a/h323_ep.cpp b/h323_ep.cpp new file mode 100644 index 0000000..a187de5 --- /dev/null +++ b/h323_ep.cpp @@ -0,0 +1,503 @@ +/////////////////////////////////////////////////////////////////////////////// +// // +// PBX4Linux // +// // +//---------------------------------------------------------------------------// +// Copyright: Andreas Eversberg // +// // +// h323_ep class // +// // +/////////////////////////////////////////////////////////////////////////////// + +/* + NOTE: + + The code was inspired by the isdn2h323 gateway my marco bode. + Thanx to marco budde for lerarning to program h323 and c++ from your code. + His homepage is www.telos.de, there you'll find the isdn2h323 gateway. + + Also thanx to others who write documents and applications for OpenH323. + + Andreas Eversberg +*/ + +#include +#include +#include +#include "main.h" + +//#include +//#include +//#include +//#include "g726codec.h" +//#include + +#include +#include +#include + +// +// constructor +// +H323_ep::H323_ep(void) +{ + terminalType = e_GatewayOnly; + + PDEBUG(DEBUG_H323, "H323 endpoint constuctor\n"); +} + +// +// destructor +// +H323_ep::~H323_ep() +{ + // clear all calls to remote endpoints + ClearAllCalls(); + + PDEBUG(DEBUG_H323, "H323 endpoint destuctor\n"); +} + + +// +// create connection +// +H323Connection *H323_ep::CreateConnection(unsigned callReference) +{ + PDEBUG(DEBUG_H323, "H323 endpoint create connection\n"); + + return new H323_con(*this, callReference); +} + + +// +// on establishment of conneciton +// +void H323_ep::OnConnectionEstablished(H323Connection &connection, const PString &token) +{ + const unsigned char *token_string = token; + + PDEBUG(DEBUG_H323, "H323 endpoint connection established to: %s\n", token_string); + + H323EndPoint::OnConnectionEstablished(connection, token); +} + +// +// on remote alerting +// +BOOL H323_ep::OnAlerting(H323Connection &connection, const H323SignalPDU &alertingPDU, const PString &user) +{ + class H323Port *port; + const unsigned char *token_string = connection.GetCallToken(); + const unsigned char *user_string = user; + struct message *message; + + PDEBUG(DEBUG_H323, "H323 endpoint alerting at: %s\n", user_string); + + mutex_h323.Wait(); + + if (!(port=(class H323Port *)find_port_with_token((char *)token_string))) + { + PERROR("cannot find port with token '%s'\n", token_string); + mutex_h323.Signal(); + return FALSE; + } + if (port->p_state==PORT_STATE_OUT_SETUP + || port->p_state==PORT_STATE_OUT_OVERLAP + || port->p_state==PORT_STATE_OUT_PROCEEDING) + { + port->new_state(PORT_STATE_OUT_ALERTING); + message = message_create(port->p_serial, ACTIVE_EPOINT(port->p_epointlist), PORT_TO_EPOINT, MESSAGE_ALERTING); + message_put(message); + } + + mutex_h323.Signal(); + + return TRUE; +} + + +// +// on clearing of connection +// +void H323_ep::OnConnectionCleared(H323Connection &connection, const PString &token) +{ + int cause; + class H323Port *port; + const unsigned char *token_string = token; + struct message *message; + + PDEBUG(DEBUG_H323, "H323 endpoint connection cleared.\n"); + + mutex_h323.Wait(); + + if (!(port=(class H323Port *)find_port_with_token((char *)token_string))) + { + PERROR("cannot find port with token '%s'\n", token_string); + mutex_h323.Signal(); + return; + } + + switch(connection.GetCallEndReason()) + { + case H323Connection::EndedByRemoteUser: + case H323Connection::EndedByCallerAbort: + case H323Connection::EndedByGatekeeper: + case H323Connection::EndedByCallForwarded: + cause = 16; // normal call clearing + break; + + case H323Connection::EndedByRefusal: + case H323Connection::EndedBySecurityDenial: + cause = 21; // call rejected + break; + + case H323Connection::EndedByNoAnswer: + cause = 19; // no answer from user + break; + + case H323Connection::EndedByTransportFail: + cause = 47; // resource unavaiable, unspecified + break; + + case H323Connection::EndedByNoBandwidth: + cause = 49; // quality of service not available + break; + + case H323Connection::EndedByNoUser: + cause = 1; // unallocated number + break; + + case H323Connection::EndedByCapabilityExchange: + cause = 65; // bearer capability not implemented + break; + + case H323Connection::EndedByRemoteBusy: + cause = 17; // user busy + break; + + case H323Connection::EndedByRemoteCongestion: + cause = 42; // switching equipment congestion + break; + + case H323Connection::EndedByUnreachable: + cause = 2; // no route ... + break; + + case H323Connection::EndedByNoEndPoint: + case H323Connection::EndedByConnectFail: + cause = 18; // no user responding + break; + + case H323Connection::EndedByHostOffline: + cause = 27; // destination out of order + break; + + case H323Connection::EndedByTemporaryFailure: + cause = 41; // temporary failure + break; + + default: + cause = 31; // normal, unspecified + break; + + } + + // delete channels + if (port->p_h323_channel_in) + delete port->p_h323_channel_in; + port->p_h323_channel_in = NULL; + if (port->p_h323_channel_out) + delete port->p_h323_channel_out; + port->p_h323_channel_out = NULL; + + /* release endpoint */ + message = message_create(port->p_serial, ACTIVE_EPOINT(port->p_epointlist), PORT_TO_EPOINT, MESSAGE_RELEASE); + message->param.disconnectinfo.cause = cause; + message->param.disconnectinfo.location = LOCATION_BEYOND; + message_put(message); + + /* delete port */ + delete port; + + mutex_h323.Signal(); +} + + +// +// open audio channel +// +BOOL H323_ep::OpenAudioChannel(H323Connection &connection, BOOL isEncoding, unsigned bufferSize, H323AudioCodec &codec) +{ + H323_chan *channel; + class H323Port *port; + const unsigned char *token_string = connection.GetCallToken(); + + PDEBUG(DEBUG_H323, "H323 endpoint audio channel open (isEndcoding=%d).\n", isEncoding); + + // disable the silence detection + codec.SetSilenceDetectionMode (H323AudioCodec::NoSilenceDetection); + + // create channels + if (isEncoding) + { + channel = new H323_chan(connection.GetCallToken(), TRUE); + } else + { + channel = new H323_chan(connection.GetCallToken(), FALSE); + } + if (!channel) + { + PERROR("channel for token '%s' not set", token_string); + return FALSE; + } + + // return the channel object + mutex_h323.Wait(); + if (!(port=(class H323Port *)find_port_with_token((char *)token_string))) + { + PERROR("cannot find port with token '%s'\n", token_string); + mutex_h323.Signal(); + return FALSE; + } + + // set channels + if (isEncoding) + { + port->p_h323_channel_out = channel; + } else + { + port->p_h323_channel_in = channel; + } + + mutex_h323.Signal(); + return codec.AttachChannel(channel, FALSE); +} + + +// +// open video channel +// +BOOL H323_ep::OpenVideoChannel(H323Connection &connection, BOOL isEncoding, H323VideoCodec &codec) +{ + PDEBUG(DEBUG_H323, "H323 endpoint video channel open (isEndcoding=%d).\n", isEncoding); + + + return FALSE; +} + + +// +// initialize H323 endpoint +// +BOOL H323_ep::Init(void) +{ + H323ListenerTCP *listener; + int pri; + + PDEBUG(DEBUG_H323, "H323 endpoint initialize\n"); + + // add keypad capability + H323_UserInputCapability::AddAllCapabilities(capabilities, 0, P_MAX_INDEX); + + /* will add codec in order of priority 1 = highest, 0 = don't use */ + pri = 1; + while (pri < 256) + { +#warning codecs are temporarily disabled due to api change +#if 0 + if (options.h323_gsm_pri == pri) + { + H323_GSM0610Capability * gsm_cap; + MicrosoftGSMAudioCapability * msgsm_cap; + + SetCapability(0, 0, gsm_cap = new H323_GSM0610Capability); + gsm_cap->SetTxFramesInPacket(options.h323_gsm_opt); + SetCapability(0, 0, msgsm_cap = new MicrosoftGSMAudioCapability); + msgsm_cap->SetTxFramesInPacket(options.h323_gsm_opt); + } + if (options.h323_g726_pri == pri) + { + if (options.h323_g726_opt > 4) + SetCapability(0, 0, new H323_G726_Capability(*this, H323_G726_Capability::e_40k)); + if (options.h323_g726_opt > 3) + SetCapability(0, 0, new H323_G726_Capability(*this, H323_G726_Capability::e_32k)); + if (options.h323_g726_opt > 2) + SetCapability(0, 0, new H323_G726_Capability(*this, H323_G726_Capability::e_24k)); + SetCapability(0, 0, new H323_G726_Capability(*this, H323_G726_Capability::e_16k)); + } + if (options.h323_g7231_pri == pri) + { +#if 0 + SetCapability(0, 0, new H323_G7231Capability(FALSE)); +#endif + } + if (options.h323_g729a_pri == pri) + { +#if 0 + SetCapability(0, 0, new H323_G729Capability()); +#endif + } + if (options.h323_lpc10_pri == pri) + { + SetCapability(0, 0, new H323_LPC10Capability(*this)); + } + if (options.h323_speex_pri == pri) + { + if (options.h323_speex_opt > 5) + SetCapability(0, 0, new SpeexNarrow6AudioCapability()); + if (options.h323_speex_opt > 4) + SetCapability(0, 0, new SpeexNarrow5AudioCapability()); + if (options.h323_speex_opt > 3) + SetCapability(0, 0, new SpeexNarrow4AudioCapability()); + if (options.h323_speex_opt > 2) + SetCapability(0, 0, new SpeexNarrow3AudioCapability()); + SetCapability(0, 0, new SpeexNarrow2AudioCapability()); + } + if (options.h323_xspeex_pri == pri) + { + if (options.h323_xspeex_opt > 5) + SetCapability(0, 0, new XiphSpeexNarrow6AudioCapability()); + if (options.h323_xspeex_opt > 4) + SetCapability(0, 0, new XiphSpeexNarrow5AudioCapability()); + if (options.h323_xspeex_opt > 3) + SetCapability(0, 0, new XiphSpeexNarrow4AudioCapability()); + if (options.h323_xspeex_opt > 2) + SetCapability(0, 0, new XiphSpeexNarrow3AudioCapability()); + SetCapability(0, 0, new XiphSpeexNarrow2AudioCapability()); + } +#endif + if (options.h323_law_pri == pri) + { + H323_G711Capability * g711uCap; + H323_G711Capability * g711aCap; + SetCapability(0, 0, g711uCap = new H323_G711Capability (H323_G711Capability::ALaw/*, H323_G711Capability::At64k*/)); +#warning H323_law frame size is disabled due to bug in OpenH323 +// g711uCap->SetTxFramesInPacket(options.h323_law_opt); + SetCapability(0, 0, g711aCap = new H323_G711Capability (H323_G711Capability::muLaw/*, H323_G711Capability::At64k*/)); +// g711aCap->SetTxFramesInPacket(options.h323_law_opt); + } + pri++; + } + + // h323 user is the hostname or given by h323_name + if (options.h323_name[0] == '\0') + { + if (getenv("HOSTNAME") == NULL) + { + cout << "OpenH323: Environment variable HOSTNAME not set. Please specify 'h323_name' in options.conf" << endl; + return FALSE; + } + } + SetLocalUserName((options.h323_name[0])?options.h323_name:getenv("HOSTNAME")); + + // create listener + if (options.h323_icall) + { + PIPSocket::Address interfaceAddress(INADDR_ANY); + listener = new H323ListenerTCP(*this, interfaceAddress, options.h323_port); + if (!StartListener(listener)) + { + cout << "OpenH323: Could not open H323 port " << listener->GetListenerPort() << endl; + return FALSE; + } + cout << "OpenH323: Waiting for incoming H323 connections on port " << listener->GetListenerPort() << endl; + } + + // register with gatekeeper + if (options.h323_gatekeeper) + { + if (options.h323_gatekeeper_host[0] == '\0') + { + if (DiscoverGatekeeper(new H323TransportUDP(*this))) + { + cout << "OpenH323: Registering with gatekeeper " << gatekeeper->GetIdentifier() << " (automatically)" << endl; + } else + { + cout << "OpenH323: Gatekeeper not found." << endl; + sleep(2); + } + } else + { + if (SetGatekeeper(options.h323_gatekeeper_host) == TRUE) + { + cout << "OpenH323: Registering with gatekeeper " << gatekeeper->GetIdentifier() << " (automatically)" << endl; + } else + { + cout << "OpenH323: Gatekeeper at " << gatekeeper->GetIdentifier() << " not found." << endl; + sleep(2); + } + } + } + + return TRUE; +} + + +// +// make an outgoing h323 call +// + +BOOL H323_ep::Call(char *token_string, char *caller, char *host) +{ + PString address; + PString token = ""; + BOOL failed = FALSE; + class H323Port *port; + struct message *message; + char *newtoken_string; + + PDEBUG(DEBUG_H323, "H323 endpoint call to host '%s'\n", host); + + address = host; + + if (!MakeCall(address, token)) + { + PDEBUG(DEBUG_H323, "H323 endpoint call to host '%s'\n", host); + failed = TRUE; + } + + // set new token + mutex_h323.Wait(); + if (!(port=(class H323Port *)find_port_with_token((char *)token_string))) + { + PERROR("cannot find port with token '%s'\n", token_string); + mutex_h323.Signal(); + return FALSE; + } + if (failed == TRUE) + { + PDEBUG(DEBUG_H323, "call of port '%s' failed.\n", token_string); + message = message_create(port->p_serial, ACTIVE_EPOINT(port->p_epointlist), PORT_TO_EPOINT, MESSAGE_RELEASE); + message->param.disconnectinfo.cause = 31; + message->param.disconnectinfo.location = LOCATION_PRIVATE_LOCAL; + message_put(message); + } else + { + PDEBUG(DEBUG_H323, "changing port name from '%s' to token '%s'\n", token_string, token.GetPointer()); + newtoken_string = token.GetPointer(); + SCPY(port->p_name, newtoken_string); + } + mutex_h323.Signal(); + PDEBUG(DEBUG_H323, "H323 endpoint call to host '%s'\n", host); + + if (failed == TRUE) + return FALSE; + return TRUE; +} + +void H323_ep::SetEndpointTypeInfo(H225_EndpointType &info) const +{ +// H225_VoiceCaps voicecaps; + PDEBUG(DEBUG_H323, "H323 endpoint set endpoint type info *TBD*\n"); + + H323EndPoint::SetEndpointTypeInfo(info); + +// protocols.SetTag(H225_SupportedProtocols::e_voice); +// (H225_VoiceCaps&)protocols = voicecaps; +// a_protocols.SetSize(1); +// a_protocols[0] = protocols; + +// gateway.IncludeOptionalField(H225_GatewayInfo::e_protocol); +// gateway.m_protocol = a_protocols; +// info.m_gateway = gateway; +} diff --git a/h323_ep.h b/h323_ep.h new file mode 100644 index 0000000..805d3b2 --- /dev/null +++ b/h323_ep.h @@ -0,0 +1,37 @@ +/////////////////////////////////////////////////////////////////////////////// +// // +// PBX4Linux // +// // +//---------------------------------------------------------------------------// +// Copyright: Andreas Eversberg // +// // +// h323_ep endpoint header file // +// // +/////////////////////////////////////////////////////////////////////////////// + + +#ifndef H323_EP_HEADER +#define H323_EP_HEADER + +class H323_con; +class H323_ep : public H323EndPoint +{ + public: + H323_ep(void); + ~H323_ep(); + H323Connection *CreateConnection(unsigned callReference); + void OnConnectionEstablished(H323Connection &connection, const PString &token); + BOOL OnAlerting(H323Connection &connection, const H323SignalPDU &alertingPDU, const PString &user); + void OnConnectionCleared(H323Connection &connection, const PString &token); + BOOL OpenAudioChannel(H323Connection &connection, BOOL isEncoding, unsigned bufferSize, H323AudioCodec &codec); + BOOL OpenVideoChannel(H323Connection &connection, BOOL isEncoding, H323VideoCodec &codec); + BOOL Init(void); + void SetEndpointTypeInfo (H225_EndpointType & info) const; + BOOL Call(char *token_string, char *caller, char *host); + + private: + +}; + +#endif // H323_EP_HEADER + diff --git a/h323conf.c b/h323conf.c new file mode 100644 index 0000000..e0589e1 --- /dev/null +++ b/h323conf.c @@ -0,0 +1,137 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** parse h323 gateway config file ** +** ** +\*****************************************************************************/ + +#include +#include +#include +#include "main.h" + +/* parse h323_gateway.conf + * + * searches for the given ip and returns the extension or NULL if not found + */ +char *parse_h323gateway(char *ip, char *opt, int opt_size) +{ + FILE *fp=NULL; + char filename[256]; + char *p; + unsigned int line,i; + char buffer[256]; + static char host_ip[32], extension[32], option[64]; + int found = 0; + + SPRINT(filename, "%s/h323_gateway.conf", INSTALL_DATA); + + if (!(fp = fopen(filename, "r"))) + { + PERROR("Cannot open h323 gateway map: \"%s\"\n", filename); + return(0); + } + + line=0; + while((fgets(buffer, sizeof(buffer), fp))) + { + line++; + buffer[sizeof(buffer)-1] = '\0'; + if (buffer[0]) buffer[strlen(buffer)-1] = '\0'; + p = buffer; + + while(*p <= 32) /* skip spaces */ + { + if (*p == 0) + break; + p++; + } + if (*p==0 || *p=='#') /* ignore comments and empty line */ + continue; + + host_ip[0]=0; + extension[0]=0; + option[0]=0; + + i=0; /* read host ip */ + while(*p > 32) + { + if (i+1 >= sizeof(host_ip)) + { + PERROR_RUNTIME("Error in %s (line %d): ip too long.\n",filename,line); + break; + } + host_ip[i+1] = '\0'; + host_ip[i++] = *p++; + } + + while(*p <= 32) /* skip spaces */ + { + if (*p == 0) + break; + p++; + } + + if (*p!=0 && *p!='#') /* extension */ + { + i=0; /* read extension */ + while(*p > 32) + { + if (i+1 >= sizeof(extension)) + { + PERROR_RUNTIME("Error in %s (line %d): extension too long.\n",filename,line); + break; + } + extension[i+1] = '\0'; + extension[i++] = *p++; + } + while(*p <= 32) /* skip spaces */ + { + if (*p == 0) + break; + p++; + } + } + + if (*p!=0 && *p!='#') /* option */ + { + i=0; /* read option */ + while(*p > 32) + { + if (i+1 >= sizeof(option)) + { + PERROR_RUNTIME("Error in %s (line %d): option too long.\n",filename,line); + break; + } + option[i+1] = '\0'; + option[i++] = *p++; + } + // ignoring more + } + + if (!!strcasecmp(ip, host_ip)) + continue; + + if (extension[0] == '\0') + continue; + + found = 1; + break; /* found entry */ + } + + if (fp) fclose(fp); + + if (found) + { + UNCPY(opt, option, opt_size-1); + opt[opt_size-1] = '\0'; + return(extension); + } + return(0); +} + + diff --git a/h323conf.h b/h323conf.h new file mode 100644 index 0000000..0e52347 --- /dev/null +++ b/h323conf.h @@ -0,0 +1,14 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** h323gw header file ** +** ** +\*****************************************************************************/ + +char *parse_h323gateway(char *ip, char *opt, int opt_size); + + diff --git a/ie.cpp b/ie.cpp new file mode 100644 index 0000000..0a5f636 --- /dev/null +++ b/ie.cpp @@ -0,0 +1,1543 @@ + +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** information elements encode and decode ** +** ** +\*****************************************************************************/ + +/* + the pointer of enc_ie_* always points to the IE itself + if qi is not NULL (TE-mode), offset is set +*/ + +/* support stuff */ +static void strnncpy(unsigned char *dest, unsigned char *src, int len, int dst_len) +{ + if (len > dst_len-1) + len = dst_len-1; + UNCPY((char *)dest, (char *)src, len); + dest[len] = '\0'; +} + + +/* IE_COMPLETE */ +void Pdss1::enc_ie_complete(unsigned char **ntmode, msg_t *msg, int complete) +{ + unsigned char *p; + Q931_info_t *qi = (Q931_info_t *)(msg->data + mISDN_HEADER_LEN); + + if (complete<0 || complete>1) + { + PERROR("complete(%d) is out of range.\n", complete); + return; + } + + if (complete) + printisdn(" complete=%d\n", complete); + + if (complete) + { + p = msg_put(msg, 1); + if (p_m_d_ntmode) + { + *ntmode = p; + } else + qi->sending_complete.off = p - (unsigned char *)qi - sizeof(Q931_info_t); + p[0] = IE_COMPLETE; + } +} + +void Pdss1::dec_ie_complete(unsigned char *p, Q931_info_t *qi, int *complete) +{ + *complete = 0; + if (!p_m_d_ntmode) + { + if (qi->sending_complete.off) + *complete = 1; + } else + if (p) + *complete = 1; + + if (*complete) + printisdn(" complete=%d\n", *complete); +} + + +/* IE_BEARER */ +void Pdss1::enc_ie_bearer(unsigned char **ntmode, msg_t *msg, int coding, int capability, int mode, int rate, int multi, int user) +{ + unsigned char *p; + Q931_info_t *qi = (Q931_info_t *)(msg->data + mISDN_HEADER_LEN); + int l; + + if (coding<0 || coding>3) + { + PERROR("coding(%d) is out of range.\n", coding); + return; + } + if (capability<0 || capability>31) + { + PERROR("capability(%d) is out of range.\n", capability); + return; + } + if (mode<0 || mode>3) + { + PERROR("mode(%d) is out of range.\n", mode); + return; + } + if (rate<0 || rate>31) + { + PERROR("rate(%d) is out of range.\n", rate); + return; + } + if (multi>127) + { + PERROR("multi(%d) is out of range.\n", multi); + return; + } + if (user>31) + { + PERROR("user L1(%d) is out of range.\n", user); + return; + } + if (rate!=24 && multi>=0) + { + PERROR("multi(%d) is only possible if rate(%d) would be 24.\n", multi, rate); + multi = -1; + } + + printisdn(" coding=%d capability=%d mode=%d rate=%d multi=%d user=%d\n", coding, capability, mode, rate, multi, user); + + l = 2 + (multi>=0) + (user>=0); + p = msg_put(msg, l+2); + if (p_m_d_ntmode) + *ntmode = p+1; + else + qi->bearer_capability.off = p - (unsigned char *)qi - sizeof(Q931_info_t); + p[0] = IE_BEARER; + p[1] = l; + p[2] = 0x80 + (coding<<5) + capability; + p[3] = 0x80 + (mode<<5) + rate; + if (multi >= 0) + p[4] = 0x80 + multi; + if (user >= 0) + p[4+(multi>=0)] = 0xa0 + user; +} + +void Pdss1::dec_ie_bearer(unsigned char *p, Q931_info_t *qi, int *coding, int *capability, int *mode, int *rate, int *multi, int *user) +{ + *coding = -1; + *capability = -1; + *mode = -1; + *rate = -1; + *multi = -1; + *user = -1; + + if (!p_m_d_ntmode) + { + p = NULL; + if (qi->bearer_capability.off) + p = (unsigned char *)qi + sizeof(Q931_info_t) + qi->bearer_capability.off + 1; + } + if (!p) + return; + if (p[0] < 2) + { + PERROR("IE too short (%d).\n", p[0]); + return; + } + + *coding = (p[1]&0x60) >> 5; + *capability = p[1] & 0x1f; + if (p[0]>=2) + { + *mode = (p[2]&0x60) >> 5; + *rate = p[2] & 0x1f; + } + if (p[0]>=3 && *rate==0x18) + { + *multi = p[3] & 0x7f; + if (p[0]>=4) + *user = p[4] & 0x1f; + } else + { + if (p[0]>=3) + *user = p[3] & 0x1f; + } + + printisdn(" coding=%d capability=%d mode=%d rate=%d multi=%d user=%d\n", *coding, *capability, *mode, *rate, *multi, *user); +} + + +/* IE_HLC */ +void Pdss1::enc_ie_hlc(unsigned char **ntmode, msg_t *msg, int coding, int interpretation, int presentation, int hlc, int exthlc) +{ + unsigned char *p; + Q931_info_t *qi = (Q931_info_t *)(msg->data + mISDN_HEADER_LEN); + int l; + + if (coding<0 || coding>3) + { + PERROR("coding(%d) is out of range.\n", coding); + return; + } + if (interpretation<0 || interpretation>7) + { + PERROR("interpretation(%d) is out of range.\n", interpretation); + return; + } + if (presentation<0 || presentation>3) + { + PERROR("presentation(%d) is out of range.\n", presentation); + return; + } + if (hlc<0 || hlc>127) + { + PERROR("hlc(%d) is out of range.\n", hlc); + return; + } + if (exthlc>127) + { + PERROR("hlc(%d) is out of range.\n", exthlc); + return; + } + + printisdn(" coding=%d interpretation=%d presentation=%d hlc=%d exthlc=%d\n", coding, interpretation, presentation, hlc, exthlc); + + l = 2 + (exthlc>=0); + p = msg_put(msg, l+2); + if (p_m_d_ntmode) + *ntmode = p+1; + else + qi->hlc.off = p - (unsigned char *)qi - sizeof(Q931_info_t); + p[0] = IE_HLC; + p[1] = l; + p[2] = 0x80 + (coding<<5) + (interpretation<<2) + presentation; + if (exthlc >= 0) + { + p[3] = hlc; + p[4] = 0x80 + exthlc; + } else + p[3] = 0x80 + hlc; +} + +void Pdss1::dec_ie_hlc(unsigned char *p, Q931_info_t *qi, int *coding, int *interpretation, int *presentation, int *hlc, int *exthlc) +{ + *coding = -1; + *interpretation = -1; + *presentation = -1; + *hlc = -1; + *exthlc = -1; + + if (!p_m_d_ntmode) + { + p = NULL; + if (qi->hlc.off) + p = (unsigned char *)qi + sizeof(Q931_info_t) + qi->hlc.off + 1; + } + if (!p) + return; + if (p[0] < 2) + { + PERROR("IE too short (%d).\n", p[0]); + return; + } + + *coding = (p[1]&0x60) >> 5; + *interpretation = (p[1]&0x1c) >> 2; + *presentation = p[1] & 0x03; + *hlc = p[2] & 0x7f; + if (p[0]>=3) + { + *exthlc = p[3] & 0x7f; + } + + printisdn(" coding=%d interpretation=%d presentation=%d hlc=%d exthlc=%d\n", *coding, *interpretation, *presentation, *hlc, *exthlc); +} + + +/* IE_CALL_ID */ +void Pdss1::enc_ie_call_id(unsigned char **ntmode, msg_t *msg, unsigned char *callid, int callid_len) +{ + unsigned char *p; + Q931_info_t *qi = (Q931_info_t *)(msg->data + mISDN_HEADER_LEN); + int l; + + char debug[25]; + int i; + + if (!callid || callid_len<=0) + { + return; + } + if (callid_len>8) + { + PERROR("callid_len(%d) is out of range.\n", callid_len); + return; + } + + i = 0; + while(i < callid_len) + { + UPRINT(debug+(i*3), " %02x", callid[i]); + i++; + } + + printisdn(" callid%s\n", debug); + + l = callid_len; + p = msg_put(msg, l+2); + if (p_m_d_ntmode) + *ntmode = p+1; + else + qi->call_id.off = p - (unsigned char *)qi - sizeof(Q931_info_t); + p[0] = IE_CALL_ID; + p[1] = l; + memcpy(p+2, callid, callid_len); +} + +void Pdss1::dec_ie_call_id(unsigned char *p, Q931_info_t *qi, unsigned char *callid, int *callid_len) +{ + char debug[25]; + int i; + + *callid_len = -1; + + if (!p_m_d_ntmode) + { + p = NULL; + if (qi->call_id.off) + p = (unsigned char *)qi + sizeof(Q931_info_t) + qi->call_id.off + 1; + } + if (!p) + return; + if (p[0] > 8) + { + PERROR("IE too long (%d).\n", p[0]); + return; + } + + *callid_len = p[0]; + memcpy(callid, p+1, *callid_len); + + i = 0; + while(i < *callid_len) + { + UPRINT(debug+(i*3), " %02x", callid[i]); + i++; + } + + printisdn(" callid%s\n", debug); +} + + +/* IE_CALLED_PN */ +void Pdss1::enc_ie_called_pn(unsigned char **ntmode, msg_t *msg, int type, int plan, unsigned char *number) +{ + unsigned char *p; + Q931_info_t *qi = (Q931_info_t *)(msg->data + mISDN_HEADER_LEN); + int l; + + if (type<0 || type>7) + { + PERROR("type(%d) is out of range.\n", type); + return; + } + if (plan<0 || plan>15) + { + PERROR("plan(%d) is out of range.\n", plan); + return; + } + if (!number[0]) + { + PERROR("number is not given.\n"); + return; + } + + printisdn(" type=%d plan=%d number='%s'\n", type, plan, number); + + l = 1+strlen((char *)number); + p = msg_put(msg, l+2); + if (p_m_d_ntmode) + *ntmode = p+1; + else + qi->called_nr.off = p - (unsigned char *)qi - sizeof(Q931_info_t); + p[0] = IE_CALLED_PN; + p[1] = l; + p[2] = 0x80 + (type<<4) + plan; + UNCPY((char *)p+3, (char *)number, strlen((char *)number)); +} + +void Pdss1::dec_ie_called_pn(unsigned char *p, Q931_info_t *qi, int *type, int *plan, unsigned char *number, int number_len) +{ + *type = -1; + *plan = -1; + *number = '\0'; + + if (!p_m_d_ntmode) + { + p = NULL; + if (qi->called_nr.off) + p = (unsigned char *)qi + sizeof(Q931_info_t) + qi->called_nr.off + 1; + } + if (!p) + return; + if (p[0] < 2) + { + PERROR("IE too short (%d).\n", p[0]); + return; + } + + *type = (p[1]&0x70) >> 4; + *plan = p[1] & 0xf; + strnncpy(number, p+2, p[0]-1, number_len); + + printisdn(" type=%d plan=%d number='%s'\n", *type, *plan, number); +} + + +/* IE_CALLING_PN */ +void Pdss1::enc_ie_calling_pn(unsigned char **ntmode, msg_t *msg, int type, int plan, int present, int screen, unsigned char *number) +{ + unsigned char *p; + Q931_info_t *qi = (Q931_info_t *)(msg->data + mISDN_HEADER_LEN); + int l; + + if (type<0 || type>7) + { + PERROR("type(%d) is out of range.\n", type); + return; + } + if (plan<0 || plan>15) + { + PERROR("plan(%d) is out of range.\n", plan); + return; + } + if (present>3) + { + PERROR("present(%d) is out of range.\n", present); + return; + } + if (present >= 0) if (screen<0 || screen>3) + { + PERROR("screen(%d) is out of range.\n", screen); + return; + } + + printisdn(" type=%d plan=%d present=%d screen=%d number='%s'\n", type, plan, present, screen, number); + + l = 1; + if (number) if (number[0]) + l += strlen((char *)number); + if (present >= 0) + l += 1; + p = msg_put(msg, l+2); + if (p_m_d_ntmode) + *ntmode = p+1; + else + qi->calling_nr.off = p - (unsigned char *)qi - sizeof(Q931_info_t); + p[0] = IE_CALLING_PN; + p[1] = l; + if (present >= 0) + { + p[2] = 0x00 + (type<<4) + plan; + p[3] = 0x80 + (present<<5) + screen; + if (number) if (number[0]) + UNCPY((char *)p+4, (char *)number, strlen((char *)number)); + } else + { + p[2] = 0x80 + (type<<4) + plan; + if (number) if (number[0]) + UNCPY((char *)p+3, (char *)number, strlen((char *)number)); + } +} + +void Pdss1::dec_ie_calling_pn(unsigned char *p, Q931_info_t *qi, int *type, int *plan, int *present, int *screen, unsigned char *number, int number_len) +{ + *type = -1; + *plan = -1; + *present = -1; + *screen = -1; + *number = '\0'; + + if (!p_m_d_ntmode) + { + p = NULL; + if (qi->calling_nr.off) + p = (unsigned char *)qi + sizeof(Q931_info_t) + qi->calling_nr.off + 1; + } + if (!p) + return; + if (p[0] < 1) + { + PERROR("IE too short (%d).\n", p[0]); + return; + } + + *type = (p[1]&0x70) >> 4; + *plan = p[1] & 0xf; + if (!(p[1] & 0x80)) + { + if (p[0] < 2) + { + PERROR("IE too short (%d).\n", p[0]); + return; + } + *present = (p[2]&0x60) >> 5; + *screen = p[2] & 0x3; + strnncpy(number, p+3, p[0]-2, number_len); + } else + { + strnncpy(number, p+2, p[0]-1, number_len); + } + + printisdn(" type=%d plan=%d present=%d screen=%d number='%s'\n", *type, *plan, *present, *screen, number); +} + + +/* IE_CONNECTED_PN */ +void Pdss1::enc_ie_connected_pn(unsigned char **ntmode, msg_t *msg, int type, int plan, int present, int screen, unsigned char *number) +{ + unsigned char *p; + Q931_info_t *qi = (Q931_info_t *)(msg->data + mISDN_HEADER_LEN); + int l; + + if (type<0 || type>7) + { + PERROR("type(%d) is out of range.\n", type); + return; + } + if (plan<0 || plan>15) + { + PERROR("plan(%d) is out of range.\n", plan); + return; + } + if (present>3) + { + PERROR("present(%d) is out of range.\n", present); + return; + } + if (present >= 0) if (screen<0 || screen>3) + { + PERROR("screen(%d) is out of range.\n", screen); + return; + } + + printisdn(" type=%d plan=%d present=%d screen=%d number='%s'\n", type, plan, present, screen, number); + + l = 1; + if (number) if (number[0]) + l += strlen((char *)number); + if (present >= 0) + l += 1; + p = msg_put(msg, l+2); + if (p_m_d_ntmode) + *ntmode = p+1; + else + qi->connected_nr.off = p - (unsigned char *)qi - sizeof(Q931_info_t); + p[0] = IE_CONNECT_PN; + p[1] = l; + if (present >= 0) + { + p[2] = 0x00 + (type<<4) + plan; + p[3] = 0x80 + (present<<5) + screen; + if (number) if (number[0]) + UNCPY((char *)p+4, (char *)number, strlen((char *)number)); + } else + { + p[2] = 0x80 + (type<<4) + plan; + if (number) if (number[0]) + UNCPY((char *)p+3, (char *)number, strlen((char *)number)); + } +} + +void Pdss1::dec_ie_connected_pn(unsigned char *p, Q931_info_t *qi, int *type, int *plan, int *present, int *screen, unsigned char *number, int number_len) +{ + *type = -1; + *plan = -1; + *present = -1; + *screen = -1; + *number = '\0'; + + if (!p_m_d_ntmode) + { + p = NULL; + if (qi->connected_nr.off) + p = (unsigned char *)qi + sizeof(Q931_info_t) + qi->connected_nr.off + 1; + } + if (!p) + return; + if (p[0] < 1) + { + PERROR("IE too short (%d).\n", p[0]); + return; + } + + *type = (p[1]&0x70) >> 4; + *plan = p[1] & 0xf; + if (!(p[1] & 0x80)) + { + if (p[0] < 2) + { + PERROR("IE too short (%d).\n", p[0]); + return; + } + *present = (p[2]&0x60) >> 5; + *screen = p[2] & 0x3; + strnncpy(number, p+3, p[0]-2, number_len); + } else + { + strnncpy(number, p+2, p[0]-1, number_len); + } + + printisdn(" type=%d plan=%d present=%d screen=%d number='%s'\n", *type, *plan, *present, *screen, number); +} + + +/* IE_CAUSE */ +void Pdss1::enc_ie_cause(unsigned char **ntmode, msg_t *msg, int location, int cause) +{ + unsigned char *p; + Q931_info_t *qi = (Q931_info_t *)(msg->data + mISDN_HEADER_LEN); + int l; + + if (location<0 || location>7) + { + PERROR("location(%d) is out of range.\n", location); + return; + } + if (cause<0 || cause>127) + { + PERROR("cause(%d) is out of range.\n", cause); + return; + } + + printisdn(" location=%d cause=%d\n", location, cause); + + l = 2; + p = msg_put(msg, l+2); + if (p_m_d_ntmode) + *ntmode = p+1; + else + qi->cause.off = p - (unsigned char *)qi - sizeof(Q931_info_t); + p[0] = IE_CAUSE; + p[1] = l; + p[2] = 0x80 + location; + p[3] = 0x80 + cause; +} +void enc_ie_cause_standalone(unsigned char **ntmode, msg_t *msg, int location, int cause) +{ + unsigned char *p = msg_put(msg, 4); + Q931_info_t *qi = (Q931_info_t *)(msg->data + mISDN_HEADER_LEN); + if (ntmode) + *ntmode = p+1; + else + qi->cause.off = p - (unsigned char *)qi - sizeof(Q931_info_t); + p[0] = IE_CAUSE; + p[1] = 2; + p[2] = 0x80 + location; + p[3] = 0x80 + cause; +} + + +void Pdss1::dec_ie_cause(unsigned char *p, Q931_info_t *qi, int *location, int *cause) +{ + *location = -1; + *cause = -1; + + if (!p_m_d_ntmode) + { + p = NULL; + if (qi->cause.off) + p = (unsigned char *)qi + sizeof(Q931_info_t) + qi->cause.off + 1; + } + if (!p) + return; + if (p[0] < 2) + { + PERROR("IE too short (%d).\n", p[0]); + return; + } + + *location = p[1] & 0x0f; + *cause = p[2] & 0x7f; + + printisdn(" location=%d cause=%d\n", *location, *cause); +} + + +/* IE_CHANNEL_ID */ +void Pdss1::enc_ie_channel_id(unsigned char **ntmode, msg_t *msg, int exclusive, int channel) +{ + unsigned char *p; + Q931_info_t *qi = (Q931_info_t *)(msg->data + mISDN_HEADER_LEN); + int l; + int pri = p_m_mISDNport->pri; + + if (exclusive<0 || exclusive>1) + { + PERROR("exclusive(%d) is out of range.\n", exclusive); + return; + } + if ((channel<=0 && channel!=CHANNEL_NO && channel!=CHANNEL_ANY) + || (!pri && channel>2) + || (pri && channel>127) + || (pri && channel==16)) + { + PERROR("channel(%d) is out of range.\n", channel); + return; + } + + printisdn(" exclusive=%d channel=%d\n", exclusive, channel); + + if (!pri) + { + /* BRI */ + l = 1; + p = msg_put(msg, l+2); + if (p_m_d_ntmode) + *ntmode = p+1; + else + qi->channel_id.off = p - (unsigned char *)qi - sizeof(Q931_info_t); + p[0] = IE_CHANNEL_ID; + p[1] = l; + if (channel == CHANNEL_NO) + channel = 0; + else if (channel == CHANNEL_ANY) + channel = 3; + p[2] = 0x80 + (exclusive<<3) + channel; + } else + { + /* PRI */ + if (channel == CHANNEL_NO) /* no channel */ + return; /* IE not present */ + if (channel == CHANNEL_ANY) /* any channel */ + { + l = 1; + p = msg_put(msg, l+2); + if (p_m_d_ntmode) + *ntmode = p+1; + else + qi->channel_id.off = p - (unsigned char *)qi - sizeof(Q931_info_t); + p[0] = IE_CHANNEL_ID; + p[1] = l; + p[2] = 0x80 + 0x20 + 0x03; + return; /* end */ + } + l = 3; + p = msg_put(msg, l+2); + if (p_m_d_ntmode) + *ntmode = p+1; + else + qi->channel_id.off = p - (unsigned char *)qi - sizeof(Q931_info_t); + p[0] = IE_CHANNEL_ID; + p[1] = l; + p[2] = 0x80 + 0x20 + (exclusive<<3) + 0x01; + p[3] = 0x80 + 3; /* CCITT, Number, B-type */ + p[4] = 0x80 + channel; + } +} + +void Pdss1::dec_ie_channel_id(unsigned char *p, Q931_info_t *qi, int *exclusive, int *channel) +{ + int pri = p_m_mISDNport->pri; + + *exclusive = -1; + *channel = -1; + + if (!p_m_d_ntmode) + { + p = NULL; + if (qi->channel_id.off) + p = (unsigned char *)qi + sizeof(Q931_info_t) + qi->channel_id.off + 1; + } + if (!p) + return; + if (p[0] < 1) + { + PERROR("IE too short (%d).\n", p[0]); + return; + } + + if (p[1] & 0x40) + { + PERROR("refering to channels of other interfaces is not supported.\n"); + return; + } + if (p[1] & 0x04) + { + PERROR("using d-channel is not supported.\n"); + return; + } + + *exclusive = (p[1]&0x08) >> 3; + if (!pri) + { + /* BRI */ + if (p[1] & 0x20) + { + PERROR("extended channel ID with non PRI interface.\n"); + return; + } + *channel = p[1] & 0x03; + if (*channel == 3) + *channel = CHANNEL_ANY; + else if (*channel == 0) + *channel = CHANNEL_NO; + } else + { + /* PRI */ + if (p[0] < 1) + { + PERROR("IE too short for PRI (%d).\n", p[0]); + return; + } + if (!(p[1] & 0x20)) + { + PERROR("basic channel ID with PRI interface.\n"); + return; + } + if ((p[1]&0x03) == 0x00) + { + /* no channel */ + *channel = CHANNEL_NO; + return; + } + if ((p[1]&0x03) == 0x03) + { + /* any channel */ + *channel = CHANNEL_ANY; + return; + } + if (p[0] < 3) + { + PERROR("%s: ERROR: IE too short for PRI with channel(%d).\n", __FUNCTION__, p[0]); + return; + } + if (p[2] & 0x10) + { + PERROR("channel map not supported.\n"); + return; + } + *channel = p[3] & 0x7f; + if (*channel<1 | *channel==16) + { + PERROR("PRI interface channel out of range (%d).\n", *channel); + return; + } + } + + printisdn(" exclusive=%d channel=%d\n", *exclusive, *channel); +} + + +/* IE_DATE */ +void Pdss1::enc_ie_date(unsigned char **ntmode, msg_t *msg, time_t ti, int no_seconds) +{ + unsigned char *p; + Q931_info_t *qi = (Q931_info_t *)(msg->data + mISDN_HEADER_LEN); + int l; + + struct tm *tm; + + tm = localtime(&ti); + if (!tm) + { + PERROR("localtime() returned NULL.\n"); + return; + } + + printisdn(" year=%d month=%d day=%d hour=%d minute=%d second=%d\n", tm->tm_year%100, tm->tm_mon+1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec); + + l = 5 + (!no_seconds); + p = msg_put(msg, l+2); + if (p_m_d_ntmode) + *ntmode = p+1; + else + qi->date.off = p - (unsigned char *)qi - sizeof(Q931_info_t); + p[0] = IE_DATE; + p[1] = l; + p[2] = tm->tm_year % 100; + p[3] = tm->tm_mon + 1; + p[4] = tm->tm_mday; + p[5] = tm->tm_hour; + p[6] = tm->tm_min; + if (!no_seconds) + p[7] = tm->tm_sec; +} + + +/* IE_DISPLAY */ +void Pdss1::enc_ie_display(unsigned char **ntmode, msg_t *msg, unsigned char *display) +{ + unsigned char *p; + Q931_info_t *qi = (Q931_info_t *)(msg->data + mISDN_HEADER_LEN); + int l; + + if (!display[0]) + { + PERROR("display text not given.\n"); + return; + } + + if (strlen((char *)display) > 80) + { + PERROR("display text too long (max 80 chars), cutting.\n"); + display[80] = '\0'; + } + + printisdn(" display='%s' (len=%d)\n", display, strlen((char *)display)); + + l = strlen((char *)display); + p = msg_put(msg, l+2); + if (p_m_d_ntmode) + *ntmode = p+1; + else + qi->display.off = p - (unsigned char *)qi - sizeof(Q931_info_t); + p[0] = IE_DISPLAY; + p[1] = l; + UNCPY((char *)p+2, (char *)display, strlen((char *)display)); +} + +void Pdss1::dec_ie_display(unsigned char *p, Q931_info_t *qi, unsigned char *display, int display_len) +{ + *display = '\0'; + + if (!p_m_d_ntmode) + { + p = NULL; + if (qi->display.off) + p = (unsigned char *)qi + sizeof(Q931_info_t) + qi->display.off + 1; + } + if (!p) + return; + if (p[0] < 1) + { + PERROR("IE too short (%d).\n", p[0]); + return; + } + + strnncpy(display, p+1, p[0], display_len); + + printisdn(" display='%s'\n", display); +} + + +/* IE_KEYPAD */ +void Pdss1::enc_ie_keypad(unsigned char **ntmode, msg_t *msg, unsigned char *keypad) +{ + unsigned char *p; + Q931_info_t *qi = (Q931_info_t *)(msg->data + mISDN_HEADER_LEN); + int l; + + if (!keypad[0]) + { + PERROR("keypad info not given.\n"); + return; + } + + printisdn(" keypad='%s'\n", keypad); + + l = strlen((char *)keypad); + p = msg_put(msg, l+2); + if (p_m_d_ntmode) + *ntmode = p+1; + else + qi->keypad.off = p - (unsigned char *)qi - sizeof(Q931_info_t); + p[0] = IE_KEYPAD; + p[1] = l; + UNCPY((char *)p+2, (char *)keypad, strlen((char *)keypad)); +} + +void Pdss1::dec_ie_keypad(unsigned char *p, Q931_info_t *qi, unsigned char *keypad, int keypad_len) +{ + *keypad = '\0'; + + if (!p_m_d_ntmode) + { + p = NULL; + if (qi->keypad.off) + p = (unsigned char *)qi + sizeof(Q931_info_t) + qi->keypad.off + 1; + } + if (!p) + return; + if (p[0] < 1) + { + PERROR("IE too short (%d).\n", p[0]); + return; + } + + strnncpy(keypad, p+1, p[0], keypad_len); + + printisdn(" keypad='%s'\n", keypad); +} + + +/* IE_NOTIFY */ +void Pdss1::enc_ie_notify(unsigned char **ntmode, msg_t *msg, int notify) +{ + unsigned char *p; + Q931_info_t *qi = (Q931_info_t *)(msg->data + mISDN_HEADER_LEN); + int l; + + if (notify<0 || notify>0x7f) + { + PERROR("notify(%d) is out of range.\n", notify); + return; + } + + printisdn(" notify=%d\n", notify); + + l = 1; + p = msg_put(msg, l+2); + if (p_m_d_ntmode) + *ntmode = p+1; + else + qi->notify.off = p - (unsigned char *)qi - sizeof(Q931_info_t); + p[0] = IE_NOTIFY; + p[1] = l; + p[2] = 0x80 + notify; +} + +void Pdss1::dec_ie_notify(unsigned char *p, Q931_info_t *qi, int *notify) +{ + *notify = -1; + + if (!p_m_d_ntmode) + { + p = NULL; + if (qi->notify.off) + p = (unsigned char *)qi + sizeof(Q931_info_t) + qi->notify.off + 1; + } + if (!p) + return; + if (p[0] < 1) + { + PERROR("IE too short (%d).\n", p[0]); + return; + } + + *notify = p[1] & 0x7f; + + printisdn(" notify=%d\n", *notify); +} + + +/* IE_PROGRESS */ +void Pdss1::enc_ie_progress(unsigned char **ntmode, msg_t *msg, int coding, int location, int progress) +{ + unsigned char *p; + Q931_info_t *qi = (Q931_info_t *)(msg->data + mISDN_HEADER_LEN); + int l; + + if (coding<0 || coding>0x03) + { + PERROR("coding(%d) is out of range.\n", coding); + return; + } + if (location<0 || location>0x0f) + { + PERROR("location(%d) is out of range.\n", location); + return; + } + if (progress<0 || progress>0x7f) + { + PERROR("progress(%d) is out of range.\n", progress); + return; + } + + printisdn(" coding=%d location=%d progress=%d\n", coding, location, progress); + + l = 2; + p = msg_put(msg, l+2); + if (p_m_d_ntmode) + *ntmode = p+1; + else + qi->progress.off = p - (unsigned char *)qi - sizeof(Q931_info_t); + p[0] = IE_PROGRESS; + p[1] = l; + p[2] = 0x80 + (coding<<5) + location; + p[3] = 0x80 + progress; +} + +void Pdss1::dec_ie_progress(unsigned char *p, Q931_info_t *qi, int *coding, int *location, int *progress) +{ + *coding = -1; + *location = -1; + *progress = -1; + + if (!p_m_d_ntmode) + { + p = NULL; + if (qi->progress.off) + p = (unsigned char *)qi + sizeof(Q931_info_t) + qi->progress.off + 1; + } + if (!p) + return; + if (p[0] < 1) + { + PERROR("IE too short (%d).\n", p[0]); + return; + } + + *coding = (p[1]&0x60) >> 5; + *location = p[1] & 0x0f; + *progress = p[2] & 0x7f; + + printisdn(" coding=%d location=%d progress=%d\n", *coding, *location, *progress); +} + + +/* IE_REDIR_NR (redirecting = during MT_SETUP) */ +void Pdss1::enc_ie_redir_nr(unsigned char **ntmode, msg_t *msg, int type, int plan, int present, int screen, int reason, unsigned char *number) +{ + unsigned char *p; + Q931_info_t *qi = (Q931_info_t *)(msg->data + mISDN_HEADER_LEN); + int l; + + if (type<0 || type>7) + { + PERROR("type(%d) is out of range.\n", type); + return; + } + if (plan<0 || plan>15) + { + PERROR("plan(%d) is out of range.\n", plan); + return; + } + if (present > 3) + { + PERROR("present(%d) is out of range.\n", present); + return; + } + if (present >= 0) if (screen<0 || screen>3) + { + PERROR("screen(%d) is out of range.\n", screen); + return; + } + if (reason > 0x0f) + { + PERROR("reason(%d) is out of range.\n", reason); + return; + } + + printisdn(" type=%d plan=%d present=%d screen=%d readon=%d number='%s'\n", type, plan, present, screen, reason, number); + + l = 1; + if (number) + l += strlen((char *)number); + if (present >= 0) + { + l += 1; + if (reason >= 0) + l += 1; + } + p = msg_put(msg, l+2); + if (p_m_d_ntmode) + *ntmode = p+1; + else + qi->redirect_nr.off = p - (unsigned char *)qi - sizeof(Q931_info_t); + p[0] = IE_REDIR_NR; + p[1] = l; + if (present >= 0) + { + if (reason >= 0) + { + p[2] = 0x00 + (type<<4) + plan; + p[3] = 0x00 + (present<<5) + screen; + p[4] = 0x80 + reason; + if (number) + UNCPY((char *)p+5, (char *)number, strlen((char *)number)); + } else + { + p[2] = 0x00 + (type<<4) + plan; + p[3] = 0x80 + (present<<5) + screen; + if (number) + UNCPY((char *)p+4, (char *)number, strlen((char *)number)); + } + } else + { + p[2] = 0x80 + (type<<4) + plan; + if (number) if (number[0]) + UNCPY((char *)p+3, (char *)number, strlen((char *)number)); + } +} + +void Pdss1::dec_ie_redir_nr(unsigned char *p, Q931_info_t *qi, int *type, int *plan, int *present, int *screen, int *reason, unsigned char *number, int number_len) +{ + *type = -1; + *plan = -1; + *present = -1; + *screen = -1; + *reason = -1; + *number = '\0'; + + if (!p_m_d_ntmode) + { + p = NULL; + if (qi->redirect_nr.off) + p = (unsigned char *)qi + sizeof(Q931_info_t) + qi->redirect_nr.off + 1; + } + if (!p) + return; + if (p[0] < 1) + { + PERROR("IE too short (%d).\n", p[0]); + return; + } + + *type = (p[1]&0x70) >> 4; + *plan = p[1] & 0xf; + if (!(p[1] & 0x80)) + { + *present = (p[2]&0x60) >> 5; + *screen = p[2] & 0x3; + if (!(p[2] & 0x80)) + { + *reason = p[3] & 0x0f; + strnncpy(number, p+4, p[0]-3, number_len); + } else + { + strnncpy(number, p+3, p[0]-2, number_len); + } + } else + { + strnncpy(number, p+2, p[0]-1, number_len); + } + + printisdn(" type=%d plan=%d present=%d screen=%d reason=%d number='%s'\n", *type, *plan, *present, *screen, *reason, number); +} + + +/* IE_REDIR_DN (redirection = during MT_NOTIFY) */ +void Pdss1::enc_ie_redir_dn(unsigned char **ntmode, msg_t *msg, int type, int plan, int present, unsigned char *number) +{ + unsigned char *p; + Q931_info_t *qi = (Q931_info_t *)(msg->data + mISDN_HEADER_LEN); + int l; + + if (type<0 || type>7) + { + PERROR("type(%d) is out of range.\n", type); + return; + } + if (plan<0 || plan>15) + { + PERROR("plan(%d) is out of range.\n", plan); + return; + } + if (present > 3) + { + PERROR("present(%d) is out of range.\n", present); + return; + } + + printisdn(" type=%d plan=%d present=%d number='%s'\n", type, plan, present, number); + + l = 1; + if (number) + l += strlen((char *)number); + if (present >= 0) + l += 1; + p = msg_put(msg, l+2); + if (p_m_d_ntmode) + *ntmode = p+1; + else + qi->redirect_dn.off = p - (unsigned char *)qi - sizeof(Q931_info_t); + p[0] = IE_REDIR_DN; + p[1] = l; + if (present >= 0) + { + p[2] = 0x00 + (type<<4) + plan; + p[3] = 0x80 + (present<<5); + if (number) + UNCPY((char *)p+4, (char *)number, strlen((char *)number)); + } else + { + p[2] = 0x80 + (type<<4) + plan; + if (number) + UNCPY((char *)p+3, (char *)number, strlen((char *)number)); + } +} + +void Pdss1::dec_ie_redir_dn(unsigned char *p, Q931_info_t *qi, int *type, int *plan, int *present, unsigned char *number, int number_len) +{ + *type = -1; + *plan = -1; + *present = -1; + *number = '\0'; + + if (!p_m_d_ntmode) + { + p = NULL; + if (qi->redirect_dn.off) + p = (unsigned char *)qi + sizeof(Q931_info_t) + qi->redirect_dn.off + 1; + } + if (!p) + return; + if (p[0] < 1) + { + PERROR("IE too short (%d).\n", p[0]); + return; + } + + *type = (p[1]&0x70) >> 4; + *plan = p[1] & 0xf; + if (!(p[1] & 0x80)) + { + *present = (p[2]&0x60) >> 5; + strnncpy(number, p+3, p[0]-2, number_len); + } else + { + strnncpy(number, p+2, p[0]-1, number_len); + } + + printisdn(" type=%d plan=%d present=%d number='%s'\n", *type, *plan, *present, number); +} + + +/* IE_FACILITY */ +void Pdss1::enc_ie_facility(unsigned char **ntmode, msg_t *msg, unsigned char *facility, int facility_len) +{ + unsigned char *p; + Q931_info_t *qi = (Q931_info_t *)(msg->data + mISDN_HEADER_LEN); + int l; + + char debug[768]; + int i; + + if (!facility || facility_len<=0) + { + return; + } + + i = 0; + while(i < facility_len) + { + UPRINT(debug+(i*3), " %02x", facility[i]); + i++; + } + + printisdn(" facility%s\n", debug); + + l = facility_len; + p = msg_put(msg, l+2); + if (p_m_d_ntmode) + *ntmode = p+1; + else + qi->facility.off = p - (unsigned char *)qi - sizeof(Q931_info_t); + p[0] = IE_FACILITY; + p[1] = l; + memcpy(p+2, facility, facility_len); +} + +void Pdss1::dec_ie_facility(unsigned char *p, Q931_info_t *qi, unsigned char *facility, int *facility_len) +{ + char debug[768]; + int i; + + *facility_len = 0; + + if (!p_m_d_ntmode) + { + p = NULL; + if (qi->facility.off) + p = (unsigned char *)qi + sizeof(Q931_info_t) + qi->facility.off + 1; + } + if (!p) + return; + + *facility_len = p[0]; + memcpy(facility, p+1, *facility_len); + + i = 0; + while(i < *facility_len) + { + UPRINT(debug+(i*3), " %02x", facility[i]); + i++; + } + debug[i*3] = '\0'; + + printisdn(" facility%s\n", debug); +} + + +/* facility for siemens CENTEX (known parts implemented only) */ +void Pdss1::enc_facility_centrex(unsigned char **ntmode, msg_t *msg, unsigned char *cnip, int setup) +{ + unsigned char centrex[256]; + int i = 0; + + if (!cnip) + return; + + /* centrex facility */ + centrex[i++] = CENTREX_FAC; + centrex[i++] = CENTREX_ID; + + /* cnip */ + if (strlen((char *)cnip) > 15) + { + PDEBUG(DEBUG_PORT, "%s: CNIP/CONP text too long (max 13 chars), cutting.\n"); + cnip[15] = '\0'; + } + // dunno what the 8 bytes mean + if (setup) + { + centrex[i++] = 0x17; + centrex[i++] = 0x02; + centrex[i++] = 0x02; + centrex[i++] = 0x44; + centrex[i++] = 0x18; + centrex[i++] = 0x02; + centrex[i++] = 0x01; + centrex[i++] = 0x09; + } else + { + centrex[i++] = 0x18; + centrex[i++] = 0x02; + centrex[i++] = 0x02; + centrex[i++] = 0x81; + centrex[i++] = 0x09; + centrex[i++] = 0x02; + centrex[i++] = 0x01; + centrex[i++] = 0x0a; + } + + centrex[i++] = 0x80; + centrex[i++] = strlen((char *)cnip); + UCPY((char *)(¢rex[i]), (char *)cnip); + i += strlen((char *)cnip); + printisdn(" cnip='%s'\n", cnip); + + /* encode facility */ + enc_ie_facility(ntmode, msg, centrex, i); +} + +void Pdss1::dec_facility_centrex(unsigned char *p, Q931_info_t *qi, unsigned char *cnip, int cnip_len) +{ + unsigned char centrex[256]; + char debug[768]; + int facility_len = 0; + int i = 0, j; + *cnip = '\0'; + + dec_ie_facility(p, qi, centrex, &facility_len); + if (facility_len >= 2) + { + if (centrex[i++] != CENTREX_FAC) + return; + if (centrex[i++] != CENTREX_ID) + return; + } + + /* loop sub IEs of facility */ + while(facility_len > i+1) + { + if (centrex[i+1]+i+1 > facility_len) + { + PERROR("short read of centrex facility.\n"); + return; + } + switch(centrex[i]) + { + case 0x80: + strnncpy(cnip, ¢rex[i+2], centrex[i+1], cnip_len); + printisdn(" CENTREX cnip='%s'\n", cnip); + break; + + default: + j = 0; + while(j < centrex[i+1]) + { + UPRINT(debug+(j*3), " %02x", centrex[i+1+j]); + i++; + } + printisdn(" CENTREX unknown=0x%2x len=%d%s\n", centrex[i], centrex[i+1], debug); + } + i += 1+centrex[i+1]; + } +} + + +/* IE_USERUSER */ +void Pdss1::enc_ie_useruser(unsigned char **ntmode, msg_t *msg, int protocol, unsigned char *user, int user_len) +{ + unsigned char *p; + Q931_info_t *qi = (Q931_info_t *)(msg->data + mISDN_HEADER_LEN); + int l; + + char debug[768]; + int i; + + if (protocol<0 || protocol>127) + { + PERROR("protocol(%d) is out of range.\n", protocol); + return; + } + if (!user || user_len<=0) + { + return; + } + + i = 0; + while(i < user_len) + { + UPRINT(debug+(i*3), " %02x", user[i]); + i++; + } + + printisdn(" protocol=%d user-user%s\n", protocol, debug); + + l = user_len; + p = msg_put(msg, l+3); + if (p_m_d_ntmode) + *ntmode = p+1; + else + qi->useruser.off = p - (unsigned char *)qi - sizeof(Q931_info_t); + p[0] = IE_USER_USER; + p[1] = l; + p[2] = 0x80 + protocol; + memcpy(p+3, user, user_len); +} + +void Pdss1::dec_ie_useruser(unsigned char *p, Q931_info_t *qi, int *protocol, unsigned char *user, int *user_len) +{ + char debug[768]; + int i; + + *user_len = 0; + *protocol = -1; + + if (!p_m_d_ntmode) + { + p = NULL; + if (qi->useruser.off) + p = (unsigned char *)qi + sizeof(Q931_info_t) + qi->useruser.off + 1; + } + if (!p) + return; + + *user_len = p[0]-1; + if (p[0] < 1) + return; + *protocol = p[1]; + memcpy(user, p+2, (*user_len<=128)?*(user_len):128); /* clip to 128 maximum */ + + i = 0; + while(i < *user_len) + { + UPRINT(debug+(i*3), " %02x", user[i]); + i++; + } + debug[i*3] = '\0'; + + printisdn(" protocol=%d user-user%s\n", *protocol, debug); +} + + diff --git a/interface.c b/interface.c new file mode 100644 index 0000000..8ff0932 --- /dev/null +++ b/interface.c @@ -0,0 +1,1055 @@ +/*****************************************************************************\ +** ** +** LCR ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** reading interface.conf file and filling structure ** +** ** +\*****************************************************************************/ + +#include +#include +#include +#include "main.h" + +struct interface *interface_first = NULL; /* first interface is current list */ +struct interface *interface_newlist = NULL; /* first interface in new list */ + + +/* set default selchannel */ +void default_selchannel(struct interface_port *ifport) +{ + struct select_channel *selchannel, **selchannelp; + + /* channel selection for TE-ports */ + if (!ifport->mISDNport->ntmode) + { + selchannel = (struct select_channel *)malloc(sizeof(struct select_channel)); + if (!selchannel) + { + PERROR("No memory!"); + return; + } + memuse++; + memset(*selchannelp, 0, sizeof(struct select_channel)); + *selchannelp->channel = SEL_CHANNEL_ANY; + selchannelp = &ifport->selchannel; + while(*selchannelp) + selchannelp = &((*selchannelp)->next); + *selchannelp = selchannel; + return(0); + } + + /* channel selection for NT-ports */ + selchannel = (struct select_channel *)malloc(sizeof(struct select_channel)); + if (!selchannel) + { + PERROR("No memory!"); + return; + } + memuse++; + memset(*selchannelp, 0, sizeof(struct select_channel)); + *selchannelp->channel = SEL_CHANNEL_FREE; + selchannelp = &ifport->selchannel; + while(*selchannelp) + selchannelp = &((*selchannelp)->next); + *selchannelp = selchannel; + + /* additional channel selection for multipoint ports */ + if (!ifport->mISDNport->ptp) + { + selchannel = (struct select_channel *)malloc(sizeof(struct select_channel)); + if (!selchannel) + { + PERROR("No memory!"); + return; + } + memuse++; + memset(*selchannelp, 0, sizeof(struct select_channel)); + *selchannelp->channel = SEL_CHANNEL_NO; // call waiting + selchannelp = &ifport->selchannel; + while(*selchannelp) + selchannelp = &((*selchannelp)->next); + *selchannelp = selchannel; + } +} + + +/* parse string for a positive number */ +static int get_number(char *value) +{ + int val = 0; + char text[10]; + + val = atoi(value); + + SPRINT(text, "%d", val); + + if (!strcmp(value, text)) + return(val); + + return(-1); +} + + +/* remove element from buffer + * and return pointer to next element in buffer */ +static char *get_seperated(char *buffer) +{ + while(*buffer) + { + if (*buffer==',' || *buffer<=32) /* seperate */ + { + *buffer++ = '\0'; + while((*buffer>'\0' && *buffer<=32) || *buffer==',') + buffer++; + return(buffer); + } + buffer++; + } + return(buffer); +} + +/* + * parameter processing + */ +static int inter_block(struct interface *interface, char *filename, int line, char *parameter, char *value) +{ + struct interface_port *ifport; + + /* port in chain ? */ + if (!interface->ifport) + { + SPRINT(interface_error, "Error in %s (line %d): parameter '%s' expects previous 'port' definition.\n", filename, line, parameter); + return(-1); + } + /* goto end of chain */ + ifport = interface->ifport; + while(ifport->next) + ifport = ifport->next; + /* add value */ + if (value[0]) + { + SPRINT(interface_error, "Error in %s (line %d): parameter '%s' expects no value.\n", filename, line, parameter); + return(-1); + } + ifport->block = 1; + return(0); +} +static int inter_extension(struct interface *interface, char *filename, int line, char *parameter, char *value) +{ + if (value[0]) + { + SPRINT(interface_error, "Error in %s (line %d): parameter '%s' expects no value.\n", filename, line, parameter); + return(-1); + } + interface->extension = 1; + return(0); +} +static int inter_ptp(struct interface *interface, char *filename, int line, char *parameter, char *value) +{ + struct interface_port *ifport; + + /* port in chain ? */ + if (!interface->ifport) + { + SPRINT(interface_error, "Error in %s (line %d): parameter '%s' expects previous 'port' definition.\n", filename, line, parameter); + return(-1); + } + /* goto end of chain */ + ifport = interface->ifport; + while(ifport->next) + ifport = ifport->next; + /* add value */ + if (value[0]) + { + SPRINT(interface_error, "Error in %s (line %d): parameter '%s' expects no value.\n", filename, line, parameter); + return(-1); + } + ifport->ptp = 1; + return(0); +} +static int inter_tones(struct interface *interface, char *filename, int line, char *parameter, char *value) +{ + if (!strcasecmp(value, "yes")) + { + interface->is_tones = IS_YES; + } else + if (!strcasecmp(value, "no")) + { + interface->is_tones = IS_NO; + } else + { + SPRINT(interface_error, "Error in %s (line %d): parameter '%s' expects value 'yes' or 'no'.\n", filename, line, parameter); + return(-1); + } + return(0); +} +static int inter_earlyb(struct interface *interface, char *filename, int line, char *parameter, char *value) +{ + if (!strcasecmp(value, "yes")) + { + interface->is_earlyb = IS_YES; + } else + if (!strcasecmp(value, "no")) + { + interface->is_earlyb = IS_NO; + } else + { + SPRINT(interface_error, "Error in %s (line %d): parameter '%s' expects value 'yes' or 'no'.\n", filename, line, parameter); + return(-1); + } + return(0); +} +static int inter_hunt(struct interface *interface, char *filename, int line, char *parameter, char *value) +{ + if (!strcasecmp(value, "linear")) + { + interface->hunt = HUNT_LINEAR; + } else + if (!strcasecmp(value, "roundrobin")) + { + interface->hunt = HUNT_ROUNDROBIN; + } else + { + SPRINT(interface_error, "Error in %s (line %d): parameter '%s' expects value 'linear' or 'roundrobin'.\n", filename, line, parameter); + return(-1); + } + return(0); +} +static int inter_port(struct interface *interface, char *filename, int line, char *parameter, char *value) +{ + struct interface_port *ifport, **ifportp; + struct interface *searchif; + struct interface_port *searchport; + int val; + + val = get_number(value); + if (val == -1) + { + SPRINT(interface_error, "Error in %s (line %d): parameter '%s' expects one numeric value.\n", filename, line, parameter); + return(-1); + } + /* check for port already assigned */ + searchif = interface_newlist; + while(searchif) + { + searchport = searchif->ifport; + while(ifport) + { + if (ifport->portnum == val) + { + SPRINT(interface_error, "Error in %s (line %d): port '%d' already used above.\n", filename, line, val); + return(-1); + } + ifport = ifport->next; + } + searchif = searchif->next; + } + /* alloc port substructure */ + ifport = (struct interface_port *)malloc(sizeof(struct interface_port)); + if (!ifport) + { + SPRINT(interface_error, "No memory!"); + return(-1); + } + memuse++; + memset(ifport, 0, sizeof(struct interface_port)); + ifport->interface = interface; + /* set value */ + ifport->portnum = val; + /* tail port */ + ifportp = &interface->ifport; + while(*ifportp) + ifportp = &((*ifportp)->next); + *ifportp = ifport; + return(0); +} +static int inter_channel_out(struct interface *interface, char *filename, int line, char *parameter, char *value) +{ + struct interface_port *ifport; + struct select_channel *selchannel, **selchannelp; + int val; + char *p, *el; + + /* port in chain ? */ + if (!interface->ifport) + { + SPRINT(interface_error, "Error in %s (line %d): parameter '%s' expects previous 'port' definition.\n", filename, line, parameter); + return(-1); + } + /* goto end of chain */ + ifport = interface->ifport; + while(ifport->next) + ifport = ifport->next; + p = value; + while(*p) + { + el = p; + p = get_seperated(p); + if (!strcasecmp(el, "force")) + { + ifport->channel_force = 1; + if (ifport->selchannel) + { + SPRINT(interface_error, "Error in %s (line %d): value 'force' may only appear as first element in list.\n", filename, line); + return(-1); + } + } else + if (!strcasecmp(el, "any")) + { + val = SEL_CHANNEL_ANY; + goto selchannel; + } else + if (!strcasecmp(el, "free")) + { + val = SEL_CHANNEL_FREE; + goto selchannel; + } else + if (!strcasecmp(el, "no")) + { + val = SEL_CHANNEL_NO; + goto selchannel; + } else + { + val = get_number(el); + if (val == -1) + { + SPRINT(interface_error, "Error in %s (line %d): parameter '%s' expects a comma seperated list of 'force', 'any', 'free', 'no' and any channel number.\n", filename, line, parameter); + return(-1); + } + + if (val<1 || val==16 || val>126) + { + SPRINT(interface_error, "Error in %s (line %d): channel '%d' out of range.\n", filename, line, val); + return(-1); + } + selchannel: + /* add to select-channel list */ + selchannel = (struct select_channel *)malloc(sizeof(struct select_channel)); + if (!selchannel) + { + SPRINT(interface_error, "No memory!"); + return(-1); + } + memuse++; + memset(selchannel, 0, sizeof(struct select_channel)); + /* set value */ + selchannel->channel = val; + /* tail port */ + selchannelp = &ifport->selchannel; + while(*selchannelp) + selchannelp = &((*selchannelp)->next); + *selchannelp = selchannel; + } + } + return(0); +} +static int inter_channel_in(struct interface *interface, char *filename, int line, char *parameter, char *value) +{ + struct interface_port *ifport; + struct select_channel *selchannel, **selchannelp; + int val; + char *p, *el; + + /* port in chain ? */ + if (!interface->ifport) + { + SPRINT(interface_error, "Error in %s (line %d): parameter '%s' expects previous 'port' definition.\n", filename, line, parameter); + return(-1); + } + /* goto end of chain */ + ifport = interface->ifport; + while(ifport->next) + ifport = ifport->next; + p = value; + while(*p) + { + el = p; + p = get_seperated(p); + if (ifport->in_select) if (ifport->in_select->channel == SEL_CHANNEL_FREE) + { + SPRINT(interface_error, "Error in %s (line %d): parameter '%s' has values behind 'free' keyword. They has no effect.\n", filename, line, parameter); + return(-1); + } + if (!strcasecmp(el, "free")) + { + val = SEL_CHANNEL_FREE; + goto selchannel; + } else + { + val = get_number(el); + if (val == -1) + { + SPRINT(interface_error, "Error in %s (line %d): parameter '%s' expects a comma seperated list of channel numbers and 'free'.\n", filename, line, parameter); + return(-1); + } + + if (val<1 || val==16 || val>126) + { + SPRINT(interface_error, "Error in %s (line %d): channel '%d' out of range.\n", filename, line, val); + return(-1); + } + selchannel: + /* add to select-channel list */ + selchannel = (struct select_channel *)malloc(sizeof(struct select_channel)); + if (!selchannel) + { + SPRINT(interface_error, "No memory!"); + return(-1); + } + memuse++; + memset(selchannel, 0, sizeof(struct select_channel)); + /* set value */ + selchannel->channel = val; + /* tail port */ + selchannelp = &ifport->in_select; + while(*selchannelp) + selchannelp = &((*selchannelp)->next); + *selchannelp = selchannel; + } + } + return(0); +} +static int inter_msn(struct interface *interface, char *filename, int line, char *parameter, char *value) +{ + struct interface_msn *ifmsn, **ifmsnp; + char *p, *el; + + if (!value[0]) + { + SPRINT(interface_error, "Error in %s (line %d): parameter '%s' expects one MSN number or a list.\n", filename, line, parameter); + return(-1); + } + if (interface->ifscreen_in) + { + SPRINT(interface_error, "Error in %s (line %d): parameter '%s' not allowed with 'screen_in' parameter.\n", filename, line, parameter); + return(-1); + } + + /* process list */ + p = value; + while(*p) + { + el = p; + p = get_seperated(p); + /* add MSN to list */ + ifmsn = (struct interface_msn *)malloc(sizeof(struct interface_msn)); + if (!ifmsn) + { + SPRINT(interface_error, "No memory!"); + return(-1); + } + memuse++; + memset(ifmsn, 0, sizeof(struct interface_msn)); + /* set value */ + SCPY(ifmsn->msn, el); + /* tail port */ + ifmsnp = &interface->ifmsn; + while(*ifmsnp) + ifmsnp = &((*ifmsnp)->next); + *ifmsnp = ifmsn; + } + return(0); +} +static int inter_screen(struct interface_screen **ifscreenp, struct interface *interface, char *filename, int line, char *parameter, char *value) +{ + struct interface_screen *ifscreen; + char *p, *el; + + if (!value[0]) + { + SPRINT(interface_error, "Error in %s (line %d): parameter '%s' expects old caller ID and new caller ID.\n", filename, line, parameter); + return(-1); + } + p = value; + el = p; + p = get_seperated(p); + /* add screen entry to list*/ + ifscreen = (struct interface_screen *)malloc(sizeof(struct interface_screen)); + if (!ifscreen) + { + SPRINT(interface_error, "No memory!"); + return(-1); + } + memuse++; + memset(ifscreen, 0, sizeof(struct interface_screen)); +#warning handle unchanged as unchanged!! + ifscreen->result_type = -1; /* unchanged */ + ifscreen->result_present = -1; /* unchanged */ + /* tail port */ + while(*ifscreenp) + ifscreenp = &((*ifscreenp)->next); + *ifscreenp = ifscreen; + /* get match */ + while(*p) + { + el = p; + p = get_seperated(p); + if (!strcasecmp(el, "unknown")) + { + if (ifscreen->match_type != -1) + { + typeerror: + SPRINT(interface_error, "Error in %s (line %d): number type already set earlier.\n", filename, line, parameter); + return(-1); + } + ifscreen->match_type = INFO_NTYPE_UNKNOWN; + } else + if (!strcasecmp(el, "subscriber")) + { + if (ifscreen->match_type != -1) + goto typeerror; + ifscreen->match_type = INFO_NTYPE_SUBSCRIBER; + } else + if (!strcasecmp(el, "national")) + { + if (ifscreen->match_type != -1) + goto typeerror; + ifscreen->match_type = INFO_NTYPE_NATIONAL; + } else + if (!strcasecmp(el, "international")) + { + if (ifscreen->match_type != -1) + goto typeerror; + ifscreen->match_type = INFO_NTYPE_INTERNATIONAL; + } else + if (!strcasecmp(el, "allowed")) + { + if (ifscreen->match_present != -1) + { + presenterror: + SPRINT(interface_error, "Error in %s (line %d): presentation type already set earlier.\n", filename, line, parameter); + return(-1); + } + ifscreen->match_present = INFO_PRESENT_ALLOWED; + } else + if (!strcasecmp(el, "restricted")) + { + if (ifscreen->match_present != -1) + goto presenterror; + ifscreen->match_present = INFO_PRESENT_RESTRICTED; + } else { + SCPY(ifscreen->match, el); + break; + } + } + if (ifscreen->match[0] == '\0') + { + SPRINT(interface_error, "Error in %s (line %d): parameter '%s' expects old caller ID.\n", filename, line, parameter); + return(-1); + } + /* get result */ + while(*p) + { + el = p; + p = get_seperated(p); + if (!strcasecmp(el, "unknown")) + { + if (ifscreen->result_type != -1) + goto typeerror; + ifscreen->result_type = INFO_NTYPE_UNKNOWN; + } else + if (!strcasecmp(el, "subscriber")) + { + if (ifscreen->result_type != -1) + goto typeerror; + ifscreen->result_type = INFO_NTYPE_SUBSCRIBER; + } else + if (!strcasecmp(el, "national")) + { + if (ifscreen->result_type != -1) + goto typeerror; + ifscreen->result_type = INFO_NTYPE_NATIONAL; + } else + if (!strcasecmp(el, "international")) + { + if (ifscreen->result_type != -1) + goto typeerror; + ifscreen->result_type = INFO_NTYPE_INTERNATIONAL; + } else + if (!strcasecmp(el, "allowed")) + { + if (ifscreen->result_present != -1) + goto presenterror; + ifscreen->result_present = INFO_PRESENT_ALLOWED; + } else + if (!strcasecmp(el, "restricted")) + { + if (ifscreen->result_present != -1) + goto presenterror; + ifscreen->result_present = INFO_PRESENT_RESTRICTED; + } else { + SCPY(ifscreen->result, el); + break; + } + } + if (ifscreen->result[0] == '\0') + { + SPRINT(interface_error, "Error in %s (line %d): parameter '%s' expects new caller ID.\n", filename, line, parameter); + return(-1); + } + return(0); +} +static int inter_screen_in(struct interface *interface, char *filename, int line, char *parameter, char *value) +{ + if (interface->ifmsn) + { + SPRINT(interface_error, "Error in %s (line %d): parameter '%s' not allowed with 'msn' parameter.\n", filename, line, parameter); + return(-1); + } + + return(inter_screen(&interface->ifscreen_in, interface, filename, line, parameter, value)); +} +static int inter_screen_out(struct interface *interface, char *filename, int line, char *parameter, char *value) +{ + return(inter_screen(&interface->ifscreen_out, interface, filename, line, parameter, value)); +} +static int inter_filter(struct interface *interface, char *filename, int line, char *parameter, char *value) +{ +#warning filter to be done + return(0); +} + + +/* + * structure of parameters + */ +struct interface_param interface_param[] = { + { "extension", &inter_extension, "", + "If keyword is given, calls to interface are handled as internal extensions."}, + {"tones", &inter_tones, "yes | no", + "Interface generates tones during call setup and release, or not.\nBy default only NT-mode interfaces generate tones."}, + + {"earlyb", &inter_earlyb, "yes | no", + "Interface receives and bridges tones during call setup and release, or not.\nBy default only TE-mode interfaces receive tones."}, + + {"hunt", &inter_hunt, "linear | roundrobin", + "Select the algorithm for selecting port with free channel."}, + + {"port", &inter_port, "", + "Give exactly one port for this interface.\nTo give multiple ports, add more lines with port parameters."}, + + {"block", &inter_block, "", + "If keyword is given, calls on this interface are blocked.\n" + "This parameter must follow a 'port' parameter."}, + + {"ptp", &inter_ptp, "", + "The given port above is opened as point-to-point.\n" + "This is required on NT-mode ports that are multipoint by default.\n" + "This parameter must follow a 'port' parameter."}, + + {"channel_out", &inter_channel_out, "[force,][][,...][,free][,any][,no]", + "Channel selection list for all outgoing calls to the interface.\n" + "A free channels is searched in order of appearance.\n" + "This parameter must follow a 'port' parameter.\n" + " force - Forces the selected port with no acceptable alternative (see DSS1).\n" + " [,...] - List of channels to search.\n" + " free - Select any free channel\n" + " any - On outgoing calls, signal 'any channel acceptable'. (see DSS1)\n" + " no - Signal 'no channel available' aka 'call waiting'. (see DSS1)"}, + + {"channel_in", &inter_channel_in, "[force,][][,...][,free][,any][,no]", + "Channel selection list for all incomming calls from the interface.\n" + "A free channels is accepted if in the list.\n" + "If no channel was requested, the first free channel found is selected.\n" + "This parameter must follow a 'port' parameter.\n" + " [,...] - List of channels to accept.\n" + " free - Accept any free channel\n" + + {"msn", &inter_msn, ",[[,...]]", + "Incomming caller ID is checked against given MSN numbers.\n" + "If the caller ID is not found in this list, it is overwritten by the first MSN"}, + + {"screen-in", &inter_screen_in, "[options] [%%] [options] [%%]", + "Adds an entry for incomming calls to the caller ID screen list.\n" + "If the given 'old caller ID' matches, it is replaced by the 'new caller ID'\n" + "If '%%' is given after old caller ID, it matches even if caller ID has\n" + "additional digits.\n" + "If '%%' is given after mew caller ID, additinal digits of the 'old caller ID'\n" + "are added.\n" + "Options can be:\n" + " unknown | subsciber | national | international - Change caller ID type.\n" + " present | restrict - Change presentation of caller ID."}, + + {"screen-out", &inter_screen_out, " [options]", + "Adds an entry for outgoing calls to the caller ID screen list.\n" + "See 'screen-in' for help."}, + + {"filter", &inter_filter, " [parameters]", + "Adds/appends a filter. Filters are ordered in transmit direction.\n" + "gain - Changes volume (-8 .. 8)\n" + "blowfish - Adds encryption. Key must be 4-56 bytes (8-112 hex characters."}, + + {NULL, NULL, NULL, NULL} +}; + +/* read interfaces + * + * read settings from interface.conf + */ +char interface_error[256]; +struct interface *read_interfaces(void) +{ + FILE *fp = NULL; + char filename[128]; + char *p; + unsigned int line, i; + char buffer[256]; + struct interface *interface = NULL, /* in case no interface */ + **interfacep = &interface_newlist; + char parameter[128]; + char value[256]; + int expecting = 1; /* expecting new interface */ + struct interface_param *ifparam; + + if (interface_newlist != NULL) + { + PERROR("software error, list is not empty.\n"); + exit(-1); + } + interface_error[0] = '\0'; + SPRINT(filename, "%s/interface.conf", INSTALL_DATA); + + if (!(fp = fopen(filename,"r"))) + { + SPRINT(interface_error, "Cannot open '%s'\n", filename); + goto error; + } + + line=0; + while((fgets(buffer,sizeof(buffer),fp))) + { + buffer[sizeof(buffer)-1]=0; + if (buffer[0]) buffer[strlen(buffer)-1]=0; + p=buffer; + line++; + + while(*p <= 32) /* skip spaces */ + { + if (*p == 0) + break; + p++; + } + if (*p==0 || *p=='#') /* ignore comments and empty line */ + continue; + + parameter[0]=0; + value[0]=0; + i=0; /* read parameter */ + while(*p > 32) + { + if (i+1 >= sizeof(parameter)) + { + SPRINT(interface_error, "Error in %s (line %d): parameter name too long.\n",filename,line); + goto error; + } + parameter[i+1] = '\0'; + parameter[i++] = *p++; + } + + while(*p <= 32) /* skip spaces */ + { + if (*p == 0) + break; + p++; + } + + if (*p!=0 && *p!='#') /* missing name */ + { + i=0; /* read until end */ + while(*p!=0 && *p!='#') + { + if (i+1 >= sizeof(value)) + { + SPRINT(interface_error, "Error in %s (line %d): value too long.\n", filename, line); + goto error; + } + value[i+1] = '\0'; + value[i++] = *p++; + } + + /* remove trailing spaces from value */ + while(i) + { + if (value[i-1]==0 || value[i-1]>32) + break; + value[i-1] = '\0'; + i--; + } + } + + /* check for interface name as first statement */ + if (expecting && parameter[0]!='[') + { + SPRINT(interface_error, "Error in %s (line %d): expecting interface name inside [ and ], but got: '%s'.\n", filename, line, parameter); + goto error; + } + expecting = 0; + + /* check for new interface */ + if (parameter[0] == '[') + { + if (parameter[strlen(parameter)-1] != ']') + { + SPRINT(interface_error, "Error in %s (line %d): expecting interface name inside [ and ], but got: '%s'.\n", filename, line, parameter); + goto error; + } + parameter[strlen(parameter)-1] = '\0'; + + /* check if interface name already exists */ + interface = interface_first; + while(interface) + { + if (!strcasecmp(interface->name, parameter+1)) + { + SPRINT(interface_error, "Error in %s (line %d): interface name '%s' already defined above.\n", filename, line, parameter+1); + goto error; + } + interface = interface->next; + } + + /* append interface to new list */ + interface = (struct interface *)malloc(sizeof(struct interface)); + if (!interface) + { + SPRINT(interface_error, "No memory!"); + goto error; + } + memuse++; + memset(interface, 0, sizeof(struct interface)); + + /* name interface */ + SCPY(interface->name, parameter+1); + + /* attach */ + *interfacep = interface; + interfacep = &interface->next; + + continue; + } + + ifparam = interface_param; + while(ifparam->name) + { + if (!strcasecmp(parameter, ifparam->name)) + { + if (ifparam->func(interface, filename, line, parameter, value)) + goto error; + continue; + } + ifparam++; + } + + SPRINT(interface_error, "Error in %s (line %d): unknown parameter: '%s'.\n", filename, line, parameter); + goto error; + } + + if (fp) fclose(fp); + return(interface_newlist); +error: + PERROR_RUNTIME("%s", interface_error); + if (fp) fclose(fp); + free_interfaces(interface_newlist); + interface_newlist = NULL; + return(NULL); +} + + +/* + * freeing chain of interfaces + */ +void free_interfaces(struct interface *interface) +{ + void *temp; + struct interface_port *ifport; + struct select_channel *selchannel; + struct interface_msn *ifmsn; + struct interface_screen *ifscreen; + struct interface_filter *iffilter; + + while(interface) + { + ifport = interface->ifport; + while(ifport) + { + selchannel = ifport->in_channel; + while(selchannel) + { + temp = selchannel; + selchannel = selchannel->next; + memset(temp, 0, sizeof(struct select_channel)); + free(temp); + memuse--; + } + selchannel = ifport->out_channel; + while(selchannel) + { + temp = selchannel; + selchannel = selchannel->next; + memset(temp, 0, sizeof(struct select_channel)); + free(temp); + memuse--; + } + temp = ifport; + ifport = ifport->next; + memset(temp, 0, sizeof(struct interface_port)); + free(temp); + memuse--; + } + ifmsn = interface->ifmsn; + while(ifmsn) + { + temp = ifmsn; + ifmsn = ifmsn->next; + memset(temp, 0, sizeof(struct interface_msn)); + free(temp); + memuse--; + } + ifscreen = interface->ifscreen_in; + while(ifscreen) + { + temp = ifscreen; + ifscreen = ifscreen->next; + memset(temp, 0, sizeof(struct interface_screen)); + free(temp); + memuse--; + } + ifscreen = interface->ifscreen_out; + while(ifscreen) + { + temp = ifscreen; + ifscreen = ifscreen->next; + memset(temp, 0, sizeof(struct interface_screen)); + free(temp); + memuse--; + } + iffilter = interface->iffilter; + while(iffilter) + { + temp = iffilter; + iffilter = iffilter->next; + memset(temp, 0, sizeof(struct interface_filter)); + free(temp); + memuse--; + } + temp = interface; + interface = interface->next; + memset(temp, 0, sizeof(struct interface)); + free(temp); + memuse--; + } +} + + +/* + * all links between mISDNport and interface are made + * unused mISDNports are closed, new mISDNports are opened + * also set default select_channel lists + */ +void relink_interfaces(void) +{ + struct mISDNport *mISDNport; + struct interface *interface; + struct interface_port *ifport; + + /* unlink all mISDNports */ + mISDNport = mISDNport_first; + while(mISDNport) + { + mISDNport->ifport = NULL; + mISDNport = mISDNport->next; + } + + /* relink existing mISDNports */ + interface = interface_newlist; + while(interface) + { + ifport = interface->ifport; + while(ifport) + { + mISDNport = mISDNport_first; + while(mISDNport) + { + if (mISDNport->portnum == ifport->portnum) + { + ifport->mISDNport = mISDNport; + mISDNport->ifport = ifport; + } + mISDNport = mISDNport->next; + } + ifport = ifport->next; + } + interface = interface->next; + } + + /* close unused mISDNports */ + closeagain: + mISDNport = mISDNport_first; + while(mISDNport) + { + if (mISDNport->ifport == NULL) + { + PDEBUG(DEBUG_ISDN, "Port %d is not used anymore and will be closed\n", mISDNport->portnum); + /* remove all port objects and destroy port */ + mISDNport_close(mISDNport); + goto closeagain; + } + mISDNport = mISDNport->next; + } + + /* open and link new mISDNports */ + interface = interface_newlist; + while(interface) + { + ifport = interface->ifport; + while(ifport) + { + if (!ifport->mISDNport) + { + /* open new port */ + mISDNport = mISDNport_open(ifport->portnum, ifport->ptp); + if (mISDNport) + { + ifport->mISDNport = mISDNport; + mISDNport->ifport = ifport; + } + } + if (ifport->mISDNport && !ifport->selchannel) + default_selchannel(ifport); + } + interface = interface->next; + } + +} + +/* + * give summary of interface syntax + */ +void doc_interface(void) +{ + struct interface_param *ifparam; + + printf("Syntax overview\n"); + printf("---------------\n\n"); + + printf("[]\n"); + ifparam = interface_param; + while(ifparam->name) + { + printf("%s %s\n", ifparam->name, ifparam->usage); + ifparam++; + } + + ifparam = interface_param; + while(ifparam->name) + { + printf("\nParameter: %s %s\n", ifparam->name, ifparam->usage); + printf("%s\n", ifparam->help); + ifparam++; + } +} + + diff --git a/interface.h b/interface.h new file mode 100644 index 0000000..f7d56c9 --- /dev/null +++ b/interface.h @@ -0,0 +1,113 @@ +/*****************************************************************************\ +** ** +** LCR ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** interface header file ** +** ** +\*****************************************************************************/ + +#define FLAG_PORT_USE 1 +#define FLAG_PORT_PTP (1<<1) + +enum { /* interface type */ + IF_TYPE_DIRECT, + IF_TYPE_EXTENSION, +}; + + /* channel selection -1 is reserved for "no ie" */ +#define CHANNEL_NO -2 +#define CHANNEL_ANY -3 +#define CHANNEL_FREE -100 + + /* port selection */ +enum { HUNT_LINEAR = 0, + HUNT_ROUNDROBIN, +}; + + /* filters */ +enum { FILTER_GAIN, + FILTER_CANCEL, + FILTER_BLOWFISH, +}; + +enum { IS_DEFAULT = 0, + IS_YES, + IS_NO, +}; + +struct select_channel { + struct select_channel *next; + int channel; +}; + +struct interface_port { + struct interface_port *next; + struct interface *interface; /* link to interface */ + struct mISDNport *mISDNport; /* link to port */ + int portnum; /* port number */ + int ptp; /* load stack in PTP mode */ + int channel_force; /* forces channel by protocol */ + struct select_channel *out_select; /* list of channels to select */ + struct select_channel *in_select; /* the same for incoming channels */ +// int open; /* set if port is opened */ + int block; /* set if interface is blocked */ +}; + +struct interface_msn { + struct interface_msn *next; + char msn[64]; /* msn */ +}; + +struct interface_screen { + struct interface_screen *next; + char match[64]; /* what caller id to match */ + int match_type; /* number type */ + int match_present; /* presentation type */ + char result[64]; /* what caller id to change to */ + int result_type; /* number type */ + int result_present; /* presentation type */ +}; + +struct interface_filter { + struct interface_filter *next; + int filter; /* filter to use */ + char parameter[256]; /* filter parameter */ +}; + +struct interface { + struct interface *next; + char name[64]; /* name of interface */ + int extension; /* calls are handled as extension */ + int is_tones; /* generate tones */ + int is_earlyb; /* bridge tones during call setup */ + int hunt; /* select algorithm */ + int hunt_next; /* ifport index to start hunt */ + struct interface_port *ifport; /* link to interface port list */ + struct interface_msn *ifmsn; /* link to interface msn list */ + struct interface_screen *ifscreen_in; /* link to screening list */ + struct interface_screen *ifscreen_out; /* link to screening list */ + struct interface_filter *iffilter; /* link to filter list */ +}; + +struct interface_param { + char *name; +/* return value (pointer of function)(args ...) */ + int (*func)(struct interface *, char *, int, char *, char*); + char *usage; + char *help; +}; + + +extern struct interface *interface_first; +extern struct interface *interface_newlist; + +extern char interface_error[256]; +struct interface *read_interfaces(void); +void free_interfaces(struct interface *interface_start); +void relink_interfaces(void); +void doc_interface(void); + + diff --git a/mISDN.cpp b/mISDN.cpp new file mode 100644 index 0000000..5bb09d1 --- /dev/null +++ b/mISDN.cpp @@ -0,0 +1,2071 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** mISDN port abstraction for dss1 and sip ** +** ** +\*****************************************************************************/ + + +#include +#include +#include +#include "main.h" +#include +#include +#include +#include +#include +#include +#include +extern "C" { +#include +} + +#define ISDN_PID_L2_B_USER 0x420000ff +#define ISDN_PID_L3_B_USER 0x430000ff +#define ISDN_PID_L4_B_USER 0x440000ff + +/* used for udevice */ +int entity = 0; + +/* noise randomizer */ +unsigned char mISDN_rand[256]; +int mISDN_rand_count = 0; + +/* the device handler and port list */ +int mISDNdevice = -1; + +/* list of mISDN ports */ +struct mISDNport *mISDNport_first; + +/* + * constructor + */ +PmISDN::PmISDN(int type, mISDNport *mISDNport, char *portname, struct port_settings *settings, int channel, int exclusive) : Port(type, portname, settings) +{ + p_m_mISDNport = mISDNport; + p_m_portnum = mISDNport->portnum; + p_m_b_index = -1; + p_m_b_channel = 0; + p_m_b_exclusive = 0; + p_m_b_reserve = 0; + p_m_b_addr = 0; + p_m_b_stid = 0; + p_m_jittercheck = 0; + p_m_delete = 0; + p_m_hold = 0; + p_m_txvol = p_m_rxvol = 0; + p_m_conf = 0; +#warning set delay by routing parameter or interface config + p_m_delay = 0; + p_m_echo = 0; + p_m_tone = 0; + p_m_rxoff = 0; + p_m_txmix = 0; + p_m_txmix_on = 0; + p_m_nodata = 1; /* may be 1, because call always notifies us */ + p_m_dtmf = !options.nodtmf; + p_m_timeout = 0; + p_m_timer = 0; +#warning denke auch an die andere seite. also das setup sollte dies weitertragen + + p_m_crypt = 0; + p_m_crypt_listen = 0; + p_m_crypt_msg_loops = 0; + p_m_crypt_msg_loops = 0; + p_m_crypt_msg_len = 0; + p_m_crypt_msg[0] = '\0'; + p_m_crypt_msg_current = 0; + p_m_crypt_key[0] = '\0'; + p_m_crypt_key_len = 0; + p_m_crypt_listen = 0; + p_m_crypt_listen_state = 0; + p_m_crypt_listen_len = 0; + p_m_crypt_listen_msg[0] = '\0'; + p_m_crypt_listen_crc = 0; + + /* if any channel requested by constructor */ + if (channel == CHANNEL_ANY) + { + /* reserve channel */ + p_m_b_reserve = 1; + mISDNport->b_reserved++; + } + + } else + /* reserve channel */ + if (channel) // only if constructor was called with a channel resevation + seize_bchannel(channel, exclusive); + + /* we increase the number of objects: */ + mISDNport->use++; + PDEBUG(DEBUG_ISDN, "Created new mISDNPort(%s). Currently %d objects use, port #%d\n", portname, mISDNport->use, p_m_portnum); +} + + +/* + * destructor + */ +PmISDN::~PmISDN() +{ + struct message *message; + + /* remove bchannel relation */ + free_bchannel(); + + /* release epoint */ + while (p_epointlist) + { + PDEBUG(DEBUG_ISDN, "destroy mISDNPort(%s). endpoint still exists, releaseing.\n", p_name); + message = message_create(p_serial, p_epointlist->epoint_id, PORT_TO_EPOINT, MESSAGE_RELEASE); + message->param.disconnectinfo.cause = 16; + message->param.disconnectinfo.location = LOCATION_PRIVATE_LOCAL; + message_put(message); + /* remove from list */ + free_epointlist(p_epointlist); + } + + /* we decrease the number of objects: */ + p_m_mISDNport->use--; + PDEBUG(DEBUG_ISDN, "destroyed mISDNPort(%s). Currently %d objects\n", p_name, p_m_mISDNport->use); +} + + +/* + * send control information to the channel (dsp-module) + */ +void ph_control(unsigned long b_addr, int c1, int c2) +{ + unsigned char buffer[mISDN_HEADER_LEN+sizeof(int)+sizeof(int)]; + iframe_t *ctrl = (iframe_t *)buffer; + unsigned long *d = (unsigned long *)&ctrl->data.p; + + ctrl->prim = PH_CONTROL | REQUEST; + ctrl->addr = b_addr | FLG_MSG_DOWN; + ctrl->dinfo = 0; + ctrl->len = sizeof(unsigned long)*2; + *d++ = c1; + *d++ = c2; + mISDN_write(mISDNdevice, ctrl, mISDN_HEADER_LEN+ctrl->len, TIMEOUT_1SEC); +} + +void ph_control_block(unsigned long b_addr, int c1, void *c2, int c2_len) +{ + unsigned char buffer[mISDN_HEADER_LEN+sizeof(int)+c2_len]; + iframe_t *ctrl = (iframe_t *)buffer; + unsigned long *d = (unsigned long *)&ctrl->data.p; + + ctrl->prim = PH_CONTROL | REQUEST; + ctrl->addr = b_addr | FLG_MSG_DOWN; + ctrl->dinfo = 0; + ctrl->len = sizeof(unsigned long)*2; + *d++ = c1; + memcpy(d, c2, c2_len); + mISDN_write(mISDNdevice, ctrl, mISDN_HEADER_LEN+ctrl->len, TIMEOUT_1SEC); +} + + +/* + * activate / deactivate bchannel + */ +static void bchannel_activate(struct mISDNport *mISDNport, int i) +{ + iframe_t act; + + /* we must activate if we are deactivated */ + if (mISDNport->b_state[i] == B_STATE_IDLE) + { + /* activate bchannel */ + PDEBUG(DEBUG_BCHANNEL, "activating bchannel (index %d), because currently idle (address 0x%x).\n", i, mISDNport->b_addr[i]); + act.prim = DL_ESTABLISH | REQUEST; + act.addr = mISDNport->b_addr[i] | FLG_MSG_DOWN; + act.dinfo = 0; + act.len = 0; + mISDN_write(mISDNdevice, &act, mISDN_HEADER_LEN+act.len, TIMEOUT_1SEC); + mISDNport->b_state[i] = B_STATE_ACTIVATING; + return; + } + + /* if we are active, we configure our channel */ + if (mISDNport->b_state[i] == B_STATE_ACTIVE) + { + unsigned char buffer[mISDN_HEADER_LEN+ISDN_PRELOAD]; + iframe_t *pre = (iframe_t *)buffer; /* preload data */ + unsigned char *p = (unsigned char *)&pre->data.p; + + /* it is an error if this channel is not associated with a port object */ + if (!mISDNport->b_port[i]) + { + PERROR("bchannel index i=%d not associated with a port object\n", i); + return; + } + + /* configure dsp features */ + if (mISDNport->b_port[i]->p_m_delay) + { + PDEBUG(DEBUG_BCHANNEL, "during activation, we set delay to delay=%d.\n", mISDNport->b_port[i]->p_m_delay); + ph_control(mISDNport->b_addr[i], CMX_DELAY, mISDNport->b_port[i]->p_m_delay); + } + if (mISDNport->b_port[i]->p_m_txvol) + { + PDEBUG(DEBUG_BCHANNEL, "during activation, we change tx-volume to shift=%d.\n", mISDNport->b_port[i]->p_m_txvol); + ph_control(mISDNport->b_addr[i], VOL_CHANGE_TX, mISDNport->b_port[i]->p_m_txvol); + } + if (mISDNport->b_port[i]->p_m_rxvol) + { + PDEBUG(DEBUG_BCHANNEL, "during activation, we change rx-volume to shift=%d.\n", mISDNport->b_port[i]->p_m_rxvol); + ph_control(mISDNport->b_addr[i], VOL_CHANGE_RX, mISDNport->b_port[i]->p_m_rxvol); + } +//tone if (mISDNport->b_port[i]->p_m_conf && !mISDNport->b_port[i]->p_m_tone) + if (mISDNport->b_port[i]->p_m_conf) + { + PDEBUG(DEBUG_BCHANNEL, "during activation, we change conference to conf=%d.\n", mISDNport->b_port[i]->p_m_conf); + ph_control(mISDNport->b_addr[i], CMX_CONF_JOIN, mISDNport->b_port[i]->p_m_conf); + } + if (mISDNport->b_port[i]->p_m_echo) + { + PDEBUG(DEBUG_BCHANNEL, "during activation, we set echo to echo=%d.\n", mISDNport->b_port[i]->p_m_echo); + ph_control(mISDNport->b_addr[i], CMX_ECHO_ON, 0); + } + if (mISDNport->b_port[i]->p_m_tone) + { + PDEBUG(DEBUG_BCHANNEL, "during activation, we set tone to tone=%d.\n", mISDNport->b_port[i]->p_m_tone); + ph_control(mISDNport->b_addr[i], TONE_PATT_ON, mISDNport->b_port[i]->p_m_tone); + } + if (mISDNport->b_port[i]->p_m_rxoff) + { + PDEBUG(DEBUG_BCHANNEL, "during activation, we set rxoff to rxoff=%d.\n", mISDNport->b_port[i]->p_m_rxoff); + ph_control(mISDNport->b_addr[i], CMX_RECEIVE_OFF, 0); + } + if (mISDNport->b_port[i]->p_m_txmix) + { + PDEBUG(DEBUG_BCHANNEL, "during activation, we set txmix to txmix=%d.\n", mISDNport->b_port[i]->p_m_txmix); + ph_control(mISDNport->b_addr[i], CMX_MIX_ON, 0); + } + if (mISDNport->b_port[i]->p_m_dtmf) + { + PDEBUG(DEBUG_BCHANNEL, "during activation, we set dtmf to dtmf=%d.\n", mISDNport->b_port[i]->p_m_dtmf); + ph_control(mISDNport->b_addr[i], DTMF_TONE_START, 0); + } + if (mISDNport->b_port[i]->p_m_crypt) + { + PDEBUG(DEBUG_BCHANNEL, "during activation, we set crypt to crypt=%d.\n", mISDNport->b_port[i]->p_m_crypt); + ph_control_block(mISDNport->b_addr[i], BF_ENABLE_KEY, mISDNport->b_port[i]->p_m_crypt_key, mISDNport->b_port[i]->p_m_crypt_key_len); + } + + /* preload tx-buffer */ + pre->len = mISDNport->b_port[i]->read_audio(p, ISDN_PRELOAD, 1); + if (pre->len > 0) + { + PDEBUG(DEBUG_BCHANNEL, "port is activated, we fill our buffer (ISDN_PRELOAD = %d).\n", pre->len); + /* flip bits */ +#if 0 + q = p + pre->len; + while(p != q) + *p++ = flip[*p]; +#endif + pre->prim = DL_DATA | REQUEST; + pre->addr = mISDNport->b_addr[i] | FLG_MSG_DOWN; + pre->dinfo = 0; + mISDN_write(mISDNdevice, pre, mISDN_HEADER_LEN+pre->len, TIMEOUT_1SEC); + } + } +} + +static void bchannel_deactivate(struct mISDNport *mISDNport, int i) +{ + iframe_t dact; + + if (mISDNport->b_state[i] == B_STATE_ACTIVE) + { + /* reset dsp features */ + if (mISDNport->b_port[i]) + { + if (mISDNport->b_port[i]->p_m_delay) + { + PDEBUG(DEBUG_BCHANNEL, "during deactivation, we reset delay from delay=%d.\n", mISDNport->b_port[i]->p_m_delay); + ph_control(mISDNport->b_addr[i], CMX_JITTER, 0); + } + if (mISDNport->b_port[i]->p_m_txvol) + { + PDEBUG(DEBUG_BCHANNEL, "during deactivation, we reset tx-volume from shift=%d.\n", mISDNport->b_port[i]->p_m_txvol); + ph_control(mISDNport->b_addr[i], VOL_CHANGE_TX, 0); + } + if (mISDNport->b_port[i]->p_m_rxvol) + { + PDEBUG(DEBUG_BCHANNEL, "during deactivation, we reset rx-volume from shift=%d.\n", mISDNport->b_port[i]->p_m_rxvol); + ph_control(mISDNport->b_addr[i], VOL_CHANGE_RX, 0); + } + if (mISDNport->b_port[i]->p_m_conf) + { + PDEBUG(DEBUG_BCHANNEL, "during deactivation, we release conference from conf=%d.\n", mISDNport->b_port[i]->p_m_conf); + ph_control(mISDNport->b_addr[i], CMX_CONF_SPLIT, 0); + } + if (mISDNport->b_port[i]->p_m_echo) + { + PDEBUG(DEBUG_BCHANNEL, "during deactivation, we reset echo from echo=%d.\n", mISDNport->b_port[i]->p_m_echo); + ph_control(mISDNport->b_addr[i], CMX_ECHO_OFF, 0); + } + if (mISDNport->b_port[i]->p_m_tone) + { + PDEBUG(DEBUG_BCHANNEL, "during deactivation, we reset tone from tone=%d.\n", mISDNport->b_port[i]->p_m_tone); + ph_control(mISDNport->b_addr[i], TONE_PATT_OFF, 0); + } + if (mISDNport->b_port[i]->p_m_rxoff) + { + PDEBUG(DEBUG_BCHANNEL, "during deactivation, we reset rxoff from rxoff=%d.\n", mISDNport->b_port[i]->p_m_rxoff); + ph_control(mISDNport->b_addr[i], CMX_RECEIVE_ON, 0); + } + if (mISDNport->b_port[i]->p_m_txmix) + { + PDEBUG(DEBUG_BCHANNEL, "during deactivation, we reset txmix from txmix=%d.\n", mISDNport->b_port[i]->p_m_txmix); + ph_control(mISDNport->b_addr[i], CMX_MIX_OFF, 0); + } + if (mISDNport->b_port[i]->p_m_dtmf) + { + PDEBUG(DEBUG_BCHANNEL, "during deactivation, we reset dtmf from dtmf=%d.\n", mISDNport->b_port[i]->p_m_dtmf); + ph_control(mISDNport->b_addr[i], DTMF_TONE_STOP, 0); + } + if (mISDNport->b_port[i]->p_m_crypt) + { + PDEBUG(DEBUG_BCHANNEL, "during deactivation, we reset crypt from crypt=%d.\n", mISDNport->b_port[i]->p_m_dtmf); + ph_control(mISDNport->b_addr[i], BF_DISABLE, 0); + } + } + /* deactivate bchannel */ + PDEBUG(DEBUG_BCHANNEL, "deactivating bchannel (index %d), because currently active.\n", i); + dact.prim = DL_RELEASE | REQUEST; + dact.addr = mISDNport->b_addr[i] | FLG_MSG_DOWN; + dact.dinfo = 0; + dact.len = 0; + mISDN_write(mISDNdevice, &dact, mISDN_HEADER_LEN+dact.len, TIMEOUT_1SEC); + mISDNport->b_state[i] = B_STATE_DEACTIVATING; + return; + } +} + + +/* + * check for available channel and reserve+set it. + * give channel number or SEL_CHANNEL_ANY or SEL_CHANNEL_NO + * give exclusiv flag + * returns -(cause value) or x = channel x or 0 = no channel + */ +denke ans aktivieren und deaktivieren +int PmISDN::seize_bchannel(int channel, int exclusive) +{ + int i; + + /* the channel is what we have */ + if (p_m_b_channel == channel) + return(channel); + + /* if channel already in use, release it */ + if (p_m_b_channel) + drop_bchannel(); + + /* if CHANNEL_NO */ + if (channel==CHANNEL_NO || channel==0) + return(0); + + /* is channel in range ? */ + if (channel==16 + || (channel>p_m_mISDNport->b_num && channel<16) + || ((channel-1)>p_m_mISDNport->b_num && channel>16)) /* channel-1 because channel 16 is not counted */ + return(-6); /* channel unacceptable */ + + /* request exclusive channel */ + if (exclusive && channel>0) + { + i = channel-1-(channel>16); + if (p_m_mISDNport->b_port[i]) + return(-44); /* requested channel not available */ + goto seize; + } + + /* ask for channel */ + if (channel>0) + { + i = channel-1-(channel>16); + if (p_m_mISDNport->b_port[i] == NULL) + goto seize; + } + + /* search for channel */ + i = 0; + while(i < p_m_mISDNport->b_num) + { + if (!p_m_mISDNport->b_port[i]) + { + channel = i+1+(i>=15); + goto seize; + } + i++; + } + return(-34); /* no free channel */ + +seize: + /* link Port */ + p_m_mISDNport->b_port[i] = this; + p_m_b_index = i; + p_m_b_channel = channel; + p_m_b_exclusive = exclusive; + p_m_b_stid = p_m_mISDNport->b_stid[i]; + p_m_b_addr = p_m_mISDNport->b_addr[i]; + p_m_jittercheck = 0; + + /* reserve channel */ + if (p_m_b_reserve == 0) // already reserved + { + p_m_b_reserve = 1; + mISDNport->b_reserved++; + } + + PDEBUG(DEBUG_BCHANNEL, "PmISDN(%s) seizing bchannel %d (index %d)\n", p_name, channel, i); + + return(channel); +} + +/* + * drop reserved channel and unset it. + */ +void PmISDN::drop_bchannel(void) +{ + /* unreserve channel */ + if (p_m_b_reserve) + p_m_mISDNport->b_reserved--; + p_m_b_reserve = 0; + + /* if not in use */ + if (!p_m_b_channel) + return; + + PDEBUG(DEBUG_BCHANNEL, "PmISDN(%s) dropping bchannel\n", p_name); + + p_m_mISDNport->b_port[p_m_b_index] = NULL; + p_m_b_index = -1; + p_m_b_channel = 0; + p_m_b_exclusive = 0; + p_m_b_addr = 0; + p_m_b_stid = 0; +} + +/* + * handler + */ +int PmISDN::handler(void) +{ + struct message *message; + + // NOTE: deletion is done by the child class + + /* handle timeouts */ + if (p_m_timeout) + { + if (p_m_timer+p_m_timeout < now_d) + { + PDEBUG(DEBUG_ISDN, "(%s) timeout after %d seconds detected (state=%d).\n", p_name, p_m_timeout, p_state); + p_m_timeout = 0; + /* send timeout to endpoint */ + message = message_create(p_serial, ACTIVE_EPOINT(p_epointlist), PORT_TO_EPOINT, MESSAGE_TIMEOUT); + message->param.state = p_state; + message_put(message); + } + return(1); + } + + return(0); /* nothing done */ +} + + +/* + * whenever we get audio data from bchannel, we process it here + */ +void PmISDN::bchannel_receive(iframe_t *frm) +{ + unsigned char *data_temp; + unsigned long length_temp; + struct message *message; + struct timeval tv; + struct timezone tz; + long long jitter_now; + int newlen; + unsigned char *p; + int l; + unsigned long cont; +// iframe_t rsp; /* response to possible indication */ +#if 0 +#warning BCHANNEL-DEBUG +{ + // check if we are part of all ports */ + class Port *port = port_first; + while(port) + { + if (port==this) + break; + port=port->next; + } + if (!port) + { + PERROR_RUNTIME("**************************************************\n"); + PERROR_RUNTIME("*** BCHANNEL-DEBUG: !this! is not in list of ports\n"); + PERROR_RUNTIME("**************************************************\n"); + return; + } +} +#endif + + + if (frm->prim == (PH_CONTROL | INDICATION)) + { + cont = *((unsigned long *)&frm->data.p); + // PDEBUG(DEBUG_PORT, "PmISDN(%s) received a PH_CONTROL INDICATION 0x%x\n", p_name, cont); + if ((cont&(~DTMF_TONE_MASK)) == DTMF_TONE_VAL) + { + message = message_create(p_serial, ACTIVE_EPOINT(p_epointlist), PORT_TO_EPOINT, MESSAGE_DTMF); + message->param.dtmf = cont & DTMF_TONE_MASK; + PDEBUG(DEBUG_PORT, "PmISDN(%s) PH_CONTROL DTMF digit '%c'\n", p_name, message->param.dtmf); + message_put(message); + } + switch(cont) + { + case BF_REJECT: + message = message_create(p_serial, ACTIVE_EPOINT(p_epointlist), PORT_TO_EPOINT, MESSAGE_CRYPT); + message->param.crypt.type = CC_ERROR_IND; + PDEBUG(DEBUG_PORT, "PmISDN(%s) PH_CONTROL reject of blowfish.\n", p_name); + message_put(message); + break; + + case BF_ACCEPT: + message = message_create(p_serial, ACTIVE_EPOINT(p_epointlist), PORT_TO_EPOINT, MESSAGE_CRYPT); + message->param.crypt.type = CC_ACTBF_CONF; + PDEBUG(DEBUG_PORT, "PmISDN(%s) PH_CONTROL accept of blowfish.\n", p_name); + message_put(message); + break; + } + return; + } + + /* external incoming calls will not process any audio data unless + * the call is connected OR inbandpattern feature is enabled. + */ + if (p_type==PORT_TYPE_DSS1_TE_IN + && p_state!=PORT_STATE_CONNECT + && !options.inbandpattern) + return; + +#if 0 + /* the bearer capability must be audio in order to send and receive + * audio prior or after connect. + */ + if (!(p_bearerinfo.capability&CLASS_CAPABILITY_AUDIO) && p_state!=PORT_STATE_CONNECT) + return; +#endif + + /* if rx is off, it may happen that fifos send us pending informations, we just ignore them */ + if (p_m_rxoff) + { + PDEBUG(DEBUG_BCHANNEL, "PmISDN(%s) ignoring data, because rx is turned off\n", p_name); + return; + } + + /* randomize and listen to crypt message if enabled */ + if (p_m_crypt_listen) + { + /* the noisy randomizer */ + p = (unsigned char *)&frm->data.p; + l = frm->len; + while(l--) + mISDN_rand[mISDN_rand_count & 0xff] += *p++; + + cryptman_listen_bch((unsigned char *)&frm->data.p, frm->len); + } + + /* prevent jitter */ + gettimeofday(&tv, &tz); + jitter_now = tv.tv_sec; + jitter_now = jitter_now*8000 + tv.tv_usec/125; + if (p_m_jittercheck == 0) + { + p_m_jittercheck = jitter_now; + p_m_jitterdropped = 0; + } else + p_m_jittercheck += frm->len; + if (p_m_jittercheck < jitter_now) + { +// PERROR("jitter: ignoring slow data\n"); + p_m_jittercheck = jitter_now; + } else + if (p_m_jittercheck-ISDN_JITTERLIMIT > jitter_now) + { + p_m_jitterdropped += frm->len; + p_m_jittercheck -= frm->len; + /* must exit here */ + return; + } else + if (p_m_jitterdropped) + { + PERROR("jitter: dropping, caused by fast data: %lld\n", p_m_jitterdropped); + p_m_jitterdropped = 0; + } + + p = (unsigned char *)&frm->data.p; + + /* send data to epoint */ + if (ACTIVE_EPOINT(p_epointlist)) /* only if we have an epoint object */ + { +//printf("we are port %s and sending to epoint %d\n", p_m_cardname, p_epoint->serial); + length_temp = frm->len; + data_temp = p; + while(length_temp) + { + message = message_create(p_serial, ACTIVE_EPOINT(p_epointlist), PORT_TO_EPOINT, MESSAGE_DATA); + message->param.data.len = (length_temp>sizeof(message->param.data.data))?sizeof(message->param.data.data):length_temp; + memcpy(message->param.data.data, data_temp, message->param.data.len); + message->param.data.compressed = 1; + message->param.data.port_id = p_serial; + message->param.data.port_type = p_type; + message_put(message); + if (length_temp <= sizeof(message->param.data.data)) + break; + data_temp += sizeof(message->param.data.data); + length_temp -= sizeof(message->param.data.data); + } + } + /* return the same number of tone data, as we recieved */ + newlen = read_audio(p, frm->len, 1); + /* send tone data to isdn device only if we have data, otherwhise we send nothing */ + if (newlen>0 && (p_tone_fh>=0 || p_tone_fetched || !p_m_nodata || p_m_crypt_msg_loops)) + { +//printf("jolly: sending.... %d %d %d %d %d\n", newlen, p_tone_fh, p_tone_fetched, p_m_nodata, p_m_crypt_msg_loops); + if (p_m_txmix_on) + { + p_m_txmix_on -= newlen; + if (p_m_txmix_on <= 0) + { + p_m_txmix_on = 0; + p_m_txmix = !p_m_nodata; + PDEBUG(DEBUG_BCHANNEL, "after sending message, we set txmix to txmix=%d.\n", p_m_txmix); + if (p_m_txmix) + ph_control(p_m_b_addr, CMX_MIX_ON, 0); + } + } + if (p_m_crypt_msg_loops) + { + /* send pending message */ + int tosend; + + tosend = p_m_crypt_msg_len - p_m_crypt_msg_current; + if (tosend > newlen) + tosend = newlen; + memcpy(p, p_m_crypt_msg+p_m_crypt_msg_current, tosend); + p_m_crypt_msg_current += tosend; + if (p_m_crypt_msg_current == p_m_crypt_msg_len) + { + p_m_crypt_msg_current = 0; + p_m_crypt_msg_loops--; +// we need to disable rxmix some time after sending the loops... + if (!p_m_crypt_msg_loops && p_m_txmix) + { + p_m_txmix_on = 8000; /* one sec */ + } + } + } + frm->prim = frm->prim & 0xfffffffc | REQUEST; + frm->addr = p_m_b_addr | FLG_MSG_DOWN; + frm->len = newlen; + mISDN_write(mISDNdevice, frm, mISDN_HEADER_LEN+frm->len, TIMEOUT_1SEC); + + if (p_debug_nothingtosend) + { + p_debug_nothingtosend = 0; + PDEBUG((DEBUG_PORT | DEBUG_BCHANNEL), "PmISDN(%s) start sending, because we have tones and/or remote audio.\n", p_name); + } + } else + { + if (!p_debug_nothingtosend) + { + p_debug_nothingtosend = 1; + PDEBUG((DEBUG_PORT | DEBUG_BCHANNEL), "PmISDN(%s) stop sending, because we have only silence.\n", p_name); + } + } +#if 0 + /* response to the data indication */ + rsp.prim = frm->prim & 0xfffffffc | RESPONSE; + rsp.addr = frm->addr & INST_ID_MASK | FLG_MSG_DOWN; + rsp.dinfo = frm->dinfo; + rsp.len = 0; + mISDN_write(mISDNdevice, &rsp, mISDN_HEADER_LEN+rsp.len, TIMEOUT_1SEC); +//PDEBUG(DEBUG_ISDN, "written %d bytes.\n", length); +#endif +} + + +/* + * set echotest + */ +void PmISDN::set_echotest(int echo) +{ + if (p_m_echo != echo) + { + p_m_echo = echo; + PDEBUG(DEBUG_ISDN, "we set echo to echo=%d.\n", p_m_echo); + if (p_m_b_channel) + if (p_m_mISDNport->b_state[p_m_b_index] == B_STATE_ACTIVE) + ph_control(p_m_b_addr, p_m_echo?CMX_ECHO_ON:CMX_ECHO_OFF, 0); + } +} + +/* + * set tone + */ +void PmISDN::set_tone(char *dir, char *tone) +{ + int id; + + if (!tone) + tone = ""; + PDEBUG(DEBUG_ISDN, "isdn port now plays tone:'%s'.\n", tone); + if (!tone[0]) + { + id = TONE_OFF; + goto setdsp; + } + + /* check if we NOT really have to use a dsp-tone */ + if (!options.dsptones) + { + nodsp: + if (p_m_tone) + if (p_m_mISDNport->b_state[p_m_b_index] == B_STATE_ACTIVE) + { + PDEBUG(DEBUG_ISDN, "we reset tone from id=%d to OFF.\n", p_m_tone); + ph_control(p_m_b_addr, TONE_PATT_OFF, 0); + } + p_m_tone = 0; + Port::set_tone(dir, tone); + return; + } + if (p_tone_dir[0]) + goto nodsp; + + /* now we USE dsp-tone, convert name */ + else if (!strcmp(tone, "dialtone")) + { + switch(options.dsptones) { + case DSP_AMERICAN: id = TONE_AMERICAN_DIALTONE; break; + case DSP_GERMAN: id = TONE_GERMAN_DIALTONE; break; + case DSP_OLDGERMAN: id = TONE_GERMAN_OLDDIALTONE; break; + } + } else if (!strcmp(tone, "dialpbx")) + { + switch(options.dsptones) { + case DSP_AMERICAN: id = TONE_AMERICAN_DIALPBX; break; + case DSP_GERMAN: id = TONE_GERMAN_DIALPBX; break; + case DSP_OLDGERMAN: id = TONE_GERMAN_OLDDIALPBX; break; + } + } else if (!strcmp(tone, "ringing")) + { + switch(options.dsptones) { + case DSP_AMERICAN: id = TONE_AMERICAN_RINGING; break; + case DSP_GERMAN: id = TONE_GERMAN_RINGING; break; + case DSP_OLDGERMAN: id = TONE_GERMAN_OLDRINGING; break; + } + } else if (!strcmp(tone, "ringpbx")) + { + switch(options.dsptones) { + case DSP_AMERICAN: id = TONE_AMERICAN_RINGPBX; break; + case DSP_GERMAN: id = TONE_GERMAN_RINGPBX; break; + case DSP_OLDGERMAN: id = TONE_GERMAN_OLDRINGPBX; break; + } + } else if (!strcmp(tone, "busy")) + { + busy: + switch(options.dsptones) { + case DSP_AMERICAN: id = TONE_AMERICAN_BUSY; break; + case DSP_GERMAN: id = TONE_GERMAN_BUSY; break; + case DSP_OLDGERMAN: id = TONE_GERMAN_OLDBUSY; break; + } + } else if (!strcmp(tone, "release")) + { + hangup: + switch(options.dsptones) { + case DSP_AMERICAN: id = TONE_AMERICAN_HANGUP; break; + case DSP_GERMAN: id = TONE_GERMAN_HANGUP; break; + case DSP_OLDGERMAN: id = TONE_GERMAN_OLDHANGUP; break; + } + } else if (!strcmp(tone, "cause_10")) + goto hangup; + else if (!strcmp(tone, "cause_11")) + goto busy; + else if (!strcmp(tone, "cause_22")) + { + switch(options.dsptones) { + case DSP_AMERICAN: id = TONE_SPECIAL_INFO; break; + case DSP_GERMAN: id = TONE_GERMAN_GASSENBESETZT; break; + case DSP_OLDGERMAN: id = TONE_GERMAN_OLDBUSY; break; + } + } else if (!strncmp(tone, "cause_", 6)) + id = TONE_SPECIAL_INFO; + else + id = TONE_OFF; + + /* if we have a tone that is not supported by dsp */ + if (id==TONE_OFF && tone[0]) + goto nodsp; + + setdsp: + if (p_m_tone != id) + { + /* set new tone */ + p_m_tone = id; + PDEBUG(DEBUG_ISDN, "we set tone to id=%d.\n", p_m_tone); + if (p_m_b_channel) + if (p_m_mISDNport->b_state[p_m_b_index] == B_STATE_ACTIVE) + ph_control(p_m_b_addr, p_m_tone?TONE_PATT_ON:TONE_PATT_OFF, p_m_tone); + } + /* turn user-space tones off in cases of no tone OR dsp tone */ + Port::set_tone("",NULL); +} + + +/* MESSAGE_mISDNSIGNAL */ +//extern struct message *dddebug; +void PmISDN::message_mISDNsignal(unsigned long epoint_id, int message_id, union parameter *param) +{ + switch(param->mISDNsignal.message) + { + case mISDNSIGNAL_VOLUME: + if (p_m_txvol != param->mISDNsignal.txvol) + { + p_m_txvol = param->mISDNsignal.txvol; + PDEBUG(DEBUG_BCHANNEL, "we change tx-volume to shift=%d.\n", p_m_txvol); + if (p_m_b_channel) + if (p_m_mISDNport->b_state[p_m_b_index] == B_STATE_ACTIVE) + ph_control(p_m_b_addr, VOL_CHANGE_TX, p_m_txvol); + } + if (p_m_rxvol != param->mISDNsignal.rxvol) + { + p_m_rxvol = param->mISDNsignal.rxvol; + PDEBUG(DEBUG_BCHANNEL, "we change rx-volume to shift=%d.\n", p_m_rxvol); + if (p_m_b_channel) + if (p_m_mISDNport->b_state[p_m_b_index] == B_STATE_ACTIVE) + ph_control(p_m_b_addr, VOL_CHANGE_RX, p_m_rxvol); + } + break; + + case mISDNSIGNAL_CONF: +//if (dddebug) PDEBUG(DEBUG_ISDN, "dddebug = %d\n", dddebug->type); +//tone if (!p_m_tone && p_m_conf!=param->mISDNsignal.conf) + if (p_m_conf != param->mISDNsignal.conf) + { + p_m_conf = param->mISDNsignal.conf; + PDEBUG(DEBUG_BCHANNEL, "we change conference to conf=%d.\n", p_m_conf); + if (p_m_b_channel) + if (p_m_mISDNport->b_state[p_m_b_index] == B_STATE_ACTIVE) + ph_control(p_m_b_addr, (p_m_conf)?CMX_CONF_JOIN:CMX_CONF_SPLIT, p_m_conf); + } + /* we must set, even if currently tone forbids conf */ + p_m_conf = param->mISDNsignal.conf; +//if (dddebug) PDEBUG(DEBUG_ISDN, "dddebug = %d\n", dddebug->type); + break; + + case mISDNSIGNAL_NODATA: + p_m_nodata = param->mISDNsignal.nodata; + if (p_m_txmix == p_m_nodata) /* txmix != !nodata */ + { + p_m_txmix = !p_m_nodata; + PDEBUG(DEBUG_BCHANNEL, "we change mix mode to txmix=%d (nodata=%d).\n", p_m_txmix, p_m_nodata); + if (p_m_b_channel) + if (p_m_mISDNport->b_state[p_m_b_index] == B_STATE_ACTIVE) + ph_control(p_m_b_addr, p_m_txmix?CMX_MIX_ON:CMX_MIX_OFF, 0); + } + break; + +#if 0 + case mISDNSIGNAL_RXOFF: + if (p_m_rxoff != param->mISDNsignal.rxoff) + { + p_m_rxoff = param->mISDNsignal.rxoff; + PDEBUG(DEBUG_BCHANNEL, "we change receive mode to rxoff=%d.\n", p_m_rxoff); + if (p_m_b_channel) + if (p_m_mISDNport->b_state[p_m_b_index] == B_STATE_ACTIVE) + ph_control(p_m_b_addr, p_m_rxoff?CMX_RECEIVE_OFF:CMX_RECEIVE_ON, 0); + } + break; + + case mISDNSIGNAL_DTMF: + if (p_m_dtmf != param->mISDNsignal.dtmf) + { + p_m_dtmf = param->mISDNsignal.dtmf; + PDEBUG(DEBUG_BCHANNEL, "we change dtmf mode to dtmf=%d.\n", p_m_dtmf); + if (p_m_b_channel) + if (p_m_mISDNport->b_state[p_m_b_index] == B_STATE_ACTIVE) + ph_control(p_m_b_addr, p_m_dtmf?DTMF_TONE_START:DTMF_TONE_STOP, 0); + } + break; + +#endif + default: + PERROR("PmISDN(%s) unsupported signal message %d.\n", p_name, param->mISDNsignal.message); + } +} + +/* MESSAGE_CRYPT */ +void PmISDN::message_crypt(unsigned long epoint_id, int message_id, union parameter *param) +{ + struct message *message; + + switch(param->crypt.type) + { + case CC_ACTBF_REQ: /* activate blowfish */ + p_m_crypt = 1; + p_m_crypt_key_len = param->crypt.len; + if (p_m_crypt_key_len > (int)sizeof(p_m_crypt_key)) + { + PERROR("PmISDN(%s) key too long %d > %d\n", p_name, p_m_crypt_key_len, sizeof(p_m_crypt_key)); + message = message_create(p_serial, ACTIVE_EPOINT(p_epointlist), PORT_TO_EPOINT, MESSAGE_CRYPT); + message->param.crypt.type = CC_ERROR_IND; + message_put(message); + break; + } + memcpy(p_m_crypt_key, param->crypt.data, p_m_crypt_key_len); + crypt_off: + PDEBUG(DEBUG_BCHANNEL, "we set encryption to crypt=%d. (0 means OFF)\n", p_m_crypt); + if (p_m_b_channel) + if (p_m_mISDNport->b_state[p_m_b_index] == B_STATE_ACTIVE) + ph_control_block(p_m_b_addr, p_m_crypt?BF_ENABLE_KEY:BF_DISABLE, p_m_crypt_key, p_m_crypt_key_len); + break; + + case CC_DACT_REQ: /* deactivate session encryption */ + p_m_crypt = 0; + goto crypt_off; + break; + + case CR_LISTEN_REQ: /* start listening to messages */ + p_m_crypt_listen = 1; + p_m_crypt_listen_state = 0; + break; + + case CR_UNLISTEN_REQ: /* stop listening to messages */ + p_m_crypt_listen = 0; + break; + + case CR_MESSAGE_REQ: /* send message */ + p_m_crypt_msg_len = cryptman_encode_bch(param->crypt.data, param->crypt.len, p_m_crypt_msg, sizeof(p_m_crypt_msg)); + if (!p_m_crypt_msg_len) + { + PERROR("PmISDN(%s) message too long %d > %d\n", p_name, param->crypt.len-1, sizeof(p_m_crypt_msg)); + break; + } + p_m_crypt_msg_current = 0; /* reset */ + p_m_crypt_msg_loops = 3; /* enable */ + /* disable txmix, or we get corrupt data due to audio process */ + if (p_m_txmix) + { + PDEBUG(DEBUG_BCHANNEL, "for sending CR_MESSAGE_REQ, we reset txmix from txmix=%d.\n", p_m_txmix); + ph_control(p_m_b_addr, CMX_MIX_OFF, 0); + } + break; + + default: + PERROR("PmISDN(%s) unknown crypt message %d\n", p_name, param->crypt.type); + } + +} + +/* + * endpoint sends messages to the port + */ +int PmISDN::message_epoint(unsigned long epoint_id, int message_id, union parameter *param) +{ + if (Port::message_epoint(epoint_id, message_id, param)) + return(1); + + switch(message_id) + { + case MESSAGE_mISDNSIGNAL: /* user command */ + PDEBUG(DEBUG_ISDN, "PmISDN(%s) received special ISDN SIGNAL %d.\n", p_name, param->mISDNsignal.message); + message_mISDNsignal(epoint_id, message_id, param); + return(1); + + case MESSAGE_CRYPT: /* crypt control command */ + PDEBUG(DEBUG_ISDN, "PmISDN(%s) received encryption command '%d'.\n", p_name, param->crypt.type); + message_crypt(epoint_id, message_id, param); + return(1); + } + + return(0); +} + + +/* + * main loop for processing messages from mISDN device + */ +int mISDN_handler(void) +{ + int ret; + msg_t *msg; + iframe_t *frm; + struct mISDNport *mISDNport; + class PmISDN *isdnport; + net_stack_t *nst; + msg_t *dmsg; + mISDNuser_head_t *hh; + int i; + + /* the que avoids loopbacks when replying to stack after receiving + * from stack. */ + mISDNport = mISDNport_first; + while(mISDNport) + { + /* process turning off rx */ + i = 0; + while(i < mISDNport->b_num) + { + if (mISDNport->b_port[i] && mISDNport->b_state[i] == B_STATE_ACTIVE) + { + isdnport=mISDNport->b_port[i]; + if (isdnport->p_tone_name[0] || isdnport->p_tone_fh>=0 || isdnport->p_tone_fetched || !isdnport->p_m_nodata || isdnport->p_m_crypt_msg_loops || isdnport->p_m_crypt_listen || isdnport->p_record) + { + /* rx IS required */ + if (isdnport->p_m_rxoff) + { + /* turn on RX */ + isdnport->p_m_rxoff = 0; + PDEBUG(DEBUG_BCHANNEL, "%s: receive data is required, so we turn them on\n"); + ph_control(isdnport->p_m_b_addr, CMX_RECEIVE_ON, 0); + } + } else + { + /* rx NOT required */ + if (!isdnport->p_m_rxoff) + { + /* turn off RX */ + isdnport->p_m_rxoff = 1; + PDEBUG(DEBUG_BCHANNEL, "%s: receive data is not required, so we turn them off\n"); + ph_control(isdnport->p_m_b_addr, CMX_RECEIVE_OFF, 0); + } + } + isdnport->p_m_jittercheck = 0; /* reset jitter detection check */ + } + i++; + } +#if 0 + if (mISDNport->l1timeout && now>mISDNport->l1timeout) + { + PDEBUG(DEBUG_ISDN, "the L1 establish timer expired, we release all pending messages.\n", mISDNport->portnum); + mISDNport->l1timeout = 0; +#endif + + if (mISDNport->l2establish) + { + if (now-mISDNport->l2establish > 5) + { + if (mISDNport->ntmode) + { + PDEBUG(DEBUG_ISDN, "the L2 establish timer expired, we try to establish the link NT portnum=%d.\n", mISDNport->portnum); + time(&mISDNport->l2establish); + /* establish */ + dmsg = create_l2msg(DL_ESTABLISH | REQUEST, 0, 0); + if (mISDNport->nst.manager_l3(&mISDNport->nst, dmsg)) + free_msg(dmsg); + } else { + PDEBUG(DEBUG_ISDN, "the L2 establish timer expired, we try to establish the link TE portnum=%d.\n", mISDNport->portnum); + time(&mISDNport->l2establish); + /* establish */ + iframe_t act; + act.prim = DL_ESTABLISH | REQUEST; + act.addr = (mISDNport->upper_id & ~LAYER_ID_MASK) | 3 | FLG_MSG_DOWN; + act.dinfo = 0; + act.len = 0; + mISDN_write(mISDNdevice, &act, mISDN_HEADER_LEN+act.len, TIMEOUT_1SEC); + } + } + } + if ((dmsg = msg_dequeue(&mISDNport->downqueue))) + { + if (mISDNport->ntmode) + { + hh = (mISDNuser_head_t *)dmsg->data; + PDEBUG(DEBUG_ISDN, "sending queued NT l3-down-message: prim(0x%x) dinfo(0x%x) msg->len(%d)\n", hh->prim, hh->dinfo, dmsg->len); + if (mISDNport->nst.manager_l3(&mISDNport->nst, dmsg)) + free_msg(dmsg); + } else + { + frm = (iframe_t *)dmsg->data; + frm->addr = mISDNport->upper_id | FLG_MSG_DOWN; + frm->len = (dmsg->len) - mISDN_HEADER_LEN; + PDEBUG(DEBUG_ISDN, "sending queued TE l3-down-message: prim(0x%x) dinfo(0x%x) msg->len(%d)\n", frm->prim, frm->dinfo, dmsg->len); + mISDN_write(mISDNdevice, dmsg->data, dmsg->len, TIMEOUT_1SEC); + free_msg(dmsg); + } + return(1); + } + mISDNport = mISDNport->next; + } + + /* get message from kernel */ + if (!(msg = alloc_msg(MAX_MSG_SIZE))) + return(1); + ret = mISDN_read(mISDNdevice, msg->data, MAX_MSG_SIZE, 0); + if (ret < 0) + { + free_msg(msg); + if (errno == EAGAIN) + return(0); + PERROR("FATAL ERROR: failed to do mISDN_read()\n"); + exit(-1); + } + if (!ret) + { + free_msg(msg); +// printf("%s: ERROR: mISDN_read() returns nothing\n"); + return(0); + } + msg->len = ret; + frm = (iframe_t *)msg->data; + + /* global prim */ + switch(frm->prim) + { + case MGR_INITTIMER | CONFIRM: + case MGR_ADDTIMER | CONFIRM: + case MGR_DELTIMER | CONFIRM: + case MGR_REMOVETIMER | CONFIRM: +// if (options.deb & DEBUG_ISDN) +// PDEBUG(DEBUG_ISDN, "timer-confirm\n"); + free_msg(msg); + return(1); + } + + /* find the port */ + mISDNport = mISDNport_first; + while(mISDNport) + { + if ((frm->prim==(MGR_TIMER | INDICATION)) && mISDNport->ntmode) + { + itimer_t *it = mISDNport->nst.tlist; + + /* find timer */ + while(it) + { + if (it->id == (int)frm->addr) + break; + it = it->next; + } + if (it) + { + mISDN_write_frame(mISDNdevice, msg->data, mISDNport->upper_id | FLG_MSG_DOWN, + MGR_TIMER | RESPONSE, 0, 0, NULL, TIMEOUT_1SEC); + + PDEBUG(DEBUG_ISDN, "timer-indication %s port %d it=%p\n", (mISDNport->ntmode)?"NT":"TE", mISDNport->portnum, it); + test_and_clear_bit(FLG_TIMER_RUNING, (long unsigned int *)&it->Flags); + ret = it->function(it->data); + break; + } + /* we will continue here because we have a timer for a different mISDNport */ + } +//printf("comparing frm->addr %x with upper_id %x\n", frm->addr, mISDNport->upper_id); + if ((frm->addr&STACK_ID_MASK) == (unsigned int)(mISDNport->upper_id&STACK_ID_MASK)) + { + /* d-message */ + switch(frm->prim) + { + case MGR_SHORTSTATUS | INDICATION: + case MGR_SHORTSTATUS | CONFIRM: + switch(frm->dinfo) { + case SSTATUS_L1_ACTIVATED: + PDEBUG(DEBUG_ISDN, "Received SSTATUS_L1_ACTIVATED for port %d (%s).\n", mISDNport->portnum, mISDNport->ifport->interface->name); + goto ss_act; + case SSTATUS_L1_DEACTIVATED: + PDEBUG(DEBUG_ISDN, "Received SSTATUS_L1_DEACTIVATED for port %d (%s).\n", mISDNport->portnum, mISDNport->ifport->interface->name); + goto ss_deact; + case SSTATUS_L2_ESTABLISHED: + PDEBUG(DEBUG_ISDN, "Received SSTATUS_L2_ESTABLISHED for port %d (%s).\n", mISDNport->portnum, mISDNport->ifport->interface->name); + goto ss_estab; + case SSTATUS_L2_RELEASED: + PDEBUG(DEBUG_ISDN, "Received SSTATUS_L2_RELEASED for port %d (%s).\n", mISDNport->portnum, mISDNport->ifport->interface->name); + goto ss_rel; + } + break; + + case PH_ACTIVATE | CONFIRM: + case PH_ACTIVATE | INDICATION: + PDEBUG(DEBUG_ISDN, "Received PH_ACTIVATED for port %d (%s).\n", mISDNport->portnum, mISDNport->ifport->interface->name); + if (mISDNport->ntmode) + { + mISDNport->l1link = 1; + setup_queue(mISDNport, 1); + goto l1_msg; + } + ss_act: + mISDNport->l1link = 1; + setup_queue(mISDNport, 1); + break; + + case PH_DEACTIVATE | CONFIRM: + case PH_DEACTIVATE | INDICATION: + PDEBUG(DEBUG_ISDN, "Received PH_DEACTIVATED for port %d (%s).\n", mISDNport->portnum, mISDNport->ifport->interface->name); + if (mISDNport->ntmode) + { + mISDNport->l1link = 0; + setup_queue(mISDNport, 0); + goto l1_msg; + } + ss_deact: + mISDNport->l1link = 0; + setup_queue(mISDNport, 0); + break; + + case PH_CONTROL | CONFIRM: + case PH_CONTROL | INDICATION: + PDEBUG(DEBUG_ISDN, "Received PH_CONTROL for port %d (%s).\n", mISDNport->portnum, mISDNport->ifport->interface->name); + break; + + case DL_ESTABLISH | INDICATION: + case DL_ESTABLISH | CONFIRM: +// PDEBUG(DEBUG_ISDN, "addr 0x%x established data link (DL) TE portnum=%d (DL_ESTABLISH)\n", frm->addr, mISDNport->portnum); + if (!mISDNport->ntmode) break; /* !!!!!!!!!!!!!!!! */ + ss_estab: +// if (mISDNport->ntmode) +// break; + if (mISDNport->l2establish) + { + mISDNport->l2establish = 0; + PDEBUG(DEBUG_ISDN, "the link became active before l2establish timer expiry.\n"); + } + mISDNport->l2link = 1; + break; + + case DL_RELEASE | INDICATION: + case DL_RELEASE | CONFIRM: +// PDEBUG(DEBUG_ISDN, "addr 0x%x released data link (DL) TE portnum=%d (DL_RELEASE)\n", frm->addr, mISDNport->portnum); + if (!mISDNport->ntmode) break; /* !!!!!!!!!!!!!!!! */ + ss_rel: +// if (mISDNport->ntmode) +// break; + mISDNport->l2link = 0; + if (mISDNport->ptp) + { + time(&mISDNport->l2establish); + PDEBUG(DEBUG_ISDN, "because we are ptp, we set a l2establish timer.\n"); + } + break; + + default: + l1_msg: + PDEBUG(DEBUG_STACK, "GOT d-msg from %s port %d prim 0x%x dinfo 0x%x addr 0x%x\n", (mISDNport->ntmode)?"NT":"TE", mISDNport->portnum, frm->prim, frm->dinfo, frm->addr); + if (frm->dinfo==(signed long)0xffffffff && frm->prim==(PH_DATA|CONFIRM)) + { + PERROR("SERIOUS BUG, dinfo == 0xffffffff, prim == PH_DATA | CONFIRM !!!!\n"); + } + /* d-message */ + if (mISDNport->ntmode) + { + /* l1-data enters the nt-mode library */ + nst = &mISDNport->nst; + if (nst->l1_l2(nst, msg)) + free_msg(msg); + return(1); + } else + { + /* l3-data is sent to pbx */ + if (stack2manager_te(mISDNport, msg)) + free_msg(msg); + return(1); + } + } + break; + } +//PDEBUG(DEBUG_ISDN, "flg:%d upper_id=%x addr=%x\n", (frm->addr&FLG_CHILD_STACK), (mISDNport->b_addr[0])&(~IF_CHILDMASK), (frm->addr)&(~IF_CHILDMASK)); + /* check if child, and if parent stack match */ + if ((frm->addr&FLG_CHILD_STACK) && (((unsigned int)(mISDNport->b_addr[0])&(~CHILD_ID_MASK)&STACK_ID_MASK) == ((frm->addr)&(~CHILD_ID_MASK)&STACK_ID_MASK))) + { + /* b-message */ + switch(frm->prim) + { + /* we don't care about confirms, we use rx data to sync tx */ + case PH_DATA | CONFIRM: + case DL_DATA | CONFIRM: + break; + + /* we receive audio data, we respond to it AND we send tones */ + case PH_DATA | INDICATION: + case DL_DATA | INDICATION: + case PH_CONTROL | INDICATION: + i = 0; + while(i < mISDNport->b_num) + { + if ((unsigned int)(mISDNport->b_addr[i]&STACK_ID_MASK) == (frm->addr&STACK_ID_MASK)) + break; + i++; + } + if (i == mISDNport->b_num) + { + PERROR("unhandled b-message (address 0x%x).\n", frm->addr); + break; + } + if (mISDNport->b_port[i]) + { +//PERROR("port sech: %s data\n", mISDNport->b_port[i]->p_name); + mISDNport->b_port[i]->bchannel_receive(frm); + } else + PDEBUG(DEBUG_BCHANNEL, "b-channel is not associated to an ISDNPort (address 0x%x), ignoring.\n", frm->addr); + break; + + case PH_ACTIVATE | INDICATION: + case DL_ESTABLISH | INDICATION: + case PH_ACTIVATE | CONFIRM: + case DL_ESTABLISH | CONFIRM: + PDEBUG(DEBUG_BCHANNEL, "DL_ESTABLISH confirm: bchannel is now activated (address 0x%x).\n", frm->addr); + i = 0; + while(i < mISDNport->b_num) + { + if ((unsigned int)(mISDNport->b_addr[i]&STACK_ID_MASK) == (frm->addr&STACK_ID_MASK)) + break; + i++; + } + if (i == mISDNport->b_num) + { + PERROR("unhandled b-establish (address 0x%x).\n", frm->addr); + break; + } + mISDNport->b_state[i] = B_STATE_ACTIVE; + if (!mISDNport->b_port[i]) + bchannel_deactivate(mISDNport, i); + else + bchannel_activate(mISDNport, i); + break; + + case PH_DEACTIVATE | INDICATION: + case DL_RELEASE | INDICATION: + case PH_DEACTIVATE | CONFIRM: + case DL_RELEASE | CONFIRM: + PDEBUG(DEBUG_BCHANNEL, "DL_RELEASE confirm: bchannel is now de-activated (address 0x%x).\n", frm->addr); + i = 0; + while(i < mISDNport->b_num) + { + if ((unsigned int)(mISDNport->b_addr[i]&STACK_ID_MASK) == (frm->addr&STACK_ID_MASK)) + break; + i++; + } + if (i == mISDNport->b_num) + { + PERROR("unhandled b-release (address 0x%x).\n", frm->addr); + break; + } + mISDNport->b_state[i] = B_STATE_IDLE; + if (mISDNport->b_port[i]) + bchannel_activate(mISDNport, i); + else + bchannel_deactivate(mISDNport, i); + break; + } + break; + } + + mISDNport = mISDNport->next; + } + if (!mISDNport) + { + if (frm->prim == (MGR_TIMER | INDICATION)) + PERROR("unhandled timer indication message: prim(0x%x) addr(0x%x) msg->len(%d)\n", frm->prim, frm->addr, msg->len); + else + PERROR("unhandled message: prim(0x%x) addr(0x%x) msg->len(%d)\n", frm->prim, frm->addr, msg->len); +// PERROR("test: is_child: %x of stack %x == %x (baddr %x frm %x)\n", (frm->addr&FLG_CHILD_STACK), ((unsigned int)(mISDNport_first->b_addr[0])&(~CHILD_ID_MASK)&STACK_ID_MASK), ((frm->addr)&(~CHILD_ID_MASK)&STACK_ID_MASK), mISDNport_first->b_addr[0], frm->addr); + } + + free_msg(msg); + return(1); +} + + +/* + * global function to add a new card (port) + */ +struct mISDNport *mISDN_port_open(int port, int ptp) +{ + int ret; + unsigned char buff[1025]; + iframe_t *frm = (iframe_t *)buff; + stack_info_t *stinf; + struct mISDNport *mISDNport, **mISDNportp; + int i, cnt; + layer_info_t li; +// interface_info_t ii; + net_stack_t *nst; + manager_t *mgr; + mISDN_pid_t pid; + int pri = 0; + int nt = 0; + iframe_t dact; + + /* open mISDNdevice if not already open */ + if (mISDNdevice < 0) + { + ret = mISDN_open(); + if (ret < 0) + { + PERROR("cannot open mISDN device ret=%d errno=%d (%s) Check for mISDN modules!\nAlso did you create \"/dev/mISDN\"? Do: \"mknod /dev/mISDN c 46 0\"\n", ret, errno, strerror(errno)); + return(NULL); + } + mISDNdevice = ret; + PDEBUG(DEBUG_ISDN, "mISDN device opened.\n"); + + /* create entity for layer 3 TE-mode */ + mISDN_write_frame(mISDNdevice, buff, 0, MGR_NEWENTITY | REQUEST, 0, 0, NULL, TIMEOUT_1SEC); + ret = mISDN_read_frame(mISDNdevice, frm, sizeof(iframe_t), 0, MGR_NEWENTITY | CONFIRM, TIMEOUT_1SEC); + if (ret < (int)mISDN_HEADER_LEN) + { + noentity: + fprintf(stderr, "cannot request MGR_NEWENTITY from mISDN. Exitting due to software bug."); + exit(-1); + } + entity = frm->dinfo & 0xffff; + if (!entity) + goto noentity; + PDEBUG(DEBUG_ISDN, "our entity for l3-processes is %d.\n", entity); + } + + /* query port's requirements */ + cnt = mISDN_get_stack_count(mISDNdevice); + if (cnt <= 0) + { + PERROR("Found no card. Please be sure to load card drivers.\n"); + return(NULL); + } + if (port>cnt || port<1) + { + PERROR("Port (%d) given at 'ports' (options.conf) is out of existing port range (%d-%d)\n", port, 1, cnt); + return(NULL); + } + ret = mISDN_get_stack_info(mISDNdevice, port, buff, sizeof(buff)); + if (ret < 0) + { + PERROR("Cannot get stack info for port %d (ret=%d)\n", port, ret); + return(NULL); + } + stinf = (stack_info_t *)&frm->data.p; + switch(stinf->pid.protocol[0] & ~ISDN_PID_FEATURE_MASK) + { + case ISDN_PID_L0_TE_S0: + PDEBUG(DEBUG_ISDN, "TE-mode BRI S/T interface line\n"); + break; + case ISDN_PID_L0_NT_S0: + PDEBUG(DEBUG_ISDN, "NT-mode BRI S/T interface port\n"); + nt = 1; + break; + case ISDN_PID_L0_TE_U: + PDEBUG(DEBUG_ISDN, "TE-mode BRI U interface line\n"); + break; + case ISDN_PID_L0_NT_U: + PDEBUG(DEBUG_ISDN, "NT-mode BRI U interface port\n"); + nt = 1; + break; + case ISDN_PID_L0_TE_UP2: + PDEBUG(DEBUG_ISDN, "TE-mode BRI Up2 interface line\n"); + break; + case ISDN_PID_L0_NT_UP2: + PDEBUG(DEBUG_ISDN, "NT-mode BRI Up2 interface port\n"); + nt = 1; + break; + case ISDN_PID_L0_TE_E1: + PDEBUG(DEBUG_ISDN, "TE-mode PRI E1 interface line\n"); + pri = 1; + break; + case ISDN_PID_L0_NT_E1: + PDEBUG(DEBUG_ISDN, "LT-mode PRI E1 interface port\n"); + pri = 1; + nt = 1; + break; + default: + PERROR("unknown port(%d) type 0x%08x\n", port, stinf->pid.protocol[0]); + return(NULL); + } + if (nt) + { + /* NT */ + if (stinf->pid.protocol[1] == 0) + { + PERROR("Given port %d: Missing layer 1 NT-mode protocol.\n", port); + return(NULL); + } + if (stinf->pid.protocol[2]) + { + PERROR("Given port %d: Layer 2 protocol 0x%08x is detected, but not allowed for NT lib.\n", port, stinf->pid.protocol[2]); + return(NULL); + } + } else + { + /* TE */ + if (stinf->pid.protocol[1] == 0) + { + PERROR("Given port %d: Missing layer 1 protocol.\n", port); + return(NULL); + } + if (stinf->pid.protocol[2] == 0) + { + PERROR("Given port %d: Missing layer 2 protocol.\n", port); + return(NULL); + } + if (stinf->pid.protocol[3] == 0) + { + PERROR("Given port %d: Missing layer 3 protocol.\n", port); + return(NULL); + } else + { + switch(stinf->pid.protocol[3] & ~ISDN_PID_FEATURE_MASK) + { + case ISDN_PID_L3_DSS1USER: + break; + + default: + PERROR("Given port %d: own protocol 0x%08x", port,stinf->pid.protocol[3]); + return(NULL); + } + } + if (stinf->pid.protocol[4]) + { + PERROR("Given port %d: Layer 4 protocol not allowed.\n", port); + return(NULL); + } + } + + /* add mISDNport structure */ + mISDNportp = &mISDNport_first; + while(*mISDNportp) + mISDNportp = &mISDNport->next; + mISDNport = (struct mISDNport *)calloc(1, sizeof(struct mISDNport)); + if (!mISDNport) + { + PERROR("Cannot alloc mISDNport structure\n"); + return(NULL); + } + pmemuse++; + memset(mISDNport, 0, sizeof(mISDNport)); + *mISDNportp = mISDNport; + + /* allocate ressources of port */ + msg_queue_init(&mISDNport->downqueue); +// SCPY(mISDNport->name, "noname"); + mISDNport->portnum = port; + mISDNport->ntmode = nt; + mISDNport->pri = pri; + mISDNport->d_stid = stinf->id; + PDEBUG(DEBUG_ISDN, "d_stid = 0x%x.\n", mISDNport->d_stid); + mISDNport->b_num = stinf->childcnt; + PDEBUG(DEBUG_ISDN, "Port has %d b-channels.\n", mISDNport->b_num); + if ((stinf->pid.protocol[2]&ISDN_PID_L2_DF_PTP) || (nt&&ptp) || pri) + { + PDEBUG(DEBUG_ISDN, "Port is point-to-point.\n"); + mISDNport->ptp = ptp = 1; + } + i = 0; + while(i < stinf->childcnt) + { + mISDNport->b_stid[i] = stinf->child[i]; + PDEBUG(DEBUG_ISDN, "b_stid[%d] = 0x%x.\n", i, mISDNport->b_stid[i]); + i++; + } + memset(&li, 0, sizeof(li)); + UCPY(&li.name[0], (nt)?"net l2":"pbx l4"); + li.object_id = -1; + li.extentions = 0; + li.pid.protocol[nt?2:4] = (nt)?ISDN_PID_L2_LAPD_NET:ISDN_PID_L4_CAPI20; + li.pid.layermask = ISDN_LAYER((nt?2:4)); + li.st = mISDNport->d_stid; + ret = mISDN_new_layer(mISDNdevice, &li); + if (ret) + { + PERROR("Cannot add layer %d of port %d (ret %d)\n", nt?2:4, port, ret); + closeport: + mISDNport_close(mISDNport); + return(NULL); + } + mISDNport->upper_id = li.id; + ret = mISDN_register_layer(mISDNdevice, mISDNport->d_stid, mISDNport->upper_id); + if (ret) + { + PERROR("Cannot register layer %d of port %d\n", nt?2:4, port); + goto closeport; + } + mISDNport->lower_id = mISDN_get_layerid(mISDNdevice, mISDNport->d_stid, nt?1:3); // id of lower layer (nt=1, te=3) + if (mISDNport->lower_id < 0) + { + PERROR("Cannot get layer(%d) id of port %d\n", nt?1:3, port); + goto closeport; + } + mISDNport->upper_id = mISDN_get_layerid(mISDNdevice, mISDNport->d_stid, nt?2:4); // id of uppermost layer (nt=2, te=4) + if (mISDNport->upper_id < 0) + { + PERROR("Cannot get layer(%d) id of port %d\n", nt?2:4, port); + goto closeport; + } + PDEBUG(DEBUG_ISDN, "Layer %d of port %d added.\n", nt?2:4, port); + + /* if ntmode, establish L1 to send the tei removal during start */ + if (mISDNport->ntmode) + { + iframe_t act; + /* L1 */ + act.prim = PH_ACTIVATE | REQUEST; + act.addr = mISDNport->upper_id | FLG_MSG_DOWN; + printf("UPPER ID 0x%x, addr 0x%x\n",mISDNport->upper_id, act.addr); + act.dinfo = 0; + act.len = 0; + mISDN_write(mISDNdevice, &act, mISDN_HEADER_LEN+act.len, TIMEOUT_1SEC); + usleep(10000); /* to be sure, that l1 is up */ + } + + /* create nst (nt-mode only) */ + if (nt) + { + mgr = &mISDNport->mgr; + nst = &mISDNport->nst; + + mgr->nst = nst; + nst->manager = mgr; + + nst->l3_manager = stack2manager_nt; /* messages from nt-mode */ + nst->device = mISDNdevice; + nst->cardnr = port; + nst->d_stid = mISDNport->d_stid; + + nst->feature = FEATURE_NET_HOLD; + if (ptp) + nst->feature |= FEATURE_NET_PTP; + if (pri) + nst->feature |= FEATURE_NET_CRLEN2 | FEATURE_NET_EXTCID; +#if 0 + i = 0; + while(i < mISDNport->b_num) + { + nst->b_stid[i] = mISDNport->b_stid[i]; + i++; + } +#endif + nst->l1_id = mISDNport->lower_id; + nst->l2_id = mISDNport->upper_id; + + /* phd */ + msg_queue_init(&nst->down_queue); + + Isdnl2Init(nst); + Isdnl3Init(nst); + } + + /* if te-mode, query state link */ + if (!mISDNport->ntmode) + { + iframe_t act; + /* L2 */ + PDEBUG(DEBUG_ISDN, "sending short status request for port %d.\n", port); + act.prim = MGR_SHORTSTATUS | REQUEST; + act.addr = mISDNport->upper_id | MSG_BROADCAST; + act.dinfo = SSTATUS_BROADCAST_BIT | SSTATUS_ALL; + act.len = 0; + mISDN_write(mISDNdevice, &act, mISDN_HEADER_LEN+act.len, TIMEOUT_1SEC); + } + /* if ptp AND te-mode, pull up the link */ + if (mISDNport->ptp && !mISDNport->ntmode) + { + iframe_t act; + /* L2 */ + act.prim = DL_ESTABLISH | REQUEST; + act.addr = (mISDNport->upper_id & ~LAYER_ID_MASK) | 4 | FLG_MSG_DOWN; + act.dinfo = 0; + act.len = 0; + mISDN_write(mISDNdevice, &act, mISDN_HEADER_LEN+act.len, TIMEOUT_1SEC); + } + /* if ptp AND nt-mode, pull up the link */ + if (mISDNport->ptp && mISDNport->ntmode) + { + msg_t *dmsg; + /* L2 */ + dmsg = create_l2msg(DL_ESTABLISH | REQUEST, 0, 0); + if (mISDNport->nst.manager_l3(&mISDNport->nst, dmsg)) + free_msg(dmsg); + } + /* initially, we assume that the link is down, exept for nt-ptmp */ + mISDNport->l2link = (mISDNport->ntmode && !mISDNport->ptp)?1:0; + + PDEBUG(DEBUG_BCHANNEL, "using 'mISDN_dsp.o' module\n"); + + /* add all bchannel layers */ + i = 0; + while(i < mISDNport->b_num) + { + /* create new layer */ + PDEBUG(DEBUG_BCHANNEL, "creating bchannel %d (index %d).\n" , i+1+(i>=15), i); + memset(&li, 0, sizeof(li)); + memset(&pid, 0, sizeof(pid)); + li.object_id = -1; + li.extentions = 0; + li.st = mISDNport->b_stid[i]; + UCPY(li.name, "B L4"); + li.pid.layermask = ISDN_LAYER((4)); + li.pid.protocol[4] = ISDN_PID_L4_B_USER; + ret = mISDN_new_layer(mISDNdevice, &li); + if (ret) + { + failed_new_layer: + PERROR("mISDN_new_layer() failed to add bchannel %d (index %d)\n", i+1+(i>=15), i); + goto closeport; + } + mISDNport->b_addr[i] = li.id; + if (!li.id) + { + goto failed_new_layer; + } + PDEBUG(DEBUG_BCHANNEL, "new layer (b_addr=0x%x)\n", mISDNport->b_addr[i]); + + /* create new stack */ + pid.protocol[1] = ISDN_PID_L1_B_64TRANS; + pid.protocol[2] = ISDN_PID_L2_B_TRANS; + pid.protocol[3] = ISDN_PID_L3_B_DSP; + pid.protocol[4] = ISDN_PID_L4_B_USER; + pid.layermask = ISDN_LAYER((1)) | ISDN_LAYER((2)) | ISDN_LAYER((3)) | ISDN_LAYER((4)); + ret = mISDN_set_stack(mISDNdevice, mISDNport->b_stid[i], &pid); + if (ret) + { + stack_error: + PERROR("mISDN_set_stack() failed (ret=%d) to add bchannel (index %d) stid=0x%x\n", ret, i, mISDNport->b_stid[i]); + mISDN_write_frame(mISDNdevice, buff, mISDNport->b_addr[i], MGR_DELLAYER | REQUEST, 0, 0, NULL, TIMEOUT_1SEC); + mISDNport->b_addr[i] = 0; +// mISDNport->b_addr_low[i] = 0; + goto closeport; + } + ret = mISDN_get_setstack_ind(mISDNdevice, mISDNport->b_addr[i]); + if (ret) + goto stack_error; + + /* get layer id */ + mISDNport->b_addr[i] = mISDN_get_layerid(mISDNdevice, mISDNport->b_stid[i], 4); + if (!mISDNport->b_addr[i]) + goto stack_error; + /* deactivate bchannel if already enabled due to crash */ + PDEBUG(DEBUG_BCHANNEL, "deactivating bchannel (index %d) as a precaution.\n", i); + dact.prim = DL_RELEASE | REQUEST; + dact.addr = mISDNport->b_addr[i] | FLG_MSG_DOWN; + dact.dinfo = 0; + dact.len = 0; + mISDN_write(mISDNdevice, &dact, mISDN_HEADER_LEN+dact.len, TIMEOUT_1SEC); + + i++; + } + PDEBUG(DEBUG_ISDN, "- port %d %s (%s) %d b-channels\n", mISDNport->portnum, (mISDNport->ntmode)?"NT-mode":"TE-mode", (mISDNport->ptp)?"Point-To-Point":"Multipoint", mISDNport->b_num); + printlog("opening port %d %s (%s) %d b-channels\n", mISDNport->portnum, (mISDNport->ntmode)?"NT-mode":"TE-mode", (mISDNport->ptp)?"Point-To-Point":"Multipoint", mISDNport->b_num); + return(mISDNport); +} + + +/* + * function to free ALL cards (ports) + */ +void mISDNport_close_all(void) +{ + /* free all ports */ + while(mISDNport_first) + mISDNport_close(mISDNport_first); +} + +/* + * free only one port + */ +void mISDNport_close(struct mISDNport *mISDNport) +{ + struct mISDNport **mISDNportp; + class Port *port; + classs PmISDN *pmISDN; + net_stack_t *nst; + unsigned char buf[32]; + int i; + + /* remove all port instance that are linked to this mISDNport */ + port = port_first; + while(port) + { + if ((port->p_type&PORT_CLASS_MASK) == PORT_CLASS_mISDN) + { + pmISDN = (class PmISDN)*port; + if (pmISDN->p_m_mISDNport) + { + PDEBUG(DEBUG_ISDN, "port %s uses mISDNport %d, destroying it.\n", pnISDN->p_name, mISDNport->portnum); + delete pmISDN; + } + } + port = port->next; + } + + printlog("closing port %d\n", mISDNport->portnum); + + /* free bchannels */ + i = 0; + while(i < mISDNport->b_num) + { + bchannel_deactivate(mISDNport, i); + PDEBUG(DEBUG_BCHANNEL, "freeing %s port %d bchannel (index %d).\n", (mISDNport->ntmode)?"NT":"TE", mISDNport->portnum, i); + if (mISDNport->b_stid[i]) + { + mISDN_clear_stack(mISDNdevice, mISDNport->b_stid[i]); + if (mISDNport->b_addr[i]) + mISDN_write_frame(mISDNdevice, buf, mISDNport->b_addr[i] | FLG_MSG_DOWN, MGR_DELLAYER | REQUEST, 0, 0, NULL, TIMEOUT_1SEC); + } + i++; + } + + /* free ressources of port */ + msg_queue_purge(&mISDNport->downqueue); + + /* free stacks */ + if (mISDNport->ntmode) + { + nst = &mISDNport->nst; + if (nst->manager) /* to see if initialized */ + { + PDEBUG(DEBUG_STACK, "the following messages are ok: one L3 process always exists (broadcast process) and some L2 instances (broadcast + current telephone's instances)\n"); + cleanup_Isdnl3(nst); + cleanup_Isdnl2(nst); + + /* phd */ + msg_queue_purge(&nst->down_queue); + if (nst->phd_down_msg) + free(nst->phd_down_msg); + } + } + + PDEBUG(DEBUG_BCHANNEL, "freeing d-stack.\n"); + if (mISDNport->d_stid) + { +// mISDN_clear_stack(mISDNdevice, mISDNport->d_stid); + if (mISDNport->lower_id) + mISDN_write_frame(mISDNdevice, buf, mISDNport->lower_id, MGR_DELLAYER | REQUEST, 0, 0, NULL, TIMEOUT_1SEC); + } + + /* remove from list */ + mISDNportp = &mISDNport_first; + while(*mISDNportp) + { + if (*mISDNportp == mISDNport) + { + *mISDNportp = (*mISDNportp)->next; + break; + } + mISDNportp = &((*mISDNportp)->next); + } + + if (!(*mISDNportp)) + { + PERROR("software error, mISDNport not in list\n"); + exit(-1); + } + + memset(mISDNport, 0, sizeof(struct mISDNport)); + free(mISDNport); + pmemuse--; + + /* close mISDNdevice, if no port */ + if (mISDNdevice>=0 && mISDNport_first==NULL) + { + /* free entity */ + mISDN_write_frame(mISDNdevice, buf, 0, MGR_DELENTITY | REQUEST, entity, 0, NULL, TIMEOUT_1SEC); + /* close device */ + mISDN_close(mISDNdevice); + mISDNdevice = -1; + PDEBUG(DEBUG_ISDN, "mISDN device closed.\n"); + } +} + + +/* + * global function to show all available isdn ports + */ +void mISDN_port_info(void) +{ + int err; + int i, ii, p; + int useable, nt, pri; + unsigned char buff[1025]; + iframe_t *frm = (iframe_t *)buff; + stack_info_t *stinf; + int device; + + /* open mISDN */ + if ((device = mISDN_open()) < 0) + { + fprintf(stderr, "cannot open mISDN device ret=%d errno=%d (%s) Check for mISDN modules!\nAlso did you create \"/dev/mISDN\"? Do: \"mknod /dev/mISDN c 46 0\"\n", device, errno, strerror(errno)); + exit(-1); + } + + /* get number of stacks */ + i = 1; + ii = mISDN_get_stack_count(device); + printf("\n"); + if (ii <= 0) + { + printf("Found no card. Please be sure to load card drivers.\n"); + } + + /* loop the number of cards and get their info */ + while(i <= ii) + { + err = mISDN_get_stack_info(device, i, buff, sizeof(buff)); + if (err <= 0) + { + fprintf(stderr, "mISDN_get_stack_info() failed: port=%d err=%d\n", i, err); + break; + } + stinf = (stack_info_t *)&frm->data.p; + + nt = pri = 0; + useable = 1; + + /* output the port info */ + printf("Port %2d: ", i); + switch(stinf->pid.protocol[0] & ~ISDN_PID_FEATURE_MASK) + { + case ISDN_PID_L0_TE_S0: + printf("TE-mode BRI S/T interface line (for phone lines)"); +#if 0 + if (stinf->pid.protocol[0] & ISDN_PID_L0_TE_S0_HFC & ISDN_PID_FEATURE_MASK) + printf(" HFC multiport card"); +#endif + break; + case ISDN_PID_L0_NT_S0: + nt = 1; + printf("NT-mode BRI S/T interface port (for phones)"); +#if 0 + if (stinf->pid.protocol[0] & ISDN_PID_L0_NT_S0_HFC & ISDN_PID_FEATURE_MASK) + printf(" HFC multiport card"); +#endif + break; + case ISDN_PID_L0_TE_U: + printf("TE-mode BRI U interface line"); + break; + case ISDN_PID_L0_NT_U: + nt = 1; + printf("NT-mode BRI U interface port"); + break; + case ISDN_PID_L0_TE_UP2: + printf("TE-mode BRI Up2 interface line"); + break; + case ISDN_PID_L0_NT_UP2: + nt = 1; + printf("NT-mode BRI Up2 interface port"); + break; + case ISDN_PID_L0_TE_E1: + pri = 1; + printf("TE-mode PRI E1 interface line (for phone lines)"); +#if 0 + if (stinf->pid.protocol[0] & ISDN_PID_L0_TE_E1_HFC & ISDN_PID_FEATURE_MASK) + printf(" HFC-E1 card"); +#endif + break; + case ISDN_PID_L0_NT_E1: + nt = 1; + pri = 1; + printf("NT-mode PRI E1 interface port (for phones)"); +#if 0 + if (stinf->pid.protocol[0] & ISDN_PID_L0_NT_E1_HFC & ISDN_PID_FEATURE_MASK) + printf(" HFC-E1 card"); +#endif + break; + default: + useable = 0; + printf("unknown type 0x%08x",stinf->pid.protocol[0]); + } + printf("\n"); + + if (nt) + { + if (stinf->pid.protocol[1] == 0) + { + useable = 0; + printf(" -> Missing layer 1 NT-mode protocol.\n"); + } + p = 2; + while(p <= MAX_LAYER_NR) { + if (stinf->pid.protocol[p]) + { + useable = 0; + printf(" -> Layer %d protocol 0x%08x is detected, but not allowed for NT lib.\n", p, stinf->pid.protocol[p]); + } + p++; + } + if (useable) + { + if (pri) + printf(" -> Interface is Point-To-Point (PRI).\n"); + else + printf(" -> Interface can be Poin-To-Point/Multipoint.\n"); + } + } else + { + if (stinf->pid.protocol[1] == 0) + { + useable = 0; + printf(" -> Missing layer 1 protocol.\n"); + } + if (stinf->pid.protocol[2] == 0) + { + useable = 0; + printf(" -> Missing layer 2 protocol.\n"); + } + if (stinf->pid.protocol[2] & ISDN_PID_L2_DF_PTP) + { + printf(" -> Interface is Poin-To-Point.\n"); + } + if (stinf->pid.protocol[3] == 0) + { + useable = 0; + printf(" -> Missing layer 3 protocol.\n"); + } else + { + printf(" -> Protocol: "); + switch(stinf->pid.protocol[3] & ~ISDN_PID_FEATURE_MASK) + { + case ISDN_PID_L3_DSS1USER: + printf("DSS1 (Euro ISDN)"); + break; + + default: + useable = 0; + printf("unknown protocol 0x%08x",stinf->pid.protocol[3]); + } + printf("\n"); + } + p = 4; + while(p <= MAX_LAYER_NR) { + if (stinf->pid.protocol[p]) + { + useable = 0; + printf(" -> Layer %d protocol 0x%08x is detected, but not allowed for TE lib.\n", p, stinf->pid.protocol[p]); + } + p++; + } + } + printf(" - %d B-channels\n", stinf->childcnt); + + if (!useable) + printf(" * Port NOT useable for PBX\n"); + + printf("--------\n"); + + i++; + } + printf("\n"); + + /* close mISDN */ + if ((err = mISDN_close(device))) + { + fprintf(stderr, "mISDN_close() failed: err=%d '%s'\n", err, strerror(err)); + exit(-1); + } +} + + diff --git a/mISDN.h b/mISDN.h new file mode 100644 index 0000000..a82933b --- /dev/null +++ b/mISDN.h @@ -0,0 +1,142 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** mISDN-port header file ** +** ** +\*****************************************************************************/ + + +#define B_STATE_IDLE 0 +#define B_STATE_ACTIVATING 1 +#define B_STATE_ACTIVE 2 +#define B_STATE_DEACTIVATING 3 + + +extern int entity; +extern int mISDNdevice; + +/* mISDN port structure list */ +struct mISDNport { + net_stack_t nst; /* MUST be the first entry, so &nst equals &mISDNlist */ + manager_t mgr; + struct mISDNport *next; + struct interface_port *ifport; /* link to interface_port */ +// int iftype; /* IF_* */ +// int multilink; /* if set, this port will not support callwaiting */ + int portnum; /* port number */ + int ptp; /* if ptp is set, we keep track of l2link */ + int l1link; /* if l1 is available (only works with nt-mode) */ + int l2link; /* if l2 is available (at PTP we take this serious) */ +// time_t l1timeout; /* timout when establishing link */ + time_t l2establish; /* time until establishing after link failure */ + int use; /* counts the number of port that uses this port */ + int ntmode; /* is TRUE if port is nt mode */ + int pri; /* is TRUE if port is a primary rate interface */ + int upper_id; /* id to transfer data down */ + int lower_id; /* id to transfer data up */ + int d_stid; + int b_num; /* number of bchannels */ + int b_reserved; /* number of bchannels reserved or in use */ + class PmISDN *b_port[128]; /* maximum number of ports shall be 128 due to S0 / E1 / special E1 */ + int b_stid[128]; + int b_addr[128]; + int b_state[128]; /* state 0 = IDLE */ + int procids[128]; /* keep track of free ids */ + msg_queue_t downqueue; /* l4->l3 */ +}; +extern mISDNport *mISDNport_first; + +/* + + notes on bchannels: + +if a b-channel is in use, the b_port[channel] is linked to the port using it. +also each used b-channel counts b_inuse. +to assign a bchannel, that is not jet defined due to remote channel assignment, +the b_inuse is also increased to reserve channel + +'use' is the number of port instances using this mISDNport. this counts also +calls with no bchannel (call waiting, call on hold). + +*/ + + +/* mISDN none-object functions */ +void mISDN_port_info(void); +struct mISDNport *mISDNport_open(int port, int ptp); +void mISDNport_close_all(void); +void mISDNport_close(struct mISDNport *mISDNport); +void mISDN_port_reorder(void); +int mISDN_handler(void); +void enc_ie_cause_standalone(unsigned char **ntmode, msg_t *msg, int location, int cause); +void ph_control(unsigned long b_addr, int c1, int c2); +void ph_control_block(unsigned long b_addr, int c1, void *c2, int c2_len); +msg_t *create_l2msg(int prim, int dinfo, int size); +void setup_queue(struct mISDNport *mISDNport, int link); +int stack2manager_nt(void *dat, void *arg); +int stack2manager_te(struct mISDNport *mISDNport, msg_t *msg); + + +/* mISDN port classes */ +class PmISDN : public Port +{ + public: + PmISDN(int type, struct mISDNport *mISDNport, char *portname, struct port_settings *settings, int channel); + ~PmISDN(); + void bchannel_receive(iframe_t *frm); + int handler(void); + int message_epoint(unsigned long epoint_id, int message, union parameter *param); + void message_mISDNsignal(unsigned long epoint_id, int message_id, union parameter *param); + void message_crypt(unsigned long epoint_id, int message_id, union parameter *param); + struct mISDNport *p_m_mISDNport; /* pointer to port */ + int p_m_delay; /* use delay instead of dejitter */ + int p_m_txvol, p_m_rxvol; /* volume shift (0 = no change) */ + int p_m_echo, p_m_conf; /* remote echo, conference number */ + int p_m_tone; /* current kernel space tone */ + int p_m_rxoff; /* rx from driver is disabled */ + int p_m_nodata; /* all parties within a conf are isdn ports, so pure bridging is possible */ + int p_m_txmix; /* mix tx with conference */ + int p_m_txmix_on; /* delay for turning back on after sending a binary message, must be signed */ + int p_m_dtmf; /* dtmf decoding is enabled */ + + int p_m_crypt; /* encryption is enabled */ + int p_m_crypt_msg_loops; /* sending a message */ + int p_m_crypt_msg_len; + unsigned char p_m_crypt_msg[1100]; + int p_m_crypt_msg_current; + unsigned char p_m_crypt_key[128]; + int p_m_crypt_key_len; + int p_m_crypt_listen; + int p_m_crypt_listen_state; + int p_m_crypt_listen_len; + unsigned char p_m_crypt_listen_msg[1100]; + unsigned long p_m_crypt_listen_crc; + void cryptman_listen_bch(unsigned char *p, int l); + + void set_tone(char *dir, char *name); + void set_echotest(int echotest); + + int p_m_portnum; /* used port number (1...n) */ + int p_m_b_index; /* index 0,1 0..29 */ + int p_m_b_channel; /* number 1,2 1..15,17... */ + int p_m_b_exclusive; /* if bchannel is exclusive */ +// int p_m_b_reserved; /* set if channel is reserved */ + int p_m_b_stid; /* current stack id */ + int p_m_b_addr; /* current layer address */ + long long p_m_jittercheck; /* time of audio data */ + long long p_m_jitterdropped; /* number of bytes dropped */ + int p_m_delete; /* true if obj. must del. */ + int p_m_hold; /* if port is on hold */ + unsigned long p_m_timeout; /* timeout of timers */ + time_t p_m_timer; /* start of timer */ + + int alloc_bchannel(int channel, int exclusive); + void free_bchannel(void); +}; + +extern unsigned char mISDN_rand[256]; /* noisy randomizer */ + diff --git a/mail.c b/mail.c new file mode 100644 index 0000000..d4c6441 --- /dev/null +++ b/mail.c @@ -0,0 +1,221 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** use mailer to send mail about message ** +** ** +\*****************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include +#include "main.h" + +static char *months[] = { + "January", "February", "March", "April", "Mai", "June", "July", + "August", "September", "October", "November", "December" +}; + + +/* + * create mail with or without sample + * the process creates forks to keep pbx running + */ +struct mail_args { + char email[128]; + char filename[256]; + int year; + int mon; + int mday; + int hour; + int min; + char callerid[64]; + char callerintern[32]; + char callername[64]; + char terminal[32]; +}; + +static void *mail_child(void *arg) +{ + struct mail_args *args = (struct mail_args *)arg; + char *email = args->email; + char *filename = args->filename; + int year = args->year; + int mon = args->mon; + int mday = args->mday; + int hour = args->hour; + int min = args->min; + char *callerid = args->callerid; + char *callerintern = args->callerintern; + char *callername = args->callername; + char *terminal = args->terminal; + + char command[128]; + char buffer[256]; + char rbuf[54]; + FILE *ph; + int fh; + unsigned char e1, e2, e3; + int i, n, cnt; + unsigned char base64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + struct sched_param schedp; + int ret; + + PDEBUG(DEBUG_EPOINT, "child process started for sending a mail\n"); + + /* lower priority to keep pbx running fluently */ + if (options.schedule > 0) + { + memset(&schedp, 0, sizeof(schedp)); + schedp.sched_priority = 0; + ret = sched_setscheduler(0, SCHED_OTHER, &schedp); + if (ret < 0) + { + PERROR("Scheduling to normal priority failed (errno = %d).\nExitting child process...\n", errno); + goto done; + } + } + + /* open process */ + SPRINT(command, "%s -f%s %s", SENDMAIL, options.email, email); + if ((ph = popen(command, "w")) < 0) + { + PERROR("Cannot send mail using command '%s'\n", command); + goto done; + } + + /* send header */ + fprintf(ph, "MIME-Version: 1.0\n"); + fprintf(ph, "Content-Type: multipart/mixed;\n\tboundary=\"next_part\"\n"); + fprintf(ph, "From: %s <%s>\n", NAME, options.email); + fprintf(ph, "To: %s\n", email); + fprintf(ph, "Subject: Message from '%s' recorded.\n\n", callerid); + + /* send message */ + fprintf(ph, "This is a MIME-encapsulated message\n--next_part\n"); + fprintf(ph, "Content-Type: text/plain; charset=us-ascii\nContent-Transfer-Encoding: 7bit\n\n"); + fprintf(ph, "\nThe voice box of %s has recorded a message:\n\n * extension: %s\n * from: %s", NAME, terminal, callerid); + if (callerintern[0]) + fprintf(ph, " (intern %s)", callerintern); + if (callername[0]) + fprintf(ph, " %s", callername); + fprintf(ph, "\n * date: %s %d %d %d:%02d\n\n", months[mon], mday, year+1900, hour, min); + + /* attach audio file */ + if (filename[0]) + if ((fh = open(filename, O_RDONLY))) + { + while(strchr(filename, '/')) + filename = strchr(filename, '/')+1; + fprintf(ph, "--next_part\n"); + if (strlen(filename) >= 4) + if (!strcasecmp(filename+strlen(filename)-4, ".wav")) + fprintf(ph, "Content-Type: audio/x-wav;\n\tname=\"%s\"\n", filename); + fprintf(ph, "Content-Transfer-Encoding: base64\nContent-Disposition: inline;\n\tfilename=\"%s\"\n\n", filename); + + /* stream from disk and encode */ + while(42) + { + /* read exactly one line */ + cnt = read(fh, rbuf, 54); + if (cnt <= 0) + break; + /* encode */ + n = cnt; + while (n%3) + { + rbuf[n] = 0; + n++; + } + n = n/3; + i = 0; + while(i>6)+(e2<<2)) & 0x3f]; + buffer[(i<<2)+1] = base64[((e2>>4)+(e1<<4)) & 0x3f]; + buffer[i<<2] = base64[e1 >> 2]; + i++; + } + if ((cnt%3) > 0) + buffer[(i<<2)-1] = '='; + if ((cnt%3) == 1) + buffer[(i<<2)-2] = '='; + buffer[(i<<2)] = '\n'; + buffer[(i<<2)+1] = '\0'; + /* write */ + fprintf(ph, "%s", buffer); + } + + fprintf(ph, "\n\n"); + close(fh); + } else + { + SPRINT(buffer, "-Error- Failed to read audio file: '%s'.\n\n", filename); + fprintf(ph, "%s", buffer); + PERROR("%s", buffer); + } + + /* finish mail */ + fprintf(ph, ".\n"); + + /* wait for mail to be sent and close process */ + pclose(ph); + + done: + PDEBUG(DEBUG_EPOINT, "child process done for sending a mail\n"); + + /* exit process */ + memset(args, 0, sizeof(struct mail_args)); + free(args); + amemuse--; + return(NULL); +} + +void send_mail(char *filename, char *callerid, char *callerintern, char *callername, char *vbox_email, int vbox_year, int vbox_mon, int vbox_mday, int vbox_hour, int vbox_min, char *terminal) +{ + struct mail_args *arg; + pthread_t tid; + + arg = (struct mail_args *)calloc(1, sizeof(struct mail_args)); + if (!arg) + { + PERROR("failed to alloc memory.\n"); + return; + } + amemuse++; + + SCPY(arg->email, vbox_email); + SCPY(arg->filename, filename); + arg->year = vbox_year; + arg->mon = vbox_mon; + arg->mday = vbox_mday; + arg->hour = vbox_hour; + arg->min = vbox_min; + SCPY(arg->callerid, callerid); + SCPY(arg->callerintern, callerintern); + SCPY(arg->callername, callername); + SCPY(arg->terminal, terminal); + + if ((pthread_create(&tid, NULL, mail_child, arg)<0)) + { + PERROR("failed to create mail-thread.\n"); + return; + } + + PDEBUG(DEBUG_EPOINT, "EPOINT '%s' send mail: child process created for sending a mail\n", terminal); +} + diff --git a/main.c b/main.c new file mode 100644 index 0000000..12e43b8 --- /dev/null +++ b/main.c @@ -0,0 +1,1037 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** Main function ** +** ** +\*****************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "main.h" + +MESSAGES + +double now_d; +time_t now; +struct tm *now_tm; +struct timeval now_tv; +struct timezone now_tz; +#define GET_NOW() \ + { \ + gettimeofday(&now_tv, &now_tz); \ + now_d = ((double)(now_tv.tv_usec))/1000000 + now_tv.tv_sec; \ + now = now_tv.tv_sec; \ + now_tm = localtime(&now); \ + } +//#define DEBUG_DURATION + +int global_debug = 0; +int quit=0; + +pthread_mutex_t mutexd; // debug output mutex +pthread_mutex_t mutexl; // log output mutex +pthread_mutex_t mutexe; // error output mutex + +#ifdef H323 +PMutex mutex_h323; // mutual exclude threads when using OpenH323 +#endif + +#ifdef VOIP +class PBXMain : public PProcess +{ + PCLASSINFO(PBXMain, PProcess) + public: + PBXMain(void); + ~PBXMain(void); + void Main(); +}; + +PCREATE_PROCESS(PBXMain) + +PBXMain::PBXMain(void) : PProcess("Jolly", "LinuxPBX", 0, 1, AlphaCode, 1) +{ +} + +PBXMain::~PBXMain(void) +{ +} +#endif + +#ifdef H323 +H323_ep *h323_ep = NULL; +#endif +#ifdef OPAL +OpalManager *opal_mgr = NULL; +#endif + + +int memuse = 0; +int mmemuse = 0; +int cmemuse = 0; +int ememuse = 0; +int pmemuse = 0; +int amemuse = 0; +int rmemuse = 0; +int classuse = 0; +int fduse = 0; +int fhuse = 0; + +char *debug_prefix = 0; +int debug_count = 0; +int last_debug = 0; +int debug_newline = 1; +int nooutput = 0; + +static void debug(const char *function, int line, char *prefix, char *buffer) +{ + /* if we have a new debug count, we add a mark */ + if (last_debug != debug_count) + { + last_debug = debug_count; + if (!nooutput) + printf("\033[34m--------------------- %04d.%02d.%02d %02d:%02d:%02d %06d\033[36m\n", now_tm->tm_year+1900, now_tm->tm_mon+1, now_tm->tm_mday, now_tm->tm_hour, now_tm->tm_min, now_tm->tm_sec, debug_count%1000000); + if (options.deb&DEBUG_LOG && global_debug) + dprint(DBGM_MAN, 0, "--------------------- %04d.%02d.%02d %02d:%02d:%02d %06d\n", now_tm->tm_year+1900, now_tm->tm_mon+1, now_tm->tm_mday, now_tm->tm_hour, now_tm->tm_min, now_tm->tm_sec, debug_count%1000000); + } + + if (!nooutput) + { + if (debug_newline) + printf("\033[32m%06d %s\033[37m%s", debug_count%1000000, prefix?prefix:"", prefix?" ":""); + if (function) + printf("(in %s() line %d): %s", function, line, buffer); + else + printf("%s", buffer); + } + + if (options.deb&DEBUG_LOG && global_debug) + { + if (debug_newline) + { + if (function) + dprint(DBGM_MAN, 0, "%s%s(in %s() line %d): %s", prefix?prefix:"", prefix?" ":"", function, line, buffer); + else + dprint(DBGM_MAN, 0, "%s%s: %s", prefix?prefix:"", prefix?" ":"", buffer); + } + } + + debug_newline = 0; + if (buffer[0]) + if (buffer[strlen(buffer)-1] == '\n') + debug_newline = 1; +} + +void printlog(const char *fmt, ...) +{ + char buffer[4096]; + va_list args; + FILE *fp; + + pthread_mutex_lock(&mutexl); + + va_start(args,fmt); + VUNPRINT(buffer,sizeof(buffer)-1,fmt,args); + buffer[sizeof(buffer)-1]=0; + va_end(args); + + if (options.log[0]) + { + if (options.deb & DEBUG_LOG) + debug(NULL, 0, "LOG ->", buffer); + + if ((fp = fopen(options.log, "a"))) + { + fduse++; + fprintf(fp, "%04d.%02d.%02d %02d:%02d:%02d %s", now_tm->tm_year+1900, now_tm->tm_mon+1, now_tm->tm_mday, now_tm->tm_hour, now_tm->tm_min, now_tm->tm_sec, buffer); + fclose(fp); + fduse--; + } + } + + pthread_mutex_unlock(&mutexl); +} + +void _printdebug(const char *function, int line, unsigned long mask, const char *fmt, ...) +{ + char buffer[4096]; + va_list args; + + if (!(options.deb & mask)) + return; + pthread_mutex_lock(&mutexd); + + va_start(args,fmt); + VUNPRINT(buffer,sizeof(buffer)-1,fmt,args); + buffer[sizeof(buffer)-1]=0; + va_end(args); + + debug(function, line, debug_prefix, buffer); + + pthread_mutex_unlock(&mutexd); +} + +void _printerror(const char *function, int line, const char *fmt, ...) +{ + char buffer[4096]; + va_list args; + + pthread_mutex_lock(&mutexe); + + va_start(args,fmt); + VUNPRINT(buffer,sizeof(buffer)-1,fmt,args); + buffer[sizeof(buffer)-1]=0; + va_end(args); + + if (options.deb) + debug(function, line, "ERROR", buffer); + else /* only if we do not debug */ + { + if (function) + fprintf(stderr, "ERROR (in %s() line %d) %s", function, line, buffer); + else + fprintf(stderr, "ERROR %s", buffer); + } + + pthread_mutex_unlock(&mutexe); +} + + +void sighandler(int sigset) +{ + struct sched_param schedp; + + if (sigset == SIGHUP) + return; + if (sigset == SIGPIPE) + return; + if (!quit) + { + quit=1; + /* set scheduler & priority */ + if (options.schedule > 1) + { + memset(&schedp, 0, sizeof(schedp)); + schedp.sched_priority = 0; + sched_setscheduler(0, SCHED_OTHER, &schedp); + } + fprintf(stderr, "PBX: Signal received: %d\n", sigset); + PERROR("Signal received: %d\n", sigset); + } +} + + +/* + * the main + */ +#ifdef VOIP +#define ARGC (args.GetCount()+1) +#define ARGV(a) (args[a-1]) +void PBXMain::Main(void) +{ + PArgList &args = GetArguments(); +#else +#define ARGC (argc) +#define ARGV(a) (argv[a]) +int main(int argc, char *argv[]) +{ +#endif + int ret = -1; + int lockfd = -1; /* file lock */ + struct message *message; + class Port *port; + class Endpoint *epoint; + class Call *call; + int i; + int all_idle; + char prefix_string[64]; + struct sched_param schedp; + char *debug_prefix = "alloc"; + int created_mutexd = 0, created_mutexl = 0, created_mutexe = 0, + created_lock = 0, created_signal = 0, created_debug = 0; +#ifdef DEBUG_DURATION + time_t durationupdate; + double idle_duration, isdn_duration, port_duration, epoint_duration, call_duration, message_duration, admin_duration; + double start_d; +#endif + int idletime = 0, idlecheck = 0; + char debug_log[128]; + + /* current time */ + GET_NOW(); + + /* show version */ +#ifdef OPAL + printf("\n** %s Version %s (with OPAL)\n\n", NAME, VERSION_STRING); +#else + #ifdef H323 + printf("\n** %s Version %s (with H323)\n\n", NAME, VERSION_STRING); + #else + printf("\n** %s Version %s\n\n", NAME, VERSION_STRING); + #endif +#endif + + /* show options */ + if (ARGC <= 1) + { + usage: + printf("\n"); + printf("Usage: pbx (query | start | fork | rules | route)\n"); + printf("query = Show available isdn ports.\n"); + printf("start = Run pbx normally, abort with CTRL+C.\n"); + printf("fork = Do daemon fork and run as background process.\n"); + printf("interface = Get help of available interface syntax.\n"); + printf("rules = Get help of available routing rule syntax.\n"); + printf("rules [action] = Get individual help for given action.\n"); +// printf("route = Show current routing as it is parsed.\n"); + printf("\n"); + ret = 0; + goto free; + } + + /* check if we have a jitter limit that makes sense */ + if (ISDN_JITTERLIMIT < 256) + { + fprintf(stderr, "The ISDN_JITTERLIMIT must be at least 256 samples.\n"); + goto free; + } + + /* init crc */ + crc_init(); + + /* check for root (real or effective) */ + if (getuid() && geteuid()) + { + fprintf(stderr, "Please run %s as super-user.\n", NAME); + goto free; + } + + /* the mutex init */ + if (pthread_mutex_init(&mutexd, NULL)) + { + fprintf(stderr, "cannot create 'PDEBUG' mutex\n"); + goto free; + } + created_mutexd = 1; + if (pthread_mutex_init(&mutexl, NULL)) + { + fprintf(stderr, "cannot create 'printlog' mutex\n"); + goto free; + } + created_mutexl = 1; + if (pthread_mutex_init(&mutexe, NULL)) + { + fprintf(stderr, "cannot create 'PERROR' mutex\n"); + goto free; + } + created_mutexe = 1; + + /* show interface */ + if (!(strcasecmp(ARGV(1),"interface"))) + { + doc_interface(); + ret = 0; + goto free; + } + + /* show rules */ + if (!(strcasecmp(ARGV(1),"rules"))) + { + if (ARGC <= 2) + doc_rules(NULL); + else + doc_rules(ARGV(2)); + ret = 0; + goto free; + } + + /* query available isdn ports */ + if (!(strcasecmp(ARGV(1),"query"))) + { + mISDN_port_info(); + ret = 0; + goto free; + } + + /* read options */ + if (read_options() == 0) + goto free; + + /* initialize stuff of the NT lib */ + if (options.deb & DEBUG_STACK) + { + global_debug = 0xffffffff & ~DBGM_MSG; +// global_debug = DBGM_L3DATA; + } else + global_debug = DBGM_MAN; + SPRINT(debug_log, "%s/debug.log", INSTALL_DATA); + if (options.deb & DEBUG_LOG) + debug_init(global_debug, debug_log, debug_log, debug_log); + else + debug_init(global_debug, NULL, NULL, NULL); + created_debug = 1; + + msg_init(); + + /* read ruleset(s) */ + if (!(ruleset_first = ruleset_parse())) + goto free; + + /* set pointer to main ruleset */ + ruleset_main = getrulesetbyname("main"); + if (!ruleset_main) + { + fprintf(stderr, "\n***\n -> Missing 'main' ruleset, causing ALL calls to be disconnected.\n***\n\n"); + PDEBUG(DEBUG_LOG, "Missing 'main' ruleset, causing ALL calls to be disconnected.\n"); + sleep(2); + } + +#if 0 + /* query available isdn ports */ + if (!(strcasecmp(ARGV(1),"route"))) + { + ruleset_debug(ruleset_first); + ret = 0; + goto free; + } +#endif + + /* do fork in special cases */ + if (!(strcasecmp(ARGV(1),"fork"))) + { + pid_t pid; + + /* do daemon fork */ + pid = fork(); + + if (pid < 0) + { + fprintf(stderr, "Cannot fork!\n"); + goto free; + } + if (pid != 0) + { + exit(0); + } + usleep(200000); + printf("\n"); + + /* do second fork */ + pid = fork(); + + if (pid < 0) + { + fprintf(stderr, "Cannot fork!\n"); + goto free; + } + if (pid != 0) + { + printf("PBX: Starting daemon.\n"); + exit(0); + } + nooutput = 1; + } else + /* if not start */ + if (!!strcasecmp(ARGV(1),"start")) + { + goto usage; + } + + /* create lock and lock! */ + if ((lockfd = open("/var/run/pbx.lock", O_CREAT, 0)) < 0) + { + fprintf(stderr, "Cannot create lock file: /var/run/pbx.lock\n"); + goto free; + } + if (flock(lockfd, LOCK_EX|LOCK_NB) < 0) + { + if (errno == EWOULDBLOCK) + fprintf(stderr, "PBX: Another PBX process is running. Please kill the other one.\n"); + else fprintf(stderr, "Locking process failed: errno=%d\n", errno); + goto free; + } + created_lock = 1; + + /* initialize admin socket */ + if (admin_init()) + { + fprintf(stderr, "Unable to initialize admin socket.\n"); + goto free; + } + + /* generate alaw / ulaw tables */ + generate_tables(options.law); + + /* load tones (if requested) */ + if (fetch_tones() == 0) + { + fprintf(stderr, "Unable to fetch tones into memory.\n"); + goto free; + } + +#ifdef OPAL + /* create OPAL manager */ + opal_mgr = new PBXManager; + if (!opal_mgr) + { + fprintf(stderr, "Unable to create OPAL manager.\n"); + goto free; + } + if (opal_mgr->Initialise()) + { + todo thread kreieren... + opal_mgr->Main(); + } + +#endif + + +#ifdef H323 + // create h323 endpoint and initialize + h323_ep = new H323_ep(); + if (!h323_ep) + { + fprintf(stderr, "Unable to create h323 endpoint.\n"); + goto free; + } + if (h323_ep->Init() == FALSE) + { + fprintf(stderr, "Unable to init h323 endpoint.\n"); + goto free; + } + +#endif + + /* read interfaces and open ports */ + if (!read_interfaces()) + { + PERROR_RUNTIME("No interfaces specified or failed to parse interface.conf.\n"); + fprintf(stderr, "No interfaces specified or failed to parse interface.conf.\n"); + goto free; + } + relink_interfaces(); + interface_first = interface_newlist; + free_interfaces(interface_newlist); + interface_newlist = NULL; + + /* locking memory paging */ + i = 0; + while(i < 10) + { + if (mlockall(MCL_CURRENT | MCL_FUTURE) >= 0) + break; + usleep(200000); + i++; + } + if (i == 10) + { + switch(errno) + { + case ENOMEM: + fprintf(stderr, "Not enough memory to lock paging, exitting...\n"); + break; + case EPERM: + fprintf(stderr, "No permission to lock paging, exitting...\n"); + break; + case EFAULT: + fprintf(stderr, "'Bad address' while locking paging, exitting...\n"); + break; + default: + fprintf(stderr, "Unknown error %d while locking paging, exitting...\n", errno); + } + goto free; + } + + /* set real time scheduler & priority */ + if (options.schedule > 1) + { + memset(&schedp, 0, sizeof(schedp)); + schedp.sched_priority = options.schedule; + ret = sched_setscheduler(0, SCHED_RR, &schedp); + if (ret < 0) + { + PERROR("Scheduling failed with given priority %d (errno = %d).\nCheck options.conf 'schedule', exitting...\n", options.schedule, errno); + goto free; + } + } + + /* signal handlers */ + signal(SIGINT,sighandler); + signal(SIGHUP,sighandler); + signal(SIGTERM,sighandler); + signal(SIGPIPE,sighandler); + created_signal = 1; + + /*** main loop ***/ + printf("%s %s started, waiting for calls...\n", NAME, VERSION_STRING); + printlog("%s %s started, waiting for calls...\n", NAME, VERSION_STRING); + GET_NOW(); +#ifdef DEBUG_DURATION + start_d = now_d; + durationupdate = now; + idle_duration = isdn_duration = port_duration = epoint_duration = call_duration = message_duration = admin_duration = 0; +#endif + quit = 0; + while(!quit) + { + /* all loops must be counted from the beginning since nodes might get freed during handler */ +#ifdef H323 + mutex_h323.Wait(); + debug_prefix = 0; +#endif + all_idle = 1; + + /* handle mISDN messages from kernel */ + debug_prefix = "ISDN"; + if (mISDN_handler()) + all_idle = 0; +#ifdef DEBUG_DURATION + GET_NOW(); + isdn_duration += (now_d - start_d); + start_d = now_d; +#endif +BUDETECT + + /* loop through all port ports and call their handler */ + port_again: + port = port_first; + while(port) + { + debug_prefix = port->p_name; + debug_count++; + ret = port->handler(); + if (ret) + all_idle = 0; + if (ret < 0) /* port has been destroyed */ + goto port_again; + port = port->next; + } +#ifdef DEBUG_DURATION + GET_NOW(); + port_duration += (now_d - start_d); + start_d = now_d; +#endif + + /* loop through all epoint and call their handler */ + epoint_again: + epoint = epoint_first; + while(epoint) + { + debug_prefix = prefix_string; + SPRINT(prefix_string, "ep%ld", epoint->ep_serial); + debug_count++; + ret = epoint->handler(); + if (ret) + all_idle = 0; + if (ret < 0) /* epoint has been destroyed */ + goto epoint_again; + epoint = epoint->next; + } +#ifdef DEBUG_DURATION + GET_NOW(); + epoint_duration += (now_d - start_d); + start_d = now_d; +#endif + + /* loop through all calls and call their handler */ + call_again: + call = call_first; + while(call) + { + debug_prefix = "call"; + debug_count++; + ret = call->handler(); + if (ret) + all_idle = 0; + if (ret < 0) /* call has been destroyed */ + goto call_again; + call = call->next; + } +#ifdef DEBUG_DURATION + GET_NOW(); + call_duration += (now_d - start_d); + start_d = now_d; +#endif + + debug_prefix = 0; + + /* process any message */ + debug_count++; + debug_prefix = "message"; + while ((message = message_get())) + { + all_idle = 0; + switch(message->flow) + { + case PORT_TO_EPOINT: + debug_prefix = "msg port->epoint"; + epoint = find_epoint_id(message->id_to); + if (epoint) + { + if (epoint->ep_app) + { + epoint->ep_app->ea_message_port(message->id_from, message->type, &message->param); + } else + { + PDEBUG(DEBUG_MSG, "Warning: message %s from port %d to endpoint %d. endpoint doesn't have an application.\n", messages_txt[message->type], message->id_from, message->id_to); + } + } else + { + PDEBUG(DEBUG_MSG, "Warning: message %s from port %d to endpoint %d. endpoint doesn't exist anymore.\n", messages_txt[message->type], message->id_from, message->id_to); + } + break; + + case EPOINT_TO_CALL: + debug_prefix = "msg epoint->call"; + call = find_call_id(message->id_to); + if (call) + { + call->message_epoint(message->id_from, message->type, &message->param); + } else + { + PDEBUG(DEBUG_MSG, "Warning: message %s from endpoint %d to call %d. call doesn't exist anymore\n", messages_txt[message->type], message->id_from, message->id_to); + } + break; + + case CALL_TO_EPOINT: + debug_prefix = "msg call->epoint"; + epoint = find_epoint_id(message->id_to); + if (epoint) + { + if (epoint->ep_app) + { + epoint->ep_app->ea_message_call(message->id_from, message->type, &message->param); + } else + { + PDEBUG(DEBUG_MSG, "Warning: message %s from call %d to endpoint %d. endpoint doesn't have an application.\n", messages_txt[message->type], message->id_from, message->id_to); + } + } else + { + PDEBUG(DEBUG_MSG, "Warning: message %s from call %d to endpoint %d. endpoint doesn't exist anymore.\n", messages_txt[message->type], message->id_from, message->id_to); + } + break; + + case EPOINT_TO_PORT: + debug_prefix = "msg epoint->port"; + port = find_port_id(message->id_to); + if (port) + { + port->message_epoint(message->id_from, message->type, &message->param); +BUDETECT + } else + { + PDEBUG(DEBUG_MSG, "Warning: message %s from endpoint %d to port %d. port doesn't exist anymore\n", messages_txt[message->type], message->id_from, message->id_to); + } + break; + + default: + PERROR("Message flow %d unknown.\n", message->flow); + } + message_free(message); + debug_count++; + debug_prefix = "message"; + } +#ifdef DEBUG_DURATION + GET_NOW(); + message_duration += (now_d - start_d); + start_d = now_d; +#endif +BUDETECT + + /* handle socket */ + if (admin_handle()) + all_idle = 0; +#ifdef DEBUG_DURATION + GET_NOW(); + admin_duration += (now_d - start_d); + start_d = now_d; +#endif +BUDETECT + +#if 0 + /* check for child to exit (eliminate zombies) */ + if (waitpid(-1, NULL, WNOHANG) > 0) + { + PDEBUG(DEBUG_EPOINT, "a child process (created by endpoint) has exitted.\n"); + all_idle = 0; + } +#endif + + /* do idle checking */ + if (idlecheck != now) + { + PDEBUG(DEBUG_IDLETIME, "Idle time : %d%%\n", idletime/10000); + idletime = 0; + idlecheck = now; + } +#ifdef DEBUG_DURATION + GET_NOW(); + idle_duration += (now_d - start_d); + start_d = now_d; + if (durationupdate != now) + { + durationupdate = now; + printf("Idle:%3d ISDN:%3d Port:%3d Epoint:%3d Call:%3d Message:%3d Admin:%3d\n", + (int)(idle_duration*100), + (int)(isdn_duration*100), + (int)(port_duration*100), + (int)(epoint_duration*100), + (int)(call_duration*100), + (int)(message_duration*100), + (int)(admin_duration*100)); + idle_duration = isdn_duration = port_duration = epoint_duration = call_duration = message_duration = admin_duration = 0; + } +#else + GET_NOW(); +#endif + +#ifdef H323 + // NOTE: be carefull with this, don't do anything after unlocking except sleeping and locking! + debug_prefix = "h323"; + mutex_h323.Signal(); +#endif + + /* did we do nothing? so we wait to give time to other processes */ + if (all_idle) + { + usleep(4000); /* wait 32 samples */ + idletime += 4000; + } + } + printlog("PBX terminated\n"); + ret=0; + + /* free all */ +free: + + + /* set scheduler & priority + * we must remove realtimeshed, because h323 may lock during exit + */ + if (options.schedule > 1) + { + memset(&schedp, 0, sizeof(schedp)); + schedp.sched_priority = 0; + sched_setscheduler(0, SCHED_OTHER, &schedp); + } + /* reset signals */ + if (created_signal) + { + signal(SIGINT,SIG_DFL); + signal(SIGHUP,SIG_DFL); + signal(SIGTERM,SIG_DFL); + signal(SIGPIPE,SIG_DFL); + } + + /* destroy objects */ +#ifdef H323 + mutex_h323.Wait(); +#endif + debug_prefix = "free"; + + while(port_first) + { + debug_count++; + delete port_first; + } + while(epoint_first) + { + debug_count++; + delete epoint_first; + } + epoint_first = NULL; + debug_count++; + call_free(); + + /* free interfaces */ + if (interface_first) + free_interfaces(interface_first); + interface_first = NULL; + + /* close isdn ports */ + mISDNport_close_all(); + + /* flush messages */ + debug_count++; + i = 0; + while ((message = message_get())) + { + i++; + message_free(message); + } + if (i) + { + PDEBUG(DEBUG_MSG, "freed %d pending messages\n", i); + } + +#ifdef H323 + mutex_h323.Signal(); +#endif + +#ifdef OPAL + /* destroy manager */ + if (opal_mgr) + { + todo kill an den main-thread von opal und warten... + if (options.deb & DEBUG_OPAL) + printf("->now deleting opal manager\n"); + delete opal_mgr; + if (options.deb & DEBUG_OPAL) + printf("->opal manager deleted\n"); + } + +#endif + +#ifdef H323 + /* destroy endpoint */ + if (h323_ep) + { + if (options.deb & DEBUG_H323) + printf("->now deleting endpoint\n"); + delete h323_ep; + if (options.deb & DEBUG_H323) + printf("->endpoint deleted\n"); + } + +#endif + + /* free tones */ + if (toneset_first) + free_tones(); + + /* free admin socket */ + admin_cleanup(); + + /* close lock */ + if (created_lock) + flock(lockfd, LOCK_UN); + if (lockfd >= 0) + close(lockfd); + + /* free rulesets */ + if (ruleset_first) + ruleset_free(ruleset_first); + ruleset_first = NULL; + + /* free mutex */ + if (created_mutexe) + if (pthread_mutex_destroy(&mutexe)) + fprintf(stderr, "cannot destroy 'PERROR' mutex\n"); + if (created_mutexl) + if (pthread_mutex_destroy(&mutexl)) + fprintf(stderr, "cannot destroy 'printlog' mutex\n"); + if (created_mutexd) + if (pthread_mutex_destroy(&mutexd)) + fprintf(stderr, "cannot destroy 'PDEBUG' mutex\n"); + + /* close debug */ + if (created_debug) + debug_close(); + global_debug = 0; + + /* display memory leak */ +#define MEMCHECK(a, b) \ + if (b) \ + { \ + printf("\n******************************\n\007"); \ + printf("\nERROR: %d %s\n", b, a); \ + printf("\n******************************\n"); \ + ret = -1; \ + } + MEMCHECK("",memuse) + MEMCHECK("memory block(s) left (port.cpp)",pmemuse) + MEMCHECK("memory block(s) left (epoint.cpp)",ememuse) + MEMCHECK("memory block(s) left (call.cpp)",cmemuse) + MEMCHECK("memory block(s) left (message.c)",mmemuse) + MEMCHECK("memory block(s) left (route.c)",rmemuse) + MEMCHECK("memory block(s) left (args)",amemuse) + MEMCHECK("class(es) left",classuse) + MEMCHECK("file descriptor(s) left",fduse) + MEMCHECK("file handler(s) left",fhuse) + + /* take me out */ + if (ret) + printf("PBX: Exit (code %d)\n", ret); +#ifdef VOIP + return; +#else + return(ret); +#endif +} + + +#ifdef BUDETECT_DEF +/* special debug function to detect buffer overflow + */ +int budetect_stop = 0; +void budetect(const char *file, int line, char *function) +{ + if (budetect_stop) + return; + /* modify this function to detect race-bugs */ +#warning DID YOU MODIFY THIS FUNCTION TO DETECT THE BUFFER OVERFLOW BUG? + class Port *port; + class PmISDN *pmisdn; + struct mISDNport *mISDNport = mISDNport_first; + int i, ii; + + while(mISDNport) + { + i = 0; + ii = mISDNport->b_num; + while(i < ii) + { + if (mISDNport->b_port[i]) + { + port = port_first; + while(port) + { + if ((port->p_type&PORT_CLASS_MASK) == PORT_CLASS_ISDN) + { + pmisdn = (class PmISDN *)port; + if (pmisdn->p_isdn_crypt_listen) + { + PERROR_RUNTIME("************************************************\n"); + PERROR_RUNTIME("** BUG detected in %s, line %d, function %s\n", file, line, function); + PERROR_RUNTIME("** p_isdn_crypt_listen = %d\n", pmisdn->p_isdn_crypt_listen); + PERROR_RUNTIME("************************************************\n"); + budetect_stop = 1; + } + } + if (port == mISDNport->b_port[i]) + break; + port = port->next; + if (!port) + { + PERROR_RUNTIME("************************************************\n"); + PERROR_RUNTIME("** BUG detected in %s, line %d, function %s\n", file, line, function); + PERROR_RUNTIME("** b_port not in list.\n"); + PERROR_RUNTIME("************************************************\n"); + budetect_stop = 1; + } + } + } + i++; + } + mISDNport = mISDNport->next; + } + +} +#endif + diff --git a/main.h b/main.h new file mode 100644 index 0000000..d09239e --- /dev/null +++ b/main.h @@ -0,0 +1,202 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** Header file for defining fixed values for the current version ** +** ** +\*****************************************************************************/ + +#define NAME "PBX4Linux" + +#define DEFAULT_ENDPOINT_APP EndpointAppPBX + +#define VERSION_STRING "3.6 (Januar 2006)" + +extern int memuse; +extern int mmemuse; +extern int cmemuse; +extern int ememuse; +extern int pmemuse; +extern int amemuse; +extern int rmemuse; +extern int classuse; +extern int fduse; +extern int fhuse; + +#define PDEBUG(mask, fmt, arg...) _printdebug(__FUNCTION__, __LINE__, mask, fmt, ## arg) +#define PERROR(fmt, arg...) _printerror(__FUNCTION__, __LINE__, fmt, ## arg) +#define PDEBUG_RUNTIME(mask, fmt, arg...) _printdebug(NULL, 0, mask, fmt, ## arg) +#define PERROR_RUNTIME(fmt, arg...) _printerror(NULL, 0, fmt, ## arg) +void _printdebug(const char *function, int line, unsigned long mask, const char *fmt, ...); +void printlog(const char *fmt, ...); +void _printerror(const char *function, int line, const char *fmt, ...); + +#define DEBUG_CONFIG 0x0001 +#define DEBUG_MSG 0x0002 +#define DEBUG_STACK 0x0004 +#define DEBUG_BCHANNEL 0x0008 +#define DEBUG_PORT 0x0100 +#define DEBUG_ISDN 0x0110 +#define DEBUG_OPAL 0x0120 +#define DEBUG_H323 0x0130 +//#define DEBUG_KNOCK 0x0140 +#define DEBUG_VBOX 0x0180 +#define DEBUG_EPOINT 0x0200 +#define DEBUG_CALL 0x0400 +#define DEBUG_VERSATEL 0x0800 +#define DEBUG_CRYPT 0x1000 +#define DEBUG_ROUTE 0x2000 +#define DEBUG_IDLETIME 0x4000 +#define DEBUG_LOG 0x7fff + +// check any faulty malloc +#define MALLOC_CHECK_ 1 + +/* + * one of the bits must be enabled in order to write log files + */ +#define DEBUG_LOG 0x7fff + +/* audio buffer for mixer and recording. + * all partys within a call (most time two endpoints) write audio data to the buffer. this is used because + * the buffer experience jitter. if the buffer is too small, jitter will cause drops and gaps. + * if the buffer is too large, the delay is large. 768 is a good value to start with. + */ +#ifdef VOIP +#warning to be removed soon +#endif +#define PORT_BUFFER 768 + +/* keep this 0 for minimum delay */ +#ifdef VOIP +#warning to be removed soon +#endif +#define ISDN_PRELOAD 0 + +/* the jitterlimit specifies the number of samples received too fast, before + * it recognizes a stalling process. + * but should NOT be less 256. + */ +#ifdef VOIP +#warning to be removed soon +#endif +#define ISDN_JITTERLIMIT 512 /* maximum samples received before dropping */ + +/* give sendmail program. if not inside $PATH, give absolute path here (e.g. "/usr/sbin/sendmail") + */ +#define SENDMAIL "sendmail" + +/* maximum number of redial/powerdial and reply numbers to remember + */ +#define MAX_REMEMBER 50 + +/* leave it above 1024, because lower values can be unsafe, higher valuse cause + * data larger than 512 bytes of hex strings. + */ +#define RSA_BITS 1536 + +/* 'goto' or 'menu' actions may cause infinite loops. they will be prevented by this limit. + * Also other recursions, like redialing the 'redial' action must be prevented. + * increase it ONLY IF you have a deeper tree of rule sets, than the value given here. + */ +#define RULE_NESTING 10 + +/* special debugging for buffer overflow bugs + * note: whenever a buffer gets strange values, the budetect function must + * be modified to detect the change of these values. whenever it is detected, + * an error message is given at budetect function. + */ +//#define BUDETECT_DEF + +#ifdef BUDETECT_DEF + #define BUDETECT budetect(__FILE__, __LINE__, __FUNCTION__); + void budetect(const char *file, int line, char *function); +#else + #define BUDETECT ; +#endif + +#ifdef H323 +#define VOIP +#ifdef OPAL +#error It is not allowed to use H323 and OPAL. Please disable H323, because it is included in OPAL. +#endif +#endif +#ifdef OPAL +#define VOIP +#endif + +#ifdef H323INCLUDE +#define NO_VIDEO_CAPTURE +//#include +//#include +#include +#include +#include +#include +#include +#include +#endif + +#include +#include +#include +#include +#include +#include +//#include +#ifdef __cplusplus +extern "C" { +#endif +#include +#include +#ifdef __cplusplus +} +#endif +#include "save.h" +#include "options.h" +#include "interface.h" +#include "h323conf.h" +#include "extension.h" +#include "message.h" +#include "endpoint.h" +#include "endpointapp.h" +#include "apppbx.h" +#include "route.h" +#include "port.h" +#include "mISDN.h" +#include "dss1.h" +#ifdef H323 +#include "h323.h" +#endif +#ifdef OPAL +#include "opal.h" +#endif +#include "vbox.h" +#include "call.h" +#include "callpbx.h" +#include "callchan.h" +#include "cause.h" +#include "alawulaw.h" +#include "tones.h" +#include "crypt.h" +#include "admin_server.h" + +extern double now_d; +extern time_t now; +extern struct tm *now_tm; +extern struct timeval now_tv; +extern struct timezone now_tz; + + +#ifdef H323INCLUDE +#include "h323_ep.h" +#include "h323_con.h" +#include "h323_chan.h" + +extern PMutex mutex_h323; // mutual exclude for synchroniszing threads +extern H323_ep *h323_ep; +#endif + diff --git a/message.c b/message.c new file mode 100644 index 0000000..97c032c --- /dev/null +++ b/message.c @@ -0,0 +1,128 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** message handling ** +** ** +\*****************************************************************************/ + +#include +#include +#include +#include "main.h" + +MESSAGES + +struct message *message_first = NULL; +struct message **messagepointer_end = &message_first; + +//#ifdef H323 +//PMutex mutex_message; +//#endif + +/* creates a new message with the given attributes. the message must be filled then. after filling, the message_put must be called */ +struct message *message_create(int id_from, int id_to, int flow, int type) +{ + struct message *message; + int i = 0; + + while(i < 10) + { + message = (struct message *)calloc(1, sizeof(struct message)); + if (message) + break; + + if (!i) + PERROR("no mem for message, retrying...\n"); + i++; + usleep(300000); + } + if (!message) + { + PERROR("***Fatal error: no mem for message!!! exitting.\n"); + exit(-1); + } + mmemuse++; + + memset(message, 0, sizeof(struct message)); + + message->id_from = id_from; + message->id_to = id_to; + message->flow = flow; + message->type = type; + + return(message); +} + +/* attaches a message to the end of the message chain */ +void message_put(struct message *message) +{ + /* the mutex prevents from creating two messages at a time (h323 thread and main thread). */ +//#ifdef H323 +// mutex_message.Wait(); +//#endif + + if (message->id_to == 0) + { + PDEBUG(DEBUG_MSG, "message %s not written, because destination is 0.\n", messages_txt[message->type]); + message_free(message); + return; + } + + if ((options.deb&DEBUG_MSG) && message->type != MESSAGE_DATA) + PDEBUG(DEBUG_MSG, "message %s written from %ld to %ld (memory %x)\n", messages_txt[message->type], message->id_from, message->id_to, message); + + *messagepointer_end = message; + messagepointer_end = &(message->next); + +//#ifdef H323 +// mutex_message.Signal(); +//#endif +} + + +/* detaches the first messages from the message chain */ +struct message *message_get(void) +{ + struct message *message; + + /* the mutex prevents from getting a message while creating a messages at a time (h323 thread and main thread). */ +//#ifdef H323 +// mutex_message.Wait(); +//#endif + + if (!message_first) + { +//#ifdef H323 +// mutex_message.Signal(); +//#endif + return(0); + } + + message = message_first; + message_first = message->next; + if (!message_first) + messagepointer_end = &message_first; + +//#ifdef H323 +// mutex_message.Signal(); +//#endif + + if ((options.deb&DEBUG_MSG) && message->type != MESSAGE_DATA) + PDEBUG(DEBUG_MSG, "message %s reading from %ld to %ld (memory %x)\n", messages_txt[message->type], message->id_from, message->id_to, message); + + return(message); +} + +/* free a message */ +void message_free(struct message *message) +{ + memset(message, 0, sizeof(struct message)); + free(message); + mmemuse--; +} + + diff --git a/message.h b/message.h new file mode 100644 index 0000000..0a56b98 --- /dev/null +++ b/message.h @@ -0,0 +1,398 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** message types and parameters ** +** ** +\*****************************************************************************/ + +enum { /* interface types */ + INFO_ITYPE_ISDN, + INFO_ITYPE_ISDN_EXTENSION, /* call from internal extension */ + INFO_ITYPE_CHAN, + INFO_ITYPE_VBOX, +}; + +enum { /* number types */ + INFO_NTYPE_UNKNOWN, + INFO_NTYPE_SUBSCRIBER, + INFO_NTYPE_NATIONAL, + INFO_NTYPE_INTERNATIONAL, +}; + +enum { /* number presentation */ + INFO_PRESENT_NULL, + INFO_PRESENT_ALLOWED, + INFO_PRESENT_RESTRICTED, + INFO_PRESENT_NOTAVAIL, +}; + +enum { /* number presentation */ + INFO_SCREEN_USER, /* user provided */ + INFO_SCREEN_NETWORK, /* network provided */ +}; + +enum { /* redirection reason */ + INFO_REDIR_UNKNOWN, + INFO_REDIR_BUSY, + INFO_REDIR_NORESPONSE, + INFO_REDIR_UNCONDITIONAL, + INFO_REDIR_OUTOFORDER, + INFO_REDIR_CALLDEFLECT, +}; + +#define INFO_NOTIFY_NONE 0x00 +#define INFO_NOTIFY_USER_SUSPENDED 0x80 +#define INFO_NOTIFY_USER_RESUMED 0x81 +#define INFO_NOTIFY_BEARER_SERVICE_CHANGED 0x82 +#define INFO_NOTIFY_CALL_COMPLETION_DELAY 0x83 +#define INFO_NOTIFY_CONFERENCE_ESTABLISHED 0xc2 +#define INFO_NOTIFY_CONFERENCE_DISCONNECTED 0xc3 +#define INFO_NOTIFY_OTHER_PARTY_ADDED 0xc4 +#define INFO_NOTIFY_ISOLATED 0xc5 +#define INFO_NOTIFY_REATTACHED 0xc6 +#define INFO_NOTIFY_OTHER_PARTY_ISOLATED 0xc7 +#define INFO_NOTIFY_OTHER_PARTY_REATTACHED 0xc8 +#define INFO_NOTIFY_OTHER_PARTY_SPLIT 0xc9 +#define INFO_NOTIFY_OTHER_PARTY_DISCONNECTED 0xca +#define INFO_NOTIFY_CONFERENCE_FLOATING 0xcb +#define INFO_NOTIFY_CONFERENCE_DISCONNECTED_P 0xcc /* preemted */ +#define INFO_NOTIFY_CONFERENCE_FLOATING_S_U_P 0xcf /* served user preemted */ +#define INFO_NOTIFY_CALL_IS_A_WAITING_CALL 0xe0 +#define INFO_NOTIFY_DIVERSION_ACTIVATED 0xe8 +#define INFO_NOTIFY_RESERVED_CT_1 0xe9 +#define INFO_NOTIFY_RESERVED_CT_2 0xea +#define INFO_NOTIFY_REVERSE_CHARGING 0xee +#define INFO_NOTIFY_REMOTE_HOLD 0xf9 +#define INFO_NOTIFY_REMOTE_RETRIEVAL 0xfa +#define INFO_NOTIFY_CALL_IS_DIVERTING 0xfb + +enum { /* diversion types */ + INFO_DIVERSION_CFU, + INFO_DIVERSION_CFNR, + INFO_DIVERSION_CFB, + INFO_DIVERSION_CFP, +}; + +/* bearer capabilities */ +#define INFO_BC_SPEECH 0x00 +#define INFO_BC_DATAUNRESTRICTED 0x08 +#define INFO_BC_DATARESTRICTED 0x09 +#define INFO_BC_AUDIO 0x10 +#define INFO_BC_DATAUNRESTRICTED_TONES 0x11 +#define INFO_BC_VIDEO 0x18 + +/* bearer mode */ +#define INFO_BMODE_CIRCUIT 0 +#define INFO_BMODE_PACKET 2 + +/* bearer user l1 */ +#define INFO_INFO1_NONE 0x00 +#define INFO_INFO1_V110 0x81 +#define INFO_INFO1_ULAW 0x82 +#define INFO_INFO1_ALAW 0x83 +#define INFO_INFO1_G721 0x84 +#define INFO_INFO1_H221H242 0x85 +#define INFO_INFO1_NONCCITT 0x87 +#define INFO_INFO1_V120 0x88 +#define INFO_INFO1_X31HDLC 0x89 + +/* hlc */ +#define INFO_HLC_NONE 0x00 +#define INFO_HLC_TELEPHONY 0x81 +#define INFO_HLC_FAXG2G3 0x84 +#define INFO_HLC_FAXG4 0xa1 +#define INFO_HLC_TELETEX1 0xa4 +#define INFO_HLC_TELETEX2 0xa8 +#define INFO_HLC_TELETEX3 0xb1 +#define INFO_HLC_VIDEOTEX1 0xb2 +#define INFO_HLC_VIDEOTEX2 0xb3 +#define INFO_HLC_TELEX 0xb5 +#define INFO_HLC_MHS 0xb8 +#define INFO_HLC_OSI 0xc1 +#define INFO_HLC_MAINTENANCE 0xde +#define INFO_HLC_MANAGEMENT 0xdf +#define INFO_HLC_AUDIOVISUAL 0xe0 + +enum { /* isdnsignal */ + mISDNSIGNAL_VOLUME, + mISDNSIGNAL_CONF, + mISDNSIGNAL_NODATA, /* no data required */ + mISDNSIGNAL_ECHO, +}; + +/* call-info structure CALLER */ +struct caller_info { + char id[32]; /* id of caller (user number) */ + char voip[64]; /* URI of voip (or gateway) */ + char intern[32]; /* internal id */ + char name[16]; + int isdn_port; /* internal/external port (if call is isdn) */ + char interface[32]; /* interface name the call was from */ + int itype; /* type of interface */ + int ntype; /* type of number */ + int present; /* presentation */ + int screen; /* who provided the number */ + char display[84]; /* display information */ +}; + +/* call-info structure DIALING */ +struct dialing_info { + char number[256]; /* number dialing (so far) */ + char interfaces[128]; /* interfaces for extenal calls */ + int itype; /* type of interface */ + int ntype; /* type of number */ + int sending_complete; /* end of dialing */ +}; + +/* call-info structure CONNECT */ +struct connect_info { + char id[32]; /* id of caller (user number) */ + char voip[64]; /* URI of voip (or gateway) */ + char intern[32]; /* internal id */ + char name[16]; + int isdn_port; /* internal/external port (if call is isdn) */ + char interfaces[128]; /* interfaces for extenal calls */ + int itype; /* type of interface */ + int ntype; /* type of number */ + int present; /* presentation */ + int screen; /* who provided the number */ + char display[84]; /* display information */ +}; + +/* call-info structure DISCONNECT */ +struct disconnect_info { + int cause; /* reason for disconnect */ + int location; /* disconnect location */ + char display[84]; /* optional display information */ +}; + +/* call-info structure REDIR */ +struct redir_info { + char id[32]; /* id of caller (user number) */ + char voip[64]; /* host of voip (or gateway) */ + char intern[32]; /* internal id */ + int isdn_port; /* internal/external port (if call is isdn) */ + int itype; /* type of interface */ + int ntype; /* type of number */ + int present; /* presentation */ + int screen; /* who provided the number */ + int reason; /* reason for redirecing */ +}; + +/* call-info structure capability */ +struct capa_info { + int bearer_capa; /* capability */ + int bearer_mode; /* circuit/packet */ + int bearer_info1; /* alaw,ulaw,... */ + int hlc; /* hlc capability */ + int exthlc; /* extendet hlc */ +}; + +/* call-info structure NOTIFY */ +struct notify_info { + int notify; /* notifications (see INFO_NOTIFY_*) */ + char id[32]; /* redirection id (user number) */ + char voip[64]; /* host of voip (or gateway) */ + char intern[32]; /* internal id */ + int isdn_port; /* internal/external port (if call is isdn) */ + int itype; /* type of interface */ + int ntype; /* type of number */ + int present; /* redirection presentation */ + char display[84]; /* display information */ + int local; /* if set, endpoints gets information about audio channel (open/close) */ +}; + +/* call-info structure FACILITY */ +struct facility_info { + char data[256]; /* data info about facility */ + int len; /* length of facility content */ +}; + +/* call-info structure USERUSER */ +struct useruser_info { + int protocol; + int len; + unsigned char data[128]; /* user-user info (not a sting!)*/ +}; + +/* call-info structure SETUP */ +struct message_setup { + int isdn_port; /* card number 1...n (only on calls from internal isdn port) */ + int port_type; /* type of port (only required if message is port -> epoint) */ + int dtmf; /* used to enabled dtmf dialing at setup state */ + int partyline; /* if set, call will be a conference room */ + struct caller_info callerinfo; /* information about the caller */ + struct dialing_info dialinginfo; /* information about dialing */ + struct redir_info redirinfo; /* info on redirection (to the calling user) */ + struct capa_info capainfo; /* info on l2,l3 capability */ + struct useruser_info useruser; /* user-user */ +}; + +/* call-info structure PARK */ +struct park_info { + char callid[8]; + int len; +}; + +/* DATA */ +struct param_data { + unsigned char data[512]; /* audio/hdlc data */ + int len; /* audio/hdlc data */ + int compressed; /* 0 for law-data, 1 for 16-bit data */ + unsigned long port_id; /* to identify the source of this data */ + int port_type; /* type of the source's port */ +}; + +struct param_play { + char file[512]; /* file name */ + int offset; /* offset to start file at (in seconds) */ +}; + +struct param_tone { + char dir[128]; /* directory */ + char name[128]; /* file name */ +}; + +struct param_counter { + int current; /* current counter in seconds */ + int max; /* total size of file (0=no info) */ +}; + +struct param_mISDNsignal { + int message; + int rxvol; + int txvol; + int conf; + int nodata; + int tone; + int echo; +}; + +/* encryption control structure CRYPT */ +struct param_crypt { + int type; /* see messages in crypt.h */ + int len; + unsigned char data[512+32]; /* a block of 512 byte + some overhead */ +}; + +/* structure of message parameter */ +union parameter { + struct param_tone tone; /* MESSAGE_TONE */ + char dtmf; /* MESSAGE_DTMF */ + struct message_setup setup; /* MESSAGE_SETUP */ + struct dialing_info information; /* MESSAGE_INFO */ + struct connect_info connectinfo; /* CONNECT INFO */ + struct disconnect_info disconnectinfo; /* DISCONNECT INFO */ + struct notify_info notifyinfo; /* some notifications */ + struct facility_info facilityinfo; /* some notifications */ + struct park_info parkinfo; /* MESSAGE_SUSPEND, MESSAGE_RESUME */ + int state; /* MESSAGE_TIMEOUT */ + int knock; /* MESSAGE_KNOCK 0=off !0=on */ + int channel; /* MESSAGE_CHANNEL see RELATION_CHANNEL_* (call.h) */ + struct param_data data; /* MESSAGE_DATA */ + struct param_play play; /* MESSAGE_VBOX_PLAY */ + int speed; /* MESSAGE_VBOX_PLAY_SPEED */ + struct param_counter counter; /* MESSAGE_TONE_COUNTER */ + struct param_mISDNsignal mISDNsignal; /* MESSAGE_mISDNSIGNAL */ + struct extension ext; /* tell port about extension information */ + struct param_crypt crypt; /* MESSAGE_CRYPT */ +}; + +enum { /* message flow */ + PORT_TO_EPOINT, + EPOINT_TO_CALL, + CALL_TO_EPOINT, + EPOINT_TO_PORT, +}; + +/* message structure */ +struct message { + struct message *next; + int type; /* type of message */ + int flow; /* from where to where */ + unsigned long id_from; /* in case of flow==PORT_TO_EPOINT: id_from is the port's serial, id_to is the epoint's serial */ + unsigned long id_to; + union parameter param; +}; + +enum { /* messages between entities */ + MESSAGE_NONE, /* no message */ + MESSAGE_TONE, /* set information tone (to isdn port) */ + MESSAGE_DTMF, /* dtmf digit (from isdn port) */ + MESSAGE_mISDNSIGNAL, /* special mixer command (down to isdn port) */ + + MESSAGE_SETUP, /* setup message */ + MESSAGE_INFORMATION, /* additional digit information */ + MESSAGE_OVERLAP, /* call accepted, send more information */ + MESSAGE_PROCEEDING, /* proceeding */ + MESSAGE_ALERTING, /* ringing */ + MESSAGE_CONNECT, /* connect */ + MESSAGE_DISCONNECT, /* disconnect with cause */ + MESSAGE_RELEASE, /* release with cause */ + MESSAGE_TIMEOUT, /* protocol state has timed out (port->epoint) */ + MESSAGE_NOTIFY, /* used to send progress and notify infos */ + MESSAGE_FACILITY, /* used to facility infos, like aocd */ + + MESSAGE_SUSPEND, /* suspend port */ + MESSAGE_RESUME, /* resume port */ + + MESSAGE_CHANNEL, /* set status of audio path to endpoint (to call, audio is also set) */ + MESSAGE_REMOTE_AUDIO, /* tell remote to set audio status */ + MESSAGE_PATTERN, /* pattern information tones available */ + MESSAGE_NOPATTERN, /* pattern information tones unavailable */ + MESSAGE_CRYPT, /* encryption message */ + + MESSAGE_DATA, /* audio/hdlc data */ + + MESSAGE_VBOX_PLAY, /* play recorded file */ + MESSAGE_VBOX_PLAY_SPEED,/* change speed of file */ + MESSAGE_VBOX_TONE, /* set answering VBOX tone */ + MESSAGE_TONE_COUNTER, /* tone counter (for VBOX tone use) */ + MESSAGE_TONE_EOF, /* tone is end of file */ + MESSAGE_VBOX_RECORD, /* tell endpoint to start recording */ +}; + +#define MESSAGES static const char *messages_txt[] = { \ + "MESSAGE_NONE", \ + "MESSAGE_TONE", \ + "MESSAGE_DTMF", \ + "MESSAGE_mISDNSIGNAL", \ + "MESSAGE_SETUP", \ + "MESSAGE_INFORMATION", \ + "MESSAGE_OVERLAP", \ + "MESSAGE_PROCEEDING", \ + "MESSAGE_ALERTING", \ + "MESSAGE_CONNECT", \ + "MESSAGE_DISCONNECT", \ + "MESSAGE_RELEASE", \ + "MESSAGE_TIMEOUT", \ + "MESSAGE_NOTIFY", \ + "MESSAGE_FACILITY", \ + "MESSAGE_SUSPEND", \ + "MESSAGE_RESUME", \ + "MESSAGE_CHANNEL", \ + "MESSAGE_REMOTE_AUDIO", \ + "MESSAGE_PATTERN", \ + "MESSAGE_NOPATTERN", \ + "MESSAGE_CRYPT", \ + "MESSAGE_DATA", \ + "MESSAGE_VBOX_PLAY", \ + "MESSAGE_VBOX_PLAY_SPEED", \ + "MESSAGE_VBOX_TONE", \ + "MESSAGE_TONE_COUNTER", \ + "MESSAGE_TONE_EOF", \ + "MESSAGE_VBOX_RECORD", \ +}; + + +struct message *message_create(int id_from, int id_to, int flow, int type); +void message_put(struct message *message); +struct message *message_get(void); +void message_free(struct message *message); + + + diff --git a/message.txt b/message.txt new file mode 100644 index 0000000..a78bba4 --- /dev/null +++ b/message.txt @@ -0,0 +1,161 @@ +call state messages between epoint and port, call and endpoint objects: +----------------------------------------------------------------------- + +MESSAGE_SETUP +- a new call is set up + +MESSAGE_MORE +- more digits are needed + +MESSAGE_PROCEEDING +- call proceeds, no more digits needed + +MESSAGE_ALERTING +- call alerts, no more digits needed + +MESSAGE_CONNECT +- call connects + +MESSAGE_DISCONNECT +- call disconnects, but not yet released + +MESSAGE_RELEASE +- call has been released + +* other messages like dialing information, notifications and others + are processed by the objects and can cause other internal states to change + but will not change any call state. objects may analyze the given information + and process call state message. (e.g MESSAGE_DISCONNECT when dialing a wrong + number) + + +states of port object: +---------------------- + +PORT_STATE_IDLE +- port is just created, no setup yet +PORT_STATE_IN_SETUP +- a setup was received from isdn stack +PORT_STATE_OUT_SETUP +- a setup was sent to isdn stack +PORT_STATE_IN_MORE +- the endpoint object requires more digits to complete the call +PORT_STATE_OUT_MORE +- the port object requires more digits to complete the call +PORT_STATE_IN_PROCEEDING +- the incoming call proceeds, no more digits needed +PORT_STATE_OUT_PROCEEDING +- the outgoing call proceeds, no more digits needed +PORT_STATE_IN_ALERTING +- the incoming call alerts, no more digits needed +PORT_STATE_OUT_ALERTING +- the outgoing call alerts, no more digits needed +PORT_STATE_CONNECT +- the call is active +PORT_STATE_IN_DISCONNECT +- the call is disconnected from the incoming side +PORT_STATE_OUT_DISCONNECT +- the call is disconnected from the outgoing side +PORT_STATE_RELEASE +- the call is released, the port object waits for the l3-process to terminate + + +states of endpoint object: +-------------------------- + +EPOINT_STATE_IDLE +- endpoint is just created, no setup yet +EPOINT_STATE_OUT_SETUP +- a setup was received from call object +EPOINT_STATE_IN_MORE +- the port object requires more digits to complete the call +EPOINT_STATE_OUT_MORE +- the call object requires more digits to complete the call +EPOINT_STATE_IN_PROCEEDING +- the incoming call proceeds, no more digits needed +EPOINT_STATE_OUT_PROCEEDING +- the outgoing call proceeds, no more digits needed +EPOINT_STATE_IN_ALERTING +- the incoming call alerts, no more digits needed +EPOINT_STATE_OUT_ALERTING +- the outgoing call alerts, no more digits needed +EPOINT_STATE_CONNECT +- the call is active +EPOINT_STATE_IN_DISCONNECT +- the incoming call is disconnected +EPOINT_STATE_OUT_DISCONNECT +- the outgoing call is disconnected + + +states of call: +--------------- + +there are no call states. + + +procedure of messages between port and endpoint objects: +-------------------------------------------------------- + +INCOMING CALL (port->endpoint) +- the endpoint object is created by the port object. +- a MESSAGE_SETUP is sent as the first message port->endpoint. + the port goes into PORT_STATE_IN_SETUP state. + the endpoint goes into EPOINT_STATE_IN_MORE state or any other state after + processing the given dialing information. +- the endpoint MUST now respond with MESSAGE_MORE, MESSAGE_PROCEEDING, + MESSAGE_ALERTING, MESSAGE_CONNECT, MESSAGE_DISCONNECT. + the endpoint goes into the appropiate EPOINT_STATE_IN_* state. + the port goes into the appropiate PORT_STATE_IN_* state. + +OUTGOING CALL (endpoint->port) +- the port object is created by the endpoint object. +- a MESSAGE_SETUP is sent as the first message endpoint->port. + the endpoint goes into EPOINT_STATE_OUT_SETUP state. + the port goes into PORT_STATE_OUT_SETUP state. +- the port may now respond with MESSAGE_MORE, MESSAGE_PROCEEDING, + MESSAGE_ALERTING, MESSAGE_CONNECT, MESSAGE_DISCONNECT. + the port goes into the appropiate PORT_STATE_OUT_* state. + the endpoint goes into the appropiate EPOINT_STATE_OUT_* state. + +DISCONNECTING CALL (endpoint->port) +- the endpoint may disconnect the call at any state, except IDLE. + it sends MESSAGE_DISCONNECT. + the endpoint goes into EPOINT_STATE_OUT_DISCONNECT state. + the port goes into PORT_STATE_OUT_DISCONNECT state. + +DISCONNECTING CALL (port->endpoint) +- the port may disconnect the call at any state, except IDLE. + it sends MESSAGE_DISCONNECT. + the port goes into PORT_STATE_IN_DISCONNECT state. + the endpoint goes into EPOINT_STATE_IN_DISCONNECT state. + +RELEASING CALL (port->endpoint, endpoint->port) +- at any state, this message is possible + the object sends MESSAGE_RELEASE, the port will terminate soon. + the receiving object will unlink the relation to the sending object. + + +procedure of messages between endpoint and call objects: + +CALL PROCEEDING (endpoint->call, call->endpoint) +- any message will be sent to the call and transfered to the other end +- any message will be received from the endpoint coming from the other end +- if more than two endpoints are connected in one call, the messages are + blocked. +- if only one endpoint exists after creation, the call will create another + endpoint and delivers the MESSAGE_SETUP + +CALL RELEASE (endpoint->call, call->endpoint) +- the endpoint sends MESSAGE_RELEASE in order to be removed from the call. + the endpoint will soon terminate. + the call will remove the endpoint and if there is only one endpoint left, + it will send a MESSAGE_RELEASE to the endpoint and will release itself. + + +DISCONNECT and RELEASE +---------------------- + +the endpoint may receive MESSAGE_RELEASE from a call but may NOT send it +to the port. the port MUST get a MESSAGE_DISCONNECT instead. + + diff --git a/options.c b/options.c new file mode 100644 index 0000000..d41680e --- /dev/null +++ b/options.c @@ -0,0 +1,497 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** reading options.conf and filling structure ** +** ** +\*****************************************************************************/ + +#include +#include +#include +#include "main.h" + +struct options options = { + "/usr/local/pbx/log", /* log file */ + {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, + 0x0000, /* debug mode */ + 'a', /* a-law */ + "0", /* national prefix */ + "00", /* international prefix */ + "tones_american", /* directory of tones */ + "", /* directories of tones to fetch */ + "extensions", /* directory of extensions */ + "", /* h323 endpoint name */ + 0, /* h323 ringconnect */ + 0,4, 0,2, 0, 0, 0, 0,4, 0,4, 0,64, /* h323 codecs to use */ + 0,"",1720, /* allow incoming h323 calls */ + 0,"", /* register with h323 gatekeeper */ + 5060, 5, /* SIP port, maxqueue */ + 0, /* dtmf detection on */ + "", /* dummy caller id */ + 0, /* inband patterns on external calls */ + 0, /* use tones by dsp.o */ + 0, /* by default use priority 0 */ + "pbx@jolly.de" /* source mail adress */ +}; + +/* read options + * + * read options from options.conf + */ +int read_options(void) +{ + FILE *fp=NULL; + char filename[128]; + char *p; + char option[32]; + char param[256]; + unsigned int line,i; + char buffer[256]; +#ifdef H323 + int codecpri = 0; +#endif + + SPRINT(filename, "%s/options.conf", INSTALL_DATA); + + if (!(fp=fopen(filename,"r"))) + { + PERROR("Cannot open %s\n",filename); + return(-1); + } + + line=0; + while((fgets(buffer,sizeof(buffer),fp))) + { + line++; + buffer[sizeof(buffer)-1]=0; + if (buffer[0]) buffer[strlen(buffer)-1]=0; + p=buffer; + + while(*p <= 32) /* skip spaces */ + { + if (*p == 0) + break; + p++; + } + if (*p==0 || *p=='#') /* ignore comments and empty line */ + continue; + + option[0]=0; + i=0; /* read option */ + while(*p > 32) + { + if (i+1 >= sizeof(option)) + { + PERROR_RUNTIME("Error in %s (line %d): option too long.\n",filename,line); + goto error; + } + option[i+1] = '\0'; + option[i++] = *p++; + } + + while(*p <= 32) /* skip spaces */ + { + if (*p == 0) + break; + p++; + } + + param[0]=0; + if (*p!=0 && *p!='#') /* param */ + { + i=0; /* read param */ + while(*p > 31) + { + if (i+1 >= sizeof(param)) + { + PERROR_RUNTIME("Error in %s (line %d): param too long.\n",filename,line); + goto error; + } + param[i+1] = '\0'; + param[i++] = *p++; + } + } + + /* at this point we have option and param */ + + /* check option */ + if (!strcmp(option,"nt_if") || !strcmp(option,"te_if")) + { + PERROR_RUNTIME("Error in %s (line %d): obsolete option %s. Use multiple 'port' options to define ports to use.\n",filename,line,option); + goto error; + } else + if (!strcmp(option,"debug")) + { + if (param[0]==0) + { + PERROR_RUNTIME("Error in %s (line %d): parameter for option %s missing.\n",filename,line,option); + goto error; + } + options.deb = strtol(param, NULL, 0); + + PDEBUG(DEBUG_CONFIG, "debugging: 0x%x\n", options.deb); + } else + if (!strcmp(option,"log")) + { + if (param[0]==0) + { + PERROR_RUNTIME("Error in %s (line %d): parameter for option %s missing.\n",filename,line, option); + goto error; + } + SCPY(options.log, param); + + PDEBUG(DEBUG_CONFIG, "log file: %s\n", options.log); + } else + if (!strcmp(option,"port")) + { + i = strtol(param, NULL, 0); + if (i < 1 || i > sizeof(options.ports)) + { + PERROR_RUNTIME("Error in %s (line %d): port number %s out of range.\n", filename, line, option); + goto error; + } + options.ports[i] |= FLAG_PORT_USE; + + PDEBUG(DEBUG_CONFIG, "adding interface: %d (param=%s)\n", i, param); + if (strstr(param, "ptp")) + { + options.ports[i] |= FLAG_PORT_PTP; + PDEBUG(DEBUG_CONFIG, " -> interface shall be ptp\n"); + } + } else +#if 0 + if (!strcmp(option,"ptp")) + { + options.ptp = 1; + + PDEBUG(DEBUG_CONFIG, "ptp layer-2 watch and keep established.\n"); + } else +#endif + if (!strcmp(option,"alaw")) + { + options.law = 'a'; + + PDEBUG(DEBUG_CONFIG, "isdn audio type: alaw\n"); + } else + if (!strcmp(option,"ulaw")) + { + options.law = 'u'; + + PDEBUG(DEBUG_CONFIG, "isdn audio type: ulaw\n"); + } else + if (!strcmp(option,"h323_name")) + { +#ifdef H323 + SCPY(options.h323_name, param); + + PDEBUG(DEBUG_CONFIG, "H323 endpoint name: '%s'\n", param); +#endif + } else + if (!strcmp(option,"h323_ringconnect")) + { +#ifdef H323 + options.h323_ringconnect = 1; + + PDEBUG(DEBUG_CONFIG, "H323 ringconnect: enabled\n"); +#endif + } else + if (!strcmp(option,"h323_gsm")) + { +#ifdef H323 + codecpri ++; + options.h323_gsm_pri = codecpri; + options.h323_gsm_opt = atoi(param); + if (atoi(param)<1 && atoi(param)>7) + { + PERROR_RUNTIME("Error in %s (line %d): parameter for option %s must be in range 1..7.\n",filename,line,option); + goto error; + } + + PDEBUG(DEBUG_CONFIG, "H323 codec to use: GSM, MicrosoftGSM priority %d\n", codecpri); +#endif + } else + if (!strcmp(option,"h323_g726")) + { +#ifdef H323 + codecpri ++; + options.h323_g726_pri = codecpri; + options.h323_g726_opt = atoi(param); + if (atoi(param)<2 && atoi(param)>5) + { + PERROR_RUNTIME("Error in %s (line %d): parameter for option %s must be in range 2..5.\n",filename,line,option); + goto error; + } + + PDEBUG(DEBUG_CONFIG, "H323 codec to use: G726 priority %d\n", codecpri); +#endif + } else + if (!strcmp(option,"h323_g7231")) + { +#ifdef H323 + codecpri ++; + options.h323_g7231_pri = codecpri; + + PDEBUG(DEBUG_CONFIG, "H323 codec to use: G7231 priority %d\n", codecpri); +#endif + } else + if (!strcmp(option,"h323_g729a")) + { +#ifdef H323 + codecpri ++; + options.h323_g729a_pri = codecpri; + + PDEBUG(DEBUG_CONFIG, "H323 codec to use: G729A priority %d\n", codecpri); +#endif + } else + if (!strcmp(option,"h323_lpc10")) + { +#ifdef H323 + codecpri ++; + options.h323_lpc10_pri = codecpri; + + PDEBUG(DEBUG_CONFIG, "H323 codec to use: LPC-10 priority %d\n", codecpri); +#endif + } else + if (!strcmp(option,"h323_speex")) + { +#ifdef H323 + codecpri ++; + options.h323_speex_pri = codecpri; + options.h323_speex_opt = atoi(param); + if (atoi(param)<2 && atoi(param)>6) + { + PERROR_RUNTIME("Error in %s (line %d): parameter for option %s must be in range 2..6.\n",filename,line,option); + goto error; + } + + PDEBUG(DEBUG_CONFIG, "H323 codec to use: Speex priority %d\n", codecpri); +#endif + } else + if (!strcmp(option,"h323_xspeex")) + { +#ifdef H323 + codecpri ++; + options.h323_xspeex_pri = codecpri; + options.h323_xspeex_opt = atoi(param); + if (atoi(param)<2 && atoi(param)>6) + { + PERROR_RUNTIME("Error in %s (line %d): parameter for option %s must be in range 2..6.\n",filename,line,option); + goto error; + } + + PDEBUG(DEBUG_CONFIG, "H323 codec to use: XiphSpeex priority %d\n", codecpri); +#endif + } else + if (!strcmp(option,"h323_law")) + { +#ifdef H323 + codecpri ++; + options.h323_law_pri = codecpri; + options.h323_law_opt = atoi(param); + if (atoi(param)<10 && atoi(param)>240) + { + PERROR_RUNTIME("Error in %s (line %d): parameter for option %s must be in range 10..240.\n",filename,line,option); + goto error; + } + + PDEBUG(DEBUG_CONFIG, "H323 codec to use: Alaw, muLaw priority %d\n", codecpri); +#endif + } else + if (!strcmp(option,"h323_icall")) + { +#ifdef H323 + options.h323_icall = 1; + SCPY(options.h323_icall_prefix, param); + + PDEBUG(DEBUG_CONFIG, "process incoming H323 call with prefix '%s'\n", param); +#endif + } else + if (!strcmp(option,"h323_port")) + { +#ifdef H323 + options.h323_port = atoi(param); + + PDEBUG(DEBUG_CONFIG, "use port for incoming H323 calls: %d\n", atoi(param)); +#endif + } else + if (!strcmp(option,"sip_port")) + { +#ifdef SIP + options.sip_port = atoi(param); + + PDEBUG(DEBUG_CONFIG, "use port for incoming SIP calls: %d\n", atoi(param)); +#endif + } else + if (!strcmp(option,"sip_maxqueue")) + { +#ifdef SIP + options.sip_maxqueue = atoi(param); + + PDEBUG(DEBUG_CONFIG, "number of simultanious incoming sockets for SIP calls: %d\n", atoi(param)); +#endif + } else + if (!strcmp(option,"h323_gatekeeper")) + { +#ifdef H323 + options.h323_gatekeeper = 1; + if (param[0]) + { + SCPY(options.h323_gatekeeper_host, param); + } + PDEBUG(DEBUG_CONFIG, "register with H323 gatekeeper (%s)\n", (param[0])?param:"automatically"); +#endif + } else + if (!strcmp(option,"tones_dir")) + { + if (param[0]==0) + { + PERROR_RUNTIME("Error in %s (line %d): parameter for option %s missing.\n",filename,line,option); + goto error; + } + if (param[strlen(param)-1] == '/') + param[strlen(param)-1]=0; + SCPY(options.tones_dir, param); + + PDEBUG(DEBUG_CONFIG, "directory of tones: %s\n",param); + } else + if (!strcmp(option,"fetch_tones")) + { + if (param[0]==0) + { + PERROR_RUNTIME("Error in %s (line %d): parameter for option %s missing.\n",filename,line,option); + goto error; + } + if (param[strlen(param)-1] == '/') + param[strlen(param)-1]=0; + SCPY(options.fetch_tones, param); + + PDEBUG(DEBUG_CONFIG, "directories of tones to fetch: %s\n",param); + } else + if (!strcmp(option,"extensions_dir")) + { + if (param[0]==0) + { + PERROR_RUNTIME("Error in %s (line %d): parameter for option %s missing.\n",filename,line,option); + goto error; + } + if (param[strlen(param)-1] == '/') + param[strlen(param)-1]=0; + SCPY(options.extensions_dir, param); + + PDEBUG(DEBUG_CONFIG, "directory of extensions: %s\n",param); + } else + if (!strcmp(option,"national")) + { + SCPY(options.national, param); + + PDEBUG(DEBUG_CONFIG, "national dial prefix: %s\n", param); + } else + if (!strcmp(option,"international")) + { + SCPY(options.international, param); + + PDEBUG(DEBUG_CONFIG, "inernational dial prefix: %s\n", param); + } else + if (!strcmp(option,"nodtmf")) + { + options.nodtmf = 1; + + PDEBUG(DEBUG_CONFIG, "disable dtmf detection\n"); + } else + if (!strcmp(option,"dummyid")) + { + SCPY(options.dummyid, param); + + PDEBUG(DEBUG_CONFIG, "dummy caller id\n", param); + } else + if (!strcmp(option,"inbandpattern")) + { + if (!strcasecmp(param, "yes")) + options.inbandpattern = 1; + + PDEBUG(DEBUG_CONFIG, "inband pattern = %s\n", (options.inbandpattern)?"yes":"no"); + } else + if (!strcmp(option,"dsptones")) + { + if (!strcasecmp(param, "american")) + options.dsptones = DSP_AMERICAN; + else if (!strcasecmp(param, "german")) + options.dsptones = DSP_GERMAN; + else if (!strcasecmp(param, "oldgerman")) + options.dsptones = DSP_OLDGERMAN; + else if (!strcasecmp(param, "none")) + options.dsptones = DSP_NONE; + else { + PERROR_RUNTIME("Error in %s (line %d): parameter for option %s missing.\n",filename,line,option); + goto error; + } + + PDEBUG(DEBUG_CONFIG, "dsp tones = %d\n", options.dsptones); + } else + if (!strcmp(option,"schedule")) + { + options.schedule = atoi(param); + if (options.schedule < 0) + { + PERROR_RUNTIME("Error in %s (line %d): parameter for option %s must be at least '0'.\n", filename,line,option); + goto error; + } + if (options.schedule > 99) + { + PERROR_RUNTIME("Error in %s (line %d): parameter for option %s must be '99' or less.\n", filename,line,option); + goto error; + } + + if (atoi(param)) + PDEBUG(DEBUG_CONFIG, "use real time scheduler priority: %d\n", atoi(param)); + else + PDEBUG(DEBUG_CONFIG, "don't use real time scheduler\n"); + } else + if (!strcmp(option,"email")) + { + if (param[0]==0) + { + PERROR_RUNTIME("Error in %s (line %d): parameter for option %s missing.\n", filename,line,option); + goto error; + } + SCPY(options.email, param); + + PDEBUG(DEBUG_CONFIG, "source mail address of pbx: %s\n", param); + } else + { + PERROR_RUNTIME("Error in %s (line %d): wrong option keyword %s.\n", filename,line,option); + goto error; + } + } + +#if 0 + if (!options.dsptones) + { + PERROR_RUNTIME("Error in %s (line %d): option 'dsptones' missing.\n", filename); + goto error; + } +#endif + if (!options.tones_dir[0]) + { + PERROR_RUNTIME("Error in %s (line %d): option 'tones_dir' with parameter missing.\n", filename); + goto error; + } + if (fp) fclose(fp); + return(1); +error: + if (fp) fclose(fp); + return(0); +} + + diff --git a/options.h b/options.h new file mode 100644 index 0000000..52c2c52 --- /dev/null +++ b/options.h @@ -0,0 +1,59 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** options header file ** +** ** +\*****************************************************************************/ + +struct options { + char log[128]; /* location of log file */ + char ports[256]; /* use of ports */ +// int ptp; /* if layer 2 should be watched */ + int deb; /* debugging */ + char law; /* 'a' or 'u' law */ + + char national[10]; /* prefix for national calls */ + char international[10]; /* prefix for international calls */ + + char tones_dir[64]; /* directory of all tones/patterns */ + char fetch_tones[256]; /* directories of tones to fetch */ + char extensions_dir[64]; /* directory of extensions */ + char h323_name[128]; /* the name of h323 endpoint */ + int h323_ringconnect; /* connected when ringing */ + int h323_gsm_pri; /* priority to use of GSM codec (0 == don't use) */ + int h323_gsm_opt; + int h323_g726_pri; /* priority to use of G726 codec (0 == don't use) */ + int h323_g726_opt; + int h323_g7231_pri; /* priority to use of G7231 codec (0 == don't use) */ + int h323_g729a_pri; /* priority to use of G729a codec (0 == don't use) */ + int h323_lpc10_pri; /* priority to use of lpc-10 codec (0 == don't use) */ + int h323_speex_pri; /* priority to use of speex codec (0 == don't use) */ + int h323_speex_opt; + int h323_xspeex_pri; /* priority to use of xspeex codec (0 == don't use) */ + int h323_xspeex_opt; + int h323_law_pri; /* priority to use of law codec (0 == don't use) */ + int h323_law_opt; + int h323_icall; /* allow incoming h323 calls */ + char h323_icall_prefix[32]; /* the prefix */ + int h323_port; /* port for incoming calls */ + int h323_gatekeeper; /* register with h323 gatekeeper */ + char h323_gatekeeper_host[128];/* the gatekeeper host */ + int sip_port; + int sip_maxqueue; + int nodtmf; /* use dtmf detection */ + char dummyid[32]; /* caller id for external calls if not available */ + int inbandpattern; /* inband patterns on external calls */ + int dsptones; /* tones will be generated via dsp.o 1=american 2=ger */ + int schedule; /* run process in realtime @ given priority */ + char email[128]; /* source email address */ +}; + +extern struct options options; + +int read_options(void); + + diff --git a/port.cpp b/port.cpp new file mode 100644 index 0000000..a68ca59 --- /dev/null +++ b/port.cpp @@ -0,0 +1,2116 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** port ** +** ** +\*****************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "main.h" + +#define BETTERDELAY + +//#define MIXER_DEBUG /* debug mixer buffer overflow and underrun */ + +class Port *port_first = NULL; + +unsigned long port_serial = 1; /* must be 1, because 0== no port */ + + +/* free epointlist relation + */ +void Port::free_epointlist(struct epoint_list *epointlist) +{ + struct epoint_list *temp, **tempp; + + temp = p_epointlist; + tempp = &p_epointlist; + while(temp) + { + if (temp == epointlist) + break; + + tempp = &temp->next; + temp = temp->next; + } + if (temp == 0) + { + PERROR("SOFTWARE ERROR: epointlist not in port's list.\n"); + return; + } + /* detach */ + *tempp=temp->next; + + /* free */ + PDEBUG(DEBUG_EPOINT, "PORT(%d) removed epoint from port\n", p_serial); + memset(temp, 0, sizeof(struct epoint_list)); + free(temp); + ememuse--; +} + + +void Port::free_epointid(unsigned long epoint_id) +{ + struct epoint_list *temp, **tempp; + + temp = p_epointlist; + tempp = &p_epointlist; + while(temp) + { + if (temp->epoint_id == epoint_id) + break; + + tempp = &temp->next; + temp = temp->next; + } + if (temp == 0) + { + PERROR("epoint_id not in port's list, exitting.\n"); + return; + } + /* detach */ + *tempp=temp->next; + + /* free */ + PDEBUG(DEBUG_EPOINT, "PORT(%d) removed epoint from port\n", p_serial); + memset(temp, 0, sizeof(struct epoint_list)); + free(temp); + ememuse--; +} + + +/* create new epointlist relation + */ +struct epoint_list *Port::epointlist_new(unsigned long epoint_id) +{ + struct epoint_list *epointlist, **epointlistpointer; + + /* epointlist structure */ + epointlist = (struct epoint_list *)calloc(1, sizeof(struct epoint_list)); + if (!epointlist) + { + PERROR("no mem for allocating epoint_list\n"); + return(0); + } + ememuse++; + PDEBUG(DEBUG_EPOINT, "PORT(%d) allocating epoint_list.\n", p_serial); + memset(epointlist, 0, sizeof(struct epoint_list)); + + /* add epoint_list to chain */ + epointlist->next = NULL; + epointlistpointer = &p_epointlist; + while(*epointlistpointer) + epointlistpointer = &((*epointlistpointer)->next); + *epointlistpointer = epointlist; + + /* link to epoint */ + epointlist->epoint_id = epoint_id; + epointlist->active = 1; + + return(epointlist); +} + + +/* + * port constructor + */ +Port::Port(int type, char *portname, struct port_settings *settings) +{ + class Port *temp, **tempp; + + PDEBUG(DEBUG_PORT, "new port of type %d, name '%s'\n", type, portname); + + /* initialize object */ + if (settings) + memcpy(&p_settings, settings, sizeof(struct port_settings)); + else + { + memset(&p_settings, 0, sizeof(p_settings)); + SCPY(p_settings.tones_dir, options.tones_dir); + } + SCPY(p_name, portname); + SCPY(p_tone_dir, p_settings.tones_dir); // just to be sure + p_type = type; + p_serial = port_serial++; + p_debug_nothingtosend = 0; + p_tone_fh = -1; + p_tone_fetched = NULL; + p_tone_name[0] = '\0'; +// p_knock_fh = -1; +// p_knock_fetched = NULL; + p_state = PORT_STATE_IDLE; + p_epointlist = NULL; + memset(&p_callerinfo, 0, sizeof(p_callerinfo)); + memset(&p_dialinginfo, 0, sizeof(p_dialinginfo)); + memset(&p_connectinfo, 0, sizeof(p_connectinfo)); + memset(&p_redirinfo, 0, sizeof(p_redirinfo)); + memset(&p_capainfo, 0, sizeof(p_capainfo)); + memset(p_mixer_buffer, 0, sizeof(p_mixer_buffer)); + memset(p_record_buffer, 0, sizeof(p_record_buffer)); + memset(p_stereo_buffer, 0, sizeof(p_stereo_buffer)); + p_mixer_rel = NULL; + p_mixer_readp = 0; + p_echotest = 0; + next = NULL; + p_record = NULL; + p_record_type = 0; + p_record_length = 0; + p_record_filename[0] = '\0'; + + /* append port to chain */ + temp = port_first; + tempp = &port_first; + while(temp) + { + tempp = &temp->next; + temp = temp->next; + } + *tempp = this; + + classuse++; +} + + +/* + * port destructor + */ +Port::~Port(void) +{ + struct mixer_relation *relation, *rtemp; + class Port *temp, **tempp; + struct message *message; + + if (p_record) + close_record(0); + + classuse--; + + PDEBUG(DEBUG_PORT, "removing port of type %d, name '%s'\n", p_type, p_name); + + /* free mixer relation chain */ + relation = p_mixer_rel; + while(relation) + { + rtemp = relation; + relation = relation->next; + memset(rtemp, 0, sizeof(struct mixer_relation)); + free(rtemp); + pmemuse--; + } + p_mixer_rel = NULL; /* beeing paranoid */ + + /* disconnect port from endpoint */ + while(p_epointlist) + { + /* send disconnect */ + message = message_create(p_serial, p_epointlist->epoint_id, PORT_TO_EPOINT, MESSAGE_RELEASE); + message->param.disconnectinfo.cause = 16; + message->param.disconnectinfo.location = LOCATION_PRIVATE_LOCAL; + message_put(message); + /* remove endpoint */ + free_epointlist(p_epointlist); + } + + /* remove port from chain */ + temp=port_first; + tempp=&port_first; + while(temp) + { + if (temp == this) + break; + tempp = &temp->next; + temp = temp->next; + } + if (temp == NULL) + { + PERROR("PORT(%s) port not in port's list.\n", p_name); + exit(-1); + } + /* detach */ + *tempp=this->next; + + /* close open tones file */ + if (p_tone_fh >= 0) + { + close(p_tone_fh); + p_tone_fh = -1; + fhuse--; + } + p_tone_fetched = NULL; +} + +PORT_STATE_NAMES + +/* set new endpoint state + */ +void Port::new_state(int state) +{ + PDEBUG(DEBUG_PORT, "PORT(%s) new state %s --> %s\n", p_name, state_name[p_state], state_name[state]); + p_state = state; +} + + +/* + * find the port using h323 token + */ +class Port *find_port_with_token(char *name) +{ + class Port *port = port_first; + + while(port) + { +//printf("comparing: '%s' with '%s'\n", name, p_name); + if ((port->p_type==PORT_TYPE_H323_IN || port->p_type==PORT_TYPE_H323_OUT) && !strcmp(port->p_name, name)) + return(port); + port = port->next; + } + + return(NULL); +} + + +/* + * find the port with port_id + */ +class Port *find_port_id(unsigned long port_id) +{ + class Port *port = port_first; + + while(port) + { +//printf("comparing: '%s' with '%s'\n", name, port->name); + if (port->p_serial == port_id) + return(port); + port = port->next; + } + + return(NULL); +} + +#if 0 +/* + * open the knock sound + */ +void Port::set_knock(char *tones_dir_epoint) +{ + char filename[128], *tones_dir; + + /* check if we have the epoint override the tones_dir of options.conf */ + tones_dir = options.tones_dir; + if (tones_dir_epoint[0]) + { + tones_dir = tones_dir_epoint; + } + + if (p_knock_fh >= 0) + { + close(p_knock_fh); + p_knock_fh = -1; + fhuse--; + } + p_knock_fetched = NULL; + + if ((p_knock_fetched=open_tone_fetched(tones_dir, "knock", &p_knock_codec, &p_knock_size, &p_knock_left))) + { + PDEBUG(DEBUG_PORT, "PORT(%s) opening fetched tone: %s\n", p_name, "knock"); + return; + } + + SPRINT(filename, "%s/%s/knock", INSTALL_DATA, tones_dir); + if ((p_knock_fh=open_tone(filename, &p_knock_codec, &p_knock_size, &p_knock_left)) >= 0) + { + PDEBUG(DEBUG_PORT, "PORT(%s) opening tone: %s\n", p_name, filename); + fhuse++; + } else + { + p_knock_fh = -1; + } +} +#endif + + +/* + * set echotest + */ +void Port::set_echotest(int echotest) +{ + p_echotest = echotest; +} + +/* + * set the file in the tone directory with the given name + */ +void Port::set_tone(char *dir, char *name) +{ + int fh; + char filename[128]; + + if (name == NULL) + name = ""; + +#if 0 + /* knocking ? */ + if (!strcmp(name, "knock")) + { + set_knock(tones_dir_epoint); + return; + } +#endif + + /* no counter, no eof, normal speed */ + p_tone_counter = 0; + p_tone_eof = 0; + p_tone_speed = 1; + p_tone_codec = CODEC_LAW; + + if (p_tone_fh >= 0) + { + close(p_tone_fh); + p_tone_fh = -1; + fhuse--; + } + p_tone_fetched = NULL; + + if (name[0]) + { + if (name[0] == '/') + { + SPRINT(p_tone_name, "%s", name); + p_tone_dir[0] = '\0'; + } else + { + SCPY(p_tone_dir, dir); + SCPY(p_tone_name, name); + } + } else + { + p_tone_name[0]= '\0'; + p_tone_dir[0]= '\0'; + return; + } + + if (!!strncmp(name,"cause_",6)) + return; + + /* now we check if the cause exists, otherwhise we use error tone. */ + if ((p_tone_fetched=open_tone_fetched(p_tone_dir, p_tone_name, &p_tone_codec, 0, 0))) + { + p_tone_fetched = NULL; + return; + } + SPRINT(filename, "%s_loop", p_tone_name); + if ((p_tone_fetched=open_tone_fetched(p_tone_dir, filename, &p_tone_codec, 0, 0))) + { + p_tone_fetched = NULL; + return; + } + SPRINT(filename, "%s/%s/%s", INSTALL_DATA, p_tone_dir, p_tone_name); + if ((fh=open_tone(filename, &p_tone_codec, 0, 0)) >= 0) + { + close(fh); + return; + } + SPRINT(filename, "%s/%s/%s_loop", INSTALL_DATA, p_tone_dir, p_tone_name); + if ((fh=open_tone(filename, &p_tone_codec, 0, 0)) >= 0) + { + close(fh); + return; + } + + if (!strcmp(name,"cause_00") || !strcmp(name,"cause_10")) + { + PDEBUG(DEBUG_PORT, "PORT(%s) Given Cause 0x%s has no tone, using release tone\n", p_name, name+6); + SPRINT(p_tone_name,"release"); + } else + if (!strcmp(name,"cause_11")) + { + PDEBUG(DEBUG_PORT, "PORT(%s) Given Cause 0x%s has no tone, using busy tone\n", p_name, name+6); + SPRINT(p_tone_name,"busy"); + } else + { + PDEBUG(DEBUG_PORT, "PORT(%s) Given Cause 0x%s has no tone, using error tone\n", p_name, name+6); + SPRINT(p_tone_name,"error"); + } +} + + +/* + * set the file in the tone directory for vbox playback + * also set the play_eof-flag + */ +void Port::set_vbox_tone(char *dir, char *name) +{ + char filename[256]; + + p_tone_speed = 1; + p_tone_counter = 0; + p_tone_codec = CODEC_LAW; + p_tone_eof = 1; + + if (p_tone_fh >= 0) + { + close(p_tone_fh); + p_tone_fh = -1; + fhuse--; + } + p_tone_fetched = NULL; + + SPRINT(p_tone_dir, dir); + SPRINT(p_tone_name, name); + + /* now we check if the cause exists, otherwhise we use error tone. */ + if (p_tone_dir[0]) + { + if ((p_tone_fetched=open_tone_fetched(p_tone_dir, p_tone_name, &p_tone_codec, &p_tone_size, &p_tone_left))) + { + PDEBUG(DEBUG_PORT, "PORT(%s) opening fetched tone: %s\n", p_name, p_tone_name); + return; + } + SPRINT(filename, "%s/%s/%s", INSTALL_DATA, p_tone_dir, p_tone_name); + if ((p_tone_fh=open_tone(filename, &p_tone_codec, &p_tone_size, &p_tone_left)) >= 0) + { + fhuse++; + PDEBUG(DEBUG_PORT, "PORT(%s) opening tone: %s\n", p_name, filename); + return; + } + } else + { + SPRINT(filename, "%s", p_tone_name); + if ((p_tone_fh=open_tone(filename, &p_tone_codec, &p_tone_size, &p_tone_left)) >= 0) + { + fhuse++; + PDEBUG(DEBUG_PORT, "PORT(%s) opening tone: %s\n", p_name, filename); + return; + } + } +} + + +/* + * set the file in the given directory for vbox playback + * also set the eof-flag + * also set the counter-flag + */ +void Port::set_vbox_play(char *name, int offset) +{ + signed long size; + struct message *message; + + /* use ser_box_tone() */ + set_vbox_tone("", name); + if (p_tone_fh < 0) + return; + + /* enable counter */ + p_tone_counter = 1; + + /* seek */ + if (p_tone_name[0]) + { +//printf("\n\n\n tone_codec = %d\n\n\n\n",p_tone_codec); +#if 0 + switch(p_tone_codec) + { + case CODEC_LAW: + case CODEC_8BIT: + lseek(p_tone_fh, offset*8000L, SEEK_SET); + size = p_tone_size / 8000L; + if (offset*8000L <= p_tone_left) + p_tone_left -= offset*8000L; + break; + + case CODEC_MONO: + lseek(p_tone_fh, offset*16000L, SEEK_SET); + size = p_tone_size / 16000L; + if (offset*16000L <= p_tone_left) + p_tone_left -= offset*16000L; +//printf("\n\n\n size = %d\n\n\n\n",size); + break; + + case CODEC_STEREO: + lseek(p_tone_fh, offset*32000L, SEEK_SET); + size = p_tone_size / 32000L; + if (offset*32000L <= p_tone_left) + p_tone_left -= offset*32000L; + break; + + default: + PERROR("no codec specified! exitting...\n"); + exit(-1); + } +#else + lseek(p_tone_fh, offset*8000L, SEEK_SET); + size = p_tone_size / 8000L; + if (offset*8000L <= p_tone_left) + p_tone_left -= offset*8000L; +#endif + + + /* send message with counter value */ + if (p_tone_size>=0 && ACTIVE_EPOINT(p_epointlist)) + { + message = message_create(p_serial, ACTIVE_EPOINT(p_epointlist), PORT_TO_EPOINT, MESSAGE_TONE_COUNTER); + message->param.counter.current = offset; + message->param.counter.max = size; + message_put(message); + } + } +} + + +/* + * set the playback speed (for recording playback with different speeds) + */ +void Port::set_vbox_speed(int speed) +{ + /* enable vbox play mode */ + p_tone_speed = speed; +} + +/* write data to port's mixer buffer + * it will be read by the port using read_audio + * synchronisation is also done when writing is too fast and buffer is full + * the mixer buffer will only mix what cannot be mixed by kernel mixer + * + * also write data to the record buffer. the record buffer will mix everything. + */ +void Port::mixer(union parameter *param) +{ + struct mixer_relation *relation, **relationpointer; + int len; + unsigned char *data; + signed short *data_16; + int writep; + signed long *buffer, *record; + int must_mix = 1; /* set, if we need to mix (not done by kernel) */ + + /* we do not mix if we have audio from ourself but we need to record + * unless we have a local echo enabled + */ + if (param->data.port_id==p_serial && !p_echotest) + must_mix = 0; + + if ((param->data.port_type&PORT_CLASS_MASK)==PORT_CLASS_mISDN + && (p_type&PORT_CLASS_MASK)==PORT_CLASS_mISDN) + { + must_mix = 0; + } + if (!p_record && !must_mix) /* if we do not record AND no need to mix */ + { + return; + } + + /* get the relation to the write pointer. if no relation exists + * for the given source port, we create one. + */ + relation = p_mixer_rel; + relationpointer = &(p_mixer_rel); + if (!relation) /* there is no relation at all */ + { + /* clear buffer to 0-volume and reset writep */ + memset(p_mixer_buffer, 0, sizeof(p_mixer_buffer)); + memset(p_record_buffer, 0, sizeof(p_record_buffer)); + memset(p_stereo_buffer, 0, sizeof(p_stereo_buffer)); + } else /* else because we do not need to run a 0-loop */ + while(relation) + { + if (relation->port_id == param->data.port_id) + break; + relationpointer = &(relation->next); + relation = relation->next; + } + if (!relation) + { + relation = *relationpointer = (struct mixer_relation *)calloc(1, sizeof(struct mixer_relation)); + if (!relation) + { + PERROR("fatal error: cannot alloc memory for port mixer relation\n"); + return; /* no mem */ + } + pmemuse++; + memset(relation, 0, sizeof(struct mixer_relation)); + relation->port_id = param->data.port_id; + /* put write buffer in front of read buffer */ +#ifndef BETTERDELAY + relation->mixer_writep = (p_mixer_readp+(PORT_BUFFER/2))%PORT_BUFFER; +#else + relation->mixer_writep = p_mixer_readp; +#endif +#ifdef MIXER_DEBUG + PDEBUG(DEBUG_PORT, "PORT(%s) Adding new mixer relation from port #%d (readp=%d, writep=%d, PORT_BUFFER=%d).\n", p_name, param->data.port_id, p_mixer_readp, relation->mixer_writep, PORT_BUFFER); +#endif + } + + /* adding remote's audio data to our mixer_buffer / record_buffer */ + len = param->data.len; + if (param->data.compressed == 0) /* in case of 16 bit data */ + len >>= 1; + if (len>PORT_BUFFER) + PERROR("fatal error: audio data from remote port #%d is larger than mixer buffer %d>%d\n", param->data.port_id, len, PORT_BUFFER); + writep = relation->mixer_writep; + buffer = p_mixer_buffer; + record = p_record_buffer; + /* if stereo should be recorded */ + if (param->data.port_id == p_serial) + if (p_record_type == CODEC_STEREO) + record = p_stereo_buffer; + /* NOTE: if read and write pointer are equal, the buffer is full */ + if ((p_mixer_readp-writep+PORT_BUFFER)%PORT_BUFFER < len) /* we would overrun the read pointer */ + { +#ifdef MIXER_DEBUG + PERROR("PORT(%s) buffer overrun, source port #%d is sending too fast. (dropping %d samples)\n", p_name, param->data.port_id, len); +#endif + // we do not resync since dropping causes slowing writepointer down anyway... + //relation->mixer_writep = (p_mixer_readp+(PORT_BUFFER/2))%PORT_BUFFER; + return; + } + + if (!p_record && must_mix) + { + /* WE MUST MIX BUT DO NOT RECORD */ + if (param->data.compressed) + { + /* compressed data */ + data = param->data.data; + if (len+writep >= PORT_BUFFER) /* data hits the buffer end */ + { + len = len+writep-PORT_BUFFER; /* rest to write in front of buffer */ + while(writep < PORT_BUFFER) /* write till buffer end */ + buffer[writep++] += audio_law_to_s32[*(data++)]; + writep = 0; + } + while(len--) /* write rest */ + buffer[writep++] += audio_law_to_s32[*(data++)]; + } else + { + /* uncompressed data */ + data_16 = (signed short *)param->data.data; + if (len+writep >= PORT_BUFFER) /* data hits the buffer end */ + { + len = len+writep-PORT_BUFFER; /* rest to write in front of buffer */ + while(writep < PORT_BUFFER) /* write till buffer end */ + buffer[writep++] += *(data_16++); + writep = 0; + } + while(len--) /* write rest */ + buffer[writep++] += *(data_16++); + } + } else /* else */ + if (p_record && !must_mix) + { + /* WE MUST RECORD BUT DO NOT MIX */ + if (param->data.compressed) + { + /* compressed data */ + data = param->data.data; + if (len+writep >= PORT_BUFFER) /* data hits the buffer end */ + { + len = len+writep-PORT_BUFFER; /* rest to write in front of buffer */ + while(writep < PORT_BUFFER) /* write till buffer end */ + record[writep++] += audio_law_to_s32[*(data++)]; + writep = 0; + } + while(len--) /* write rest */ + record[writep++] += audio_law_to_s32[*(data++)]; + } else + { + /* uncompressed data */ + data_16 = (signed short *)param->data.data; + if (len+writep >= PORT_BUFFER) /* data hits the buffer end */ + { + len = len+writep-PORT_BUFFER; /* rest to write in front of buffer */ + while(writep < PORT_BUFFER) /* write till buffer end */ + record[writep++] += *(data_16++); + writep = 0; + } + while(len--) /* write rest */ + record[writep++] += *(data_16++); + } + } else + { + /* WE MUST MIX AND MUST RECORD */ + if (param->data.compressed) + { + /* compressed data */ + data = param->data.data; + if (len+writep >= PORT_BUFFER) /* data hits the buffer end */ + { + len = len+writep-PORT_BUFFER; /* rest to write in front of buffer */ + while(writep < PORT_BUFFER) /* write till buffer end */ + { + buffer[writep] += audio_law_to_s32[*data]; + record[writep++] += audio_law_to_s32[*(data++)]; + } + writep = 0; + } + while(len--) /* write rest */ + { + buffer[writep] += audio_law_to_s32[*data]; + record[writep++] += audio_law_to_s32[*(data++)]; + } + } else + { + /* uncompressed data */ + data_16 = (signed short *)param->data.data; + if (len+writep >= PORT_BUFFER) /* data hits the buffer end */ + { + len = len+writep-PORT_BUFFER; /* rest to write in front of buffer */ + while(writep < PORT_BUFFER) /* write till buffer end */ + { + buffer[writep] += *data_16; + record[writep++] += *(data_16++); + } + writep = 0; + } + while(len--) /* write rest */ + { + buffer[writep] += *data_16; + record[writep++] += *(data_16++); + } + } + } + relation->mixer_writep = writep; /* new write pointer */ +// PDEBUG(DEBUG_PORT "written data len=%d port=%d (readp=%d, writep=%d, PORT_BUFFER=%d).\n", param->data.len, param->data.port_id, p_mixer_readp, relation->mixer_writep, PORT_BUFFER); +} + + +/* + * read from the given file as specified in port_set_tone and return sample data + * this data is mixed with the user space mixer (if anything mixed) and + * filled into the buffer as many as given by length. + * if compressed is true, the result in buffer is alaw/ulaw-compressed + * otherwhise it is 16 bit audio. in this case the buffer size must be twice the lenght. + * the length is the number of samples, not bytes in buffer! + */ +int Port::read_audio(unsigned char *buffer, int length, int compressed) +{ + int l,len; + unsigned short temp_buffer[PORT_BUFFER]; /* buffer for up to 32 bit of data */ + int codec_in; /* current codec to use */ + unsigned char *buf_in8; /* buffer pointer for alaw/ulaw/8bit data */ + signed short *buf_in16; /* buffer pointer for alaw/ulaw/8bit data */ + signed short *buf_out16; /* buffer pointer for outgoing audio data */ + signed long *mix_buffer, *mix_buffer2, sample; /* pointer to mixer buffer */ + struct mixer_relation *relation, **relationpointer; + int readp; + int nodata=0; /* to detect 0-length files */ + char filename[128]; + signed short record_buffer[PORT_BUFFER<<1], *rec_buffer; /* buffer of recorded part which will be written (*2 for stereo) */ + unsigned char *rec8_buffer; /* used to send 8-bit audio (wave-8bit, law) */ + int tone_left_before; /* temp variable to determine the change in p_tone_left */ + + /* nothing */ + if (length == 0) + return(0); + + /* just in case, we get too much to do */ + if (length > PORT_BUFFER-1) + length = PORT_BUFFER-1; + + len = length; + buf_in8 = (unsigned char *)temp_buffer; + buf_in16 = (signed short *)temp_buffer; + + codec_in = p_tone_codec; + + /* if there is no tone set, use silence */ + if (p_tone_name[0] == 0) + { + codec_in = CODEC_LAW; +rest_is_silence: + switch(codec_in) + { + case CODEC_LAW: + memset(buf_in8, (options.law=='a')?0x2a:0xff, len); /* silence */ + break; + + case CODEC_MONO: + case CODEC_8BIT: + case CODEC_STEREO: + memset(buf_in16, 0, len<<1); /* silence */ + break; + + default: + PERROR("Software error: no codec during silence\n"); + exit(-1); + } + goto mix_to_buffer; + } + + /* if the file pointer is not open, we open it */ + if (p_tone_fh<0 && p_tone_fetched==NULL) + { + if (p_tone_dir[0]) + { + SPRINT(filename, "%s", p_tone_name); + /* if file does not exist */ + if (!(p_tone_fetched=open_tone_fetched(p_tone_dir, filename, &p_tone_codec, &p_tone_size, &p_tone_left))) + { + SPRINT(filename, "%s/%s/%s", INSTALL_DATA, p_tone_dir, p_tone_name); + /* if file does not exist */ + if ((p_tone_fh=open_tone(filename, &p_tone_codec, &p_tone_size, &p_tone_left)) < 0) + { + PDEBUG(DEBUG_PORT, "PORT(%s) no tone: %s\n", p_name, filename); + goto try_loop; + } + fhuse++; + } + } else + { + SPRINT(filename, "%s", p_tone_name); + /* if file does not exist */ + if ((p_tone_fh=open_tone(filename, &p_tone_codec, &p_tone_size, &p_tone_left)) < 0) + { + PDEBUG(DEBUG_PORT, "PORT(%s) no tone: %s\n", p_name, filename); + goto try_loop; + } + fhuse++; + } + codec_in = p_tone_codec; +//printf("\n\ncodec=%d\n\n\n", p_tone_codec); + PDEBUG(DEBUG_PORT, "PORT(%s) opening %stone: %s\n", p_name, p_tone_fetched?"fetched ":"", filename); + } + +read_more: + /* file descriptor is open read data */ + tone_left_before = p_tone_left; + if (p_tone_fh >= 0) + { + switch(codec_in) + { + case CODEC_LAW: + l = read_tone(p_tone_fh, buf_in8, codec_in, len, p_tone_size, &p_tone_left, p_tone_speed); + if (l<0 || l>len) /* paranoia */ + l=0; + buf_in8 += l; + len -= l; + break; + + case CODEC_8BIT: + l = read_tone(p_tone_fh, buf_in16, codec_in, len, p_tone_size, &p_tone_left, p_tone_speed); + if (l<0 || l>len) /* paranoia */ + l=0; + buf_in16 += l; + len -= l; + break; + + case CODEC_MONO: + l = read_tone(p_tone_fh, buf_in16, codec_in, len, p_tone_size, &p_tone_left, p_tone_speed); + if (l<0 || l>len) /* paranoia */ + l=0; + buf_in16 += l; + len -= l; + break; + + case CODEC_STEREO: + l = read_tone(p_tone_fh, buf_in16, codec_in, len, p_tone_size, &p_tone_left, p_tone_speed); + if (l<0 || l>len) /* paranoia */ + l=0; + buf_in16 += l; + len -= l; + break; + + default: + PERROR("Software error: current tone reading has no codec\n"); + exit(-1); + } + } + if (p_tone_fetched) + { + switch(codec_in) + { + case CODEC_LAW: + l = read_tone_fetched(&p_tone_fetched, buf_in8, codec_in, len, p_tone_size, &p_tone_left, p_tone_speed); + if (l<0 || l>len) /* paranoia */ + l=0; + buf_in8 += l; + len -= l; + break; + + case CODEC_MONO: + l = read_tone_fetched(&p_tone_fetched, buf_in16, codec_in, len, p_tone_size, &p_tone_left, p_tone_speed); + if (l<0 || l>len) /* paranoia */ + l=0; + buf_in16 += l; + len -= l; + break; + + default: + PERROR("Software error: current tone reading has no codec\n"); + exit(-1); + } + } + + /* if counter is enabled, we check if we have a change */ + if (p_tone_counter && p_tone_size>=0 && ACTIVE_EPOINT(p_epointlist)) + { + /* if we jumed to the next second */ + if (((p_tone_size-p_tone_left)/8000) != (p_tone_size-tone_left_before)/8000) + { +//printf("\nsize=%d left=%d\n\n",p_tone_size,p_tone_left); + struct message *message; + message = message_create(p_serial, ACTIVE_EPOINT(p_epointlist), PORT_TO_EPOINT, MESSAGE_TONE_COUNTER); + message->param.counter.current = (p_tone_size-p_tone_left)/8000; + message->param.counter.max = -1; + message_put(message); + } + } + + if (len==0) + goto mix_to_buffer; + + if (p_tone_fh >= 0) + { + close(p_tone_fh); + p_tone_fh = -1; + fhuse--; + } + p_tone_fetched = NULL; + + if (l) + nodata=0; + + /* if the file has 0-length */ + if (nodata>1) + { + PDEBUG(DEBUG_PORT, "PORT(%s) 0-length loop: %s\n", p_name, filename); + p_tone_name[0]=0; + p_tone_dir[0]=0; + goto rest_is_silence; + } + + /* if eof is reached, or if the normal file cannot be opened, continue with the loop file if possible */ +try_loop: + if (p_tone_eof && ACTIVE_EPOINT(p_epointlist)) + { + struct message *message; + message = message_create(p_serial, ACTIVE_EPOINT(p_epointlist), PORT_TO_EPOINT, MESSAGE_TONE_EOF); + message_put(message); + } + + if (p_tone_dir[0]) + { + /* if file does not exist */ + SPRINT(filename, "%s_loop", p_tone_name); + if (!(p_tone_fetched=open_tone_fetched(p_tone_dir, filename, &p_tone_codec, &p_tone_size, &p_tone_left))) + { + SPRINT(filename, "%s/%s/%s_loop", INSTALL_DATA, p_tone_dir, p_tone_name); + /* if file does not exist */ + if ((p_tone_fh=open_tone(filename, &p_tone_codec, &p_tone_size, &p_tone_left)) < 0) + { + PDEBUG(DEBUG_PORT, "PORT(%s) no tone loop: %s\n",p_name, filename); + p_tone_dir[0] = '\0'; + p_tone_name[0] = '\0'; + // codec_in = CODEC_LAW; + goto rest_is_silence; + } + fhuse++; + } + } else + { + SPRINT(filename, "%s_loop", p_tone_name); + /* if file does not exist */ + if ((p_tone_fh=open_tone(filename, &p_tone_codec, &p_tone_size, &p_tone_left)) < 0) + { + PDEBUG(DEBUG_PORT, "PORT(%s) no tone loop: %s\n",p_name, filename); + p_tone_dir[0] = '\0'; + p_tone_name[0] = '\0'; + // codec_in = CODEC_LAW; + goto rest_is_silence; + } + fhuse++; + } + codec_in = p_tone_codec; + nodata++; + PDEBUG(DEBUG_PORT, "PORT(%s) opening %stone: %s\n", p_name, p_tone_fetched?"fetched ":"", filename); + + /* now we have opened the loop */ + goto read_more; + + /* ********** + * now we mix + * we take the buffer content and mix the mixer_buffer to what we got + */ +mix_to_buffer: + /* release all writepointer which will underrun, since writing of + * remote port data is too slow + */ + relation = p_mixer_rel; + readp = p_mixer_readp; + relationpointer = &(p_mixer_rel); + while(relation) /* if no relation, this is skipped */ + { + /* NOTE: if writep and readp are equal, the distance ist max + * == PORT_BUFFER + */ + if (((relation->mixer_writep-readp-1+PORT_BUFFER)%PORT_BUFFER)+1 <= length) /* underrun */ + { + /* remove port relation in order to resync. + * this is also caused by ports which do not transmit + * anymore. + */ +#ifdef MIXER_DEBUG + PERROR("PORT(%s) Buffer underrun, source port is sending too slow or stopped sending, removing relation. (readp=%d, writep=%d, PORT_BUFFER=%d)\n", p_name, readp, relation->mixer_writep, PORT_BUFFER); +#endif + + *relationpointer = relation->next; + memset(relation, 0, sizeof(struct mixer_relation)); + free(relation); + pmemuse--; + relation = *relationpointer; + continue; + } + relationpointer = &(relation->next); + relation = relation->next; + } + + /* if we do recording, we write the record data and the buffer data to the record fp and increment record_count */ + if (p_record) + switch (p_record_type) + { + case CODEC_MONO: + /* convert from mixer to uncompressed 16 bit mono audio */ + switch(codec_in) + { + case CODEC_MONO: + case CODEC_STEREO: + case CODEC_8BIT: + len = length; + mix_buffer = p_record_buffer; + rec_buffer = record_buffer; + buf_in16 = (signed short *)temp_buffer; + if (len+readp >= PORT_BUFFER) /* data hits the buffer end */ + { + len = len+readp-PORT_BUFFER; /* rest to read from buffer start */ + while(readp < PORT_BUFFER) + { /* mix till buffer end */ + sample = mix_buffer[readp]+*(buf_in16++); + mix_buffer[readp++] = 0; + if (sample < -32767) + sample = -32767; + if (sample > 32767) + sample = 32767; + *(rec_buffer++) = sample; + } + readp = 0; + } + while(len--) /* write rest */ + { /* mix till buffer end */ + sample = mix_buffer[readp]+*(buf_in16++); + mix_buffer[readp++] = 0; + if (sample < -32767) + sample = -32767; + if (sample > 32767) + sample = 32767; + *(rec_buffer++) = sample; + } + + /* restore (changed) read pointer for further use */ + readp = p_mixer_readp; + + /* now write the rec_buffer to the file */ + if (p_record_skip) + { + p_record_skip -= length; + if (p_record_skip < 0) + p_record_skip = 0; + } else + { + fwrite(record_buffer, (length<<1), 1, p_record); + p_record_length = (length<<1) + p_record_length; + } + break; + + case CODEC_LAW: + len = length; + mix_buffer = p_record_buffer; + rec_buffer = record_buffer; + buf_in8 = (unsigned char *)temp_buffer; + if (len+readp >= PORT_BUFFER) /* data hits the buffer end */ + { + len = len+readp-PORT_BUFFER; /* rest to read from buffer start */ + while(readp < PORT_BUFFER) + { /* mix till buffer end */ + sample = mix_buffer[readp]+audio_law_to_s32[*(buf_in8++)]; + mix_buffer[readp++] = 0; + if (sample < -32767) + sample = -32767; + if (sample > 32767) + sample = 32767; + *(rec_buffer++) = sample; + } + readp = 0; + } + while(len--) /* write rest */ + { /* mix till buffer end */ + sample = mix_buffer[readp]+audio_law_to_s32[*(buf_in8++)]; + mix_buffer[readp++] = 0; + if (sample < -32767) + sample = -32767; + if (sample > 32767) + sample = 32767; + *(rec_buffer++) = sample; + } + + /* restore (changed) read pointer for further use */ + readp = p_mixer_readp; + + /* now write the rec_buffer to the file */ + if (p_record_skip) + { + p_record_skip -= length; + if (p_record_skip < 0) + p_record_skip = 0; + } else + { + fwrite(record_buffer, (length<<1), 1, p_record); + p_record_length = (length<<1) + p_record_length; + } + break; + + } + break; + + case CODEC_STEREO: + /* convert from mixer to uncompressed 16 bit stereo audio */ + switch(codec_in) + { + case CODEC_MONO: + case CODEC_STEREO: + case CODEC_8BIT: + len = length; + mix_buffer = p_record_buffer; + mix_buffer2 = p_stereo_buffer; + rec_buffer = record_buffer; + buf_in16 = (signed short *)temp_buffer; + if (len+readp >= PORT_BUFFER) /* data hits the buffer end */ + { + len = len+readp-PORT_BUFFER; /* rest to read from buffer start */ + while(readp < PORT_BUFFER) + { /* mix till buffer end */ + sample = mix_buffer[readp]+*(buf_in16++); + mix_buffer[readp] = 0; + if (sample < -32767) + sample = -32767; + if (sample > 32767) + sample = 32767; + *(rec_buffer++) = sample; + + *(rec_buffer++) = mix_buffer2[readp]; + mix_buffer2[readp++] = 0; + } + readp = 0; + } + while(len--) /* write rest */ + { /* mix till buffer end */ + sample = mix_buffer[readp]+*(buf_in16++); + mix_buffer[readp] = 0; + if (sample < -32767) + sample = -32767; + if (sample > 32767) + sample = 32767; + *(rec_buffer++) = sample; + *(rec_buffer++) = mix_buffer2[readp]; + mix_buffer2[readp++] = 0; + } + + /* restore (changed) read pointer for further use */ + readp = p_mixer_readp; + + /* now write the rec_buffer to the file */ + if (p_record_skip) + { + p_record_skip -= length; + if (p_record_skip < 0) + p_record_skip = 0; + } else + { + fwrite(record_buffer, (length<<2), 1, p_record); + p_record_length = (length<<2) + p_record_length; + } + break; + + case CODEC_LAW: + len = length; + mix_buffer = p_record_buffer; + mix_buffer2 = p_stereo_buffer; + rec_buffer = record_buffer; + buf_in8 = (unsigned char *)temp_buffer; + if (len+readp >= PORT_BUFFER) /* data hits the buffer end */ + { + len = len+readp-PORT_BUFFER; /* rest to read from buffer start */ + while(readp < PORT_BUFFER) + { /* mix till buffer end */ + sample = mix_buffer[readp]+audio_law_to_s32[*(buf_in8++)]; + mix_buffer[readp] = 0; + if (sample < -32767) + sample = -32767; + if (sample > 32767) + sample = 32767; + *(rec_buffer++) = sample; + + *(rec_buffer++) = mix_buffer2[readp]; + mix_buffer2[readp++] = 0; + } + readp = 0; + } + while(len--) /* write rest */ + { /* mix till buffer end */ + sample = mix_buffer[readp]+audio_law_to_s32[*(buf_in8++)]; + mix_buffer[readp] = 0; + if (sample < -32767) + sample = -32767; + if (sample > 32767) + sample = 32767; + *(rec_buffer++) = sample; + *(rec_buffer++) = mix_buffer2[readp]; + mix_buffer2[readp++] = 0; + } + + /* restore (changed) read pointer for further use */ + readp = p_mixer_readp; + + /* now write the rec_buffer to the file */ + if (p_record_skip) + { + p_record_skip -= length; + if (p_record_skip < 0) + p_record_skip = 0; + } else + { + fwrite(record_buffer, (length<<2), 1, p_record); + p_record_length = (length<<2) + p_record_length; + } + break; + } + break; + + case CODEC_8BIT: + /* convert from mixer to uncompressed 8 bit mono audio */ + switch(codec_in) + { + case CODEC_MONO: + case CODEC_STEREO: + case CODEC_8BIT: + len = length; + mix_buffer = p_record_buffer; + rec8_buffer = (unsigned char *)record_buffer; + buf_in16 = (signed short *)temp_buffer; + if (len+readp >= PORT_BUFFER) /* data hits the buffer end */ + { + len = len+readp-PORT_BUFFER; /* rest to read from buffer start */ + while(readp < PORT_BUFFER) + { /* mix till buffer end */ + sample = mix_buffer[readp]+*(buf_in16++); + mix_buffer[readp++] = 0; + if (sample < -32767) + sample = -32767; + if (sample > 32767) + sample = 32767; + *(rec8_buffer++) = (sample>>8)+0x80; + } + readp = 0; + } + while(len--) /* write rest */ + { /* mix till buffer end */ + sample = mix_buffer[readp]+*(buf_in16++); + mix_buffer[readp++] = 0; + if (sample < -32767) + sample = -32767; + if (sample > 32767) + sample = 32767; + *(rec8_buffer++) = (sample>>8)+0x80; + } + + /* restore (changed) read pointer for further use */ + readp = p_mixer_readp; + + /* now write the rec_buffer to the file */ + if (p_record_skip) + { + p_record_skip -= length; + if (p_record_skip < 0) + p_record_skip = 0; + } else + { + fwrite(record_buffer, (length), 1, p_record); + p_record_length = (length) + p_record_length; + } + break; + + case CODEC_LAW: + len = length; + mix_buffer = p_record_buffer; + rec8_buffer = (unsigned char *)record_buffer; + buf_in8 = (unsigned char *)temp_buffer; + if (len+readp >= PORT_BUFFER) /* data hits the buffer end */ + { + len = len+readp-PORT_BUFFER; /* rest to read from buffer start */ + while(readp < PORT_BUFFER) + { /* mix till buffer end */ + sample = mix_buffer[readp]+audio_law_to_s32[*(buf_in8++)]; + mix_buffer[readp++] = 0; + if (sample < -32767) + sample = -32767; + if (sample > 32767) + sample = 32767; + *(rec8_buffer++) = (sample>>8)+0x80; + } + readp = 0; + } + while(len--) /* write rest */ + { /* mix till buffer end */ + sample = mix_buffer[readp]+audio_law_to_s32[*(buf_in8++)]; + mix_buffer[readp++] = 0; + if (sample < -32767) + sample = -32767; + if (sample > 32767) + sample = 32767; + *(rec8_buffer++) = (sample>>8)+0x80; + } + + /* restore (changed) read pointer for further use */ + readp = p_mixer_readp; + + /* now write the rec_buffer to the file */ + if (p_record_skip) + { + p_record_skip -= length; + if (p_record_skip < 0) + p_record_skip = 0; + } else + { + fwrite(record_buffer, (length), 1, p_record); + p_record_length = (length) + p_record_length; + } + break; + + } + break; + + case CODEC_LAW: + case CODEC_OFF: /* if no codec is specified, the recorded data will be stored as LAW */ + /* convert from mixer to law */ + switch(codec_in) + { + case CODEC_MONO: + case CODEC_STEREO: + case CODEC_8BIT: + len = length; + mix_buffer = p_record_buffer; + rec8_buffer = (unsigned char *)record_buffer; + buf_in16 = (signed short *)temp_buffer; + if (len+readp >= PORT_BUFFER) /* data hits the buffer end */ + { + len = len+readp-PORT_BUFFER; /* rest to read from buffer start */ + while(readp < PORT_BUFFER) + { /* mix till buffer end */ + sample = mix_buffer[readp]+*(buf_in16++); + mix_buffer[readp++] = 0; + if (sample < -32767) + sample = -32767; + if (sample > 32767) + sample = 32767; + *(rec8_buffer++) = audio_s16_to_law[sample & 0xffff]; + } + readp = 0; + } + while(len--) /* write rest */ + { /* mix till buffer end */ + sample = mix_buffer[readp]+*(buf_in16++); + mix_buffer[readp++] = 0; + if (sample < -32767) + sample = -32767; + if (sample > 32767) + sample = 32767; + *(rec8_buffer++) = audio_s16_to_law[sample & 0xffff]; + } + + /* restore (changed) read pointer for further use */ + readp = p_mixer_readp; + + /* now write the rec_buffer to the file */ + if (p_record_skip) + { + p_record_skip -= length; + if (p_record_skip < 0) + p_record_skip = 0; + } else + { + fwrite(record_buffer, (length), 1, p_record); + p_record_length = (length) + p_record_length; + } + break; + + case CODEC_LAW: + len = length; + mix_buffer = p_record_buffer; + rec8_buffer = (unsigned char *)record_buffer; + buf_in8 = (unsigned char *)temp_buffer; + if (len+readp >= PORT_BUFFER) /* data hits the buffer end */ + { + len = len+readp-PORT_BUFFER; /* rest to read from buffer start */ + while(readp < PORT_BUFFER) + { /* mix till buffer end */ + sample = mix_buffer[readp]+audio_law_to_s32[*(buf_in8++)]; + mix_buffer[readp++] = 0; + if (sample < -32767) + sample = -32767; + if (sample > 32767) + sample = 32767; + *(rec8_buffer++) = audio_s16_to_law[sample & 0xffff]; + } + readp = 0; + } + while(len--) /* write rest */ + { /* mix till buffer end */ + sample = mix_buffer[readp]+audio_law_to_s32[*(buf_in8++)]; + mix_buffer[readp++] = 0; + if (sample < -32767) + sample = -32767; + if (sample > 32767) + sample = 32767; + *(rec8_buffer++) = audio_s16_to_law[sample & 0xffff]; + } + + /* restore (changed) read pointer for further use */ + readp = p_mixer_readp; + + /* now write the rec_buffer to the file */ + if (p_record_skip) + { + p_record_skip -= length; + if (p_record_skip < 0) + p_record_skip = 0; + } else + { + fwrite(record_buffer, (length), 1, p_record); + p_record_length = (length) + p_record_length; + } + break; + } + break; + } + + /* if we have no transmitting relation, we do not need read mixer */ + if (!p_mixer_rel) + { /* nothing mixed to(no rel), so we are just done */ + if (compressed) + { + /* compress to law */ + len = length; + buf_in8 = (unsigned char *)temp_buffer; + buf_in16 = (signed short *)temp_buffer; + buf_out16 = (signed short *)buffer; + switch(codec_in) + { + case CODEC_MONO: + case CODEC_STEREO: + case CODEC_8BIT: + while(len--) + *(buffer++) = audio_s16_to_law[*(buf_in16++) & 0xffff]; + break; + + case CODEC_LAW: + memcpy(buffer, temp_buffer, length); + break; + + default: + PERROR("Software error: current tone for unmixed & uncompressed, has no codec\n"); + exit(-1); + } + } else + { + /* uncompress law files */ + len = length; + buf_in8 = (unsigned char *)temp_buffer; + buf_in16 = (signed short *)temp_buffer; + buf_out16 = (signed short *)buffer; + switch(codec_in) + { + case CODEC_MONO: + case CODEC_STEREO: + case CODEC_8BIT: + while(len--) + (*(buf_out16++)) = *(buf_in16++); + break; + + case CODEC_LAW: + while(len--) + (*(buf_out16++)) = audio_law_to_s32[*(buf_in8++)]; + break; + + default: + PERROR("Software error: current tone for unmixed & uncompressed, has no codec\n"); + exit(-1); + } + } + return(length); + } + +// PDEBUG(DEBUG_PORT, "PORT(%s) mixing %d bytes. (readp=%d, PORT_BUFFER=%d)\n", p_name, length, readp, PORT_BUFFER); + /* now we got our stuff and we'll mix it baby */ + + len = length; + mix_buffer = p_mixer_buffer; + if (compressed) + { + /* convert from mixer to compressed law data */ + switch(codec_in) + { + case CODEC_MONO: + case CODEC_STEREO: + case CODEC_8BIT: + buf_in16 = (signed short *)temp_buffer; + if (len+readp >= PORT_BUFFER) /* data hits the buffer end */ + { + len = len+readp-PORT_BUFFER; /* rest to read from buffer start */ + while(readp < PORT_BUFFER) + { /* mix till buffer end */ + sample = mix_buffer[readp]+*(buf_in16++); + mix_buffer[readp++] = 0; + if (sample < -32767) + sample = -32767; + if (sample > 32767) + sample = 32767; + *(buffer++) = audio_s16_to_law[sample & 0xffff]; + } + readp = 0; + } + while(len--) /* write rest */ + { /* mix till buffer end */ + sample = mix_buffer[readp]+*(buf_in16++); + mix_buffer[readp++] = 0; + if (sample < -32767) + sample = -32767; + if (sample > 32767) + sample = 32767; + *(buffer++) = audio_s16_to_law[sample & 0xffff]; + } + break; + + case CODEC_LAW: + buf_in8 = (unsigned char *)temp_buffer; + if (len+readp >= PORT_BUFFER) /* data hits the buffer end */ + { + len = len+readp-PORT_BUFFER; /* rest to read from buffer start */ + while(readp < PORT_BUFFER) + { /* mix till buffer end */ + sample = mix_buffer[readp]+audio_law_to_s32[*(buf_in8++)]; + mix_buffer[readp++] = 0; + if (sample < -32767) + sample = -32767; + if (sample > 32767) + sample = 32767; + *(buffer++) = audio_s16_to_law[sample & 0xffff]; + } + readp = 0; + } + while(len--) /* write rest */ + { /* mix till buffer end */ + sample = mix_buffer[readp]+audio_law_to_s32[*(buf_in8++)]; + mix_buffer[readp++] = 0; + if (sample < -32767) + sample = -32767; + if (sample > 32767) + sample = 32767; + *(buffer++) = audio_s16_to_law[sample & 0xffff]; + } + break; + + default: + PERROR("Software error: current tone for compressed data has no codec\n"); + exit(-1); + } + } else + { + /* convert from mixer to uncompressed 16 bit audio */ + switch(codec_in) + { + case CODEC_MONO: + case CODEC_STEREO: + case CODEC_8BIT: + buf_in16 = (signed short *)temp_buffer; + buf_out16 = (signed short *)buffer; + if (len+readp >= PORT_BUFFER) /* data hits the buffer end */ + { + len = len+readp-PORT_BUFFER; /* rest to read from buffer start */ + while(readp < PORT_BUFFER) + { /* mix till buffer end */ + sample = mix_buffer[readp]+*(buf_in16++); + mix_buffer[readp++] = 0; + if (sample < -32767) + sample = -32767; + if (sample > 32767) + sample = 32767; + *(buf_out16++) = sample; + } + readp = 0; + } + while(len--) /* write rest */ + { /* mix till buffer end */ + sample = mix_buffer[readp]+*(buf_in16++); + mix_buffer[readp++] = 0; + if (sample < -32767) + sample = -32767; + if (sample > 32767) + sample = 32767; + *(buf_out16++) = sample; + } + break; + + case CODEC_LAW: + buf_in8 = (unsigned char *)temp_buffer; + buf_out16 = (signed short *)buffer; + if (len+readp >= PORT_BUFFER) /* data hits the buffer end */ + { + len = len+readp-PORT_BUFFER; /* rest to read from buffer start */ + while(readp < PORT_BUFFER) + { /* mix till buffer end */ + sample = mix_buffer[readp]+audio_law_to_s32[*(buf_in8++)]; + mix_buffer[readp++] = 0; + if (sample < -32767) + sample = -32767; + if (sample > 32767) + sample = 32767; + *(buf_out16++) = sample; + } + readp = 0; + } + while(len--) /* write rest */ + { /* mix till buffer end */ + sample = mix_buffer[readp]+audio_law_to_s32[*(buf_in8++)]; + mix_buffer[readp++] = 0; + if (sample < -32767) + sample = -32767; + if (sample > 32767) + sample = 32767; + *(buf_out16++) = sample; + } + break; + + default: + PERROR("Software error: current tone for uncompressed data has no codec\n"); + exit(-1); + } + } + + p_mixer_readp = readp; /* new read pointer */ + + return(length); +} + + +/* dummy handler */ +int Port::handler(void) +{ + return(0); +} + +/* endpoint sends messages to the port + * this is called by the message_epoint inherited by child classes + * therefor a return=1 means: stop, no more processing + */ +//extern struct message *dddebug; +int Port::message_epoint(unsigned long epoint_id, int message_id, union parameter *param) +{ + /* check if we got audio data from one remote port */ + switch(message_id) + { + case MESSAGE_TONE: /* play tone */ + PDEBUG(DEBUG_PORT, "PORT(%s) isdn port with (caller id %s) setting tone '%s' dir '%s'\n", p_name, p_callerinfo.id, param->tone.name, param->tone.dir); + set_tone(param->tone.dir,param->tone.name); + return(1); + + case MESSAGE_DATA: +//printf("port=%s, epoint=%d\n",p_cardname, epoint->e_serial); + mixer(param); + return(1); + + case MESSAGE_VBOX_TONE: /* play tone of answering machine */ + PDEBUG(DEBUG_PORT, "PORT(%s) set answering machine tone '%s' '%s'\n", p_name, param->tone.dir, param->tone.name); + set_vbox_tone(param->tone.dir, param->tone.name); + return(1); + + case MESSAGE_VBOX_PLAY: /* play recording of answering machine */ + PDEBUG(DEBUG_PORT, "PORT(%s) set answering machine file to play '%s' (offset %d seconds)\n", p_name, param->play.file, param->play.offset); + set_vbox_play(param->play.file, param->play.offset); + return(1); + + case MESSAGE_VBOX_PLAY_SPEED: /* set speed of playback (recording of answering machine) */ + PDEBUG(DEBUG_PORT, "PORT(%s) set answering machine playback speed %d (times)\n", p_name, param->speed); + set_vbox_speed(param->speed); + return(1); + + } + + return(0); +} + + +/* + * special function generate individual isdn debug logs + */ +void Port::printisdn(char *fmt, ...) +{ + char buffer[4096]; + char name[128]; + va_list args; + FILE *fp; + + va_start(args,fmt); + VUNPRINT(buffer,sizeof(buffer)-1,fmt,args); + buffer[sizeof(buffer)-1]=0; + va_end(args); + + PDEBUG_RUNTIME(NULL, 0, DEBUG_PORT, "PORT(%s serial=%ld): %s\n", p_name, p_serial, buffer); + if (options.deb & DEBUG_LOG) + { + SPRINT(name, "%s/debug_%s.log", INSTALL_DATA, p_name); + if (!(fp = fopen(name, "a"))) + return; + + fprintf(fp, "%04d.%02d.%02d %02d:%02d:%02d %s(%ld): %s", now_tm->tm_year+1900, now_tm->tm_mon+1, now_tm->tm_mday, now_tm->tm_hour, now_tm->tm_min, now_tm->tm_sec, p_name, p_serial, buffer); + fclose(fp); + } +} + + +/* wave header structure */ +struct fmt { + unsigned short stereo; /* 1 = mono, 2 = stereo */ + unsigned short channels; /* number of channels */ + unsigned long sample_rate; /* sample rate */ + unsigned long data_rate; /* data rate */ + unsigned short bytes_sample; /* bytes per sample (all channels) */ + unsigned short bits_sample; /* bits per sample (one channel) */ +}; + + +/* + * open record file (actually a wave file with empty header which will be + * written before close, because we do not know the size yet) + * type=1 record annoucement, type=0 record audio stream, type=2 record vbox + */ +int Port::open_record(int type, int vbox, int skip, char *terminal, int anon_ignore, char *vbox_email, int vbox_email_file) +{ + /* RIFFxxxxWAVEfmt xxxx(fmt-size)dataxxxx... */ + char dummyheader[8+4+8+sizeof(fmt)+8]; + char filename[256]; + + if (!terminal) + { + PERROR("Port(%d) not a terminal\n", p_serial); + return(0); + } + SCPY(p_record_extension, terminal); + p_record_anon_ignore = anon_ignore; + SCPY(p_record_vbox_email, vbox_email); + p_record_vbox_email_file = vbox_email_file; + + if (p_record) + { + PERROR("Port(%d) already recording\n", p_serial); + return(0); + } + + if (vbox != 0) + SPRINT(filename, "%s/%s/%s/vbox", INSTALL_DATA, options.extensions_dir, p_record_extension); + else + SPRINT(filename, "%s/%s/%s/recordings", INSTALL_DATA, options.extensions_dir, p_record_extension); + if (mkdir(filename, 0755) < 0) + { + if (errno != EEXIST) + { + PERROR("Port(%d) cannot create directory '%s'\n", p_serial, filename); + return(0); + } + } + + if (vbox == 1) + UPRINT(strchr(filename,'\0'), "/announcement"); + else + UPRINT(strchr(filename,'\0'), "/%04d-%02d-%02d_%02d%02d%02d", now_tm->tm_year+1900, now_tm->tm_mon+1, now_tm->tm_mday, now_tm->tm_hour, now_tm->tm_min, now_tm->tm_sec); + if (vbox == 2) + { + p_record_vbox_year = now_tm->tm_year; + p_record_vbox_mon = now_tm->tm_mon; + p_record_vbox_mday = now_tm->tm_mday; + p_record_vbox_hour = now_tm->tm_hour; + p_record_vbox_min = now_tm->tm_min; + } + + /* check, if file exists (especially when an extension calls the same extension) */ + if (vbox != 1) + if ((p_record = fopen(filename, "r"))) + { + fclose(p_record); + SCAT(filename, "_2nd"); + } + + p_record = fopen(filename, "w"); + if (!p_record) + { + PERROR("Port(%d) cannot record because file cannot be opened '%s'\n", p_serial, filename); + return(0); + } + fduse++; + + p_record_type = type; + p_record_vbox = vbox; + p_record_skip = skip; + p_record_length = 0; + switch(p_record_type) + { + case CODEC_MONO: + case CODEC_STEREO: + case CODEC_8BIT: + fwrite(dummyheader, sizeof(dummyheader), 1, p_record); + break; + + case CODEC_LAW: + break; + } + UCPY(p_record_filename, filename); + + PDEBUG(DEBUG_PORT, "Port(%d) recording started with file name '%s'\n", p_serial, filename); + return(1); +} + + +/* + * close the recoding file, put header in front and rename + */ +void Port::close_record(int beep) +{ + static signed long beep_mono[] = {-10000, 10000, -10000, 10000, -10000, 10000, -10000, 10000, -10000, 10000, -10000, 10000, -10000, 10000, -10000, 10000}; + static unsigned char beep_8bit[] = {48, 208, 48, 208, 48, 208, 48, 208, 48, 208, 48, 208, 48, 208, 48, 208, 48, 208, 48, 208, 48, 208, 48, 208, 48, 208, 48, 208, 48, 208, 48, 208, 48, 208}; + unsigned long size, wsize; + struct fmt fmt; + char filename[512], indexname[512]; + FILE *fp; + int i, ii; + char number[256], callerid[256]; + char *p; + struct caller_info callerinfo; + char *valid_chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890_.-!$%&/()=+*;~"; + + if (!p_record) + return; + + memcpy(&callerinfo, &p_callerinfo, sizeof(struct caller_info)); + apply_callerid_restriction(p_record_anon_ignore, -1, callerinfo.id, &callerinfo.ntype, &callerinfo.present, &callerinfo.screen, callerinfo.voip, callerinfo.intern, callerinfo.name); + + SCPY(number, p_dialinginfo.number); + SCPY(callerid, numberrize_callerinfo(callerinfo.id, callerinfo.ntype)); + if (callerid[0] == '\0') + { + if (callerinfo.present == INFO_PRESENT_RESTRICTED) + UCPY(callerid,"anonymous"); + else + UCPY(callerid,"unknown"); + } + + /* change verboten digits */ + p = callerid; + while((p=strchr(p,'*'))) + *(p++) = 'x'; + p = callerid; + while((p=strchr(p,'/'))) + *(p++) = 'x'; + p = number; + while((p=strchr(p,'*'))) + *(p++) = 'x'; + p = number; + while((p=strchr(p,'/'))) + *(p++) = 'x'; + i = 0; + ii = strlen(callerid); + while(i < ii) + { + if (!strchr(valid_chars, callerid[i])) + callerid[i] = '_'; + i++; + } + i = 0; + ii = strlen(number); + while(i < ii) + { + if (!strchr(valid_chars, number[i])) + number[i] = '_'; + i++; + } + + /* add beep to the end of recording */ + if (beep) + switch(p_record_type) + { + case CODEC_MONO: + i = 0; + while(i < beep) + { + fwrite(beep_mono, sizeof(beep_mono), 1, p_record); + i += sizeof(beep_mono); + p_record_length += sizeof(beep_mono); + } + break; + case CODEC_8BIT: + i = 0; + while(i < beep) + { + fwrite(beep_8bit, sizeof(beep_8bit), 1, p_record); + i += sizeof(beep_8bit); + p_record_length += sizeof(beep_8bit); + } + break; +#if 0 + case CODEC_LAW: + i = 0; + while(i < beep) + { + fwrite(beep_law, sizeof(beep_law), 1, p_record); + i += sizeof(beep_law); + p_record_length += sizeof(beep_law); + } + break; +#endif + default: + PERROR("codec %d not supported for beep adding\n", p_record_type); + } + + /* complete header */ + switch(p_record_type) + { + case CODEC_MONO: + case CODEC_STEREO: + case CODEC_8BIT: + /* cue */ + fprintf(p_record, "cue %c%c%c%c%c%c%c%c", 4, 0, 0, 0, 0,0,0,0); + + /* LIST */ + fprintf(p_record, "LIST%c%c%c%cadtl", 4, 0, 0, 0); + + /* go to header */ + fseek(p_record, 0, SEEK_SET); + + /* WAVEfmt xxxx(fmt-size)dataxxxx[data]cue xxxx0000LISTxxxxadtl*/ + size = p_record_length; + wsize = 4+8+sizeof(fmt)+8+size+8+4+8+4; + + /* RIFF */ + fprintf(p_record, "RIFF%c%c%c%c", (unsigned char)(wsize&0xff), (unsigned char)((wsize>>8)&0xff), (unsigned char)((wsize>>16)&0xff), (unsigned char)(wsize>>24)); + + /* WAVE */ + fprintf(p_record, "WAVE"); + + /* fmt */ + fprintf(p_record, "fmt %c%c%c%c", sizeof(fmt), 0, 0, 0); + switch(p_record_type) + { + case CODEC_MONO: + fmt.stereo = 1; + fmt.channels = 1; + fmt.sample_rate = 8000; /* samples/sec */ + fmt.data_rate = 16000; /* full data rate */ + fmt.bytes_sample = 2; /* all channels */ + fmt.bits_sample = 16; /* one channel */ + break; + + case CODEC_STEREO: + fmt.stereo = 1; + fmt.channels = 2; + fmt.sample_rate = 8000; /* samples/sec */ + fmt.data_rate = 32000; /* full data rate */ + fmt.bytes_sample = 4; /* all channels */ + fmt.bits_sample = 16; /* one channel */ + break; + + case CODEC_8BIT: + fmt.stereo = 1; + fmt.channels = 1; + fmt.sample_rate = 8000; /* samples/sec */ + fmt.data_rate = 8000; /* full data rate */ + fmt.bytes_sample = 1; /* all channels */ + fmt.bits_sample = 8; /* one channel */ + break; + } + fwrite(&fmt, sizeof(fmt), 1, p_record); + + /* data */ + fprintf(p_record, "data%c%c%c%c", (unsigned char)(size&0xff), (unsigned char)((size>>8)&0xff), (unsigned char)((size>>16)&0xff), (unsigned char)(size>>24)); + + /* rename file */ + if (p_record_vbox == 1) + SPRINT(filename, "%s.wav", p_record_filename); + else + SPRINT(filename, "%s_%s-%s.wav", p_record_filename, callerid, number); + break; + + case CODEC_LAW: + /* rename file */ + if (p_record_vbox == 1) + SPRINT(filename, "%s.isdn", p_record_filename); + else + SPRINT(filename, "%s_%s-%s.isdn", p_record_filename, callerid, number); + break; + + default: + if (p_record_vbox == 1) + SPRINT(filename, "%s.unknown", p_record_filename); + else + SPRINT(filename, "%s_%s-%s.unknown", p_record_filename, callerid, number); + } + + fclose(p_record); + fduse--; + p_record = NULL; + + if (rename(p_record_filename, filename) < 0) + { + PERROR("Port(%d) cannot rename from '%s' to '%s'\n", p_serial, p_record_filename, filename); + return; + } + + PDEBUG(DEBUG_PORT, "Port(%d) recording is written and renamed to '%s' and must have the following size:%lu raw:%lu samples:%lu\n", p_serial, filename, wsize+8, size, size>>1); + + if (p_record_vbox == 2) + { + SPRINT(indexname, "%s/%s/%s/vbox/index", INSTALL_DATA, options.extensions_dir, p_record_extension); + if ((fp = fopen(indexname,"a"))) + { + fduse++; + + /* remove path from file name */ + p = filename; + while(strchr(p, '/')) + p = strchr(p, '/')+1; + fprintf(fp, "%s %d %d %d %d %d %s\n", p, p_record_vbox_year, p_record_vbox_mon, p_record_vbox_mday, p_record_vbox_hour, p_record_vbox_min, callerid); + + fclose(fp); + fduse--; + } else + { + PERROR("Port(%d) cannot open index file '%s' to append.\n", p_serial, indexname); + } + + /* send email with sample*/ + if (p_record_vbox_email[0]) + { + send_mail(p_record_vbox_email_file?filename:(char *)"", callerid, callerinfo.intern, callerinfo.name, p_record_vbox_email, p_record_vbox_year, p_record_vbox_mon, p_record_vbox_mday, p_record_vbox_hour, p_record_vbox_min, p_record_extension); + } + } +} + + + diff --git a/port.h b/port.h new file mode 100644 index 0000000..688faa6 --- /dev/null +++ b/port.h @@ -0,0 +1,238 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** port header file ** +** ** +\*****************************************************************************/ + +#ifndef PORT_HEADER +#define PORT_HEADER + +/* type of port */ +#define PORT_TYPE_NULL 0x0000 +#define PORT_CLASS_mISDN 0x0100 +#define PORT_CLASS_MASK 0xff00 +#define PORT_CLASS_mISDN_DSS1 0x0110 +#define PORT_CLASS_mISDN_MASK 0xfff0 + /* nt-mode */ +#define PORT_TYPE_DSS1_NT_IN 0x0111 +#define PORT_TYPE_DSS1_NT_OUT 0x0112 + /* te-mode */ +#define PORT_TYPE_DSS1_TE_IN 0x0113 +#define PORT_TYPE_DSS1_TE_OUT 0x0114 + /* sip */ +#define PORT_TYPE_SIP_IN 0x0121 +#define PORT_TYPE_SIP_OUT 0x0122 + /* h323 */ +#define PORT_TYPE_H323_IN 0x0211 +#define PORT_TYPE_H323_OUT 0x0212 + /* answering machine */ +#define PORT_TYPE_VBOX_OUT 0x0311 + + +enum { /* states of call */ + PORT_STATE_IDLE, /* no call */ + PORT_STATE_IN_SETUP, /* incoming connection */ + PORT_STATE_OUT_SETUP, /* outgoing connection */ + PORT_STATE_IN_OVERLAP, /* more informatiopn needed */ + PORT_STATE_OUT_OVERLAP, /* more informatiopn needed */ + PORT_STATE_IN_PROCEEDING,/* call is proceeding */ + PORT_STATE_OUT_PROCEEDING,/* call is proceeding */ + PORT_STATE_IN_ALERTING, /* call is ringing */ + PORT_STATE_OUT_ALERTING,/* call is ringing */ + PORT_STATE_CONNECT_WAITING,/* connect is sent to the network, waiting for acknowledge */ + PORT_STATE_CONNECT, /* call is connected and transmission is enabled */ + PORT_STATE_IN_DISCONNECT,/* incoming disconnected */ + PORT_STATE_OUT_DISCONNECT,/* outgoing disconnected */ + PORT_STATE_RELEASE, /* call released */ +}; + +#define PORT_STATE_NAMES \ +static char *state_name[] = { \ + "PORT_STATE_IDLE", \ + "PORT_STATE_IN_SETUP", \ + "PORT_STATE_OUT_SETUP", \ + "PORT_STATE_IN_OVERLAP", \ + "PORT_STATE_OUT_OVERLAP", \ + "PORT_STATE_IN_PROCEEDING", \ + "PORT_STATE_OUT_PROCEEDING", \ + "PORT_STATE_IN_ALERTING", \ + "PORT_STATE_OUT_ALERTING", \ + "PORT_STATE_CONNECT_WAITING", \ + "PORT_STATE_CONNECT", \ + "PORT_STATE_IN_DISCONNECT", \ + "PORT_STATE_OUT_DISCONNECT", \ + "PORT_STATE_RELEASE", \ +}; + + +enum { /* event list from listening to tty */ + TTYI_EVENT_nodata, /* no data was received nor processed */ + TTYI_EVENT_NONE, /* nothing happens */ + TTYI_EVENT_CONNECT, /* a connection is made */ + TTYI_EVENT_RING, /* incoming call */ + TTYI_EVENT_CALLER, /* caller id information */ + TTYI_EVENT_INFO, /* dialing information */ + TTYI_EVENT_OVERLAP, /* setup complete, awaiting more dialing info */ + TTYI_EVENT_PROC, /* proceeding */ + TTYI_EVENT_ALRT, /* alerting */ + TTYI_EVENT_CONN, /* connect */ + TTYI_EVENT_DISC, /* disconnect */ + TTYI_EVENT_RELE, /* release signal */ + TTYI_EVENT_BUSY, /* channel unavailable */ +}; + +/* structure of epoint_list */ +struct epoint_list { + struct epoint_list *next; + unsigned long epoint_id; + int active; +}; + +inline unsigned long ACTIVE_EPOINT(struct epoint_list *epointlist) +{ + while(epointlist) + { + if (epointlist->active) + return(epointlist->epoint_id); + epointlist = epointlist->next; + } + return(0); +} + +inline unsigned long INACTIVE_EPOINT(struct epoint_list *epointlist) +{ + while(epointlist) + { + if (!epointlist->active) + return(epointlist->epoint_id); + epointlist = epointlist->next; + } + return(0); +} + + +/* a linked list of soft-mixer relations */ +struct mixer_relation { + struct mixer_relation *next; /* next in list */ + unsigned long port_id; /* port related to */ + int mixer_writep; /* write pointer in buffer */ + }; + +/* structure of port settings */ +struct port_settings { + char tones_dir[256]; /* directory of current tone */ + int tout_setup; + int tout_dialing; + int tout_proceeding; + int tout_alerting; + int tout_disconnect; +// int tout_hold; +// int tout_park; + int no_seconds; /* don't send seconds with time information element */ +}; + +/* generic port class */ +class Port +{ + public: + /* methods */ + Port(int type, char *portname, struct port_settings *settings); + virtual ~Port(); + class Port *next; /* next port in list */ + int p_type; /* type of port */ + virtual int handler(void); + virtual int message_epoint(unsigned long epoint_id, int message, union parameter *param); + virtual void set_echotest(int echotest); + virtual void set_tone(char *dir, char *name); + virtual int read_audio(unsigned char *buffer, int length, int compressed); + + struct port_settings p_settings; + + /* tone */ + int p_debug_nothingtosend; /* used for debugging the, if we have currently nothing to send (used for ISDN) */ + char p_tone_dir[256]; /* name of current directory */ + char p_tone_name[256]; /* name of current tone */ + char p_tone_fh; /* file descriptor of current tone or -1 if not open */ + void *p_tone_fetched; /* pointer to fetched data */ + int p_tone_codec; /* codec that the tone is made of */ + long p_tone_size, p_tone_left; /* size of tone in bytes (not samples), bytes left */ + long p_tone_eof; /* flag that makes the use of eof message */ + long p_tone_counter; /* flag that makes the use of counter message */ + long p_tone_speed; /* speed of current tone, 1=normal, may also be negative */ +// char p_knock_fh; /* file descriptor of knocking tone or -1 if not open */ +// void *p_knock_fetched; /* pointer to fetched data */ +// int p_knock_codec; +// long p_knock_size, p_knock_left; + void set_vbox_tone(char *dir, char *name);/* tone of answering machine */ + void set_vbox_play(char *name, int offset); /* sample of answ. */ + void set_vbox_speed(int speed); /* speed of answ. */ + + /* user space mixer buffer */ + signed long p_mixer_buffer[PORT_BUFFER]; /* mixer buffer */ + signed long p_record_buffer[PORT_BUFFER]; /* record buffer */ + signed long p_stereo_buffer[PORT_BUFFER]; /* record buffer for stereo (user only) */ + struct mixer_relation *p_mixer_rel; /* list of mixer relations */ + int p_mixer_readp; /* read pointer in buffer */ + + /* methods */ + void mixer(union parameter *param); + + /* identification */ + unsigned long p_serial; /* serial unique id of port */ + char p_name[128]; /* name of port or token (h323) */ + + /* endpoint relation */ + struct epoint_list *p_epointlist; /* endpoint relation */ + + /* state */ + int p_state; /* state of port */ + void new_state(int state); /* set new state */ + struct caller_info p_callerinfo; /* information about the caller */ + struct dialing_info p_dialinginfo; /* information about dialing */ + struct connect_info p_connectinfo; /* information about connected line */ + struct redir_info p_redirinfo; /* info on redirection (to the calling user) */ + struct capa_info p_capainfo; /* info on l2,l3 capacity */ + int p_echotest; /* set to echo audio data FROM port back to port's mixer */ + + /* recording */ + int open_record(int type, int mode, int skip, char *terminal, int anon_ignore, char *vbox_email, int vbox_email_file); + void close_record(int beep); + FILE *p_record; /* recording fp: if not NULL, recording is enabled */ + int p_record_type; /* codec to use: RECORD_MONO, RECORD_STEREO, ... */ + int p_record_skip; /* skip bytes before writing the sample */ + unsigned long p_record_length; /* size of what's written so far */ + char p_record_filename[256]; /* record filename */ + int p_record_vbox; /* 0= normal recording, 1= announcement, 2= record to vbox dir */ + int p_record_vbox_year; /* time when vbox recording started */ + int p_record_vbox_mon; + int p_record_vbox_mday; + int p_record_vbox_hour; + int p_record_vbox_min; + char p_record_extension[32]; /* current name (digits) of extension */ + int p_record_anon_ignore; + char p_record_vbox_email[128]; + int p_record_vbox_email_file; + + virtual void printisdn(char *fmt, ...); + + void free_epointlist(struct epoint_list *epointlist); + void free_epointid(unsigned long epoint_id); + struct epoint_list *epointlist_new(unsigned long epoint_id); +}; + + +extern Port *port_first; +extern unsigned long port_serial; + +class Port *find_port_with_token(char *name); +class Port *find_port_id(unsigned long port_id); + + +#endif // PORT_HEADER + + diff --git a/q931.h b/q931.h new file mode 100644 index 0000000..ec1a44f --- /dev/null +++ b/q931.h @@ -0,0 +1,90 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** information elements support header ** +** ** +\*****************************************************************************/ + +#define MT_ALERTING 0x01 +#define MT_CALL_PROCEEDING 0x02 +#define MT_CONNECT 0x07 +#define MT_CONNECT_ACKNOWLEDGE 0x0f +#define MT_PROGRESS 0x03 +#define MT_SETUP 0x05 +#define MT_SETUP_ACKNOWLEDGE 0x0d +#define MT_RESUME 0x26 +#define MT_RESUME_ACKNOWLEDGE 0x2e +#define MT_RESUME_REJECT 0x22 +#define MT_SUSPEND 0x25 +#define MT_SUSPEND_ACKNOWLEDGE 0x2d +#define MT_SUSPEND_REJECT 0x21 +#define MT_USER_INFORMATION 0x20 +#define MT_DISCONNECT 0x45 +#define MT_RELEASE 0x4d +#define MT_RELEASE_COMPLETE 0x5a +#define MT_RESTART 0x46 +#define MT_RESTART_ACKNOWLEDGE 0x4e +#define MT_SEGMENT 0x60 +#define MT_CONGESTION_CONTROL 0x79 +#define MT_INFORMATION 0x7b +#define MT_FACILITY 0x62 +#define MT_NOTIFY 0x6e +#define MT_STATUS 0x7d +#define MT_STATUS_ENQUIRY 0x75 +#define MT_HOLD 0x24 +#define MT_HOLD_ACKNOWLEDGE 0x28 +#define MT_HOLD_REJECT 0x30 +#define MT_RETRIEVE 0x31 +#define MT_RETRIEVE_ACKNOWLEDGE 0x33 +#define MT_RETRIEVE_REJECT 0x37 + +#define IE_SEGMENT 0x00 +#define IE_BEARER 0x04 +#define IE_CAUSE 0x08 +#define IE_CALL_ID 0x10 +#define IE_CALL_STATE 0x14 +#define IE_CHANNEL_ID 0x18 +#define IE_FACILITY 0x1c +#define IE_PROGRESS 0x1e +#define IE_NET_FAC 0x20 +#define IE_NOTIFY 0x27 +#define IE_DISPLAY 0x28 +#define IE_DATE 0x29 +#define IE_KEYPAD 0x2c +#define IE_SIGNAL 0x34 +#define IE_INFORATE 0x40 +#define IE_E2E_TDELAY 0x42 +#define IE_TDELAY_SEL 0x43 +#define IE_PACK_BINPARA 0x44 +#define IE_PACK_WINSIZE 0x45 +#define IE_PACK_SIZE 0x46 +#define IE_CUG 0x47 +#define IE_REV_CHARGE 0x4a +#define IE_CONNECT_PN 0x4c +#define IE_CONNECT_SUB 0x4d +#define IE_CALLING_PN 0x6c +#define IE_CALLING_SUB 0x6d +#define IE_CALLED_PN 0x70 +#define IE_CALLED_SUB 0x71 +#define IE_REDIR_NR 0x74 +#define IE_REDIR_DN 0x76 +#define IE_TRANS_SEL 0x78 +#define IE_RESTART_IND 0x79 +#define IE_LLC 0x7c +#define IE_HLC 0x7d +#define IE_USER_USER 0x7e +#define IE_ESCAPE 0x7f +#define IE_CNIP 0x80 /* siemens centrex extension */ +#define IE_SHIFT 0x90 +#define IE_MORE_DATA 0xa0 +#define IE_COMPLETE 0xa1 +#define IE_CONGESTION 0xb0 +#define IE_REPEAT 0xd0 + +#define CENTREX_FAC 0x88 +#define CENTREX_ID 0xa1 + diff --git a/route.c b/route.c new file mode 100644 index 0000000..38f1f7e --- /dev/null +++ b/route.c @@ -0,0 +1,2524 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** match processing of routing configuration ** +** ** +\*****************************************************************************/ + +#include +#include +#include +#include +#include "main.h" + + +struct route_ruleset *ruleset_first; /* first entry */ +struct route_ruleset *ruleset_main; /* pointer to main ruleset */ + +struct cond_defs cond_defs[] = { +#ifdef PBX + { "extern", MATCH_EXTERN, COND_TYPE_NULL, + "extern", "Matches if call is from external port."}, + { "intern", MATCH_INTERN, COND_TYPE_NULL, + "intern", "Matches if call is from internal port."}, +#endif + { "h323", MATCH_H323, COND_TYPE_NULL, + "h323", "Matches if call is received via H.323."}, +// { "ip", MATCH_IP, COND_TYPE_IP, +// "ip=[-|/][,...]", "Matches if caller matches given source IP address(es) / range(s) / block(s)."}, + { "port", MATCH_PORT, COND_TYPE_INTEGER, + "port=[-][,...]", "Matches if call is received from given port(s). NOT INTERFACE!"}, + { "interface", MATCH_INTERFACE,COND_TYPE_STRING, + "interface=[,...]", "Matches if call is received from given interface(s). NOT PORTS!"}, + { "callerid", MATCH_CALLERID, COND_TYPE_STRING, + "callerid=[-][,...]", "Matches if caller ID matches or begins with the given (range(s) of) prefixes(s)."}, + { "extension", MATCH_EXTENSION,COND_TYPE_STRING, + "extension=[-][,...]", "Matches if caller calls from given (range(s) of) extension(s)."}, + { "dialing", MATCH_DIALING, COND_TYPE_STRING, + "dialing=[-][,...]", "Matches if caller has dialed the given (range(s) of) digits at least."}, + { "enblock", MATCH_ENBLOCK, COND_TYPE_NULL, + "enblock", "Matches if caller dialed en block. (Dial the number before pick up.)"}, + { "overlap", MATCH_OVERLAP, COND_TYPE_NULL, + "overlap", "Matches if caller dialed digit by digit. (Dial the number after pick up.)"}, + { "anonymous", MATCH_ANONYMOUS,COND_TYPE_NULL, + "anonymous", "Matches if caller uses restricted caller ID or if not available."}, + { "visible", MATCH_VISIBLE, COND_TYPE_NULL, + "visible", "Matches if caller ID is presented and if available."}, + { "unknown", MATCH_UNKNOWN, COND_TYPE_NULL, + "unknown", "Matches if no ID is available from caller."}, + { "available", MATCH_AVAILABLE,COND_TYPE_NULL, + "available", "Matches if ID is available from caller."}, + { "fake", MATCH_FAKE, COND_TYPE_NULL, + "fake", "Matches if caller ID is not screened and may be faked by caller."}, + { "real", MATCH_REAL, COND_TYPE_NULL, + "real", "Matches if caller ID is screend and so it is the real caller's ID."}, + { "redirected", MATCH_REDIRECTED,COND_TYPE_NULL, + "redirected", "Matches if caller has been redirected."}, + { "direct", MATCH_DIRECT ,COND_TYPE_NULL, + "direct", "Matches if caller did not come from an redirection."}, + { "redirid", MATCH_REDIRID ,COND_TYPE_STRING, + "redirid=[-][,...]", "Matches if the caller has been redirected by the given (range(s) of) ID(s) or prefix(es))"}, + { "time", MATCH_TIME, COND_TYPE_TIME, + "time=[-][,...]", "Matches if the caller calls within the given (range(s) of) time(s). (e.g. 0700-1900)"}, + { "mday", MATCH_MDAY, COND_TYPE_MDAY, + "mday=[-][,...]", "Matches if the caller calls within the given (range(s) of) day(s) of the month. (1..31)"}, + { "month", MATCH_MONTH, COND_TYPE_MONTH, + "month=[-][,...]", "Matches if the caller calls within the given (range(s) of) month(s). (1=January..12=December)"}, + { "year", MATCH_YEAR, COND_TYPE_YEAR, + "year=[-][,...]", "Matches if the caller calls within the given (range(s) of) year(s). (1970..2106)"}, + { "wday", MATCH_WDAY, COND_TYPE_WDAY, + "wday=[-][,...]", "Matches if the caller calls within the given (range(s) of) weekday(s). (1=Monday..7=Sunday)"}, + { "capability", MATCH_CAPABILITY, COND_TYPE_CAPABILITY, + "capability=speech|audio|video|digital-restricted|digital-unrestricted|digital-unrestricted-tones[,...]", "Matches the given bearer capability(s)."}, + { "infolayer1", MATCH_INFOLAYER1, COND_TYPE_INTEGER, + "infolayer1=[,...]", "Matches the given information layer 1. (2=u-Law, 3=a-law, see info layer 1 in bearer capability.)"}, + { "hlc", MATCH_HLC, COND_TYPE_INTEGER, + "hlc=[,...]", "Matches the high layer capability(s)."}, + { "file", MATCH_FILE, COND_TYPE_STRING, + "file=[,...]", "Mathes is the given file exists and if the first character is '1'."}, + { "execute", MATCH_EXECUTE, COND_TYPE_STRING, + "execute=[,...]","Matches if the return value of the given command is greater 0."}, + { "default", MATCH_DEFAULT, COND_TYPE_NULL, + "default","Matches if no further dialing could match."}, + { "timeout", MATCH_TIMEOUT, COND_TYPE_INTEGER, + "timeout=","Matches if the ruleset was entered AFTER given seconds."}, + { "free", MATCH_FREE, COND_TYPE_IFATTR, + "free=:","Matches if the given minimum of channels are free."}, + { "notfree", MATCH_NOTFREE, COND_TYPE_IFATTR, + "notfree=:","Matches if NOT the given minimum of channels are free."}, + { "blocked", MATCH_DOWN, COND_TYPE_STRING, + "blocked=[,...]","Matches if all of the given interfaces are blocked."}, + { "idle", MATCH_UP, COND_TYPE_STRING, + "idle=[,...]","Matches if any of the given interfaces is idle."}, + { "busy", MATCH_BUSY, COND_TYPE_STRING, + "busy=[,...]","Matches if any of the given extension is busy."}, + { "notbusy", MATCH_IDLE, COND_TYPE_STRING, + "notbusy[,...]","Matches if any of the given extension is not busy."}, + { NULL, 0, 0, NULL} +}; + +struct param_defs param_defs[] = { + { PARAM_PROCEEDING, + "proceeding", PARAM_TYPE_NULL, + "proceeding", "Will set the call into 'proceeding' state to prevent dial timeout."}, + { PARAM_ALERTING, + "alerting", PARAM_TYPE_NULL, + "alerting", "Will set the call into 'altering' state."}, + { PARAM_CONNECT, + "connect", PARAM_TYPE_NULL, + "connect", "Will complete the call before processing the action. Audio path for external calls will be established."}, +#ifdef PBX + { PARAM_EXTENSION, + "extension", PARAM_TYPE_STRING, + "extension=", "Give extension name (digits) to relate this action to."}, + { PARAM_EXTENSIONS, + "extensions", PARAM_TYPE_STRING, + "extensions=[,[,...]]", "One or more extensions may be given."}, +#endif + { PARAM_PREFIX, + "prefix", PARAM_TYPE_STRING, + "prefix=", "Add prefix in front of the dialed number."}, + { PARAM_CAPA, + "capability", PARAM_TYPE_CAPABILITY, + "capability=speech|audio|video|digital-restricted|digital-unrestricted|digital-unrestricted-tones", "Alter the service type of the call."}, + { PARAM_BMODE, + "bmode", PARAM_TYPE_BMODE, + "capability=transparent|hdlc", "Alter the bchannel mode of the call. Use hdlc for data calls."}, + { PARAM_INFO1, + "infolayer1", PARAM_TYPE_INTEGER, + "infolayer1=", "Alter the layer 1 information of a call. Use 3 for ALAW or 2 for uLAW."}, + { PARAM_HLC, + "hlc", PARAM_TYPE_INTEGER, + "hlc=", "Alter the HLC identification. Use 1 for telephony or omit."}, + { PARAM_EXTHLC, + "exthlc", PARAM_TYPE_INTEGER, + "exthlc=", "Alter extended HLC value. (Mainenance only, don't use it.)"}, + { PARAM_PRESENT, + "present", PARAM_TYPE_YESNO, + "present=yes|no", "Allow or restrict caller ID regardless what the caller wants."}, + { PARAM_DIVERSION, + "diversion", PARAM_TYPE_DIVERSION, + "diversion=cfu|cfnr|cfb|cfp", "Set diversion type."}, + { PARAM_DEST, + "dest", PARAM_TYPE_DESTIN, + "dest=", "Destination number to divert to. Use 'vbox' to divert to vbox. (cfu,cfnr,cfb only)"}, + { PARAM_SELECT, + "select", PARAM_TYPE_NULL, + "select", "Lets the caller select the history of calls using keys '1'/'3' or '*'/'#'."}, + { PARAM_DELAY, + "delay", PARAM_TYPE_INTEGER, + "delay=", "Number of seconds to delay."}, + { PARAM_LIMIT, + "limit", PARAM_TYPE_INTEGER, + "limit=", "Number of maximum retries."}, + { PARAM_HOST, + "host", PARAM_TYPE_STRING, + "host=", "Name of remote VoIP host."}, + { PARAM_PORT, + "port", PARAM_TYPE_STRING, + "port=", "Alternate port to use if 'host' is given."}, + { PARAM_INTERFACES, + "interfaces", PARAM_TYPE_STRING, + "interfaces=[,[,...]]", "Give one or a list of Interfaces to select a free channel from."}, + { PARAM_ADDRESS, + "address", PARAM_TYPE_STRING, + "address=", "Complete VoIP address. ( [user@]host[:port] )"}, + { PARAM_SAMPLE, + "sample", PARAM_TYPE_STRING, + "sample=", "Filename of sample (current tone's dir) or full path to sample. ('.wav'/'.wave'/'.isdn' is added automatically."}, +#ifdef PBX + { PARAM_ANNOUNCEMENT, + "announcement",PARAM_TYPE_STRING, + "announcement=", "Filename of announcement (inside vbox recording dir) or full path to sample. ('.wav'/'.wave'/'.isdn' is added automatically."}, +#endif + { PARAM_RULESET, + "ruleset", PARAM_TYPE_STRING, + "ruleset=", "Ruleset to go to."}, + { PARAM_CAUSE, + "cause", PARAM_TYPE_INTEGER, + "cause=", "Cause value when disconnecting. (21=reject 1=unassigned 63=service not available)"}, + { PARAM_LOCATION, + "location", PARAM_TYPE_INTEGER, + "location=", "Location of cause value when disconnecting. (0=user 1=private network sering local user)"}, + { PARAM_DISPLAY, + "display", PARAM_TYPE_STRING, + "display=", "Message to display on the caller's telephone. (internal only)"}, + { PARAM_PORTS, + "ports", PARAM_TYPE_INTEGER, + "ports=[,[,...]]", "ISDN port[s] to use."}, + { PARAM_TPRESET, + "tpreset", PARAM_TYPE_INTEGER, + "tpreset=", "Preset of countdown timer."}, + { PARAM_FILE, + "file", PARAM_TYPE_STRING, + "file=", "Full path to file name."}, + { PARAM_CONTENT, + "content", PARAM_TYPE_STRING, + "content=", "Content to write into file."}, + { PARAM_APPEND, + "append", PARAM_TYPE_NULL, + "append", "Will append to given file, rather than overwriting it."}, + { PARAM_EXECUTE, + "execute", PARAM_TYPE_STRING, + "execute=", "Full path to script/command name. (Dialed digits are the argument 1.)"}, + { PARAM_PARAM, + "param", PARAM_TYPE_STRING, + "param=", "Optionally this parameter can be inserted as argument 1, others are shifted."}, + { PARAM_TYPE, + "type", PARAM_TYPE_TYPE, + "type=unknown|subscriber|national|international", "Type of number to dial, default is 'unknown'."}, + { PARAM_COMPLETE, + "complete", PARAM_TYPE_NULL, + "complete", "Indicates complete number as given by prefix. Proceeding of long distance calls may be faster."}, + { PARAM_CALLERID, + "callerid", PARAM_TYPE_STRING, + "callerid=", "Change caller ID to given string."}, + { PARAM_CALLERIDTYPE, + "calleridtype",PARAM_TYPE_CALLERIDTYPE, + "calleridtype=[unknown|subscriber|national|international]", "Type of caller ID. For normal MSN use 'unknown'"}, + { PARAM_CALLTO, + "callto", PARAM_TYPE_STRING, + "callto=", "Where to call back. By default the caller ID is used."}, + { PARAM_ROOM, + "room", PARAM_TYPE_INTEGER, + "room=", "Conference room number, must be greater 0, as in real life."}, + { PARAM_TIMEOUT, + "timeout", PARAM_TYPE_INTEGER, + "timeout=", "Timeout before continue with next action."}, +#ifdef PBX + { PARAM_NOPASSWORD, + "nopassword", PARAM_TYPE_NULL, + "nopassword", "Don't ask for password. Be sure to authenticate right via real caller ID."}, +#endif + { 0, NULL, 0, NULL, NULL} +}; + +struct action_defs action_defs[] = { + { ACTION_EXTERNAL, + "extern", &EndpointAppPBX::action_init_call, &EndpointAppPBX::action_dialing_external, &EndpointAppPBX::action_hangup_call, + PARAM_CONNECT | PARAM_PREFIX | PARAM_COMPLETE | PARAM_TYPE | PARAM_CAPA | PARAM_BMODE | PARAM_INFO1 | PARAM_HLC | PARAM_EXTHLC | PARAM_PRESENT | PARAM_INTERFACES | PARAM_CALLERID | PARAM_CALLERIDTYPE | PARAM_TIMEOUT, + "Call is routed to extern number as dialed."}, + { ACTION_INTERNAL, + "intern", &EndpointAppPBX::action_init_call, &EndpointAppPBX::action_dialing_internal, &EndpointAppPBX::action_hangup_call, + PARAM_CONNECT | PARAM_EXTENSION | PARAM_TYPE | PARAM_CAPA | PARAM_BMODE | PARAM_INFO1 | PARAM_HLC | PARAM_EXTHLC | PARAM_PRESENT | PARAM_TIMEOUT, + "Call is routed to intern extension as given by the dialed number or specified by option."}, + { ACTION_OUTDIAL, + "outdial", &EndpointAppPBX::action_init_call, &EndpointAppPBX::action_dialing_external, &EndpointAppPBX::action_hangup_call, + PARAM_CONNECT | PARAM_PREFIX | PARAM_COMPLETE | PARAM_TYPE | PARAM_CAPA | PARAM_BMODE | PARAM_INFO1 | PARAM_HLC | PARAM_EXTHLC | PARAM_PRESENT | PARAM_INTERFACES | PARAM_CALLERID | PARAM_CALLERIDTYPE | PARAM_TIMEOUT, + "Same as 'extern'"}, + { ACTION_H323, + "h323", &EndpointAppPBX::action_init_call, &EndpointAppPBX::action_dialing_h323, &EndpointAppPBX::action_hangup_call, + PARAM_CONNECT | PARAM_PREFIX | PARAM_HOST | PARAM_PORT | PARAM_ADDRESS | PARAM_TIMEOUT, + "Call is routed to H.323 host/gateway."}, + { ACTION_CHAN, + "asterisk", &EndpointAppPBX::action_init_chan, &EndpointAppPBX::action_dialing_chan, &EndpointAppPBX::action_hangup_call, + PARAM_CONNECT | PARAM_TIMEOUT, + "Call is routed to Asterisk via channel driver."}, + { ACTION_VBOX_RECORD, + "vbox-record",&EndpointAppPBX::action_init_call, &EndpointAppPBX::action_dialing_vbox_record, &EndpointAppPBX::action_hangup_call, + PARAM_CONNECT | PARAM_EXTENSION | PARAM_ANNOUNCEMENT | PARAM_TIMEOUT, + "Caller is routed to the voice box of given extension."}, + { ACTION_PARTYLINE, + "partyline",&EndpointAppPBX::action_init_partyline, NULL, &EndpointAppPBX::action_hangup_call, + PARAM_ROOM, + "Caller is participating the conference with the given room number."}, + { ACTION_LOGIN, + "login", NULL, &EndpointAppPBX::action_dialing_login, NULL, + PARAM_CONNECT | PARAM_EXTENSION | PARAM_NOPASSWORD, + "Log into the given extension. Password required."}, + { ACTION_CALLERID, + "callerid", &EndpointAppPBX::action_init_change_callerid, &EndpointAppPBX::action_dialing_callerid, NULL, + PARAM_CONNECT | PARAM_CALLERID | PARAM_CALLERIDTYPE | PARAM_PRESENT, + "Caller changes the caller ID for all calls."}, + { ACTION_CALLERIDNEXT, + "calleridnext",&EndpointAppPBX::action_init_change_callerid, &EndpointAppPBX::action_dialing_calleridnext, NULL, + PARAM_CONNECT | PARAM_CALLERID | PARAM_CALLERIDTYPE | PARAM_PRESENT, + "Caller changes the caller ID for the next call."}, + { ACTION_FORWARD, + "forward", &EndpointAppPBX::action_init_change_forward, &EndpointAppPBX::action_dialing_forward, NULL, + PARAM_CONNECT | PARAM_DIVERSION | PARAM_DEST | PARAM_DELAY, + "Caller changes the diversion of given type to the given destination or voice box."}, + { ACTION_REDIAL, + "redial", &EndpointAppPBX::action_init_redial_reply, &EndpointAppPBX::action_dialing_redial, NULL, + PARAM_CONNECT | PARAM_SELECT, + "Caller redials. (last outgoing call(s))"}, + { ACTION_REPLY, + "reply", &EndpointAppPBX::action_init_redial_reply, &EndpointAppPBX::action_dialing_reply, NULL, + PARAM_CONNECT | PARAM_SELECT, + "Caller replies. (last incomming call(s))"}, + { ACTION_POWERDIAL, + "powerdial", NULL, &EndpointAppPBX::action_dialing_powerdial, NULL, + PARAM_CONNECT | PARAM_DELAY | PARAM_LIMIT | PARAM_TIMEOUT, + "Caller redials using powerdialing."}, + { ACTION_CALLBACK, + "callback", NULL, &EndpointAppPBX::action_dialing_callback, &EndpointAppPBX::action_hangup_callback, + PARAM_PROCEEDING | PARAM_ALERTING | PARAM_CONNECT | PARAM_EXTENSION | PARAM_DELAY | PARAM_CALLTO | PARAM_PREFIX, + "Caller will use the callback service. After disconnecting, the callback is triggered."}, + { ACTION_ABBREV, + "abbrev", NULL, &EndpointAppPBX::action_dialing_abbrev, NULL, + PARAM_CONNECT, + "Caller dials abbreviation."}, + { ACTION_TEST, + "test", NULL, &EndpointAppPBX::action_dialing_test, NULL, + PARAM_CONNECT | PARAM_PREFIX | PARAM_TIMEOUT, + "Caller dials test mode."}, + { ACTION_PLAY, + "play", &EndpointAppPBX::action_init_play, NULL, NULL, + PARAM_PROCEEDING | PARAM_ALERTING | PARAM_CONNECT | PARAM_SAMPLE | PARAM_TIMEOUT, + "Plays the given sample."}, + { ACTION_VBOX_PLAY, + "vbox-play", &EndpointAppPBX::action_init_vbox_play, &EndpointAppPBX::action_dialing_vbox_play, NULL, + PARAM_EXTENSION, + "Caller listens to her voice box or to given extension."}, + { ACTION_CALCULATOR, + "calculator", NULL, &EndpointAppPBX::action_dialing_calculator, NULL, + PARAM_CONNECT, + "Caller calls the calculator."}, + { ACTION_TIMER, + "timer", NULL, &EndpointAppPBX::action_dialing_timer, NULL, + PARAM_CONNECT | PARAM_TPRESET | PARAM_TIMEOUT, + NULL}, +// "Caller calls the timer."}, + { ACTION_GOTO, + "goto", NULL, &EndpointAppPBX::action_dialing_goto, NULL, + PARAM_CONNECT | PARAM_RULESET | PARAM_SAMPLE, + "Jump to given ruleset and optionally play sample. Dialed digits are not flushed."}, + { ACTION_MENU, + "menu", NULL, &EndpointAppPBX::action_dialing_menu, NULL, + PARAM_CONNECT | PARAM_RULESET | PARAM_SAMPLE, + "Same as 'goto', but flushes all digits dialed so far."}, + { ACTION_DISCONNECT, + "disconnect", NULL, &EndpointAppPBX::action_dialing_disconnect, NULL, + PARAM_CONNECT | PARAM_CAUSE | PARAM_LOCATION | PARAM_SAMPLE | PARAM_DISPLAY, + "Caller gets disconnected optionally with given cause and given sample and given display text."}, + { ACTION_HELP, + "help", NULL, &EndpointAppPBX::action_dialing_help, NULL, + PARAM_CONNECT | PARAM_TIMEOUT, + NULL}, +// "Caller will be able to select from current rules that would match. (using * and #)"}, + { ACTION_DEFLECT, + "deflect", NULL, &EndpointAppPBX::action_dialing_deflect, NULL, + PARAM_DEST, + NULL}, +// "External call is deflected to the given destination within the telephone network."}, + { ACTION_SETFORWARD, + "setforward", NULL, &EndpointAppPBX::action_dialing_setforward, NULL, + PARAM_CONNECT | PARAM_DIVERSION | PARAM_DEST | PARAM_PORT, + NULL}, +// "The call forward is set within the telephone network of the external line."}, + { ACTION_EXECUTE, + "execute", NULL, NULL, &EndpointAppPBX::action_hangup_execute, + PARAM_CONNECT | PARAM_EXECUTE | PARAM_PARAM, + "Executes the given script file. The file must terminate quickly, because it will halt the PBX."}, + { ACTION_FILE, + "file", NULL, NULL, &EndpointAppPBX::action_hangup_file, + PARAM_CONNECT | PARAM_FILE | PARAM_CONTENT | PARAM_APPEND, + "Writes givent content to given file. If content is not given, the dialed digits are written."}, + { ACTION_PICK, + "pick", &EndpointAppPBX::action_init_pick, NULL, NULL, + PARAM_EXTENSIONS, + "Pick up a call that is ringing on any phone. Extensions may be given to limit the picking ability."}, + { ACTION_PASSWORD, + "password", NULL, &EndpointAppPBX::action_dialing_password, NULL, + 0, + NULL}, + { ACTION_PASSWORD_WRITE, + "password_wr",NULL, &EndpointAppPBX::action_dialing_password_wr, NULL, + 0, + NULL}, + { ACTION_NOTHING, + "nothing", NULL, NULL, NULL, + PARAM_PROCEEDING | PARAM_ALERTING | PARAM_CONNECT | PARAM_TIMEOUT, + "does nothing. Usefull to wait for calls to be released completely, by giving timeout value."}, + { ACTION_EFI, + "efi", &EndpointAppPBX::action_init_efi, NULL, NULL, + PARAM_PROCEEDING | PARAM_ALERTING | PARAM_CONNECT, + "Elektronische Fernsprecher Identifikation."}, + { -1, + NULL, NULL, NULL, NULL, 0, NULL} +}; + + +/* display documentation of rules */ + +void doc_rules(const char *name) +{ + int i, j; + + if (name) + { + i = 0; + while(action_defs[i].name) + { + if (!strcasecmp(action_defs[i].name, name)) + break; + i++; + } + if (!action_defs[i].name) + { + fprintf(stderr, "Given action '%s' unknown.\n", name); + return; + } + name = action_defs[i].name; + } + + printf("Syntax overview:\n"); + printf("----------------\n\n"); + printf("[ruleset]\n"); + printf(" ... : [parameter ...] [timeout=X : ...]\n"); + printf("...\n"); + printf("Please refer to the documentation for description on rule format.\n\n"); + + if (!name) + { + printf("Available conditions to match:\n"); + printf("------------------------------\n\n"); + i = 0; + while(cond_defs[i].name) + { + printf("Usage: %s\n", cond_defs[i].doc); + printf("%s\n\n", cond_defs[i].help); + i++; + } + + printf("Available actions with their parameters:\n"); + printf("----------------------------------------\n\n"); + } else + { + printf("Detailes parameter description of action:\n"); + printf("-----------------------------------------\n\n"); + } + i = 0; + while(action_defs[i].name) + { + if (name && !!strcmp(action_defs[i].name,name)) /* not selected */ + { + i++; + continue; + } + if (!action_defs[i].help) /* not internal actions */ + { + i++; + continue; + } + printf("Usage: %s", action_defs[i].name); + j = 0; + while(j < 64) + { + if ((1LL<next; + while(ruleset->rule_first) + { + rule = ruleset->rule_first; + ruleset->rule_first = rule->next; + while(rule->cond_first) + { + cond = rule->cond_first; + if (cond->string_value) + { + free(cond->string_value); + rmemuse--; + } + if (cond->string_value_to) + { + free(cond->string_value_to); + rmemuse--; + } + rule->cond_first = cond->next; + free(cond); + rmemuse--; + } + while(rule->action_first) + { + action = rule->action_first; + rule->action_first = action->next; + while(action->param_first) + { + param = action->param_first; + action->param_first = param->next; + if (param->string_value) + { + free(param->string_value); + rmemuse--; + } + free(param); + rmemuse--; + } + free(action); + rmemuse--; + } + free(rule); + rmemuse--; + } + free(ruleset); + rmemuse--; + } +} + +void ruleset_debug(struct route_ruleset *ruleset_start) +{ + struct route_ruleset *ruleset; + struct route_rule *rule; + struct route_cond *cond; + struct route_action *action; + struct route_param *param; + int first; + + ruleset = ruleset_start; + while(ruleset) + { + printf("Ruleset: '%s'\n", ruleset->name); + rule = ruleset->rule_first; + while(rule) + { + /* CONDITION */ + first = 1; + cond = rule->cond_first; + while(cond) + { + if (first) + printf(" Condition:"); + else + printf(" and "); + first = 0; + printf(" %s", cond_defs[cond->index].name); + if (cond->value_type != VALUE_TYPE_NULL) + printf(" = "); + next_cond_value: + switch(cond->value_type) + { + case VALUE_TYPE_NULL: + break; + + case VALUE_TYPE_INTEGER: + printf("%d", cond->integer_value); + break; + + case VALUE_TYPE_INTEGER_RANGE: + printf("%d-%d", cond->integer_value, cond->integer_value_to); + break; + + case VALUE_TYPE_STRING: + printf("'%s'", cond->string_value); + break; + + case VALUE_TYPE_STRING_RANGE: + printf("'%s'-'%s'", cond->string_value, cond->string_value_to); + break; + + default: + printf("Software error: VALUE_TYPE_* %d not known in function '%s' line=%d", cond->value_type, __FUNCTION__, __LINE__); + } + if (cond->value_extension && cond->next) + { + cond = cond->next; + printf(" or "); + goto next_cond_value; + } + + cond = cond->next; + printf("\n"); + } + + /* ACTION */ + action = rule->action_first; + while(action) + { + printf(" Action: %s\n", action_defs[action->index].name); + /* PARAM */ + first = 1; + param = action->param_first; + while(param) + { + if (first) + printf(" Param:"); + else + printf(" "); + first = 0; + printf(" %s", param_defs[param->index].name); + if (param->value_type != VALUE_TYPE_NULL) + printf(" = "); + switch(param->value_type) + { + case VALUE_TYPE_NULL: + break; + + case VALUE_TYPE_INTEGER: + if (param_defs[param->index].type == PARAM_TYPE_CALLERIDTYPE) + { + switch(param->integer_value) + { + case INFO_NTYPE_UNKNOWN: + printf("unknown"); + break; + case INFO_NTYPE_SUBSCRIBER: + printf("subscriber"); + break; + case INFO_NTYPE_NATIONAL: + printf("national"); + break; + case INFO_NTYPE_INTERNATIONAL: + printf("international"); + break; + default: + printf("unknown(%d)", param->integer_value); + } + break; + } + if (param_defs[param->index].type == PARAM_TYPE_CAPABILITY) + { + switch(param->integer_value) + { + case INFO_BC_SPEECH: + printf("speech"); + break; + case INFO_BC_AUDIO: + printf("audio"); + break; + case INFO_BC_VIDEO: + printf("video"); + break; + case INFO_BC_DATARESTRICTED: + printf("digital-restricted"); + break; + case INFO_BC_DATAUNRESTRICTED: + printf("digital-unrestricted"); + break; + case INFO_BC_DATAUNRESTRICTED_TONES: + printf("digital-unrestricted-tones"); + break; + default: + printf("unknown(%d)", param->integer_value); + } + break; + } + if (param_defs[param->index].type == PARAM_TYPE_DIVERSION) + { + switch(param->integer_value) + { + case INFO_DIVERSION_CFU: + printf("cfu"); + break; + case INFO_DIVERSION_CFNR: + printf("cfnr"); + break; + case INFO_DIVERSION_CFB: + printf("cfb"); + break; + case INFO_DIVERSION_CFP: + printf("cfp"); + break; + default: + printf("unknown(%d)", param->integer_value); + } + break; + } + if (param_defs[param->index].type == PARAM_TYPE_TYPE) + { + switch(param->integer_value) + { + case INFO_NTYPE_UNKNOWN: + printf("unknown"); + break; + case INFO_NTYPE_SUBSCRIBER: + printf("subscriber"); + break; + case INFO_NTYPE_NATIONAL: + printf("national"); + break; + case INFO_NTYPE_INTERNATIONAL: + printf("international"); + break; + default: + printf("unknown(%d)", param->integer_value); + } + break; + } + if (param_defs[param->index].type == PARAM_TYPE_YESNO) + { + switch(param->integer_value) + { + case 1: + printf("yes"); + break; + case 0: + printf("no"); + break; + default: + printf("unknown(%d)", param->integer_value); + } + break; + } + if (param_defs[param->index].type == PARAM_TYPE_NULL) + { + break; + } + printf("%d", param->integer_value); + break; + + case VALUE_TYPE_STRING: + printf("'%s'", param->string_value); + break; + + default: + printf("Software error: VALUE_TYPE_* %d not known in function '%s' line=%d", param->value_type, __FUNCTION__, __LINE__); + } + param = param->next; + printf("\n"); + } + /* TIMEOUT */ + if (action->timeout) + printf(" Timeout: %d\n", action->timeout); + action = action->next; + } + printf("\n"); + rule = rule->next; + } + printf("\n"); + ruleset = ruleset->next; + } +} + + +/* + * parse ruleset + */ +static char *read_string(char *p, char *key, int key_size, char *special) +{ + key[0] = 0; + + if (*p == '\"') + { + p++; + /* quote */ + while(*p) + { + if (*p == '\"') + { + p++; + *key = '\0'; + return(p); + } + if (*p == '\\') + { + p++; + if (*p == '\0') + { + break; + } + } + if (--key_size == 0) + { + UPRINT(key, "\001String too long."); + return(p); + } + *key++ = *p++; + } + UPRINT(key, "\001Unexpected end of line inside quotes."); + return(p); + } + + /* no quote */ + while(*p) + { + if (strchr(special, *p)) + { + *key = '\0'; + return(p); + } + if (*p == '\\') + { + p++; + if (*p == '\0') + { + UPRINT(key, "\001Unexpected end of line."); + return(p); + } + } + if (--key_size == 0) + { + UPRINT(key, "\001String too long."); + return(p); + } + *key++ = *p++; + } + *key = '\0'; + return(p); +} +char ruleset_error[256]; +struct route_ruleset *ruleset_parse(void) +{ +// char from[128]; +// char to[128]; + int i; + unsigned long long j; +// int a, +// b; + #define MAXNESTING 8 + FILE *fp[MAXNESTING]; + char filename[MAXNESTING][256]; + int line[MAXNESTING]; + int nesting = -1; + char buffer[1024], + key[1024], + key_to[1024], + pointer[1024+1], + *p; + int expecting = 1; /* 1 = expecting ruleset */ + int index, + value_type, + integer, + integer_to; /* condition index, .. */ + struct route_ruleset *ruleset_start = NULL, *ruleset; + struct route_ruleset **ruleset_pointer = &ruleset_start; + struct route_rule *rule; + struct route_rule **rule_pointer = NULL; + struct route_cond *cond; + struct route_cond **cond_pointer = NULL; + struct route_action *action; + struct route_action **action_pointer = NULL; + struct route_param *param; + struct route_param **param_pointer = NULL; + char failure[256]; + + /* check the integrity of IDs for ACTION_* and PARAM_* */ + i = 0; + while(action_defs[i].name) + { + if (action_defs[i].id != i) + { + PERROR("Software Error action '%s' must have id of %d, but has %d.\n", + action_defs[i].name, i, action_defs[i].id); + goto openerror; + } + i++; + } + i = 0; j = 1; + while(param_defs[i].name) + { + if (param_defs[i].id != j) + { + PERROR("Software Error param '%s' must have id of 0x%llx, but has 0x%llx.\n", + param_defs[i].name, j, param_defs[i].id); + goto openerror; + } + i++; + j<<=1; + } + + SPRINT(filename[0], "%s/routing.conf", INSTALL_DATA); + + if (!(fp[0]=fopen(filename[0],"r"))) + { + PERROR("Cannot open %s\n",filename[0]); + goto openerror; + } + nesting++; + fduse++; + + go_leaf: + line[nesting]=0; + go_root: + while((fgets(buffer,sizeof(buffer),fp[nesting]))) + { + line[nesting]++; + buffer[sizeof(buffer)-1]=0; + if (buffer[0]) buffer[strlen(buffer)-1]=0; + p = buffer; + + /* remove tabs */ + while(*p) { + if (*p < 32) + *p = 32; + p++; + } + p = buffer; + + /* skip spaces, if any */ + while(*p == 32) + { + if (*p == 0) + break; + p++; + } + + /* skip comments */ + if (*p == '#') + { + p++; + /* don't skip "define" */ + if (!!strncmp(p, "define", 6)) + continue; + p+=6; + if (*p != 32) + continue; + /* skip spaces */ + while(*p == 32) + { + if (*p == 0) + break; + p++; + } + p++; + p = read_string(p, key, sizeof(key), " "); + if (key[0] == 1) /* error */ + { + SPRINT(failure, "Parsing Filename failed: %s", key+1); + goto parse_error; + } + if (nesting == MAXNESTING-1) + { + SPRINT(failure, "'include' is nesting too deep.\n"); + goto parse_error; + } + if (key[0] == '/') + SCPY(filename[nesting+1], key); + else + SPRINT(filename[nesting+1], "%s/%s", INSTALL_DATA, key); + if (!(fp[nesting+1]=fopen(filename[nesting+1],"r"))) + { + PERROR("Cannot open %s\n", filename[nesting+1]); + goto parse_error; + } + fduse++; + nesting++; + goto go_leaf; + } + if (*p == '/') if (p[1] == '/') + continue; + + /* skip empty lines */ + if (*p == 0) + continue; + + /* expecting ruleset */ + if (expecting) + { + new_ruleset: + /* expecting [ */ + if (*p != '[') + { + SPRINT(failure, "Expecting ruleset name starting with '['."); + goto parse_error; + } + p++; + + /* reading ruleset name text */ + i = 0; + while((*p>='a' && *p<='z') || (*p>='A' && *p<='Z') || (*p>='0' && *p<='9')) + { + if (*p>='A' && *p<='Z') *p = *p-'A'+'a'; /* lower case */ + key[i++] = *p++; + if (i == sizeof(key)) i--; /* limit */ + } + key[i] = 0; + if (key[0] == '\0') { + SPRINT(failure, "Missing ruleset name after '['."); + goto parse_error; + } + + /* expecting ] and nothing more */ + if (*p != ']') { + SPRINT(failure, "Expecting ']' after ruleset name."); + goto parse_error; + } + p++; + if (*p != 0) { + SPRINT(failure, "Unexpected character after ruleset name."); + goto parse_error; + } + + /* check for duplicate rulesets */ + ruleset = ruleset_start; + while(ruleset) + { + if (!strcmp(ruleset->name, key)) + { + SPRINT(failure, "Duplicate ruleset '%s', already defined in file '%s' line %d.", key, ruleset->file, ruleset->line); + goto parse_error; + } + ruleset = ruleset->next; + } + + /* create ruleset */ + ruleset = (struct route_ruleset *)malloc(sizeof(struct route_ruleset)); + if (ruleset == NULL) + { + SPRINT(failure, "Out of memory."); + goto parse_error; + } + rmemuse++; + memset(ruleset, 0, sizeof(struct route_ruleset)); + *ruleset_pointer = ruleset; + ruleset_pointer = &(ruleset->next); + SCPY(ruleset->name, key); + SCPY(ruleset->file, filename[nesting]); + ruleset->line = line[nesting]; + rule_pointer = &(ruleset->rule_first); + expecting = 0; + continue; + } + + /* for new ruleset [ */ + if (*p == '[') + { + goto new_ruleset; + } + + /* alloc memory for rule */ + rule = (struct route_rule *)malloc(sizeof(struct route_rule)); + if (rule == NULL) + { + SPRINT(failure, "Out of memory."); + goto parse_error; + } + rmemuse++; + memset(rule, 0, sizeof(struct route_rule)); + *rule_pointer = rule; + rule_pointer = &(rule->next); + cond_pointer = &(rule->cond_first); + action_pointer = &(rule->action_first); + SCPY(rule->file, filename[nesting]); + rule->line = line[nesting]; + + /* loop CONDITIONS */ + while(*p!=':' && *p!='\0') + { + /* read item text */ + i = 0; + while((*p>='a' && *p<='z') || (*p>='A' && *p<='Z') || (*p>='0' && *p<='9')) + { + if (*p>='A' && *p<='Z') *p = *p-'A'+'a'; /* lower case */ + key[i++] = *p++; + if (i == sizeof(key)) i--; /* limit */ + } + key[i] = 0; + if (key[0] == '\0') + { + SPRINT(failure, "Expecting condition item name or ':' for end of condition list."); + goto parse_error; + } + if (*p!=' ' && *p!='=') + { + SPRINT(failure, "Illegal character '%c' after condition name '%s'. Expecting '=' for equation or ' ' to seperate condition items.", *p, key); + goto parse_error; + } + + /* check if condition exists */ + index = 0; + while(cond_defs[index].name) + { + if (!strcmp(cond_defs[index].name, key)) + break; + index++; + } + if (cond_defs[index].name == NULL) + { + SPRINT(failure, "Unknown condition item name '%s'.", key); + goto parse_error; + } + + /* items without values must not have any parameter */ + if (cond_defs[index].type == COND_TYPE_NULL) + { + if (*p == '=') + { + SPRINT(failure, "Condition item '%s' must not have any value. Don't use '=' for this type of condition.", key); + goto parse_error; + } + if (*p != ' ') + { + SPRINT(failure, "Condition item '%s' must not have any value. Expecting ' ' or tab after item name.", key); + goto parse_error; + } +// p++; + } else + { + if (*p == ' ') + { + SPRINT(failure, "Condition item '%s' must have at least one value, '=' expected, and not a space.", key); + goto parse_error; + } + if (*p != '=') + { + SPRINT(failure, "Condition item '%s' must have at least one value, '=' expected.", key); + goto parse_error; + } + p++; + } + + /* check for duplicate condition */ + cond = rule->cond_first; + while(cond) + { + if (cond->index == index) + { + SPRINT(failure, "Duplicate condition '%s', use ',' to give multiple values.", key); + goto parse_error; + } + cond = cond->next; + } + + nextcondvalue: + /* alloc memory for item */ + cond = (struct route_cond *)malloc(sizeof(struct route_cond)); + if (cond == NULL) + { + SPRINT(failure, "Out of memory."); + goto parse_error; + } + rmemuse++; + memset(cond, 0, sizeof(struct route_cond)); + *cond_pointer = cond; + cond_pointer = &(cond->next); + cond->index = index; + cond->match = cond_defs[index].match; + switch(cond_defs[index].type) + { + case COND_TYPE_NULL: + if (*p=='=') + { + SPRINT(failure, "Expecting no value."); + goto parse_error; + } + value_type = VALUE_TYPE_NULL; + break; + + /* parse all integer values/ranges */ + case COND_TYPE_INTEGER: + case COND_TYPE_TIME: + case COND_TYPE_MDAY: + case COND_TYPE_MONTH: + case COND_TYPE_WDAY: + case COND_TYPE_YEAR: + integer = integer_to = 0; + if (*p==',' || *p==' ' || *p=='\0') + { + SPRINT(failure, "Missing integer value."); + goto parse_error; + } + while(*p>='0' && *p<='9') + { + integer = integer*10 + *p-'0'; + p++; + } + value_type = VALUE_TYPE_INTEGER; + if (*p == '-') + { + p++; + if (*p==',' || *p==' ' || *p=='\0') + { + SPRINT(failure, "Missing integer value."); + goto parse_error; + } + while(*p>='0' && *p<='9') + { + integer_to = integer_to*10 + *p-'0'; + p++; + } + value_type = VALUE_TYPE_INTEGER_RANGE; + } + if (cond_defs[index].type == COND_TYPE_TIME) + { + // Simon: i store the time as decimal, later i compare it correctly: + // hours * 100 + minutes + if (integer == 2400) + integer = 0; + if (integer >= 2400) + { + timeoutofrange1: + SPRINT(failure, "Given time '%d' not in range 0000..2359 (or 2400 for 0000)", integer); + goto parse_error; + } + if (integer%100 >= 60) + goto timeoutofrange1; + if (value_type == VALUE_TYPE_INTEGER) + goto integer_done; + if (integer_to == 2400) + integer_to = 0; + if (integer_to >= 2400) + { + timeoutofrange2: + SPRINT(failure, "Given time '%d' not in range 0000..2359 (or 2400 for 0000)", integer_to); + goto parse_error; + } + if (integer_to%100 >= 60) + goto timeoutofrange2; + } + if (cond_defs[index].type == COND_TYPE_MDAY) + { + if (integer<1 || integer>31) + { + SPRINT(failure, "Given day-of-month '%d' not in range 1..31", integer); + goto parse_error; + } + if (value_type == VALUE_TYPE_INTEGER) + goto integer_done; + if (integer_to<1 || integer_to>31) + { + SPRINT(failure, "Given day-of-month '%d' not in range 1..31", integer_to); + goto parse_error; + } + } + if (cond_defs[index].type == COND_TYPE_WDAY) + { + if (integer<1 || integer>7) + { + SPRINT(failure, "Given day-of-week '%d' not in range 1..7", integer); + goto parse_error; + } + if (value_type == VALUE_TYPE_INTEGER) + goto integer_done; + if (integer_to<1 || integer_to>7) + { + SPRINT(failure, "Given day-of-week '%d' not in range 1..7", integer_to); + goto parse_error; + } + } + if (cond_defs[index].type == COND_TYPE_MONTH) + { + if (integer<1 || integer>12) + { + SPRINT(failure, "Given month '%d' not in range 1..12", integer); + goto parse_error; + } + if (value_type == VALUE_TYPE_INTEGER) + goto integer_done; + if (integer_to<1 || integer_to>12) + { + SPRINT(failure, "Given month '%d' not in range 1..12", integer_to); + goto parse_error; + } + } + if (cond_defs[index].type == COND_TYPE_YEAR) + { + if (integer<1970 || integer>2106) + { + SPRINT(failure, "Given year '%d' not in range 1970..2106", integer); + goto parse_error; + } + if (value_type == VALUE_TYPE_INTEGER) + goto integer_done; + if (integer_to<1970 || integer_to>2106) + { + SPRINT(failure, "Given year '%d' not in range 1970..2106", integer_to); + goto parse_error; + } + } + integer_done: + cond->integer_value = integer; + cond->integer_value_to = integer_to; + cond->value_type = value_type; + break; + + /* parse all string values/ranges */ + case COND_TYPE_STRING: + key[0] = key_to[0] = '\0'; + if (*p==',' || *p==' ' || *p=='\0') + { + SPRINT(failure, "Missing string value, use \"\" for empty string."); + goto parse_error; + } + p = read_string(p, key, sizeof(key), "-, "); + if (key[0] == 1) /* error */ + { + SPRINT(failure, "Parsing String failed: %s", key+1); + goto parse_error; + } + value_type = VALUE_TYPE_STRING; + if (*p == '-') + { + p++; + if (*p==',' || *p==' ' || *p=='\0') + { + SPRINT(failure, "Missing string value, use \"\" for empty string."); + goto parse_error; + } + p = read_string(p, key_to, sizeof(key_to), "-, "); + if (key_to[0] == 1) /* error */ + { + SPRINT(failure, "Parsing string failed: %s", key_to+1); + goto parse_error; + } + value_type = VALUE_TYPE_STRING_RANGE; + if (strlen(key) != strlen(key_to)) + { + SPRINT(failure, "Given range of strings \"%s\"-\"%s\" have unequal length.", key, key_to); + goto parse_error; + } + if (key[0] == '\0') + { + SPRINT(failure, "Given range has no length."); + goto parse_error; + } + } + alloc_string: + cond->string_value = (char *)malloc(strlen(key)+1); + if (cond->string_value == NULL) + { + SPRINT(failure, "Out of memory."); + goto parse_error; + } + rmemuse++; + UCPY(cond->string_value, key); + if (value_type == VALUE_TYPE_STRING_RANGE) + { + cond->string_value_to = (char *)malloc(strlen(key_to)+1); + if (cond->string_value_to == NULL) + { + SPRINT(failure, "Out of memory."); + goto parse_error; + } + rmemuse++; + UCPY(cond->string_value_to, key_to); + cond->comp_string = strcmp(key, key_to); + } + cond->value_type = value_type; + break; + + /* parse service value */ + case COND_TYPE_CAPABILITY: + if (!strncasecmp("speech", p, 6)) + cond->integer_value = INFO_BC_SPEECH; + else if (!strncasecmp("audio", p, 5)) + cond->integer_value = INFO_BC_AUDIO; + else if (!strncasecmp("video", p, 5)) + cond->integer_value = INFO_BC_VIDEO; + else if (!strncasecmp("digital-restricted", p, 18)) + cond->integer_value = INFO_BC_DATARESTRICTED; + else if (!strncasecmp("digital-unrestricted", p, 20)) + cond->integer_value = INFO_BC_DATAUNRESTRICTED; + else if (!strncasecmp("digital-unrestricted-tones", p, 26)) + cond->integer_value = INFO_BC_DATAUNRESTRICTED_TONES; + else + { + SPRINT(failure, "Given service type is invalid or misspelled."); + goto parse_error; + } + cond->value_type = VALUE_TYPE_INTEGER; + break; + + /* parse bmode value */ + case COND_TYPE_BMODE: + if (!strncasecmp("transparent", p, 11)) + cond->integer_value = INFO_BMODE_CIRCUIT; + else if (!strncasecmp("hdlc", p, 4)) + cond->integer_value = INFO_BMODE_PACKET; + else + { + SPRINT(failure, "Given bchannel mode is invalid or misspelled."); + goto parse_error; + } + cond->value_type = VALUE_TYPE_INTEGER; + break; + + /* parse interface attribute : */ + case COND_TYPE_IFATTR: + key[0] = key_to[0] = '\0'; + if (*p==':' || *p==',' || *p==' ' || *p=='\0') + { + SPRINT(failure, "Missing interface name."); + goto parse_error; + } + p = read_string(p, key, sizeof(key), ":-, "); + if (key[0] == 1) /* error */ + { + SPRINT(failure, "Parsing interface failed: %s", key+1); + goto parse_error; + } + if (*p != ':') + { + SPRINT(failure, "Expeciting kolon to seperate value behind interface name."); + goto parse_error; + } + SCCAT(key, *p++); + while(*p>='0' && *p<='9') + { + SCCAT(key, *p++); + } + if (*p!=',' && *p!=' ' && *p!='\0') + { + SPRINT(failure, "Invalid characters behind value."); + goto parse_error; + } + value_type = VALUE_TYPE_STRING; + goto alloc_string; + break; + + default: + SPRINT(failure, "Software error: COND_TYPE_* %d not parsed in function '%s'", cond_defs[index].type, __FUNCTION__); + goto parse_error; + } + /* if we have another value for that item, we attach it */ + if (*p == ',') + { + p++; + /* next item */ + cond->value_extension = 1; + goto nextcondvalue; + } + /* to seperate the items, a space is required */ + if (*p != ' ') + { + SPRINT(failure, "Character '%c' not expected here. Use ',' to seperate multiple possible values.", *p); + goto parse_error; + } + /* skip spaces */ + while(*p == 32) + { + if (*p == 0) + break; + p++; + } + } + + /* we are done with CONDITIONS, so we expect the ACTION */ + if (*p != ':') + { + SPRINT(failure, "Expecting ':' after condition item(s)."); + goto parse_error; + } + p++; + + nextaction: + /* skip spaces, if any */ + while(*p == 32) + { + if (*p == 0) + break; + p++; + } + + /* read action name */ + i = 0; + while((*p>='a' && *p<='z') || (*p>='A' && *p<='Z') || (*p>='0' && *p<='9') || *p == '-') + { + if (*p>='A' && *p<='Z') *p = *p-'A'+'a'; /* lower case */ + key[i++] = *p++; + if (i == sizeof(key)) i--; /* limit */ + } + key[i] = 0; + if (key[0] == '\0') { + SPRINT(failure, "Expecting action name."); + goto parse_error; + } + + /* check if item exists */ + index = 0; + while(action_defs[index].name) + { + if (!action_defs[index].help) /* not internal actions */ + { + index++; + continue; + } + if (!strcmp(action_defs[index].name, key)) + break; + index++; + } + if (action_defs[index].name == NULL) + { + SPRINT(failure, "Unknown action name '%s'.", key); + goto parse_error; + } + + /* alloc memory for action */ + action = (struct route_action *)malloc(sizeof(struct route_action)); + if (action == NULL) + { + SPRINT(failure, "Out of memory."); + goto parse_error; + } + rmemuse++; + memset(action, 0, sizeof(struct route_action)); + *action_pointer = action; + action_pointer = &(action->next); + param_pointer = &(action->param_first); + action->index = index; + action->line = line[nesting]; + + /* skip spaces after param name */ + while(*p == 32) + { + if (*p == 0) + break; + p++; + } + + /* loop PARAMS */ + while(*p != 0) + { + /* read param text */ + i = 0; + while((*p>='a' && *p<='z') || (*p>='A' && *p<='Z') || (*p>='0' && *p<='9')) + { + if (*p>='A' && *p<='Z') *p = *p-'A'+'a'; /* lower case */ + key[i++] = *p++; + if (i == sizeof(key)) i--; /* limit */ + } + key[i] = 0; + if (key[0] == '\0') { + SPRINT(failure, "Expecting parameter name."); + goto parse_error; + } + + /* check if item exists */ + index = 0; + while(param_defs[index].name) + { + if (!strcmp(param_defs[index].name, key)) + break; + index++; + } + if (param_defs[index].name == NULL) + { + SPRINT(failure, "Unknown param name '%s'.", key); + goto parse_error; + } + + /* params without values must not have any parameter */ + if (param_defs[index].type == PARAM_TYPE_NULL) + { + if (*p!=' ' && *p!='\0') + { + SPRINT(failure, "Parameter '%s' must not have any value.", key); + goto parse_error; + } + } else + { + if (*p == ' ') + { + SPRINT(failure, "Parameter '%s' must have at least one value, '=' expected and not a space.", key); + goto parse_error; + } + if (*p != '=') + { + SPRINT(failure, "Parameter '%s' must have at least one value, '=' expected.", key); + goto parse_error; + } + p++; + } + + /* special timeout value */ + if (!strcmp("timeout", key)) + { + if (action->timeout) + { + SPRINT(failure, "Duplicate timeout value."); + goto parse_error; + } + if (*p==',' || *p==' ' || *p=='\0') + { + SPRINT(failure, "Missing integer value."); + goto parse_error; + } + integer = 0; + while(*p>='0' && *p<='9') + { + integer = integer*10 + *p-'0'; + p++; + } + if (integer < 1) + { + SPRINT(failure, "Expecting timeout value greater 0."); + goto parse_error; + } + if (*p!=' ' && *p!='\0') + { + SPRINT(failure, "Character '%c' not expected here. Use ' ' to seperate parameters.", *p); + goto parse_error; + } + /* skip spaces */ + while(*p == 32) + { + if (*p == 0) + break; + p++; + } + action->timeout = integer; + /* check for next ACTION */ + if (*p == ':') + { + p++; + goto nextaction; + } + continue; + } + + /* check for duplicate parameters */ + param = action->param_first; + while(param) + { + if (param->index == index) + { + SPRINT(failure, "Duplicate parameter '%s', use ',' to give multiple values.", key); + goto parse_error; + } + param = param->next; + } + + nextparamvalue: + /* alloc memory for param */ + param = (struct route_param *)malloc(sizeof(struct route_param)); + if (param == NULL) + { + SPRINT(failure, "Out of memory."); + goto parse_error; + } + rmemuse++; + memset(param, 0, sizeof(struct route_param)); + *param_pointer = param; + param_pointer = &(param->next); + param->index = index; + param->id = param_defs[index].id; + + switch(param_defs[index].type) + { + /* parse null value */ + case PARAM_TYPE_NULL: + param->value_type = VALUE_TYPE_NULL; + break; + + /* parse integer value */ + case PARAM_TYPE_INTEGER: + integer = 0; + if (*p==',' || *p==' ' || *p=='\0') + { + SPRINT(failure, "Missing integer value."); + goto parse_error; + } + while(*p>='0' && *p<='9') + { + integer = integer*10 + *p-'0'; + p++; + } + param->integer_value = integer; + param->value_type = VALUE_TYPE_INTEGER; + break; + +#if 0 + /* parse ports value */ + case PARAM_TYPE_PORTS: + key[0] = '\0'; + if (*p==',' || *p==' ' || *p=='\0') + { + SPRINT(failure, "Missing port number, omit parameter or give port number."); + goto parse_error; + } + i = 0; + nextport: + integer = 0; + while(*p>='0' && *p<='9') + { + if (i < (int)sizeof(key)-1) + { + key[i] = *p; + key[i++] = '\0'; + } + integer = integer*10 + *p-'0'; + p++; + } + if (integer > 255) + { + SPRINT(failure, "Port number too high."); + goto parse_error; + } + if (*p==',') + { + if (i < (int)sizeof(key)-1) + { + key[i] = *p; + key[i++] = '\0'; + } + p++; + goto nextport; + } + goto mallocstring; +#endif + + /* parse string value */ + case PARAM_TYPE_STRING: + case PARAM_TYPE_CALLERIDTYPE: + case PARAM_TYPE_CAPABILITY: + case PARAM_TYPE_BMODE: + case PARAM_TYPE_DIVERSION: + case PARAM_TYPE_DESTIN: + case PARAM_TYPE_TYPE: + case PARAM_TYPE_YESNO: + key[0] = '\0'; + if (*p==',' || *p==' ' || *p=='\0') + { + SPRINT(failure, "Missing string value, use \"\" for empty string."); + goto parse_error; + } + p = read_string(p, key, sizeof(key), " "); + if (key[0] == 1) /* error */ + { + SPRINT(failure, "Parsing string failed: %s", key+1); + goto parse_error; + } + if (param_defs[index].type == PARAM_TYPE_CALLERIDTYPE) + { + param->value_type = VALUE_TYPE_INTEGER; + if (!strcasecmp(key, "unknown")) + { + param->integer_value = INFO_NTYPE_UNKNOWN; + break; + } + if (!strcasecmp(key, "subscriber")) + { + param->integer_value = INFO_NTYPE_SUBSCRIBER; + break; + } + if (!strcasecmp(key, "national")) + { + param->integer_value = INFO_NTYPE_NATIONAL; + break; + } + if (!strcasecmp(key, "international")) + { + param->integer_value = INFO_NTYPE_INTERNATIONAL; + break; + } + SPRINT(failure, "Caller ID type '%s' unknown.", key); + goto parse_error; + } + if (param_defs[index].type == PARAM_TYPE_CAPABILITY) + { + param->value_type = VALUE_TYPE_INTEGER; + if (!strcasecmp(key, "speech")) + { + param->integer_value = INFO_BC_SPEECH; + break; + } + if (!strcasecmp(key, "audio")) + { + param->integer_value = INFO_BC_AUDIO; + break; + } + if (!strcasecmp(key, "video")) + { + param->integer_value = INFO_BC_VIDEO; + break; + } + if (!strcasecmp(key, "digital-restricted")) + { + param->integer_value = INFO_BC_DATARESTRICTED; + break; + } + if (!strcasecmp(key, "digital-unrestricted")) + { + param->integer_value = INFO_BC_DATAUNRESTRICTED; + break; + } + if (!strcasecmp(key, "digital-unrestricted-tones")) + { + param->integer_value = INFO_BC_DATAUNRESTRICTED_TONES; + break; + } + SPRINT(failure, "Service type '%s' unknown.", key); + goto parse_error; + } + if (param_defs[index].type == PARAM_TYPE_BMODE) + { + param->value_type = VALUE_TYPE_INTEGER; + if (!strcasecmp(key, "transparent")) + { + param->integer_value = INFO_BMODE_CIRCUIT; + break; + } + if (!strcasecmp(key, "hdlc")) + { + param->integer_value = INFO_BMODE_PACKET; + break; + } + SPRINT(failure, "Bchannel mode '%s' unknown.", key); + goto parse_error; + } + if (param_defs[index].type == PARAM_TYPE_DIVERSION) + { + param->value_type = VALUE_TYPE_INTEGER; + if (!strcasecmp(key, "cfu")) + { + param->integer_value = INFO_DIVERSION_CFU; + break; + } + if (!strcasecmp(key, "cfb")) + { + param->integer_value = INFO_DIVERSION_CFB; + break; + } + if (!strcasecmp(key, "cfnr")) + { + param->integer_value = INFO_DIVERSION_CFNR; + break; + } + if (!strcasecmp(key, "cfp")) + { + param->integer_value = INFO_DIVERSION_CFP; + break; + } + SPRINT(failure, "Diversion type '%s' unknown.", key); + goto parse_error; + } + if (param_defs[index].type == PARAM_TYPE_TYPE) + { + param->value_type = VALUE_TYPE_INTEGER; + if (!strcasecmp(key, "unknown")) + { + param->integer_value = INFO_NTYPE_UNKNOWN; + break; + } + if (!strcasecmp(key, "subscriber")) + { + param->integer_value = INFO_NTYPE_SUBSCRIBER; + break; + } + if (!strcasecmp(key, "national")) + { + param->integer_value = INFO_NTYPE_NATIONAL; + break; + } + if (!strcasecmp(key, "international")) + { + param->integer_value = INFO_NTYPE_INTERNATIONAL; + break; + } + SPRINT(failure, "Number type '%s' unknown.", key); + goto parse_error; + } + if (param_defs[index].type == PARAM_TYPE_YESNO) + { + param->value_type = VALUE_TYPE_INTEGER; + if (!strcasecmp(key, "yes")) + { + param->integer_value = 1; + break; + } + if (!strcasecmp(key, "no")) + { + param->integer_value = 0; + break; + } + SPRINT(failure, "Value '%s' unknown. ('yes' or 'no')", key); + goto parse_error; + } + param->string_value = (char *)malloc(strlen(key)+1); + if (param->string_value == NULL) + { + SPRINT(failure, "Out of memory."); + goto parse_error; + } + rmemuse++; + UCPY(param->string_value, key); + param->value_type = VALUE_TYPE_STRING; + break; + + default: + SPRINT(failure, "Software error: PARAM_TYPE_* %d not parsed in function '%s'", param_defs[index].type, __FUNCTION__); + goto parse_error; + } + + if (*p == ',') + { + p++; + /* next item */ + param->value_extension = 1; + goto nextparamvalue; + } + + /* end of line */ + if (*p == '\0') + break; + + /* to seperate the items, a space is required */ + if (*p != ' ') + { + SPRINT(failure, "Character '%c' not expected here. Use ' ' to seperate parameters, or ',' for multiple values.", *p); + goto parse_error; + } + /* skip spaces */ + while(*p == 32) + { + if (*p == 0) + break; + p++; + } + + /* check for next ACTION */ + if (*p == ':') + { + p++; + goto nextaction; + } + } + } + + fclose(fp[nesting--]); + fduse--; + + if (nesting >= 0) + goto go_root; + + if (!ruleset_start) + { + SPRINT(failure, "No ruleset defined."); + } + return(ruleset_start); + + parse_error: + printf("While parsing %s, an error occurred in line %d:\n", filename[nesting], line[nesting]); + printf("-> %s\n", buffer); + memset(pointer, ' ', sizeof(pointer)); + pointer[p-buffer] = '^'; + pointer[p-buffer+1] = '\0'; + printf(" %s\n", pointer); + printf("%s\n", failure); + SPRINT(ruleset_error, "Error in file %s, line %d: %s", filename[nesting], line[nesting], failure); + + openerror: + while(nesting >= 0) + { + fclose(fp[nesting--]); + fduse--; + } + + ruleset_free(ruleset_start); + return(NULL); +} + +/* + * return ruleset by name + */ +struct route_ruleset *getrulesetbyname(char *name) +{ + struct route_ruleset *ruleset = ruleset_first; + + while(ruleset) + { + if (!strcasecmp(name, ruleset->name)) + { + break; + } + ruleset = ruleset->next; + } + PDEBUG(DEBUG_ROUTE, "ruleset %s %s.\n", name, ruleset?"found":"not found"); + return(ruleset); +} + +/* + * parses the current ruleset and returns action + */ +struct route_action *EndpointAppPBX::route(struct route_ruleset *ruleset) +{ + int match, + couldmatch = 0, /* any rule could match */ + istrue, + couldbetrue, + condition, + dialing_required, + avail, + any; + struct route_rule *rule = ruleset->rule_first; + struct route_cond *cond; + struct route_action *action = NULL; + unsigned long comp_len; + int j, jj; + char callerid[64], redirid[64]; + int integer; + char *string; + FILE *tfp; + double timeout; + struct mISDNport *mISDNport; + + /* reset timeout action */ + e_match_timeout = 0; /* no timeout */ + e_match_to_action = NULL; + + SCPY(callerid, numberrize_callerinfo(e_callerinfo.id, e_callerinfo.ntype)); + SCPY(redirid, numberrize_callerinfo(e_redirinfo.id, e_redirinfo.ntype)); + + PDEBUG(DEBUG_ROUTE, "parsing ruleset '%s'\n", ruleset->name); + while(rule) + { + PDEBUG(DEBUG_ROUTE, "checking rule in line %d\n", rule->line); + match = 1; /* this rule matches */ + dialing_required = 0; + timeout = 0; /* timeout time */ + cond = rule->cond_first; + while(cond) + { + condition = 0; /* any condition element is true (1) or could be true (2) */ + checkextension: + istrue = 0; /* this condition-element is true */ + couldbetrue = 0; /* this conditions-element could be true */ + switch(cond->match) + { + case MATCH_EXTERN: + if (!e_terminal[0]) + istrue = 1; + break; + + case MATCH_INTERN: + if (e_terminal[0]) + istrue = 1; + break; + + case MATCH_H323: +// printf("\n\n\nport-type %x\n\n\n\n", ea_endpoint->ep_portlist->port_type); + if (ea_endpoint->ep_portlist) + if (ea_endpoint->ep_portlist->port_type == PORT_TYPE_H323_IN) + istrue = 1; + break; + + case MATCH_PORT: + if (ea_endpoint->ep_portlist) + if ((ea_endpoint->ep_portlist->port_type & PORT_CLASS_mISDN_MASK) != PORT_CLASS_mISDN_DSS1) + break; + integer = e_callerinfo.isdn_port; + goto match_integer; + + case MATCH_INTERFACE: + if (!e_callerinfo.interface[0]) + break; + string = e_callerinfo.interface; + goto match_string_prefix; + + case MATCH_CALLERID: + string = callerid; + goto match_string_prefix; + + case MATCH_EXTENSION: + string = e_ext.name; + goto match_string; + + case MATCH_DIALING: + string = e_dialinginfo.number; + goto match_string_prefix; + + case MATCH_ENBLOCK: + if (!e_overlap) + istrue = 1; + break; + + case MATCH_OVERLAP: + if (e_overlap) + istrue = 1; + break; + + case MATCH_ANONYMOUS: + if (e_callerinfo.present != INFO_PRESENT_ALLOWED) + istrue = 1; + break; + + case MATCH_VISIBLE: + if (e_callerinfo.present == INFO_PRESENT_ALLOWED) + istrue = 1; + break; + + case MATCH_UNKNOWN: + if (e_callerinfo.present == INFO_PRESENT_NOTAVAIL) + istrue = 1; + break; + + case MATCH_AVAILABLE: + if (e_callerinfo.present != INFO_PRESENT_NOTAVAIL) + istrue = 1; + break; + + case MATCH_FAKE: + if (e_callerinfo.screen == INFO_SCREEN_USER) + istrue = 1; + break; + + case MATCH_REAL: + if (e_callerinfo.screen != INFO_SCREEN_USER) + istrue = 1; + break; + + case MATCH_REDIRECTED: + if (e_redirinfo.present != INFO_PRESENT_NULL) + istrue = 1; + break; + + case MATCH_DIRECT: + if (e_redirinfo.present == INFO_PRESENT_NULL) + istrue = 1; + break; + + case MATCH_REDIRID: + string = redirid; + goto match_string_prefix; + + case MATCH_TIME: + integer = now_tm->tm_hour*100 + now_tm->tm_min; + goto match_integer; + + case MATCH_MDAY: + integer = now_tm->tm_mday; + goto match_integer; + + case MATCH_MONTH: + integer = now_tm->tm_mon+1; + goto match_integer; + + case MATCH_YEAR: + integer = now_tm->tm_year + 1900; + goto match_integer; + + case MATCH_WDAY: + integer = now_tm->tm_wday; + integer = integer?integer:7; /* correct sunday */ + goto match_integer; + + case MATCH_CAPABILITY: + integer = e_capainfo.bearer_capa; + goto match_integer; + + case MATCH_INFOLAYER1: + integer = e_capainfo.bearer_info1; + goto match_integer; + + case MATCH_HLC: + integer = e_capainfo.hlc; + goto match_integer; + + case MATCH_FILE: + tfp = fopen(cond->string_value, "r"); + if (!tfp) + { + break; + } + if (fgetc(tfp) == '1') + istrue = 1; + fclose(tfp); + break; + + case MATCH_EXECUTE: + if (system(cond->string_value) == 0) + istrue = 1; + break; + + case MATCH_DEFAULT: + if (!couldmatch) + istrue = 1; + break; + + case MATCH_TIMEOUT: + timeout = now_d + cond->integer_value; + istrue = 1; + break; + + case MATCH_FREE: + case MATCH_NOTFREE: + if (!(comp_len = (unsigned long)strchr(cond->string_value, ':'))) + break; + comp_len = comp_len-(unsigned long)cond->string_value; + avail = 0; + mISDNport = mISDNport_first; + while(mISDNport) + { + if (mISDNport->ifport) + if (strlen(mISDNport->ifport->interface->name) == comp_len) + if (!strncasecmp(mISDNport->ifport->interface->name, cond->string_value, comp_len)) + if (!mISDNport->ptp || mISDNport->l2link) + { + j = 0; + jj = mISDNport->b_num; + avail += jj; + while(j < jj) + { + if (mISDNport->b_state[j]) + avail--; + j++; + } + } + mISDNport = mISDNport->next; + } + if (cond->match == MATCH_FREE) + { + if (avail >= atoi(cond->string_value + comp_len + 1)) + istrue = 1; + } else + { + if (avail < atoi(cond->string_value + comp_len + 1)) + istrue = 1; + } + break; + + + case MATCH_DOWN: + mISDNport = mISDNport_first; + while(mISDNport) + { + if (mISDNport->ifport) + if (!strcasecmp(mISDNport->ifport->interface->name, cond->string_value)) + if (!mISDNport->ptp || mISDNport->l2link) /* break if one is up */ + break; + mISDNport = mISDNport->next; + } + if (!mISDNport) /* all down */ + istrue = 1; + break; + + case MATCH_UP: + mISDNport = mISDNport_first; + while(mISDNport) + { + if (mISDNport->ifport) + if (!strcasecmp(mISDNport->ifport->interface->name, cond->string_value)) + if (!mISDNport->ptp || mISDNport->l2link) /* break if one is up */ + break; + + mISDNport = mISDNport->next; + } + if (mISDNport) /* one link at least */ + istrue = 1; + break; + + case MATCH_BUSY: + any = 0; + mISDNport = mISDNport_first; + while(mISDNport) + { + if (mISDNport->ifport) + if (!strcasecmp(mISDNport->ifport->interface->name, cond->string_value)) + if (mISDNport->use) /* break if in use */ + break; + mISDNport = mISDNport->next; + } + if (mISDNport) + istrue = 1; + break; + + case MATCH_IDLE: + mISDNport = mISDNport_first; + while(mISDNport) + { + if (mISDNport->ifport) + if (!strcasecmp(mISDNport->ifport->interface->name, cond->string_value)) + if (mISDNport->use) /* break if in use */ + break; + mISDNport = mISDNport->next; + } + if (!mISDNport) + istrue = 1; + break; + + default: + PERROR("Software error: MATCH_* %d not parsed in function '%s'", cond->match, __FUNCTION__); + break; + + match_integer: + if (cond->value_type == VALUE_TYPE_INTEGER) + { + if (integer != cond->integer_value) + break; + istrue = 1; + break; + } + if (cond->value_type == VALUE_TYPE_INTEGER_RANGE) + { + /* check if negative range (2100 - 700 o'clock) */ + if (cond->integer_value > cond->integer_value_to) + { + if (integer>=cond->integer_value && integer<=cond->integer_value_to) + istrue = 1; + break; + } + /* range is positive */ + if (integer>=cond->integer_value && integer<=cond->integer_value_to) + istrue = 1; + break; + } + break; + + match_string: + if (strlen(cond->string_value) != strlen(string)) + break; + /* fall through */ + match_string_prefix: + comp_len = strlen(cond->string_value); /* because we must reach value's length */ + /* we must have greater or equal length to values */ + if ((unsigned long)strlen(string) < comp_len) + { + /* special case for unfinished dialing */ + if (cond->match == MATCH_DIALING) + { + couldbetrue = 1; /* could match */ + comp_len = strlen(string); + } else + { + break; + } + } + /* on single string match */ + if (cond->value_type == VALUE_TYPE_STRING) + { + if (!strncmp(string, cond->string_value, comp_len)) + { + istrue = 1; + /* must be set for changing 'e_extdialing' */ + if (cond->match == MATCH_DIALING) + dialing_required = comp_len; + break; + } + break; + } + /* on range match */ + if (cond->value_type == VALUE_TYPE_STRING_RANGE) + { + /* check if negative range ("55"-"22") */ + if (cond->comp_string > 0) + { + if (strncmp(string, cond->string_value, comp_len) >= 0) + { + istrue = 1; + /* must be set for changing 'e_extdialing' */ + if (cond->match == MATCH_DIALING) + dialing_required = comp_len; + break; + } + if (strncmp(string, cond->string_value_to, comp_len) <= 0) + { + /* must be set for changing 'e_extdialing' */ + istrue = 1; + if (cond->match == MATCH_DIALING) + dialing_required = comp_len; + break; + } + break; + } + /* range is positive */ + if (strncmp(string, cond->string_value, comp_len) < 0) + break; + if (strncmp(string, cond->string_value_to, comp_len) > 0) + break; + istrue = 1; + if (cond->match == MATCH_DIALING) + dialing_required = comp_len; + break; + } + break; + } + + /* set current condition */ + if (istrue && !couldbetrue) + condition = 1; /* element matches, so condition matches */ + if (istrue && couldbetrue && !condition) + condition = 2; /* element could match and other elements don't match, so condition could match */ + + /* if not matching or could match */ + if (condition != 1) + { + /* if we have more values to check */ + if (cond->value_extension && cond->next) + { + cond = cond->next; + goto checkextension; + } + match = condition; + break; + } + + /* skip exteded values, beacuse we already have one matching value */ + while(cond->value_extension && cond->next) + cond = cond->next; + + cond = cond->next; + } + if (timeout>now_d && match==1) /* the matching rule with timeout in the future */ + if (e_match_timeout<1 || timeoutaction_first; + e_match_to_extdialing = e_dialinginfo.number + dialing_required; + match = 0; /* matches in the future */ + } + if (match == 1) + { + /* matching, we return first action */ + action = rule->action_first; + e_match_timeout = 0; /* no timeout */ + e_match_to_action = NULL; + e_extdialing = e_dialinginfo.number + dialing_required; + break; + } + if (match == 2) + { + /* rule could match if more is dialed */ + couldmatch = 1; + } + rule = rule->next; + } + return(action); +} + +/* + * parses the current action's parameters and return them + */ +struct route_param *EndpointAppPBX::routeparam(struct route_action *action, unsigned long long id) +{ + struct route_param *param = action->param_first; + + while(param) + { + if (param->id == id) + break; + param = param->next; + } + return(param); +} + + +/* + * internal rules that are not defined by route.conf + */ +struct route_action action_password = { + NULL, + NULL, + ACTION_PASSWORD, + 0, + 0, +}; + +struct route_action action_password_write = { + NULL, + NULL, + ACTION_PASSWORD_WRITE, + 0, + 0, +}; + +struct route_action action_external = { + NULL, + NULL, + ACTION_EXTERNAL, + 0, + 0, +}; + +struct route_action action_internal = { + NULL, + NULL, + ACTION_INTERNAL, + 0, + 0, +}; + +struct route_action action_h323 = { + NULL, + NULL, + ACTION_H323, + 0, + 0, +}; + +struct route_action action_chan = { + NULL, + NULL, + ACTION_CHAN, + 0, + 0, +}; + +struct route_action action_vbox = { + NULL, + NULL, + ACTION_VBOX_RECORD, + 0, + 0, +}; + +struct route_action action_partyline = { + NULL, + NULL, + ACTION_PARTYLINE, + 0, + 0, +}; + +struct route_action action_disconnect = { + NULL, + NULL, + ACTION_DISCONNECT, + 0, + 0, +}; + + diff --git a/route.h b/route.h new file mode 100644 index 0000000..c4da1b4 --- /dev/null +++ b/route.h @@ -0,0 +1,282 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** match header file ** +** ** +\*****************************************************************************/ + + +/* memory structure of rulesets */ + +enum { /* value types */ + VALUE_TYPE_NULL, + VALUE_TYPE_INTEGER, + VALUE_TYPE_INTEGER_RANGE, + VALUE_TYPE_STRING, + VALUE_TYPE_STRING_RANGE, +}; + +enum { /* how to parse text file during startup */ + COND_TYPE_NULL, + COND_TYPE_INTEGER, + COND_TYPE_TIME, + COND_TYPE_MDAY, + COND_TYPE_MONTH, + COND_TYPE_WDAY, + COND_TYPE_YEAR, + COND_TYPE_STRING, + COND_TYPE_IP, + COND_TYPE_CAPABILITY, + COND_TYPE_BMODE, + COND_TYPE_IFATTR, +}; + +enum { /* what to check during runtime */ +#ifdef PBX + MATCH_EXTERN, + MATCH_INTERN, +#endif + MATCH_H323, +// MATCH_IP, + MATCH_PORT, + MATCH_INTERFACE, + MATCH_CALLERID, + MATCH_EXTENSION, + MATCH_DIALING, + MATCH_ENBLOCK, + MATCH_OVERLAP, + MATCH_ANONYMOUS, + MATCH_VISIBLE, + MATCH_UNKNOWN, + MATCH_AVAILABLE, + MATCH_FAKE, + MATCH_REAL, + MATCH_REDIRECTED, + MATCH_DIRECT, + MATCH_REDIRID, + MATCH_TIME, + MATCH_MDAY, + MATCH_MONTH, + MATCH_YEAR, + MATCH_WDAY, + MATCH_CAPABILITY, + MATCH_INFOLAYER1, + MATCH_HLC, + MATCH_FILE, + MATCH_EXECUTE, + MATCH_DEFAULT, + MATCH_TIMEOUT, + MATCH_FREE, + MATCH_NOTFREE, + MATCH_DOWN, + MATCH_UP, + MATCH_BUSY, + MATCH_IDLE, +}; + +enum { /* how to parse text file during startup */ + PARAM_TYPE_NULL, + PARAM_TYPE_INTEGER, + PARAM_TYPE_STRING, + PARAM_TYPE_YESNO, + PARAM_TYPE_CAPABILITY, + PARAM_TYPE_BMODE, + PARAM_TYPE_DIVERSION, + PARAM_TYPE_DESTIN, + PARAM_TYPE_PORTS, + PARAM_TYPE_TYPE, + PARAM_TYPE_CALLERIDTYPE, +}; + +/* parameter ID bits */ +#define PARAM_PROCEEDING 1LL +#define PARAM_ALERTING (1LL<<1) +#define PARAM_CONNECT (1LL<<2) +#ifdef PBX +#define PARAM_EXTENSION (1LL<<3) +#define PARAM_EXTENSIONS (1LL<<4) +#endif +#define PARAM_PREFIX (1LL<<5) +#define PARAM_CAPA (1LL<<6) +#define PARAM_BMODE (1LL<<7) +#define PARAM_INFO1 (1LL<<8) +#define PARAM_HLC (1LL<<9) +#define PARAM_EXTHLC (1LL<<10) +#define PARAM_PRESENT (1LL<<11) +#define PARAM_DIVERSION (1LL<<12) +#define PARAM_DEST (1LL<<13) +#define PARAM_SELECT (1LL<<14) +#define PARAM_DELAY (1LL<<15) +#define PARAM_LIMIT (1LL<<16) +#define PARAM_HOST (1LL<<17) +#define PARAM_PORT (1LL<<18) +#define PARAM_INTERFACES (1LL<<19) +#define PARAM_ADDRESS (1LL<<20) +#define PARAM_SAMPLE (1LL<<21) +#ifdef PBX +#define PARAM_ANNOUNCEMENT (1LL<<22) +#endif +#define PARAM_RULESET (1LL<<23) +#define PARAM_CAUSE (1LL<<24) +#define PARAM_LOCATION (1LL<<25) +#define PARAM_DISPLAY (1LL<<26) +#define PARAM_PORTS (1LL<<27) +#define PARAM_TPRESET (1LL<<28) +#define PARAM_FILE (1LL<<29) +#define PARAM_CONTENT (1LL<<30) +#define PARAM_APPEND (1LL<<31) +#define PARAM_EXECUTE (1LL<<32) +#define PARAM_PARAM (1LL<<33) +#define PARAM_TYPE (1LL<<34) +#define PARAM_COMPLETE (1LL<<35) +#define PARAM_CALLERID (1LL<<36) +#define PARAM_CALLERIDTYPE (1LL<<37) +#define PARAM_CALLTO (1LL<<38) +#define PARAM_ROOM (1LL<<39) +#define PARAM_TIMEOUT (1LL<<40) +#ifdef PBX +#define PARAM_NOPASSWORD (1LL<<41) +#endif + + +/* action index + * NOTE: The given index is the actual entry number of action_defs[], so add/remove both lists!!! + */ +#define ACTION_EXTERNAL 0 +#define ACTION_INTERNAL 1 +#define ACTION_OUTDIAL 2 +#define ACTION_H323 3 +#define ACTION_CHAN 4 +#define ACTION_VBOX_RECORD 5 +#define ACTION_PARTYLINE 6 +#define ACTION_LOGIN 7 +#define ACTION_CALLERID 8 +#define ACTION_CALLERIDNEXT 9 +#define ACTION_FORWARD 10 +#define ACTION_REDIAL 11 +#define ACTION_REPLY 12 +#define ACTION_POWERDIAL 13 +#define ACTION_CALLBACK 14 +#define ACTION_ABBREV 15 +#define ACTION_TEST 16 +#define ACTION_PLAY 17 +#define ACTION_VBOX_PLAY 18 +#define ACTION_CALCULATOR 19 +#define ACTION_TIMER 20 +#define ACTION_GOTO 21 +#define ACTION_MENU 22 +#define ACTION_DISCONNECT 23 +#define ACTION_HELP 24 +#define ACTION_DEFLECT 25 +#define ACTION_SETFORWARD 26 +#define ACTION_EXECUTE 27 +#define ACTION_FILE 28 +#define ACTION_PICK 29 +#define ACTION_PASSWORD 30 +#define ACTION_PASSWORD_WRITE 31 +#define ACTION_NOTHING 32 +#define ACTION_EFI 33 + +struct route_cond { /* an item */ + struct route_cond *next; /* next entry */ + int index; /* index of cond_defs */ + int match; /* what is matching (MATCH_*) */ + int value_type; /* type of value (VALUE_TYPE_*) */ + int value_extension; /* will it be extended? */ + int integer_value; /* first integer */ + int integer_value_to; /* second integer */ + char *string_value; /* first string */ + char *string_value_to; /* second string */ + int comp_string; /* compare value of strings */ +}; + +struct route_param { /* a parameter */ + struct route_param *next; /* next item */ + int index; /* index of param_defs */ + unsigned long long id; /* what is it (PARAM_*) */ + int value_type; /* type of value (VALUE_TYPE_*) */ + int value_extension; /* will it be extended? */ + int integer_value; /* integer value */ + char *string_value; /* string value */ +}; + +struct route_action { /* an action has a list of parameters */ + struct route_action *next; /* next item */ + struct route_param *param_first; /* link to parameter list */ + int index; /* index of action_defs */ + int timeout; /* timeout value for action (0 = no timeout) */ + int line; /* line parsed from */ +}; + +struct route_rule { /* a rule has a list of items and actions */ + struct route_rule *next; /* next item */ + char file[128]; /* filename */ + int line; /* line parsed from */ + struct route_cond *cond_first; /* link to condition list */ + struct route_action *action_first; /* link to action list */ +}; + +struct route_ruleset { /* the ruleset is a list of rules */ + struct route_ruleset *next; /* next item */ + char file[128]; /* filename */ + int line; /* line parsed from */ + char name[64]; /* name of rule */ + struct route_rule *rule_first; /* linke to rule list */ +}; + +struct cond_defs { /* defintion of all conditions */ + char *name; /* item's name */ + int match; /* what to check */ + int type; /* type of value (COND_TYPE) */ + char *doc; /* syntax */ + char *help; /* short help */ +}; + +struct param_defs { /* definition of all options */ + unsigned long long id; /* ID of parameter (just for checking) */ + char *name; /* name of parameter */ + int type; /* type of value (PARAM_TYPE_*) */ + char *doc; /* syntax */ + char *help; /* quick help */ +}; + +struct action_defs { /* definition of all actions */ + int id; /* ID of parameter (just for checking) */ + char *name; + void (EndpointAppPBX::*init_func)(void); + void (EndpointAppPBX::*dialing_func)(void); + void (EndpointAppPBX::*hangup_func)(void); + unsigned long long params; + char *help; +}; + + + +extern struct cond_defs cond_defs[]; +extern struct param_defs param_defs[]; +extern struct action_defs action_defs[]; +extern struct route_ruleset *ruleset_first; +extern struct route_ruleset *ruleset_main; +extern struct route_action action_external; +extern struct route_action action_internal; +extern struct route_action action_h323; +extern struct route_action action_chan; +extern struct route_action action_vbox; +extern struct route_action action_partyline; +extern struct route_action action_password; +extern struct route_action action_password_write; +extern struct route_action action_disconnect; + +/* functions */ + +void doc_rules(const char *action); +void ruleset_free(struct route_ruleset *ruleset_start); +void ruleset_debug(struct route_ruleset *ruleset_start); +extern char ruleset_error[256]; +struct route_ruleset *ruleset_parse(void); +struct route_ruleset *getrulesetbyname(char *name); + diff --git a/save.h b/save.h new file mode 100644 index 0000000..9b2d8a9 --- /dev/null +++ b/save.h @@ -0,0 +1,64 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** Macros to do save string operations to avoid buffer overflows. ** +** ** +\*****************************************************************************/ + + +/* save strcpy/strncpy */ + +#define SCPY(dst, src) scpy(dst, src, sizeof(dst)) +extern __inline__ void scpy(char *dst, char *src, unsigned int siz) +{ + strncpy(dst, src, siz); + dst[siz-1] = '\0'; +} + +/* save strcat/strncat */ + +#define SCAT(dst, src) scat(dst, src, sizeof(dst)) +extern __inline__ void scat(char *dst, char *src, unsigned int siz) +{ + strncat(dst, src, siz); + dst[siz-1] = '\0'; +} + +/* save concat of a byte */ + +#define SCCAT(dst, src) sccat(dst, src, sizeof(dst)) +extern __inline__ void sccat(char *dst, char chr, unsigned int siz) +{ + if (strlen(dst) < siz-1) + { + dst[strlen(dst)+1] = '\0'; + dst[strlen(dst)] = chr; + } +} + +/* save sprintf/snprintf */ + +#define SPRINT(dst, fmt, arg...) sprint(dst, sizeof(dst), fmt, ## arg) +extern __inline__ void sprint(char *dst, unsigned int siz, char *fmt, ...) +{ + va_list args; + + va_start(args, fmt); + vsnprintf(dst, siz, fmt, args); + dst[siz-1] = '\0'; + va_end(args); +} + +/* unsave */ +#define UCPY strcpy +#define UNCPY strncpy +#define UCAT strcat +#define UNCAT strncat +#define UPRINT sprintf +#define UNPRINT snprintf +#define VUNPRINT vsnprintf + diff --git a/todo.txt b/todo.txt new file mode 100644 index 0000000..cedebe3 --- /dev/null +++ b/todo.txt @@ -0,0 +1,37 @@ + + +make asterisk call implementation + +interface.conf neu + +mixer abspecken + +call recording + +call zu mehreren extensions + + + + + + + + + + + +old stuff.... + +NOTE: check CENTREX + +durchstellen mit disconnect +durchstellen mit keypad +ruf bei CFP gibt besetzt, wenn teilnehmer intern besetzt ist. +short ring +sleep relaxed +auto pick +alarm clock (timer) +sonderwahlton +facility: diversion, 3pty, ... + + diff --git a/tones.c b/tones.c new file mode 100644 index 0000000..45c05c9 --- /dev/null +++ b/tones.c @@ -0,0 +1,669 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** opening and reading tone ** +** ** +\*****************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "main.h" + +/* +notes about codecs: + +CODEC_OFF is a none accepted value +CODEC_LAW is 8 bit (1 byte) data 8khz +other codecs are 16 bit (2 bytes) data 8khz +the read_tone() will return law or 16bit mono. the read_tone will convert all other formats to 16bit mono. + +*/ + + +/* + * open the tone (don't increase fhuse, since it is done after calling this function) + * NOTE: length and left will be set to the number of samples, NOT bytes + */ +struct fmt { + unsigned short stereo; /* 1 = pcm, 2 = adpcm */ + unsigned short channels; /* number of channels */ + unsigned long sample_rate; /* sample rate */ + unsigned long data_rate; /* data rate */ + unsigned short bytes_sample; /* bytes per sample (all channels) */ + unsigned short bits_sample; /* bits per sample (one channel) */ +}; +int open_tone(char *file, int *codec, signed long *length, signed long *left) +{ + int fh; + char filename[256]; + char linkname[256]; + unsigned char buffer[256]; + struct fmt *fmt; + int channels, bytes; + unsigned long size, chunk; + int gotfmt = 0; + struct stat _stat; + int linksize; + int l; + char *p; + + + /* try to open the law file */ + SPRINT(filename, "%s.isdn", file); + if ((fh = open(filename, O_RDONLY)) >= 0) + { + /* stat tone */ + l = 0; + while(42) + { + if (l >= 10) + { + close(fh); + PERROR("Link chain too deep: '%s'\n", filename); + return(-1); + } + if (lstat(filename, &_stat) == -1) + { + close(fh); + PERROR("Cannot stat file: '%s'\n", filename); + return(-1); + } + if (!S_ISLNK(_stat.st_mode)) + { + break; + } + if ((linksize=readlink(filename, linkname, sizeof(linkname))) > 0) + { + linkname[linksize] = '\0'; + } else + { + close(fh); + PERROR("Cannot read link information: '%s'\n", filename); + return(-1); + } + if (linkname[0] == '/') /* absolute link */ + { + SCPY(filename, linkname); + } else /* relative link */ + { + /* remove filename */ + p = filename; + while(strchr(p, '/')) + { + p = strchr(p, '/')+1; + } + *p = 0; + /* concat the link */ + SCAT(filename, linkname); + } +//printf("follow link: %s\n", filename); + l++; + } + if (length) + *length = _stat.st_size; + if (left) + *left = _stat.st_size; + if (codec) + *codec = CODEC_LAW; + return(fh); + } + + /* try to open the wave file */ + SPRINT(filename, "%s.wav", file); + if ((fh = open(filename, O_RDONLY)) >= 0) + { + /* get wave header */ + read(fh, buffer, 8); + size=(buffer[4]) + (buffer[5]<<8) + (buffer[6]<<16) + (buffer[7]<<24); + if (!!strncmp((char *)buffer, "RIFF", 4)) + { + close(fh); + errno = 0; + PERROR("%s is no riff file!\n", filename); + return(-1); + } +// printf("%c%c%c%c size=%ld\n",buffer[0],buffer[1],buffer[2],buffer[3],size); + read(fh, buffer, 4); + size -= 4; + if (!!strncmp((char *)buffer, "WAVE", 4)) + { + close(fh); + errno = 0; + PERROR("%s is no wave file!\n", filename); + return(-1); + } + while(size) + { + if (size>0 && size<8) + { + close(fh); + errno = 0; + PERROR("Remaining file size %ld not large enough for next chunk.\n",size); + return(-1); + } + read(fh, buffer, 8); + chunk=(buffer[4]) + (buffer[5]<<8) + (buffer[6]<<16) + (buffer[7]<<24); + size -= (8+chunk); +// printf("%c%c%c%c lenght=%d\n",buffer[0],buffer[1],buffer[2],buffer[3],chunk); + if (size < 0) + { + close(fh); + errno = 0; + PERROR("Chunk '%c%c%c%c' is larger than remainig file size (length=%ld)\n",buffer[0],buffer[1],buffer[2],buffer[3], chunk); + return(-1); + } + if (!strncmp((char *)buffer, "fmt ", 4)) + { + if (chunk != 16) + { + close(fh); + errno = 0; + PERROR("File %s Fmt chunk illegal size.\n", filename); + return(-1); + } + read(fh, buffer, chunk); + fmt = (struct fmt *)buffer; + if (fmt->channels<1 || fmt->channels>2) + { + close(fh); + errno = 0; + PERROR("File %s Only support one or two channels file.\n", filename); + return(-1); + } + channels = fmt->channels; +// printf("Channels: %d\n", channels); + if (fmt->sample_rate != 8000) + { + PERROR("Warning: File %s has sample rate of %ld.\n", filename, fmt->sample_rate); + } +// printf("Sample Rate: %ld\n", fmt->sample_rate); + if (fmt->bits_sample!=8 && fmt->bits_sample!=16) + { + close(fh); + errno = 0; + PERROR("File %s has neigher 8 nor 16 bit samples.\n", filename); + return(-1); + } + bytes = (fmt->bits_sample==16)?2:1; +// printf("Bit-Resolution: %d\n", bytes*16-16); + gotfmt = 1; + } else + if (!strncmp((char *)buffer, "data", 4)) + { + if (!gotfmt) + { + close(fh); + errno = 0; + PERROR("File %s No fmt chunk found before data chunk.\n", filename); + return(-1); + } +// printf("Length: %ld samples (%ld.%03ld seconds)\n", chunk/bytes/channels, chunk/bytes/channels/8000, ((chunk/bytes/channels)%8000)*1000/8000); + if (bytes==2 && channels==1) + { + if (codec) + *codec = CODEC_MONO; + if (length) + *length = ((signed long)chunk)>>1; + if (left) + *left = ((signed long)chunk)>>1; + } else + if (bytes==2 && channels==2) + { + if (codec) + *codec = CODEC_STEREO; + if (length) + *length = ((signed long)chunk)>>2; + if (left) + *left = ((signed long)chunk)>>2; + } else + if (bytes==1 && channels==1) + { + if (codec) + *codec = CODEC_8BIT; + if (length) + *length = (signed long)chunk; + if (left) + *left = (signed long)chunk; + } else + { + close(fh); + errno = 0; + PERROR("File %s Is not MONO8, MONO16 nor STEREO16.\n", filename); + return(-1); + } + return(fh); + } else + { +// PDEBUG(DEBUG_PORT, "Unknown chunk '%c%c%c%c'\n",buffer[0],buffer[1],buffer[2],buffer[3]); + while(chunk > sizeof(buffer)) + { + read(fh, buffer, sizeof(buffer)); + chunk -= sizeof(buffer); + } + if (chunk) + read(fh, buffer, chunk); + } + + } + if (!gotfmt) + { + close(fh); + errno = 0; + PERROR("File %s No fmt chunk found in file.\n", filename); + return(-1); + } + close(fh); + errno = 0; + PERROR("File %s No data chunk found in file.\n", filename); + return(-1); + } + + return(-1); +} + + +/* + * read from tone, check size + * the len must be the number of samples, NOT for the bytes to read!! + */ +int read_tone(int fh, void *buffer, int codec, int len, signed long size, signed long *left, int speed) +{ + int l; + int offset; +//printf("left=%ld\n",*left); + + /* if no *left is given (law has unknown length) */ + if (!left) + goto unknown_length; + + if (speed!=1) + { + offset = ((len&(~4)) * (speed-1)); + lseek(fh, offset, SEEK_CUR); /* step fowards, backwards (len must be round to 4 bytes, to be sure, that 16bit stereo will not drift out of sync)*/ + *left -= offset; /* correct the current bytes left */ + if (*left < 0) + { + /* eof */ + *left = 0; + return(0); + } + if (*left >= size) + { + /* eof */ + *left = size; + return(0); + } + } + + if (*left == 0) + return(0); + + if (*left < len) + len = *left; + unknown_length: + switch(codec) + { + case CODEC_LAW: + l = read(fh, buffer, len); /* as is */ + break; + + case CODEC_MONO: + l = read(fh, buffer, len<<1); /* as is */ + if (l>0) + l = l>>1; + break; + + case CODEC_STEREO: + { + signed short buffer32[len<<1], *buf32 = buffer32; + signed short *buf16 = (signed short *)buffer; + signed long sample; + int i = 0; + l = read(fh, buf32, len<<2); + if (l>0) + { + l = l>>2; + while(i < l) + { + sample = (*buf32++) + (*buf32++); + if (sample < -32767) + sample = -32767; + if (sample > 32767) + sample = 32767; + *buf16++ = sample; + i++; + } + } + } + break; + + case CODEC_8BIT: + { + unsigned char buffer8[len], *buf8 = buffer8; + signed short *buf16 = (signed short *)buffer; + int i = 0; + l = read(fh, buf8, len); + if (l>0) + { + while(i < l) + { + *buf16++ = (((*buf8++) << 8) - 0x8000) & 0xffff; + i++; + } + } + } + break; + + default: + PERROR("codec %d is not specified or supported, exitting...\n", codec); + exit(-1); + } + + if (l>0 && left) + *left -= l; + return(l); +} + + +struct toneset *toneset_first = NULL; + +/* + * free fetched tones + */ +void free_tones(void) +{ + struct toneset *toneset_temp; + struct tonesettone *tonesettone_temp; + void *temp; + + toneset_temp = toneset_first; + while(toneset_temp) + { + tonesettone_temp = toneset_temp->first; + while(tonesettone_temp) + { + temp = tonesettone_temp; + tonesettone_temp = tonesettone_temp->next; + free(temp); + memuse--; + } + temp = toneset_temp; + toneset_temp = toneset_temp->next; + free(temp); + memuse--; + } + toneset_first = NULL; +} + +/* + * fetch tones as specified in options.conf + */ +int fetch_tones(void) +{ + DIR *dir; + struct dirent *dirent; + struct toneset **toneset_nextpointer; + struct tonesettone **tonesettone_nextpointer; + char *p, *p_next; + char path[256]; + char filename[256], name[256]; + int fh; + int tone_codec; + signed long tone_size, tone_left, real_size; + unsigned long memory = 0; + int samples = 0; + + /* if disabled */ + if (!options.fetch_tones) + return(1); + + toneset_nextpointer = &toneset_first; + p = options.fetch_tones; + if (*p == '\0') + return(1); + + while (*p) + { + p_next = p; + while(*p_next) + { + if (*p_next == ',') + { + *p_next = '\0'; + p_next++; + break; + } + p_next++; + } + + /* remove trailing / */ + if (*p) if (p[strlen(p)-1] == '/') + p[strlen(p)-1] = '\0'; + + printf("PBX: Fetching tones '%s'\n", p); + PDEBUG(DEBUG_PORT, "fetching tones directory '%s'\n", p); + + *toneset_nextpointer = (struct toneset *)calloc(1, sizeof(struct toneset)); + if (*toneset_nextpointer == NULL) + { + PERROR("No memory for tone set: '%s'\n",p); + return(0); + } + memuse++; + memory += sizeof(struct toneset); + memset(*toneset_nextpointer, 0 , sizeof(struct toneset)); + SCPY((*toneset_nextpointer)->directory, p); + tonesettone_nextpointer = &(*toneset_nextpointer)->first; + + SPRINT(path, "%s/%s", INSTALL_DATA, p); + dir = opendir(path); + if (dir == NULL) + { + PERROR("Tone set not found: '%s'\n", path); + return(0); + } + + while((dirent=readdir(dir))) + { + SPRINT(name, "%s", dirent->d_name); + + /* remove .isdn and .wave */ + if (strlen(name) >= 4) + { + if (!strcmp(name+strlen(name)-4, ".wav")) + name[strlen(name)-4] = '\0'; + } + if (strlen(name) >= 5) + { + if (!strcmp(name+strlen(name)-5, ".isdn")) + name[strlen(name)-5] = '\0'; + } + + SPRINT(filename, "%s/%s", path, name); + + /* skip . / .. */ + if (!strcmp(dirent->d_name, ".")) + continue; + if (!strcmp(dirent->d_name, "..")) + continue; + + /* open file */ + fh = open_tone(filename, &tone_codec, &tone_size, &tone_left); + if (fh < 0) + { + PERROR("Cannot open file: '%s'\n", filename); + continue; + } + fduse++; + + if (tone_size < 0) + { + PERROR("File has 0-length: '%s'\n", filename); + close(fh); + fduse--; + continue; + } + + /* real size */ + switch(tone_codec) + { + case CODEC_LAW: + real_size = tone_size; + break; + + case CODEC_MONO: + real_size = tone_size << 1; + break; + + case CODEC_STEREO: + real_size = tone_size << 1; + break; + + case CODEC_8BIT: + real_size = tone_size << 1; + break; + + default: + PERROR("codec %d is not specified or supported, exitting...\n", tone_codec); + exit(-1); + } + + /* allocate tone */ + *tonesettone_nextpointer = (struct tonesettone *)calloc(1, sizeof(struct tonesettone)+real_size); + if (*toneset_nextpointer == NULL) + { + PERROR("No memory for tone set: '%s'\n",p); + close(fh); + fduse--; + return(0); + } + memuse++; +//printf("tone:%s, %ld bytes\n", name, tone_size); + memset(*tonesettone_nextpointer, 0 , sizeof(struct tonesettone)+real_size); + memory += sizeof(struct tonesettone)+real_size; + samples ++; + + /* load tone */ + read_tone(fh, (*tonesettone_nextpointer)->data, tone_codec, tone_size, tone_size, &tone_left, 1); + (*tonesettone_nextpointer)->size = tone_size; + (*tonesettone_nextpointer)->codec = (tone_codec==CODEC_LAW)?CODEC_LAW:CODEC_MONO; + SCPY((*tonesettone_nextpointer)->name, name); + + close(fh); + fduse--; + + tonesettone_nextpointer = &((*tonesettone_nextpointer)->next); + } + + toneset_nextpointer = &((*toneset_nextpointer)->next); + p = p_next; + } + + printf("PBX: Memory used for tones: %ld bytes (%d samples)\n", memory, samples); + PDEBUG(DEBUG_PORT, "Memory used for tones: %ld bytes (%d samples)\n", memory, samples); + + return(1); +} + + +/* + * opens the fetched tone (if available) + */ +void *open_tone_fetched(char *dir, char *file, int *codec, signed long *length, signed long *left) +{ + struct toneset *toneset; + struct tonesettone *tonesettone; + + /* if anything fetched */ + if (!toneset_first) + return(NULL); + + /* find set */ + toneset = toneset_first; + while(toneset) + { +//printf("1. comparing '%s' with '%s'\n", toneset->directory, dir); + if (!strcmp(toneset->directory, dir)) + break; + toneset = toneset->next; + } + if (!toneset) + return(NULL); + + /* find tone */ + tonesettone = toneset->first; + while(tonesettone) + { +//printf("2. comparing '%s' with '%s'\n", tonesettone->name, file); + if (!strcmp(tonesettone->name, file)) + break; + tonesettone = tonesettone->next; + } + if (!tonesettone) + return(NULL); + + /* return information */ + if (length) + *length = tonesettone->size; + if (left) + *left = tonesettone->size; + if (codec) + *codec = tonesettone->codec; +//printf("size=%ld, data=%08x\n", tonesettone->size, tonesettone->data); + return(tonesettone->data); +} + + +/* + * read from fetched tone, check size + * the len must be the number of samples, NOT for the bytes to read!! + */ +int read_tone_fetched(void **fetched, void *buffer, int codec, int len, signed long size, signed long *left, int speed) +{ + int l; +//printf("left=%ld\n",*left); + + /* if no *left is given (law has unknown length) */ + if (!left) + return(0); + + if (*left == 0) + return(0); + + if (*left < len) + len = *left; + switch(codec) + { + case CODEC_LAW: + memcpy(buffer, *fetched, len); + *((char **)fetched) += len; + l = len; + break; + + case CODEC_MONO: + memcpy(buffer, *fetched, len<<1); + *((char **)fetched) += len<<1; + l = len; + break; + + default: + PERROR("codec %d is not specified or supported, exitting...\n", codec); + exit(-1); + } + + if (l>0 && left) + *left -= l; + return(l); +} + diff --git a/tones.h b/tones.h new file mode 100644 index 0000000..9901dc5 --- /dev/null +++ b/tones.h @@ -0,0 +1,36 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** tones header file ** +** ** +\*****************************************************************************/ + +int open_tone(char *file, int *codec, signed long *length, signed long *left); +int read_tone(int fh, void *buffer, int codec, int len, signed long size, signed long *left, int speed); +int fetch_tones(void); +void free_tones(void); +void *open_tone_fetched(char *dir, char *file, int *codec, signed long *length, signed long *left); +int read_tone_fetched(void **fetched, void *buffer, int codec, int len, signed long size, signed long *left, int speed); + +/* tone sets */ +struct tonesettone { + struct tonesettone *next; + char name[128]; + int codec; + int size; + unsigned char data[0]; + }; + +struct toneset { + struct toneset *next; + char directory[128]; + struct tonesettone *first; + }; + +extern struct toneset *toneset_first; + + diff --git a/tones_american/activated_loop.isdn b/tones_american/activated_loop.isdn new file mode 100644 index 0000000..7620a9b Binary files /dev/null and b/tones_american/activated_loop.isdn differ diff --git a/tones_american/busy_loop.isdn b/tones_american/busy_loop.isdn new file mode 100644 index 0000000..4de2b79 Binary files /dev/null and b/tones_american/busy_loop.isdn differ diff --git a/tones_american/cause_01_loop.isdn b/tones_american/cause_01_loop.isdn new file mode 100644 index 0000000..00c0867 --- /dev/null +++ b/tones_american/cause_01_loop.isdn @@ -0,0 +1,235 @@ +*d}EьDH$]a ?wBr;3*{'_K&S)K֎'_Z/S +>3'cB'r^Rj^CȚ&J+&2iRJk+2ÚC+OfnC&gb'^rV gJoFcO[snV&Gn''i{JFv&bxC)_FO&GRf.{>FNr.Jo&b3//S { g':oKn'rOˊB+*b2.^; +zcON:˺?z&R'gKZr7 +"Zχ>RCsj'gJ_sZ7O 3>"3#c7)i_W?+''$,Xq-1YyihfnGY9K&^rN&>3Ǐ/G'[_ +gz\|^;q-9IiY(g R___r(86֚_wW_ ?'3 'Ogk,\Hf1I{v[?i :?~86xVSWgNB#w?Jo{soP쬈^1IWI~s)W)/Fh8(6R'sJro{KsOo*s2/뇟@ W! 9I)w)w'i)g_?;^((H(Ʋbk/[[s/C#Ss/S`xvv jZ))ii7?ֶ6~ {K/_gGg'?C3C{ +K `f)wiiYIIWW'OϏz^(6f~+/''G7w_OsK[jJkcVȘNh.W!a iiW_?>&6VVV>B#?gG7O/#{J; * ( `f_)IaٹI)'b^6VhƎCg7G?/s3SK꺋 +. h`x26NWy a ii)O &((f:[ggLJgσSS zC ꊎ8 x)y aɉiiVvHV(f3''LJg/ۻ[J:k x8Ș`zW7y y iiWg/F6VVV~:CsgLJLJS;˛z*Kjz 8H:ח)Yyə!yI)i)g6V((F&~#gsۻK뺂jR8v`x>3iiaY!)i'S~^8 X6B_gg3g/?7C'G?rn`\ls)6yq!iSrGifˢfx~vx){_z>_iW'_."gO.Wf {`)wс⏟f7o>^hO_K_gC/ +3#CZj#blna!q97ɁIښ~noB&v&Czg[[3oc?3/:rjS[{"?i,L1A9`(_A)Y9N^?_/kSς^N˚[[_;sC 3:k[s?;kWXL9q?rW1aiiW{'sKRz6s/J"S?s?/c/Ss2rog XQo8VqIW[Rk&n/?fnv>s_2 os3O#2>[so:+?+ `asCFW!R_/^V^+?'zkSsCSokzJξr {Ȑ@6 i'׉77Co7׷''[n.&n"2*ʻÃ; K ; +ʲNBR(6^&(fۣ'))'3kZR"NffRNrZ[C3SO/s+;bBr22hȖ^Ɔh.j#_g?G ǷG"bR&>n~&>2b[ //O?S3ÃK˺Z~FVƶ;oiiɹiwwGgJKrf&f^^⛣sK ;JZ2R.6H(vVF^B_9I7G_C:*¾^f^~^&&.b:*SCSO?s;##*.Fh8_go9I9)w7G33 +^^fffK3#[ +zz2FV(B3g9Iy9)g*Bz>F~^Ffz*CS?bn&薈((8~WyY WWK+2.f6&f~>"Jz/?_sc*:r6Vh(>nj_iY W7O ~^FF&&R2josۻ :NnN(h((Vr?WIٙI iWח_;^^Vvv&f~R*K;C?OSoo+"rrnNNf66vvv2{Ǘ) 9 )7g*B&vv^.;c/o3*J.Nn..^&^&^Nn/wWi)7/:Ž^FFFRKۃCS/; +B22..22rڂ22RrK_gLJs[ڲ~N.bz +KK##;k*k+Z"ʺ: +jZ"Bz+3Op&_g(>*6HǟSgjFF.R#?+kV,@ 1qAaYNV(x_׷ISkZZ^f;[*;+o/"&n{ORJ_7 tpx)Qa W2NX8~_W gG FFh(#OWi:Jj6FjJg_o [$,(aWq!ih(Άxw+WI)KsF+?g:r~Rz+SOOO3 L )SW)A!/gxF^?iW{Bz&No+K_ۛS[rb꺋ˣK*CW ,p Yg'hfvN3)*3GjNʊbnb// + JBڲbn2r0S9I!)9go>R&hξ'sbr^>NZ:s* kK +ZJN:R2.&6?7)iWO_~22J*ZzJrnBRj*+C3+kZ*cZ+ +kb{j*[j +;kKSCs3?SoC3+JʢR.nn2B.b"z"z*Jkjj* ;*ˋ:* ; ˻Kj늺 +k˻+sã#C[{+ jzZz:::"zZjZkJk:;+*j"˻c*[j +jk kkk#:jkjzkj" +rZkZ{ +"**k;J";;/; +⋚jK˻"CZs.KCkrRor/ *ZC +S++b3_.c˺2OnSbkjO[nS>f*"R k*zonzC>rj/+:rr*/?z~:Zrb/rk~{k++o^:J[ZK2/skRc.Ώkn:.{{rsKZs#. Kj Z KZJoz>3zJz#RoZRoB* ˳B+;Zj22[//r +#>OkNB?#n3 +R;s+OS/*SC2sb[B>Ob"JBr /*N+j+ + + ++33K/ +/s + +S{ +K ; +"2n"KBbk +ʢnK{R +3k2 ZR;C[#Ƿ)wGGOjNf^nCnfRKbR;"8 YqaA9GZHXH_7W)'SoFFf__g3# +bn(x, ɟgaQ1ai{.H6V&s +2Zʞ>3s_?{z3..br?_VpHXcIygaQq!aV(8kcG;bjz6Vb#gw?: +>3sgLx0X*!iA!y9hV(G*^Oo7Wǿ3SCf ''_7P8ayAQAaayIr8xiWhhrG)iWG{Nf&_w7g'ʼ,@[AA!y9Fxh(׉IHwi )gھ^&:*'wc8\ Ѐ@Q1AAyy6hHF?[VRW _?s"2^&3_#?G_/c?x$̐`hYG!xfjziY)wHVƲ..))wZ#ff''S+3*;J_ZX*am-99YB.3; +iY ²:HVv~.~GGG3Z__;+cCzw\ 0.Q9Wk+yK.V־Bk)wR.~BOg3Z*Znꃻ&L ,(OY_W>;wi &>6'grz;[ +*'_.#>>Rjjb@(!9iw׷S_'b>+2c'.:{.{jʊn2R.ڎb. +Zr2KJFG77G'3kjjB__ +R:n +.bϞ{;n2b^62rnK:Nr'j?ZoCoZkg&*gc2oOZn^3[+:+.+O B˲Ï#'^>[+rC*_oBb&*OJj3";Z_.7n'6s/_sCS~&gG_ .>GO&kr3kZS.S' ORR'r"[Joo/S2?Nc:[R[sozr+{^3/:ϖwjj&^~._s.rCjGOk3 +j/rvksw +R?R"z +O"/O_ +~;{K^ooR2Cz+n +:.Fz_Ž"g>sR oڞrR23ZJ2s[j{[b':B++KJO~SGbCJc˲cJnz/Sc[S jc?*σN".cso.Sjc.rb*JB:k+ CKj*+ck{z k+KK*+*;J;Jz+ *j:+KKj:kjzk*j+ +jj k+kj*j**** ++k+* ++++ + +* kkˋjJk*jjjk*+*+*+**+kjj+kjjk++k*kk+jjjj+*j +*kj* **+*j**k ****+jj***kk+*jj*k*+j**j+*++**+*k+j++++**k***++*k*+*jjj*+**********************************************************************************************************************************************************************************************************************************************************h)G^'Fah'ɞ>sN.qwRrsBvN(Ǣj&Wr7h:k6x>j+oVv?792?N.#_/+zfr2K3'[[3+J jw" l,rWyaQy)frS8ryWk2OC[i7K/&ܴ,X6QeqiW#h [_7)架VV`))ۈ x_)yWOOZ;z7WLJ!(!mhHXXiYa9x(6h6#Oי)//+v8&riIgnJ'z#'oS;4P#g7`@+7_yW !w6V֎)nV +')3⻣ ^oGRۋJZOOO VW9AiX@YIog7(~W_:z'fV_c +COO2'_2+oOgwI@! )3^ !W^ֶig3NS(rg7(V)g+#R.'Z^2?˛sow lWSwfAi^2F&N"3zv2?/'3^{o#k bBsK{k#3/Hd$_-Mg6 !I((bF&/9&^CΞ^ +:C_ON +; OϏOJΞzS_{OW$QMRG>2V6XYVh/kfs9 fFsSσsk B{{ {gW I !1^7V`inf>)SfS&vJsSz#Ks*+GWW($/Qm9K~ha96V^yi^f&g7O[J*j?/KnCo;3gICQ Gk!aAaykh.'IãB.n/R#rzۻoCrB#?OzϿG) AmmYaɚ`A!YO'(#9/3n#GB~ WZ*3*_Ύkk?S''_W d&Wñ aYן2H&[SoZbfHJOkOO.ZR#o?RJ +sWD)mja1 `a i6^/nh6vSOsskC/R翃b +;ow)Dܰ1C؀p鹉 f(˗?W)sZh86i 2j:3KSO s #ĤОq-qo-gȀH99a:(hֲGחv6k'gnϳCs:o{K+'w׉IrA1QGV`0/WY*Bo_7/X*?C7&"gK/3R{ocSb.o) @ܬv-I@(w)!gHvN{7)Fƿ +RZ +G['_S~ʃ:nOOsϷW)$ @Iq-)H`3"[w'/h6f^BR;~['' #O#Njoc oG)@i 96rNV&k_[2KK//cOC3+:.r/[??g | `I1!~hs IrZH(3G{/_^//;k#//>NNڃjkksSL쐷 IIah>B~r )_K* +^wrLJw^R*..[c~^s322S/( 'wW!WW^Âf3wh^S+.Wb.r"kZ"7rΎ32S,,gi9 +K6wWsgۆh86Bo"[ח +>cOg/J;oszR.',lGWYёIhhƇWW/W'+f8H(b2 +Og/sj~ro[KCJB珀,@2 aiILJ)/vȖ_g?'&((fbG_OSZ"Rr +*c/; +;@l6AA9)I(:nRz)bFfs_GG_J₲R{SoKJhvv"Way&&^fgocs/h6~R>b/O/Cn 2K*b:"r(x(6N +_)WIi'3#.nbJ+J rNR~>kkK+{Kk[#C#K + +*++Zj"Jzzj +J:"Jj* +[C/s㣃cˊJ +Jr"ZjJ"ZBzK+˻ +kJ{ZZZJ+KjJ:k*˺JkjJjj;K;*+ Jz*j6)G +2B +rnzC{Krn#B[^~.Z~>2R2bR+>;Zښ_rrڲsrjϖG_;+ +2h[s?{.OnRkbO>sn;b7kNzzs#R+^_g>#_&^2?;c2SJR'N "? ^C>f_S'ڞ"c?Kofo/3r/?sJ;brB.k##zB[Z2" Z: +Z[*cj2Kb+rZ;{;+z +:jjۋb ++cJ{;#kc * +kk++zR^~rc?__?{ Z"2s;'?χOoS2*K_@`8)7)yy +&&R?S/'gG#ZZR&fr*K*sC[KڢB22b +* [KJz j k;ۋ+ +k:N>.J????/;c{ +2>R..V~R*wi)G_>~>Gw'_**#JZzz2"hX ؈H8i y9i'nfK'''KN&&ff~2j[CsSB?i/?g"+2Ί+"ȸH(>iiɉ)7_s +B2S?OC{~>^'WgJK'*ÏJ#+Z?Kc#zjsS֐!yyy7^NJfJg/Cff&~.R^f6:b'?s /osJ2+k"2zzNb^b"[j_'Hn^&SW)w))W:s{"2zr"zr+^*? +&jb3N?&_.Nnrϲ6Zzzj3fOnoc:2js 3:'O JR:b'*^S&2g&c^G>z&fRJ2^j?# +3RSR3&sÎc_n'öj& +B6rK;ʃã:&^(NC2.BÛg&N +_v^;obKrZZW'zo.[>wn&gf>W.KB_* +:/*B ǢK"Jc2)skFzC23b&[n +:bʏj3ێzoro +nK.."BB¢S2s2Sb3J{2_Nc{r+J*{ kb{+cbZ"b.b+Zo+jsooks3KJv?_R:;B.r ++zzkcjj : + + k3z;+*jz +KkK+z{[ + +* + {jj+; z +Jj: +"J;*j ;3+ۋ #*jz{* +jbk*ʋKkʺkzj:ZZjJʢJkK:J+ +k+K[[#ۣcKK;+K+* + +k j*kk +j+:zzbRnNB zj/'gGWiiWGOCΞ&FƆ>B;rH&r'ɹy9i)))&v(6(&K{SoCOS#JBΎf``h XXF 3_IY999Y))Sv(Ȉ6~#sSSO?/Cck+:n>h(f +O)7Yyi)9y wSrb6fv憾Rb#s/KJ#*RBv`HVfH7GGWI9ywi) W3g#fVֆƆjJwC?coR{RcN^澸h(?#I)?Y!! NNi.`HF3J_g7bnNoWGfB{;&N&̌pW oi!G37+F68h'iwj6+W7ώ^`<~){&2O7a!aO+g>vrv `89 OHRfGgOOwsF^#_Nf^SsSr<`)Q1Wwv^ǹ!Gs'2ƂN~VhFjGg:_'KJ.bKK:Z_gHȹV ; Y!3gb~&3kb&vfH^ɉÆ.z'w_oN>jO_Oo7`|YaiSy^ YaYÏ__v_'r˚f&vC +___[ZLJn +C I< YGwOVxHGOo ;V6CoKBZ'or^Fn^V)77zB {_SC{'v,g7&wIYW;[':Z*)g:j ;.^RZrz{ۺn^B[/s[KCczz +zJjb&R>^&jSs77SSs+b>R222j:"rr#C cS[/okZ.2rJ +ZZjKk*+ {Ks//sC[{{kkʚ:RrRJjۛjۣ{KjJ +k+** +ZrrR.n.RB*{C/ϿOS[;;R22R...2b::J# óc;;{jj: +ZJZJ;K+ +jk˻ ;;;;+*+jJ* +j +:jkKKK; j + +j:kkkj*j+jj+kk +j++**;k**+kjʊ+ k +j+k+*K k +j*+k+j*k**+++jj*kˋ+jjjjj+ + +jKˊHo3:K:ښ*[c{k ++k[jk*;#*Jkk "+ j{+kk ʋjڊ +k*2΋ s{_sZnn2R**j/*j*+z:Z +k[+* +;Jʊ+KJj: +;*** j k뻊+ +K; +*:k+ +B3ڳc +b[J+jjJ*z#* Jzkj +J + ++*k;KJ+++K * *Kk* kںk *:.C/3:C{kڊ3O+[ [J*J+J+" +3 +cj +KksfH&Zꛇ))ggׇ˚^&oS?_3+Kz O+N* ,,*^W' .iNjR'? #_O+.jR>2brb&HOS;_+2g6h? + chh(nJS_'w_+?3˿kKks jzzR[;NG6gn>7C(_3cwoFÿnSC'+#_gg3^gsn"S ^*^/6R?n&糇ONnrN:~g&Zr~ο?j~_~ 7Rrz?CnKFR.+"(&'FFh?^r^?BfRCfn)Gh7 KK[v'Z~ &z/#;B۟_37W +jGۿ7^ +k:(*C?gV ^sk2ƶVHrnc J^_Gg?f^'F~jBjnfc?gf>rS +;^:vON*ʿ i·j&o~:3'wC2f·^^뾎(SO&~fz(ˆH8^b_ƺFf:7&SvGG7+rjȖi?&S^oWo&?)(^".'kچvrYg+khCG'&FVzI___ϟr^&w.X6w~^)'v^w;* ǶVFkf)'뛛.h;v&(wB֊JV(g'?(H&FnVZg۶Yg8&g7?:g[&SnBb^o.j&[ϖf#/o: + ~^/Bo.Zh6 wHǞ:6(K/n# J{^7S_Vwi?׶JsR+*+"s.rWsvKSϿ'NZOs[RF??k^R?s'J+s;JrS/C^2 ?C_ + +3"..JGc3? +[n>jsz://rns.C?*+˲:;Z;:r +R +K# {z.kSJB +Sss.K ?Bz2on^RoZ"*3/jzk o3[#S*.[[C+{CS;zB> KbffN.fn.(i ))iW+!ٙw)Zg_G&O>f.gI!!D$1mw9Aas'_>zSifV&v[(fGWz +Coo?_'~/[:[;{3ǷNA-^v: a!7Viz.F(f.~owwns+zbk#kCSSπ<<,-qS WcG!I>)I^r(F3C2^f^rO_#*/#sj2jnb³C/7' l|i 0` yI_ljYy9yWB(jFZOϻz3'σ*22sZn2*3/# CG̰qm @syW RF.o~+^F"o/_b^*__oj"3/KnJ*BK +?p;Yh./Gi):κwןB&^r{6rۣ&FGG[RRggO.ZB"RB Z>NSg's>ȀG 3(H[W w'?g7_ +?ggs:^.2~&&&.ZbZ/__#/[k˻{rBR{??(Xa'^hiW7_3_R.^&"r2G/r#o?C{*{;zB2J{Cn"S_'R8p8!o8h I)7_{S7^RR~f2z.~Rs3kfFr.?s;js2+_O?OZ0 -1>@x9W79Yɳh)Yyvh(f6[/boZc?C 9_>v6{_z""_g'nF(x,Lm'yɆVy);8(6n*~f~gc'"+c +~(#97㏲k)k#G7_[g8Q蛏+I1oB +㗉WV(v&&srf [/kjKx~snK )/';.kG_2/_ۺVV(0L:/W i9.wWj*ZVH(^Ά^o"^&z./'s{'JJz3+__ +s_S2/7s[碈h 7I9rA/g;~ׇ.VhBnb/._SC62B?3/ _OS#S[O?O6Xl &7.{W9)R.oo;6k;jʛ +Zꛛ?j`c"~b7'z#R&g"O(8`^J ig/o/?_7 W? +j#j2rz~F6ƶ&rr" +[+*[N7gg?#>:2n/SRnj[*";z66V8 H^SWgg_Ƿ7_jN>&ff&fnRzk+Jf.'g?CK{+*zj*zZbZJ + + +r.NƖ^2:S'wwgLJg/oσ2RN^ƆƆ^~^{Sg'S3_o"ºr.nnrbzBF&B'wGwss/ck*Zrn^&f"j???OsC{{k*Br.>z"":n~Nks?Gg_/o;R.Ξ^^~n[c''/3;Žn...R2Z"n~>22Og7G'OSs3j*ʂ.~^^&>R{3SoϿ/3#{ʺz222.nR{{KˋkkK{#cc3333s[# kBr.r‚B:+ kk;;cc[[{ KKkj+++++jK;;{KKkk k* + +Jzʺ:Jzښ: +z*k+++k;K{ ʊ :+ *K +KkJzJ Kk*J*K;ˋ+j +k +jj*k+ +j*: +J * +j+k+k+j ;K +****+k** +j*J +jk +* K +*kkj + z*JJ +*+*j+ K +k+****+k**kkKk+* +* ++Jj +Jʣ{*jj * +jj+J(xAj2s2 :{ #j{:cK *jKs3+#*+k+z3sk+J~O&f&'{rSSγ*r;S.S#sjCnnc~O?_7GjN>3RbS"3/{f'_o2?b +rb^:n/zj_2C{~{Cr*ڊ//2.j + +koCBzZ{_"; +k :ˎJ "#bJ#2*ÚÂ3jRc*k*K[+Ro ώR3³;J+;b/+crbjڲ+JjCoj[2KCb{: +2**zJ;j +k˛ +*{3;;ʋ+k+ +*kZ:+J +:{jzK{kj*[j+Jj;곊{j +{csZ"c*"jr*+.+ڻS#Kb +;zK;c+:* + J*ˊz*j*;cb.R:kj +K#[+jjk**˻K +z*K* ++"Z+jjj*c[;k{: + [; +j +Z2B {*+**ZzKK;: [z:++Jڊzz +k + +jJ +{[KK{:k#[+ʊz +*kkj +++jZ:k j +jj*j +kK{ **+k +*+* J+KKKk *JZzJJ+K+ +j+K ++ kkK+jJJKk+******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_american/cause_02_loop.isdn b/tones_american/cause_02_loop.isdn new file mode 100644 index 0000000..aa85a71 --- /dev/null +++ b/tones_american/cause_02_loop.isdn @@ -0,0 +1,230 @@ +*d}EьDH$]a+N‹+3_[goxl ,`Hf IA!7gF膞.ZSoFffbOG))W)/+(3&j>pPxPxVA!AaGiR(Zh"_>'_r6&&{))7iiWWK.n&Sl9PBxىai9Q>_8fjW:>fkfrVG'_i_2kr>Rjc/[s:SkRN&`6nx^G9!y!R(Vv~C_χSn*" +3sS+, /qQyy@~HWYIW:VVHf +ro))ios{66#gG/# +f^~rϟsW[GsvR(O I)#g..FF&ڀ^~V99aIW">rZ(&iW)ksfv3#?kvR"ևsrc#S+#bRS_iC2, "ZXfw!Wo&(H)Y! Gw/ȸ(NwG3V(vogWG#n~6^kgg_>&&^"WcRYῈ/8(B'W^~z67Gig3:hHH``>s:ǙIin֖v wGff~KgkWv^+3?OG*ZOoKZIy0|^윹-7Kp>יA(hxhbIa OHfNW)c>v(J_G);^¶O؁3x +grHWfiC27{vfKzv $)Kq~艰l"21q IFZ`@sawwf(6Hvg yBRV.Fy!_ 2׾JvRo/i7Ym1ɑAla9A>&R(/[(iG+(FIi))xwwrf9IG  +fzk7,47g8y 1aЖ8Pqi) SFWO&Y)n. ,fqYy9vBGi/J# +İ,M7ٹ[I?0` !!Y6i'&7y (fs)Io;^fodHy )!2ఇ)!AȶHpx> W×K?&>>Og$i@=A[Y!Aabg?pVyoGɂF`'iywicf^^gǏ_r^6Nk'<Y>=F Oؗ@6vIɹ_?h.׉7:SBZO>C[[YٱI8WV'ן7G9fֻ3i +"fb:?wG O)ۼܰ:P0W11aqX?HyJffG+ 3kf~ SSg_,<^haYg -a^rH ׹)Ǿ6J(&Z{'o'WgC:.2rCW+lLf0 +!a7-6; w7'ii{n6~k_OW;RJ¢ og^"?W)P,HfXX&-1Ǘ- _6;(`鿢Y_Hb:i9)/:" +g |V0h7>f0r!a vso~Hg.ni ?z>ڟ_x܌` /B m_~/gcٗ.>ȶ3/.) i3gFR'C$FPli1).- I3ZH&xȗI')7H/J^/ji9I*_SBOi$ lGXga3N^hV6_ nC_On+W\ lL_C٭nWxO2 Rw 'hB2hsG7r_O|H &GױAyHs&WWi iVo77WGRR'WIl魀ׁI iv +i_s/(zw2)'7_.{p$:QhɉO_x) _y7j?j΋Fk7__:B#׏z7miY(?`_h7IGSWkRHrbi')ws#s[_NМ1Vi)c~6׹W)7"VR&x;#ogG+ z^IoȼIrAᙟyGx3~ 3)!iGJoF^?3'ϣ&r"s|l YAWaChφF WgijֶRR6o?7[sr/OgwiP$VAQ'1)8'J !7ˎRRB>w_s_λ^. oo_i$@o _!VH'YiC9ىVHHSg_+NF;ʛ _CkOSX$0_'gaA' fȉy)y) /vJW)'&s'_?";??$HY00j g39x6 ;yaiyGs)9NS)_FR~GR#+j,,fA9@vW)hY9CYI`sV?iiB{f{Fb' +_ +b :8 y遁W^S7FFS'2/g cSN>>/.R_&J>+Z2ڋj +RnKRr~f +3S緷'G//Rj[㚂J+K:J.bj:zRk[z:#:#rj3kr2 3k + * +ʊj cۣs{ Kk jjK+B2*2*š *zڊ*Kz{ +Kc[k; ʋkj닃# ۋ+JKk*+;kK[Jj j++z**:Kj K+jJ*+: + +J+kk;kk +*:JZZ+;k ;j*; z#JˊzK+"JKb*{[;jJ*{ +:*+B +K: +;kz +ˊJ +* {+k;; +jj:j +j ;K +JʋJ::+K+* {JkJ + +k*jkk*j++j + +k ++ +++ jKk +J**+* + jk*z + {kz:*; +*k +jK J:*K::K*ʊK;*k +*;K+J:j*+j+kK+* ++j KZr?_/N^_k~~j/.ʳ3b2/KB+ۻ +z:: : +3 +JN>g7k^'W[&+o'fB_XY@"y).VfiC薂?zIY(iW(Kg?w_._~k_沏ξ2?^~kg +sbF2Ǻww[GGR6;Gj#s+wCf>g;._*.cn+ ++JrjR3orKr>N."{s&/^boR23J^6 NB'r>fr?s7/RێN& +c?{^&Os&2'o"GvV/n(RW粆& )FhG2"Ogf>SW8FYGx !9N8˹ixIxWG7rFf)Fwg&C^ϋ66rg6ʟLJ +?v._&_vBF"&Ɔgg>2Ξ{"c&nzfZRZBz33sj2.b:3gǗǿj>3^_3&" +OW,`)j7AmwjH8Sg9ϞvvN#+n&.S +ff›fN G ia)RVhV7 )Ϟ.Sr.gS'>rO)iWp̜,)III91G&VFfvY c(~j">"7ח_3+*bg L naY9!11!f6>RsWI'nh8xhCS'WgNNN2))plLЈs a!AY`&ßG)9Y68>SWSf~RڳǗi)h, ̬X.a!!!a1ψ` (Ggg II/xhfgg_ڞffzSi vg!!A1Aa @@X7wG7W))G36VFr/g'_B~.*gW)l (Y!aX08F)חw7'6(rGoB>w^0,8Ja!)H0@ N'))WG'V(R?GGg_oK+.?VX,PSy၁aG^8@n'7_Gw7oVϿ_O#Bn2cwȀ,`V'Y!YyA9C(؀hf:OO/Sw)iw;vvF^2[3:/ +r_kȀpOIIIYq1airX6f&GII.^&rBn>"[g{Ͽ?/?#,`RW aA1)(hVhvnIW7?csCZ6^B{o;;;s?7ws[zK7h,pJk1-QI*fXX?''oiW*f2N3_2Cr @pHV(q!yyIGH8(v6F.ח__g[^.[3*ⲛ_>:kh `ζ7)i)GWI9'dz[?#R>r~nOK?oKZZۛj"* +Z2N~>."Zrbk?_g''gck*".~N.ʊ˛{*ʊ {*jꊺ:*+ +"bBR2bCsϿﳣJZ"RBzJzJJJ:zJ*k*k K +zj;;;3K: *j +J +ʺJ: +j****jK k*JzJ*k +J*˛[[kj** ++k ˋ* +Jj++ʊ++k k+**k kjJ: +++jjj+;;+j++***+jkK *jj**j+kkjj+ k*JKJ:++j +"9F釺g:z"~2"RR#" #bڎ">ˎRs*++Sʚ/.rbk+;_R3 +Or/rN^3.3>o;/& oO2ogf_+ +jr;J +C67vJh#S +N^KgRRg~/r_^SsOC&R/37' +s'o +C?[j~?78gw'yi&'Vh8o7F/'?:gF"i^7n~B +W&^iS['?^i7+FO~.~[.g;CR>뚋sNN&?+.* '~~/F'z)W))h?vS~3&7(>iNwvw;Vo^w+B2~^v6swSIW g_/[^&>sGGovHH 6(/7Yaa1ׇ&(HHH(ȋrO7G_w_[+j'+gWg@2 lPj2_Y1q!?r{&8(Hx&^ 'b? W+[S3 oS7'_S|Rl0h7GO1aYG7V8VXFGwi7O&;VN)WWWǷ_Czʣ@(n{fnG(,X SWQY!A`)7i*bhx(^!YWiw;2wW)i $@ h QQm1!?p.R7AYiW)/ 83 I .FN[i׷g)$P0@h9a86` 9aaIV(V&"i7[#;FwW7GϏS \> h ) aIx@ VVw7hFVf_KW7c.&;WGG//SGxb8m) aH +sB6/y!7 ^Hx{vv7O'c'G燇O33#COFrHqgXX{ {ᗲ~HHFS2^2Ww_*O KgW'o*n2kSpJ(H1!ig^ȞSW{+יGrZ&(:n wRk_~R/7꺳# +*{zjs^>''99i?^^^O_zz7G2:J(6oCS_OC 3/. *Rjn.K s Xhf G)W7_cꣻ[ +ZZ>z.zr bkrzbr ++.**bj+nj2JS_/o+33ۃS[J3R +BZ rB+rb + +" kjR zb[j#B +Z3B[ÛbjC[/J2*Σ; +*ZJ;;js; +j2[*[:zz[Zj JZ #bJz: +* +ob+zc{+o:#:ۃr+kBʻڊC;zj;j#[Jz"Jz:*kzJ +kZj+jjK*jb K*3J +zJ#:* +* +* K+ +k+ +j**z+jjkjk+ {+j+ j+K:kk+**+*j+kjj** + +***+ ʺk *+k*j*+ +j+jj***j+ +j+j*k *+*+kkk+**+kj +++**+* +j*kjk++kkJ +*kk+Jj kj*++jjk*kk+kj++kj*jjj+j + ++kk+ * ++ kjj ++k*jJ +k *+k +J*++****** J+k* ++ **++k ++jkkk+k: +J +k* +J+JꋻJj+k*j{K[+j+J ++kbk **Kjk*j+ ˋ+** ++Jkjʊ +K ++++;:;+K+*Kj*k+j**j* k*KJ; +kkkjk+*jK+J*+k k+ʊ j +*++ + +p8əsiF7B)i +V'/Hˆ)yFW +Fh&N;#SKrKʚ۳g_c/[Cˏ3 +6x@XHW!yq1_6n8`(R'g9ayn6 (!iI*{iiIIIێ8d /!=A `'1):XHVΗ)3)Y^&V^7OCb"7|HÈV}= +Wi?y#o"V`#FiiRg2NwWiw'{/CoWg\(Ff3z@Ј!ayaq(j(W({)[BKsO'w7:{/'jw<9gK/1#'sh(+G_rRgXVǏ C^g/燳^~[_g |Wmѹ +;aGk{(iwV~g曃__GKsۿs3'g`Ai1Ag&!y98 hkw[{ZBo2ÿ /cCVdya' aưV!GWwrFF3gw+>CjF8'GB~z[+. +˃*;sc|$Α1qWؘ^Ca__/Z>GkrFB' ^6nǿc+3#kB*{s'ʳh$|Pi- +G.Xn'ၙsSJ^[7N^i?&vχ+zO{2 +Zoo\lQgNSnja?NSr^?ScZViz+"#_oz3 +;[g'ܤ1-&{V~S'.3W{.Ȉw_.OKko?C#+sKr"7G֤\l-7?7(ÿkZsiG&[VG.''['s +S /gG$ ms28(!Oz3nKiWRv~ۂhֶJRr'?SCSo3'Wd\PMћ"&.Έ .9!OV+·ORv[舶o gs#CO/kC\lq-7;Vaf&iGR~667'j*KRrgScSO#w,\'A 6` 1?>"*(i):nh^i3ڎo?Rr_G_{rSGW\l&1m)g6`7!)#o_*7R&r(WWJk{r+CS3g'?;Og?ФP;-iy)3H@@Gya!)i7?7'?rO/jk[**k_ggg''GX|\ xyA1W IYv6.*g_Z.¾fs?SS/*[c_G?W7lVyi171a_~.~F^Gcr#{>K3o?os/b G7'G&$wsa m!V^:V`yaW98^V6:G7 SJcnr2N3[/'__#W H||lX(R-yWs37فK>n&hxn"O[N>NK7777_S'g< ظ1QIYh>Vyw'6W'7)S"N:2^OLJoHl0X`Vi9Aqi__cȸv{_ ?cV6R[W_ϟs&br*Og_iw@H@w9!iI&V'goSKZ."."Cg_O/SkZJŽ~N_hx(f:sˏ)9W7׉ϊ+ + Zbʣ{>CR2o*zO?[z{"B2"b&B*cSg7_燇_SsS;J +22rbrs#*;?c[s3z {ʊkffZFB~OoOsK*b:2.RZB +jkZjJ +#c#c;ۣˊ +::"BbJ K[[cc++Fjc3_[vr.3[s?3?22㳛rj3n2c:"kk + ++ k[+k::Kˢ*Z:#+;jk +cK;CkK+j +KJz +Z +ZBʋkB:j*ۣ +3K# J*K:k+j*kK +r:+jkZjJk*:kK{K㛻3c;kc :ˢzrbj:⊚br +*KKJ;3/SS/SCC//C +z.rn.n~ffWW׷7'{bRR6o Wg?Gr +/OG7`8@wAA)iFhNF7OoLJʎrf6n"ڂ/##~{J_Sz7 R ++NfrnfK{.2~&n +_g7_/#:kBr2&;'/gOkS*JZ&{xx GOKǙy7?7w +o?{/zjfNbn?Zƿ_+COϟKv +2R>>o>:SCn>^>ϏKGGoJKnCk"?K.K/Nj[BZ^"b&2k#j& b:~_n[ g;.J&o__n3&F>fFBvjg[/V>_SFC&/~ /O*+Nr^'br2s/JRfZrs&οJGnw7f&zʞ2^)K#V _+b(/?6*RBsOZ?g^3^.NnnvS/~/oR +NNvJ+3og/Z?hB?o rg'?roC뢟.N"o"F^izBFRg6/VSs^η>zG抳&"rZ&jwBjF~'*ROF +RjjʶS+rOۂB*k3+w;j#g3g~ ;Or.JJZjKn/;R+;2?{^#W::oKښo+nj ?2'RR?OJO/Ϻc 2.b; +[jb gs*BC?>KNRSOKZ/3cB*?Sڣc{R[fh(6^))iWG('g3ZjSg:"ck#2: zp`֘Ƴiw)y gǟkW枞~b/__S_/oS/#JO[/H(8(sS7)i)i?GGSSKfhVhVo/)7Ǘ'o/_c.ؘ@9YI!9yWW)W?Sú&vh(&oWii)WW7_Osϳ3oj`Ws)a!ׇC6VVV&c')WiWwS/o{K:@xVW!Ww㳣rZ(Vx8(h'7)iWWG'o{j:z&XX`0XG!!ay iW';~nΆF(VVf>;WW)G3*+b"B.FXXHV[7Y!yY )'O3&^&FhHhֆ~c?Ww)i))_3bZ..N68(SWy!!yY )g_^f6vh((FN#gWח)gSSjr.N&Hxhxh'I9ٙ9i)WLJ#Z&((fk{_LJ'SۊBRRnNN>N(V(Js' g_nƶ(vffNJ{C''__'Oo3;* +ښR.R.F6v6zw))GgO*2n^fFf&r"Jco??O?SS#;ZBn>N>>~~z+/G7?osBRΞ^^^^~Nn.z[{#/Oos#Z.r2‚rR2²nnr"z +;/O_''S +zZrRNnZ:+KCCCsC;k+ +:JbbZ:J:ʺ +:JJJJ::j*+[Ã333/s333c#:xG{;rVn.f^J + +sbK.2.~κS'g_Sc b ^rS;{Ko+[* +;.ֲcRBR*gsxX2)IW_~&^j 'Ƿ_;2>vhP&OY'?S)os'C)wgg9yXĴXiK_}m1IKٗAA)VVF h)w7o8@i) Ibfo_wO2iz)Wit iF-AVɈpi?)yf(f(g +&HV +6I G(wgK.Sb')4l@y(Nq9Hp !gwYHj)W^^kζNgg_k&?g_+?czsI$xiM _ɋ !oyg~ dž~V+koi_jBκ?/oo jssKiNMN^ؖyyw/ H 6>VVsw/&+sC{; o?/lPG?WYmѱ`^.&9i&;_LJRgiN֖&RGO3 +jsSo3zJ[sSs7dl@wamhƸ{)#ChKBGV(^V^));[NS:;s ++#{_$ɷQ-+8֎)!_Gwk(?zB"fh&(S73ϳ[2 +/ [//*k[3{k# G:I)F#(z)Wg_s~v6~^^'3.>V.>?G?+ʛr" +zKkn(؀ hZ +_ 9IGG'/B^>JzbJ3sos+ +:nr2j#CC/s・s[*B j*; +"k+{*jVhVƞ iWG3:RZ; + +:Jj:b~~:{s3c3Sk*ۛ*zJ;k;j+Jj;Nv&_ 7okj2bRR"JC/ .n&&~.2 OOoS˺ +*Z"*sc3k jJ+{cChxFBY W^ffz{?G7ǟ:6Ɔ~6)?2KOZ/3{kcJ:R꛳3{+H`p,Gi19oRh&7wi_ʆƆ6#'3B3* kzK?SC  + +KC#{Jr@P̬`AɟS[~HhRi) 9I׊6(h(Z SkS//sڂ;+o:rrR,g- 營nxrwWIy)Kfhh&o/fRG_#S{?_/B*ۺ#>&~, a1!IW.Hhf OgWg.H*[/FhnʣggwgsO/[{*"_OrRr@Lp{сWX?'w!as.Fxxh&ZcG#R~(hg )i'RcRRbgoSo_?BfhX,0V)q2Fh>?9N(Ȉ燇^VH))'..'GSÿ_R"H pVi!A!G ^(6?Wi9 &hHfr#_'jr^6NW WgGw_f*'3o^&H'Aa7&6VK: )g_z^Vff^z3//S*.vh&r_)Go +z~ښK>ZN>>^>r.r/GG''g_ocsKJJښ:jbB2RRRrZ +kk{K *kkkK;+ +j:kKKK +Kk++k*++˻;;+ +Zz*jzkk;+k*zj**j +k + + {K*j +**ʊ+kj*+ ;KK k닊jʚj * ++++ ʊkj*;jj+kk+j+jJjJJk+ kjJJ+ +k+;;{+ ++kk*+K*+늺j ++**k+ k+++jʊ +jk*k+** +jjjjk+++j ++***+j+*kˋ*k*k +:J + ++K * +Jk*k+** ˋk+k +++j: + +NZ bj"kj++*˻+**;JJ +*;J;*J*kʛ*;+K [{zz ;{+ +j Zz +k*kJ { +[Cc3+;jkZ;;BK:K2Ê2k"[ROb :jc;+"˻{z#S:krsB{*jJb2š +"~>2>>BzC3#Z;RgjzN&NKki_)j^C {k3n2j.~/.rskRS+ +/kCC:j_r'+O +b^bc'z3^zRnrZ{"S.{ +:K :j˳{o;kz +k˚2jr~;C;BC*b_3J +ZZrZ:Cú.ss2B3r + +*c>r:"Z*CZ{ú;K 2{Ksc +z[##3rc2**;S2jz rS Jz/"{/ۚnC +2>k[;rc#j:+cSb*Kb.#j2{c[볻.Z[c2SkJ*{C ڋ3B2z{⚢ zjZc+csKJ+;; +K{3Kr:**"JK{J + + +k+ +/K"JRRb [+ #Z;k*ں;[+"Csoú +kKjzJzJKk" Zzk** zj +K*j+++ +j K:JzjKkc#j: +kk+KÛ{ + +J + + + +k{ +Zbj{jJ; *+ * {**Jj+ +Z;[#K*{:J*k:"K;j*jk [kJ+K Z +kʺK:: + +j+*zj+k; k{{j"*#*KˊJkj**j:z:+ +Jjk+k{c; + j+*: +jJ껛J*{{+k{;j*+*Jz**k;kzKK+ + +j+ k*+ +k+:j +;jjkKK늊k k +Kj:ʊ+*++j ++k********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************* \ No newline at end of file diff --git a/tones_american/cause_03_loop.isdn b/tones_american/cause_03_loop.isdn new file mode 100644 index 0000000..e9e601e --- /dev/null +++ b/tones_american/cause_03_loop.isdn @@ -0,0 +1,422 @@ +*d}EьDH$]aFl,FRGq1AaIƈhh^799W wxxx8^C')WIɇjr&BJ{goj#f&v||8+ɭ-avv{!yy99Ih 8cG) i'Rf>rgGG{;{r_G闟X@r с1)V" IY>(x 8&[gGIwBrf'G?s+2 +G鼤p` XIqɈ~7 +oɇk!y.{(V踖g)GiO2>6no7osSrRNAiqVO)vH8?)ə[w88H(Hfogg;[B^& * 'c[+{nN.CÇ`XȘ79 [O#wg'O"F6F^b> +/#K+ssczۛ+Zk#:b b&6vH?cWWIy Wz~^vvF6F^B*G_oj*:ZNrjʢb(6VX^V33iIIgO*{;R^F֖"so''gg +nB늾vV8fVNjiyI9 Wig_o{"RnvvvF^;c_Gggo/3 +k[ָ6hH&FgSI ! 9iW'sR֖V֖>2{G7_3c**jK`H`.oIIaI9I _/>^VVNZs_'77g[Kjjz* vHH`:h9IaIiÿnN(>k__GG_3s{ jK `h` Ȁh痿iy9 )WSϲnF>(66{3'Ƿ__3C##jJ +8hv8x_Vy99 7w)[os.{Fֈhhȶ&f[B/?'__OWwwח)i>DdmmY YIG7&k([8rG/'3s?ZJ^Gi+rOW4d,.Y+1ٸ,Gi'fH g(ֻiI/ +^8#iSO_FNggo ??+*gm_9H0`^99x{gwgH>/)΋ˋZ*O#ZKgs;×)--7`;a9IwG()_+[ζ(vfzz">w7:#/{K'' z +k/ +)HHFwA;'Vrg>>2nF6^{g/R2Koo/oCSj'H|Lq1w?)/J(Jw*_k6frO2fN&&f/'3C Ss; KkJ'60g3sWWW)_?__S?_'S+rn~B2rn> CSoc[;;#3s3{KJ*hN" +_Wiw)77σ R~r^ffRN>nz//''s3c6&(ָi WG7G_gGk+z.>^~jsCc//'?sOKn^Vv~~skii)iǷww';{b>>R~RB# KO??OCChnVv(xxF.3*;wi wwWGGC +2>Rn~rk;S?/ohFvH6fki)IIg7'rr2N~NNrn"‹{ss3;(VF^(V(v&RSʛɹ7Wi?[{2ffΎ.N>b:J /3_??OVvظ?)iiIIWWsjN>nnr;#/o?O3vVV(&jw)iII)WW7;zƆ^^N*OOOSoRFF(Ș8(2 +zc)i )ii)/;2.f&"˛{s/?Fv((((v~Z#w)i i))?C;2f^>rZkˋ{3ϟ??/n(VظJi))'S>&#c2vRRBoJۏOG'ZL܌~v G '7j0v7WgY9_^6RR ׇ3[j {gYN䜀a)yvS A(N8vOחWbb C;:Gw7Y„l'mAg)HAiRN'gjhR&RCw3K:O?oW! Nx+m3xxxgw r[FR7GSÿ>C_p@hn!a^H&&wWwǿ3z2f>bRO?s'Gr^scO3g/Pxְ`6&sgٙIyi'7g~^(FF>r&3wG?_k +ΎnznJjn/7hØ(&N~W+W)IIIWgOz.>>z>k2+K3*+* +^Z3nk: +:3+ +K^Ύ^>Zk#_w?_[rzr +rz2.ZjrJK#:[{ZZ"2bZrKoOS#z+ ;2+z.BZrbJJB{*:kz3k" +J‹*" + ++3+J2: + ck/ۿ*K3n*2r *2zb+R2Z+B+c+{J#jKZs{b:ꋻ{ *zK:; 3/Sz *K*Zγ2*JRjB3R +3b# :j+ڏ +++. jr{+3[Kr{#:k/kz#.{ RR; +r>f&gz^S^ +G^6j'.;OrC.s6.3oFoG(_sFgjznR[:Kςˣ?Z2^3"+rR~Z>+z+G7 +/_ZRn*"bS/2*S;s/?N:S2_*SZF~X^66s3_W99)'>ZRfbksgOO2c~r^r+'# 0,8vYفqAg'8H hVΏow W7C^^.&3G#'Oی |s0Xٳg1qA  HSik&NNjw?ˇO_@L v39A9WsxVO/iKwZf>KkOg'G6.&FL`fr{--awچXf8^7)y&zCHN~S)'))#+r2rs')lHLXvbw)>~@;[w a_wRXؖ)חIyWO3^&JKO̤ p(i! YYW{P ^hIAaii!!8HX@g![†&K'oßW)鹏RAqY1-6v h9!&&^FXHj&YagG( +I)gGwg+\,h`9IA)0XhȸVAAY y9_ hh[鹉Z>gwww7_3 dL() ji # ! g& V>Nbg7w*rR.z'Ƿj_wX$<>- !zS9!`g"iA'^^J6X(3cNky/;fWg__LJsZ_8d|.F(.WY8 9;GFnV^cO[N B^k_7CÛc;g ZSl>&1)>Ο3'7N~.>6?cJb*RbZjC2Nn;>Bc.rb +nN:cHh[JGoGǟ#s +Ί3ZR2# +rRCr*k*robzzs#.s*sb +JRkCjz{b.3j?:K;Kno*:R+ rSNjk+32kZb+#[zsrSj{{KKkb#"J;ڂZBkz*Z { ++3J: +zˢZ +[ z+{;: +껊z [+k +{zJbJ3kj +#:j[*ʺ;" +*KJ #Jk +kj+KkRZ* +KJ" ++j;Kjz:+ Z+;kjKjz;{2[{ +j:j{ˋkkK z jJjZ*"KC#Z2s"bS/»2+.{Cj:* k Jʻ{ +kJk; +*꺚z+ * Z{Kj"jkk*+*:++ *K ++K*+{*:j+jk+ +ʋ+JJkjk*j + +j +*닋jkkkkj +j*kk+ k+J+{kJ+ + ʋj: k* +***++ˋ+*jj*+ jj*+;jz+J +JzKkjjkj+ k*+k k+k+j +++ k:j*+kj:;+jj + + +**k*+j *jjkkj++k**z++k++*j:K++k* + *j+ ++* jj k+j*+k*J* +j +ˋ*+k*J +* *J+k k*j k*Jk K+*kj:*KK*jK J* *j+K+jk+ +ʺ*+ +jK *+;+ +k+k k+jJʺz +jj+kkKK;Kk **+jz +K #;j +k k+jJjk K+jj *j+j+** +J +*kJJjJ::jX!I0ah6_sc>2RNg?F3*srjVC^VSW[N*(>C^zNv+_ )9N&r(6?gw2ֶ2rwSo{2..:Jb";c/RSCjjo{S7֘pg!n_Wsƿhv'BOWCWGWgo×)G7G\VH-y98 WIIayʶRz(R^Rʻz#3ןǟ#JsLJIidL zM);HhiGW'hV~o* +wvNiWKN/Swڎ'g?77|!7Ymqٸph^YAw +~~s/fX(&^zg)S27sB+'# C?'+Wɼ<811YAih/7 y9h^/OC&>.VSwG_{O/Zsg_s/{kC/ d?gs{*Rk?C'7|Amo>FɁ!)#o)Zs6bf^7yΖ3{/7GG.KKgc#I|wѽ +3X!y(fb*nn#zf&Rr?^&&?J[#?g~{S'k{/3̆WXaJ{'*&^rRnJzF77rrkbGǏ2*K?Scc<\L͍I2{^~FX)Ya~+n~Gニz2R:jNFzgwbrB'gǿ?)wl$`m!ÿ f~IvBn²&CWONjn^&"OK^(^_"ww{Zg&$ -{w.8aaW?b2;+VnS~6FWW>{C{O_LJo{o'O\qA昀Y釷GHvΗ'hbroO'ocۺZgg?/s{o'wF$` qYW'(@`iȶNϷih(vvBGiC/R.z.ϟ_#'SS?~YAa!`V/z! +(vV6>/ 9S;vVogKRB/_o__o?'nfy!q-!~HV( '8FJ_7G&Hs3'GCR.O/K'?3')W#|2[GY cfXx{9) 9yirhV&7fʏ#.no/&/goCG/ K3?'@hO7w[^{_ooGG?sgǟ[#/GlPV QA9gy!sֶ{VkiG'W)Hۢs W/kO*zj[ sSsoOsc#S^l``h0) W!!oWf(ϛڢ)w3'g_?srR>Zs{Ï*"H8HH*wI!9IW>"~s/{Rۺz{cc/jڋOrKZJrnJ:R.jbj"RBrÛ''ZNRnj2j +Rk.K2kk{Kkj + :z+#{K#kkJkZʣ;k+ j kʊJ:ڢ +{Kk jj JJ k +* k*Z*+J +K{k* ** *j**j+kk+:kkz*kj +:j{K++ˋ" +˻:*; j + ++kK*j ++k +J+**jv÷) gO>kΏ֏^_r_#OgS{s&iNR/*2J_[[:[G*(g~?+o~KjR?皛cZێ{K2jk++k*K{ +J{+:[ k*; ++j kj*JJj* + +* k*:Jʋ+k*+kj*j:+jk*jj+k+ +*k+Kk* ++ +Kkjk+jJ+kjjjKKkjj+++j*j+kjj+J kjj*+jjKKk*+j +jk+k++*+* ++* +*k*+j+ +j* * +KK+ ++j++ + +kkjʊ+Kkj**+*+kkj*j*++**j**kkkk*jj++kkk+* +*kJ*k + +Kk* + +*+k+j+k닋+kkk+*jjj*k*k+k+ +j*r*+ʋrVw7/Jk+"c+Bs_c[ۺ:ʊ +z'BK;?zc +Kro"+SKH[G)v&cKS"**NkJn+K_n8Gb[7>.*;. .jnI_[ s&r;z/ ZNs./K2S"f?hobjRoOjso#[n+ck'Jb?R[OoN.OCC2º: .3NkN?/j"Z 3/'73B/6Fk#3^:CZosN:szjNSK~ ۏ3[**2: +j3~Ë;3ooZ j.cR/bZ{ +[2+O;/#oSo"2+##{+2.B" +.;Z/;㾚¢.j ro jJSz ;cSojJjZ#?jRc*냛oBKo~z>J~2"؀ vF;闷GOϗ)a i ){ ?sR2 &.{k##rZpH` 0)y&iIi7ik&i_Sr.VnJ#s2"23;r3&&,lH&3g)R/w!iii7LJgOF^JV>ZSsZJ["b~RJNnR:Xhx +SyW?WIiǗi'sS.^&^N~~rr:BZj C{k3[ kz:z:k +JZR(vFh6Vn'))Ww)wGG_/zn66fFvfrC[3Ͽ_?o?O[;*jrH8V&R^w )9)WW_+>vV~~nzCO'__'O/C3KkK"BR&8hxVx +NI99iwsk.>^vv>&+s#?''OS{cjzr2rH(xΛNjW79)99w7OS.>((h~ڲ;/gg?/{;JBRΈ (xH+w_i yWWG'_S#+.r^6Fvh&^*G7__ûcozZNZhJ'iyI9)))w7ϟJN~&f6(hvvBKCs'g{k3O +*s@l0`9I_W I)/3IIw'wf6Xv(yכ'wiw7G/_)Nܘ! חg !֖~zϟfh^ G#ŠϷǷCssSKOWI朤|WWY. I7_Nb3_Jfvv)"Cg3{[:[iG\|laI`W)gYV+kFo"h(^SwG{[S?3sS/+ +)'으Y97!!/X7koy3&^&vs'b&;LJ_sc#c3S#zGWL`^i1q_k?ffio?(nR&^Kj +3kbsOs'j*j+2 2P;/Ɖ9iRγg*_OB&NR.ۢzÿJ:#Jz;K +BR+zF>>/S/'_g'zsnBZ>Rrn"KKooo/ssCc#zZ: 2‚Bz.n.nR.bJS_'?_?s#*BrR.bR2:ꋋ{[s#/oK""šz:*J"J::Z"k[#S/S3{{##; +jzښ""z"Zꋋj;3{j ++KkJZZ+K*J:j*kkk* +j +j**+;;; KK ;[kk J +JK ښ :j**J:K*J*k+Jj**kk ˋ++ K˛K ;kkk kjJJ +*jJzkjj+*j k*˻ +jjjj+ +JjkKjk + Kˋ+ ** +j +ʊj+k:: ++j + +*k*+ˋ*JJk kjj++***k***kk KBrr"jK *kۣk +kjk +J*k +j*+j +j++***j*+*+*kk+kꊊ*k****+++***++*j**jj++*kkk***++* +++++kj***k*+ k**+kkk+***+***+*******+kj++k+*j***j++*+kkk+++++**+****************************************************************** *:kz ++ + +z r s k*J*:k+["ZJ+*z2{ ++[/[K +*jJ{r+* +{ + +ccڢ/ +ʂjjr +j +"k3z3j +/#3SO*s?kSnBj+:rfh+x(Vzg 9y!i_okf(((.ÿ'?OSj+ +s cs/0x8( Y1 I'KRvv(vfƖ&>ۗG'O?c'_`,APl6H9 1a9w9W&HV&hȶv~sNFrOJog_7g7OjSbsICxaفɗgRRV^vc&oO'[g?ǟ'S{*Z/P0,pn3^!YyG6(fƸF6.nR??_''OoS# +{::[0o8F@#CIaa1h((6br.[:*_oS//'oog_cs/SZk/p >@PV88h7wiAi;jf8^^~S{/_3sOgC;R"Z"ÖpV8a)1yi9.~6Ȉ(^6^bzOO3;c?s?'O?/#JbⲚ +jHhXv~WYa၁aG7~(6(>.^c o?__3SSK">. +;z.(fh8hJ{g!9iG_/Z&6^N^KSso?o/;2r;&brnk~6vvǗ)99 GsJrN~~~&^&^~2js/sosKãjbbb2.2r"Zb"nffff&W)i闇3K:bR>Nnn.2rRS#o3SC{cJ:"bzJnj>~&^~NC?7w)W's[ +"Rn>>NnRrj[33#˺z*** +b2ںb~^.j/gGw7?s#Z2n~^nn.rbK3/KS#k + +{kJ¢2"ڂrn~~>+sO'ww7'3#ZB.Rn+#c3[/Sckc㋚*+k:²ZbR.^f&^&Nr*O'7WWw7_3z²2n^ff^Nn2jC33oC33K[crrb2z2‚ + +2&fFff&~R;)iig_ScR..&f^fN;cO?oCro kR2˚2." K6() ob.^&f^&n.z{/o_?'J;{2^.S^3#V8hhxVn/aa!Ii{2.Nvf&&ff~{s';s kBBJn[ss8X`h^I!AAWkhh(h薆n#+N22[ko 7)W73CR>r.&>/ XH0 .Ga!!Aq1y9 _^6Ȉ(ֶz/b33'GgGϏ#J.r>JCx`V@Xf/iya11A!)gK&HV6&+[Sk~3fO7gGg'sJ.# +X :00`Fa!WY iG2hhVVf~rs{k ^/S^c*k7{G_[OkJnrBN2z*X3`pF[n!Aqa1יg+o +vV6V(V΢S3C''2_o +^/KCw_ +3.b.HN`H hF)9!i'vhV~NkoZ*3BB/r?ssC//j*;2*. ncfshX֎GIYYYWiW'K*vV(Nʣ#_OϞ ( +3v.;sO?#SSj;nnZ&8 n wiI!99iwb6VFFfz[[/3#sO;RۢJ+Jc +OCoۣ;JZb⢎'ORj^^r6&nsg I )'S2>憶F&NzJ;s3s3fGnfO2rN_3*3+S::r:.K232#˻>[>~nf*k/'777_o**22N..>r.bz"zj +ˢj˚[{"OJc/Kc*+2ZjZj*j[k *K+kjJjJjj+**k kKK{kk{;ˋkjjz +:z +J ++J +j*j:J*Jk*{;KKK{ +J**+jkkkkkk K ++k** +jzz +*+ +J+jjjJ+**;K{ ;++j ++++++++**+k +jJ+꺊jzj ++j**+ { j:kJ*kk *j*+jj* k*+++kk*+* + ++*j***kk;˛;K +jj* +:Z *Jj 늚j +ʊ* ; { *;{*j++*:JJJ* +*+{KKKK+*jjj + +J+z* + +** { 8YV&ksB:2J2 +kꋺ*[[j ;KJ*:{;bjˋ J";(S +Js"B ʞ[jf??^_.*n :*/n3+C[.bnS&2IfK^'n[3sRڳK2';Ϛr?c*C.ZjjZۂG"fG[jK"o(_K[&^6s#SG2g;_NS#2 +2#J_f>Wz+{.?j+V{GG(_)*~B6R'r+o2?S׻>/^~(綗6*"kj?OǾ'oY_Ƌ)+Iwh96RϾ.J fXIpIWha0A68fI n/_6'>)ڈ??fiW.WiS2Z3?>N'c! +h9H!&rifƟ&/.I2?ssnvF2fw ^v!zvIBN(W;wFrz +x)R(2;.FROf?2[sf'hǾ;(W6J^ʢ32I(ZK&F78icGvS.&VjWj^2[OsoKO>_&7r~+'R3kgr';~RfC/K>[sRrS;#3Kn?:&k>w/zZ +B?c+ +ZK*kscrK;*3J {+ +J{KJ +*k +J*Jk+k* + + +jKj + ++*z* j +*k**kk+JjkKk +kkkk * ++Kꊋ +*: +ʋJ jj+*KKj*+kzK*k*jjk +K*jkjjk++ +k +*jk +* * ʻʊk +* Jk+ +j k*+ *k+k*++k* +++**+**jj**++** +k +k*kj* + +++j**Kj + *+*j*k+*j++jk** +*+**kj++*+*j**+jk닊++j+**k* j+j** **+****kjk*j**kk+k++k++j+j+k*jj*k +jk++:*(I :NRsN+ks[;z +* +:J#j ;jK +Kjk˚ +kj{; :cjK +k;;JcB[z:c.s +#sk#j"ZzJ{3"o/"kb.3KOC&9{)^*{.#:JnS_cb/z2/_W裾r.FK˻#~_+cf':R{^.BC{&/+:2O>C[# +J#.sk"s."KS[ڃbjS+KbJz* bʣ./{*{n+J[B[{Bkk{joz:K+BJj* [*jC j+z ++:C;J*kJ;[z;:K:2 Kj kz˺Zb+ {+k+**{jZJjjK{:J**k **;Kk*kjZ:*Kk* +*K ;+*+;+늚*k*ʺ +kkkk{ K+++*+*kK++ + j+*k++j +* +*+***++jjjk* k*+*j**j+ jj+jj*k*kkj+**+**j**k+*+j*j*++j+kk+*k+***+k++* +**++*k*+j*jkk*+*+k*j** +j*+++*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************k + *jkjj+; +k;;J;zjK+k+* +**++*j*+jkKjkJK:k++J*K +k;kJk k++K+j+ Kjjk kj;Kj + K+ :K**;K*K J ++*+++ k*+ kj** +**+*+j ++ +Kjjj**+k*jkʊ*k*j+ˋj+kjJ:jK* +*ˋ +Jkkk+ +*++*+kk+k *ꋋ+j +j{kk:J˻k +*k j** ++˻krSBcCKZC["j: k::+{;J뛋JJ;K:;:*: +kk + K*+k +j j +j*+* + +**j+J ++K***++k+*++k+k+*+*k JJjkjj+*kk ++ *** j*+*+**+** ++**k**+*+*+**+j*k+kk+k*+kj***j**++*j +j*kkj+k*j*+**++***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************@bs6)zZfRgz.6{jb~f/ r/krn2Ύ;nkCCR6)jFf{^Ok{on8`()(ٛR)bCgWoW*{NFH7rWWOF矆fSJSjoScrC^..2rrnK?bg˻3#+b.":C7bOk2{[Nj6O^_n C2s/'n2 +_'zZ뿢r;.oj'R[뻂brK~3/ڎ.r?f>.sf''kzk_aJs?#j^Kr^kb~ +'j?k2Ͽw2#RC'b#^'Njr(7^*W.n3"ogOc/s6 +NZ.:z'N?ۢC[r +3SG2>.R/sn*22[njjRK"jZ.3".2kkb3/2s /ZCZ C +JCCbjRnϢs.b+* +{r:>*&&&RK7Wi) +r>NZ::s& `P_ )1YsN6x8KLJ)7'3 +"rZ +k{o'x0`0R'IaaAaaa)gr&VVHxh7)))Os;B2RRz:BX&@0`2;)Y!!1! ɉo +ȈHH֖>O*)I ))/k.br SofGx(Hh`IY!AAYᱹi9:^֖؈h ƈȋO'ɇy)I G;.:RS/VXgVXC!YAYAi)ˏvx6vr)Wy ɉ7Gg3 >bZ20`8@h{!A 9Go*v8x8膆'gi IiW_b^OsHπX (xRb9!A!y Wz{&ʗW )7s+"⾾.&B/OgX0F`ngI!ၱaaw)3^"f(H&~S7wi)wǃnN>nBzSOHhȀhJ/a!a9cNv(hʻSg3σrc~bBJnsVf6((v{'gGii W_k^~nc"˃kcz>{ˢ>2*o2~>.;nC*뚿s_OJSzj?c'?/CZcf/VR>rR2 +.rGk{ŠC+ 2Zs?KoF~R*'rJ.&&&;On^Jnb"./_N{*2JbnB6&Zo*^sC"b^f.+&+ROooO>>J[O/.Nk"BRVJ+N*{Cg~..?F^f^'η^˞OrB{ +?SRZgon +(" gʆ+v2N33 *6R2n'ZCfBbrC2.2fb3c/_j;jJ+2nkfλr3r3sJ^Jj> /;:{o# 2sKbf/:gs{z3; /r"^RnCkc+.Jk*2JCOfZcz2_ 3n/fjjK:Oo:b*3;˛.ۚ2JKc+r/b;r*rzo +2z{Z3z".SB+/>z/S.33*Rcoj__.KC3k*ڣzSRg^#r?#* +cZ"#C:jZ{Zz/r;+z.K";SNs:B+BC*kGzzrr +c +~3*rK+S..s~n#3.oj*jcjN_Z"?k +"oZo#r_Nn7f'R^~φ_j7b&OjKrΚg6/n{N' o'^J23ckÊn/n?r#j?>R_N;Joێ&SN_.:k~2;o[ +~wƚGh~oSOfz/[2bz.N&oO*^w>Fr?r :[;[r~Jj' +z/;W9 +Ih6w8'w W{Vi[K'^)V./_&i62W{濖OCH9s x!V)hF;y@z )`ۀQ(aHN8 +IN3KF8R!?)f.F9I^y WHIOV)v?b:z`!)RhWkiavf +_Y8F0Z 9 &8l!!-3b W`YoX1؛ XYIlgوgm`"&hZ:h6 8H7gg8W(i)p)(׶YIRO9V('.&(YhNrI9wa wh~YIg֟Ix_2Y/K8wGVI"YV~^k3(3"sN6 +"gg"~SR)H)+R3R~nC":_"j +{#GZ +rzηCB*z +_2 W.CC HYm9v.iK^9)v9:g(+~7go_GkoCgiii|T`fOQxIO(aOoW3hHks~>SRO#2/__Gs7O_?'׀fFAMAv.hWOao ("ORs.p`IK>IcH2i)Ʋ)N'SiO@DP6,QqQ S?iO^v' /Siɖ^&3#F2HRb sgׇk?j''{+sod"^fqqI3xi78HiW.sSVz_"F:*vx/#rVg+_':k'/￳@AA!)'gۈ)n;>:SΚB~3zr˃Cs/s3;KZ:2+3fvZ{GWGrB"z{j; +*k2RrRn"{[j +[JjzzKkRJ"+K*Z;Kz + +*j"K*KS# [ +˛*Jjcc +KZۋ"r*zZJ +{ښKj + ˋ+ +*j*kKzjK늺j+JZ+kkc*{; +Kk;;;* :JBZjJzʋ+*+: + +k{j*[j* + ++*ʢj +kjKKK K zzzjZ + ; +J*z*;:;kJK;j*{*{*z +* +{* ++* +J*Z +KKk+*K +˻JJ jjk +j*Kjʊ[+j:{+ + +j+kjk* +{*k +j# :ڋjZ:Jk;; +j;;+K{z +*+*Jk +j+KJ: +k :k ++{++k [ ++ ++ k "ûzjJ[ +kʋJj#KʺKkjk{++{+z* +* +j + jj;JkjjjzJ+[k+ kk:b: + +ʢ {{kz*j;[ ;::2"bZ +JJ +kJ+KZzk# [j:+jK;* *+* +JJ :" +j*jKk*[{ zC;+ +{ +[jksj*J:;++ j[kK;: +{:z+K*ZKZ*ʋ"++:{ jJ#Cz[k b+ +[ J +ʣK:J;+zˋB*{*{+{ +j Z;*+*K{j;z+ +Zk:jz#kJ#K{+*J"++ +:j +J**j:{J:j;J ˊ+ b+[ zk*{Jk z+˻kj˚+[bj*{Bk⋲ +r+kzk+ JJ J +k{Kۛ{{sscS/3ãc; +kkjr"r"J{sCbxhhI YI3Ssk~CK+Cb2 c[/g_CC#GG |,@hi-y&~9WIxXxhRs's[^Csg_*jχJ伬Hqaa!X.Gs)X('_gs[O+bG'7[z +<V(fr~΂K?O'Co#jK 8/vO)׉ǷW'CsRr&&(vKGLJGϏOo/C[jj+z+;"F7WYiI!I) Ww_/Û.66(^_gG///s[j:F`S'WyiIi)7cszN>vֆֶ6 ?'gssC**j뢢~xX`zbzSyIIi))Gǃ;*>FF(vֶ~.Jz?''S3{ZhhึX />v3׳)9 I)WW7۳"hV(Zr*//g'?ggoo3 +br F`'N7'III )wiG'+OrrhV(f>B+3g'gg'?O3S;z낲b&`'Gi WgןzrƖ((6sgg'''_/SC:b@hVW?iI)7wWi9)SFFVȈH88& 'G''O'g/cC;kj__y'9nw9xsIYW!Yj΋.B>{2V8S鷿;Ss'z_/_c +Zz?g7PDS{ÿ.qWFR?O!a)Gkr2 .f^^~b;/{*#Oz_o#g| ^ё)(vN~^kyz&#O?{Zf^&zz{OZRS'_?Osʲr:;3Ϗso'2 |`YƸ(+o>Ö'sb{3sz^6&r2Css;z/ +?'/ssKj"g'nl|L@٭mAr(/iY(f#w"kb&h(‹KKJ[ [/?ZKo_gS"__lX fo*3__'Ǘ[ϟocbRN^~z++c[/oÊ* ッ[(6Vhf.n/oW))w'g'o3.N^ff&rjSSo///z* (Ffֶ^&3_Www)WwSCn~^FvfnRso?__/sS/3K{#Hf6f8^/SW77_CcKnRn&Ff>s'//j+ (ƆVvx&ncW))w_3r~^&f憞n{/O/;HVFFFS3WWIחWjrN&fF&nZs_?SSC[j&(6vhxfnsOGi鉹WWG_B.>^&&~rz__?/ +:^hVvhxF63i)i9 ))鷷goB^6~b+soOO''_OOs#K +((((ֈh[3/G) 9)w'o/:r^ffffNz [sO_g'o[+"~(V(VHV:SoWIiiWwOcff S_'_Os +J*†V(VVhhV> W Ii)w77/NffFf>'_?O/C*JBvVV(V(hh(f.SGyIiWG+ +Zr~v2 ++fNRb[G_/GWW/O/| 'Ya!!n?w!YiSfH^3wG'_/BRo'__W'/*k+*|!Ya? ([i7 ?Fnv[2²: +ϟoo *㳳3p1!a &X`HgwiYfh(fNj/>FJ3okCZZS'_ok3S*Ko__|y1 a9fX2wa)fv6~JOG*6h*s2+ ' cϿ#[Ͽj/_g,fAY1'`XC79a&v6ng +Hx3[##S7ScC:ZCoK3dLY9h`v69IZn6j/FjB_ʟwgs#c**_ojKsCo$igQ HO3v_)RK*Ofx8R_S +'/SW/_/S*o0dfGA͑k&o?VXy!iə&V +_8".Ç?Ogg__gcS+o3ʎ$`Hnga qsgV晉i)9y72~vJƶ/ZB +~Og7Cc/{#orz#:2; \XhI--9igfI)wə^F^戆;ZNǟFSZ*k3 +Z{N냬`X6)qѿ7V: ' 9 W6vv(FcϿG[R: Oo{sOjrN 88 y!!w*)b/7CK +"Fh(Ns{ˣs{SS ++z#Ck:nZr~vֶf>ʃS_wWi )'c +^~&ff*OSS?o:"B&((vVh(& cOG)i ii)wGKB&^ƆfNr" o/o?oo{ۛbr>66(V#'wWii)7Gg/[br^^f^&2jSO/S//s;zBRnF6*s?_7Wi))GG_:&^^ff^rrj[osSO#;+jZB2r.Nf&^f^>B* GwWWח7go/j2&ff&k[C3/OϏOOsCCcJ +2....nRN>~RZKo_G7O[*N>~^&~~Bʻ##3c33S3cC#[j+22.RbB.2bZ3''osc :RnNNNNnRr2B+k;Cc[[[[Zr.Z22 +k*+;CC3So3{{ˋ:2r¢bZ:: kk+K; ++ kk*zzj++j*j+K {K{#ۋk;ˊJzʺ"Zzz:J* +JJ +Jk{k *Kˋ++*;*:kzz +* K jk{K;cKkjKXIzr2{&#HFǿSCz"_rbr6nGB*/KzWNZ_;G6f#Z/CJ^C"bn{r#b* Nr.Kz"ۢ 3[ [/3sk;"k{;룣O_r&R'*R2rnF/Gwwg'{3; +K.Cs?7V|D츉7)qQ>xIa!78v3b+)&( WwWsoCoks˻:79^jV^"7SZ2_G_'"ROSW9/| mmY)jia!{R(ViW "&6>K .)G?:^R[*cR{3;s)cd MM!2V:ظy1)hƆ +Sf )f{Z&ck>Nʷ):^Ί_SoZccnNSgw ,2m=m.SiSh(&GGRʺSfS^Nn +sZF.GJ/:J S:. +3owWƼ$YfH2GW!7f?ingf˟/[jvKG iFzK/3o':RN_i\s=m(X^7R a3h8׉2NrƆ_NN/+2'7>R+S_OC#o_ R3W3$wChXx1Kr)iR.GOFF.3~CZ WF>_S:R"gZRB+?i^,!MN8(h.Iq8k'^S鷲(v?3Bf2?#/2r3[S?b"r__ۊ_g&$9 ;RF[YA1֞nvVK)IgBF~'g3Bs{;Û#{[+O;;7W \&qmG_cֈWSkn.;_~r*s::k3;k?#S0|L@1y)!WX7w 99Vb +2GWw36Vv'Ggnr{{ +: {;:?Sʻ/o_ň.Iy) a1h>9WO[ZR6.3΃J{3#B"o3#JZJ⊋S[SoK## pƂ Y9g#r&k{*?'Cf^f^&N[?cK{KJ"Z+; kKCs3[C{^(xh趾sח)ɉ[">f^N²Ooj"JnN kc3o/##""kK[cCsS +vhVVvϿW ɉ'o{nk 2Zzkk+bBkC3o/c{z: +++Kkj&F6&2{Ï'WWww?"rnΎRZ2bR":zjkۃss3;;Jkk K +zZ*c:.&ffNrʳww'CKrnR.n2ZZz sóc k +*rڛ + +kN~&fΎRzo7Gg_s +:""b"rBڛZJ*+2[3SO3{*[óCCcKÃsoO +XX ([w9aYi.^^7wGφr&N^6VJK{;sK +c?o3O;K^а`@W9 aaWCVvn_7gWG>:^F2zfc__g{bJºz#óooss#K*V`RGiI!ٙIW:>&nJ{jgS:*>ΎBbzC3CKk +b¢b:zBƶ֖^R:7)i)W_CKR>>rnb r+RrS; ;#C j˻zz"222RRRNn2bkSg_ok"r.n>.r:ʊ ;K;+ + + +B2""2rb:kCS?__os# +2RRRRrr2ZZK* K Kjj + +: +:zZzB*۳/??SC[;"b"Zb"ڢ"ZzJj* ++KKK ++*ʊ +z +ʺ:z::"b +kKsooۛ;J":j**j *j**+kkk+kk+++*ʺ:z:Z""22ZK3/OϏS[K+>G?&F?_^#N~#BS23 +ZsJ:rBR"2zjC3Go#3[kNJz:Îz.. Rc;ʣk*j[ +:kJ:* k;B^fvRj'?i)LJ/+">~h&.~b*+ +{C;ssZ*kb{HH8X(hwYaIiW_B.v^.nC.hN (WS7'*RFʚgc/Oz/O` 2wqw9!㢋(zff#Wi# +6(2RWW s2{Kj3C?3?JjZp|H A1Wi1 ) hh/xBW)9_'v68K''~RB/7;?'KB +&r*o/ мv!Y9yj{8& www׳N(Vf __'Soo)G'#nsn*ۢ/sco'k3S?Glqa)* 'n iGwZ6.nhh&RK_g{#.N&7S7go;bk+z:o.|V0I1 !6ֈ)Wiy7 ^F~z"'njN +J#OV{6o/3cꋚsCk*O^H`vi1aᇟ7o3GiyS'f_/bR&^jo;z8?fW?7okN{oj3Z?RZ","~;W1g6Wi..~N/;/&.J/C32n&HS7jj +joO#SK3#fNH8iw!9NZb79YiG>cKSs2&f*;S kRz.{Cg7wJ"RS_[/c +* *B'o~8, wW)i .V:K'Y7'^?3+.^^;;k;{ZJ[6HGw 'gRoj++#S*.ʋ/HS WwOgiyicZOc>^~NRz+ +#(GZf'j[b# [J +hHVH g3gB_׉Wg C.*cjrn&΢"+Kzz+*)+j&ʛ_cj2۳Jڋc +r;g'C'SSg_'*22nnnn.R.Bkk .2k3ûS j[;+{{jjK +{K +jj +J.ξ&^&.ZKCOSg'__'?o//;r.NRBz2 +3/ro/soc3/{[;bJ + +:K*j +jKJRn&&>R#o/o__''oS/ r>~~N.rRr ++k˻*/ϋsos/;c{; + jJJZ kzz+jJΎ~.2zK{#OO???Ϗ3ˊzZrR>zJ *CcCC[#{*+::z**J +j:˺: +RJzSC//s/So/s3c[ Jbr..RRrBB +**kRs o/;OK +{b"kjZ +z": +:*+jk [ z*B" ;{#c3sSs//S3c{J:z.R2r"bz*kcc33/JʋZr^z.B+ ۛoSOOOOo/S3;‚rnnΎRRrbZzk{{#[[c jJ;2jzbjKK*k{{c[[{;*j::z:Jzʺ:j:jJjjJJJJjJ:z +j*kK{[c/sssCÃK+jZ2r22rbZZzJ++K; +KC#CC#K+j"2ڂ2bz:z***+ʊ ++jz +*;ˋ+k +k 뻋{ [{K[[[{;˛;k+j+zZZzzJ +:Jjjj*k*+*;K KKˋ+K+ K k*++***+j*+ +j+J*j + + +j:+J ++jJ***jKk+KK닋;K+˻j*+++:ꊊj*****K kk ++ +jjʺJj +j +jj*++k+kk+kk++j*k +*jkk+K *+**jj +j +j + +*jj**+kkk**k*j*늊+k*++****+kk+j**+k*+++ +***************************************************************************************************************************************2 +c S+#* ;kjz +* +JJ++:jK{KKˋ +*+*Jzjj +*jjkj  ˋkK +jj +++*jj*k*Jj++* jj k*k+*+k+****j +jkk* +*+*kkjj+kk+*+j**++k*+ k*+j +*+**+*j +j+*k*j+kkkk***++++*+*+k++*kk+jjkk+**+*jj++**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_american/cause_05_loop.isdn b/tones_american/cause_05_loop.isdn new file mode 100644 index 0000000..5e1ed5e --- /dev/null +++ b/tones_american/cause_05_loop.isdn @@ -0,0 +1,214 @@ +*d}EьDH$]abS/ϟ_gGGbvุ@xf +a99Ww'˂v(V6^.2:3wWWwww?"(00F&WᙙY 7 N~ƖhV.ksgwWw# 0p0B&2))ay!WwNV(h(F6rjIi9oG`|܀nzw6) ) '_f^Hx7I[siyw2ϟr~n))IiWnXĜ `ѷׁ Y/kG# ciWaa')iH``NG/Wcz&rw)/8@qI/fFG.!YȀVVo?'9w3{JZf.S_GG3C?z l8[bI1IWɹ:o;O __iFVFH.#3*_B>bS*_ + ++Z +>f ;g)!W k_SON?ojS#.k&^k;K2Z?frSJSkN3^hnr*BrkOGG_'3"''C;CJs&f.76B:Cj&BnRz.sS:CrR;j2.R*B+'.'^*3'Cjr/Fo;zJsFK>VS;CZ~G6_.{wNG +z[n2::n# +>(^'i&7 +:B;Gs/^_*o.g+ +O^(kɾ6ɿ*'f_ʊJǸ_[.^)gr_x[7iH/3jG~'N&2f?w2&Fgfwf{'*&J'zhB>[Ggi_Br~/)GCη2F#KsofcC_sG .׈rGJ;_2۷>; +s;?"f.S^sj[^/Sr^B_{Rfzsjr;Jr*j>.zJj +{;š" ["* + +Jzk;{;:#JjJk:**K* +:Jjk *jʻ{++K +zk ++ + +;Jʋk ++{j + ++k kk+++ + ;k K K zz*J* + kj+kk+++{+ ++kJ*j* +j*k + +kk*ʋ**+Kj;jJ+k**Jk kkk*kk**k+ * +:*+ ++J +k+**+ +kKj+ k+ j*++ +++j**k닊kj +jʊ + ++ +J*k **kjˊj+kj +k*jk*k**++k*+ʋ**k+k+kj*k+*kJ*k++ +jj++*k**k +j+*++*kj++*+kj++**jj +k*jjk+j***+ kk++*k+* +ٟg&/j~&;wR/Zdž&KXhV3&2_;)?V&#Z>soF)cC+j#r;sJ:r7/Oj3Sg7?g#l,^- y)`(NSq3'C`0^(!{O_BVKS[[i'`daI=7oW0)IY^h)+sF־'{sG)g_i ȴ-I n FH(!Y>)dž@p8yG W)HOz O^nSJ_W)GVĬ!i!1^,^iq>8V!(2& )_jk/s R_wsQGyp!99`_)7nhhs+ong[[god|HYmy`@؉1Aٷʏ?VHiWNrBB^ROnSg_Oo{LJogg7ϼX1&O@YA1YKs'W>~~^"c6))gK2sK7G{WV$,^-.j7Zr8X`aA{.k6·Iƞ&f~G_K.{Cw'#K{($$N-mwk8 ga1 S~vrI g:8~3'+6bG)bZ)Go+:OGiP-maW7[Xx9!oI韚֖G'f+G; +*:ljWjŠ/_G)Hd\O-9oV`` ɁiGVW /3h h;&#goʇiǣ/O_wLчn  `ai_(h燇(hwsSOOC*鷣K3s cw<q)NAAS`@VIw9V'2k7 ){`H"3zǾ>Zw[˳WLH7QWO^>/~h牉.fRFhOS#Kۣ_sKw'S##c_I)am1&&v W3H C+gV  '"3_3w7OGgo܀2wIyHh{XfAiYHR [GOr3Cf;Knʇs?s'ok_G&lFV)~i:`cwa1!JX`:gbo/7'WOBO۰|Hx`qI9vx66giI׎(v*g?sOڳ?oss{;0w19A&&O_F8hןr6ȈR.N.o7Oo*B˛ +;_*c_g[o'H`9GAٷ2h>w'&~s:J{2K.#s +k:;&hhxSSlj)i ڢRRJBJj*k2bZ +2*zRK+23ZJ*k2>BbNZkjBo?_*Zz +Bn +z +n[ KJ".kB3BC+j;Cz*bJ +r +j"2;b+**3*/˛Cc + + [RZ2Z +bۣzRC[bz+++z*kj +jK:Kjۻj* +{J +Js[*+˺K[+zjJ: zʋKk{[++ Jz*jj+kj+k+K*: + +++ z+:K*;j+ +j :z+*k{ * ++;j*z* J +jkKJ +j +zJk+*+kjj*kk +j++Kz jʊ +˻;*+j: +++* + + +kKjkk* +Jk kkk +j*+kKKjj+ k+j +jk kj ++ * +j k닋**j * +* + jj+ k* jjjj+k+*+*kkkJ*+****+*jˋk++*k**jkjk*j +jk+*k**jjk+jj*K***k*jj*+**k*j +* jjk++++*+ +*+jj*+* Kj*k++k j +* *j +*k**j***jjK +j*kk*jj***kk*j**jj*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** +"W&Z2jNrf WzIƎ&BƾSs"_:H9϶^'z +>Bf{o{_k#r +_^& +S~:s*£?Bfۋn_>csr>[o.n*O>Ws~Fcn3jrRO~㿞'/濃.6S&c3nsNgV_Kۿ&S!OVWnhj[O~SB2Z6)2^R!zS'3Rz+vYƚB6G?x86BFwH +JrO7!vG&Y&CGhGVwO~N^3h>C+'/"iV7(3(_fs_g>V.x(G7{?w/v'''6hi(')(w)cFi'_3)wx +"^7O^;c&_g;_.*&(ζ) +F"&f&3^? + Kg²ã~Gz(Rg[6i2rKS~~"3rG֚^ [grWs*"2N;{g_kB~ SO. +rSSjs/*Z; RBzjz";jR;#2Rnn>>Z ?w7G'?os*K+"rrZ)i4LǭQ_n¹Y'&(f'7ɁN'N(k'[2r*R +C_/'giI 7qqAVFWq!nK:rS~N'Άf2*3/fwۋ7cO'_Gw'0$rQ7i"F&G1舆gNǏ@`2y 2^w7S)i+g`\l~ mqr0@ JwAg8^ 雖~hhIgrGS*S_;wb.[ W$mM-ys vV"-w`>Ɂv +gS x3Y!h~S?O''s"iɹ R)W_gs0$ 퍱+cHȢmh'YY#+W 2HHrWo:W . gkf?iI|$*--q08hg1Ah_y('&8f3RHHJWI&)o^s ^V/7GL.wr^OC{X>s7Wr&^ʟW W/is2S/~^rfnRBr.j*3{3Scosۊ{v^V~>&BzrC7W_)iW7 3N~^^~&^z RRzScg3O/s^8((bo[C*GwG7W_Oo.R>(vrr&fKʺnO#''oSȀ ֈ6^'_˿g7)_Ϗ2Rn^f^^.~^2;#"£o?_'( H(F&g[3o777'?[z&^ƞnB>+/sj[C'_?C(V(Ng_)'_w)W.&&N2J{{*kOo?'_jh/gWiW7gg' R>f^f^~.j#c3[Cs3ó/sc[[HVvn+*oGGiGo:ZzR~~&r*J k/Kc[C# + +:rRrrB.^f&N»C'gO3ˊ +"2Nn>Rz": +K++;[K++KKʚښJ+J""z +[[;; jC#[#cKKkjZBr +:⢚: +bzj ;KK[[++{kJZʊ:Jj+ + +K[[{;k kj*ʊ*k K *;{ ++ +Jzk *j+k+*k ˛;j* +:k;;K * +**k kk*j*j+k*j jʊ*kKʊ+ K+ +Jj k+*+k+jkk +jj:*+j+k+**kkj* jjk**jj*k++****jj* ˋ++*jj*+++jj++k+j +*{;kꊊkK+jjk + +*+ K +:: +*+**+k k*j*jj**++k+kkꊊ+kꊊ*닋*j +j+K*+j +*kj*jj*k닋k+*+kk+*j*+**jj*+k+*j K+jj+ *+j+kj+***+++jk *kjj*j*+*j +j*+k+*+ Kk+*++k* +************************************************************************************************************************************************************************************************************************************************************************************** `"!12"Nh^n&WHc'+&"o>K7.['" 2K:CϺ_2&+FcOڲßJcB3Jj>jB/(vN(zg'f"~#RrV&?2f7W R3 ƢR"^&js3Zf/.nniJV(NRO/nOǗ^6_fj7 fGgNRB&Ob(j>rʋ_R.{CC#K.3S.S>#~:j[:2ocO/r[//N/'c2>OkRnc//Z K3Z.Bk3kBkC;+Ocz+C~&nO?3.f*g>g'zK:bR +ۊ:B.;CB?SZ^+oSr^{B".*/ +>.s +Co/s?/CK[:"ۣrN/cϏrSzrRRvpSaQQ1YaaYڸX8v&FoY _O۞V(fnn/'_/Z +:.Rb+2PvK7!ё!aaY'hHv2 +o7V^wrK3Gi_^J^6>RO 0 H !ၱYh~VH3iiB)^(z+w'[~Nκo`lH8 h񁉙1;nHxgcʇ 2Kh_k#S۟_n^S00x``)11YWg'N(6^cwG'3¶Fnfr'woO/B.:3 *O,8pSi_!!'xxk/sG)/"fv* +6R׉gO7WC 'oR:ssc,0,0;qQAQAVx6?gOjGK.۳f>RS_#* K#f(,0^&aq_6&HHh~^g~9;.)O?C?_73#o;{KJ/SpNଌ(fh9')1a!c:VvNz Sgg_/sB; ;o?_3jk:Z 𶸐p(!A1"~v((Jf.gswo +sûZSZ3:b +@p0O@^Yaᱱi*:&hhVVVR6*7'C +znJ:"3coۻC2"n@@`K_!yٙ9 s(V69_Ri'7k^*SR >>^H >Xriy y!yI))Br(.&vBn_3'/s[ bn.r^rZ2 c3::z>f^r2&^RK.23/7GW)wO/ + *3j+r{k^RN+B^Jkks;2CS##K{;3cBGsJ.*~c2jK^Nf^;rbfꗣOR{c:O2#n;kR>&zZ~"nr B+Ë^{o"c.&:2cʚz jbO{;bB^RS'k*33 CNj{~"rjjbn [J[ZS" +jۊ C{S&Z#cB#zsj/Jj ;czzʊڢK ;{Ck{J*[+2 +Z"˂JښK##+kc˻JC;{;""2 +Z: JJ +K;J#{ +B"jz:"z[*JKC{Kz * +j + *b2kzkKj{"+;*{ʊ{BK2BR{ckJ[jc{;zKkk*j;+cj[ Š{k*ʂ# +k +:K;j [JrK +3b++kJc"k{j+*2kʋocc[+"b;CbCZsZ+ZB[ 2s/JOCc3:ʢ+b:zzB +boj3B.KC +cJ+"+K+rKCnc3J"2rk* . +CnZcZ*3/ˏo+z;z2k;+BC +O3kKKK. +3ϊ+[ˢ:jzz* +jK:bښk+ +;+s[{{Kc[J {j:j:""z:Z2JbN>2/S_Gggg'OSocSS[;:zϚr"hl[̬)_xaA !qa 7?(h&8NW){jRVV6JKGG_'g_;bnRR{++b.^&~&*k+۳S_'gSû +BZJ[Soccr66PaYay"hH8>nWW73f~f^V;G'c:&n".{3/j2N&^&^NZ:b:j* ['gGG'3cBrRBZB"#[#sss˶xxFs`!!yI[;fFV8>v_Oi)fvNZ/_'ǿ?22NZ"{닛kr>>Ύrk[SO_'_'SûK+:BRrbr22"Z* + j>fZw'Wi?7sZ/#n&b: +2ZzKڛrK +2 +# ں{*"*zr"zN: 3__skkJZ2rR22z +kkK[[; K **k +: +z + +zJ + + ++{{;{;k+* +JJ +jjj + + +jj + + kkKK; k +**jʊj+*jJ + + +닋 k+*+*jj*jk+++K*+++kj +j** k* +J*j+*ꋋj++++kjj*k+++k*+jj++ "jj+k *+*j*jj +*k+++k*+kk+j +j ++****kjjjk*+*j+jjj*+++****++k+k+++**++j*** +*k*jj** j*+*++*jj*kk+*j*+*+*k*++j*kj***+**+jj** +*kk * ++++++++++**********************************fF v.r#2 +SzK*K*K"J[z2z +CjRk/K + *k*; * ++ k:j**"j +JKʚK;j*z kz{ ++* JۻCbSKkgFSFS>.&> +_'R2g۲Z/o3rr3R.RcR..Ob+*R +{Kc[+K:{S.z+ >.v"G7~&wS_/[>V~/S÷63SFb^K#^ /)/;RSW˳.;~r)6[.S>{~srjz>ˢ'~ jcS 2Rg2&C3ˎj(v3>F jc(ss^j"SVfFh3S_BN3s&WfONƣ'+Sf & +.W&Z ·FBRb#S#on/+/oKBB#nvR +J3._o"^W +jss +"jC>/OkR:"^>Sbknk/'Bz.ww' +J"_o3jJj[r ++SKNr_2'2s?Î;kǾk{糆~gj*7b'.NnB"oR +K2˃g7&fn&3ξrZ>^&rN +o*N.RfrR{Z*FZF/sj.z"&?^{g^:j/:_VO&ZcSûZ.SnrB_~2O{#;>z;꿾 ~jFR+N:3+ +ocoz&C;fzcË" ; +o;3nBK#:/2kF#2#v#ONs/Bs[ SƇJۂKS+ۢR';;Η3o暎nB*'&K~2:/&orOZJ^ksOB?s3;R_3b/#2SfSnj>33&+KR:.CNrꗊ"{NR +jZRk +S3BBSj~oznj*3RNS.ZC>: +*{OS/ +3 +";c&/#{#Rz?[&nzR+vSB{zrR[c +BS;>rj˺.?Rc;f:B +33NgnK +{:rC2NnZjO;R&Jz{ :K+3Kzʋkn/c2ZS22ۻ>Êڂ[*[bbRZJCO z* /nj3[J겛z[/c. 3‹*"{#;3[sKjZjo*skCj3C#*n:oCO2r* ++JNn[+ +늛J#{Book[JBێR3 rk* s +_:zJ+k:nbzꢛJ+2**CJ Z+ +{jZ[: 2+[+"Kk+" +cc*kk* +kj +z+**j +j:k*+ +{ZkJ J + *j +jJ +K#"C 2:+Z#Sz‹z{Kj + +cc" {˚:* :Z "b.CrS232/s2[c + ڣz{ k{KK J+zk +K +j˻jJ{#JZ+K; +K +j Kj*늃j;j*:: +J +[{j{ j+zKz*:jj[j*ʊ +j *kkK + +k++ +Jjzk**j+*jkKK +kkˋKk*j* ++j* *j +j********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************* \ No newline at end of file diff --git a/tones_american/cause_06_loop.isdn b/tones_american/cause_06_loop.isdn new file mode 100644 index 0000000..b45a283 --- /dev/null +++ b/tones_american/cause_06_loop.isdn @@ -0,0 +1,161 @@ +*d}EьDH$]aYY`OѬHl!>kaΆɏXx7vhaH'KβviCaO"hHb鈟V~&[&iWn.i_Ohh&'۾OVr3>rJIG^bh_wgFsCC{>rG>+Fg[WFC_s2&^RR3GsnC; g_6ZڢjN:.^3S /c.r/J./S;[b [22Ks*溎KrR3~#ڛ⚂.{fz#o*.Šc;_?J;j/ۏ*_ׇG+S_ G Iw fAKh6Y:WW)N#_i3vn GGt)WMWF! 3> )Gs6*C2o/n;R3 +Ow鉃Z2siWg `)mH +3g.Z^g;'&2 ˚6^' +g 7>'Oz W`牶0'! )__VƎk;w ;W7낻W $(w=Q 8)@saiV "b 7N_Vۏ>SW?2sgϚWsϗiwFD.1kX)2xa)ahwf+S^^~Ng[Ÿ'.O_;osG'd)XYa2.GhXW8W2vSɚh6&os;k*' +j_gjS'77D K6^/1׉yO&ffVr?k^'2c.;_c7wj__;i?|0OQ)_6)gၻsr?ڲNZ+jrr?'"'#Z csC'op|`gXnIW^_WףǙG&B6fr{[B"#s[#OSXJhhrGVSS?W)/oj+>RbnBJ. +sKsCS*_.Xv(/63CgGW7W7g'K B^2R{ڣÃck3OosKsxxfHx"*'WWG)gG_n^&..3[Kc*o*h vV~OgO)WWgɗ_gGO7?B>2n>>۟Ks/c?FnVhX(gV''iW g')GZgz"KfF./3*oj Ϗh08 +(h .2)w&oIwBI;wnrgg +F^ֶ3'N_COX,XG>x`i(؃/(?> +yG* +G_2&vK>.gr2/H ` 9{X*Sù7OWI bvf^C'oSg|bHb_9Y_6YsBRNb6?2&o_s'c_gg̤0Hs1yHJ YwkGynjv:[F^zj^.'ǃ[GWs;GCW@8 8W_6A)F82kGaa)^Js+" g'ǟSO7 d``@A>g!Ǹ8#62YGws>(KN;~osGcH@ hQO!ቶi7&NY!'IW# +֎j:?j*iS:_;X`i9yr6GR&3II7ɉBV"{Z./;g'_oH)Qw!9x_ƶ!i9?f:nV"'RrG7GggG,|`>yGhh"gV))ɹ;N2n^W7i@aWaGvHvO9YW9_>hfJ'/#[jR>C'g9S0<`@@yIANNI!iWiy(Ȉ6J:K_{.nJ{SowG*l^i!8/ovy)W~6V^o;g*JRΊ#Jf`а(Vv~i!)Vr2Ci9GFV>&Ǝ/3{__/#{C;` VVyaY))N#Z)yOg(&6:o^ZR&o'3{g'nZR^& bj˻뺢 +* c//;c[* +"ꊢښRnBBSc/ +ں[Co?os//jξn6hv&NKG_"os˺J; +:3ﳿ300(F!g2F6. gW66cR6^S_CR&&"~N/3.+CzۿOj^n+cSjr;{rSk+#**#kKk"2"*{ + +;;*z +*+;KJ:j+*jj*k:J* +;Kkkʚj + ++ˋ*+k*j++ j:*;*Jk+* +K*"ꋋ+k{kj*j+ +Jk*ʺ jjk;*jk*j*K+++*kʚkK +*++* +jˋ ++ +* j +J+{ ++{jJ ;j+kʋj +k++**+k+ +::3JJk{kkzj+j*** +*kkjkkjkkkj +++ k+ J++kkk+jjJ +*kK +*Jj +*kk:+;*jjkk +*{Zj K **+jJ;*kjk *+K*+{:*k+zjj :JK{bKk k* J:* {*J  ++KJ#cˢBB+jBj[KJzb*;; j*3s[{{[ j*{jz.n :"rRrZkJR:s/o/_'o;{Kz*+N>^^f^~B2ϏϿv8xɇ37_/K;'G')hD,]-ؐp+iVhXMKIXni^fRo&h:׊& ;siv^o + +J+r'#²JKk[z.bBJZBZCJ[Css/j*Kc3kK*zjj2.+[# [c";_ZkgS؜ mwV'`ᑑV8F c&f&O??JBb.7){ +__w#̻ aljyx zqqq'.9>ZVx_N#O^n's'O3_SK{{r>NB^> I>.I^gO97gC+K*KfR::{ss#Soo/c:+'#8HN7")GiǗwSo[;~&(^z2sg''/óSc&h/O7) ywiW7/JnfvVFF(N^b{{Cgg7LJ?_O/SP@7S9)7W yI׉ B&6vV((ƞ^cOs'gg7wg_O'c`@x IW w{3FV&V(Ffz#?SogGgGGW7_?p(Ȱ֗V6OI'i)Gi/'>6֖N; S7_Gw''?S?'Szxp`+*i7WygW)g_^fh6z;z[3{G_ggg'OSSCR@VH zh>iןI!ww9WjǷ&6.2^(h6^ksRcsnWoi )73燳WIJ`v((VQs(iIOQyNOV"h~^2N& GG'_'w';:g?_G l8i7ъ;i7 *hR)BOVvOi׋w+~s矃"Cj_SG ٖp~L)6"ˈ6WaGZ>VnR'_sZϏo_*SS o'o"/G'Vxj9Y ii+_(O+.)GW{&#Nv(&~FFRKS‹'oo*kR2#x(0_wi)ig{*_k +^~2^.S3SS/C[Sc"zb.~rZZ.ښR.2j k{c#3O/O?3# KjkˢzzRB""kjKKkj; ;{ +kJ*JkC + +z"jj*j*+ +++kk+ʊ +Kk k* KzZ#+* +;{J+K +j:*K +*jj**j:K +*jj*k*j K +{{ kj ;z +j+z *KKkzj+ J; ;ۻk +jkj::J+ +jK+k*Jk +++jk; +*kJ +{ +zj;* * JJ**; ;+K* ;+***;kkK: +kk+++zڊ**k+:K{*"2:#cK+2 +;Scˣ";j*ﺚ j˲ +z*s +Sn+:RB3;#/ۃN&BKNko;[Nkjbrr +'j:w.JN(jS/&K"rg +V JfZ# +~gZ~SoFgS&GS^z"&&fGr+fgF~N'+rC#?WǗc#O _3'g_K{χ^)F r)OOF/B/o&f:K>빈.INWhH/v xϘgǿ6grZ;O)G_3?G–ox+SVi{^~78Iia IC):'ʋ^!)&&'23^H ~Vfזv2?{G;C6׉ginW?hS)!)R9_>wxk)7ƈ2_rgrs3_z9'3G jNki[gfG2o:kO6N)3oB_Fg:_r/;7&/[k2#j23z"WJ&FJ_k(j +'roGǿN?3fkRi)B#gN6n.#g:G&c>Ϗ2Zc[sc?+O++*+ko +J^gOcOʣ?Br/;[{ #jb+Ͽ>Nz/Bk;*.noC k[_Jj/* +okNSg +ۿOgW| (X֘aiIhI~9yy&g/&G)O {+<ܐ:M_&xaF) fk)_Vh.7gSCO/_:+?s??)Wgh4lN`iY=M7X a9 I[7^v2^rV7o[~b'Wn'iD$v}O'@!/Iv f2'2OK^._/Co_ W +bjsW y n6~͑+gG'Oig۲bRnrK3**kˢN&&>² /?{{2n. +r^&>"{g_gOss3 +RnBξnbRʋ"3#ss{ kJJ+ +zj*+:"뻢Bz zo{Jˣjz3+bzk++J+**jj;#+J*; +zkK*k +Jz +kjk++*: Kbz**K[k*:k Kʺj{:Z + +;K*Jj +k+j;* +** +"jjkj+k{ kjj"k#+{ZJkkkkk++k;;jJ+{늺jj*+k +jkkj+ˋJ* k*K*jj +ʋ;jkJzzj +k;kK[J:k +Jk+*+ j+*J * +˛ +*j+k{*++z:*KkK*k ++*j** Kj +*j ++ +;J K:J+j +*+k *{ˊJjk*+**jk+* +jj*jk J +;k+ **ʊk +j: +Jk kj;+j: +*K*k*+*****j +++kKk*Jk +jk+*Kk+j+kʺkFF)>{?sھj ZKkjkJ ˋ+닊k+ ++kjjj*jj 늊k++*+j**+k kꊊ+*j+k* +k +j+k*+*+++j + +kKjj+j+*+ **k**++*ˋ*k**jk+j++**k*+j** +***K+ +jk**k*j*+kjjk* ++*+++*+***+*j +kk**jj+k+*****************************H3!ȹh3rKrko>o;:Z +S~;gN&;{2#2Nj3`a i372>vJC /oV>~+"O.f~3okoۃNSsJf~3_RjrgNK{??noc._nSKG#o>R3o2?f B3& +;RF j +ˎ2r;/{J뛳S;˛K{s#* s{kC*{^*Sv +*n.SRk{s#3sC?/cc[ +k/K/Ͽ3o@<,XJAYYR"~&Xsii7"Zf&R*?{Ko3x쬀`!yqOV>ָZw')7F&&^:O;sRr22r KJk+ ^h+7g'Gwoooo3++K +BBB.nbb2Bz+ ;+{ {+* +J::bbZ +*3//o?c+o2‚2B2BB22Bz*k;KKCC33Cs#[c{k+ +Zں"Jj:zJꊺںʺ*:"2R.R.R +;C/?'_o*jzzRRrB.nRZ:Z:K ; [;k ;;jK* +*"J:*b:ZJ"k3soSS3cC#K꺊J22BBb:*;;kzb2N>>>Rs'gg's;z"Br2r.n2bz +j+k;k+;k+*J2N>n2+#/Ogg_?{*rRn.n.z:j*jj++#;{zrN&^r3gg'OoS3;k2.Rn2rB2zzz*+Kc;#c cR~&6f^G7_3n~&^N II7gwwGz^f~b~R ''s +¢#Csx^"OgW9 7O3*bB +3'?."S? +Rβzc[ ʊ{r''/'GGn L W!*fn +nFfsiɗbnƈ8~_'G'O+: +۳_go{+BJOgLHZIIy1W2k۞~iىG88x;Gww_BS;og/k jj3 LIY׹aA(V/sR_!Y^H":S'JRksS3o'[:: +#ogXLW1!'./¢j' yWO>f(( +rk_Ϗ_sKJBSo ^yi!IAYgjh>;: +'9i&V(fnk''kO32ˋ[/_ňl 9əAA+"'B~&vhhrr?7s;[SoKgO J:rŠ{SOoHl i9 RCk2wyɷoRN~(hv[[Rc/ +;S/{O_cj+..Z[ssk> ,,,`)II aaٗ&~ۏ ?ww?z>~v&nb*R{K{3CoO?s#jJ.rK x7 i 9Yw3_/ oWg3>&FF^r~.*kO/S3ossϳzʺ22J ;*K +:kHXG)WIc7o7b..^f^.zNfNj+OsS3/ :*k:b{+J.ZZJ>hX XV"G'w_SG73C'zrz.&vF›O::k2z/ +SC 2.z.RBnr:::2vV^o/s3B.rj:ZZrB* +RzBnRÃ*"b:*J[ rcss?SSos#{ *j222rBbZZBZBb: ##J +C#+*[˛C3Û K#[{ jJ;cCÛ+J +z"r2rr + +222+kKj**K[;+[#kk+*;ˋk{ k+k*J +j +Z"b++*ꋋ;Kkkjj*K Jzj+"#jzZۃ*zbB #c +JJjk+ K :z+ KJ*K; ++j+ k + ++::Jj ++*+ KK{;J:j +; + ++Jʊ*+K+J +K[[ʊkk; " +ˋJJ* #[ˊ + +ʺjj+k *zںۣkJ:J Kk*jJ ++k +j+k ++*j; :zʊjk::{K*:z;{:ZZ ; + +J +jJ*ˋ+k j;K;K+ + +KKkjzzZ {ʺJkK *;k: kj*+**˻kj*k +j+˻ kK:++j* +j*kKKkk+ +JjjJ +*kkj + +k +jkkkJ ++++**jjk K +j*j*닋JJJ+˻ + +zz* ˋj+*+k K;+jjkk*J: +****++*j + +jk+*jk j ++˻+*+*j*+++j +j**j+*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_american/cause_12_loop.isdn b/tones_american/cause_12_loop.isdn new file mode 100644 index 0000000..402884c --- /dev/null +++ b/tones_american/cause_12_loop.isdn @@ -0,0 +1,126 @@ +*d}EьDH$]a~N2JS_'ggg''_?os{Jz2R...2SXHh(V F''׷ WWW)77/o>vvvF~r"b#S?O__?o;ZR&f&^f&^>Rzk/OgǷ7ww7GGg'Sc*bZ:+.hH@h`(2'')IIi )7 Ww_SO~^vh((&fbj3'gg7'/JJjhXX 7IIyyIiI Wi7O"^FVHhh(vf^ +?G7w7GS##[>@pO'yy!aWwiVH88h(~BO_G)WwoC[#ˋP0Ppv79ٙ!ayiIiWWgc>~vhȈHVFNfjG)W))))GS{#p0f('oiA!9!9!9_חJHX hk7)7gw WGW_O;lD 6PHagIWiri?aAٷBXF2bsj(B?33? W/ggoSgLJi$DL왶si-2x6 2v"1)W x&O_R(~RF'YC7Z +NJˣwW׏/LLWYij@n_.)qV฾O釾V_(XfOwϷ i_nWS_g'Og_i)I|d$ q1(~1閸h627 WFFVhzWI */G_'/gWr$|$@A9a!!YȐI9!Xr3gX 6{wח#br_)1 )Y x@IwH `wB2/?;+OsCsw:rg)ILayi 28 x^?2S8 (k)zs'?^F^no7)w_?_'Ϗl| ёY 7){h`h9gn掆8`RWY!i/NF^{*7W'GLyq-9G*[_6XH!!O&(HHV֖VJiG~s?g7www7_ Lp6gQёI'3.`)aA 8HF.B[w)iW^^r3gW) l'q7hxha!/(VFr'g_n~J3WO,Vׁqg?Ãƈx8z !!yi_^VR3/Og_JR?`,p`W!ё!/sjr6vHhɹ)_F^.kcϿ?so??k*S@@ ^9AYwg#;.~ƈhV_wi)W~~r cc#s///O; @pp0xAAAٹi7'ϛJf(hHh.ow:rn2J+#ۃ3/ϏOOOzX@8cWaa)w'ێhȈV.#G3+Zr2BB +KcsSSSSoOOCh` H6i9Y!!Y9 )W7?â~((>b'_?‚J+jJzcso/S/Ssc[["(HxXX8v/yٙI )g?zn^f&+;[b2z* [ss3S3ó{bRVx(^jwiI9Ii77GR^&2n2z[3/Scc#3só##K:NVxxHhvjoG) IIWww77'O>^&>nBn2" ;[;k+*K[sS/S{¾V8xV{gIi7Ƿ3 +&R+*:2NZJ {j+Cs/SSCSx ` h&7 YY9G_ϳ&.3of^:3K;K{3OϿo/s[[ ^hX0`iaa!ɉ'3BV(k7)WGo(ֶB?3Co/j+oO_'ϊXllxyAa! iG&x^i9)r6(hhVNwž~r?'GGG7wS@ Zw!! g2HxhaXHhf{')ɹIFv7鉉)<H!m!&v ((7!Ay3( `(f2z +{?7W_+F^R*O'w7{rr wfLL`A V6C?Kv"Waq(`hG&23__۲^C?3c/S;3og׳༜|c 7Rzia1A+`I(ov*)>n?_ϣ:?7OKJ;O72 M0h'72)aqAI`k ۖ˟oV )nns''n +wWoB'_'̜p-Q wb&a1Θ`O9gNֆ.H8R7)zG*Nn#GS +3b^Wl$

w LxQhI! 9q!7;!YIz/Cvho"(Hfj&^oW'~ )";Ƿ/R#;HL<y8AY/V&GgwigiW?;g:fN:R>2BsRRcC#S'&`VhXX˻2Ç)'W77gw)w'ϿJvfF/s;⣟''oSGHxh ^j^nǟWWwW7OS3#.66F^N"cgS_'VX(V8xHnfnRWgiw) Gsnfvvf?{og'ww*(VHxH^Fn*O7_7)Ww7JNnNf6v{C*3So/_'Ͽ'"6JHH^ R#Rio_WGW'?&"^fv&R>nc ʣ3//_?s*N&&&.R7g7_O_/?knZ"vnBRZ?O''' (PhH ikW().fIY 9; J.8o_^ +V6 "~i'J"'7sRFrfr>CJ+__s[C{:Z" +J22B"..2ZK{ksSs3S/3{ ˃:2r2z"bB +*Bzjk;Ãsc##[;{{;k {K* +J*bzz +Z:ZR:b[; #sKCoS3cs#:kz2n.NfhhhȈ>;'G Iw'_+[J[jS?z"> +;[//[/?wiL@@yAGH(kNwYywf(88(68(rg;wb +^z;s_c_3zKR~2"nNn.&f&~^2Ko'G77w7G'?s3kKzʂnbR2"*{SpX  ։9WفAz^[/~.GZ+J(Vf&&O_;C3B* R[c{jrZ.RB(HF&3g)WWWGO3ZNr2r[2nc^‚'>J&.Nf#.ƃ;N~o.z;+/SK;?rOC# ?ꏂKB~K2.*2.J k{/Sn" +o+k'"{&j +[2./ں.r++k sC/2cB3+?{?'[ror*;ZOSo&:sss.kzz滺"r2{>;>R s?K^Z.NBzsΏ{#bjSs RrBs/[R:Z/#n:{~bb^ς~..O>#R3SR¿fR+#B&.. f"cn'#^/^n2;+N~2nb?Æk.gGk//3:6NZC"bs&Jr.cZ2g_FϾONN3';Rbb.jz +brKSrs*'r_SWn C2K'" F)[#+?:7*sR袟RSo&:_GnbggVNO +g/s/2 r&?bg(h7ț6?g6Gf/)Z&6#"fO8f_f)w)>J2O>77bOhocW2c(+6_BWOSbHvNƏf&)z)/z7N>'&b)GcR.{#&&k[kǂ_&WK+*b?FVf·&&n3^_#S&g3.6o^bGN'K3.2S^ڳsS//f:>.Bs_#o3?. ;κzS[Scj / +{'S#S.Zn:/*{>jʋn3z * +K3z z#c + *KR. rN +/rJj"R:ںʚ*JJ*s3Z*/jzzoZC:: +#kjʋzzkzR."R>rRrCO''gg_''*+B.ZnnrzN(fFvǷw)iGg?skkzRΞ>.΂jk3s3[*3SK+{C/ڞV((h?7)iWg'g[ B....BZ"N*.ʋ+J_ok8VV8Ȗ2gW)WWyy)_;2br:;&*so:nSo3o_X ؈>_iiY9S/n:&^/[RC:bJb.'S[2﷿70p` 99QQ!wg(ظF^W_wrnR;{S_'iv,Lp)y) aq-Q))gF x(8xvWwO)99)sSFbSssO's_<蘬h7 yYQ9y9'h 8VVH&;Si_Cz.k/gCÏs.:'so֌,&@p&)GwQAYs6X cjyb)~FC'.{_f>;fc_s8ؿW/9q1ٟF.x`fɉ_ǚ^#O/sC2OGRZoRkKb&cL w?VwqAaAS&"*6XV&jw 7Ƿ'_kkb_s"+>^*Z lv`H@F!w:>__)w˿O>2kNck2 +c2:&^ @('3'yٙyY 'j>N +GwggOwj+(nNrfrN~ +^(22_)wWiW'3+ss"gj7nf& RNNcz."C~r?s/ock_?sg7bgO+j㏻rכk.{VR&n:KzNs#_nJ Cc3j_c玿cof3~#&#. +_v^Zrcj~Æ2o~O+RC;G)C ;k3So' +sg/~ۂ +R;nN3k.:ʇc۶?JBBRNKk7+Crfڋbcnr R"^/&?ov:NRb:Rz2S3O +{2kZ_r'KOjnssjj"R* +n +^ +{.Kk[S_;sR.r;R^ʳ +^k" s.BZnwV^Ͼs'RcgrRkC?[;JsCrSg^zǣb&;zO*r>+Jg'g&*B +2W:wsCڊ*s{2 &NNs_֗:3Z/s{cS'ßZfjWOV7^'{(>6zk[&s.7(F#*b7f~B_rf; nn_F[/SR/sb6+R&n' sk>·^h6.J{S##_g''C +z*J*jk +j:zBZ*J ++*j*kk+ ++kʊk+K{{ Kj ;KK *+k: + +*;r;Ë*zK+*kjJ*+k ++kjjj*:*:*ʋk*kj*kKjj*k*+k+*+kj++*K+*++j++*Jkk+;+kkJjkk +** ++k+k+j++k** *+kk* + *****jkkj+*j++++***++*k*kk++++++k+kk*+kk +**++** +jk*******+*jjk j+ *+**jjj*+**+j*j+j*+**+**+kkk**+; + +j*+************************************************************************************************************************Jj ** +j+j +j+j+*j**++**J +**j*Kk*+J +Jj:+c ++ۊJ {ˊK@w[:ScO +o[c.s_{*RRrz.z:zZZB2+kr[k#o{zO)Wg*:n&jjn +SsB&&k*nJ?Cj +K3_gLJ?3:r:3C۳C#3 +*h ,s;C# ڂ +Ks_'_*o7W` 9mm1g ")/Yhh&> j CCcc[o'_zOW` !X(IiB _ K8hr'WVw{B2cg_oz.+O'7gOLLYmX Fi +cGyIh)RVH^G B'JOO;~lLl͑aXGG?ۏGVV W&hh~NƆ'W)fNswW7:?# +z3g,<̌fa )x)ic9WnV{wwvcKR؆YiZF([gG.Zo /LA-G`fiW?Gy_{G7JVV(΃g?ϊC_os*Z?++/OO&,0Af( 9nF' z&FKZjGGNZgco'S3ks , ./Grw!Gz{3^>'rkF(f‹σKg'?skn:2z,L@i;o {&ky7gi)gnbKnn2~ +C:cS:KCS{S?S[ 3{ZB X֖hsGWWWǷO;jBfNRc?˃O//_o/o{*j #;( Ȗ(jc"cw))WW7Gg_' +f^FFf~*3kcoos/C"룳nx(ooiW))773[::^FvVhβ":CSSS??O?'?scsÃsk.^vH肻kwWiiWWG7sj">&fVvFfR2co'?O?_?/ornHx(F'GW)77Gg?/ ~&66J{cCOggOOOO/c{2n(((ֈJr/G i GggG_?OO3crFF6+SoO_'OoC *2rr22.^(V(ZoGwiɉ7g'OsCKk.&FƆf&f>zχ''??_c;+K:b.R.R.VV6&wWii)w7_?ˊ2^&fff&^^NZcs?__'gϿsZz:BBrRnn>^v6fjS_Wii)WG'?S꺚2.>&&^Ύ.R2"*+ +#oO_?scz"rhF?RG;"fֈhv6^ڿ7Wii 'o>&fff+gs'7β_i?_{NZ;/Sh06s YYS:jfgGW'[h(fk/jRrKg'gKN"";S/3Kbr `F7 YI_[rnwi)GʾƖ&n3/.&@h9IgS)kfK_ +?#H8@l:)1Yif(G !kR8V6.''_/&&f&r:/*(h/ZBoo/o#C?#x@N_!yI&~"oiW?{2FFRk*.Z*&J3C j /_o/#/N6LL7@(a/JnHcO9 W_^h(Gk*b^C___o fRg3kÊÛososcC+z ^&hV86FR/GWW7wOO__g?{>NS*fw[/RsCs[*"2f px׉!i)c2R.ZW)7O#F&rK + +2RBZcCos3[K* +ʢ22NNb[; so3sJKcb*;*B&hH֞n_G'?__g_;"n>6&FNcJ[K+3SS//33sr> (8['Wr#B_)OiiR^FF&2.ڋ**CosS3ۛ jJ"bB"+J*k˛#ۛ{K.B [SSC2j/B#ڢs+bJ"JbBRr22rZ{So?SsC+j +b2.Ύ..2B ++K[;ósSSc n&6hvNFROO_7GG''o[+ +RN>^&&~NNnr + +[#3SSo/3{*ʚzZb"bR.:"kKc##[{;*z2J"Zb + +j{; K{K * + +j:"bb2Nr"z;3O_g'__oZnξ>~~>>.NBZ +2bB+;/OOOS3; +r~.R"k{c3[3CC;Zz22222.vFZns ?o_cCcB".Ύ.RN.rbZz +j+k;{[#K kjzZ +zjJ+*;k *k +:j+jk+;{{;[cC333cC{+:ZZ2222r"B"kk{;{kkk {Kk KˋKKK +Kkk: +** +:zzjZ:jJˋ j*;K*jkkkkJJj*kKk ;+jK kK{{ +J +J"Zzb:z++:ۋ*k# j+;{;+k+ *j: +++k k +:+;kK**+j*+ +++ + +꺚 {;+k˻ ***+ ++ + +jj+++* + ++j+++kˊkKkK;{ +jk"**zk*:+kk;K+kjj**k j+* +Kˋ+ + **k+++ˋk +j +** +;z+* +{{ *+k+{kj +**j +* j +* + +z +k* **k *j+++k++***k;*++j:zJ*k+jʺj++Kˋ*ˋk + ++*:*j*Kj + ˛kj++ + +kk++* +JJJ*K*jkkk *Jjkkk:Jj+ + +++ +;KJ*K{;*k+******************************************************************************* +z:*++kkk K kj +j+* +jj + +********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************* \ No newline at end of file diff --git a/tones_american/cause_13_loop.isdn b/tones_american/cause_13_loop.isdn new file mode 100644 index 0000000..72c8556 --- /dev/null +++ b/tones_american/cause_13_loop.isdn @@ -0,0 +1,146 @@ +*d}EьDH$]arH XWIiG''_77׉ h$\VA7 +i.Hh I7w!hΆ@.Fh֣97)&G#) c.W9t,p@Mka ng!wR_Xڶh6w +J'Z__3O#J?̆~zVVA 'Rgkx`vw!aZ`(fHvN./f[WI G[2+9$\lIA'8(_nG!1AFh B_WWg +fF'37iiWkK''_$\A y)W W OH8[IgBRˊBn_G))'i蜜\I!aaWWA w3 ɁYI)w 9gV ngw7N&Jg'gG)))i< a)IwyhH!AwSC+(`Vɹ)G'O#cc"RWg< `9I_'> _^Ff6vvHXX(j9y)b~:_) lL| >)aqa!7_R`n ((HHH9!_J&6)IYYiV켌P1a7wS11wJv((ƛIW?> __ggVp aa9/J::{RƖv&{Yfh(枎)j 3W쬐(zY13VRF.&ֈVyaqY'&XxHZrg_V8‡)WJb:ڲ&nzsLJ_sJR>B.:s+n> +C_?O???OO?SCc3Kں2F8`XoIYk^NK;W)/6V3_g.&β'W)WG'O#8@Y!h&:_w II)_VH8hOwǟ>^&^"C_w7_ێ.K>>?sk:ʚk;JJj;c{*B"2jSs; +Zz2rrbn~n?'?*ZRRRB*O_G7 zjG,P`yC8cw)W IxX賉!! xHR3/SC{O'sVȈ9v(CK /?n3g7GO:^V.7' +r~S>oCsjzj#ck** 3c#* +JZj*c*jb¢: J":J{n.nB:K3SosS/#+j"zz.nn~FgwSB憎ɹZ"/oS##C;z~Ȑ, +a9.8Xx>Wɉ'{g9 oN(rR~/.&riGo7gj.b{,9--y IwIYxiYI(H.*r&&3j{?7w7/3O7bncFlRa1' gw)iYYYǾ((&3fFsko?#3W[+jRn/s ɭmaxngII!I[HVO9!Y7nH(~&6 RFh6i9fɹ)b:[.wa!I|$,m=v,N A9?)h`XyI(x(gGoHf3W_^FǹI~(vW9i"BS7k.2'` )PPИɱI CgəIs8NORF*K>&nG'.Rgw_?'3Ȁ,9q`Y)yvnAYW8'W/( X#( W;&fiW/_b;_))W$1XFwI'7VvǟJRG⃇Ws''g'0\-+r81qɢFgW3>r/W(r[kzr##J7?+GGo/'ψL\̈a1rg_V(1!{g7'&2'vh(.Nˏ +"O_oOss? Pn׆I^Z)WiWW)sC +>6Fnr>B"ZJ//3/?gn8fb?/S_W W_7)WG_'go#N&~ ;kZ?g/cOG'/V`(x8H8JˎrI '__+Ɩ6^f."C''SϟG__K VV8xxB&iW_W 's_7R".6Vv^~R{S?o_+HXV>;Iiiw)WgZrJ6FF&~ +?OsOSF8 XvvKB I9i)wG'?oC^憶66ff{K[s''_{Sˊ::rvv6(&{[_))חWG' +RN^&&^>NRz3sC[ۻ[#+r2bR2BBZںj ʋ/oS/3C33s +JJj +z +2R2b:zbzj +:Z:ʊ +j;*z;Kjjkkkk; **;; zzJ: jk +kJjj ++{Kjjjz:;:::j{j+***+* +**OsF2sozks[ZJRRBK.";Jó{3czjJ22n +Cb/s +RjobK+sۃjrr:rJ껳*K?s[[:;/S[3 +λoS*[Co sS&2'O/w#RIg? +VZk#sw/&zsZ&CN_G3oIYjzwۏdžV"7FV''2Wi)))G__G@Vv9f*IF#_' +GN8?y )6iVS +wfX3w9/2Ik>.6Z3׷(9*coRa'XOWNww #'NWf(~Vi3)8^h&WyVI2CFh_ٺci:(h?>)OvgsG(~fXf)8?r) gNn/Fz~hng +V fhg6ֹ?Z8'v6*ȋך&#^.N^z_G"SSR29 'fZ^'s[g_jgHF_[i_:"{rfscOh."׆Co2^_j _~ +^v^?.S^SR+No ?[S?o[&22cΆ +Z2 +Ko?b*2r:jO +2;K"j#'?sj¾:;,Vc(wI/i9G^B:Fs˺Kb7F)YYl|6YawR.O./w/S_#OFWi7 S:'_sg_Giܼ|IQ-wi9y/86 OfBi y'#?:6`ny'7c.λ'gCii.$ܐ Bamqig(VkZW I/g +N֖F^SSOos?'_'7)W| x!-A9IF&)i)ΆHv6GwgcCK_S'_Gw ,@x8qAٹ!FFZ׉ϛ(Vfb'o_?*RJ>R +j:.J{CB>F^^ffn_G7g''O :Z₂"J:.rn2 + +J +;#33sk* ** + + ;j.r +J +KCsSϏOOc{ښz"rBZں +z:jk** k+ J ;ꚺ*JZz +: +j+KK#Ë Kj+jJ + +j:ښJ +J"k++j늺 +jj+K*** ++*kjKj* + [#k;+:J++*K jkj +ʺjk *{ +JJ +k*kK+* K ںJj* +*kk+** + +ʊꊋk; +* + +j+ j;˻+jJ +:*+* { * + +: + +j Kk*j++kJ닻+ +JJkj+*+* + k*+ +*k*k+j+K*jJ +k k*J** +**** ;Kkjj*k** +*+++++k* ++kjj+ +jk* +*jjkj k*jjk+*닋+*+jʊ+k+j+k+++jk+**j*+*jkjkˋkk****++******************************************g96z62Vr kϏi"/8__z^WÈvSkFg&WFF)f^OȉS3n~gS&'F +SNRVgrs/2~sJG֗z#?("nnwf~Wg:bj_~?ƞ/C'&nC..vks.&r[F'~_/K&r[;~;zsK#Cf_[B;Sjz.B2)˖*O2CC* +#?j^cSr.c.v?..6"O#&~_s/K^2zϿ?놎;Ff_[[BVvWJ'C63_ZRsfNS&^.oG3~coZ{j[{s2nOzjK'ζNrs;?3zz/ +;Rgo:/n΂S +2J?ZZoJbZ[/ +/S[O/o΢?CBn{ZrϷo6gn۞B;b +3#+Z2J+ˊÊSzR2?s?7_{*J˲~zKS.f>ڋS>J k6VƆ)I9yIiϋ*~R..:c +Sۺ +&6Ɔ.&R2ZorXXhhh(6YaAaYiZ&8hfo''7's"JRR2{X ``O)1Aay 7R88f?)W[&Nf~*k3xX8  A11a9 )g hHHȈ6gG)W>fVf[_hxx@ +11Aaa)?8Xxhv_GWW)W_rR6nf>2 /_@x('!AWwg{&(ȸxH3))W7g3 +&^J?ָ.XX @x(V!Y1!Y)'ZB興8V6&n/_)Ww''?[zn^;*ˏ?3RhȖH胇Wa!A!Y)K2^(((H8ȈfNOg'c;jR3nN2J*RVhxhvhF?Wy!Yy9iwgsj~Fv(H6(VVNR?wǟ >2fz*~r*/{&vȈI!!YyI)_BƆhh(ff/Z_gSC #or22?3F>88ȶ9!!Y!I'3h(6&Jo's/cr+#R3*K/C'K xSiY!AYyIJVhȈVV^"rSWg#r{? isO/2H00p0 8ȏi9qiKV888FÇGosZk*£2OoSS냷ʊ;P,0XHaaa11!W/>8 rgb&Hh&+Sg׷Ooj? cC?Ox@VOYA1A19/ȈȘ&/w) I^hF2wiwg~澊K')7l  A!9'V `h&n/!)'{kh(NRR)y7s"ƶ&_goۏ igkf.krRbo'3s:*(<<'!Ya1q1 xhf&s)y)rΆ8 XhW 7C;3ckR& sO_B_ L 0& +hx "B_yiZXV! /6^GB6fJ'{[3b>x0`h) Y'چF^kkKCϲ6fNRgr.2 oC+n.:2Rnr  j* j2>&^;CS/___?#+c{j22b+j.r +JJ;C{j*kk:;;K j +: +j +j+ {K kKK +:j[Kk { :Jʚ +*k*Jj*k { *j:z:Jzz;#{+Z*:+; *+kK *+kjʊk˻ *ʺ:zJ*+*+˻; +*++*Jz+;[[;JkkjzzJj*j+k+ K j:J+ +++˻K+ꊊj++k+*K++K*"J* k** +::+k kk*+*+++ʺ +*k +++jj*kk*j*k+**++k+jsz +;J++KKj +J*+j* +*j*k+jj k+ Kjj+ k* +++k+ +*ꊊjj*+k k**k kJJ ++ Kˋ*kk +ʺb +Z[3 +2.2 {۳[>_+.^ji"FSʳ#krRfN'_b?C+zRok.sۻJzK[{ښ{;*zZjB++2r3kS_Cj;{[r~n/sB>+7o?k^&g3Fv?>^G_r'inS +B ۏzrz3'Ξz"{s3.ꏛj韛F6o'+oz +N^{'KrvˇRr"J;/ +r2{ÿ2Kr2rϿskZNS# KrkK?SJNj/sSSS;kjck~r.[/;ˊO~ǟ^F[>[;S3{n Ss/z.# ++kn cNC[+kOC +JZ+'SzbbR:k[[SS2*[ +Z#OkjZbrk"*nB{3c*z[".bsrrksOR22*:^o:RRS?''sB^^r;#/sk Z"ʻc;KkCSO>3kb#;Kc+rr" K.3{RN.+kbRB//+Bj?/[닛sS3**kKj:J{".{ʎvnr"(h(j'))K37 IiGzz +ϏsCnN~*Ci3L-˖N3)O*sWiF +k>&n.ڊ[3cK*z*[soO/3 +j+{[c#6@llnQQF(NחGJi3f־/vVN2)?zgG?zʂ/?Zlj˳ *O'_?C#/óK +ks3[:+gg6ll0Q'n i')(Hh6'736h66bKo_ϣ/c3S kcó[b. l,81 8ngWg_oIY9)CHH(3G_S&Bz6VCW) ŽfK7;*;{#__ ,ln!-Ys{cBga!wb&J#ˢ~Nz?/v':j{?k+_σ::;[jcsK +"kr0`nA1 3s/NKYirfv;7cƖ(F> +jO{2&b?ccCK/_o;_;FXl@։ayɉgK8CYYI)S&H::#rV(vnFR Gf"㇟>j*so3&VHXXHwIy9 )G?#.f i)nv6&R;c{ +R>FhHO Ss?ZB#'g+/*J"j@YIY'+(΢I2&hv?jf^3?kOC; +//O3jkjk #C3;JC* `@Vۉ9yI2*﷉Ig Z~Fvvn +Zʋ +n^^>o7)gw/KzKsCc;nB2"ȘX)9irj[_w)G3bFN2*#ZRF.vF'iW?j3oښsjh`0)2R3i))7g{FƶF&rK*Rn.n"/ϏCo3/Sj*۳cۛ*"Kz R6Hx 8)iIwosSCO7GGg_OS6"2ZzۢzJz;CKoo3k{j +JK;x z&/'IWKgG*iwRʞ^>"Rr.&^K?Os[[##[ss;;zbRRzR+"2 vhFR?i'3G?swꃻ[#Sc:r.n 2z+Zb"*" +bn++kc#Fkg_[s?SK?{c3+ j*jjbBzښR22bKZRBN.B{j+**j;#kz**br2SsO/O?/3#k;;KjZ"²rRR..nš"ˣK:{{* + j +K{### + +{3sSs[+**j˻ ++j ++ +rk:Z2ں +ˊ: {K++K+j++kjbzʻ;+J +kkk;{;{ k {;K++kkk+* +ZJ +: + +:JK kjj J*+;* +j+JJ{ +kj˻K*j +jk*j +*kk+K; ++;;k *J:+* +++*jjj +**+ +*k + ++ *j *˻*+kk++ ˋj:*+ +j닋k+kk+j +* +*k+***+*ʊ+k k++k**+ k* +*ꊊ*++*jj+*k+j+kk*+k************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************ \ No newline at end of file diff --git a/tones_american/cause_14_loop.isdn b/tones_american/cause_14_loop.isdn new file mode 100644 index 0000000..724cc3f --- /dev/null +++ b/tones_american/cause_14_loop.isdn @@ -0,0 +1,135 @@ +*d}EьDH$]a  + ⻛ۢ3{ʻ+ZJ*k +k˻ KʻK{+k:K+o"jJ +Jj:jBC:*":bZ s²2 Bz 6CחGsZ&"~>2&w./o^bj.F׳ΊKn6+s3ro.;~2ONnbO^nr;Z;VGo#vf6?S((sz:WWfB^ k).Rw^ o&gG* V)[s2Ά(˶cΗ& c"6gZG3kv.*.WR(_W"_h_ofzvf+cg6N_^&N;KrOvof[jc:3:6^/6[n_jBwb*j_:"^zC{grOr22˃+JR#k:ccZcK+^J2 +:2bK/Js"zbSs +3k/2'?#R +jx!qYigs6>"Sc)99))NnJO"vDH8A-q Y/ HV(fIIiw HۇiG?ϟkzZ;c3"hȀr!!9ȸhfFfSi3'RF: +cϏc"ˊJBN.r 8VVFֈ +#GGi)w'_cKkrnnR.nNzj*C/osC#k {B^vV6fR C77w7GoSC:2nn^>z +S3/[#{Jr&FF;#gGgg_O/sb2>>+K{cc#;;KkjJbnN.R2 + 3/?OoϏ+bRRRrr2bz:Zz +ʊ*kˋ{{; k +:J +j +:k ;[3ۛ{ʊj+ꊊ*jzJ ++*j ++k++ kˋkjjjk+kkK+*k*+j +j**+ ˋkk*꺊**+j+*++++* + + +*jj+kk+++kjkk++***jjj +***k++k ˋk+j *j**k+jjj + +j;#K #r/{[{*6OsO#+Z~n+R3SyHg/n粣/~NjWjF&&Vv.> +..~VGh^fxɈWVV'g +Ɇn"*~6{F&xw"/2ngh+~i貊Ήf3*si i?a.#oGv^S_W_NGƇhIɎ(wFG(h8 1IG/hiX瀁/&8H!;"7X^ H0.&! YRyVY)(Y)bRo׀GR'7;)i +X`1h*'i-`x~:ȱ'Fy` hpih_AA`X8F&Yn F)((k'9pi_nVi7xiQR APG ؎1@yVym9 k'Y@іAvg:Viw!rȀcvַ^ѐq`98.lj?I/S;yI@j'{ʊiOJ~.R"b+N3'N7kfۺ;;~#7sOrjRK3BR뎏ZbjˊR" #3bzSBj:sS;jkK#*{kZ +ˋcڃ K+jKJ +*KzKk{ʋ +:* ; k:*: cKZ {*;*{Jkk Z ˚j"Z۲"» :* +zj++ +K** +ˋkb#: jkk * + +zZ[J +*jj*k:JJ;z" +*:K+{j  :+ +J{J +j +*j+*kk + ꋊ +{+kzkn(^ )3C?n2~^ +*s˚Za9)VHhVחOSrfBú> +j/sJ +[c [RKc:;K ;j*[X3qbC{'6)3ۋ2jk68XI '/;Zxwizf[?wG.(_;S##2Fo_sh!Ks׿(8zS?(H nj~ci;fi)FsS?'Ǿ#c[3Ο+*RsR Z^FRNO^{'R.*('r_ +^/rڏ/*&[cz;3(g+fBnRN#jO^&//rg>gھ#2s /"bgϿ2kڊ[S"RO{C.2zc?:k3˃j*WS/o&ߏS~2?ξj'S{2J/:/›3.no?kZ{c/+Kڏ[2C:B:boO:bSz#o>;{job.oR?*rS>R:/{n[*CCB/+Z[3.c""oSbKRNcB ?n+zZ ++Z;SJ+ZKk{ [S22?r*[;#2zN^~Nnfv +)wGG7ww[3gG&jC iL431ѱaW( cgIi(^b')?2./J{s'g'Jw_ib$|` 9yyh ى7G9Wh8Fvg/*~ +;{oO7wCki7idH-OiGg`0)bX(oin^s>vƢg*kg3KoO'_Gd@-GÉg'H`pbq1WcN_x f f"Fvh6"I2/ Z/g/oo +?HddkmhŸO^0@pHn +?fxvAshBFV6w)rrK;~O/gG)Ir`MM-:*2n@!ABfx`Ɂ1/^h Insۺ>~総+w)'";H$$/mmY2,@w173> `v aɇ2^hVn7w3"s_KjsG'oi"N|yGWY_p^a1)I/X6ɹ7' +(/ggGg':&'O[ #'gO_$imAٷАxɉaa˘(*/y9V6`Vr)_;FF^'G O?7 \Q鷉Qo ,xSbWa[ֆrv(G&k &8HgGKOGGf^;_OOGc.$L i_ 1 &^RhsaqA8 HkiW'hhv~/gSK:{3j_'_?/IWs2ol 9)S=aVHk6ay{F־HG7_bO{?OWI烺P/GOGO_'/ß.d<0R!ww_ȷ W_Wa)ֆ^88?痉g~z;c/'ObbSgF^ّ-1_ؘ[G')yYVv6hhH2__G22R{3{Ksoo&00xVYaY W~/sjg? +.~NNfr##*kO/K k:ˣK/h (VVyy9 72RR*N^fkڻ# {c;j3s#OOn@@ (VI9bvhG3R&RS//RンsSsϿ?O_v@,p6q ihx8"痉 (hg.&&+33/G/`L较f'!--1_θ Iى׷əyF`xȎiYIw2FV6s_''wW)SJ7$_9-VO! 7ׇ6X6nNv^Gyy*Bkb^7''7z:Gwh|䜰j)Y!Qmh8>((ÙA3_s~`(Cs i{#JnkǷ??#*/'id$~W!ّm1*aW"XXSw +.G*w/Ko'g:jO77)Glkyq-K@և)aIrVV^^h_Igk~hfy ):K3GWWw') dCA1ɘ)_1A Vfvywf^r` (WiLJs>f __?'Gg'g_':,!)A00@~cWyv֖f_y J& _s7W?v_s_WWg̸AY1PpCqXvaaC2^8 ɹI^6V6ng_g+/s +kCgidLVy)zYyPbho1)8((kA!gs`@w))xZrv W?S*^2VhFoWGohg)3Vii)g__S)Wi/(ϑO)!LWQMgf 7A 9Yo`kCJ/a:hVH8)!W'?nHH_iI7~h^&W/r.>(G_/_{^'&_([Wfg+hg.jg:^2>f_Ks{*sc o"j jbk/㻢2rBr.nn6fC?_'_[2r;O'b +J 3oo&n68xƋ)yi6^?iIG'K&(Vr3'sRv3i_'? I7#ʶpx!G_wGFH'!iNV7WLJhhG9h)C"IW)~#{so:' 8&vR8r'陁1hV8aGsOFn#>Vh"'G))^v^hɁV)ws@&WO^i )r&"(6?s "nJ~K+zc+b /ۻsSso[+"+:kkB+kwSiq-)ȬYa&HayG׎ p@b!V:.hW#Gj ?iVd`n7MAxx90_A)a-8HxH'a!'w' ϙAab^ksg7/k3zJsBl )^!Q&oW(Y9Iy)3((f2+c[~&jSZo[SoC˻r:jzbB" +2&^>~Rco/OGG_''[;K2"^>b:+c3/cS#ˋCC"j*2rR2J +2jB"++j:kk*SC + Cs +k##˻k*j:j +Kr::bkk*˛[ZkK*Z{K[CJ k {{+ +*z JK :*K+ +j:+j {j+z+ + + Kjj JkJ +*k*K; :*K+[ۋ + ++ZZ{J:*; +k* +jj +k kJjꊋKKK*J**Kj + j +*z{K++*j:+;K+jJjʊ+ jjk˚+ KkK{k+k* +*j;K +zBKZK[{Z*J k/CS[âJ/#3jrOR2*/2o~"/ ?3~jڲBr:bk3[CjÚ~ƟV7o&ZS"n*Z#.:{F~^b/~~/*K["^Kʿ#ViRK''sF3*gR*ow2"?SǾ'(KZoÿK +>&v^#g6^sBs{#OGkSjz z˲bogSg'gJƇ'Bw~_fWj?Fh9)zr/KSScFWNR VwgvKV黊{Swn_^6^K^z'6 +?Fo_/'ʆ_f÷k/'"SF3/6.γW'F_j_v֟/'+Wh{.^iNG'_R^_&O)^&S.WFBi" +FB(wOgr7/sg +fVO^_2^nvf*zׇ^sϚw~?'kskg)[bo'w_6>"fCg'Z?BNC;/S&o^ +*cKnh ^{?RS2/grB&r/')_F:)3NOSW&뚈O3 j&{n7Fiosn?oB"Ƈ>?)foRo.^i/VZf*^RNs63rn2nZ;{^r'B~^^'jC:gc/zKRbcCBʏk~⾋/[;B3/b_*+K{ Zrz"r/.s#[2 ۟2/#3 +r2'jb&zkJJ+?K{zrNzrk*+[k#Cc[#jJs[3"˚;:+2+RZRn"JK[Ossso/OSsCScsj:::+OO((HVJgk GW7Gǿ{zZffv6&~kjn2炳sgoOo z;j;?kf&h8H3rgIw WW))w777?s+z^f6F&nbJ*SLJO7Oc:"z >V`(X(&.7ɹ)WW)77GG_?:.fvF~:ƒOSO''ßSkZzBKC3ʾȘ(XÎSI)7Gg?+Z&&FvF6&&k* +*2J_LJg?S"+ʣcc28HVV8VhfSRʇ'iw)GgGg_?s;*.&^66.2Zk{j*k[+kcSß*C*J"Rʊ::kkó.hvv(^C:)G7g_gsKZ2f^~Bk no_'SKS2.2k:k[vF6+"J_G_)7GW'SO_?S[sz2~&f&~~:j{S/SoOSSsS#늋ZRr.22Z +*k{K;j::BZJ;SSsS/Ss33{zzrrR2b²ZJ kKK;K J2^&f&^RZ +g__?oûrnN>>NnRRb +K;#cC3sc;*;;+z:Z"z뻻;[#[c#;{{ K kJʺ"jjJk*Jj jJJkKK;kjˋ +Z Kjz**j+!wr^bz2jssK++ +{ +»B2:sJkK:+{bkKj+j KZ#Z: +.Z3^ /?:ZkbkK[jg'.RssrZ:+{O3*jO_gg."/r"+c&*sSw6gC^O[jN>NSN +>2'~r*;K*&&x.Sr?[Z">j/3b3Êfo +[ƇszZ.'Sj*b?k~IxiR#7&6~.FsZ[{F:oF^.>_.r *OϲR_.;K +k3>[2&gso:*'2&';/fGڋ.rbf + gˣj^ϖ2k";7*[v{S^RΗ{^OO_6kNK :Z C^Osnhjr3^ϛnzns2c+cϲ2;SK[{kBcjkrbrCSn3. +RzJ +~n;:/Zs:OCS kn¢[S R{z"_R3*2"3kOCsK;r +jJ 2rS[;+jÂ#Jr:zjbú*k:+ +C.cJ#jcj2ۋJRc+ +j[+k z2cKK*J*j +kk;Kj+ {jb#Jc:+: +;[Bjںb*#Z " 2Bjbc :jz[3J +{[+ښz;+k +bb;ˋj; +J+;{ [z*[{ʢB" +#+;k;ʊjKK +{;*k +" +#: + *Kk+{ڂ"+;k+j* J*KJ cc +++{K{;JJK***j +ZZ" +{J +Kˊ +kk +*+**k+ ˋk+ +j;kˊj;KJ:+;k+j: +*k++k*Jʊ +{K+**k* kˋjڢZK{z+***K**:+KkZJK+:jJ*[jZ닋jk+j: ++j + ++{ +J ;k * +j+ +J +*{*JjK{+ +J*+j+˻;+ +j*;{J" + k++ +ꊊ+kj +*+j+ KKjJjkk +Jjk ++ +k k+ +*+ k꺺Jj+k *jj+*kk*jj*k + + +ꋻk+*j +Jjk; +jjj***k *kkj +j*+*+*j***+*k+j +* K k**jj++ *j+j+k kj*늊+jjj*jj+*+********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************* \ No newline at end of file diff --git a/tones_american/cause_15_loop.isdn b/tones_american/cause_15_loop.isdn new file mode 100644 index 0000000..df86472 --- /dev/null +++ b/tones_american/cause_15_loop.isdn @@ -0,0 +1,215 @@ +*d}EьDH$]aRs:rRS?[Zg.ϣZ{R/~*z zB7'#S ^*O+CzZ^ +~RC+R_jior.#JCcRrS>rsSsrx!-r0&)XY7(V+^fGG.^s +S[R~bʏ*..ooZK/22K:JSRjkJ*KsSBIJhR9זq`I) siNLXv)YwR8xఀ+i!a!ZSx|P Saq1iV8))99WFF(8HvN:G)G_'_"Bڋ{J.>R:['f`HhgaaYyI>Vff~iJBXXɹ{#S.7y) Xրx^ yr`h3_O3hh(X惷))wW))7so/ [3;+K_) l+r&gmY ( nIy9Gw?V`XH^'Wi )GBrJKs7WWwL,FrgWa-Qa9FfFhhV>y韻ZJn(GggG7)wdzz>&c ; kK*Kx2׉YY 'jR^{__s +^^N.R>^f&b{/#ۻ?Zc.2Bz:z:BZjjBzKc; oSSS/{{; r2ZJzZZz +j+ +ښj +:zkk* + k +J+ B"J +k*k##k{;;ˋkʊzk**;; *zJz"b{c[ [jZʊ ++#;;kz* KK;{* +J*j:J*ˋk*j +*jJ +;K+k K*j + +J:jʊ +++k ; j +*j* +*j *+jJ ++ k{K kzJjj ;{; +:ʺ +jkˋ *j + +J*+ Kjj j ++* +j**kj +*jjj+k+jkKKkk*jjj +J*++*k +ʊk+*jj K +*kꊊjk*+**jjjJK* +jkK"^k!a1iHJw)fH.i7,7yiA9&6&OIy9yIPhY1"!i&8i׾&ff&+7Wzb66z {b:>No?#rSob#_s[^&~.f RVGiw" ")Rh>_iWVG IO^VHc[nF*)w_f&N*:b^c(r2&)WS2vh 2~~)NȈ8~Ii.>.j&fFvr*vR[7>"w:OGfv3N2S/[b^CǞ*^#&jOv#SO +b_3~vVvi)z*RF[gcN[J[c.fNc'R[J&fS[oK*Z2Ξ2g_*f? +>~ j))>b[ +ϟo2vvNgo* +KbN3#[++^Hr!))i?3G/&f>*3k+Zwܤ qq9O Wǎ:n"kOÊS3FS'cr+##/o_i |\!1QIK_'w'/&.#7G7/*^f/'CS Rj[z{SgW  `1Qmqr^'_Ofv +) )Wr>vh2iG;^K:OcbKcgZl Vw s6fh^wi f +^)6v^377 >)yl H-m)8(8''SkV(+Aa邈2o + f&#GGor +B 'gG3R0Cm x xhK>(v)AٟV&3g/V[GWw+z&>R"KSLJ77#r2I @<,MMOxg'V(G /W/F._S2K* __O"Z aB XHGrhiA1`؞7WjGg_RB+3 'G7+R#')y|0M98VW_vHjaq1g(VWfG{fZ 33S7Goɹ6qM FSGvXf-HkFNigc/_'O+3s i༜=-9h +2طQx`xKWyB^FNb/_s'wgi@fv7ɉ*&>?W)OI|l(AmIkǀP,mqj_. 0@؋!s6xZ)7o{/?G׌$mQY9S,p)I @>"rCiw(n'Ww/WgyV$$Qg7y N^R -19RvH`9)lj[6(J#2bI#l#MAIfR_()!wi)(FV'ow7W^F~.C''7)V<`@yaW((8HG_G9۞^^F#G'_g;2'̰VpayAW7:(H^[_9G3/n +>Bjj)_{2(, h'9!w rƶw Z:FƚNfO#k28`h8ǙA GO^F~B)WgW_ǟ~Nj&Ʋr +/S_[#& @8vHW'Oiayi?z^2>RS/GW/sJFf^.r"s:RZn&&nr֘V('W!!ɉnfJ7i)Go#^V(v^kG'S/V6+x֘Ig!Aw"N i)k^2JCgG7g2^&6h>b< Fo! ן + I`O )bnF.6'gJsw+Fff^ò @hrQaA!onɗ("OWW?2.Nnb# ZjoânncJ|pFXHma Fh'W/'/2gO?Bnk'/J²rz3#Lh`G!6YHi ə_o I㖶 r/)ʋ.n~ k'g. ;$\ ͍~YqvXG'zy!'Ii6kV0v‡'Y K +/#b)'2Wssr&&[3'$2`MI{1ajIVFJH/g7 kB.C/O'R.' ,8v8mM{1a`^ vy YVN&2r:G7S3Zf +O{k_ǟ[gJ2b3_g,<H((mas)9HHN7釺G)_j掚6VFs/C7_? k.:Jk:N+j+^zVv_YG 9)CꞞko:73KrrZS3KZn.z;zn~2b2JfFڛZsG_7?{_Sj+;.&kB#ʊrr 3#RJ.RNN[O[#^JB;kRJ3S_;3//_Ck j/o.ccs.+zZ ;cSOSۂ?SBoʏz/ ?b.K'_sg +'kJ&'oZn+'CbRNc:O'jϷj'~3Nr[C^+/~۲OSr2[SK62[^c^~B~2ƒS#2zfbRBk_O'jz/SRb>s'>_j[Fv:jb*/zCoz3)J3?Co&Rsvj_ +Nfgoss_#_oB_۞Ξ'v3.gǎ+*>nKR;Bz..JK~S{J&烛3>~g^/ZC:K?Bf2o_Gg'sۻ+RrR2r*kK*zzJ +k*k{*k +k*kk;K*+kkk kJJ +*jjj*j* +J ++ + ++**ˋ* {++j+jk+ j+ + + +K j +k +k+* +++j + *jj *J j+k+ +ʺ*K* +*K*j**+ +***j*kKjk jjkk+* + +k+ +:*j+ k+k+jj*++k*+++j + *+kjjk+j*++kj+ ***:k +***++********************************************************************************************************************************************************************************************N##J[+K+J* +j jJ:J + +ʊ*** ˻{jϣ#zzcbzB:*+ʂ ++b:*::V(ZG)_/rkrNzb_ Ccffǟ^&GcO +RB# [2 ۳k/3J/3ʢRS/3Jgo?~p0R)1Ay6hxV;o'iyiwcRRJ[GiW|6pNG1 qY[f&3wIw zrh(F.Gii)7gs;[3 L*켖Kqi1)CFVsj /jVvhh.c7i)W +NR SS3s;; k^hV6H8( wəI)W_Sjj>fR sOOo/cv6Hxvv*3Wi)I9 9W'g{ n^fJ#/3o3s3*;H8vFV/o)I IWWg?g zR~^>N~&rb*/?3C{Khhhx6:3*g9 I)gj*~^&^F~~^?o/3ֈH86v/3?WiiI9 iI W_ۺ¾&&&Ɔ~j3?/3;jVVhȸhƆsO)i9i )_jZbR^f&Nn2;S/SS+ZRvV(hhvfJG)iI i)WWOˢ&&&NnkÛ#C/+2~n>rڋ;sgG77w7GC.nN>^^rÛRO ^;oS 2f^fF^nB S_gGg/ۋ[:z2ښ2B2RrbrZ+* +{{j +*"N~憞FF~2Js'? g2K~((΢.fj [SSso?ooÛZj2NFF66._G)WGO3sroC^>ڞJN22κk3[[c/C3.6h興ʏg)i iWw'_s +RZz~nZBξNZ.BrڊSs ss++J(8h薆ŸWI99i7_{ +.rjnvVS;&n#zj''Cr;#oB3+.Bk{_BhX(lj99A1?S>6Nښ.&.fF^2k{ jc*/_Ͽ#OZpPx``yya1q9'_(hvR&n2&&2F^2__?.?*c8P ` ƿi!!91i(F.NO>־2 +^&RO_ϟg/cs:B£/CO0l0 @@h#W9AqA! W)Fh6fF.or&g2K.#W'?g7o/3+Jbl@`0pKW W)a!9I^hVFV(2k*bBJN&*r~.''G_'O"k/Oh쬸xPǏaQ!V6^~.:2{N&.Zʺ" +ggg_3kK k:3.l,BWAqY׷_6Hf~hcJ_?ΣS.'sχgg[/ rnS,nx&hhn_aI)f~^^n6^On +#/'O_gsS?K.N&C.&&/)yY!a?#2&vƶ(~^^[NS/{/?.3jf7~rRNJn^H(FN"χG99WGO +>.&&&&N^"2r*o///σkrrnnRN.N>~>~^". *'gGggg'_'[r^f&^NrCS/?oSK"b2.nNnnrrrz++{[#C3OOϏ3c[{+2.R.R.Rz +3cKk {{n:+2* ++ + +jjÛ[C[꺋"J+ *ZJ{Kk {K{{ K +k + ++ +zzz"ڢjkk* + ++k++*jk* {b3/o;*{:+z2j{nj +k*k[㳳3{[3[;Jb"J+ +j+Kk +j{ k+BKJ +ꂢ;F)vnF.?.#+ + ++s3C>> &2*CBBo:"v a(r 7fBr*"kg2zע>;r+ƻV3&f*ZN.hg>. 6˶7G6O +6F+FχhF(!6W*rK& 0!VKr(!6 VW9yA! iX791)WVw `YrJ +ovF#JKRo(S(s W)h&Vy '(S(7h/(W6wF?n()(G(v2)^W'FWjG+rv;?Bv^rW.{~^?>O{{^jJn" oǿo?OK_+/&kۂk3S" +JF|`vfYAQA'#XBJ~! w֘(8f鷷yi#B^h>;?_I痉g,$x0FIqQ!-qh^6@w?"ayW' HhVhNljiWr^&f>Z'_'_/'ZKW?pl`1AQ^X3N yϲ a+&26?j#n2wLHVCqWi-`H/OxHO9) a_&/h8>&ss^RJ['Js* +'K\l2x,`11i!hxZ7C7bH6*Sw76/RfS{ۂ;›_#__<(P!CnO(?(9YOFΆhN{vo)_6^c/C'so/K*7V,6끉V)G'3^^6VscI'G*6&VF΢Ngo'sKsz˃sj" rb"J+FnZo'w'oۃ3*RR#k:c*˺RR.*:J{*kJ +**{3:+kˋ:Jjj[{*J #{*zk[*b*kK{ +J + ++J KJc*k+j*jJ + K::kʻk ++Kk +kj*kJj+*+;jڎ:Rz +J:: kzZ+jKk+**j +kk+;**+ˊJKZJ +k{K +z*zjZ+Kj;kJ *jjj*JJ k*j+k+:kKk+++k +ʊ++*jjjj + + ;+ʺ J+ *J*{j;K**kkjzz*k**+:jk +k[ k++ + +* +j++**k++*+*++k+kkʊk+jkJ + +K+ +*k++k kʢZ:{Kj +kkj*+jʺʊ*++* + ++j+K*+ kkk+ + +*++ * +* +kj +*+k*jj+**** + ++ *k+*k**jk+*k* + ++k*++* +** +j+ˋj Kkʊ++ + +j*j*ꊊ+++k+j +*++**+**++***j* +kjj++*******************************************************************************************************************************************************************************************************************************6;'B/rZ{Brb:[cºxI^BznfJOF22"/R_?3o2"g{c +K닋"B+:/.22b;Cj".>n ["C?b+zzκ//kjJs+ +j+**z{+ +b [#c[oj[OCj[; bKB +r;ZJ;J˺kz[k +;Csjk +^"3:3;+C2 +jcJʣ{ZK Kbbs +K B[꺲 +: ++KK*{;zkck +;jbzBjjJʋzz:ŽBz*S?'''_SSs;*{j3 +;b;/V8`x0)qwGrh62)7gs:RF~Nr+3S3{ rR/Wi_B2s&^;.#zZzr{z +r>r^&zW73{{ rBjzn6rcJ2 +sr +zb*zJjz:+ +j*Zb>R*ʊkSooO??/SSsCkjJzZ2bBr"ڂZ:Z +Jzj*{[s/S3c[ + +zZbZbBZb:*jk;ۃCC3c#{+jʢ"Z"zz +ʊ +ʊ**j K KKKK kkk***k*j ++jJ +jjj kk k+*jjJ*k**++ +ʊ*j +ʺ*++ꋋ k+k+*jjk*+*j** k+++*j++**+닋+*+j +***+k+j +++***+* ˋ+**++*kk+jj +j**jk+*+***++*k++***********************************************************************************************************************************************************************************************************************************************************************IGZ wnk +KkB^Scjbj;Sr/ +j +SZ._RC'R3c23Osjf.K?C{G('rfw F# F)Sfz&{SnNo_C:_~[3#J+2'Zn*k./OnbO*b3^R?·~SN&{g+B.3b'& ;o"G"N;:goZ'*^3f)~'rBc)hn_26"o/nÆώ'gg&7+^F&j"^';/.;s~2>Kb:s*sώs_>2CS?>rC?BORk[:+n +/3[Z "cNJOsZ.?#^sn; + ss#njgZs[3>cj{nJJ[ڏ+*KsK'R+{nKnSK2{j+cR+S+{ jkbgJ{*_2z2'rjj3B;{b #."k":J2o.+czBs[+ : + +[oB +R +sCK#CscrJ*z.ZS :JB Z;O n#z/b{kZZj#/O+r* + # +#kCSϲ{JZ:cJJ{*B3cgzBvNjk:R +_7Z3#nJkʲb..rjsoCCSo +C^[znBsCK +3r*ór +ZzR.s3 +[;+[+ +okRRrn[3Ϗ* +K˚+KZzڂRj#"Bʳ{ J +J[{ +Zb"+#Z23 Z + +*[[K:# J{{+++ +JjJ ;kbJ {Ksr"b[{Bs+bJ#z[J {{;"rKZk#+;[ +*:jJ + ++ k{ˊ +{*Jz* +:ʻ+j+{;k Kz:*kJ:k* +j*Jjjz ; Jk K +j:+*K+kj+KK j*+:k+ +;;jںj**jjkKk*K k:J +kkjJ ;KJ ++:z +*jkK +**kkKʊ;K+j+kkk + +J* j:뻋k+k j*{ k*kk* +j + +ʊj*j +Kʊ*** * +Jk; *jj*++*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_american/cause_16_loop.isdn b/tones_american/cause_16_loop.isdn new file mode 100644 index 0000000..58dab63 --- /dev/null +++ b/tones_american/cause_16_loop.isdn @@ -0,0 +1,386 @@ +*d}EьDH$]aKC?g'g''O_''_f@8F@`0ˇWyiiGg^~V6&j3/G'IGFgVxF`0(b)Ya Y))WG翋 +f(H(2?C?G'GO'gWW 6\pv@췙a9cg! WiY;f8(([^SCoKg)s7)7Oo$<, imIظwN71iBƈ(: VVGG C_;w7WOCi)\49N-A,OYi'I9'HV&F:ǹ){vxxVc/__W3g4 ! !!9Έn/wjxrO sr_'_GC;G_)$Rc׉7GwGw7_'ˋ^f2N&kso3K3__ss/'fV؀&J.7WIiG7W/r>~^~NRrJ O_SoooHxV^(6>2鹹w)G'Ckff~Ύ>3{#_O?88(6VHXvRZ鉹))Ww33Nn.~~rkoOS?__'ϞxHVh؀R*b+iIii)))?#C3&~~NNNjg___S8V(V^jiy)WWW7'o*¾&^~&&k3oo''_Z((`XhJ?i9yI)WG##;&^BZ +sO_g'?So_g'{H h3y iiK*N^f^~&^.{;*'g'_/(V(ƎK_wI9Iɉi)ǟ:Bff枞NnJC/_{Rf(hȸ62wiIIɉ);Jn&f&f^n{/os;VhV6&R鉉 iiW7o +n>FNnR>&¢s_׷'O'7WOЬx()ayIiofϷiw[zr2ˏo';";7oGəzܤ̰Fs-AyI_(j7a!)r_;H2giGC**z/?7WWWBk{SK0vP@ 8AaYw{fhhf^rS_SSrrrbg_S*80X!Yفy#FVv~?O#3Z +kr OZjÊcZB 8H2slj y!YWn~v^F"2;sS3/{*KJK [Z{:#ZHh~^)Iy9GoK۾F^^FnRb+#{ K:B";k#Cc»"nh"g)WiII)7g3[ +>b>^NNr +Zj:"+**kc{#{C[b#2JJfFf枢C'Wii)_o">^~N>. +b:jKK[k#J:"k*js[^vv(vv&n7)IIi)w'n.f^.bkccj;{":""ZKjScz[+Z;k6&(Vh8V') 9 )G(ֆRK;Sc;z*rB"JSs k:ˋkcjJH88`8JaAYyCVv(6^rJϟ?S +Z2r.+['_3;{KsP XAa y3&~(v'oSZ/ +.:S?'wGϟ#{O`ƼL6JٹIYqa1'v6(V?+)Z_V^~2k/Gg3珲?0VLla1YIGNvh>Z/wi'7x"H(_/. )+ _'W ` gaAA1!gcV(JW鉉IWC(8h׉Ww>.r777  p P1a!&( >;) igFV(G W7{n&~Zs_)7G'|@0P#q!i2(j;i!ɟH`Hs))gs~RzK__gwiןsosOG,$&O_a! i &_sYyWN>Vh^˻_'wgK*:B +Sg_gGG/"sgw(8([fm7IΘ Bc a7Ɔ.^8hJsG'jR[g_b;') | (?h--a WWR; G97Fn&VbK'ʣj +3_'ú#+BNOW^,^+iǣy +R.'K7gBFfNj[zRrrz +#Os2 f>BR`rJNC׉#O' +oRRrRRJ"b3rB.3 ZJzJB*O:Zr**c :os sZsNZ{&r皋J*z^Ss >_zg/RkK +^;7z>#r +bR£[3> :?^ڊ32/zorN +Ϣ> +;;2":r"_nnobSKBB{;Zʺo2Nsk?.zCJ'SZ&JK{Z۾B2or2ϛK.c/S3r bbR K+b3nr/RRCbn{oNoo&ß+/J2ksJb{RJzkjrk**K+:*[jkˊ zj {jʋJK +;뺋K";*j+Kk:kK{k* +KK*Kښ*K{k: *j +j{ +: ++K*+{kj +j* *j+j*+*++* +*+k++kk+ **+ + +jj ++*J + 늊j++k* +J+kj**ˋjjj ++ +j kj + +kk*+ *jjjj+*k k*jj*++ * +zjK+ +kK +jk*jk +j +j + +++j*kk+k+*+ ʊ**************************************************************************************************************************************************************************************************************************************************************************_ .(I&i7NgsnFO+f/+3c3CJjvs>6q K3XhW>&/&3g;ǛSJCs_g.##/C;"OGWgO۟0$$l +/Q[7 iygF6&(#'N>GɹWWw &l$< kɍmYh(^hiA9'ish;# K'cbF## Jg7_7LJ_/)d< 9qѱ z3yANFv^SW)vfF^ן#O/7G?7W 4,1)yNPI!!9H 8F_iX8{׉W3Ɔ&S_gǷwwgϳ7\A y3kXVAG>VXf)y?2 XW'#R.+_o_W?ip\ 1_?0pq' +f22NRwY!)6.F8ʉ ..3_늿WioI=73)Q^F.GٙwJVچ()C˚C/ +rnC_9&$$<=yv/> a-qI*kBgfHhB&'i^JSS+//חOr d!M( hQ &H6.r_RFR?s*{O3??*"3w'L䜰́:VIQ梳;..yI.H^ΚvׇoSscOGW?*GGl$PMAg(Kx i(ny邸xFJ''sZ3S[ssS)蜤=m[h/NX-yn8V6;a^:"s;#[is" +V\<1Mm?6&3fa-!S(N(JYwB[nϿj_ϳ#)7|p A)`0@QaWbn3a7Nr&V)SRn_c2?_W'_G\PmAI)7"`px1a9_BH gy 7k[>(CZSs*Zi'<L`!!!YyHpaY!g ؈NOKGiK^*J +Gzo?7iW༜Ɂ91x6#g7A!Ȉhiy /NnFN +SSkOoCk[g_GWp9hXyy*X8h.G)W'SZ*o/O'?'Czgg ,/)1IN&>67iVֆrr'Cz?&^#?GWW#'',l^!qq!gG∸jGiRbn6&Jc{ +;O{Z>ncW/~,, (6WYi G^Z[+#'#.RrkSo; +KOJ;{k23rа xSw )'nnc3Co_bnr.2j3JZ:#{2&2&^R(f_)G7Go*[?kO c +~+.2nRZ2;nr;KښSszjj{J k{#;cC//Ss{k 2ZZBBrrb..닻 kkk#[ +kK +J;㛊2*K#Kk+z +; ʚBkj [J 8Wk˃3.^N._R36'KNwORgsf +*j[Gj~ ;{ʟgCK#ʃ(vƆywr/3S{6>G?.(_*bϲngֳKr6?Wo/փR.R{#b''j;k/~ZGʺ2o۞"..Jr۞zkBo&Ί_f"C_JKbB"ZsZ/[+2.+B?r{rS +n~*SSK#'n3 :z{+"z{S{;3zs.RbSbrs +#cjokJ +jR[R⋏jZZ/B cN*O ;njc˃k"*+"3 +rsrZz + +K:sc* +;Rz+:O2Kۢڎ?RBscbzCz~3C⎢Kk+.þnBS +SnzCzzco+k;;2zz3˻k2[3CNŠjK{z.'orRzCSʻS";* +"R;oZ.K[rsScBJ[J/ :zc3bj zjjj2+#J2.KC#kzڻ"3#Jzj"C +Z[{.ʣ; +ck.ZJk[* /3[cj+ڢ+Bۻ:/3"2 +; +zr2{ * +["2Zj+sk2*? +{˺ +c#RK[K KZRkJ +# 3sS+S˺c{SJJ#;:ꋻjK2j;ˢ*bzj +k>FfB#3)GG''S33{j{: ++rC*|X魭)aAIN 7Ƿ&ojωW"__fR ^3{{R&>R&p`xֶYiI 3k:C/_CRJ"vrg/oogN:/rnjr +n>nbnffgGGw'O#3{: RbroK*JK"RZnzZ+/拺^^ 3SOoʎoێ["GCSOk*gK[?{nsZ2 +2ʛƒ>n2 S/Zϣ3zz3G*_CGG +'R/NRNoC jw'gk&sr'rj~orNB^/w7k{[2 +b3GKok*^Bf."{2_R^~6oVZ>^~"*>2r3BB2C j—Rf3k{CS[G_'WO2Λ'b2&"''/{?O/hNNgV6.GvbRS[f~{f6ovgko6J>nNJ׶"bS:___G^ ^oK?k.k#f^jO/_O/?r +r Bgr&>.;3?__'g_?c +rNnnZ*{[[kK*"Z"ZZb"jk K K{kk**+j k;Kj*j* +* ++*+*k+*ˊkj +j+*J +*++k** +*jk*j++ +*jk+*j*kjk **j*jK**+***j+*+k*j +k+* k*j+K ++**k++j+k* ++k +j* jj*+jj+kk*jj+****+k*+* k+kj+****j*jj++**+**+j*+*++k**+kkkk+*+**+*k+***+k*j*jk+++***k**k++**+*+***+*++********************************************************************************************************************************************************************************************************************************* +&333Z;: +".:j:*oK2J'.S gG+oS.Nj ~~^zK3NsgJ'k.K_jcK3Rz2jss/Ϗs +:3//cK0 6^jy9YA!i>[3oiGWG_s_j6.o_g,? 8hȸ*? +9) 9 wWis_*:+Ύf666>.:[o?'LJGo3[[+K"&v(rG׉i i)'Orn^FvvVF&^ +3ggg_㛳BŽf6VhhVF.ZKi I i)WGgO3kr&fF6v6vv&B/_gg?_;K2VȈh3? iwg#NfFvv66nzO'gg'gO/o{Fh(ȸHx((/wIIii7[;6FVV&"z{3?_''gGg_Os; +*R(hV )iy i'# n66(R+oggS#ۻ +z"BvHH8Vn3_əIy iWLJ{+J6FvVֶ3___3;{kBBRN6(VƆ>{o) IɉɉWg Bf&>* 3o/sSs3cjBzR>.n~R.R +":+K۳[s?oó{j"Rr.R.B.n&XS(nמ'kS/*:j# +++" {jj + " {zKB+ZkrSRNkR*&f/VNR/+b&S&zzjOs.K_(^'wk2_2.J:no^?k+n""s6 +&/&Vwf/{6_Vih?h(Nyh.'#)fǚ۹`GH?fhHǟF^H!2aη^/cr'N+^:Kw37?x6+#7zv)>^WoǶbʶ!犷 7s@f`qQ !HsNIJ`F_V7&Fiș> (8x2GFCkRWF(yvb2ONǎ*_2g^CZ?zF?)Hia&J׿yovI+VnGX+׆y`(ሸ({~`3Y{'f29 Hn !^϶!FaLJYRa#@_* .&'v 0نNHIv yZ>i() )1ȶhOXx`ar'Gǘx'# [OsgiGfo^9iVf*V()H'V_ϳ_7K:s(;f+3GWI(sJ;2^h3~oc):ʖ:rw;ƞJgJ>On۳jKR{.2N +G^^#+o>">cB_c+z.R"33j +*b.S 2#SkʏcZN{3k#bC:kb;2# +r"";js# +c~&k+>N;z???o_/o[s'ںo3B{bR?os_Vtxaщm!邸F V!G: n X)hJJ*_~>^)_2 6t0h`|^qAGxw9hhWViCfxs(C2뺗J>jחi A Wi!Hy{8VkSS!3 vNf(^3Λ.Vk;gJ?n'3ipdPIWAAFS9X?#wI w&*fV&^'*^^.. +gsK Kks˟o?7:P`,Ka#WhhWwi#(fV&ks;S~JS7g__?OÛzj;S[_S_`K,lWayɗ^v+"(sWiG7^F&R~bSOFsv+/zggoKszC/?Kg'/x܃Ȍga/VOG^S9_W GBRF(hv6V^;k?z#n>ϊ'统_?";3.c;J/c'_" 3YWO涣GW)I/VV~[Kf[_RGO?C/;*{#37s.X)P` aO.ɇ7'&v(Vv^^Bγڛ#s?OO{[ +O[3" C@,Vx᷉ ! ))R ϗg_.VfF.*r(K˷[?O/Z#˃"{3OS + HÀ9y9W^7bri7i7_36V(V{/Îc>jg{'?_3OsRZ{+sZ*배VjVI?II WJr_'K>F6(fF:bcn B:S''Ooo[":Z; 3:z&~ S0 (>I'))ׇgzg'zW''G?F6fj{#2~z+/'OOCj+C +*fX(O&ljGww_'g/?B.^f~N2bzzjccS//OOs3{K*J:J +" ++R(hR3w7 )7_'s;*ŽΞfƶFF^^Z/Ïg??_ssۻB^f((Vh^#sw9i)iW7w'''oSCK +r~^ff&β.RJS sO'_O_'O㳃 +ڊBb2r~^8(ȈZ3_7I)w'33:.&^fFFƆ&NR" {cSS_'O_g_K3zB +zR^VhhFbS/_)Ww)WW'GOS##K>^^Ɔ^~ZB: +C3??___'?3ck+ڂZB>Fh((6f+#s)7 )WǷ_O#z".^^憆Ɔ^>+{C/o?ooo +z"B222r2R>>f֖VfFN*7WWwGO?s{;nNf&&^nrZ;3//S/S//ss/s##[+jZ2BrB2ZzڢR2B*oO?/SS#KnFn/>s#:Zs[jk j kzz;Zz"#{CjKs/Jۛ crjfsnK{~+^O;+o^_?&3^^{>sRk_^o/Jb'*f//r[jjS/2S{[GfG_FCo;.O'VHY>و2_hN?; kf&_crsOW^ 7Sȉn8I(?hɳWf#KN2?h2r&.ij(k6)f Vh{Rǻ6F')GWG/H׷8i(>׆VfG^s^/V_F.W)#(#ۗg(O(I^(!־WvIֺG +? +"^v)ˆw^7>rni8w&)6vVٸ? 7`97h9vi?8(j)C)V9H^BR&G~Cs W*n2bB:Kgogh Kz7fo~)(sw'';?)&&:ffF_[6g";2CG7.K/~:**[#SnOz.:*㻣RscrKJꃢJC[2{Kkʻڊ :[J*{:k{Z;+k:;k+ +*ˊ*KJ k +Kkkkk +k+j+ +* kJ +J;z;K + +k+j*+kj+*jKkJ kk+J +j + +j++j + +*kJ*K* + * JKj**+*+j+k*jjJ + +ʋ k +*k+++j Kkjjkʋ ***jꊋjjkjkjk+jkk+***k**+*kk+*+J*+* + **kk+j+kk* +k*k**kk*+*k*k*jK+k+ +jK:**+j*jj+K*j+kj;+j+[:+kjzj[kKjK+#Z*j*+j J*J ʻ +J#"kbSc# [3oB:O^OS+;j2O_K* +kzJK ;K++j:j{:/R{{ ++::{ʋkbCS" BSRs"c kSnorbώsFi6vbw6G&n:)(W~RGWGn/B_'C6ifn76)6Wv')*gzbO(~Wrogև+ +3^n_vR?2n/ʾV"C6ǿ2S#CR#_.ZOb&+o:âR' j*z*&+r3br;rC/{:j{RNʚk*o: +:R3":+^ʳš3:j{>/: ˊJJR.[3{ZKKZs+*/#rOj +bJ: ++ ++kzJ[ZkK"**[bZ +C++ kk+Zb#*k* +r J;b*.k+s* + br{"S{2:zJJ +[ bB"J3Z+#kښbbc;*ڂ{*k:2++2Ks:{;c˂[K*[ kKKkKzcbںzÛz+Zz;z:z˛ kK#{zJzj*KJ;++ j˛z +kKZ*뢊kzzk + Kk:jzz++ +J* +*{ۛk + +JJjkk ++*+ +kʊ+KzKk*jkjJjK ++kk* +*K J +; ++j +K[k{* +jZK{kJ#:Z*:kK˻"jk;K [KJJjj*J*K JJ++JZ{b[ۋZ{{k*J:*;j+kkJjzKc[+z + Kʢ*˛z+* +j:z+;;k k+**+**kk++*kkkj***+jjj***+**j*j**jj**++**++*kk**+kk*****k++*+****+kjj**+**j+++*++++++**++++*++++*+*+**+**rÿK +K";ˋz;+*JzzJ: ++k ++K K k + +++ + +j**j**k+**k +*k*+k+*jjj +* +k+*k+k**+kk+k+kjk++k*k* *j*j*+j**+*j*++*++j*+* j+++k+j++kjj**+j*++**+******+**+jj+*j+k*+++*+*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************6! +^nfRZk*:k#jKjzzz螷W?bBWwZ6vR{vr_3zsJʢZ +/Sj/kz3"j/r* "[ {n/)_9ֿgr8vogB'jnfF^'^.#J3nsƞg s'3j+&oz#ofn;S:O*Ncr3{^B>gCڟ:&*'OF3Ž[2"""3J&>f{.2N +[⋾r?~Gnc_V:C+_;n3?*/g'梳JSbϢb^?C#"G;jkc*Kʶ۾3'>'&gF JR'zS?n/.J˞3.sfn3j_f>S '>[cKjO+KRK +k + *[b/ + 23o2k"r3czrs[NkR [n[s:3Rz jB3"3Z+;**o*/ kkCj[ +K j +c*C"K[[3Z:[" +JʢC2zCc + +[Jy6Wo2>GZNfc;RCB.CrR:r~..:kcg'7_gI>_')'jgSr(>f^{&8HVO׉A1a!_6Fh(osC'C*+S3g'gw70@`,@(:i!QAwVFh8Vnj77_w_/3_緗G;`P,X_IyYqq1)(hHV2?g)7G;gg3P V/Ya!a)y'R6V(k[)iLJ_o/ssOOGH xPx rS7y!!1A:ǟ&8Ȉ(hrf_/WwgW?3o3sg_b`H h aY!I)v^n8Vh8hvfNcogg)7'[s_g(`8 8ۃa!a#.RXF+So)G?{'/g_FX@PcY!aAyI9gx(vƎ_GWw?g7os'?/''8JX@Xs9!aaAaYgohnHF"+_g7g?So?OOR X÷y!ayyWK"v3GGO#7 2@x`h!aYI68FH(+#OW_WGCjKzo6x>耀H`0 RIaaY)i +NV(&r?_'3 *R268`HX8F&+II!ys^rb/_GsOgSCS^6F6&ZR&rF(fF/wWi )g7?cBg>gGCZ/V6Ʋ^ǺV?&>>'WWW"IC)JFڿR?.{>oV"v[^no#o_^)w +&NʏHiI7#HSiF_bR_>ZwF +kB(62s[z6_FR^2 +z_2"Wr2{Gz3sS#s: '^XGcNj97.".7K_(H +78GLJ^V~&~&CWO2R7+knsvv3&z[_ןBroW7k_R_~NvrZS/Fz2 Sk"h>Z ~S';F{w#2+/sF)snOJ&VNwFS*oOVOJhgJ:g({/jRN&f'O:R~^n/7RFZ_iyV)2_7w2">7_Sffwbꇞn^x&gXȾ&LJo_w'iR_Rb)FoW~sg7g6+f9J(^hW.C/^N`/.3n/vzvvgKLj/ {(y~&ko&&F^W(9c2#B/n^{r#s~7&/v{/Nn G^"_;"(6R"6vV~.Z7i7aN^vS(CJhhRiK^^Ɔ^ Έ/F7?';s&Zh_7( f[&)bZF+;ȹsG_hVFw7 GVGGsfƞ~WZR +NVF)S6^)8w*n_ן^ƷfN_2c'j'c.~S2cSbnC{{* sR +"K +º#ZJJ[#"R +;32jcʛ;*rb"K{{+jˋ +j*Jj++k[ k+*˺kj *jj +j+++j K***KKj*k*; +*++k* ++j+jj*+k+k* +k +{++ *+kkjk**k+* +*+jjk+j +*j*jk+ +*j+*ˊk+* +*+ * k+jkkK ++**+kj*++**++j**++j+j*k*+k*+*jkjk+ k+*j* k*k*j+++*+j+j++j+k+k**k *+ +kk*j*k**jkjjk+**++j+kj****+****kkj*k*+++**++kk ++*+k+ + +j* +* **jk+ +k+kk++k*+k*k**j*+k****+j*+kj ++kK j+********************************************************************************* O:RSbc#[z:K* +*+ j+jk**jj+bJ.j2: +;j{;ʚJK*J뻋 +jKK*Jk+jj +**k+ +*k+*j****j*+**8hS`9iHG&._'.&~z:ifi9nh86SW^'VHSaO WW/6VBGg~ K(h(Sa/v 'cFgNnK(GOOF7?ʲ^j#S&^O?sBJs?>2+3 +3ZnۿK[r[6^f{j&/_2Oo3nFηON.^zjB>N &v.2: +&r~s//f#^~CR#jr+z6*("g*n/B_Zs.#>OS6+of/3jro"ڲZ˛[ZZ3/#" +n&/'&fNKb+J{sS;s˲.#ssZ&ÿo#C/S bbo3{j#jJnʏ^&N s˛bo[R3CN.sS k"Ro +#bjskR +s3 #k2BK;#;jnnK*#'_222{Kk{2&j.Oo3:.kSssbR +o?K +bR;z;/o:β?+nr{g'{.^>#; +#Sjnn*o +J.r J;+ ** +brjK + +s?_{3o*K+ +" +{[ںK ̼-AYIG( +sI/N³O?jRO'S/_I(L M9&`׉YIK'ySFHh2wf^.s㋊;cooϏ33￿& ,y- H07yYSGJHK ff +/S;ۋKo?oO?R <,M w8@臙Y!)?)68h^g{~6s/ +jCSs3?g72 ǻV63'?+2"[S?'__3oO76!mM (G9ٙgiIgΈXRiw(VF_c*B/O''*Cg7+8LX)Q-H+ Wg799B Hf)Kv3/Ϗk +k[O;S7 l<,(M qgx@ 'i)'Yٹv`))CRf~C;Z*sO/{#/gG{x,<8- H@)a9/h `xf_)F^+'z.R3/_{*G7w?H I͍rON_i`XV{w7c6gg>Co/SO'[J /wGL| W8F hGaqaGv/K^_w[f/#'_ ?LJ?g<) Wz_nF&۷RZ7?cs_7G<,1ɉI!8!)I7rs2'WGsf.CK'ǟkwGl|LpaaWaAWh@OahN) [cfƶ_ ;Sw7?Ogg_@<w q'F(FayWG_V`8.*C'SB.BR&Gw)׷_(L >b&ϙqQ1g_X)W)!!)[6F888v7)b^&^W)) PXH^IA!!Yi6FFF:yiW7BVhֈ./Ww3j">>N+_GWW(Ь``!Aa_.ΆhHVN/'g ۣ*NVh(&'cBZzJK__'o& @`X )!yׇnNN2cS*CrrRR^NbKCs 3#z6hF*S_Gii)׷_oC;{n>rrNzK[{3k#3{kZJjbr.&&F&nZSgGW)_?o/3k:RNNNR22rR"+{#3/c[c[{; J:jk+2bZb2..RRBbz +CS??oSssC[Kj +₂2rRrBrRb:*k+ ##[ +:k K+ + + +jJ +JzZꋻ;K k ;˻{{###[{kZ"ZښʚZZJ+Jr )7 +_ۚ"B&#r&SˏVw2K#s#?f[R*n*/(C~(wÇh'''6~ Zh6ORZ .O&&^_v3s˂Nn*o_6_G:o>΃Ώ&CK3[R'Zώ;*R/bOS +*b?Jns{2zskZ+jkK kZBsJ +[{z:/ s;"K* +/[#or3JC[2[{kCC Z2{+BZb+ +*z:{j+sj:j;C Ok3Ck#{ +;[JB*B{*zZr:rr2;nvh('!)7V.RWiǿ_G?2>2?_O7W<n뀿 )9(xsgR>c9/VX־j:cW+f^s'w_ozkS_OGW'8l\< .Vv9gG؀fwWYaVF6Hvn;[^j#K{_gg#C?_'gwLXO1m y'SW&w ))y!aRh(Hh_GZo'F&J_*Zcg7C3K+[')|̈) >-mQaW:ʗg(Hiiww aa)&6H?ggcGWF+w?Sz Og'g$OH9w;w)i)aa7HfF js鉇BS.2'COO cO?OG<Ǘx-Q9GB 0 ˉG +{!aGV(FFH`hBr[ G+&*Ogoco_:_矾@|&鎀xi-qIgW. )Z +Y GJ6薆 8vO Ii_+JC:>~bO_'/ Co<,W 'YWø@`^Iy)s(&F VgW [b;/Br/?3/SK;o_'?0((-aYi'wɗv@0h)iYYIvVx VkoZgWi׏.R+oCsZGw/<,-a)?c pi7ayH~F FSzGחObr+R:oǷgOsC/SkR^G')Ȝd ff1m!Oi׸hWIOs6h `HW׳W^f3/ogK3? NSo_wi I?P$؉O@x #"0I)w9YȾ^8`)Wg)F(8'k׹CCB곋kǗW)W) ,Ĝ^^͍ab,xInw!q1)hVh7*ixnrhiy'Oivo_)&܄حc)A>prhy1aIi&o66IvHȎ3zWINj_s"sK~o/O7'(|<~qHʹ@wYko._8./^HvJ&)+s^ʟ'Z;p,[I!ya9)NSw/i3+?Ϣ6.>fS/ {"R": +Ëk+R"*"nfNszjG_oS:ʋZzC ˊB2" + +J K+ K [ #*k;bZ ;jZj+:J+****:* :j* k+;;+ { + *:˛*j;jjʺK; +; +K+Z +kkKJK{:+kz{:˺;[kb"KÛk{;"j;K+j+뻻k + +z Kj +*;Jb*;*zˋʋkJ*zjj;+JJZ[z*;Kz;+ʊKJjKk + + +*k++Kj ;:ʛڊ{j:*{+ +jKKzzkkj: +k*K;:;Z+;kzzK[; +;{:* +Jkkj* +jk +JKkʺkKjJ +kj ++kJ kjj+jjjJk K:+;; +z; JKj* + k**jjkk++ *k+j+ *j ʊ* *j+j ++ + kʺj **j+kj*k+ +j jj+jjj**++kk+*jj*+k+jj+ + +* k**++*jjk+j+ *jk*j*+*j+k+k*j*kjJ + +kꋋk*+**+j+k* +*kjj*+************************************************6y(S_{3X)YF?o6F3j +cZ2.i6ssh&kNn/#/CO/&~+fG~g:_Jʏ.':㿲oo&C_^OZo.joro&Kh_N?:f'G.~&SbGHGV_6_Kr:o~n7.kf/{vG3fgr6^;柿f2Sc:^[k2ڛ~:F;BBKBCBO ʆ*3gOS'_>GfFs{SΎ?O{n +6*f2c_n>O3rncf&?>縞S[[okFN.^#7邞Zc;f&*jc:SBN'n~rg?J3"ŠR#osZk;?2NO?n +[&zJ/>*6sjN#'s k +cRJ C& +*/Z;o[":[jnK:*zJcN2C';rCKR"3RScZ+?>{O RjSoB+{sZckZro+..*Nz+[JZj*{rj2j&~N2*_G7GLJ;sj;jZ^[ 2`0xH&A'OVhvF2B"3j3[?Os'gG@ XF 99q!7Go6(N^j;Cc +ₚ3Js[#CoO_GgX @@`g))1q1I )6v&6V B2OZR"+ScO_?_7p0C[gaA!RjF6((~vj"ʚz[Os+K/SSSCoCO_'ggn@8 IY!AaIGBV66N:2n#jooˣgg?'OCCsSg(HP>^Y Y!iG HV2.s?ooO'gc¢B~HV8hfnR×IٙyBfF&FN +;'__o#{CK@@@6~Waya9 GR&V^N[cz#kfRƢ&*o#R^>~F&fNnF6f.JgWIIIiGsb^^N>bj˻KJ2>~R^f~fȞ{ciiyi)[" 6ffZ뻏C3BR^v"sO777WgσKrRnR";x`R~o)y!I)w^Fh:_';j&6ָf6N +_ GWO[CRkJ+ں^^N>_77'sC:"rΞ&f^^> +{?_g_?_?Oo/s[{{j +BrRBbr2jj ˻{ó##c[[jzB.>>"+o'SScc3/SSS?s,8,f -iW6(V8RwgWɹI/*Jh֖^O'K~G*3& c2:s/_SOsB..b"r +ښ C?GG7@8hs SwwgwN.zjGOCRN:3SoZڞN.r6Ⱦ:ȸvn _wWwC'* +Ž2+/;J^:N;֏/φ7VJV ~N~Of2ZNc;.no_wGS.ss;k7G/ǃBRn823;:6ʗ.fö(O>_''_O__j~)vJ?2&kzGO +'*7JgR*?wSRs6 K‡.j23ni>V(RSw>WH)B^I6ιHgSs  +^)SkR7.SHc:V['&Kvv~sƣ^v>b/C7b.VfO~)Z.i:j/[ +_ϟ2Fƚ+;soƇS6'):fgZ(6C^ys_oRO_RW棷^RS_n?:3r'Ͼ&Vok.#&^J. +R&B3~^f_{^_鷏/>B·˗kf*v_Fǟ> +_.rv/Zz/[ Sr/+&Sgk_"s2b_b&Kks_WB'wSwV{Rj;3gORfgNRsz>^^:VG[>r?3;F2ObJ֗jRbof?Ǟ +'_S_677vz26Ɔsv>Kgf^۾oJ~'Ö~32'sRzCf+&nz(g~6b.+.O> ;s{g#c".v.GBngg/nz3{7kG~g^B^?>&*Kz+S7sRbNGzs3oR.z{s_._^32oR:jsfSsfonSr{2SRBO*ˆ΃:3_ccRj. /j#[:#[j'c{S~ kS/kJ + +S::o? bSoz3z;j:jkk;s"zZzSn3bb{ZK˳;Ks:/z++ +*"+cJ:R*;Jrk*2brnRn>n;CO_7W':k[ k#R.+ۏ[P<pw1qAᱱ)2vh.kWIGO^H(>3G)OOcskZ{ښCO'w''x̬p H@Ay*V2Hh#O i϶&v__OWiOcSn>r'G7SSw&I!R6ZHHGW{("S3O7?3ۋNn3Ss//K@จ_99Iy)'{NS3ßr&^+/C{COJ//>[n綟"NB&2.6h^~rbǗw7_'o{ 2R[2n[N[.Z"nbr>;sڻSJ2oc'KcNbRoKs{[ +OK#c{n3bbgBN7ʞo.V?*fOs"^fhz>~R +nr{:s +OfoO2O뚺&b;BR*RsO~vG2(_ʆSNnn*onR+g;犃SN3{ORʾK/¢[rrSGBr[.c[jg 2"ZZ*b+nsj.2f; +* K{&{K[+nkz>^R&":&"{οRs3S +o3*SNs&O#W3_>NR£?/kR:>63rgG'[GϚ>K/S/ .^2s2{;wFs:wb~{^^NfJCg3k3fc" +ngW"f:'&bRrkk.>zR&>[K.f63nnn>^ZJcr/)?#FBSsZJ[S*rG ʃs c/3o{Rڊ+/ۋΛʞJ:2ʎ*ʛ"J SZrJ:;o[zZ J"ZKj* +;k;KKKk{* Jj +J ++jj:+j* +*+jkJk +kJj ++jk*+j+Jj+jʊ*++*k+*kj* ++*+++jkJjkk +++j +k* +**+k kk* K*+*+k+kj+k++*k+j*j++k*Jk*j*jK+k*jjj+ +jkk+*j*jJ +j:jJk + +* +k * +zjk +jzJ+z *zKJ#sk2bj{""z[CZ*;oJooz +r"2zRRSo* +ۋ[>nnk&n2njo2ʟZRc_K//' +~2['SFזFF^3z3s.+vN#o^Nj&N; +b^?kg/^fb +fjb2.R2j*^n2N?S {{b3zk :SsjZ#S kjc +".js*#k+ZZ; +kKSJKZ +J z;;Z:jJ;K*k +zb j;{ +ck+K+kK+*jJk:":ʊ">>&vs?ggOCC3ۛ*+ +":cc +?g'l g'fAY.ϟ3k 9N2ff+&&ˋco#:*{/ #S/ʲzJR*>9wˏoZZ/7jrR"{[Os,8ff 9FOg_3WK+S:vFN;R^r{SJ/ˋVZ2κ/O*{;[/ゃ3ʺ +ZRR2r.2n":: +K#c#cc//oS3 +k;*j:ʊ ;+oo?OOO?c&pϚ6)*"'_7giׇ'_">>.2nnBkk*K[C//sSc{kJZZ""zz + +J +*k*vϷ:7/#' +j +kbRΎ.^&&>>NRZjj ;o?''ggg''_O/[{ZBNN&>>>^N>~NN+3G''_?S{ꢂR~R{[Cc# jz:ڢzz + k KKR&sSjOs3s__C8H82H`B7WK_w'_?S3nz2&~v~nRNk ZCo#c; +b2rrbrrBrr: +: +k;;[c#C[ jJZZښ:J:+kj*+ + ;K K K*jjjj +* +ꊊ*jj+* *k ++k*+jj kꊊjkJJjj+kk+k k*+k*+* +*j +jj+*k+ +J*+++*kkk +kk+**+* + +Rn#r:+/kS{K//#cjk#* JZZ..rbr."zz˻C3s/Cccc;+*Jz222BrbZZ::j{ۣ3c#[c#; { +zڢ"ZzJ +z + +**+k {{;{{ k+**jk:zz:J + +jk+ ++*kk*ˈ''g"rB..B.BbbZjbjʊ늻K**{#; z +k +C: +ڊ:Jj+j* ++";K;SbkzJb"KrzZ[;ʢ{;jz :rk2+K{/>#b:ZJ;s2&NςZJJ{#bS3Rcr3j/NnnNF&:ꎋrZ^FF~^&^ƎK{N˾.B_Cz#ocJ'B.~';*B?r#Ʋ&wk: +ZBbwCs?Jo +g/&'oks# .nNs;oN_&z/k~kRkO磳>^;zۏJ3⊃:6fBbggvzRrKbZ"3:RN>WKNGRz//2v/[3^6+[7kjwB3? #cZW3O"CoB32 +/. +bö[R#RsR~O +objS.f2Krg2Ώ"¾*b'CBbϟ33.: sZo>²?boOzK+*? OJC2n3cnrC {3j{/{j +o[bZO/zK>:~R>2z'23;B#:WK?/B[3*vƏ2g/B*/jJfk>F /z>3OWr2sb./O&SSs rJ;ZR2^ ..Úg>sS2 &k3 +{#:#.*j+J_cKCZ2N2o;ˎCsn +.c;&2.B;R:o +o{>;*'*33" ;sBrRzkB{Z;+; ++"N2Ꚃ#skr?#'nsk>_(2KKr^N*z#;zB2ckz*2bΏ#+{ +rZ2 RR{j/*zjCJbBczʊks[.cJo; +R2*;&3##J+#/ +{oj"{kBz"z *"ZkZڋ *{j{*{ʂ[cJKZJ;Cj{ +BڊjK"; zkjK˛ { +c* ʺKK*:{kj* +**j{;JzJj+{J+ +J:*Kk* +++K;[ںkj : + +*;{k +J* +j +:k;+*JJ**+K;kJj+J #kZkkJ + +* +jk**{;;*JJ* +*+ kKK ++kk*Z:*k*j++ J* +J*;+j+ ;K+*jJj***:z+{ KK+++kˋˋ+ +j++ʊ +j +jj*k*kkkk;kjJJkjjjz +Kk+++j*K+j+*** JJ +k k:Jj* ;Kjj+ k*j****j + +j+ k+jkkk++**j*k+j*+j*+*J +k+jkk*k*k++++jj****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_american/cause_1b_loop.isdn b/tones_american/cause_1b_loop.isdn new file mode 100644 index 0000000..bcaef08 --- /dev/null +++ b/tones_american/cause_1b_loop.isdn @@ -0,0 +1,197 @@ +*d}EьDH$]a/'W a#RC?k'B>fzBbs + ã;333kcKzHHFHxf/S))Iiy)_g +^^ζFfNRcZk;O?Ͽ?SV6RR) 9iW7_R*^vfff>nSoo?OOo +h(80^hZi!׹! Y)G'ǿn &ff^N*j{ϟ?gg'?O'xVVx N?^ Wى!Y)Gw_#{^&6Ff^#K'GwgG_g'?[08`,xH&7yaiW?~FƖ^^3SOGWw7_'(&0p.`B&7W!!awicۂv6(;ooLJ׷Ƿp``ȘFqi!a!GHxh(VOGiw'wWW), VИL78w !aiW?i)zf6hv~Vww')iǗwa (H(| byI#1aoh`:jiG2Ogw7IW G g (A_/ ji)AqGho6.Ngb w".GjG ySCII) 4L Qy! `@1 ƈ:NBVXjI/sc)Wy)|Qm9@))1Q-a2. +In`(!wfHxN+yYۖb7?ɉw7g ̴|AA J6@9mg* h)a`H^Nkii f*G׷7g)W)i pL +m-&HZ(X֙i(sz&I2`k_?'_'O ++ '\LϱǗ86Baa)Z: +k&n& +sB*''_3s/3s'(VFs7W_O':NfN: +k'GC'WSp6@V")i)Gw7_/3^^^N&[#{sov808(_w)II) Gso_#2ʎ&N c _S7)ghxF~(X0F(ʷGWiyy) go+rJ;Zjr*+_O/c`h蘀6GoI)w'3'OʢڊC+rZ^R O__hVhvH Iy)))'_{OR2b2rˋo'~`(  !w_oOCj2BN&NBⲚ{[Co33hV_G鉹g?'GOkkc"nf&RR2j[;+;KHV(H(nSggW 9 g'Gg* +zs;Jr^{[Zj +[ +.&Vvv(f.:gg7)i //oJR2^>BBb +zrf&f΢#w)))7ǟj +: j"N>rr:2Jz22B~^ffnJS_W)w+*Z"0CW)iʎBFN>>ΛC^``  y9I9 Wr"(fWgO_jNBJz K_)Z/Jc7i\ aA/Wφ*hgG.ׇ'"fJ3O'CʚrjZs_G$p(@@ !ϟ1i'7'ضjJks'9G'?Ύ&֚nZZ?k'2Cgp0&w?79)*.rvfiw?k +R&+sz?j*3L @PиGW#QiaA .bh.c G?7{/F.>"_;ZB{g $[:G:'aY1a'W>F _揗?O&#O/_g{*{b. +G),`'h)GaQW!IW^F+_*/R&so/gS_ 3[ڳSa0LPH9GAiѱ !(2&h+S{W;J~frf3Sc7?/:3KO_G)`)l8A1YW&8^C +ljRx&&? +')gr{O*[Wxsk_''3 +) Xx7#99YJ.(sv(zw׉s>'o)~[knz/o_oR2Kbl`^^;1/O#.Bv^OC7_[zCrRRB3c/ϳRš2*?lpjYI._ +R3JrÊOz">.skbNn/h ( f^&iWGw'kϳ*K_ Jc>nK;"rJ*2*nJN3B.SR33*Z C3'/_zGJ/#o#SJ'3S+#~~crsfn:~R{;f* 2#RZr.nC3Kb;S>.#:*?&3gSš;Zfng3F3kF#C>~3βk++s^[;znok3{Jc/> +˛# 2kCsC3^*CZjz/"r + NjSon+;jKk"˻S>~#sKbC+Zj +K";jscz"ZjkC*S +N[.+N:?>ʿbK#NZ_ʚjۻ +/nz[z:KjNJ[j:Kb#+:Z{ +KK{":k + K+k****+**kj +++*+ˋ+j+KJ +J*kk + +*;*+*j*kk+j +kj+ +**kk++Jj*+**k* +kk K +J++*k* +jj *jjkKkk j+닋꺊+** +*k**ꊋ+*+kjjKJjj+* +j+k *j**+k++*+++*++kkK+JKJ*kjk***j **+**+*++*j*ˋ+* +*kj +j ++j+*+***j*++*k+++* +* + + ++k* ++k + ++ ++kj j*+++kjj+*k++*+kk++k+ +*kk*+*+**++ ++**++k *++******************************k[*;KKJ+* +k+:Zz[zZZ**zZJ* + K˻K KK; *k*ʊK:::Jkzj +k˛kJ:+*ڊkKʊ+j˻j;b^ ov 8y׆vxIw3w3V{z~j: 67GRWoW^ #k'(3s.?KS+ZRwGG(_bB>B^ og"'gzk*KςZk{_"z* `lPrRI1! Wbf IiIBֲ7 OG)Go3r D|x8sm-Y&) 8GW 9NV&&7(VJ2j#'i73ÇW9$X/qiaa'+jGȾgCIy;CzjWiyVĤ|A7x.W y^f.z23'i'vvvvHhSy!.ks'wWWW)vQ׉ 3a y7_^h(fsW7sOfhhFsw7r&Z?GgG_?脤<.qmgFG9IR2fc BF֖2w)g#7wgg?_Gi|M=Y{X>ho(g*N?I);::rFHb' iz2:wgGgOogWi}-f` ;bh& !r'G{>wW(8^fvK_Nn2KGG?s_)CX38Ȋѱ h G2gg&Hh#2r._P$|W }WX/rhyёaR (ss)[h8vJkczcrr+ _czs?s_ן3G}w;cR^!f``?wj^CiX&Wcn;:s/'zJ'Ghx=a3 O~(X-)NwS>z)II`6c)wCbrCs?''z37_?əK|d@=('xmi( oj^` f'? + ZNڿoN*o'?ϟO7 7l\ M^g 8OW68֖YX8Ï ڣ_'BS2"gog) $M2C80pHmAf;Hxynȸv&7~_GW ,d$,mMwCohp,`/A*x`HgFF(~(()[nZSsO"JR:ۏWG{i+pa 7`Ph)1G7*6g _(F"/O3_[rn[O鹹$dL-q1 plp&a&χ7gg W*ƈhf{*/7'roO*>_)W 01AIiy@PpV3jW!qq!VxHF(VriyV'o'.RSgWG'G )\\,ȉiǑF`H6x~ѱ ?``2__Iw;FF2Swo/ ' i,3ZQ F&~@@VYY!֘x8ƇRnn^n'G7' i|xHH.qWV00_?aa'c:HxVﷹWO{_{ζz +7)wyܐ(`xy q_AY? (/FC7gfֈFw{r +f+/O)3l xqcosywVn>:gjkzR:Cs)G8PX 71aii GN֞Nr# +ggRo^3BOc*S;"zb:+J(F{ח77gsS{Z2f[*k#c +{[+J +K{N;ƞN^N*o''Ͽ';cJRKZ:KrzKrzKcSS/jjj:r:"2r22rnn2zk * oCsOo:+sS{;{2.NNnR..Zx?{/j+ۏ +JoZzKnRkjۋjc+r/[/3S?_b7Sf. +;~{.+N#/r;z#'O﷿ +_3&+B2rʛ.2nJj[/csSOC#3Csjc[BRr.ξ>R2Kog燇_?SS3J* +r>&6hR') WosN/?'_o/Rff>^ָFH2o)9iWW2^f.>[?_h{*.W)9Nf@0XNiWiA 77~87W)FVV((Fs?'C+RNRZ3'oo.Nnzc2 i!WWH2V3F{?^2&:Rb:G__?g_3{ 2zrrBb2RZbrvfv^r??GWiG7g˚+Z*2z{ +{`Vk_ iWf +ζCg/OsIlp Pv)Iǟs(xv>:og ׇn:(Ȉ>"'SgC*RB2RN"NN@p'Vٙ_yn&_Jˣ[. +;Nk~#FsnH+&SRb&f{'/Ro˛{ _/3ÃfwO/cG3Ǟw^>~ C/.7)㚻F.o2w~V&C/SCBC)Sʎg~ +' ++^'"SC{~{3)R?sk'G_7z׊2C~N_ib#fJRSvB*'R)rF.{i3&hξ[hbI>Ʒ?>fRb'v'_f2菷bòi"ZcgV.*^Wr+i?._& +N;3C>';/'b'ozjj>" +s;*o2jozr.Srbszꋛ{*[Jcz+ۻ;*z*ۛjJ * +k+jkjJj jkK++* J kk*Jjk**kj* j *:j+ +jj* +jjꋊ *k ++jkK:kk** +K**+k+ + +K +J*+k k+jjj+++kk+**** + +jjk ++kꊋ*+*j +*kkj*j+j*++K*ˋk*+kk****+**+k*+* +**k +jK*kjj kjj*+ ++j*k+*++*jkkKj+j;* +;K "^6W^7)+(Ns'>>#_sz+s*ڂKz#nC:jJ J*kkKB" +C+cz" +Kc07->"h(9h  h 6f+^^#/&Ro; +S{2[O +{bzj/R:{F7aǣi3^/w~Cw&vFs3 _)_yWBhcNj3'ϏRVFr('G_כZR⛏j>Ͽ&v?G"O>N ig^&HWw&BCr>2^(7>?wog^^/fSׇvvjF_xy__GʞSv_&GIy:!8F +xv)^iiV3^6( V+Sg +6F7 JswkRS*n{Ojj +Gj6cb^&fg'fZVc_>S#z?oo[rKJn&Oj3KZb_z#*rg_*'_.F*cGo:Rr^FRzʂ_jzj~ʊ~;j#~N.B3''#kRk>),4|0n'?鿙!!W; yy9 +zB+>.B+og{2f^;gs\LviR)Q-G99WVWfbGɉ7cn))on R?>z7 Xd$l{y-ms?G`i*鞈fgg 'Crn+'"O)$diQmKHiY)sn(ֶo2_ib[{Nb_S+ogf/緷[n*__+Zx<,xkB'1_7W'.VH(_o_)wR&2Bvww{;_/2f^ +2S.' n6?9YAqY9s֖ZJ)W+^RzRn~Z#gOBccf"Ok^z_Br̬_vhg7' _& ɇC__~RV.΂OsBgO&ncC..c?F _H`!awWy )wK:Wך2ghvSVʋn +gS>gSz.{.S38Zohia!R!_s'_s˾fn&&¢zR{B/n[/.R.V `XZV i_y!WsS_.r*J&fR"N>/;bJKJc:.2J2N&hV^>VF"sS׉Wi'?jr~fNB;óc+z22rRR^F+cC)))W'{c{."rRNnRCjJkKR2rrB"zJN.>zʋGG'O?3#;J;B.N>2>Rj#rʣj"R >.âN.OzJ˺rz"jۋ__'_OoRgW/&OF^2F~nRB{S& + +  3C +#Zz2N."k{*o?O_C/3{[{kS Zf*2N.f~kBrB S*k;&Rbۛ'OoO[zbR:N:nrrnbRJ +[ + #[s{;k3:[zBrJ+{;s/OO//C#[jj"rzrRN>n2Nnr +J k#3##!)i>^ C(~&N3{o{'__g_' +/{Zʾ~>ffn*:Nr~ONz# {z +[BRRN[n/Ss_?G?Gc/ã.~&n>*CKO +/C+/NR +NJ2g緟?/SZ:+2K{#2Bk2 +rzBnbkzbb:&RB>R{C)wwW'2[cVj^~.~CgKBc&_#nZB `^08xljaaA9g3&V.ns&g^:6R?Gg_"#+//gLPpRyaA9YGv&h>^#/K_2k(/7iWWg#[{ 쏰l@_WaљɗfF6> '_ +Vf^+?o7)'_{/_h،P` 61YB6vVh22w_GfV~23i)';2*?Sl;'A11Ifhf*3/&8H(?i Wk>>R"n+S'7,hƉY!9[nˆ8([Gw(&2)IiGn2rnH(h 0hkW9a!IINJZjFvB./_~Ξ^so?g_w)!di7A9ɷ`I!9/HNf/iI VVN))皾VƞZ*/oCRR^'CJ:NZ++.z..Rn2SSCSo__c㋚knRBBNnRZNRRJr#+??o3sۃ{CSSs3S3c#KZkʎr2N h~Fv:wy9o&6W)O**.'gjJ? BB_gC[3*3YyّaZX"iWi1( ^7 i.8֞9K6hz_鉗^ƶF2'ff~矻RNN.&ۙYw6枢 9wf6fZr +k[梢RN[*;'/_?o3Jzξ + +j(8ww_S#SσcR>RSϣR./s{k/3[/h|-=#h86f--_ذH )G)Jh`XiNfW)3 žK3g#2."J# Z^&>#Zn>2jkC/s3__S[k*JB.NN>nR.⢢; ;{[S//3 ""kcs[{[SO/Zn3gGg iܜ~q }*@gW_:G7aቆ(g9׾V^ +6(8^YI&((W7os:/SS{N^>"S3ck(`HWa &Ί') wBFfSrNfNb +SCk{s_/_G)׉$WMXx KF)1aWXfywnN +3(Hڗ sS'o'ln v3JRFIAax2'K r^i9KJ{S3g?w7L\ znHXiA1Ygvh6H&ihg'O[R;__'OK;))ܼ @)qIO銘0 f[Yi _w)φf&z?ʃ?_3#OOo/w7pa1HxR GGɇ.6R +zkJ +Ks;J+3˚#{K+ +JrFh2 .Fv^K77''o3zJj:"B>^^>n2j/OOS3C K jRR +Bn^&NN;SO_os[{R>NnBr&^N*k+b{C3s{o3{+ +{k:BZr: +"":"bJk[[s?3S +:jZZ"ښrnN:o{(v6ƊG +C:;BB>s nR j?iOSz#zk#k+k+k#Ƿ ,,(:'k!agfhHb7jjN_?k;C_?OIL|@()ׇy1qq_;貺:V  GGGzhhƾ((C  7N ?):NrW)pV99AO#ֶ_J) _^F&BY^^o7G?z_w)|PXٙI(n:WI9Gg~R&&" +2(iI)_ +.sO^0lLl@() yY_3zJWGÛ"R~^~^3g3/{jSkk'c.&^?C0 W7O o//z[_J2* +R2:>>. +{zZJzco*sB;SzbZ[3BZVVVfoR*'''Gg_SۏGZOj*+n.nJ>frJ2Br::[JOC2CCڲ C+2NnzŠ+2:+zˋk?#*o3Cnbo/2Zj2KNB + +Rj[zRʂjB3+{;/o +oˏ[O2#_ϳ:3..2/~czsR+{"33z.[bcNK +;+{ۂC jZ*[ zCk +{2Ro: Jzb2{›o#:[jscJZK zj3Skn+2/+"*{b;:rzj3; +nZڊ;{*K;+"kkc +rK/R.rn+k*" +j{{B{r;b[ZBk#;j:SzC +;+* bj{˛R"j2C{ +{ZrS*JJ + +#3* +K* +c{:k[˚2*jK{:۳2** ˊ*#"C b3 ++kjCó3K*+JK+ +(~ /'3K+k [{zZZZJ:zzrZZʋ j 3S3C{{ +BBR22ZzJFFfN:s_LJ'__'_ﳃ[[ۻ*z6h2'Wi wgok{;.>&H!ɉ +kjsHp@xYY;Rr26iIIGƖv&NZKkSr~ƶfOsKk*J::rr2z;oooCJrš++* ; +bZ +{ۛKk:z:&(VFRǹY9:ֆrc/szN~jJr&vV gSZ>ffN7[+jsCC{*zjkH 0ض!iώƶ.J/gicV(bχg?jr^6f/7iǃ^Co?/2B28軉aAaɟNK/O/ss77JVhh^k?.(vN7Wz#o#B.2H @^AAYWvg_og#R(vf.3'_/n^^SikzB*ڋ ++# +or hzY!i(9aYɇ&v&N&~S_'3&b/_7GG_O'W9cLPBq }1ɰ,L @- !'xRiW7fbFB i2&Fvj)7 +?'~lм̰>q=-A &-m1ICؘ Ng)GG(^FJgGS ;Z/CO/sKS'w8,< M!qmm-Gf HboWFV^S7G'{s?_?3/ss?'ll< `-MqlQQ!`Xx?);>>FJw)IW:>+/'7OZJ2s)NP<~M-9NpIqm-1V8HwOnf>c''O `YYI:^+))Rn3_I( Lؗq M ^X,@hIV{6" 9VxAA>H(Wof?WgXL<Qm-:xXnG!yjWgH88hS98HHH!ioV(W)SC#C S?g'q 08Fwi sA(`k_i9:fv^ +`)yቛ.'SOG.f3_o0 -i6i[>趉1a!9ۣ"V~gc/wgj3O&J_/*N.bˏ[`l,X/3yi(f'GO_gB"f^NZjr.nrJ*kc3sooo{3# k"B +b>fF^nwwwg'K*.bZ*.^fFFfN.zSsO?S{{zj + +jzZ"2B.&f(v^~no')7KoB2 fF&^nc?[/_;û3kk N[KX2R鹙9O?_/2Z_kʻJ.''_sJ +SSSo[J +SJ;_g`<,ig)a7(xSa(6&V^_WFv>jZjO'__'C3S#?#gs L@aGyaaOyy Ww!&xHBnJ^_S_g~J_s[c#S +RGA 99谀YY)II ؈?/oJF8ֲ7 +&:CK# K'B@LaW )ɇ~@8a9wGV8s7#6k.O_w'>³_#okϏR_'h 1qWg7Zi!!yB(Vj_~n&vR?翿knC_33ۣjk{ ::ZSo33"` p(A!?;SK(fiYٹZj;?&>f^>&b; oS;SSoSKj +::j c; +hpP7AO2r+_nWnn>(ffkβ?'cB: sC//kn:K:r" +ڂb.XV')"s_Oii?z*ogS +Rc3nRϿN2ン;s#c/s*rR{B"⺚Jz>>Nۻj{sSSO/3S {[K2bJJjZzzb"Zj KZ*K2r:K{ kz"+k*jsC;kk#c*J{Ss#* ;+*Jz +Z2k"ʚjZ;[{+##:;{{ +j/#+ +;ˋ+ +;#c:B{k bz *z* +:*{:kK{;* +jjk;; +jk{z[JKjkr Cʚ jz*{JZ;{ʊJ**kkJ + k;Kk++**:zJ j +z+ kJ+*+ˋj*+j+ k+ *jjJ:jjjJ:: + + +k *+k j:*k*zK*j* k*k k*jj:J+ k +jkjJ*++K;jk** +j+*+k k: +* +*k ;+j+k+*****jkjJ+* +jK j** k+*j + +kK *:z++j:+{ 늊*;KKJںjkkk+jk +jkk+*k +* +*kj +* j+++kk*+*jJˋ**+j+***+********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************* \ No newline at end of file diff --git a/tones_american/cause_1c_loop.isdn b/tones_american/cause_1c_loop.isdn new file mode 100644 index 0000000..b3bc06a --- /dev/null +++ b/tones_american/cause_1c_loop.isdn @@ -0,0 +1,628 @@ +*d}EьDH$]a4NʆMagii_Ki!Cf_^hFZS~rh_/wo[SknkϿ/n#wL,2ُ8cyYajr;RʆH/_)3>SS7srcnoR"of̬f- /)8N)ǙYi?"Zvh^nFΚ+h6ooGwzko2&*RRn.> zR7P@^hF_!w+isgi)sSSn6f^FFv.ojC/kSo;#jʢrbr2 ++ +F(V( 7giwi鷟7+K.f&vVV~.g_Ƿ'_Ocjj +zrZn:n>KNH^F8h2S +7)9)yW7/c:>ff(h6V>BR7GG'?#{[c +j~.Z&Hv(fCBz_7I)iɉW'7/oCkbN(Fn:j'ggO_o{/CJr.nnڂv(HhÎ۷ɹ))IWGwgO/".((NnÇ3?g_G'oSjZ>NRrzv8v8b )i WGGw_sk*NFFVVVRnR;wW7_g*;SC*rRB>(&ظ?~?YWɹI7oBBZV666f3J_oS)?_3K+zN"n>.*aL,8^A;)'_yYy7f6hV&&^ȈS/Si''^Nk2w7,|Q^ V WS^v:g7[Rr(vN+N&z7)oj +;w_[* +?'/{*'m-bI2X&gAAzn_))&&..K_N(J#7c"K:/KK +Zco3Zrv1A Vn/_K>)'(>n2>c.6vNGC/_'*#o_'^l mX^^1"G.B' Vh#SfgNc[bBK'C[/BgLJX<-QhVB{Gq9fv'{ocrFFfF~#;s닛cOjzjC_G(P8awN?.3wWwSs~."^: zf3?Ok {?C?/S3sCc8 F.XX&.OjO7W)_g's_ZB~v..r볳O__3o_g3xX&.XN*w)S'''2r~r2""{O/?/O'OOX>v^GC77W_O'RRff&2r"3_oO'_{8>hGC:7WG___G_OorBnZ^^f>ڢ+?OO?' XH^~Kwggg翏?'/ +2N^& +S'g>ffffoۗ׷ɹ_7χ??+:+:.2R"Z_?O_g?&fր`FGgWg#+/KB[Ξ>R2ko/#'_fhF6x`v3/wGI)_3gg/oJbsKn.2.2N /S/?'(FFXv2cWi Wg3[ڣjúnR2NBjcSk^&hO_Ǘ)g_O{껋JjZRnnN..Rꋣso/"N^&6v6;3'gwS[;;zz +2.R.{z;sRnRR~f&k#S''_s#jJ"zrr.RRj +z": {[+2>R +s/ϿOo/c{;k +Z@sW{ǿ>rrn"HV~+co))7+Bz+O/S'Z>O7SZ3w)w༼ ~?C~aOB+3``9WiYIO^k^.7?o# Lih- 12s/~^ف#7WS^[7)I<,86H6-qN `fx&_aY7iWrF2/GS; +/g `XY9 6&Hzw)a F&z_cS )JkCoK_ X0WA(O`8r9 _G>''_'Kj @,^!9O)#VxF6+ 9 )iI)CNV;s?_<:Ț av8(V7iWiI?k^ֶ&.ZG?_`p,@`{)aaaaG/8'WW7'SF^>fo_p)hpY9Ɂ9)cr(8&.f;g +b.Ú3kSOO W`֎X/Vg7!鹉 +'"hF~oogOj"N^."2 +;SSHh 8x2ֻ7)II3 +2"'Sj'cJ².RRRNR"3s3(F3x8f6x.F6GIIɹ)Jf~枂rsS?Osz+rrBNrK*sKHH^wI 9_'Rz6~'ϚoRB..*3o/;VX^Vj yy 9yǿCfh&( 7[[_Z':RrK"K +g'v`~.ci IəyOvfRh.vG[{#J[ +#2[/'wXp` `@n8y!A! {hȲBGo7O_/[oRsN7g|,ƙn!GfXFSf +#)S_N&{g'G_WW7<`!iVy1!!;Wfo֘wIsw)+/6>?owW/G7)<lLxbqYY!/rh*g7ڛr~f& +swSG?Sgi?Hy9aqY'! O'W)')ǣRvfH~B'''C.G \v,XqynWiȰhf'9iwgw^(nƈ_7_LJWNjzs +_WI)fllrAa_-QyWˆ@p(7r'a9SϏH[kiIgs>"c IP䰀,Xmi1R`v@ؾOW!WiYቿ>H )G)'&>BwWIY(|0`AM!YW`F֖ WG`Fv7Yy/OV^/'WiyYldl8HX m1)0 h_Bױi~Jx`fwI W[. +&&^wW77wG ,Lh +xMq +* ɸ``iI?si9aHvhvI93_v&b#osc/7G) 0F1AI#8G'7).hR_3'Kʺ* ++K[RË{Z@fko"WG_k*oj3?2C[sR +>K/{/zfR"2k?Ζ?'jZs/Oo+ [s.ccʺrn.B+J +cRs3*NN_sòc" +NS +OKC*S{Bb.:_n*+ +2b +j>Bk'"nccZO*rrj?j{+On3/KJJZ"RSB+JSCʊJs".:n*nz{:.ʚKK:2o*2KRnon*+ + ++jr +;2S::ڋZ:sʺ#S2*:b+rc[N/ :k[kk"z/"r"o3kj[{:Z;r?[kr{B +CZz{K2*[:"ZZ:[+ +k*Zbk[Z +[*K#2*#+ &.C+"kO +;323c‹Ks;:*cc:j:bs[#sSn3/.rÃj cS .j Zr;'B;o*:Js#KRjK3z" {2Kz32k.S3.JJJk{S+J+{;#K + +* C +J:j K *{;*: +k +k*k+z** +:j +:+Kkj*k+*JJK;* +* k++**+j+k+ ++k*+kj*+ j**jj****+j+kk**+j + +K +j+ +kj +kkK*k+ʋ{ +J kʊ+jj +j+*kk*k****+ˋ****+j*+*+ ++;k +jk kjj+kk+++ +j**jJ닋kk*jj+k+++j*+*******************************************************************************************{jz*K j + +k+ J +k :Jó"*zr"zC; zbj[[ZB: + {{ :ښ*Kj + +*{s^6y6f _ǃ^(&r#[R')rH/y.+W~6.g&^on?gBg?r^J//+R{s' +>f֊iX()h8.)i(>g KvfgwjVr)C>c6ng~~s7kr)iS^>7+6V_O[^rW _f&jnR/.c_N^COnrSϢnkWgR3[^bǿ.?i+NƆ +3g +RKN(&oOs>N憚_g{.3gs.3 ڞ^n>"_.nj +*S㊢2{n"[33KzbBk??ꞎc{;*Br[;3NϷ^z2JjobN.s;N~N"?_#:Nzj/SJ:*+J[ۣ{;2NFF.WW7'__G7Cók{ ;r2rZK +W,L\<`Oc n w b[#zrJkS{:zR2k/ﳚ>2.Z*ۣ_,zחo.vh)zf6;3[k;{*{{oGOLVّA 9a irJ))W3vhn +'_&NggSc#kC[ R-͍@^gaI +n2)i HV2R/cr[SSoc _Os+*Z̼QQ>00i7.BWi 2xxHF^n{?/j+{/o/S3?ggPll1mMAטpo!"GW)XhR)WFVv&G_*coCڢKp L W M;`FY Orn)7 J iW{_w'sB./_g gwiSqX@VYIn+)IfX Ii_vhhFΎSsz㏇W6𬼌0M wH0S!¾j)ɉXHg9^h../_g/CslsmmX00`ocljI^ W~hVFBo_Gg' + +KS?Sc 3OOg7vL&mM )ȰV' S+Wy gX``HW(FSgˣoSs*ko__7?`l|P(-Mi6 CWW#Y!)θx_i>6fcC{sg'sKjzZ#'?s?w ͭi^؀/_3rfWYA `xw?F_s&;'LJsbR.2g;^PL of3c6hV1VVjfSח'*&#'onNnjS?_/S_ginl<|(!-qjOOg`A9/^Fh& )S^J^77cSjr"g;_YQQ!99 +!ʖ rKOG7VV'J⾎k_OzJ/B, P `Y!;f^h΃)W2ˢ>Nk'okK/k/O33wW,?y'qA?xoyaǂ.OF(rKcc2O'"jnj''L` ZQqi'oKȘ2'iOi>^ڣ'S/?' >22/__/{k 60(6hawIzKKGi_nc&66>.~'S +[ RΎn;/3#{#J"SV0 '9W!7g.^jJ#~{B~nFrC/C" +:bbcR+jʛ;~Rjss_Gw_?3j2"RjcbnJKs22#3czb#::Br2z k+c*kJj;K*[{; +:*3[{{3j"z:ʊ +J ++ + +: #cۛK*zz K+*K;k*:z**j* J*;K + + +*+J + ;j +jJ: +k;{k +ZN!F6v/FGnΟ"6#7ȋk_)(h2F ~{frSh'R_s{_S~J"N {ʚKkj˻{+ j+jc{ +K{ +J +k:J*˻Kj +jkK + + +*+* ++k**J+ ۻKjJˋj*j+k +k*K+[; + +**KK*j+ kk++++*+* +j*j + +JkJ +ˋ:*+;*jʋ+j*jkkjjJ +;*j:**+ j+ +++j+*kk*J +*K;+ +jKk+ʊ+k;k* k: ++k*jjk+k+j*k j**k*j*+jj+**+ʊ+++*j* k* ++K+*j++jj+kk +** *+k** +**+*: ++;z+{:kk +j*;+J;Jk + +K{ :ښ[[ +j&fb'fΣ/oRb#s*z"{ +ojF&K'>6~[r#[?K~돃^FVii^/'Vr#>'ۏN;CsSkjj#:nk3J.OSj~O3;*ニ2ڞN;/_&"ǷR C;JJʇG)'V>&~b_ Wf?&wr{ξ{f+{r +^&s__fNgGr*'SjS^>S~kGSn +gʾbGKZ:C{n^2?r>/_f?>gbz. +s_cV^K6WW&^3S:Sj^#w7+ֆ~*zCgk>kBr;3/r3sjB2bOR*_ǟ*" +K?+2 +B3{KOokZ/2JZK_o.KkkRK_J"j{C{KRkËkSʎR;Cn{?.~b_Rj{[+{{bnk[j#c/Ss3ss3/S3{j.k#z;n3>J+/SOXfwj!y +~s>bf&>:SKrj +*CjK{J:ZbrkfhH2Nk7 )99Ww7oCF>F(fF;*?#[/So s{jz"z. HVkWG)iyIWgOSk^f6fF6&>./;/O?s3##sS*j *:+ZB:r xVvVSr)ə wWwח'/F>~&>#{/ C /3ꊺZRR`HvH{?iiiIwG_3&VV/O[[?SCcs"J +"BZVFvx* +i99)wWGS3N涆VxvN~' CggS3sccKrbRB`HxJ2W99)W7SSn&FvVVVh^^"Jbco'OO/O; "BRZ + VVhXVZ))GW7O7_/;;Z.~f6VV(J .z#CGOsGggog/CJ.k;J 6xhȇ!ɉWן_?n&f6((v&~j_g?_O?'O?Oc;j::zpX~@vI3'y7N S) wg>h hgG?:2';'Ss?7'lKY!^8`&)ayy2x'so[7WBkOoB"gS#g'S_''<@YN)a'I F#ɷ#/CX;Wig#ksSn#'ǟJ:['3 k)yi,LYmA9fYVp'`j)I7fOgfXkg'j?_s"Rs'SgsW$L9Q!2a)!9x`H6NVjNgg#*?'gg i:ag(2' /KGik6+Z*S:rZcs;jSb+o3:^6&&N?gO_?g?C coCK +B>NR"J*zb +css3#3oS2ʃkB2~.*{"Ύk 2r +O?s:*KK{*Rnbkkb:K3{/+2J{ +"z{{K*rj{C#j +{cJj{ J {+ʚ* K +z+Zz {ˊ:: +*+Kc"J +"Z ##˺z ; +;*jj+;+J+{ +j*{Z{;K+j**J+ kz;k:zjJj +j+Z*K;Kj+**J:+; + + +ꛛ"z+;z[# Z{ʂ;kJJ *껛 JJj+K{K:z;;*:Zz+K;k +;kj+ kj*k++ꋻKjz KjJjKkK+jj* Kj +J+ ** +*+{ Jzz +kk+* +:ʋ; zJ+k**;; J: +*ۻ+˻ʢj*z k*ʺꋋ k + ++*ꊊkKJj+K +*+k+ + +kk+k** +J+ {;+ + ++++K kk+k+ +*++k+ + +K k+ +*k +* k:*ˋ* + +* +j*+kk+j*+*j*kKjj+* +j * + +j * ++ **jj*kk+**+jj+***+j*+*+kk*j + +* j*+*jjj+***j++*++++k *j+k+***+******************************************************************************************************************************************************V +SiOF?ONwnjzJrRr+":J;j;sJSS 2Js Sk2+"j +RkROj+{" *ˋ2(6Nv.k7Giiח'_3rKR2kS+?g"⏃o,,Wа 'aWYai!W68B(Jsnz'n+^cbs{'_S3#sVY (i;)yYaى)ƏFgv/?7_cS ۿ+ ++[shH0'0z3ɇ(W7awYw#&r"f^Rn"Rzf#2R3 +s/b#k r"gR/ '9WiW?sGZ:#R^>N~nΎr2zj+#{c/3os3;*kk+"jrn>^&R.[C'____g'sS{[Kj2bbn ++zZK#CK[ + J +J: +*K**{+ +++ +[[;K{ KJj+zzJzZJZz+j + **Kk**+ + +ʊkJ/;+‹ +SKR+jk[++{kˋj + ++ +J +: + +++j{j Jkz+jJ +++j+ *++k*k+k* +j+k +k+jk* ;J* +JKj*k;* k+*J+jjkK* j*;k* +jjk*k닋*+k*+ kkj++JZ[#k: +c#; skKb&N9S''>o'R.z'O;jSSc"R2;3F(7!vV3)*nG_^'Orf&*澲O#sK_Wov& +g'ۆsgN'_r.gO:6jwr.O'kO/ks +ێ*& +>.^&^J+S{*r_SsJ[nfsS/j3z23?RFBS /g&';*Rn"? {/ +*+:z:Gg~Jb>&b_>k;:R3:>{3"fro_FwRovS>&n'^Ro_N7_:V6.c#K +2'2& zkjkj{s*r#rbC[ڲKbSs ZJ:["ZJ*jJ:ڂ*2"#/s* k+:/JnnB;zSsŽOrR : +#K*J*K#Z"J{c*nb[OJN/BB:+3# "j{33sjz+k*KK;j++*;kbZ+; 8pаXg1Yf iiS6wy!i'BnOBknBR2ZKS'W3||pr1aY>N)?n_w I9_>~ rf6~jʃ* S»gkB [*ʻga[w)))3O)חj6F6(g7j[bJ;{kk"; jۋ f>~n?7Siiiww'S/ss r.nNnfFf__'' SSC2jʲ8fx&i)Ii)i)7'/ˋR^^Ɔ~>R;?'''''?/sˋBzZچ(F(hxgχ I)7_[{kRn>&f>nr?_/S#czrBRnfFv6>ww'kjrf&ffN2+#???sZZ2r2R~^&&&^r3_ww''/;* +"R^>.Zj[SssS/;;+B2RBrrR.2b2Z*J*+K**;#3s///3[c[ +BRZ:JjK+ +:;z:J +:J*K k* +Jj˛; K;k;c+kK k+*kK :j + +JzzJ***+++ *+jj*jj*+k+zzzk K* + kkk*j+;*jj닋 k+ˋk+*+**j*kkjj+*jjj++* +j*kkkk * +k++: + ++**k*+***k+k kkkjkkˋ****j**++*kk+* +jj++ **kk k*++kk*+j + +k+ +k+*+j+*j**+kj + +kˋ+*+j*++***+******`*S[O3oB{C;k+#kCzbj+Jz +[*ˋK k{*Zbzk+C[s ++ʛZb*~k2K;c;Z[3R?6["NgOrs63ʏ." +Z3K +K# [SkOk2kÏ.K*[jk#b:o#_sc NS{&S++ +zn"RNBZr2>**c*sKۊJJs*[_2"sZJ3.ss۾RkZcs3;2 2_/3B_ +" +{B rS3Ί ""Kk;JZ32k:S;k/rKk3 +[ʚ*Rۂn.[⏚ + RW7ks[:# +3 r[frgOn/{ +. : bB;K*:# +n#.ZK zKc۲orCbK/Z+z3"z R+j2[R*kn: +k +>RnJ_'w7Gg# 22krJ *2NbjJK )P,8FZ !QYY&HxF.g 'S/>^6 rks7'g) lA0̀P (vJYYY?K6^NrgK^>7W 0P6緿I1qIaAWGIz(hxV +w~JR*jS3gq2, 8Y)q!w.zvhVh&2'7ǟ/#z:rrZ+S7iP8 ,7,ȶwY!^h6j^"_sg?3cJk{['18b ~旊Hh6:.r_gGg'JZC/_gpx1lGH,X)wq7;~N[{'7_?S kJ/J/SOGw ` 3pwY)FF86ڸ^~'W?Zz˚;j/gYbp02YY !!yw^^((^#:7Ss3n΂[*۳?S'`Hpx@CJwiaIgc#f^KZ'닏*B*C +3: CkKnfff&^2k'G''OCR"r>N>ξB. +J+;˛; k+:b^.;cggg'3jzrR.nNnRRbbZj+{k c{ bξ>.B*Coo??Sooۣ[zJ +B²2"2Z +z:+K{;ۻ*ښRr2nB2Z**#3s//ssS{{{k +:BrRRrZb:+j+ۻ{#K;+::"J+*j{[#s[sC#scc+zj22r2RR +jJ'C.^K KORr&Λ3 +?3Scook[Zv* ;Z_gk[ffo~n{fo^((H(bbg9i9ywSFFFc#gsSr.n^. ooS_g88@@h&VY!1:/V[GO)9/f^ξ^j7wׇǿ',L8l9AqW66B (ƶ"ϗIi)O +(h&>{CW_?k#?(x ZA-aa>Vxxf y(&(VΎ 'W7Ozo,@Y>AǁVX&y )'v^#WgzBʚ/p&h`yqAaAdž(nj*G'.&ƶrjj37_O3r.+ +_h~HH@8G6 a!iay23/NSs+JN# +vCg'n[z>kSN^f&RO'gLJ'?#:kr.>.R.RB:j;S3ooS3s Zr.NR."JZj##[??O?/sS/3#+ +j"2..NRbrzj#C[ˊ+;{jzk * ++r"ʺJKS#S۳Z* +[K"ڋZ2.*KzCۚj/k{kz +zk{j[ K#Jjzzk*Jk*K{+*k+J;jKzJ z +; +* ++kkkj; ʚj˚;;kj[jkK+ZjN?"Czzc3rbJk&3;Ƿ* +N*>33O_Gs;3*V#:ZN3"_or+N2gg"/Jo˺Ο^':^ZK +z/ʂ;2j +/.jJ.b? +r?sK CrKs"{"orSb:S;:Sn .oB +b ;j;" +C;jK33 CC/{cssSs*k*(vvX g!H`(gO!7R^HFV^{_GW +B>R/__ &wW Yy)OSN +WHFfJgwGOZ: nZggǗW)ف(m_-y؛ a9sf؀gc3I:fHn2JWy's_Ɔk#ZZj2>ZR +"J:b:J*/C3 {C#{[jjs3Lh-!GaR+&h 'F&()+_xHbJGIi__ORƏsjC^2s2/oF)ω9 s6)' /Gv&bG2g"Nf*'O2zs_ ?˚Z3?PhYgrI6Bgk·G*^~ +(莿OO2NK:[zZBK:3oZ0XnN?_JnO3zK{:"k +.s.b*kjr.~3N>S#>2C#Ncc{_OSGsO*J +7[k::&r"Z.N/cS΂Osξk^;Sg7CsCjCS/22'#B72C7JSvdž( N> h3 +ËB/+r'o'32>zJ~*j&23szck#^*+N^_?g nwS.RSwZOBsf ~ςoG'{^3v 3zjWso~8)&;j>f&*3O/^N&zZ{O3(&r_^ +_~b>2_B +R23/*O;/''kۃ.2^JB^r"Rj>k.c;Z+b[[Z"+ +;Jjj +++ʚ:JzjkK**+j +j**k +**jk* +jj +j* * ʊ+j*k++jJ ++**+*+ *j+ j +j+jkk* *k+++J+ +kkk*kkJ*k+*+ ++ kj ++k+j Kjkkj ++jj*k *+++*+* +jk*kkk*+kk*+k *+*j*++ +j+* kkk**j+ʊ**jk*+j**k *+j++*k++*++*++*jjjk ++j*+ * +k + +***kk*ˋkk*+k*j*+k*++++* +* +j KkK{ :*jJ+Jk ++jj+ j+ ;K;z:r`㗇 .JB{N'3G2:6+;ÉsÂ;^^b#O3g*£B+ bǿ['[ۏr{#Nj/~ʚSrcZbB_ +zCRZ2ZbZ..ں+*#[;c3'O?3O/sc#k:Z_l`GiN=q ־iH"yᇳəy)Ƹ2&VF'/j>^ڊ0lιQyzvX!92)׊>IW`$W& qhH'F6y*&h~WrOh>:*+n{'v`yi/.RgGRR??cɞ\Gy¬i3YW˘8r?iWrV~r/Sr&2: +Ii*nRڿ> {S;co /gW)dLፑyi( ':h)WSN{ fj&> +3s^G{c;?'*rbj*j;Gw֜ܐ*mh3xrYir*;뇉v2/;~fk/^*2^VHwRr++3'Js/[kJCw|sm h(kh^!19{g>)W6Vo^sbrSNv&7G&ۿ??.Rcsbÿg'ǟ\ Yh^(k V#[N&W(貟#_ +&ΛC"h()y(~oϛo3 +r2C;+/LJ+$,H mVB67A!H_7OB.zwiV(C?:ff/g^OHb9 hg* NZ[r g#p$ mYBhaY6^[BW^^{_kSچ39i"V gkO'~ 33[Zc__[ \-踋#VֈaAYv^FbgW _VJN>_O&3K3Jk Wֆ3;N?/Z?C^x ow ^V:j>6'.r3O^6 32~SS꺺3c/jX,7X(*A!:3f gFj^6k>2j +RS2~/ +; /jjJ ++{KC/ +?aqY)fGfh~aW#sV6[W>2z&j_3n+>6 +gk"C¢sS.jۛ+{{B/ +S?(_9y3~[f)ojJFwGO&~^^n+bzZRhVW z[snkC +* j*s3X@X YiO? &F^  w;j;_G_.>^ Ϗz"O3 +r*?++j;C + +#;{b HA!WCs{~ָ'9Yw{JOo"FVk'kn.v³ϳ#S*{sjjS'rjk;{K;*jJJ +K3K xaozVǹ;bf^'[.~n&&RcS낲*Wy暻+;s› +^ 2ꃎF^gy)'[jn&2 c +~//KN.RB*/*J/o/cJ::jڂ3[:^V y!IsSbrW˺:*r2+"R.n~(Z>'?SJzco{{2"K;":z;;*Z^(8 i)W矟S3{?'3c[#2n""r(/w'/;ʣoos+3bS#Zn.*b+{*2b +^(F^G7_'ã3/ Kk#JznFns*rʺj[;Sb+{  +rڊ: JB"+Kkۺ^V^''/So_o[SS +K 2Bn:C#+ +jzJZZ;KkJ"z2J+JkzjjKk+{Ns#S3sCJʋj +:kkj"+*kZ:JJbZjZ +BzksJK"Jjk{jK*z#j";#zk;;{c{+k +JJZ{J+K[* 2 +;:kZjJjs +{ZkZ:*K { {b +{:{{++*+ˋ*[jJ +Z +k**k ;+:*jK*:k +Kڃ+c;jkjKj*jjk kk k*6'orsjʾbz:*C:[j+:+{ JkRʚsfg +W +*nʢ2*#*{ +s +ʎZSNnk*J#+J[B:"zZzJ.K{*kC* + ;j2 {Z{K"#3k;Jr{{곊JbB?Sb +*B + "{/2R#r{ j +;*{ + +3J [ +z+ jjj㣺sjJ: BSs.CJz j +ZKjjjskczj;#" + k+{ +*˺+k:KBJZsJ[kjz+j#{j +ꃊZZKB*[B +KkKZ{KzJ:k*c zK +kzʋ;j"ʻ +kjj+[+jkz+* *Jk:**J* + cKJ*; + +jJJ#Jkj +{*JjJJk +j+j+ʺ;{k +Jk++{kj ++K{K: +*32cjj* + +++jj+ʚ +[z +*늊j+J +j*zjkkڊK+:k+ +J+KK +j+kk:z+k++K +k **jjjj++kk*+k+kj+j k + +jkk**j +jj*jj+jj*+++*k* j +j+ ***j+ ++j+*++kj*****+jj*kkjkkk+k +j++*j**jjj**k*+*++kk+++*++++++k**+********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************JK*:jj +:*{*Z + * +:J*jKJ*kj +{*J{;* +kj:j+ + +jk ++*k+*K{*j+ +k***J +k *Jk+ *J +k Kkk+k* ++*j***+k+*kjj+++jj+*jk*j+*++*++ + +*J*+*jkK*kjj +jj* ++k**+*j *j*+kkk+jj*++**j++*j+k* +*+j+ꋋk+**j* +jjjpF_Ig.j{^^bS+r>R:jz sskb;^S zfڇ'N^cr{2k2rϟ#.jr3*BVo'?~6FS6n"S^ ssΛ^jJ?*2zϢkj{*N:./&.oK;ZJúScr#CFOJN Z+cN?knz#/ZZ^ +^;/^/fC>)[67f +O^¸s!sr^~>S~_JgRþ2Sorkb#n+?r" +[*&;:gn>w(Fo2&z_w3{BGv/2Sjnr3*o{?sf'Nk~~z*.z2 +[Jbrc¢jZ:j˲B#sKO?σZ +/Css#k/{[2,Ь7Giq!9ii:~;#r7SR)_G/ +F.~ +po77A99aG+F2X6F:Www3SrJ>nN۳_'X00H({!I-yAgGV:r/)WigO".:'S" VV/W቙A _WR(((&{gwW__/3rS#3lC؏А'yy19AI &. /g)gsۚzjs'q ,7`rI9遁wy~O8VbG?W?_zS3p@L*ط ُəy9ai!o82R& +Kj_#o۟3[_,"̖l@'i)^aYyy^7(k&NS3 +'3og;oó_Aw,À8CIy!YI!_O^F S3/S'3'"sS0Zr9!ه)GnhNfB/g/Sjr^J6/ 7IyIY[iF+7fv3&C['cngo.*nN&nHoX^LJ7) i /iGgs"r+3r2+f +ff>V>~B>FS3_/'W')C3NzZn2Kf"nzfZ&nk2^2B*&" +{J*ZrZSrJϏ*7Sc__ GfK+:JsRN*srNO~Nw>>cO[/rjRof3bsB3 +OS*SSb": +CS&;3;3. +/R^#2r3jjBZS{S+kCccR.bk{KrBNZN/ŸCnzCRb2/+r +>zbrO~ORb"2S+s +/z~_B3 o.{&~gsB+Nc?Kz3:Z {z>#n[#R +ks:Z:~2 B//+3r2B{RO ;.:'^+.#k;;sojS^[j#{ +S2.Jr3;"sgj?kSkk +j{c.3bڏf +{b[Rˢors";R+>*::*z"[;[/JB*:[3c:^[k#CZ{skڋ/s2KKZn2/{>3#k + +B;kʂÊ[:;"k*: kk:˺ ;:+ +**jK*::{+ +{ + + +kk+J{;k +kk* ***k++KJ+ +; *j;jˊj+ +j +ʋ +k+* +j+*kkj+ k+j+*K+ +*+j+jj +j*+* +k+ +kkk+k ++k+***ˊ*k*k*+kjk+j**K +jJꋋ*jKjK*J*Kʋ jK++*+k: +*:+k*jkJKjjjk + + +k+k*+ J#Z:{ +*:{*ʊKj*KR{[rcbs"ۛK +Sk +;kZb:+Z#z/RZ#rzS&bzJ +S.sn{[2C*{ ~n_"zsJ*;R +΃ښ{b +Z#2S^jJ+ RZ BzCS뻛" +ᆪ~K 3 kO +o[S>/:zoJ{k?koo.ズN'svBB?n(RG~Wh'g&W('wۇ(';[kix_Gr/VfoZS(w_/sF WG&Fhy6hYg + +G(~ .Nof_^js(W(7nCR.6)zIZ:6#97&s"ۚB2"IH#Ww^:3zf W~sS&3(ΟϷ_Ƈ.(~Bwrj.(_GyV:OOvhjv#2s Ƃi8O+2_6WiC'hgH)f/wh >*bb_.Ïrk^WϢdžË*zBjgBbR*3BCJ~JOBOcZzN^f[s_wg_3CSSOk3K:))p,- _mb))(Gb&{_sr‹''/;jGW DV`m1R1h_^hַ29?;:^8*GW_ +SS{oO'?'y 2V׹Q7 r8&FhƖkWgZ!Rg6(v') +ZR;s__7wG(&f~rϏ緇3OJ+Z+JK##/g_x6`WfaS&r&f/3/3&r¶N.?[;J2⻚"3 ~.rBoO/sS#cK KJ +s/* JjJ+B*zJ2: c[c[ Kj{;B # +;jzzzº[+C K{;zjjzj:j +Z{K {zzz;j:*j z{{{#j:Jں +JjK##*j +kJ*ZJKz+Kjʺ [+k{j*+ j;:k K{+J:JjKJ;k;;j{Z*[j;KK*: +"{:KKjz+K +;: + { ++j+jj˻ʋ{+:j +*j:; Jˋ+*+;JZ + { +kJjjz;K:*z#Znk3{:[C[ +J#Z2*c;jj*:++*Jj +:jkjk+z+J K*Jkkk *+j+ K*: +*+ +:*+ + +;kJ:K +jj +jk* kj: * +* * +;k+J*Jkjk* +j+j +K*j+j +kKjj k*J+*:j K j ++k+jjj***jˋ+j+*k* + j+ k J +늊++ +j*+kkkk + +k +j++***j닋K+j* j + kkkj ++j*+k +kʊ*k+k+j**+*+jjj+kk+*+ *k+jj kk*+******************************************J*+kjj+Jjkkk{#+jjz+k ++J:z Z+z*;ڻj +[ZjS{R[Jkz+ʃ:j K +#+#/bzK3C˃+*SKJ:OcB +KJ2{ *΢b{J*/ Br2+";K.:rk3{rC: *3K{ۚn":jrr3;ÊJ~**";?.꾣b.?:Z:~ks#[oJR"3Ck ;ˊۺJk#r3#2*{ʏ +j["*ۋ;b{[#zKZBCzZ:S_J_S3kr*JKK#kk2Bk;jKjj[{#:z + SK"{kjz2Zj "J{srb.K{.^(F2rRW)JFfhv6+7W7gjoǿBn&Cs?iVָ0^YF^(gC WGJFֈVh&^wc +k^NSBks.o{X&'G7)7s3k3/SK:r2NΞ>Brz곃/SOso3;c{vV6(8(fWi7S:.FFF22j/gg'_?ooSs3S/^6xX(/iיGW7__o{n>6fVvv~RnC3_g''?ooSO/h(( +(VLJ.WLJK[n&"~((v6RBns/'_'''??O3ss/RXv8&ذ(GϙWɗwW7'_/:S&>6v6(>R;˿_'g'???/SCcc6`Gwyi yw7g?J^b^6vvv&+JOGg'?s/[#{ x`((@_IiwgC_g"N>FF6vv&:S?g_'o?SC3؀` iɹI O)iW׃۞vhV)a&Kg'o[_sgl|pi&_!(xWZr 1!_77.{v6V/?/gGGo)\Dl0?!YH`i7iyy9:r +N&^V6'#?#bOg'CW)3{ʢg_O;"O_3+S_gO`HIyiWGC:z[;k+)zK; +BN^> +2>Jk:;OCjڋo?#2^v^c_g/+kJN.nR:˛/c/?&fֈOgG'sš ;^~RbZ*3OOO2v>&(fo_GO'/;kR>"+ssã/?O^hV&h&nRg''''Só3s.rZ:jR~R:+:{??oCC/^hF&Vh&oww__?/S/㋢nBZz껃33ϟVh6F6j?w77G__?3[/c; +#Bbr#33SSo?:v6vNRG_O33{닋RNNzJ3S3JhvƶHv?'W73+*s{+J;[rnR22.3/Ov6vvR?7W)))/cc[ ;{*Jzrn2r. Ks/3V6ƶvhV:_7W)WwG'+;c#2 +2nBRn.z{#3OSBƖf;o'Ww'?/z+KڂrRRbJ +Ccc?3FV(bsw7G矿K +ZzRRR2Z"‚Z +*Cs//S3KR^FFVjS?'7wg_?s[JrR2~~rں+k sSooS3^FFvnVoIwW鉷ςFJ_cJfv&.**Jcg_7))78|,(qA9Yi!!W9(2_'GGϲ?B W'W\ܬ-qiw)Y +aY)GIFFwG_/Fr{"))? '׬|l-q))iaI@,( A O9y3x@iR77{F['b3gGgSϟ8lq !Yi0^i7Y`@ IW(;wgSGGX<KFw!IHn3 +GIO? ~zǟC'p i;Y#XVoSYa!rfiWGnZ&o'_c[r{7O37ljd@a#-pXY/g'`I/nJɹע~?cn_g2o/FNFB.ks/s?COS;r +; zcs[s`F:!:8ȾIa!~)g6xhZ"'.fJ_K/j +{"r*(  [G^K3r;Z'nzSs.''^{nksOO[?&()yI Fs`9iN!!NVk_VN)I&־ojGg zgs ~"k>^^"bz;[_o3OSc3;rz..2J@@^3f_WoS#F6C[)n>n_ +/Zz˺'{돢p'b'If(OW3y/6fo~r/^6b3>f>7 ??nf[/7gON>n*zR2r.>&Nn+C3/?/?3{kjB22BBJ*"Rn2Js?+:#ocóc{c+K37|(+qy^WNaחr("3&'vv&_snZ?_{Rjf&G'/o ۊ+s/[::JbzbbR.2~N.2R+ s?ϿS?S3KbrnRnrBnrjj+k*r6~jr.nrk# +_'sO[SS;**Z2:{"Os3s/s?//S3SS^ֲ^>r:Wg/gSS:~fF6&&&.{?__珏c jRZHhxƚsi ɹlj7'n6f^JRO__'/'3CۛB".vhFV(Vn~& ׷wW)7_O'k^&^fF~"J/'{[3 {bbnr.NF&f~&R+_GwWGG#/ ..&^~~>;kcsCO ++bb"Zr‚.2z+[c{{cKsóc{{;+*j;ʺb⢂:2k"zk+ {*+ ;{K *k*kjk;jz*Kk; KK[ۛ{*k*j* +Zz:j+JʋKkK +* { kJ*jJk +JJKK˻+++˻ +*j +*K* +*kꋋ:*j:: + +kK**k*j++* +* *j***: + ˋ;K jk+J*k +kj*jJ kK j + ++ ++++J + + +*JkK+ + Kk+jz:ʊ+jjJ*+*^f*7 +'z;+[ +j+ (Wɖ_?&bSSCsۢ3; +z;b>HNSv#VoZ;B/kJz .3~CB_fsjC+'O~zDz&;^B>/ÿ;˲ZKn;rBO#Fw۸ NfO/#))>b+ +6WwvR7OnG.v?#ndž#>S&﷢^h+I6IH(O&7C2r >_f> hRr)RGWGζ(& 8>O&w_'^6K>g/Nx9 N^VgN6g?'2vV _ohG_hkFO?:RBNc/*r?VrkSr"ZWf'2'rg[2NWN3'Jdž+VKÛgOb瞲r7+#ok/OfS K:{#/~G{.Ss.s:*C&2{c&^J#3k"n {""Jn2?wCzcC;s +RjROcBFowKZ"c:[k/ڞ/ڣ"#c*O^ s..roc2crj#?sO +kZ:_j*;Zz. */"*:k::cbJ;BJ3o+ϛzꃳ{닋s2"2ŠkzjKoo,(Gy)矃WW +r(wIN>r3*{?f^ +S:.W|'yA!!z֢7w ++;G)gR>*r^bfgCRκ_w_BF&__9ۜp;ّ-IO7_Ƴ )wS&KrN Ɵ9Ygrf2>;OgG ~fow\|퍁G /k YGƾ2J&#>?/CB6(wii&[.n_W|Z7wsrN''n^r^[ii6k''o//os{o:s9|LA =a8i'H^{ 9HH~)7^;_׷c>ێf)K2;[_Ϻ?Ú.9k\l- 8>jK(AwX&79JfBVf'/o>/_/J_'O"2CS_w)0dX-!S `H(Aar_sRhork;Vgz[/ b 3_'C.J[gWdq wɁyxJ*Z*i?6ffj? .;_gSzcGi"|h9!-1^ 'h!QsI?ViRvzRVf.o;+o?{Nǿ3?RjfL{)@9f!Ga^8?VZ)^7sv;JGǃSR'b<@H0ag_3V?NVv oyJR((vR's 3Szk?oSK3l `(y'!yogFrw''W'Fo:[?:jb__'?x@' I i3v>OW)jBf('ZBR{[ShF0h>Wi9Ig7/.Ǘ7g'Kf^VRzogO *"kZ:#'?w^`(^wYYi^"^Vrz'Ƿ/#R^6^Scs;J: K*:/?f(X@[9Yى)cnVƎb 'g?w#R.rF^+⣿gg? ++[ ;?vH 0Vȏ7G )#f +37ok^~ffRCj7K;#{c&w[W8x.V I! rN&F{oGGǎVrChRGk7 +c?z#'f`H`27Ii aY2V>*wgڞv~[ogR.z;**S?p؈;!aaV6HhF*'wG)'bvv;3gŽ2So_Gg(0,J!yɹvXx..9 ws(6*3_'wwGr~&~gg @(R+1QQA_coH`6WWI9~Hh6)7Ë RF7Cs'`lIqqA^F~Vȸ(7o[~VH >&*js3bξBK.(`^[7i_{Bk;^^R3Rnb*nRZj+ +" c +j:kj::kkkzb"Jzz:ښz* ++Cc#ssC#[Brr2b"z +*+kKK {{ j:z +* +*:"jK +K{ +k +:K{;;cK jkK +z* *: +*z":+ K*k*ʺJ + kjJ*k kj + kj:j**+ K + +** + ++{KjJjʺjK Kˋ+::k k ˋjJJ +kk*K kJ: +* +K kj*jkK{+++J +j;k k Kkj +ʺj**j +j k+*+ +j*k++*+*k *j +*k*++** k++ +**k+ +++*kk++* **jjk+jk +ZNCz"jk{ۻ+j ;* +"BZڢJ*;;ۣc[;{+ +˻z:"jj bj +k;K;^kW_ ((+Ûv_:R&^>3[ +Z"z ;+f~#Nj*'G_fFjg+rRBc2B + +kk{+"*"K;zBKkR&&CHKvg)NvZ_F+Wvf2s*^oKkϏ^n㇇&Jo˚n{_Onsf>gÎ'_sfr3s +":nkZ2 ;KfZoN^Rob3 z.BjS[+Rjϳ.N +?6ƞN_n&CZ{+R㳛"J*Jo+ +Ï?kn [/C."C/_ +.nC*rZ +"kjBrKcsZScZ2BzK j:zꋋjں{#*J CJ: + +Jzjc?s b.:3C[+Z: +sKz2.RKs +"+"J:KʺK[SO{Z2C3K* Kk+z"z#s/b.R2*/Cj*jZH`xg9 ?&n#_'GgGLJS+:22 Sۚj#s{/ L<$,1-h)iW+O' +NjkrBNFn&:ƳW{^bǿ/ +"":S + `gw+88H&W7k{S;FbS{ (9 )7nf~Cos#plױ1 xXF7_:S7ϟZs+z&f&COã Z3SCs+[+{ ++J +3gGS , pmGX7ayNbWGG3(s_Ϛ(v2ϟG2;[JrrK//oC Jrj/wc`,@!-msx>i'^RRVGK~VO?o3C {/?/ 3S+J" G;`llma8@)+3) 'KFhϚF(΢/Ss:CSϏSo KsGw{`l̀mm-yXX&G OBWi WRv7Gn + +o3*{Sc*oszj[/o_7 -m-A~O;~y'^ȈZg"¾2F6'gO[k#*#sos jC::SGj0L Y28_o_!!FBS.&^gώvooSBZ [/_"3?S;:J:+gphvVv~k7GoR./3ۣX(h8x(&9yI iW7_cR.{ +*KZnnz;{Ks[#{;kʊʢB:zrRn~~&^.;s?'ww7g'?o/s +ZbrN~&^~NNRB; 3CCCkJ:rB.>NJgǷG'sk~>~R..bJ+˛3sc;K +b:Z":zJ22NN..+#3_ggg/".ξ>nR;{[c#㛛;[;+* J:Jb2rr.ξnrrrc_g'_?oCjRΎN>nJ+ KC[[kj+: +zBZrr2"Z3_'?sk.Ύ~(sFCj+KccC*g3*oۺ k2r&BZ3gG_3zB>b^*">SC"S+S; K +;ûs :: +k2*"^fVV6N'wi)w{zr;{ +*fn{62kg_s?_?czKJ;;+ 3 +VX^h֏Iay7 f涆RJbO'?RxiC)7'Rnˊʛ?+;/hPH`:!a)yJhh&"6j7S)gsOz6V(V~VY?_ /"Z:3g:*ZcC8LόXyw +(ggk9iΖ^F^/_g^חc'2&Nc.{S?'?'2`@lYIY!I67)ywwFvf^&ڟ?O>n^f^xWoJ9I_w_. +Fj{jS'.Sz/ZC[F&@aWannH[S_9WwwOvƈr.C+ +&2nr*[s(~Gfsg3:" +Ss[Bo3jzRhyI)Gjsog77g/:N~Bk #2~닃û뚺rH^Gg[ZjO/[ϋ:{J*Ȉ(gKZ_#[WwO3Br[{;bN΂*{*:(kSW'R*/#j[J(X8 Ii ɷrcCgi 7{f*;3o{"^&&f.Kcj#;rR"2^+O7G[nKz[+;[S#2NxnI3_?f' w*C&r?k2Z[FB2^~"bSS^ˇCJ B*{j2+"BJ +(8HVW׷SrfǗ77W/{nz‚RR&2N.bb{{*N*cǿs^ʎ?r"ڃRRZ."((ƈf[Ƿgo?.;_gGK  +B>>n.22" +.K?;/#Sj +[ۋjK+*j*JJ +j + +bn^2KN + + +s/ϟSos3; +BrRnRjb{ /#{3ScÏ/3;jJj" +ʺ.~F~&NzzS'?{".R>Ύrbz +*+;ۃ#:*3jsSZ+sC;ZR^6^^r2s/;S?O??ϏCr>.n.2:j{ۃ3[ˋ+J:zz".JK"+*;3{ +k +:ڢBb"Zjj*k ;KK{{;k*kk+j +Jʺʺj +*+j+kk kkK ++kkjjk늊 + +ʊ*j + + + +J:Jj+{;{#[{{{K+++* +z"bn..nrZJKK{3ssSo//SC[;k +"rrrbjjk;;#[{k+++:JzJ:J + ++++{ ;k{* KKkk 닊j +* +Jj +*+k*+*++*늋+++kjjj**+++j*+k*+k **j+kjj*kk+jJ*+* +*J  kK*K*jʺ: +j + +jk*J* +***j*+kK{K ;{ ; Jj++: + + +:JJzz +j +j++* +KkkK;k*+k+j*+ˋKk ˋ +**jj** +J:::z: + +Jʊj+k+*+ K ˋk***+**+k++*kk* +kk++*+ +j*jJ + + +j*ʊ+**k+ K+닋K**kkj+kk+j*kk+*+*+k**+*++*****+*** +jk++++****k++* ** +**++k+j*jjj +j***+*j+k+************3S;KK+:+J +j+ +: ++J*K#{*K; +:*Kjj+ +j:j+k k** +kkk++j + + +*k* ++*kK; +j*k+************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************* \ No newline at end of file diff --git a/tones_american/cause_1d_loop.isdn b/tones_american/cause_1d_loop.isdn new file mode 100644 index 0000000..d595582 --- /dev/null +++ b/tones_american/cause_1d_loop.isdn @@ -0,0 +1,254 @@ +*d}EьDH$]aF>FfFn3;7Ƿ''ϳg 8PlF`y7aiWor2Z~n#cOo;.2J/_GGׇ',,8 ^Ay1Y{(B_I"Nֈ(fWWWWGG'_))0p̰6i! mAHHo!IϾX`XV+ 9wGg_>cs) (pY-Q)!1i؀fSٱA*'c(p`&n"ia)sV~77wW,Ll`A9ooVX`xƗ!a9I!! HHHh!)?KC~6GWg_gЌ F 3wa1ɾHN.~ ( ()w'Sk66?73#O>,,iWYgF(iiI9yGHXHs[.C7n6/OCNGl3!Y7Ǘ !h /)366R/9O~+_LJ_ Y ddxgmq@6aэmXH~h(W60_g#) I88:*ۋ +(ǟrJK*ZoS*j*Cs/3SC{ +: ++C;ˋ;bX`F Yy6^f&37yWOhhοgwGOJnRCO[J`VAZV&Jrra `'))WO+BSG)7_7| M:Vz&!A-с,p)a)"R.{^hx>i!Y_h +GgR.#&.+k*^VVv_www'3cS[k2&6"鹹)"&rg7?3:)`02͍1ږ vfZqq;80hiy k* )/.../?/B27)i`vQmG.8vf&fI! ڇww_/+ + GW  Lи)mAYfB:V^3yy*f*cúN2kj + Ã[[3[zrff^nB+O*ZZnR.RRr.Nn;c#s333z;3C㋊J"ں +:*++ˋJ;ó3C#ˋKÃJ +zB"*zJ+{{+k++*:: +#{ Jb"Jj;k+;#[rK[ˊJJj**:kk*j:*Cc:KKZ";jJ ++ Jbz*K# +zk[cKJb {+*jʊ:Jj +K;kjj:z:+k;#Jz k+ +Z:k{j +Jk +Jk+kk* +Jj* {:z+{K{* +:kkKKKK j::k+*j** JJz:* KjjkkjJJ+ *+k+* +*+k kJ:j k +JJKkʚ#{: + Z" ## Jښ: + +*˻j +j j +k k*j ++++ *JJ +Z&{>"K/?s/"rsKRR>s'z :JZ/RZn*" Rgv+b[?3*_:R*_gKNRcnsk +CJ~Zg.wB3OrʎcN jr;?Cb7N2i+SWBJ".:O#~v(F{(3&'NNywc'w[B/_^IVv3O^hN^HGvI^ؿxNv&i i Ϲo* &Zk戇v>VJ&x)H6&) VA/.!HZЙV!(ymP +Ix/GH?ֈF +C>)Gꇊ) +i&V#qKiRaȖ؈jڈh7W./8GI09X I^a(7biiVw^ +&9_q/WO!8fI(˞WG_F᲏ȷ@Ƙ xi`0'xj6OV(qxgFV2avwB@f9&^gfQbibYh(~?Gnh8[.7v)(.>WxH)*7:Jo^W+rfY oXF) hgf"j/KR>{W_[/C;&?N'N7gNO{:gk_fRj{*f^s&C^kRC2'{: 2.n + +SbZ;#ۛ +3SR/{OJ.*bbjz&ssS[R{ k{:+Kk;{oc/SsˣC ;+kKc *K{xH(7yIY w )''3 {R~^~6Bn;Sg@(`02gIaY9! iɟ/{Rbf.^2#'g'?_@H`H':YIA!W /oKJRb^F>z{cS'__(xV@8V׎ ai9)GC__::;bN^kJS/?OϟVpVpw>!9)?S#""F3_?OSg8(xiRyaW w';__"۲Rf +S'__o3'0(`&0PV#VOAٹ 9G#/ssjrN^f~~[3#gSsO&v0sWwYIaw wgo#J~bf&O3 +k3g $̀0mYaByhh7&I!!w'{((6>r3_/SS~#jL!*bq!_iW^hF/s3NVRo3{j3{r>2j ፑsWǛ6׹_'yɷB6cS"O'Rsn&N{P<@)_)--1:wSGxCI){r("/n;C>f&RJ\Wns>!-ѱ +w3xHigG W +"v({_[Ww;>&*f^B;a-ai_sv`h3_GGI3b^fh{;#OW)oRN&*0ܼRnGq)77xXVGgفY/FVȆcS;icnNںb>Ng|<,6A-y鉹_(*Z'I?36(nJK#)wozj:n~S +,,`^h( qA Yihh>+.fyW'/&.3G_r2^R"_?쐀vh;9!9){n;6" 'cc&&^fOj>J"JfRB>bs x(k_iWii?zc_/ZJZ":nNNnf. +~:rnF뚚C#OB{b;:º"+ +'/o'g?++OSB#[[+.J"~N: +R +* K+sCKCJ~^s/[j[Jˋ2+/S~nR23K;~oksKNsr"zoKʷz/J*z#/JzsrKn[Sr+ʂ {k2z :C'cRC+S>[Λ2[; [*.s&r&ڲ +úr+2KC_zC#++[ +NK_~Oς J"Zۢr^BozO3B +OzksrOSσ.;Zʛbڣó3SOC*3"32RK/;s 'j3z+rk{K3/ z*/CBKSr.B +/szz*.+j2*[nn?;n"3 B"ZkRzڃcR.&RZ c //bO/ "b3n/S +r/b # k/ +Rc"wjK/ +R3:*bkZrZn'gN3zR#JJb +^{_?^6fO_;~[_^s'~.F&z~br'"RJ^Ά'2/zF.^:/g>s;VN_(.^V22N3j#&ZogFRwr#kg./V??g[?Jr3kob3/ofRk>?nRj'CʣKR_Z+;o~?b^/#2F^nn~C_s~K#~.k.:*+n2 nRoo{r;kjB"{z; "0`f:IIK k3?wGO)k~&&ºϏ7|pFָVaq !1a#v.giG#>f#'*~C :C.z +. +sX6X1A)I!!W;f#>fWwo;r^#/+rBBbss'` v6 ~IY)ay6F~ZS 77Osj&&*NrSZÊN&2Crop0h9 yaW7zr{(7Wi*n^; nRn{2 +J.f&6 +/>crȸ^6)W7woO:Fz:Ϗ/jO[g 'J^*ʚ~N^rk+kSZ*&OC"b?n" +scgg~'/3?#&Z֞({zS&"kgz_F{ggsn'BR.;sw"+R'ObF_2Gkϊn3W: rFF3C6^rζ_ {S&~ "bFfsRFcs_ oJz^RORrngR2ZO_wr fr/nfrRnS[ +??_s_;"G +R/[jFC; f3*3F&j:)jˋ{z '/#RJ7'cZ^2k?KF[rWV_*;6.&(fVR~*&κŸ?~Ξ fw{O_Bgnv*3r22&wgo&W3wgg&^B?ffaofBnnI) )WHw2iS>) +WNn&wA66zHv:)`>^?((!nr'zB#f[B/)Yrb[sWs + +*/Ok_'/3Ç/vGg࿂bSVb+7~_jSi7'S_xZ)g&c o&[kJz___y"H!'Gn/V2ZJ&Rg>rFΛ2NjSh_Snn +>& +3cgb^R7'RRO{Rkvok/&&_K^Sw@`'jog&NGcNb+Ʒ.'~vrﻲbǎ./3ڃJz'~r#jBRk"rc##b*[SSˊoS.f3"+#3 +R6(8Hk_WIɹiiWO'KZf$|V)1Q!>fR[Z6׷9iis6'B'*gs<^Ȁ(q9V2n()_Gff2GS'_'<_/?ﳢ +B#3k>  )Ig_6 `@R_9!iw7FƆVgo'".Bۏgggw)@@0.)iYiZƶv#O'C/ZRnR:ÿ/W@ Hp@CǗAa))vnƖ_G'_S/*^o'S'@P p(IaA9>f~v(K''onB2BC?/7WZ`xp 6)?9A1iI9(fn^gϺ.fڏSOwW0` 9IA1If(8莎:Wrv>&^?w_G' 0@`p(Ga!!yC^8ϊKO_"f6Ά>B/o?_/oWn<АXpwa!Aw&"~ g~!i/SSbffG'i +?oڎvL( bqaa1 vRZH`.7Ri!aSHv.^f_Wj^ L06@XYq1YkX(3OiS_7."&ϿWzʳOr^f 0i!yQbgXFz^>9gחnVR^ 'GS{S>&`l0sya9Iq)Ch*~/)IiG7'3fR '#KgzB2J.f @8h {ww AI )W&f.RB +/ooSR +nZNzR{ jk KJ +;kz^~n[''gg''?S[rn22+ +": +"z: {k; +JR.R.R.jk[s??OS[:kjzb2bRBZ":Kk{[;kj*j:j:jj +K K{[cۣ/[k+k{[*ZJ*BZZ""Z"º+ K*˛{{* +K;KK+k*z +:j"b {;;#ck +j+Z:+*_ob +[#J2BzJ2 +jkˋk ++;#{KKKk+k* ++[[*K;j: +JZZJj +*+Jz{ jK k˻ k *+j:::ښz:jjj*+k*kkjj*+K˻KKʺj*z*z* ++K**+Jk*+kkk ;ˋk*+J2 )> [ʲr2ZBJ +c++ rsˋSh);iN/"2+Xsozj^KV +g:o +K2FsooF2k^fi λV +֞c"W#S'G_^vcwg6>2g?VwO6)g(.2i(W"g +C_R6r>_^_frrN.f3k&~OS(o +ַnw/_.O*_CF>VFK_ihf~(n2'S#2˞g{>*JB./Z[o"jO&_n?J˿CCRN[C&/.jkb:"~sCco2K2_nOsڂ:fSjKKβ/sOkckn>^k"2BRg.:ooc;۳*;#;&/3+ /rRzŽ6&ZOjnncz΢2KS2"/C{Cß'#o_o +Ϣ{on.j3ZbN";n .¢ƾ؞w)IYY yljsCRr;So'zs#ΎJN~2l `6^iсaW).F6h⚏)?'?{;;:OS#swf Xp@2aa sFhxfֈ"WW_{Ksc/'dž0>vl0x־_ i1 wC~f6h((6*c׿'۳2{w +XHp nWi!A 磾(Ȗ^^/.GGW3+'[Ks_g_Rxڌ 00Vi!aig^fFCwOgksr2#osW'_wg&0R `h>'yYǗsn6RRgoB^^&R痷'>X` vYaAaٹg{&. W*_".>f^R2??gGGwS+F(.V,ƬxO7iI)ɷ'?KfnJZBnn6f&&^2k_{R"&0@X vH/濉Y!i7)?Ï'swbw^(۶&fc'ÿB&:fVNV`vXRF3Ww9)!i9gg/g_So>vR{oOokrξ&2f&f6踘>)y7WW37fGwG.:R;^~zβ2*&&~^fR>N֖hV`Vyi_w_w))W)i3B:nJk +>>~*>F>R(hF((&Gg!Wwɿig'I'&fj&šn2oB2r6B/x耬o S/I)_WWg &"HW2soFb'_gk6Nx *S*a)NI'YyI Zfkk^&2:[*VHXlX/y-i:9w)׉I.Sf{#SOcz*(0v?m)W7cN_!9))chVH69IZC'(HrGF~g +)W's?ϟ(XP;ryGi(IWW_?JG3^>S&f^ + +K+_7O{_V( 'w7mYo'x_)wG'! 7/ +˺.R BS_g'((8pg 7^VsgG a9ZrVzgrϳ;*osOgSv(|H?-QY' ֎I韟zc +2k2.Zrs3'S{g_RFvpph>91 Yzknk^o__O#z2r²+ +R[‚>&2 xN~i׷GW 7'_g'? zS;gS3cC#.Vrr"n:jzΟO +3.z.[ )'Soo +g?#;/rSRŸ[_/.>žrFfg_..s~o*~F^ fvSS3w/+^n^ʟ[R;&^wW:*۟_J&^Ƕ.siSg~^kN/_)S97v*'"&r&rw΋I:)^O^6^^+fSǢ>;~˟^f[bCo^ssɆS7h;Ʒoo&{+2O6kSNz7GZ^G&.JF(:v3_B^wS2&J^3_ZNGoF2_2{sZbZCs^&^2+/O???S +"B.rB: + ++ {cK#ZZ:z +j ۋk;****J+J ++k*k +kˋk K늊+k +*** + +k++kˊ +Jjj**:jj +j* kKK* +kj+kJ*+K +kk ++* ++**+*+ +jj+k**++k+j+ jjk+ +j+ ; *j*++ ++*k+*+* +*j ++++k+kk+* +j++++* +****k+j+k +k * +J+*J**j*** +k *jjk*+***k**j+++kk*j +jj +*k** ++jk*j+k ꋋ+**++*j** **+j**jj* +jj**+j***kk +k*+j* k**++ +Jjj*+kk+*+***jjk+++*ˋ+*++j*j+*j++**+********************************************************************************r糃s#kjz "j ++Z""ڲBk[sC[;{꺊 +z"Zbb:k*zj{#[c3[ { k*J +* ZZ +jʚ*+k+j" R>w>fBw +.#o*z;[ s {33C2 s6h )) ׷fSbS)gw'2N.f&j Sə lG7Q1rh(r&27)ǣ^V6okWW_G.ogG'_O 86HKsWIyY! Wjr2^v((v6.":Os?LJ'_3/. x`@8&#)iy!yI'nFF(&^*.//ϏS.xX`@xN)9y9I?^F~^{n{_?G__?o+?xxx`@8f/9)9Iy/f^VH&vfjrO?sG9)o_&aa)7wg;c +F&>2 k/[_g_???gO8Xpn_9!y9 Icjj~^ƶ^&2Ko_3)Wgggss?ΐ 000W qA!!9y JZrrc"^>^nfƆ~fo[χ_??j;k _# / iWZNrSf^Nb n^^^&ϳ[_7'Ggo.;2[g.h0SGwWaYiW*NBo6f^jRF.rf&kO;3ǗSs'_"./꾚,h0sIW)iA92&([nf_6Vr3ڲk)W_G'K*;럏H@0@n)/qٹyV6..'Z&^KF7gWgrn +o'| @0?)Wn-!6{z.?..[BF62S((+S{ Ϸ)w燇J .*OG<,P)sRaW!^"fg{Rzbg'_Gg#ʳ3Jkʲ3,#h)2Q917o6:F^Ώ;Ɔ2o_wWgo_goˊz~kG 6CFaWYQoyz*F':7G>..77GOϾ^3[jg H nJ(fYAّG!nh>ovr(ȶ*^gWBO'B{n+[2cV(#V^VhSiYay)9+RKΖvΚ&VF&ƞZN[{SC33++++JR^&^F6vf>Zo_Wח))g_oÛkn~~^nN{3ϿsO+kZZr..~>^~R:3'7LJGg__?Of&^Jz뻃3oC; *j:Zzz""Zr.NN.#__O/sSs*j:rR2R.RR:{ +:k j K[*kkˊ2b+:c+ [ˣJ;ck+ +jJ2 +kkRjB{JSrr*ROnnB3CJ3ZZ"KBO˺b~ +rBCN.gÆos?"O?R2 &W(_'h)_9>G&v)(s"gfK?f89&9Wf^i('Z֎i(N'nS7wwi i!y b A؟NXG 9IH')?Wha8O8yVn:nƁ8Zon;fgK&&'wI^(VϏ:*wV'>&n ~Oc&o2wH@av(9FI)`!)r*?V7~G?Z[rcOGrg)&sWbZB_R)x'';Bz/^ :N?W^nj/N*( )ovgb7(#[{K~ 'oWn6+Æ_~"ZgJOzO.nn"s3.J7>/6s VHv.z!ai9Z.("F2zI9gwz..&??/7_# +_w0K0`'1mm&p'Z2H^WI7#&B^(&*kW'ozb?OGl&y큿Ax辂@ YIaaW>(Jg_9'26&rOgWwo)$"XP1o;1m`1)؊7giKW.^ :*zOo"R^"Cc*iic7 (X-!g(gY9zY'&SBV{"rij::f.*ZNSCbKS7'z + SQqYq銀iOy!).Gv8r(s7okNNR" +^^ZoSSglR, 1s_F +:'_ik&s~#w놊J#>2'['2뿿`,XP&׆7Aawy#ֆ +S_*"ʎ^N>^RzS#Oۂ+rC*rbJjkz뛃ꊃC;Js{Z J#s: +bZ:B +Jk˛ [;jk*b.*k:JS {:zkKZB +KK+ cڊ; + +"#Js"B*Jj*k++*Kj +kJ+ +K +z+[ʺ;* +닣+*+ J{zK: *JK;Jjk+jJ +z+KK{**닊* +z*ˊ;+zZkkj[kjk+* +KK*jKk;;jzJ[ZJ+*{;*kk K+Jz +{ Kk +k +k{j:K˺*K*k*bZˣ + ۣkJ* JJj zj:{ j k +K +k;kk늺 +:ʊ*k+kK+ +kjK+j;+j**jk++kk* +K*++ +*jJ + jkk+kk ++kJ*k**k + j k+jkk*j*k* JJ K+jj*++ ++k**++*+++*kkj +*k**k닋*j++*kkj; + + +K* +j +k*j*kjk++ +j++j*+*+++**++j*+***j+ j+ + +j*+*j*kK*jkJ+늊kk*kj ++**+j*j*k +*+********************************************************************************************************* I(7gr6/^Fno +2 _jn{2r'nj +k+ʿGGfo~+{ ckOs^"Sn3R:sJ+ :c6ONs_oRJ *+*z +kj*~^vV +nWII IB{f›;+3'k*fkg?^c7K{&jjS'9I$쐞gQ '&g8 _6IY gggfh(VS?O_'ogS +zʲ&^&6"SK O__Sg)w3`8ȲWy.xHjS) wھXx'W)i'N +SfFJ^.gsoS?gf,~>ʲRrb+[KJCCC /s/3;sc;+BjK.BrRrZ2rz{SS?/SSCs{kK *jbR":+ JzzZ: +JꋛoSSo/S[CCk**⢂":Jk +{[{{ + +k* +J +J +J k*;K;Kjjjz +;;* + {{*zJꚢ:j* ++K{;k {jj+*j+ {Kk+k:*Jj**+j;kkJ:jJJk{ KK** + ++j+ *+* ˋ+k+ʚJk+:+{j+ j + jk +kKj +j +J +* {*ˋ +*jʊ*k+ *jj + ++ *j*k + +kk*k*jj + +*kkkkj+*+j**+*jkj*j+k+*j+kj +jk*jk*jk*k+j*k*k+ +jk*j++j*+*kk+*jj*+++**********************************************************************************************************>anrOzznʲ +Jb³K{ 69>2/nz{+s 2c JKZfg3 g>zOs +3j+/C2zcN'>s3s * +N.O+~Kr;jk/.gbR~ZJSS;Z2S_Zo"ZjʣSbkzs;2KB{ +ZBz:BˣOK*+[nSBz/Kz/*rk*kboRz_>#닺Ϟ+kb:*[krZJBC .j+"K{nC/?R:jJ[{#>2[ 뎎Kjsˣ3KCk*C#˛BJ+#cJË + +*+ +:sÊKs[2k[3s[rbJ[:ڲk;J#£;{#k ++z** +Zbjj#kKZ‚{* +bB#{Zj +k+:꣣+z +{ 뢢 {+J++K+{kzZ"*c +J;{Kjb"*#jjj: +*Zbj*szc +kc[ bz +"sckK; +2 +[{ + +[*:ZK c;kj[ +*;Bʻ +ڢ"+ãJ"Z:kkkK +J*+zk::zj[[* +kjJ*⺛#Jk+{+j{{K +:+++jz++j*KkKKK*jk:z;+k +z*˻{ʺ* +J+Kںk +{;j+*jj* K K ** +k ښjKj+* + + + kjj*++kj**+kj +jk+{+ k++* +j*+*+ +jˋ+k;+ Kʺj*ˋ +k+KKʊ j + jk ;K + ++jjjkK*: +k +j+:+jkk* +ˋk+kJ*K+*++z:{K + ++*jz+jj+ + +ˋk k+ *kj++ + ++*Jj +:J*++**jk *j++k +**k++*+******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_american/cause_1f_loop.isdn b/tones_american/cause_1f_loop.isdn new file mode 100644 index 0000000..212d5b7 --- /dev/null +++ b/tones_american/cause_1f_loop.isdn @@ -0,0 +1,197 @@ +*d}EьDH$]a)V`*F:_Έh?wah7jF)2&gbrYnf&'S^^NjJrn:+! qYXl )svg'X VyƞB/x)Iw"f^bfh. S2Js:'wC>ãb/;2K_wIyWڬd̈ q?y07-i~Ǐ'!yWn*fx)/V.37k.;c{''3R+I [XSI -y3'_F Î([bBKSC{k{KS/sKχgW71+7786aw(Xgi'Cx8vS32C_??w_?7O\L Y(98G!!Iw!)Rr?[2/vo{+ :sSsSS{_S_n r6Xic7W'/'w'^FR.:Zr.c 3o_''GGwpxX@sS2i )GIg2rFF~f&B;oS_Wppir+YwGw77nb~~^^2Z_3?o?37G)vN(,)H8#^7!9w{/rvf>&&Nc'__''KOsSvXR8W/ )Y! IW 7{&K2nfn^sSS3*kB8ȖHhxX6f&/gW7wIi))W)_g/ +R^f>N.rB"2rnrR.rr2ΞNnr +O_W'wǟO겾&&&&f^^>.*r.R3ۂrO? C;+JJK# j[So3Sc3S"B[N~R>" +ZJ*#cK:껻C+"[˛Zڻ::;jk* z:+JjKbK +˚b+:+zں+ * +jۋK* ;;ۋZog{:SB2&&ko_'OgoΛo3 Zjۢ33>nb"c#cSڛS/G'O+~&68^ +š׉)OsH Vw7;g)co9)Hׇ?X(rhff'o(cwW3ʆ/w& 3vxɷ/w&&fh_7!?;f_k~Roog2w(6 Hnnf.&rWw#s{_Y?3'Fv giiK "IYh&'.^({SXO6XHIWYAW g(.9I&(G;?9+V)h_[6' +gbzSK2>WFi.&/'RƢ[_ .zKo#^V2&>6^:[')w)_ϻK"*rjRJn."ڂ+"JBz: ++ [[K˛:늊{kˣ;*;JkjZ +jꚚJkkj+kk+j +jKj*j+ +Kk:ZڋjKꊚ +J *jK+***KKkjj *j +늊 +++jjj*k +k;+ ꊻKk +* + + jK*kkj*j +kJ *+jj +* + +j+;+j*K + +k+*j **+j+K +**jj*+k**kJ +* +*k +Kkk*k * +J****+kk+kk**+** *j*kjj j*+**++*++k*kk kk+++j+*jjkk**kjkk+j++*j**+j*k**j++***jk**+j+++**kj+*+*kꞂb[[j ;{zjbjjˊ2+"*s/3c3C3Kj+Rn+R:BJ{Ï?/coSsfsK.j.b:ڊ ڊkk[o3/CknBZ#.Jzj z ++JJkkCooCSCkj[z{JJ+: +:jkۃ3ScHWgRb[7(&#s'SC)wΏSS~fzwC["^g*cSs +BoOK׷+lp @Oy! f{VVOO_)~.b /#g?? W 7v,G& qhh^{`+)g I!!rrVxrjgI'o.Zjo'W9G'iioD0PVkv- Wq鏘f'X8Iyw)!YVXf2"Wi) +;F&kz)GWx}I VxX I)Y)?)rnH^.6C_)3_3.b +)O_*3G) ܤذ`׿ F9JX.I_f"Vh#'cI* O+<@X8hAaYΚg& ǂ??&Ȳb'zC)Snr{S3/3_(8XxI'IG/c.#kǺZ*#C"".N2nKS⊳f":xv6NW)777G_/O +ks#W_ +cbRjB/^>K;N.c#+&Jcb˂R*kz3o_.{KZ χkob{Rڲ(cv{>2?:B2:J ncΣwgO+Kk[Cʣ{no~.j^ZNBk_2;Cn{oʗsGZ'{FR_6B/(nW/2/;7w;_Λ?&CGb>^O?fs_7[/㏺^BZo#.JJO#S N "ZJRk*"zng_"NF+3/hZo_zCZB# +R*"[k'NWSVK^:sr*~^{B떷OjcVsvJ>H_^r.g9gfWFKSc[^"B_?3./?)3Ngw#_^ڇƆsNVfn #jn_b'(osK37>^ggr f~z2WۿR_&';."/2).COjfw˚/kfR*"cˋ+^N_ϻC_N> K/Zncn2s??'n2jnBj""zcfOj:rr3:Soj炢? +sck? +#_jjJn#B/k2;sS KRˊKznnn;3‡wLJ__J"*J*rÚk+G'll;փWQ A g"~>F.{ +/?7C2 kSs'_SSo)<0cpLP^6Gg1 S;rv~ֈZJ'K+_Z?#o3c'3_kg<{_pi) !ϣ'*6vv6fj +Bo^rnsoJ:ڳs*Ssۃ`J`>Vn'G9I!?sNfBzϳCs#*3ZOf^/>o>_((hƾn#)))iɉW_'?R+RB#nn .Jr;fKn_3j>S[.#/&J*N +R>R>る/{zcgsc__O'K +_.3kvgZ:˾"Nz>/λSkk3sg_ʇG{ +K2.3kz>_Z7_+r>/~3¶ 32^?Ss¾oofRo>>.bCCzss"k2k+znϋs?c[;K +s+* Rn fS;bSK :NC'*n3/3./~*[CڲcN bz/Zsƚ_*f;BK*냻:2NZ+z +Z?s&k.sJ+_N/^[{+ +'jr/{s+zK r{3.3/_KJ::rO[{b2z~sr{ rcJ o+{.*sKnr/r*cz/2/JJ/^ 3*_CBJ'b3?6Z*O&NS+>o).";Nf?2nϞ&bǏ+[_C^b2N'>&G'.s: rGNR&f&c7#f3r2?S2 cn;2?RFSǷOkGSۏ^#CO'V_kn^r/>2Rφ.K~vwjNfor+_ns +/~r?'*2"s:[/s^.3sk~+^oʻj3+:[c#oc:{*+."+.^oO R&&OonnJjJ sOK>Jk#rKjRss" +z*S3{z:r";SKz//n/R.SOo;o3S3czk{[ockJ"nzS' V)w7ڿ3[rS+ iƞ_S:ÿ_koǷ7iI|)=щwRWv2wYr)Rgg.66h&;i#?w_'k'g'3'IdFA ^8/aa^O ;VK*G/^F^*FGI9'>6/O3oC7_r;?)MRF(z3''aA)hh{2WfC6(7G/kogW{'/ KIW< 1͙HBorfhYqa..WFWbvf VV~;o6)2^#C?'? nd-QFi X!Aw_v?7*f:fV(?[n?B"o7[Z:[C//_g7WḠ 'hyI' vh~S:/)W[(nvfkCsc+R&;/s3{J*z,Lʑ-HI'g7y7"_'>Șr_/2C)onc/g_czjs/s{3/s +G) `Xwasf_ C7 2NwGƖ>R6~ok+ +K3S3o3S r~~\@6YQ-^@8ƣkgGfȈj2'F?F".OSrs#gOj:O_Vp`-.Qiv`7h?ٹIY66+6χfns>&_R >3Z. +rn.^Z?___o/SKSKZBΞBRb{.(^"6(&G +i7{K3S+{2ڂrrڂ;*+{JjkkJ+Jkj*::+;{jK + *;{{[+ZJJۃ*:zz뻊[ ++{jZZj +""+[ +˻*;zjb*K +jjz +{KZ3s{Z*;: +j+ JRkJB{322[z+crs +{+J*[.+C{ʻJ +*;k +Z[{jkkjʢ ʣ+bZ*z{j +z[*j +k* *;ۋ{zKkZbK +jk *J*Kjj{[j+{j{ ˋ ++bZJz: * +kKj++*KʢJjc[;C/os3c#* +zbz2~f^^n{C_GO3S?ʻCcK:볳{c++#K:˂HVwꉙ9#3O.znחCs&F>~^BKcn^jk.ƟNI))fOb.{x.W ^'6SgOWW_JZfFJKo_#2j2ffNʊ:/&)Y FV>?g>G&p ay!j(ȈRy9 7'~h6i7&(Fnr/wG#㺞[/_s +.>&&RCOrn.zgiw9&Zf&C'^~F&skrϏ{Zc2 [Jk"#++ˣ˛*ˋZjKks+[*ڋ +onBrRN^F&B#g9y 3:OoS''zBksS?gG/?7Wad/=@F],j908Q _ya0Fi(~x9!7oWǖiI3f_'Fs?kRnrz{SKC"^)7)yvn__KOsJ +JskB3';9iRp፸[Gm9,ʀ(A1vON@nw8&k?/ KS*S_.3W' d &q3XV39ay^Vi{(6##{GO&+g'c²sc2 ?_oj*/_w)V$  I~·6j&V()O ̄>sOʳϳK[{J2+' \8Wi o'j^; aٷnnkb~Hh~G_#7GO.>k/;b3SsoS/:o( ,7W'9فiƎ#c +ڻ wnjڞh֞zg_"..+[ۋ+S:rng|L i1yȖc N~.S ¢n~>x`ǟo7>F+rrc7ׇJcSOl YIWI98h^*j>.2ωyR^ָXض9 w'_3nnSB77R^ S"0<I)9Y1h8V^rο7fHxHw)/J'*/OOo{[Û{?XL yAYF (^nrINvfFxn/gχjn k{ /"*_i C<\ Y991qh`8FzSo_aiֈֆJ?wg3&&?SoooK~o?[ [`L\LGaI9qi@g?>(NVg 6H )~#׉Z:_c&V⇷__gW9)VfaAq9h0(wk +)!ٚ(.GYXX(/wg /2f?ffo:Z/__72p|LPvy(6W9WW7iv@r7S:Oi w`WOg.Sg^_'#&Nz.^.K⎾"+;S?G3s{:J kzR..z +bK#s/o?__'{y!!ixpPpW1቏cs0I){f ˉS&Ki>׃rN*.FV~ +rbco?o{Jzzbξn2Bk K;33;[S[{{ j:* +NR>^&^.??oSSO "rrzbz:k;/O`| 6qayGI`8qA!'_[(X 6!ه>>vh_!!W&o S^~Sgg.JSOSn^2[zR#n2*{[S/cS3#k* +::**+K+***+ +Os{Sχ{L A-q!WyYW`V9ٹ[Wigfgs~'7R82wyWjFf +i)So⎎'3bnR#0,h_Y'!'hGsZ_~rkn^/*SΎb;#;"b +{jRr*K z2.~N2jKcso?'g_*+:*+:.2RnZʋ;˻#; +k++:bښJj:k;K +#[{{*Zz*˻; ++;[j:jk k*˛{ +z + + +:Zzʊʊ; jJ+ ꊊK{+#K*J:j ;* +k++****k+** kkKʚ:jkˋ:j; +:+kj* jj+k j*k*j*+*k ;;j + +*k*:j k*j*k k +ʊ*k**k + + +j**+*++j ++jk k+*++++ + +j*+ +++ KK* +k+jj*k k + +j* + +j ;+ +kkkj +* K+ ++kjkk+j**k+****************************** j*+* +**kkk*jjk j +** + + j+; * +j *jj+j + +*+*j+k +* +jJkKKkjzS''+FFs_/fs^B>N+JJ3k+.C'BS 2&#/2Ɩ^sG7#)N(RiRvk/&jB_[n>SO;Rnj?_36//_{s[b> {n3~?__K;"+j>&O?ROzkkS +&R_{^O.J/z>Vvig(_/^gSbΎn+sw3^vJ; +'gS#ff'wsS)Rr +3 +R>Zǻ'W/>&cGv^'.WWkFWvggrFzOonFFR3O{SZ bCJ^n/gF>_fFgCn:jFb#:[? 3&[_c#b>r3.KSk2rj"Kc#&r[?/bno.Ί?;f2#:sszsBN2ۺ[3j;*:# +b/kʢbK+zc+JZ:kBcKk**kSs:zJۋ:j* +sk"r+K2oORζbOOcRJ2n^.^_) iW/_3C:[ :jGiyp)9')Y 1^{og 9GoK)θNC>v;&nGigro/K~2___)$<Ɖ)_-&(κ8Gao v '^WO^G:{')^?*Oiɉ)dHhwA!/G:_b/ii>hvV)IO;+RRO{/3Iy7)YH6R`N'2g7 7x{#zo"&3O# +??*oC"KgW9rLXwGWAٶXxCX跱aWB'`ω.;[fXFWǷ7Ǘ/fjS+2z[;::cSo2¿IG$p9Gqm [a!) +(Xf GG x8>_7O&2;+33zK#*2./OLJ"V|I1(^NA/&&6x3z#xvw wo>S* +n.kڂ2B"//c6H@YYف)V oG wHVfi7f消(I矿Ά~3'cnZs;'Vl,Ayy!AA[@~ʟia1aoFv)V(j!Iʾ>.2_3#B>J#s'k(8xVfȰ 7i9_HG ;hF^R)b>R2(F.2Ha)_>bóbWwSZ*3*R~f>bsjr2/[[s&&..K 7j+"os?cR^&RjJbC[N(v'gZsgN_kr3+*zZkc'>?W1AY)VkHh.I7gR>&)wObbZv*o_)w322>k{+ +r.nRrr"J+ +k;s3##k;۳{Jz*2**C+ڢ#{J*z{jZ"b;{˺;z *KڢJj+***cccC/O/{3;j{#B"RRrbzJ+ + +kK {[k+;ۻKk;** kk+ ;[#{Kkk*:b+"*+:+K +j[{Kk****j:j J ++ˋ ++{+ +*jK* +j*j kj +* +z* +˻+*Kkʊjj +J*k+ ʺjj;**+ kjJJj**k+KjzzJk *kk*j+*++ *+jj++:Kʊ*jz*J +{Kk +k** *+*k*Kjj+k {kjJK; +::*;:{kVWi~f[z{+ +3:{S>*+"^.n.[j#.J{k:r? +Sc Zʢ:*Jˢz/{ڛb"{Z[#ڳ;2z +b.#c*"#j;r +S#ksb#ˋj j;r[ +2{jꃋ2"#kb# +#sjKS:[:2k +bj*bbk:RZb:/kjjk{sZrs3JKkzk/c +[#J + K:bK*ں***J*kۣ2; ++b#CcK{ +"z + +# *;CZK[jk3#s˂;+kKk +[[r Jz[j{"ڣs" +k +{ +;Jj˃K +"+;Jz +Kʂ:ۻ# +k{KJJ:;k + + + [:* j+ j[jzbz;Kj{k*ˊ +:* ;zJj+*j*ꋚKZ{ۋJ +# + ˋ{ ˚"*kj*k:⺻+k*JJ+* ;+ ++KjbbjK;[#Kj +*Jk * +JJ+ ;J*+J*K;k+ :jcJk*:+*Jk j ;+K +z#[" + +K; *+*+j#[zJ +⊻k +JkK*K+Jkccz:jkK* +jk +k:kc*;z +{ +::+ + +{;j;kJ + {k ++j++k:+;+j*k*J +ʋ J[*"+k++ J +j*j+J +**++ +++jKKjJ ++ J;k ++{ K* +k+jj**jjk+* ; +*jJ +;Kj ++;J:+ zjkK+* k;;+*K+Jz +k *j*+JJkˋ* + **J+ Kk+*+J:k +jj+K+JJ**k + +k+jkk +Jjj *Jj* + j*k*jˋj* +*k* +ʊ************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************* \ No newline at end of file diff --git a/tones_american/cause_22_loop.isdn b/tones_american/cause_22_loop.isdn new file mode 100644 index 0000000..14aad24 --- /dev/null +++ b/tones_american/cause_22_loop.isdn @@ -0,0 +1,190 @@ +*d}EьDH$]aNΎڊ/'gǷww7G'_sb>&fhXxx X"W9YY 9I )'_ "r&(((hV(f~.[S/sOos//3à +j:J[>((hVR/'G)iiiiW))GGGg_jnƶ66vƆ>;s_gg'3hHHfs_G9 ɉiwwW7g_σb^f&n":*K3/??gw h X &F?wI9ɹ))7)_3s{rn&v6NNj+{_gǗGxh8xXHFrǹy9 ɗWG?_/#Z^fF6^>RZJC3?g/GiGG>`h8 @ƾgٹ9i'i))o ~VVHHF&o +'b;'7 9izLL 6A-aىIi(I?&[j `hnOSrzbiWI997oR$ !W-ah^2khb9с oh;3/N3G)Fn* Ά)wWGZ~X<9A911@ 9ai8x^s_Wij+_WW)g_g/ <Aa!iX8ji!aYiW_+ H&?w'z~^Oi7?ogψN{)i7/BfF&r'w)WWGw7+` hgѭ1+nvhV!aiV&Nn{׷OJW7[ؐ̌j1q1[[&vVh^OiaȈV^g۲nBks_W)),&qWk#Fֈ(!ay#FR;SGg_S j + +o?WWS L x1ٷ/gֈ9!w{F(vO'g?:[/W[@ 6fB'GGgOzR+?IǰPLayy!Iψ X yWWhh6*O'wCr:+o,p|l(Y9i)!1Sj'6SyϞF({N:+r~K#ЌXZ3)AYWo__(N;YWnf" ^R+[?kFf>+{Z` v2+;)i9Wחr;g) Wgg'+nn~^^R^^rbZBOo((ƺo2Ng_S'ǟ_c &rhֆ&:bV[:z[:k3Î*j'#OR?b_⺏?ŽN:rbso~n"^kR2+/wz{GJc:" +fGfwj:>+s&J*^C +fN^_nk)&z/R6SF+g{:Sv*F"G{)Si+h6i~iֹsJ +7fG)VF&Z_^>GBWgG~#w2ROFi/ 76g:B6hW;)_ꇶk& ^jO;c(OB2[W)N+NgBsf_ +(W(yWRS6o袞GfoV_6O~VWKK'^f6/ƙ(V6z£)O>rV7*?>;YɎϢK^yry8?(!kGw.C:FZ)JG;NF'f'VXy_ O(3W8ișrn^2wxWw fbY~vrwa?^F&IV.?'_wvIv)Z)[S+(Ȇ^iv' ^wB`Y V׶n ֞vohrioBV'FF#WX*׏(H#F*VH皸#)9V"r.&VziV+0JxVs9`ٛI +'9'zo+63'VGxwi^>׸NS(G6H2nf(aC6ZVBh^W(+hAV7H)()g&6.i_Wϸ(ossh3HgzGZ Š6h'S(wo +3>)_F^ +Fns_oJR_:s?sc3[2jcZ;Nk~"j~C~/R{zjZbK;gj+SZ"Jڊ+S r +/Ss3?2+s3'{zBK+ss3_ck*3gG_ܐ.(&-1A!aG.^ֺlj9Iچ*2 +7Ǘ7 &nѱY H&f/Y Owן>Ngwg_O2sS'g) \ 68N!)yy fb׉aY7C*JVhJ7gigo3[ '7))^\l(--)+6;?YaNxv(HN)Ii) g2^k''I 8\l~mm{/cNxX00FG !WF@hhsyG/^SiW9 d >эr^X8!a^xO! gs~hjWIIɹId\'. QV( pY!y^`0&bI!yc"ViW)i9<@3S*! -h(8X0NAi #H VJ/oى&fnVIٹWG9V<lhw F(8`0X1ai)6gO YkfFNBJwyYWW_0\$+i׏im -(H`艱qA'ws8`x_ڟ)9f.WIWw 0\׷m-!+v(!!WG7x86S79)^~Bbii ii8rOmAi;'WI +hƲ6GWkoj'iy(0&.Vyq׉I{H` /7Wo*iY7FVsg^vK_ W:W&VBg_x(BIa׉y'F^/>Nob/"s'Ϻk[~6^Jr.H 8&r9Wi."#;C{.ʂSz2n+b#/ +R.2B +rr.RZ*{kCso/O?OO/ッ3sjz ++ +2ZZjBR2" +b ;k: + +k*j [;+ +ʺjK;scj* +"RKZnrj;z2kkzbzc#+ +z; +;j +j+{{j K +Zb[#k¢{+ʋKKjkk*[;*j;+: + ;"z+{{ˣc J*;jbJ;+j+J + +zjk k+* Kˋj+{;k +b +kKj;k* Jj+Z:J+k*;j[K*(hGaAvFVF0ɱ˜(_Y+XVi7R(.772fgGs&v3g' +?*SzZkڣ/;R;sj"{Kz{S**nG/F^*_32/;nKOc_;f +/wgbFOG_FN ++O/BξZ/bnc&s[+N^n?2/o.K7_.nw)s&cGSBjGor'sS8L̬x 8)aɷFFFX.I) aI){_C^V^C)i$|L@0`g1W~fFH8xBGWGG i"vvFWii's_iKظ1!y11/6F8x))y:VȈ(n3WiW'G,ܬ0XaAA)(F(iWi9hVo7WW )_;+*brrZs!"ά`yy_aV_zV)yy7~F">8k[oii/?2~+^Ff + hVR&V6?OS)S'g c/+kjzzrbZ +ss[kj^&Ɔ^NβB[ϟ?Ͽ?'_?sCCKZ2R.nNNnR.R2"z*z: /3;3c{* j+j jB +"R"z +*jk+ ;*k;*J*ccۛ;+:J""ں #+* [K: +k J:Jz +zK{[kjJKK J⺺*:j+*JKJںJ*j* KK zk+J ; +:Kˊ+*+ +zzj*:z:* ʋKˋk*J + ++J* KK +*j+Jkkˋ+*ʋ* + ++ + +**j*kk +K˻*JJj +k*{{j +K + +ʊ*J:*K{ +:Kk +k+k k + ++" )I؆)>#{([*Ϸ/o{b[:.Z"__S+JN3"kooj ++ŽZ+s: JJʋ +zz*;KzJk jJ + kjj + *j**jk ++ *++k* ++ j*˛;k +j*+Jz + +jJꛣC##[*:rBZZzJc#3__:2^^&>»?KZ.+soOOo:2.n.rkS/s˺:b22*#c3ʚ2:K;c{kjj +Jzb"+ ;˛Kk:J*j K KjJzJ*kkK +닋+ + +jj +++**+ ˋ+++jJj * **j**j+*+*****j*jk**+k+*j ++kj*k*+* ++*++++j*++j +*k+jJj닋+kꊊjK**jkkk* +++jjk*+*+k+* ++j* +**kk+k{{jj:j************************************k+KK KJ*j+:++**++z+*FnG)G:&> +ۋ +B^.zz#3s{ۚ{K;j#k[#{+jˊ + +b" J^6wI:#o_,-mhhvFN>^6o!a!& #^'W'CN^C3#_'7{^nOG'rOOjrk ?OoiH`鉇^yA!_ Iv`0FW ):Ff) oֲ_J7f/OgG̤_!W!АZy9@ (NF(wi7Bww/n&GK>ZWGɉ\`! ё-AN^&N!-Y H/bF>v? +  {??g! W +hёf +@.!)>788vZ/vSg?'^oKKo#jR.B˻*rsC>ƶ. +.&f^Bo#37/'_/*sc2>Nnrn^.2Rn΂ +cs??/CoSS3;B* +:B2:r.2"j+Z2ZrnK/?'g_S/3"2b.^~.j*zz{c#+ks+"J;#ꂲZ:*; Zzj+Z" +jkK*RbOScj{*zZZ"bJK"K#;뚢;{KjK{ *jj+k*Z+JjC j[[++jjj"ZZzZ"zZkk**K +:j{KKjj +ۛ +JK ;{k +k{{{*k˻jjj+ +JJ k; +ZBK/CZzrj2ۺCSB"J;[k:J# +ZJ;K{zk++ ++z*k+j* +* *j* j+kK K +J +{j{kJ* + +ZKKJk"J+#B{**+J*+[: [*z[;B;2cKK+[Z *c[2ʃ.#ۊzz +Czks^SK{nO{bˣ + +2/Ϟ#~o{ORj[[;rK[KJ3zZs" +j{3.r?jz^[_fZ_B~ۣϢ? +NS.Jϲ&s"ז'r6G +R[C&rrskgG(SfGfW?g")WoKixi^S2NSǚF~)ʈ)^KN7GF;S2gb9&h7fg(r +Rw6)7{H`')Nv?@h)kֹ.)WI YG>?r`VgSYhcH9g3#&1>˹)Wg+ȞٶYv)#΁ ' h'/^)RF IXgOCi )F^~9SַR3Vzc.G&ȂIh F; ''IVf'fO3^ǞGorf;ʂ(Ϟj['" ^JfB7{BO'?/r2B:3Gc~2*gCf(WG(v7j~2j/c^fs&^>F*^'';SgJ&w.GFo.2'G [OSS_Z;3B> +#o&j2;?f@̘_ϻ _3i?o/CR.O2NN澳3o$Px)m#Rb# +!)i?N_[3 SOn' _'Cn'gt) -VV)ׇACGB3[((c>vOgC˖;N7Gw.k/_7i9d@1}*iHa3I'n?knv(">SW_i_?GGɹ +8W)X)^V1i 7f7NN(2ZJ3 +'s/GS'cI4hAVO-- VFqi>9h>Ǝo&{"#;3ϟgg)ddHAfqxNha nY(Fs{2Fk '/_7'gS +7xdV1h87HfYqa + 9#+&~ʛ^V&._ooϟ/Og#'S8a(q2H(KwiA)'iWnv2˛6Nz>#'_" +3_oo'[OG(LL`[iI2b?s IWW:&^&.:Ãk:"s/;OSS''oOOVpHffG#owWWW7Ǘׇ/ +vnV6&*&R3//'?COshxhxrSiiiiWwwG{j.v֖^ffzJzO'oC/_SOo'R8H`hʾ?W) WW)w7_j:B&Vvf^~"K[ +S?o?_C/'_`ุh fS#{)W))W _ggs~>6Vr›jϿϟos__(@V^8Nj*W))g~vn[/ss[ gS[gwGπЀ(o_?Wٹ_o^vV(VƊz;CJ o/ko/CG_7_̼,?V?9Ir{7)yIG_cCVFF.6Sco_OgG7W)2,L`yA9_WןZ:Gɇ{OO v&F;O3[3_wGg'_7W<L8Wq9r')_"יa((v&2o粛b /CwWWh< :vsG!Yi"WNfY׏76Hh(V*'׷*Z*w)gGWI |V FFi1!7nrwG_zvYawwg{8hvvFzǷ{&RiWi9p|<Rb+ʊcgiАOȉA9Z昀H9i)V;VwSgRnJr.g'G v\ p>h7m-Q~ 8y)WY88`X{W)7_^Ƃ^7ON>2'8nHQ9gSYI&xx'Oi!R&6`^i)_rR^Nc/oJ>&Ng켬@F>.H91qAI' ~v'K ٙkf(8vHni)Gnz.>~O3/3/.^>2;s(P,0&&6I–rR)ֶcV o[/R"n.Zo#r.Sj>>B22R`XV&r !wiW7gC^&"b.rZkc 3ÃC:{ +:볺r:jBh``VwYa99y.?RrZʊ.&^N.&rJJ + 3 +kKs[Kk +rrjJ;3kζ8v6fn9ii'[b.^f~>Rn"K;CcCKkC+::jbj*J" +jrVhR+/'wWWwosr.n~>br*{s[C#Jk#+ *bBzjr{fhv^k_wwGWw'oS[Bnr~~n~*{Zcs#J Sr;#KZ. Rk:KZ~(hv+ۿWWWw7'O/[J>2"JnrRrr ˳S+;:k:zC:[CC/((gyaaY9)gKB + sk+cS{>^.N2J3Sos3{ʲkS/#O,̐H&/q )i[8X8?9w((x(Ç'W)_;n.>n"'?뾺a,<0&z-}-ىyp?>?Y!^6x>Wy WVk2"o_'CgB.$ 6}͇3yRP/Vwa2JIGHhf#j!;O7^)s )'nnOod@n 'q}~_A@>ǹ@>b28(Gw&.iRW n rsWdp! aF9-qH0( ZYa&xvX`&'Ϗ)/. Obf j/ǷCN.;#k:o@d-f)NV 1K:x`VN) goog&K2o3 sS:OP$X`,AA9 h)1c)fxxf()O)' J NK{r:''G?ʋr.3g `AYiQ8Y` '+rI)zh62o{{GS?nΎssWۿϋRO 3(,0  ia-r^yX;v^7!IGyfFh&Jw?wc.FfB7'[:J+0,I QWY 膲(ZIGIZ^Fϟ'kbc[vN?g;+:>0<ː!Iɹ-6ֶ"ISٹNHH6V6Jg7wS/sF^ZbSgggo +jKF>0 I׹ 9!(VFb6hsiɉc{.Vvb/'3KkRb:JSs/*ZC( 0`Zcwa IgB{N.f&fzڢK3S f>~2rc;3ϿS;s/;J*[j+Jk*{#J^(ָ`HIyYI)v6N^6.:Z .2rʋKC#ûSS#?{+S+:z2zHh ˿ YaYKr^66fΖ6s˾z b## +J;3S/SC #r2β^hؘ.>;i)yYYy)#r.6V6.zN;C"+K#CcSs/3/C;뚂R..J +BFHS9!!yىW"vvfvN^6ZB33/S33cK/3kK*jR2".bJX(h^ ۇ)I1ٹ9Iw^N&V[?r~n ;sO?c/C.{* +C{&h0`WQA7gG{vXV^._))f(V~ǗO/n>> /'gsrsvPl 6aaI~>N._?'W'憶v6fO'_g +R22nnZjssznnB"R((Vb*S'7W)?C ;BrnN>>>>~nN>nzj;;+/??O j22rnnR.bbj *ڂrnnRro_g'Oosˊ:N>rbz +c3/o/s3 + +Jz"""z:kkz"rr +;sO/sc{jz2NNn.R ++**K{k{ˊ* +* kj+*J +++j* +Brr..R:S?''__s;+z"Bn.rzJ ++[#cãK** +zZJ +**+jb22B* #3o?OoS3#{Jz"bB22.rBBJ +j* +kkkk kj*+k *+k*+*+++j::2B"j˛So?sc{+ZRnnnn.Rzjk {K++*+++ ++jHSzg_KKz"z⢺"""2b+JJ" +k:* ʊkK**RRJoO?ooC;7s{6FR+fڿ_OJZ&.CJb{sK*z'WG7G_CbSbRƞjJZJ^R&rPȲwiq#N2FȶW7GH FbgWWG?sKb.ΞgonJ#*kO Ky g->&faY)Gx 8N(^ ?:n_3N~ϷW_nJ3''2j{ xk_)aqQa^{vnYay7GV `h~^_WiW +.^^2/C*&>[#s?'_'Hl,+I)! ^6V(^YG?kXv+_WRn.~2#g#K:B^^nZ ۻs?/_nFx 'IaY9w/nƆ^_WWsrhh(S/Kbz{#sSc"N."{*{+#o>ff3 Wg?'' n"3 +vf>Gw;O:KNbBKn;+ +JǛ,@`:wy!a&VVデ )'Z&6((fogsk#Sc"n.2b:+++"..+ #s3[{c[[sc#{Zb ++ +*ʋ+K** ++K+ +:J+ˢJ;B:zj +J:"zJj+k{//o/C;:::B"Z""""Z^f&~Vf&yig___ +:'/**ZfhN'gk+3'[.nR/{:k +"BN6h 0@?9gǗWj3'3Ͽo[Bf2r.n Kc;/oo*:jcjj + +: + +j+* + + +Jj +Z2rRN^& so???_g'SSS{*br.nnnnrzZ:Jzbʋ +*:+ +J:{[OOOOϿO/3Cc#{KjJ"BrRrrr2rrrBbzZ:: kJ +*J c{;[##3CC#KKK;;***+jJzzZZzZ"Z""kJ +ʊj**J + + kjJ +*K{ˋ{c+*k+*++kjJJj*JZ:+*j +j +j +jk*ʺjkkk + + +k **jk ;{k+ *++kk *+kkj*+++jjJjJJ+k+ +*kj +:: +*J:jkk˻k+J:#{ +j++JJkk zz{;k:J ++kJ + +jKk+ + *++*k++*+*****jj+KkkKk**kkkK+*kk+j*++***+jjkj +j+*++kkk*j* k**++*j*+*+*+k*jj*JJ* * +*+*jj+*+k* +*kkkkk+*+k+jj+++******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************* \ No newline at end of file diff --git a/tones_american/cause_26_loop.isdn b/tones_american/cause_26_loop.isdn new file mode 100644 index 0000000..a052cb8 --- /dev/null +++ b/tones_american/cause_26_loop.isdn @@ -0,0 +1,169 @@ +*d}EьDH$]aNBzz*;[/Ͽ_g77w7g?/+JR>~~..z&H HxRogi鹹9ɉ)'RF6(Vf>RšZss/o?_OOSC+jzB.BJʣHhHv6~BǷi) I)'_O#:n&f^₂ +S/oo?'?_G?h886F.3)i I9 WGG~^h֖vF2+33o_'_''` `v?III Igcvh((Vn*K/?''g'gLJg''`X0f(^wy99II9WחG3>8xH((v"/GwGGGGG'__o7;@0 0 f7gyy!YɹWoO(HH>37׷7G)G7),`x)RgW)!遱ٷrxX(V8vH;.^IGi 9) IiLJrĄHɹa7/Ga'aIHZ(H3עv HhrRs'oϟ?g_׹7s08gWɖّ1! xrRWFN(8J#2"7))?++#Gg77_y (p`A=~yW>iI{AIgX2rwYf8H&cWZ'7WG'i"DX0ViןjWj_`ƞCS'ɷ&^(k'Ci/S""'W))w9w0p@y==w׹pxyg1W* ؈ &׉6FVh[÷7'珃?gg'7GWd$X,&`91c)7@>Gga)hֈvV/r#33/2[ǟ_//cYlp@@m)?23g9io7SBj*"#rnRr./C{S#˳[kʂ&fvN"r)wϏjZ;.N^f~NRZR+C*z*z#'"zrJRn~[+bjjr{Cc3s;[SoKjk΢R.b.zb.;j*jCS*2#:z;+r;Z#2R#sz+ KR*z:z:ʊ;#++jzb*{ +Jk : [S* +Z*Kj*;{jK*Zj :**j;K R"o3z2{JKKc:" *:[j +z+*[ +ZCjJJ;* +:+c+Z*+3s + +:{* : +J +: ++#{{ +ʊ +zj jj+;++kj:jkj J +Jz+k: +k*">^7Fj&S2B6Cg7W{R93?{^^n{>*#&GsAHf3(V)7gꙂc&R c''iw&>)+(^S?fG*g/f_S&/?obS"N +?+_ʖˇVgOKGhG^^2*cf:G2zRO'ƎRBR:K#^&j:n+Z +2B s˾kZc*C *{CʊrrO?^J//2C{njJ;z;R3"zc+{ʻ[K""*J ZۊKCb"*ʋ :z;{"#[J˛B+k+ +ꋺ + + ++*j+JJk + :*+J:k*{j˻*j++ + kjj+kK; +k+ +* +* ++*k+kzʊ KKj kJzj+*;jj*{Jj ; + +j K + + +ʊ+{:JZj;j +K +::*Kkj + + + +k+ +k+* +*:J*k+ښ k** +;{++j* + +;뚊 +Kʊj{*J +: +* ˋ*KKzZ#K ** +"kk+;;;j:jj++[[JC CC +*jn;z3oK +2ڛ" ++Z;/ rn[bj+ + ++#:c?So?/##Skڳs":{*J[o/b.⎶ p_a!7hhFc7၁i*n((9*f$hkI1-RF^x(y?2Ɔ``Ii)ikF(V"OOC?Gə!S|lx)1 ؀(q-6(( @ayW)WCxxiYg|䤌sI-͍`ff(f)Am6XxXַ_ώH> IW陁W(d$ G!WI- ,0f-A@`HXHO!?nKxgIɗy!Y d$ ɹ1-m lcZG-Q0`HxH> A1)n: +&8hz)I'Wi$|Iyq-&lP7_q`0@ظ(haA J6J.FV(nlj') )g$I1!1af0X)i7Q!nx6vBYz7)giWg$B9A(pp.i)w!ѱv0(66 Ɂ9_(f 2V wS W<*so:2.Bj/S +rrZ + 3[jbZ + # Zb + kjzj ;JJ ++;KʺJ +*k ˋ*j+*++ K k +jhַy!XΆo{OZvֆ[f{闟:^&&ؘ`8)AnV"7w OHxh^ gvFosN'YA9>Nj.RSS*bЬ_1Yy('Ya383ioN&F6vF?W/fNgǟ&f&RsSG''GOFv>''GO79&d Mmi,PlfׁGɁ92Ca `@H&3ii)jx rAY6( G +bb":*/3oGٱ||܈I }l9y/9SXpV1AIx hZw.6n'7>&#S +J3?y |'M`p[WW)ɏXga1x'G;nnRoSF6Ri)N{g_GǦϱM a8X> !Y)G[ )!1a~`ʟ'>&_W?~w)gbLP>m hp,`gY! 9 Nx)A!X +7))w&R[7gj{gˏ<|fmm耐 V'ٙa&` /iI'Vv6(* Rvg[;gGgo˳|!͍QhR:W 3`H7 :/Ϗ[v Nco[*GgWo<|2ImA^WHaA(VV>n8oI!6 +sn#W_f;Gr;w׷'3?w@ a-!)9)FISWW7`7o{Sj62/wW_k'g"B{GGKZ< a)Ny1aK_bfI{62((''3ROn"[O/S/b.:KBf^N6Nw_ +_>bsCzrBr>^:KڲZ3/s/[cos2{{Z2j +:.ξrN~Rc3Co_s?/#cۊBn>nnrjBRڻ*jO?J*[sb" ++Bzb2;2Z CcÛ*{o/{;c.KrbRr{++* {V)?3;j[.J.[K*kroF'g>k"o^2 +"K?zÊ3joJ kkZ::BznnJ:zr˛só[ۃ//;3kR ++[3B +[iIl,l'iA!/FhF^> i{cJhf.K7) W_>>3s3OG'?G9y`ǹiiq-ٹ6X& +zVS9"/Zhn;'oc&Vfz/_OoKÃ[33wIɹ$܈aG(@f_WS3 N6(&Nj>f''wjrFF&B#WǏ 2#/SOsϣ#/7'9SPa s!InX)gG7rFJ'[*oJֶ2_Oϟ*;ss_o/_WF_h( yns#'> 3JR +FFb'_ +k/o/kK{+ÏOJ0L,a-88/W)'kZw"cBr">NNrbR"cg{ /KjkrJ/zH￟COs'gOo'_/›_+b" +Z^f.*kK3sKrro~2 o:rj33k "rOB>.Rr:Ϗ^"Jk2*'Jg. SsS;;zrrCrcKnK*fSnr{c2;ZR + +bZ*?* +/kCo[ۃJkz+k+K2n^γkzsk; {sR *:rjbjb[:RBš2ns*ZK>";/rJ+Cbʚjc{jjo3;[ +*o_?JosCJKr++&">R{r^K3"Z*:{:R"jzBzJ+Bob +J2Zڻ;R&'sS +{;.+~gZ'/*n^bnZ+JjK:r^FN{z:S[3S#sO+[Z +[/ {c3CKJBBZ˲{K+.ʚ+2CkjZRCJr>O^&:[RR2{΃{k+bn/n⢋OOsOo>S sj;r뻻3{r{j2+*{j*z3rkc* b*{:"*J.K +B#'k*jrr/{C2 +;Z2zj*+cˋ/ˣ:kJK+s;*J3*zښkJ +Kjj;#K +bRRnNRbۻC;/{{j*j:JRGgG'_o`Hf'g_ǟsNj/OoSS[ãr.jK*k +"ڢz + ;K+ +Jj**K *kkk+J +*** +ʊj++ k*j + k k++*k++j+ +j+ kjj+*++kk*++** +jj+k+j*j**+k+*kk*j**+++ k*j**jj*+j*+*++*kk+*j**+kk+ʞf. _onJs/#~^>.k'g'?r` aiOnWi )f(f+w7KBV(vgw'_C6zRC?9aY60 <,ș@`VjSGAY)~  ayRFf&/ 99)/f{))O8FA!iNH6kS7w_.o)` ZAm}M큆@x )7) iFa' XOz c?/Soϟ_/+>>:c7^0,ܜ,M-y(p))i)W8`@`B)YAyw>HX`(iyIVfg7gok>^&JW`l f!Q=M0v)iw77shX` 7!ɏ(X`XGIچ&o/:n +_׹̌yMMmщpy OkFHV wO2F~?gokrΎ":k[+B..:S_), rYэ-A7(`@@3+2R>&^f>;gG[:n^Bϟ_C:R~^*''gO0p`6WQ1y ` ?7?;.>.nr^vV^7)i)2vf _2F/_g'_?snx@00xɱawv``8η9Y!IGV(fcO[nV)ifbGLJo&B//)vll0(Wqm0aAA!jhsn&vV>#7wwJrj;s;zjsSiXl,љ*`0@`V'YyisS z(h( +'GSVcBr:COO?3rrrÿLL<0nэm-9NH`(27i)#7i9WsxXX7IWCH6 inr"[/_g_?nN ggxLLf1ifF{>V; aX HG*'&_)_SOOú22*__gPL8qQ [iHXfAɎ^&ZxH?y)~(V ++SǟkSoj.[J S?O[hllA9caf) Ryf(//((^rF6>7G#NsCgožo3Bۃ&h.r(o.^&s:&R[2^F2oS+Z:K#KJrk;"+62:Wiw'gg2*o[f~ +O+^32河SK2ro_sk CO?s +z{ RCJ2; k[o?{(H&GiIyyiGocK&:3/?6Rg[[C2΂J;b{oCk*K3Z'iIl 9)Y +'AƗ)!1ᇢ^J32FX 87s6/7z>"O'3ro3g' +~j{;s[S3{[/|!1!!YAWHf[Ƿ) ٷ.V/XS)w犣os +SOg3>z[z>zJ'c+3l`9A!yw_v HW9G(hCo;~hh*wWkkB2s3c*"c?s*ZZj J2J/'77fl0aqaɹy'>(67 c&#O &HIIrjz#ã/OsnR;_s.KjnSOVPL i W&sRoK&ff:>^~nn>Hi GZ~b/Ûs:B'_2ۛKnBJˣBz_2 )aqןN;_9ٙWCjnsR&Ffv>g +>3S#;#[ÃK +"k*"Bn:3KlY1wf"_? #IyWkΆ;g/bKc +ffr~^;g /?s{kscZrJBz +kkSl@1aGvsgiI"3"*ڲ~f^2BNF2_ʣ??3sk*B +2rK*johp`wSjKwwW׷:3g_S{+r&*B* /?K +kz"bzbRBz.b::NWJB{_sC?o:2c[.jKJ +Jj:šck:z2z"2J:Z:j + s3;bbKsS/3ˊ+s[3C3s;"33kk[cs{k:"zښBB.Zʊ22Jk;+j[:[ ZZZ +ck soCs/3SsCK+JkzRZzZ2"+z2BZbBBkk+j + + ++K;[kc#k;;Kc; k+J+JK+Z:: +j:2j+*kj:ZjkK+jK;K *K[;B*[;Kˊj*[ۻ;+k*+k: +kJ:J +zzkj +닋*J: [[++*+k k*Jj{K+* +k;{ K +:k+zzj; jj +JJ:Jk+*J:kk +J+kJ: +k{{* +jk+kKk +K{{+:kk +Jjj+k+k+ ++*** k J+k++j k+*+Kj:z ++ K + +*+**ꊊkk+*j+KK;; J:j* :J*jj+*k +jj**j+k k +ʋ{*++*jj++*j k+ +K[jkk **k :*jk+Jꋋ +Jjjkk+ +jkk* +j++**k*kk+****k*+jj k**++*j* +j+* + +*j+ k*j* Kk + +k*j +Jjj+kkk ++ K;K**jꋋk jJ* k* +Jj************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_american/cause_29_loop.isdn b/tones_american/cause_29_loop.isdn new file mode 100644 index 0000000..c45a88a --- /dev/null +++ b/tones_american/cause_29_loop.isdn @@ -0,0 +1,194 @@ +*d}EьDH$]aϲ^^NfSǷc~f&vnr;O2w; +w7'O^_ǞBOJ>fJ'[{gw^sR*Cvr':[[>n"no*R3nVsO_'Z?b;.JRsO˺{ϻBK_S{>jfS/KSfz3k'G ^Zor+/'sg3r.&^Br" [^KRZ?+bkbR"BoSkk>NN 'cr+JoN>SWb&&v~n{_G/?b.SoC_RoGo{ÿOC[ + >+zS jnr**?3枃c^RrSÚ;rZ BZ3Rc~~&ۢG':R +*‹'B2 *'_{/? plفqV)!i.iy0H1.G'`Hϙ?h>FzY 1 +q7 wzi!Ga֖_Vs6{((jKzo[?Wsg*_,Hl +Q7YiyhA/'W!h_6gGO/'[GSw)p$ 8H1- y@x_9 1!*[VHv^&ccj;{{[o[CZbJ;`Nf>:o?ǗLJg_?_S/#R~>.B3;[CϏ'''oV(vֈxXƆ~*)iɉ'':>NNF^.OOO?'gR6fVH `xvFn+O7 99LJ'/KN&ƞ>^&΂bJ:3o_Gg_'hƆh8 (hV&.J'iI I9;f^b2"K/s?'O3fֶ(H8X >R.SWIy9 S&FF>N^fκ + +2soC[㣣sSk~Fv(Ș8N+/wi9I )Gsj~.>^N&rkj +Z"B¾&fƆF3GwW77GwssSK+:".NN&^Nr*b2JJ Kc //{ # +ڊbڊK//?O?_/3zr^>>N..:"b*/sss3㛻3#*:jJ"j + [c{c[#{+J:zbrBb:" +J*z ++ Kˋ[{jK{*k :*z++ ˊ*k j**j+K*ʊ + +*+ +:j +:+jj ++{ kK ***+kjjj*** +kjH&__#GWGRb.9f r>N>Ojo*۳{jʺ#2ss Nrs"ƶϗəfN^&SbR6rRw/˿f^k +2K[/?CrƎRCΎ _?NrkR2sszk3RzrkOgoo~j;3+r"_S3_f+/n'rns*^3[/kR"/?*&&.zڣ+ŠZ{#[+..BKjSO[jS?SSzzk{"R"B[*Rn>3?>ZNNRbs'_'_g/[ CO/ۃ3C +^ڲ>Ns ,XWy99Y!XX~WWww"Nr#/js,<|,' 1IIawxX ^gwG# +_F'_Ok/o_/3Znn/WưPLLX Y فX``H>g))CSws痷oS+b@L<i1yX?i 7??Ǘ'F( wW_OO?3J:'7G,,/I!Y!IxG7Wwƈxx'?3b.B+ǗWgLLP8IY!YaA@k7'IW^ Hv+LJ_w +b[Gc P pၙa1IhX`cGg_ Ig>V88ȖB +?G)b s_7X̌9II q bxH6#"Y&(R iWǟ{zC##{s_7x ̌0')qQICx(n^ǹWrFf^6^G_3CSs{;kOg7G0l l _iYA{vN6Vf) s+rBnf6C_/SϿC{k3?__,,p`Okg9!S +".f((^j7gS3 FNzc3/_'o[soOPN_91!_Z3Jocfvrssg_cϟ_s(,XbqqwgLJ&VHh*KSVh(KsC{g7?[[k{s?ǟ(p n--AY׿gȘh_ I*{6xK r2jχ'3 )x|<ȶ;im O#KXX ?w(x J +9»k;o)))WB$ MYOۚ^`g!!9g&0hga_ +RR~6)9i)WIi(<P'b[IA=yh QqYi GRP,0/jBoAy:vVy)7 igDsymaVfX-9_ jxHOw/! & + V:))) .ڏ¬d$@iW:I &Hs!)n8@XFNB!ysȘ~wΖiOs;gi__wpd$ yjFѭYnXFwᑱ (kK+nB^ZnnZ/_o#g3__ϷdPW9 -a@^v؀iQ1w @`HǟrwFFfFriS#>/ig'wd 9Zэx^`1 I9x0(&Zr.99bR&FF.O7:__3WR\\fmؘ.Ayi(@&6FIYIJ(vR?Ͽ_Ϸ3+*l$G!A3kF079y3㿏F) W*n|,h-)IYif`B2W1!3[k"6`X.^k9W/~6V&g_giG+L,8x8R9AQAy!(^/ '{Vh~)9)'sK^'_)'^ؐ` (A!(V)y {s6HxH6OGO'&ƎkW/`P X8N!1!! hVfV)_S'NȖ&(F;G7wwO;c;cV `xAaYaAA_rfΎV(>S'K/wO(V>oOgw'sKK++Sσ>(P `jy!19)vh*^"LJ'kfƆ&n_OgO3b/S20` ßi1qa9_FFh^o۞k'oJrfR7Ǐ?'?J;S#Kj( ppH?JqAAq+gH&((S')'rV{j.N/_Og_2KBn `P@谬p>{:)y IVf.8(6n:*oOnB"2ۻ_?O_On^*,~,^aA!9[^J&rw/ϣ "~~r"'R>~NZ>8prhǹaaa*3S28+~v_3g3[vf~bGo??jRf&fF~roJ``Xvv)G yIiS?3b'ks_K~FFvvFfƞjs~zB&N&/ +g'?3 (JN+:_W{*s&(V^.Kc:o"'?C;s^nj~>_C{'Oko'__+{/ONR?>^3~>~['vc&Z^K: +fK:K#^j_z n. R?K~+S J2.?ڢ +kr2Of3#^R&VgK&7/>oN7.7'~W6gWf;wZr'G +{S^Kh67VCWc[F )n~˲ +n""bsz&i?fsO2'sn/;g6s2ڛo.o~/;+g/c^ +*Bº&Os*".럎zSۆ>3;gvos*. +>rnR>K**R';[Cnr#.ʾsck;.[sFr'>[Rn'7{^."/+ +["nrSnofW?#f*.fRK#bc÷NJ^ko?k.3&r.Gkjk^&c'Bzs/s'ojC;BbbCbj"/vϢ/:o3/*Cb^.[S2S +Zzڏ"ÏrJ_zn/B*>zZr&{>s^S*';R.[ c+*OG*J3R[/R:K/[B/J"JBk ++J.+srB S2*J7 +jKc2"oz>kRO+jjc{+{[/.S + +nb{"Z bb2"s33JZRr3 +'Rsb.RS. ᄎ{O~+?s""&.o+JnosZO~'^*ϊ*Jj.jo.J^r;'SFBo&~'חB__&:?_R"[nR_? 2zKfnN~c#rc[jnZBsC* ~R{/RΎo.[j2Rs3BCj;ڊRc#R +//k.[ON+ +R>*'>"_z>fn/s +;2zj{J;{oOS?;s{oCgjkbo'F_v*{~CckB.nR&^&R:c2rNf~7WWww_og''sG.#w.BgLlQ-WGy1x_`)f7V?; [kb#n[7?ɆP&-1_1Viր.hY'))_f>xGoWRJB&Cg[g_G/3?\LJi_J.OG_LJo/OVnLQa1'9(/WGWsb8;ɗWI_#&Nr:/W/?s|X1a 1_in艉 !ww_H *')VJ6?G'w7g\V1 )r6OW)ǢX8營)k>&&c/G))'n8 ,9)aqщy6V(ֶǗ aI kXX 6N I~^ffrcW))G &NOwWgN 8Xln!qAɁ6vFO I/ɻx8;)yi{^{S7Gl`,liaqY1/rohx^Zn _G)>V6hxV~fjiwSbj_'Gllw1aٱA+g&f. WiR6.ciZRKj*/OgVpff +YY1)^ffC?# +fvVs3ggׇS[OsˊKKssnp@(H׉aa9AyGiɣnbf.R3sn&ZNbKnO['3g/_CC;*J#2H@戈'! aY)IyϣBr.nrF6F>^3_S'3/?c;;j:B26hVhh(r'i 9Y9G[{^6~^^6r;SsSSCCs/ *K:jj;:>hV(HV/?Gii999iw{KRVF^j+'c?sOsscS/#KJ^XxHvr9ay 7_ fF^6R_'gSo/S;"..2ƀ8x(چ陹aaaYy 鷇r;fFhȶfʎ[/o?G''oosj*RfX8pV` *i)YY!I)?B2v6H[N~΃Oog?3_S33 +/Z*.n6X,aYAIaIGC26斖+~ggg_[s: +jz+KF8PfP0hAYIInF^Cۖ3fV&&Ύ*G)i)GsKn2ڎC+OϏϻFVV0(wI!!ai_6h(;3W^(J8vhF^zWiI&&r#/wRhLxK _)1ɗ&R2Sy9)9i^H `&Ͽ! 6fF~k' GoH| @iY!Y-Y*X ('yyIY!w6H``?IIinngwGg?Srrf`pG!iAY>&:h`w7ya;&8 `x6vgǶ&6B&7GξjBRg&(PXh6qmq!!i:B1野H`x(h Cs#.ʃcW7?cC3n^:[g_c?($w^3_@@!IaxHXXG )g緇O68XRo9 W#*o*[oRB3K2n``@(99'V&+iٙ cnV^jok.(VF__?_ :R.S#:"{##?ϣB(Xl()!ٙ9h8o!a^v(h&/wSFV(.7WSJO[f3ZJ~N;bbsOz>VHh v 9))_[R^_WWW7'&K~^&&~2N__o#3.j?_jj+[[j2xW )& )w_Jf^Bc3ʲ:bv8"owz ?ϋjsszbZk.nj3cj +(`,`II?G'n^& ٙ?.2*O2"R^6f2z +b{s~Oj# ̄o 3S{"jo3zn2ckںƸ0Z77Go/kO)I'O'3:&^2rfNNn#C?[CS/o J:bb"2"".RF`8Ə_ǺKc/7Wiws3g'oʊ [ʢnΎ>&ʃ*~FNkS33NNsJ.&Zz863oRj/s3c3wgSOgOS:j +bRZnZn.3/ʂJk[K#cRk"rB.Nn&3{c#CSoOC3/C;*zzZ2222Jj[+ +K{kJZzbZZrN&z{{cS?/ss{jBZ +:2RnN +#Kkzz* +{ + +J*+ʢr2bzR>R"ʻ*[{CsSoS/s#ۃK +z*ʺbZk ;*J* ;*jJJ + +"2RR>>R** 3o?os3Cs[ j +ꋊZ"z +J+*j*k+: ++ ++*+kkkK ;k+*K +*jj + + +jj+k++ +:k *j+*jjk*+kKkj*k ***k kj ++j++*kk+*****kkj +j** *kj*kkjj*+k+j ++**k*++k* +*+j++j******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************V7nay)o;g(Vw.srKKkF.gFGoiwfV^F2:s?O.C{>~VJrs뾏2:_);gn+'V;w_G^j3bh:JrÆ^?n~+2O&K6wn_nbWoGv2S_?B.>/#337G 3?:;;NnKNϛ6[OO#R[nw6fw/R_#rfj^ +c;"SSSڃ:.k[B*φK7f32Z32 3:g_C^*oKf+/"CsfW.zSs; +O&r^rSf*R~_f'R^/S>#RFN>Fwo&JƏZ*n"s.K:7~^sNJ_B2'b^Cc:FJZDzbo*f//BJ  +bzZ{"r"**.zۛc.*sr_?BsNb:JbbJNoN'2C~# +ΚŽ +kb(F3zg#'o2Z[BjO?jjos.˚o#.z*CRzZ_r_WB>3Jj^22N>&rR^frK')W7 GW__g6nZ~2_㟶#H#S'Ɂq 9''ֆN8V^V'gzO_[3Co'___G)?WP @0 +?'1!IIi)oFnH~Vf2#g?7g?oos'wn@`v)*1!YyWs_o&hh(h^n/gGgg__??OO'Fg,vXXg !Ia! )G)*^#vHƈ&./sGgǷ?_g_ 6_֐`XV ai!AaYىWJJ֖^(^fGG'g_gcXи h  +IYaY gVֈf..o#'g__'Ogg 6XF@`8xKw9)! oJ~fVv&~Nzo??Og'RH&舰X Fo鹉!a!iO>^_sOs?3HKxvx HV^{y9y!aY wGgfF>h^zn/?[oO?3SC3'sV`_!Y!a!wsN(6>VV.rs?_?ok#S kj ?W,(VP``#"iYaai) +:V^f.rS#K +oBZH9pТ`_Yai*V>C+_Gr>F~n[V`hXVK_ iyy)[[r/3? Cz^^~VFFj^HNFV2c2[SWiǗ9)7IG_O_o/GR7&.RZFv϶Ff>f;(OR:#/I")Wo!bB2fvcg[ȖI+2j'B_f3~vGSCo7[ϊ_S^f6[g@kK~f~i{If[GRGiv7hn9o۞ɉB;gFʎxhx&o +hzh/~nhoΎG2)ov_CZhbkijG9)gb֞_Fr6_('w2 gh&V.s'2 :O2rڲfN;n˟{s3RJjz~:.*S2jC/ZSZs[zs*Kj+[* + ;JZ+*j + +KK +kښjˋ*j+Z +* j: +k*jk;k; + ** +++j*:ˊ +j + ++ *+jk+++kkJ*KJ+Kj +jjjˋkj*k*k+j+ +* kJ+* +*j* +z*;jkk+**+++*jJj*k+*j+****+k˻+*+*kkkj*k*+ +*j+*+jk +++k;jꋋ+k+kK + +j* +jk+j+jjjꊊ +j+*+*jKkkkkk*++++ +ʊ**jJ;j +j+j*k* k:++ +*** + +* ++j*k j+kj +J* j +j++j+j +*K+K+2뛣 +B*k*z+":Jj+*kkk++ j+ *++k**j**k+**jj+**jJ +k+*jkj*+j ***+* +j**j+jž;&KNg^Kr2gZ2 +G7_6 ׺_87JFO)3ɇ6I9^( f)xf~r~7h&W+B();~FJW{W)SZzs?'rBws^<<`8w!AgihwfII&O{vxǷ2wy3. W'_ o#h$DO GxwA)g?av⊸HBW)H.GgjBןI7O`4|3ݍA։ 8aW_) VV +SXacRwS+C)Y7f>j~K wG`P9'A0ȶְa Yj( )!v (:(9GC~oS_ggW n3|A&`07fGY`h^Fv2NRHGW_gR"S';g_'o[;W +Lq/YPY)a9Xgy)NXhBN)WhNs c__J:?/j\$m.G)` i))_狆RVnS3/_cˣ3_';,1-i(!IS0!!)WXyWxx>'Ok'_fff_{C3kwg[#VdpQG69z`p0YA9)I@iOXhJ>F_'o +SWg 3_/j?{ odVA&Yp69G@^gg?CSHv.(i^ 3.S7r__K{_ +\'QYnpxYg!ix+z.!!'(^VHiNf>VRO7w/_W +k'*$|ȗab hg) A1Fy2^H.?IWiBf^VO*i糛Oo);6da @ڏFa-F x_a!SV 7W73.C)o/go# {f\WWmGHXw!i7(@vzF6)9I czf'g)W's xygG)n`VyI w& H~^^KWǏV^#_G_Z/{Kw)O7R، 8Y_yHx +[7y'O+:Z(x8VF.~jG/_.+ {O)w7wbhƉqI)9H([~& a!iGgG xv(v)緷B&ZBK7W7iK qA99!6X~66aiWi7RX8H6)W)WB^^Bswi)W)L<01aS XvÆ6{9هwǎ@(((^i'7gzBN +7)i'/`ܤ`(Mp,8j'7q-iఀZ^**o~VbS+Kׇw +{gG&\P`81 1a0Kfa9aRvV s7IYWr/n_szW)7ǃG`$<80`-) >HF^G)9Yi)ovHHHxx鿗Y[?V#o))gG77~|p F)aY7~xOǏy!wgO@V6/G )i)2f6&?_'wx0x&i)1)I?Ǝ.&fSS'?fnFv.S'_'r::. +j{VVH(fNB+SwWwW ig k.rB&^rJC3S??OϏO/;[ ʲnnFV~2/_wחWi))G'Zf6F&N?Gggg?Ok#J:.2&fV66֖f>cW)iii73K jfƖ&Zo?'''OOo3s[.NN^~fFƖ~.sח i)Wocûn>fFv66vf^.Sg7'wG ̄+nrr>RRn..&^6Fr'wWW)WWg_²FF6vf&fRZ*{/'_'_?Ϗs# +ZBrn>Nn.nN^&>z?7wW77gO33r^f6Fbr/g3'.w)zG'R3&ZK^NZ +>BֶHv&V?G yIɉ3Ɔ6^ & [ƶ.2''__'ۋrJ{C/nl0H9y1aA9fVVHF~>)?/[&V8pra_9'W.'z6RVB&OiW'_)|pv 6W!yGofHFK'Gg)WCVH88IIKn>{r#OsO/#Co#^ +`Iw&?aRƈ3[ WIwc.8vS')h:_[k'/???+ŠgwGJ, VW7AqWI(&NyWyV#_7xj {'#wgJrR.Oo<!)1AKh/c)aW?h6VvsGX&_i g/o&.B; +s3zO/0^HFqa91YNz(Y9iaI2Ns">†f +6(gn/W>^7Jz"3/>nK +._S3W +(`SG!H#+*JIAO)׶HnF)7j^h +²gCvr7GZ.fo +S:>J[;"3@L.'6Ɂ1{~X_Iwiz^(jjC?.fnf'r.2Cook:;bc#Cs{ ʃ{(h舀kWW)i3FOs >'Wg?7_>rksB^&>&&3;CN`29s9VS*GobR_'.Kn&(Ȉ6c'[ R*_G)W3‚Jk{~n22+*J6N[S**z?oZ +#jc kFƆ6 +gs{/W_'sjBr>ξr2+J"jB"K*cSsC/ۛ*+kjj*JZ:JJʋ +JZZrr2.Rb:k{sSsooSso/3[[* + +j+J +brBZzzKK;*:**Jʋ{[CcB&hv7s7_gg__'''?3N&~>&N: [kJ//sos3; ʺ":zz:*jj*jk {;;K#c{C{kj+k+* +jz:j:J +j;Kj kˋjKˋ J*N&&ZJ/O'__?S[z"r.n.R + {[cs/+ΞVŠ&:g?s_W7'7'_o[.~&~Ɔ^^nNNRJzj3j#c[Soss/kc[j+bjj+ZZ;jK +:nVvjBV+>{_Ok7g?矗/.˺NRB~>R +z +[Cs{K[+jzb"bFr^ Z/?'g_'S3+ rnrB>.Bz+ +z k +Kj+{*:zzZ"ZZj br:[s;;/scs/Só[#{K + +:zz":z:j +J:zzjJ"ZJJzKJ*+ + Kk{{;##cCS3s3; +*JzZڢb""z +zzJ*J+J:*k*j++*J[K +{*k{Kk;{#[[#[;; *j**J:zzzzZ +::+ +**+ ++Kj;* {ˋ;;{ k;;K K +*j*++* +*:*jJ: +*J + +:*k+ʺ +*kj {+k+ ;+ˋ**kk+*kkkkj+; jˊ+*Jz:+k+ ++K*+*k+*+s[[ۛ +Z~*3[sz +c#z z kk; +{:Kj + +kkz ** *˻k*++*j*+*k+ +JJ +kk* K +Jk ** K*Jjk*+ + +j*j*k +:ʊ* jj*+*ꋻkj++ +; ++k*+kkjjk*k*Jj + ++JJ +* *j*k Kˋ****jj**j*j+k+*jkjj*j +kK+*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_american/cause_2a_loop.isdn b/tones_american/cause_2a_loop.isdn new file mode 100644 index 0000000..722f400 --- /dev/null +++ b/tones_american/cause_2a_loop.isdn @@ -0,0 +1,199 @@ +*d}EьDH$]azoˋ+Z ^J/Cfooz~onKkk+^KN + +f.ssR ++k+r#⾟nO"B^rnVNfb~"^K&[b_BR*wƗG;J*rO>_j?7&rsS⟇^ofSGR.*K2 +7OrO C^z#ong돿3&o_6OVZ+FvsKƙ)bwx/'6h3bROFKg&[v&(6 +c(oN +>gǢ_Z^N~^#۟/>W".R_3N{2sh~ϚS:fJBii':6/+fngv+.__f'/[kG&V.C3o~'*BjJ3r~gwr3B_BO+#C2SG.3{'3_R; +gF +>nj?r;/OCG'Bk+ˎ[3 ns*+&.nj/J3*.;3sc>n^[2Kώ +s[*+*cKo"c 32R :2k^Oz#;k&ZS:# j:rJ{;SRSKzJ*ڋS*ۛ{jnˋ>3cBksnk.n; *B"K;3j#z/CûCOC* [.b#B +"j +j2RNֶf&>›OOg7i ))_?/[O^f +R&>NH`y11ɷv&RN_3OjS; +js3'3_7  YiW1WI&HVvvn)7'wJ^R.n^^ڿ/'g_GWI\ !1-Q!8 _i _R&66N#3wG_wil$@?Gf-y97g Nhh)o!IWSC&.{g7o3_?P 9myIY8@V6`B)!Y˷_F(vF&ng'鉷''o7sG`m1יف8NX K~wi7f.&v+32w?KO/ _p00)ki{o^__//b. NzKJ +;s{ۛ#ʃz*jZn.^&^^SsOg_'gGgoCKZR.ξRRrZZ +[*kkkc*{J+Z2222rZ";o/oO/s[ +bbBR.r2Rښ::+{+* { [*˛Kk **j [#+[*j"j:JZ:ʺ: + +KKkJ z* {k KJJkJ+2*~ +#/ +2*K :"+*J#K*J +J + ++;K{*{;k:zˋk:J;+j **jj: + ;cKjj*Zz + +zz*jKni2^~nzr¢;j+j;;ںk kۚ"b2*{ZJc{33j+zj ++{;#{kzva Sȉo('gVcƷ3fok.S:#N koZ+K33[.# ?Σ[2[NkS˚OO.RRRGn2'v^Wf;Z"_bGNR?N'^c²*&SƟ_BKJ[{c:n':o#Skۣ#g.#{robSN{7~or(?v[v2N&zgZG^g> V2& Y_`XyF3S/s^gx)*.s +Η6ʖwfs('W&R2WVBWr6sSVZ!{&K'FG +v;NfG)ʸ)7h~j76OBswgcN6 H/`وX(I^(khj^/[6b>Z66` +@8`A9PYiI W9Xygr(׶81ȑA@s#KpɐchXHvy"ifNi>ׇip6fV01۶>WVo'O_I( +A`A(0m i8y^AXYP-薁 JyG)#8z_a8ff (aaAYiF&3Wh_`f iX)6f)R?h'VKz>N#_;w^G^xf(///Jk2+/*wCF('& h'K"ZF3(WgWƞNg6GGf_+.G +g.'b; "3 SSjS2["crrjof n.ھ>Ϗ'w7o/''scgzO7 LLz9mQ1q-;x.(9i9'ۂ6:#w <ЌC!-imqGs(88fh_WɟW3:^Ɔ;g_iW׼W6ÞqY!9_K؈HFi7I_.~7Wח))W|P̼2!A!rf(Vn:i9W#N2GLH2a1AY17~~z)I_b&^&jw 7WW׌Lp@8^9!1ia7J.FJK:))WK>&v&&>/_)i7 Wg7L0H@(Ry)QW97iJC7iiGg^S~fBc/)7)gLJ?2H 63qraC.77k{2~FnZgG7gGPL8`XH'*!yy_'s'w/32f*v&2SG7G_oP(W~ 7ɹW'׷_OSJ[RZF"{g7?'`ؐȘx(gW !)WiW7G''+n&z".K_ogG``@HXxVJ^i7iY9)G)W)?S"^^6^r;w_gJ`8XhZKw  wWi)7_>^f֖VfbOg_g)&>ƚ)iWi)ɉiWG&(&~O''i( ``HFrS_w)iiiWwG/B^V(V +//'gg'GG7WiwxFX8`vf2_WGwG)Wi)i#Z^Άs_'_??3*8V~^oOG)GW'G_// +.Rzcc?x(8hhX*yy97wW[ʚGb^&ƈfrcOo3S.Ck;oCz2J"nN&jRBKz33fg_NJϻr>>>zR22zrJSoGZcφO~r/.nb~.2jzc/SoC//3C{ >&(v֞^n_ _'i/~ZzoSS_oo[ @0x+7Gw9׏>~"s_g>vhV^'?'__cc"2>RR '/scb~~RrÊK n'˻{oSZz~>n.rrZ +""zjjz;[[SoOϏo/3CS[CJZ`h`^fR9 wI [ +.r{oO'{rhVr_i)W)G` `| S{V`.II'YV^ ^J⿇)G^.ȞWG?'vNnCN ++o cbƳ˂NfV(^ 7gIGw+>z&SKgSo[/O3O''Iod8CF! AI(_^h^79ׇ!+n8VXH.Κ zGO {__wS/O3k.:2bS6p`OYaaygf6kr'Gg R"^>rS?ggGw?*{ L(&A_77NC)3>(^f6:Ə/7_zJzbJbZz+z ++Ș n"Vo 9)gwiwSoCN&j&R~ZZjCkK;z +;*+ +JJbZ222nnBbZ +KSoo?//O/ãs{kj +RB.bB2:j +J +{;*+ۋBʢ:*:j{+ +{ ã {k*k* +:::*+K"J:ʊ* +++ˋ+;;*z +KJ*jJJ +j+*k*+kj +jJJ+;K{; k+*bz :J+ +k+ +j++Kkj+ +:Jjzk;+ˋk*Jj*+*ˋK*k:*z+ +*k[+**k +ʺ; +** + +;;j:++* ʚ*J ++J;껻+jJ + +K*+*+ +*jj*kk+j+*kkjk +** k+ +++J+ +ʋ{* + + +;Jj*j*+j+j*+*: + +j+j + +**ʋ+k + kj +kKKj + +j ++++ +** + Jj&/'&IchgiIFhhAxiJ(h[_&WinVȊ7+^8f症Oh&^giWi*6H> W#ƖSWc^gO' +ڎãk 2>+c{O"CvVkISv(:7Vs'*S +ss_^'wv&V(rg7OF.)vw)f&OwRK*3#+&NW'F 'Zg_ ~_O~S&?rG^SW)W&>'Cc#n'O;7cRO^Zc&_?:.NJB~n;.s^ϟۢwC2g^{>R/.VBc/F&zSC_sr +oo2?β3f''Ofz&s'&ggrf.7?~R'~fCg^#O{Ͽ2_>*7:+2"c#b. 3F~gJg?>.:cRb +/cK" kNrZz+>3_3j~3brnggnc7{&K"j{{;[.*>XPYAqiI gSg79Yiozrjh܄,'Q-A!Yays@8!Y)G(v{*zw''g'7`XhxHOqq!Y`pV^i1!W ViYY//^ +s'0Lh 7эQ!ai@0hh(OY)'7f6'9W_/glhV-y!!r FVyay))׏H&rWiǏ{oú2x,phhhhFa11I iH&n) gcK*bf:[ۊZj{#+Zbjsʾ66Ɔ^^&?''oo//s[Kr2rR2rrbj*Jښ + KzZ+[+ jrbzښ*{KC/SSSK b22b2.R2zʊjj +K 3c3c[;{꺺JjzzZb": + +ڢzj:;K++ * +*{KK{KK* ;* +* +J::zz +j:ڢ*Kkjk;{J*j +K;{˻;;;Kjk*jJ +*+ ; kjj * +*zzj*K+{+ *;kj:ڊ{+ ; [ : +kj +k* j + Kj+JkKJ ˻{;kkj+ + Jj*+{{; ++ j ;k JKK**:kjzkjJ*kkj +;KJ +k + +*ˋ*ꋻJz+K+[Kzj K +kK + *k;jZ[ JK +++ꋛ{"ڢj;+++jkJ;scJ +[+"c{" +kZ:K+:[;*Jzk˻ K +ڊ*JZk" Kjk*{ +kK[kkjC;+s +#;2Únr++#z+ +B**;+B ++*b+ KkzZ + +bk[*jk{*c*jj ˋZ +KJºJ +*j;;j:*{ *J[ʊ*ʋ" ++k*+++;ʊKkj*kj;jjkjkjzk +k ++ +kK;k+ jˋ*+k;+J* +* +Jjk+K K K+ +jJJ +Jk*J +*+ +Zzk*{{{K{{{˛ˋj**늺: + +zzZJzj +j + +*kK#S3sSs//CKkKk +jJ"ZJB^hV((fzSg)9i)iGO??OOsK[;z.~R2Rr3>`ȸذ@vcw7aaay)Gg?j2RVHh((fRCgG)ח7LJg `p 'iy1 W ϲR7C26hhƺ_ WGw) 6L| 0`iWFH6)ﻟaS^Vx+/KGI)K+OKZK?7giP 'Ay !!Y&O;G3:X~~Z&#giIw_ +;'W $l( `B9IyAa&63 !y)wXx8h''g)O*3 /_gg_ 0V, !!!G2_ +bn?ivfoZ[/Sss3 `^vh hr^WW9G/3B^NN&"j[/?O矟__^(`fh3I y'Z".^6f&Nz+ /o'_??_h88x`X6R_ 9yiWO#ڂn&^rR2 C?/''?OoȈV6s iׇRRΆFf^rkS??O/c~(ȸ8Xx(. I9y9 )gZ&f&6f>+ o/ϟ//Crh8x6F Wɹ9I i)7ڂFƶ6nRRKco/3oϏ??o/o3j&(hh6&>) iW7gs:FƆR.33SoO?s3 Zrrvv(6&R_G)ii)'C.>~ff^&^N"ZZ+3So[{ʺzBrRrn>^&^rB3G77G/:22n.N.RRR‚b":Z*z{ZbJ* + +*z+*j* [;S3Cϳs3s;jJ +..Ύ..?'V螷rZʳ'?'n&^+G_n&_C&'~^r'[N.js''Scrrc + +j+rr;# +zK[k3ck +: CCK:"ZJ + + + +kjj+ K j***kk **+K +k+K +˻+J**jj +*k**+jj+KKk Kj*K+KzJ*Kjk+jk *j ++ +*+jj +j꺊k+ + + ꋻKk*jjkkk* + +*jj:J kJ*k+kkjk*j*kj*++kj+kk*+*kJ +jK+Jj*Kjkˊ +Gv`(*Of3.WyjȈhF^Hɉr`gY/cf_.jco&Rn/O?^S^&jF+//_.ZR'*w3&:k3_ˊ&*g"gGR*/WkNs"K'2Fgw>[6v+?{Gsorƣo[B':^*vRϞ*Ϛg/^3WNF#7GbG;3+^{K3'o>fgOS)'(Fi6h&Oof6oWW"hh:)+VF 7g'jz2Sc +^:zZ;krnbڳss/ c/SJ'2^zO2n'"^~:SkCC[#RK.'3.ϿS;**CS[f'{;K~.Ssۊk._KR?g.&njK#*. KJ.N+ocK*#z*K{Rj B#*s#*{k3JR*{+R3 bˢRj3o#˺!鹉8i?'ya73j{7W3NWWnZzw \,-kI!a7y>!Yhg_.^v8'G2^2o'O'ggCS7gۏ9f2!1i(` [ Ay'JwZhn@8>IfjS)Ww''y di+G)?"iYWWV(&'>gGWz7oG'/?gxL 88Oy )KV3Wi# +&V(x`b[wCC/'KksCS_?(`Hxv@86V*>B9!!WiW9iOgw?srf(Fֶ6f2n+gwGgwWOs'OoHH 0`c">)9i9I韊CBf(6Vv6jK)WO33rxxXXVj2>)!y9a!ɇwJ.N^ֈh(Vh6B.2OG7K*Jk2HxX hZ +i فYaY 9IWo;Zhh((h(^o__7Gw_/RhH8(־r3IYYɹiw:z~(VV((h^RZ OG7w'_BrrRN.NVHgi y))'?;.fVV(VVVfN[Sg7Gg'g;k+..r^>RN&ƆFF>Ri iWw_/cR&F66^nZ +K3'g'_'s#*Rn~>r.nn.2:* o_GGGûr.&&^nBZ+//ooB3 zS3.nR.N:Jrz":+{kۋ[3[/#scK/jSz +:BJ2:Rn jRˋ"S"# k"KcKRjk"ncSKBCs{+z** +z"Fo*Κ?3"sG~³:N?^&:v&3Zon7OZ.n2Zf۸9jXs8zƂrچ(SrZ_{6?h{J(Wivng6GFWK;WF8; &:^"6fWH[⋶?N/nG>r+6"gB3Sj~''/z~+6_ f8gKVbs3^϶vj{'s_G7R>Gw:G(_&n'Z뺣h)f>S".[VZ>GR~~:n.b^s+#_sg?[ڋB +6Gbf*j;2.s_k((`@V>rIy9I_?sbfZ_7/W3Osˢ:/ ^^sJw_3?sWlj 0`fqMAmG#IXpHǚ"(8VH؆.g)k+2Z*OW')Gw))D `m m&X^>`0iWwGy!R.(ȶF o'/B.n2s_7Wi77 D _I 9~H(9!ٹ!i&hhHNg'cr{zZJ3/GG_S 0&`'Y}Q)-Fh aI;VfG&WWÆsk&Cw_Cg/_OoOiXx@ =m)g6@ aa iIxvVn?gR:^c3Gg'/ϟOW$Xжۭ}YGZQA"H@r[` HFr?RnBkK _OgC[sYl28R .SX9gCRFh(3'W7_N./s:KS/,ph M7^(^狘7WO/n^Vvg_'_ [K3rrs88G^'?ʳ?&Ί/bkZ +2~{K>b>NsoR~>R:Os''s.//OB2s/~6FWjo&rn +泂~s2>&Sc'ORg_gzJ+Bg_2Wǻ+sKKv6&^BO7bixcWsc7Vnn7HWij)+*~Vg>ȉv3Æir7F'k ?rBVdžS_+w³oz>N78WV7 vbFJO)hr+Ow &C׆CB'gr^ڞsBFcjG_JgƗ&Jo&FSHhCR(/h)8_KZvs:sN~"F7rgO#~3cVgb^/:O柾(Nj^'(o[RyHOJS FG+/kf;h_CrwS&"N~oW뗶JVW(GFk3J2N_F&&SN'&f_JZ6Kor"o r?&nR/vSk '>{^/ʳ.'O2^oNO+Bg&_.K_~:C*Ks2covǞ"2>"w^Zo'滋g6f'^gS{> R{r2/~^zZrJBfrÊC{2ss2b;c:;{zk3K{*z*.*r>ςBsb{f_.[R[BK㎺NSNo?2./3ZJ.{;+ZS:R{.OZbKB J+#KOo2sc.3zc+ +o_*O +2 +ZjS3/:n2zj*+ʢ #bS:Z*b" + +"szcۺ;Jsj;rR3*[kj낃:nCJr3b"{+;*{CnCJ+CkRzۊ2 [#. + +S2:[Ro"f.c;_n۾.3_S&7":O# /JG; sJS_^snS{n/2#B_>nR'f'>ʚZ'B.w'ڃjiZ/ :k>*/RGvG_.zS^>3 &?oS*r>_^s^/z +//Nb2;#R/3(7 +&G6'&G/FG.snڟʾƳϚ^Wˊsc.oJg;skfڢc ++/~W &C^.jF+&閏sƷNg^.".z& +c6>^Gi#&;f&SK +(nihw/.^s.#SFW{+o +^?h&f)Οþڶ?&wR6* ")(7r/^N'WWS _v_fWw&w6Vg +F 2vg3ivWvV)oGHRƳ7. R7V_bnKRW)RV;)( wV&h((_8WV#r[wRc#_(9HiFF(hr';!)i>*VWo>sgvg.nok(7F?_Yx^R)vrv~hGhBR2WƏ'z)rWF;GjVv{^SN*kobo?;z>.N:rB//~ >#.*z{J>sc27 +_j'r>B{kkò3CJ O~N3ʳKrr* z* Jj* + k;ۃ[[c*[; j+Z Jkbjz*ZJR"bjºb2n>j?'_'_O3K3j2BJ"Rncj+6,x(w7_I  ) I)WO~f(F~Ã_gg'_G'``H@cRg yI99yiWfhhΆ/g?3Ggw)g''go[ +PX0`3^wG99I9yGS.VȈh(۲f ;))w7)WgOg" sx`/g)iIIIyY9i9Iǟ^F6(h(VV6架f[{+7))w7ۺ[;pX( hC +RKW 99)I iw{~vVhVv^^B'w7G#s zrRB&H(8(c I)iiWgc2&v((VF"{_3Gs^.br2r(xV((*Nww))I ))))wg.~6vvֈfNRn33'g__/+*n.N~n^F>zj:˟_g7wW)Ww77Gg/S˚n>F^>^rzzk sSsS3s[k2RN>>nF^B&bn+cg'_o/[z+J²BBrrbZJzښ:z"bz."r2JJKj *zkkcCcsooosó3##+ZZrR.R.nn.b"bڢ"j*K[{#{ KK+j;+* K;# ;{;;; jz:"b"ZzZ + +kkk˻{KK;K+++k+k+ kK +*k+**++kkkj**Jj* + + + + +J j +j**k*k *; ++ *k +++ +kk+kj*j ++J +* k+** *++kj+k*j+ j +JJ +**jj + +jjj* { *kk k* +*k++jjj************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************* \ No newline at end of file diff --git a/tones_american/cause_2f_loop.isdn b/tones_american/cause_2f_loop.isdn new file mode 100644 index 0000000..65afd50 --- /dev/null +++ b/tones_american/cause_2f_loop.isdn @@ -0,0 +1,160 @@ +*d}EьDH$]asNn* +ZzrRZ*.KOK+j/SSOsOgϿgoCۻJz:"Rb/NN+J>ZfxxzF!aqAq!~ȈhVn_חgC2F>Ȗ&&wRgo>S2.<ظ@LX~YA 1!W)2NFBv"Rκb{>c[~+bGo_vcf +0h`6v~7wYIׇ#&h^s.rÚ"&7/RCgNO&^zfxFr&fyWw!aY) w2NvfF{.2o惲.6^OzRFWN2fr*h&6 ~:RvIOٙ)i#w>ZN"f_~g +?VώrhrnBjfHzHVS)!wY)'G .˞Zg.sVsƷw^Wϗώ)sfbSOf&Fz( (6(&IWI)'j/?&;:^>>rN6O>7F9rg'n?""_Sj"hhnffNj+K'oo_'s"G?))f6Z? +7obz3SsNv){s;^'ꊋ_.+N'h^s7ڋ77J ~*_g6C{Bg/)s9(+ڏ.K6F{(2+.iS_s϶+V;k"r)FIWhO*+!oxـrN!{_[^)xw(9Zyמ>Zccj'oGW(_Z7[Z7ַ3GW:/掆zRfv^vZw8IH/'2(i +g_2~z6&g' Wb2'Of3ViV'F7{(_WO_ F( vJc/ SiYcIV' ~7Wȁ3'fY):(r'*)6H h/_x`IVz/6*F~RW ?G8FG²'B+GW^+Iw^F_Z3!(iihhngj*jF^Ƕ8;(F~`9&Vy &ـ(ƋZw'G'O9gwWVBisn։j>_Ha`r(g^&_3  >S&?2x#wv o9 I^Wdžqo)hA'i'oHiwKHFG0)Q a!h)hf)X 8){C&O8BrGVλI9 `y Hyh>jF!wRW{ƈƹ~;Ab(6NiS^6hb)9jxh֏sW)3YF2?rsKOr_BVZHi(VF72*?'RSSV(7.WhO?Z~s ""/O?&O._ςS;xϛCh'7ˎ&gf 3(2sƟf΋'N¾:ov~n:[s ocfr6_^BO/J>+R;oR#{gONC_Nj[3 +{Rs+#3&/R/^ʾbzko3+G/g??[3{SSs_'c+n/OW4\,qWi(f3_N/W!9wH(N/z/g_b'_k'G)W9<!1QA׿1y!vBg9 g>(ȸk6&^&7)iC[6ZKswgÏ??'||aaaS&؀^In^ssVVB_snZ_?_G_s7H|2Q푁^O!A1Yw~HnBv&.*?S껛ۣ;/?S/Olxhzfn/'sKK:3G7'3;oK0,P QO ǹg) W/8X(C +zJڻ333#o'ǷG_/SGbP <,1 -Y` _I))gow)WFȘ 8_~B3_'?_37'LW9s Xr!ϗ)ɗS8X s)Wg^f^Bs?'''_?O?gWW l| b m0)!igiI) V7)?RFg_oc/gWw?, <@ py))y؀` 3y Wc~R?O3?g) xLL`:A͍op׹977yY``'v(goj ii <V)͍ v fW3iṛȀ0HbI_((g;3gɹy<|71 !v@(_)YaAW^@ gɗ^6.3ocS[o y6,kS[_GW)iI`{A-iryo2fVWIC^Z{C{7w7G7 WH<^qa2_W`Yy7j/_'Kh2GC/gngsgi)XlL))yWVKw3"oR>C +ǿb*js: ;W2rwWC'R?kʎ_O/j/{S*6&n2>+n.NZ_gS?O'R/;N* c^/*j +*cz"B2Zn:3'~b&:SRk2s*r[._'S_C/z.sor7fc+ʺR3?r. +KR*bBbj;kr&Ojwn&ScCοǎ~ڋ:;k#z+26OO/_ *6 Z?K??RGRO^j*&rJ[BrzgN;B SBN +JF_* fnO3'7OS&3J'7^R'h/Sf(Vr+'.6 +S"G/?_2jccN{~6z"ڶ_W'/?.vSzFBjBS+.z"?3"^FCvs2+[CRjrs/o.n~fn&b~")/i327W^(ۢf~6&S^FcjO[Bf?Rv^f./‚6&z3bj(Ovbzz7ZwF+ Bz/fro> +R׎&3vRG*.bR*{r+*r3Nn*s^? J~r/_k" +ڟNZk*ʾo*ROr+coZ²sRZ_B&R#ZSb/2[*:r&ƞFS2gK[c sCj#+ jˊb*ڊkbj""* +ʚ +k +*BZ s#CJ;k*2+{{;{ *;*ʚ*꺊j j;*k#j**ˋ j +*k+ +ʊ ; {* c{c Kjkj+ʺ*ʚ:kjJj+kk:J: +*#3s{k +bZJ +J++z"22#3[.RRB*#/?C;jR.r+##.Nnš +{//s:v3? .z&R'i)_kJ:2&6h63wiSRNzB^~¿G3>.+S{_>V"_ºRs'sJ2Bz*ʢ +c.";;+k{{ZZJ[;j*+ + K k + +J + + ++k +j*j*j k++**+jj*j*+ + +J** +k*j +B+KK[k.B[;{jk*Z + + zZz'g kZʂrz+jB*j: 3C2z* j*Kcsk[ +:K2n 9(N͍JxvKaW6Hk9_ N87 'V +))SOSSs_GG?2^ff^R鷛7W +fڿ_[CoJh2!!I<_M= @6./XIR @_7n'H`iiOζZv >W'cnFN__Nf&lLLiR׏H1&r_&' *` H/'þ>_?g_O7 <׭ f;yQaK)#V)~hBO;ko3_O?_ggXx (hp ;2_^*ǹ)Ww)w)G'/^((HF> +n gW7G)ח?,  CI ')G)G3FVF_g_+gGgWW0Hh0(Ck99y׉I yw w'h(fj__?'gwPH ,&~>y9II)I 7 gSk{ȖVF.SGw7@HH+! ى!yɉ)׹W?&FfVVVVnZS'gGG7wGwwGǷx@8H@8,@fXhoyyW!W9! WiWGǣ; FvFzS +'wGwww`8`0,؎3vb!99aiaiɷi'*(FhhhHj7WG׷wLJ8 @,HX6+Rٙ!IC{NVV(HH6{[?+?i ɹ))ZLX@P@R&ˣ&KW9W[WKXxfHxf/ZgWO''_W 9& ,hА?!YSa1WZIohg_8V@ C{wIy Z{?o#K:W)V<NgׇGrZ*R+_?'gpPH` AIav&^Fhn3gRχG3r Kʣ/S/O'&@00ָv/Ɂ!y!!BRf. +?G3k.J* sC3#˚b:J;;j[[oO¸`Vh>IyIyI'bNr/o;^Soj.fBZNKso;{K +;*#[ KjJJ{k 8(V&/)y9W7WI)gcss{rR2JZN&.;B3c;#벢J+ +RFVn3gGs33#r"rrnRrz+ k+ JccK+JʚzZz:.^'''_'g'_OS#BR.bZr¢z;zc#*;;J+jJz+zZRn>~ΎR: +/OOϟ'sS{ڂ2R2*+rJ{ +b*3o3+jkZ +jJrr~fNr2:kS?'__Os3z+J~Zz+:zzrkrBO/Z +3;;zF^gG7g/3C+Rbr2Z"bzˊ +S:Kz.oS {Os S/h``hV"i9 9{*#BN/RR>jFB"O+ +ۿO?SC//j2 '_3_)L`H@q191Arf[hRw  iK8xx(_ W7gcZ.s'7)gW) l,H`Nmٹ1kH)YrFV`V(g_'(://ɹ釷iij$XIWW G `!iFϞ@ฎ^gI ?7)N:n W)_ $X@PF-aqy x'иSiyOgh6&gS)!*rJ(('OיigW +0l0a-VG?8ЀF&Aa?xV@~~ywF>^fwi  |lywGqWW`X!WrȀWWi9w^r:I9 iWLp 1Iyhh`Z_י!9iɇH`Xx(I w'nzc)iɹ fRy1yv8xSy9){:. Hh 7?["BOg)XP,X(h'yiay 9i&hF( ((nc')iWWO[7,(GaA9I Gk*Sg77?6V66 /wOsGG3`0,@xAIy7Kz(vb''ׇ/N^FVv~27wGGLJ'GPvɱY!9F.J)_.F[ +gǗ7og'^HP@hP@x(vKϙA!IzvFrb7)S +ڶfv^K[/_Gw_gg_/#?@0VYi a)7{b"2kOo2~^>NNR. ++k/o/ϿO3/ϏOSVV(xH(V33) 7'_b&^vn2bZK#so_?OO'n6Hx8Vh~*OGwiW )W??ھV^ƾnKϏS.gg#)y'Iw)fx`@@ 27!A鉗?&h&FRr "k?o__'SO/_''gGb``Px p_3;A9AYAS^F+R'/S#oGg__g^`H[فG/KonֆFvR +Rok?S3koOs00`v&W i3&~f֖C+B3O3Ϗ'zs?'S''oo?p@bksAA!Y *Rkf^&.Bo[oÏ_?S3'OsoC+*C@X88`Xo_7WaAYiWI^&jk^V*f;+JN?sK C?//;{˚{J8xH((J9y9www'?3#Sc~F6FFfξJ#/sSO??OOo/C;kzr>((v_GǗi WwWgoj>ƶfN.BJss3oϏ/3#+JJjJ"^VV(VƢ/w))))GGG'/k^^^f2Bb* [cccSS/SS3#;kJzVVv6&bs?Wח'[+r.N^r +kCc/3s/s;{;*Hh(F^+_7WW77W)?b22B.RRn *+;3S3s/ C33R6`X8(VVI!9 Ii7nK3*n> +KrN~JzN +//3j* CoO/s[ _,А h8 +AqY!aV‹f^ r>f>6S''gG.Nn2Ks7GІh)!ma!Y8f&FIaWor`x/7G3_i _22R2">*_?|lLVi qi)V` 6B{)aJ&2vX@`FgGGI!'zr;涆G__Gw: < x.)-A ``X?>vRۉg2SV``ֶnC_Y!7/>Vs'?)wlR-a9aY3xظ^V +yc_/X(ֆ +9WgSkʛ?_GGf,(`qQaayX8FV'99W V>b79)'7ǟ +6+'sg)p 8Qa9hxζ(۹yi/OchXظV^&_iIGgok?oc_G7lP rQaahx(ƖVv y_3(XV"IIF ;PHqa!AyxΞvV)yg[o(xXֆ.RWIiOKN> +_?;o'G701aa(8辆v)#h `ȖncK ɉg?s㋞Oj?ИV[aaIoֈ8r^vfo׹i&FhV("O){ºrΎ +bK8PpNV6W19Y~.(6/2K*f+FN{_O/βz.R2Nn +.6Wii'#">r.*"o?cZ^>:k&K{c&# ~zK^KnKN rR*3KO/3SS/Srjg[;?R׾sFsR'vO&;2&::o+Z[bJ3RS#br>ss?j"K+ÃS:KC_^ozks#>#>G"N#n~KOz*>'B2s{_3[S[+b&'jkNJ/zrZ[r?Rr3"sBCo*??^Fn 3 +r{rbRoۢrRn ÿK?OΎ +k2j*CrJzK;{~z +nk3rj/"K + +c3c #+Rzczzc{ +[ZS?oKjzn"SK#ˋ/Sr/2k3jkKrsj#zʂs/ +B/K/{K {Bj*r/_r:/+fn3r2c.&Ccf/ +SzfcNZ3z۞o.fOR{NBcS.#:S{2 +nC/z2{s::{r?>^*+?R;#:>cBc b{SN_rGco+C./2ob:n>vZ'f~;SJr>g R2kKBoCz;+?^j3ko&:'O_s/&*'.V&'CzOG?fNrsBjbg3~~^S/3CSvC'b[kʿv.3sBfoC+;?Cn"K)ƃJ/_>FN"*NjRCZBRo/.br^RÛ?&ns3'kj^2:.wfz&j;:f. sv_r ?r(Ks_{R3.zjrk+&r/Jc*3/**JKzkr::.R +J/ˣJCsʛksz+CkZ+23/*bJ2*/C/⃏zJ;r3C;zZJ 3{ckkRzz[.c *33C"c[K +k+;ZJj+Bb; +ZZ*c+: +*co/SS/O{+ssۛ{:bꛊJʺ[/*ƀP,pH_a1IW7ii_n(^:~f>roOOKOOk"J?g)W 0湱a'k77^h(gYaW&V(F&> +O›{/SCϟ7*3'϶p,<8GAQ)Nvo?J(9a&H8Ǝ^> 7)w3"n&2'GGG7gCo;@, < *Qm-y&(F":6hVyF`8~.~ +wigSƖf>_''_'SCPLL0i-m>Hh11wƸ(&rNW)6&j_'gw'O'Ͽz(PL0WQ-+3RVhXH·aqqA9sؘf&&W )O~v.[sC7z <0VQ1i;'?3ำIAqh6fh8H'y{&f; +k +.CG)___{[v, L<ё9ij v7AAa)~Rj&(8X Hi'/⿇_wG +sL<0v1q1ɹY`~YI_?#/C.ʣ7W GR~soWwgo3;?S2p hGY!iiA (xjSw??)9yV8(6&v&W )_oS{ .Z'gO?{cnP08N_燇waAWRn+kN_W)7_KRN6h(*G??oOSc[s [So3 ` +)y)_ zb2f^>^>2cos3C{;/+#;J+KKfxx(&CI闷ǷG'[j+cbBr2r.>NN +[#{{ko_g'o/#ϻjʂ 2{#&HHfBGi))77g[:zRr +^^>>RJC/JC{js[K[#+"S;"Nhh(v:OW)o;S+z{jb.^&n΂k _s3C{;sgS:sC{.xHVhHvz' 9))  +c3+3oNB2^F&N".RN +/_{S'ϏO'V`X:'ى aṿ +s"(FR3>/ +&Vn'''OWOCg O{3&Hx!I!Aۿo.踈B +SfR +6((&WWSg/OZKJCj[_2 ذ'Yi aA!ssJ2f>kRfhnsGi_7' + ' `hX y!_VhVJ.[gN6(vCO3W'GS2;C'0xh `voyI7aa!W''VK J?gvV6c_?oo/:/+;Gph(3GG 9O粂^js3{n..>/";/Gr.7722&^+O^[3F VBx{o)鉉?[Jns~֞*&*ڣk"b[rN+6RV>vV[V?2HC"kfSGSwO7S_/&_hH^&^O&w"?2~&_F7O)ʏ)R2) F#7ڿ"7g׈I_Vioȗ&G~vk/KǾonfG?WSHwWgz*wCƃG~Brk /^F?ǟh['.#r'IRFy'WJx()Hn/3So"N:KsCsGbF66V6vFFsV(#f(_:^KfV2ggζw7K>^^>S`NfIZCg'(w/.nVW/H8V^NG&: +g_;&Zi(Xh2y(6NY^H{skihfaIH:ffNf[fY?(BVʛfo:ggO_/~g''C:[F_g2 ھB*S_2KsBbk S+brS+bJS[;" ++{:J ۻ*: +; ʚjˊ+ʋ*:k + *kj*:K +*J ++k {+*+kj* j +Jk+ *j*++*+ +jj*k* ++ jkk + kj*X.#_ojn+z#kJJ +j kJK*+jJ+*jj+ k늊**j*k**jˋ+**++++k+k+ + +*+k + kj: +jkj+***jk*;늋k;**jkjK**+K** +**j*+*j++*+++**+*+*k +kk+++j+**kk*kz *+k +NK)^V_7k&zC>W~(jO"N*:B:ʂrBr ++ c +2S)r>Rk;*j;S{.[˲>Zzڋ3#k.&._'w#^o_Fn2^V?)#n(vB[:Gs&r* +&fc/*JwGv.SGGn3Cj"Z.rcK N2cn +33>/^3gjrZ_ig³J2RN/rK7'cJc&brS{3:R;:&J"/ .{KSB[Fz#&'BJ?s"fRZ[[J+SB.?O~Rc?/ O>>^χ{.+ +bc//sNNj +2.{#?OOsZrΊOs+Zrr+cjjko#r + +*ZkK[b{Kξ[RN ?'/"2j3/zrrK?Oor.++2r*S:r.zsZ.ʢ3Kk KJRK²r Kz +JZ;3S*"+cSsC{:b:sKKk;bʢB;k k"22:2rR2~&^.W))WwwG_OssC/sZff^Nrnrg|$Q-/'+^&WI*~>fZFV&/S;Jjj3O__'Ck+'̼<&QY2&^#'^_iya'."N?O/K3ϟϿoSg, `Qm?FwLJ[FgyYBHnJ~o2K_'c[/[ +_ChlL` -Y'8/g#^^ +yYw.^_*>fΣcC{BKosO__C__O3s? +l ̰QmmsG#2OWYaaIFXXhLJb&f*k:. +3_?C# +J sg3[3@llp( ?X莳Cc79!wHXgwgo.&&^RKj ++CsS_OcjZ3'sJ ̬H-YVH>GGa!黈`Wg&R"_'O/S3o3jZ2 +?_OSSC&llh--'({LJc3wwX(B)g >&~ڲso_'__S#[c + +gLJ{>`l (im9V xJ_{sg)aᙷ8``VJ&RrZ~RrcO +j{c *{_'?^l,1-m- x~"Ϛj_yY~xV7)^r~Wgz"Z{s[ÛK{S__/KN8P,A-!.8fN;79!9v6GwGOZ:B(÷i烢º{#:Jz+[3cSϿ3P YQAGfNrgy၁Ox f'ohV~ )bJb{JRsC{k:R psA!*b>r&oy!IRh(fr¢Z_^h8xr'ii7_"z:j:2#S3Kz*{KV8 xC1!w^Vlj!YoV(vFf^2'6N7r>s?S *+{ [{{#> 0s!i'/RVV(K!!9:&hhBsV(ff_II7>/S+j[//[+ +>V8,p֗aq!)w?fxH!Ii?bgG7r&֖(ֶJIiwsN΂s'g:3/SRK#"(8p`iY9)(IWs^HVNO__3ָvWO*2"kos #jFh0ia99!YyWVGW9!9)Z686F/7k^^(NoWCN+s;3* +:rBb˾@`y966??OW_nV6jCBZ +(b2''z;z:*Zh8@lZ ) LJ^oRi)'' +&V6S_o:"/O[3C{ʻ[ãk""2~ڃK,<`?׷AFg*ηwwZW3>VFJ6V3' RnooC;C˻ ڲ껋z"o`z(7痗'Sg3R BR&fJ"2Z.&+sJK KcC+Bں"ʂZ"b" +KC6H(fbk?g'o_''Os#/{*c˺BnZKJk :z*J:kJjRʚz"zkj *RnB#C[#S3S??oC3kϿ33j* + + +br:bZ"z:2"jj"RR +z:+ +;+{k#;{#C3#[#J::ZڂrBB"ZzjzzZ:˛kj:K{K {K+ 3cc;k;{;Jjk*+kzzzzZBrbzښJ*j +:Zj+k {{{[ *k˻K{k**kK[{;{; *+jk˻Jz ++j +*++:+ jkkk+ +k{*+;k* kK{;jj +kKkjʊ ++k늊*+Jj +:Jkkjj+ˋ++j**+ ++ jjk++j+* k* *+KK*++j +J +*+*j ++k늺Jjjj;+*j +; *jj+k +jj*+** ++jk*j*+j* + k +kk*+kJjk**jj*+*jj++************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************* \ No newline at end of file diff --git a/tones_american/cause_31_loop.isdn b/tones_american/cause_31_loop.isdn new file mode 100644 index 0000000..6cdc57c --- /dev/null +++ b/tones_american/cause_31_loop.isdn @@ -0,0 +1,187 @@ +*d}EьDH$]a(*~~b_+F^VB7g_g))3J_gOrʏG. lPXH.YAa!!y(fw2/[^(R?i_o7WwozC_^, !!yaaSj>ֆg_oGgkf^vV(vs3/'G_8HyWI).(&N&&NG['vF⃏/S7WG7/3fp, X@V[KCAq)?*3^^r_细 +Ǝ23cGWLJO''/ pr7yq!!&6ΞNKOz2Zs_gg_okcSn@@NXz?Ya!a iG2^; +vrv6nNR{; +kOs/oSoϏ+ssJ*+{@xhF!ai?k~Rf~66Fξ^;j??//c{+J"bB&FfV(f~RO_g7ii)iWww'_'?/s +b^^F&^~΂JjCSϏOos3+j +brr2B2RnR.nBBšc__?SSã[K +z:BR.rRr" k{ ;sۣ +*"‚bJ +jk*c :jcKkcc[ ;{K +ʚ+"JzkK;[[KK;J:J" ZBjJ{{K;+{k + +ZZZ" +*ˋ #{K#j*kz +"Jj**j{[#ۛ{{k*Jzz"ZJ +ʊ +k [#[{ jʺz +:Jzjj +k + KK +K#;KKk++j +zJzZښz +j +닛K;K˻;K;KkJj+ +: + + + +*j: +{+++Kkk+*+*+kHgyfWi{VV _rƾs'C>&+_'#ZS2RnHaxxy>x8"W2V7F6Zgf&/_ΖVk Irw7fkn7ZSkSnnj.Z/3#2JhJwIςW^_k6N').Ɔ;*VBocf*_^fJ.VF HIv>7 'V*¶67fo2B{k;^nc3;z +*'^& s8gi v#~)_F!Ni)'ؖw*K(Zo^V?([׏Szfo_6V86KcgφfBWI+(./N>GVR'w&F??~>7O^fB+gfZk&RJg#?Z#RJ32S +?#6w_N6:OS>SN[G~~s +N~C&~˃.bno&~G3.g &FƒcBR/6;c^cR_j>*/Go >J?G.S+>sO2fO#zn886&)99 g{G WW(2f6Y\8sVi!W?8r9!IH[:bɇ_W_~^GW׷)B|\P&-׉f/_OaaH &bɷwW)).rGW >V^6ѽm!)'if")g7iAav(0@aw_!{(JG7.{ !Y 3 lV (2w-= J@fwg)1q6VW)i.f&.~iy)xdx. WMXP&OW.fx8ji[rv7ɉa_8  Q3I!8PB3iW;/`N;9jS^67i' @a חaF(Vɑ1 oɗXfW '2s*zo9G$P&im G1A`7'V(?[ihv3sf_{?Wk/^_jGGph8>I!(6i')7)w^J'3o+s*R.~nB@pXh(y_n7I)O3 &R?.W_sgBo33K +2f>Ɔ^r*6 "?GGS' ' ++~2j F?&fo~frk&jO3ofo_ *G/#+_gz3J;>{s/.3c.s{'F?Bs^&'?G{'goˊ+g'O2ʃS/&F?_r.&*.oϋj"S^.:+{JO&7:VS>:?*ssS'o+rRcf3scK&^s?nS'sBR/;O+N"+nRf#϶s&sR.g27_3BO*/>sR> +/:&N622rZrsnSj'>>skfn'S(r^.~&gz/ƞzj2N^rGK_{RJ3k;+*&'kg^r&&GƢnr+g:;㲳? +JS:Z;' +Z>Nc_r*?OB^+λccB_w +/+"7o s.:Zo)gGc3>'WvwO +3W:I>w!3w63gcZo#?F^JZf2gsn7)(O3FvnS>kF&~nhBh>)r3J:CK9_H*7'H;>2/33:'N +6o_ +^/x>Y'ֳHifnf.Brg;ior#*_/[r;^Gbf~ +F>kbc_/B&hϛ۷{k_VjO&grYw7gzZ?~J~cJB._g&##ÛsʏVS +C~z[rN SzBʎkR;.nS;ZJ'2;cʊ/k{+_+:F'>ؐX؈bi 9A! WO8(h>7Gɹ闟'^N:JiW ,79I!-!ay_xhv 7[ iWOh("RG)g_ws,@pǙ7y!qyx^G/)w냺^2*^C7Gg_sO''b 0gi?yAѱ!'V(v?+wGs/FBnS** N'(nxs)a2c:^#{rc#2"{o>CKC+cs CS*+C{of^F~JbLJ'''z/.Z~rFz&N/k_JS +ςn"*sB.:*Z":*{ +*+**{ +K#k#+_[#3:?'ORjr2:^N:##¢"zz;3{rjsZ ++kZ[#s*/3+j2c^ccKzSS2Cbr.BB*+.bC‹sr3k+ +JRB^‹cO.RW&Vn>c&n2?sz/?^;.C3["/{2nr3rk3#n⇞Ϟb.[+z +j:*sz JJº˛j+*{++jj +zjJ+ +*k**k+*+ˋ ++*+*++ +jJ+ +* ***Kkj*jk ***+jk+ˋ닊;ˊJk** + + k*j*** ++*j* k***+*k++jk*+ +j +jj+ +* jj*kj**jkk*k +*kkkjj*++k+++**jj +*++*+**+k+**k++*j*j++*+++j+******************************************************J[KkJK{zڢK{jjK++jk kK Z*J~'KBF>?w kF2~"f_ 2j6G[ʟGN{''x`F F69jHh˗:wN?'*^F^"::g*Ƃk" &#JfNOsj_C +rN"fr7+ȶRS2' )_S^"{J&sƎoֆS闳&_?_(ֲ'2.3'kBRCS_/+'2Zϋ~sk+ +Z?.f7.3j^.G3Zv'S[3__fRsG33**Cs:N2&f#GrOf&'׷f6Ƿ/6;7*7r6o3r'3[>z{?Rÿ&gg.NroNzΞ'_ +R^CO_;~gκ/g2 ^N .&+o[2BkB&bc'g{>Z^>nz+Cn{C;CN[2koK;s+.+Oj&3'C_Sf^#*;s K +nr.{KK2BRzs{ZKۣoggg?ZjGrs7WO^Ɩ.^ (JɉW) i7RfsO3Cj;[#o^*S_* j/_ 0,*Aa_WI9W&F_w)W^fnbkJ33[/O['_G_0l<sV>9yIWS(#S S?C#{_p |JoGWiiWvL/3J;_gg'og#PxfXvIy? !/N**~^/r+&(O>rJg)/_WGo)(HH7b_aJidz^:3fƛF>_w;CwW_/?),9˷118B8Y!wi^x`(6v`(i oai#.ogIЀ0ց 8f'ٱi7aቚVȸ`G)G !c^'Wr 6plYYFx(n FFX؈:oj'9Ig?/:Z&³_OϗI!LVl)I1Bs`VyI__rVXHfNFω_ʾ>s)ii `SAinQ9)y8@{h6iYWO(^ g37)_oskN2 @hYwK "a'(Bghxh&G ;W G~("rFSW__~>.Z*g,Xnggh a?(VHR/ 6ggg"2n˻b˲:rZ# +K+j:^2.ڋ[c/Ss/S#jn~nNRr""J;#k;{;++j k + ; +Zz*JrJ;:JZr ++{/oS +:**Kk *KKڲ"2BR""Jjjkk*ʋkkS +KjZ *+# J +ʺ *;[K*JKbZj + +bzk{ ;j"z ++j:#K *bz: +"{ K;kK + +K*:˛ +:kB+z*#"jKk*:+Kj K{ˋ˺:ʊ* +"kjj j{K*j*+{ + jںjK** KK+zk j* ;*+K*k:3?h) +>Ȇ^WfC~O_N/BnO׎3fchs.'jλz.{G)^)&(.)O{N(oFCBV^RV//nI8v^2W/c'z& +GfOcf /F?s?'?ǂ&o^_ ~H;:S?2rÖK; /w&_N^I6W&7Fv''^&^ۆ +sJgf㿎n2r/o&zk2C CSkO:r^?&{{r; ~RΏC~s/ZrR3RΏ32˳KC^?_f2O;3Rbg#b^戆v['7I)i 7'g/zk.Jr^NKff{,H,؀f[WaAׇ~VF&n/o_/OS3'??w 8 gKAiaI{[:^((Ϟ֞R?[oo'w_77G!X ?RY9!qiy>rF&nhJ2'_Nr/:+ozWii)) )vX0@h7aaagnFN.So2^N_GG׉ ɹ&Ьp@`6 aAYɷ2^x(VzWg/6((vr: 'gwiiW7׷wR, ,p@&Bx8#i)IJnV8F ig/[n΂2clf `YKa1N~φS׿Ig6F׹yig^&2r*3?Gh@`I!)hhֈKyyIIxHI WG_~#Oj"h@pl-QAG۾(y!YyWV H6'iy) >fF^.?_GGzhXhꚎ3WJONffg'O_+f&2rRs_ +&oW)iya)8\``V(Fw1Q- NHVH`Y׏os))ʢ)+)iC`wIaaQ1V(b'G9'xظhv^6wIi&&rK+~GW77wJ< A!!wAA_X`V~g)i9yGRhb2>^Rbw' +B./_;z +Jj3p@#I )W9)#Gb^_/6CZ翃RSb^Rb&R&Nr:jR"2"Z^&_';B7/S__*r+#Zsj;[.."B>R 22Bc3K.K.Sscc +JRf[#zgC:zcZS>?2{ꢲk 3R[CBS{:&Z >SrKon3SbOKz:zk2[OFϟʆKs>JNJRc³Ú.3?C^;Gj~s3O.Z>'Sr +B>/N"*S/ ^kjozo3jkkbγ'۞cRon +/zJ[ +b>2nO+/Snr/C"{o+CzoC{+#Zs"/ ^CGnC2rZBZ.F&oB.^#?GgOj^ 3.&o:O{f'r^+kfSvFGg[GG_/*^Of#φ*2z{k& {oKZ~ 2grBgOZs‰3b+.O2&'>GkVSRFr2FW OOJ;j2'"K+럆/&;'ꛋ:~#3*;>>N/~SJB&co?^zg#zϏnrC~sk7FFfOR&(6)?;^ks*IRgB K{*_ ꆣcfz.&2C6ʷ~Z?6KNJVnJr +NSg3kC^+' +vr Ksn&nsRo)ifcFO"{jZ" s[r~S?27^:s3cG'_[&FK+SO_NgGκ~+3_6R^vsg'/NWGC*2 j_iN3'wnW{3g^K'[CWZs".?ʞ[w['rgnwK?o?^Brv^+Bsok>2"n"˺ _*2/Ϛ'o2kSkv ++CC .r*.?k3#3kB_Z/[B.JrS/o{rokz+bR+o#"."+BrRs;3C333 sOo//OoSokCK3/ۣgX0hVQqYf8;g)!ayGHh373I, P^VMiYWȰH ~aƆ@oǟ)!I 皢ʎ^v;GW I( , qmY9P(JrykVVh+y3aW&O?澢gə!*|lfX wmII j,k[C91((` I :."ngia) lL`rȿ-A90xh)I!ɟHXHh"YɹiF"˟g),$<|ga=3^ର !i 8FV#i w.NsYdHmM1? H0 vy)' ؀趟ɉCB"LLXAQmq{V H 0^7WX` kw7)ɉI* !a$8ضS W׳&FJ7)yYL\<MH@xf?q)z~X`_)i9izVG)9 W a@ HhH(_a11anRNh vjgɹ~^j?i9I R3'+ a9H6NS !!Ik?_nh8hjw)Wzns:S?p0&r#W#&(fϷϲ&c*ϿS#+KK33C?_gs``8^V>/^KC{Z{ +ڲRkc{bzK#;*s?o/+xhfV)ɗ__dzbRbsB**:;JZzjzBR*:#s#j3SS#&(hVFFF2?WigϏ㋛[++;bzk:ۣz{cc[#OfV(f&g'_'s{c*ʚ +{:r2[j2rkj"+3[C#'?RhhhV&n?7_''+ZZ ;: + zz"zڊJ[{Oˏ_'gs:hfV !w'BB+oC"K_~vBgOS*o:? +ʇGS))lP@ƸXhQ)IGzc&^7N>6?W_G33_)! l~&-AWY!)8@&g[~? !b.xhwiio. KnBR'W_!P`N`H)!c鉉s{Rv:r+oۚ^&.+*'G7PVVF IIff #&?G7o~*bZZ:o._J.k~^3#Z cxXƆv'i))iiSOcjs"b__c?Jb.Ro*~*Of6^;bk"6KNkc{zsFzb/C+G?^j/r> +?#{n˲"hNfforJR_G?'sn'" +n>nB'K_nzr&+*V"s_6^Sƶ.&gb >S)_v懿_&'~#33ChJWÖ3sSgsk/2jF._^z~7{{^'G2&'zJg?r/ 3bJGǞKSrGkڿS +>.r2sBj: +[ +c#Z~rBrK~oBBRBS/ +S sJ.Rr2rBK:Z+ˋ{j + + [jkkJk*;K +c2 2+ڊ +Zj*˻Kk +{*kK[ +J +Jj + *:#+JJJK[/{ +:ZKZ; +»[z.bJo+"2NC;+2Bz*rJ/JjJzccb+k* +;K;J + +jZ SbR3/2˃"z:JKJzz:* + +j; *c+ +K;+j{K {kk; +KڢzkKZ*K +j +k** +*+***+k+*k;*k*+**;K[[#[[K[ ۋ*+Kkj KJ;NhV(R'_7WC/c*bBrڊw'W?@2N&W'ɉ!y #W;GOf(((V>b 7'_wG77W)Pp`v(H8F99OY Nj W9S{Ǘx 6hVoIWs:/Gi'_ ii {p| ȶ'! Y^# 2>3 O+(+iw3& + oWyaY `\iW19>r᷀`yiGyAY_(.Bh8gʆN?s.)iWG'Ii ;\ܐI)YS7``V WWIxNZFƖ7o>;?Sz*cW?wwLJ<@IIA +9 9 7y!! Z8^hƛ3.K+[oWwwgw)IA飉aJx )wGaY_(ֶ(wG>&w*C'gg'ǗG#G,lC!9ȾBn 3S"YIw"+s*c6&^'#k"C?ãoo#s'&nƈ^> g7i gG3s3Z.n>^f^&rzzں*soOO??k {{:R6&&FF&r#CGGg'gG3KJ~~>R‚j:[sSo[3S+**JZ"B2Ξ>JSo?OOs[[# +*z2rrrZB:k #Kj+{{{;; +R* +z{ˣ*;+; jjJZ닺b"z*JZ +K;{[c[; j{{ +K ** +: + + +zXW + [~.bJ:"3R +3"k+ZB+*kk/n*Z s;"^/B+.#n+Rz(g.iJSijS2#Js3s[#kj?:^_R { R{{㢳RB^*++/O*++ j*s#Cs/ J: +Z[":Sb"rn"R⛃_'_o//CJ;z#/: 3S`p &÷9)i:F&/O7GGO; +fƖVS?o?S'osOi Lhn)1i 986NI #NvNχ 7 _;RR)?jχC7&()Ȗ^^hggGscfHV(Vs?ǟws2;s?'O[oSSs(l`VXg!I99)2gww?6^^;*_'?s3;O3{/SS;Z +K6`X6(2) Iibc{cz."?+KJzn2B3s/C/3sc +[&hVvF'3Gg?O?;{/Oo[R*JξnRNb+kj ;#CCss3[{#*jcckk>Ffn^R:K{۳_''_oSj +*JrR.RRrRbzz*KKۛK{K;{KC3~NBrR&&β:+o?O?/s#K +Jz"bBr22Jj* k;K;k+B2Bnrr +[//Oo/Có*j +*kz"bBBkKK˛[[;+"nRR2r2.zKkKs/oS//3SC[C* +jb2B":ڢz*** + ;[;K˺.~>RsoOooSKs3b kB +JZjj3k ;{cc#hF.K[/s//'/##[{JR2zbJJs;/s#3_'0h6(xI7׹s3> 7㖖W{7>7'{rS)w)PPXX-aa'hRw)7Rָ(f07IW7G6ǣ')IxL08G1!:xv`hcAz.r`6FV))WS&fi') Gi'wl`@yaW @֗I )/rV`&FcsSwZ ;bwiW釰XZmoq-(@ +y1Sv (H&)_fBR~g7WiW)z||PG1'm)28h/oSHx(Gww)n>_I If,6awmY_..b3i1)xhX/_'7)i[N.^gwir ^l@R-yY.hvƷI Ș^rw)o.nr&kGi9I2 (IQ!1?N xS{>YIyO^(h (vw)i3 +.N.S)ii`@CWIїrJw9Gjf8Xfn)G>+cwW9 +@l@H_7ٱAw6h'ii I)s(H^6io&k{;?WCVW vf(OׇWi S^(((fsiiGO_B#2z_oCVx؈^Br_ɗ 9iZZcRzz&F>ZRr;oSsS'oR 8XֆW9y !y Bbjs{R.^6;3gw7Wgww?s'oC `h#!aهgiz†>kO{."v趆V&r3/?׉ WWG3S[:OVxB.A99Aaa'Wã2~ ~~>B~6ò(V֛WwLJw_Zoczp@xvn +ف9 )'g֞^&2FnV&Ss׃w +? r{Oo_k,p PfsOq!Y!a6^7)^n^8{a[)i([.)*) nPܐP@bi11g7~8`zawɗ{V8h8@)_)oSg::nw?Z*0x`V!aAqin"FXV7!K֘ 8 k )'o~~{r?G_?SR2Zh(8aٹa KnF~zV(>W7'w66FvX8^_s)'#jcSkBr+3z#Z:zj+HV&FF__ǗwgOc: NN~&>NnC/?__sc*ZzrRZr>&fƶ6^NC))))Go#>^^fFf&fNn + o'''''?/j2ΎRnNfff^RcO)W7_O/sRN~~&ff&^NzkS_Ϗo/#Ꚛ"rR.r"B~^^~{gwG'/32.&&^f^>.oO?/3CjZbrRR.r>nR*;OG?S;jB.ξ~^^>rJ +CSsoo3c[ JZ"Bbrrbr.rRn." +/?g'''_/33# *zr.nΞ. +kc33/osSsc;K::Z*kz2R ⎞R"[33Co_go+ +:΢N*sssZB+s{{kj "ʊ{/3o/*F@@ vR af~Rrϗ )oFV(k+SO'g:2z+k[sO__O# JJ +++c/ !1O(6frWiJ~f66hH88>j'''#FrS?/'C2nNNnJ33cKFhֆKow)i ׇˢ.~r+GG'3 n>~&fβ/{{*.NR*g?VPЀ{ yy!aI(F[oGYy)~(hV^'_s##;r^~_gg_?S#3*NZ +j B.z+jZ6&+s/##[{ +ʺzZ"zz&o>z3c*kK~hp(B陹9׉9N&GG*6(&>ξVo?__ËR2b:rC;*zr( ` 3))_'iGC+oRff^^~r3{b{Ï3/O +.R2NN.R:KFXF&)׿3gG采O/?_o33;/KbN22jnz{*Z [zk j2BrZ2rbJZ+: + +:nnNk3O_ϿC/ϟo##s3CC{+br""Zbr"ZZrRr:j +zbBڊ* +**:*;ós3//s㛻 +Jzb..2rzzZ +j +: +ˋ+*jk+J:Jc#c3c[#c;;K J +:BzZ"j +j*jjjj닻KkjK[[K ;ۣ[; +z: + +zJ*** +Jzz::J +J + +J +k+ +jj Kkk+ { ++k KK K;Kk kkk jʊ*+kkk+JJJJJ + +ʊ + + +j**K K ***k KKKˋ+KK kkkk*+**+닋k*j + +**+j****jj +J +JJ +j*jj*k +kkk+*K +*+++++*k kkk***++*j +ʊjj +J +********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************* \ No newline at end of file diff --git a/tones_american/cause_32_loop.isdn b/tones_american/cause_32_loop.isdn new file mode 100644 index 0000000..b51b9ab --- /dev/null +++ b/tones_american/cause_32_loop.isdn @@ -0,0 +1,284 @@ +*d}EьDH$]a{7W iWG:3O_'S*rff&."ks?oC3o>p8 Iya'?[O[2"&6v&NJo[[ʢb +˛S/p`HB')I91I)G?zFKʎ_ r {s'GGGLJ_?3[o ذPp' 9Gq!I(cs>&s_?OZ:ff _'7WgggJS(, x@vG1ٙ9gBhj;;/w3hbV>Ïi /)W/O* V hH<2 fg -a.w6s)C6^Άs;Ww_Klpyhyᇁ +xh''W7('n/c>Scgc_G[?)G0lL)@C1' !aaYI!.36X^S>7{{cbn+N22*/o/' /ll '/a ⱁO&vhr_nzj""jC_?g?os3 ?Gѐlg,)BzYayKVf&R~ +f& +JC;[K/Osϟoscc+"2v Zv2OɹYAyWakZ*f&rfn2R +s/Oo{J{bcj2" +6Fz.{g))WWϻ +RRfBRn+33  ++z;z˻: :;j+*z z[zj[{c/C;{ ++ jk; +k*jjb +JZZk.K{*{#kk +Kʚ**+#K + j+ZJ +jK{껛j + ++k*z +jk[+k{z k+*"jkJ*j+k**; *;+ ; +K +k+k{**kK +K +J +*ʺk{ +jjK + + *j*jkj +*k*;+ +* jj: **+**j+k ++*ʋk k+ +:**Jk;kjkjj + +J +* + KK+kjj +*:j*+* +{ +{ + *+* ++ +z+K*jkKk+jj+jk k+*; +Jj + ++* +++kz +{ +* JKj+ ZJ+j+:+ [k*K:V )ZFwZ'rRSsBos2z&gGo_N"?O:f{OCڲ6I'nNzHf)NF{7hznwSRrg3/jN))/&{rffBs2'*z[zfnkF悷w?N:> &{3Rn_;&ƞ'N(B7Fgײ"^jN)WRC7>h&+zG~^Ǘg~fG;φ '*'b(&g*_f^~R';g Hhi)Hv;I`yɾhNBs^B{^G_h67c~h?gB.?&Z*_>ZC*3+Ú~_g:.2KSR&K+O2_g^^o~N Z&[j z.bO^'R'O:b;J2 K;"kÎjonrRFχ/NË: +[#32F^O_6;)Rsgg^73N_&GGs>bCsn&Ng36_..#s+ׇ"Bk3/ +&z +hr'[:C*s_? onN##JzBsnF~3R:{&f3{h֖&z_))wg /_77)*IFh{~K_|0fkW-YYyYY(@ H^F^7AYS/@Fێ!_sR)G I@Ȁ -!!gpvf_Yq!_#V @;RGa #V'y@Q -))(phKѱYWɇ0PV&A ^?sC)aY)L,`'AY8@H 8wAq!iaykX@xH8Z!)iIO(R>~i)IY\$l!maQvp؀w9yA``w)yǞ"jF(^'_GILXVy-)yс8C( VyAGGH&89'srf?o) \hym F ~ iW~Jg'G7zjS?" +fGc[_oL0(H@ fazA~&)nG)o^*73ko^C/;j'r&RRo3@`h&HvIwO)iWo)'K"^{?S'GwCs +bC**znz#b~nf&~(FNN*_kw gG_rG{#O/ +Ncr^b>:nF^bB/2#brk.2C2?ozC_G/Szڃ"ON:/+rB;" r[Kcg_o2?k_σZNRb+KKs;O~zr'Cs~OK">Vb^ +:"/c;ϾSs&_&.^_'?'/?oOO*o(+>gnSgjVF?g*?/N.gf&*GϣfwOg6?3ڇo&fs'^_'׃3i3~Fr#[&K&3nwbOf>r_FbςGO {/GjS7srk>ʷ&N +[SK :Nb koK/Z3oRNʇSB .s&r3kOS#3N.zb..2zS +bJr" +co{3Kj*KkCs*sKz+*cKzJ*+*z*Kk**++[KkJKJ ++ +j+kZJ J:kkkˋꊺ ++jj* +K;껋J+K+k+Jj{k +*˻J+j*+kJkK +*jkj kꊊk+ +;+j +kjk;kkj* ++KJk+k++kJk;*kk +{ +;+K*jK *zʻJ*KJk;KJ j + k+j***kk+* *Jj + + + *Z+*+J +zZ +kB**z;" +KkkKj: B/j#껂ۋBC{ R/3{23ckBrobZboN3rNs'+Z+GR["KFg[._. +g cb.Jn+۟"skS/7ˏʣ.~W Zn?fvg˛s'zJ.iZJKNs^?K72K"z~j~;OZsg.cNwc_sKK>?Cg"Fn.Zo3j^s^ +C2_ +b3.Sbg ;j2 2#"oRKb' k.{z3J((`H8^)iY!a ((.o'_w9^&;SW ^|0l,R!Yʗi yW`HsI_6&7iG/g p l`g!'降Q!Ic 8X.i 7RRn^" _x @ p)WGayWfXx{GIg'7CnsF2j>~Oj^ʂ2x(>ciwg7wGg3g_o#33z+JJ2Rn2N~RBZK+Kjjjk*Jzk+zb:JʂZnZ22: OooϿ/s#㊺+ ** +j: +zBb2Rb"z+*kK [ +*:늊jj {k;;K[{K{[+ ;zʊ + + +2"j+Z j + Jz *+;J [Kk#jJK[;Zz{j:k +**++k kj +jj::j*kkK k++ +jz**+˻Kkk*뺊jjK{k{* + +:Jjz + kKkk3k*;Z__{#ZJR*zz+cj;Jj{{k +J+s*JJOh7Zfj'bVo);zV^'z/:BzOB2 +?~/{ǃ˳o+j_fj/.*[:{>wSRf>)3ȷ/ "NϲGkR)'v3"J'Ήw+N)"^s?KS _ +&ʇj;S23o[#c J*#K{k:k +sCj[kc{[{skc2;s;"2k + C*K +BZsB{C.J[Z  +b*:kz[k +; jn{R*B?#n"33^{o*/ +R"z2"k.*s.k{ 2꺢 +B{b 3{# + *r3S +z+jBj ck;# 3jkJZ Z s +r+;oZs3n2º{R^&2Cj[JK:kC"ۏfoB?WnFS_^F'2 +J2s[> [~'R3B^..s 3_b_N(7W. +S +jR)FGV_k.#oSorKvsgھ'n>ᅥRrf_*rZ'*?frsOrGvr{F{ +{:Kz?N:[+oKSsC[G"J^Ko[z2~S+bj +;Bz*"2{CZ^{.o2_ B_or[R + +SCbR;nssbZ sZJRn*"So ;or{S{+s/kzﳺbk[ +g.* +ʂ+[RbnS +[#_CC{o {?[N +{? pxHYqYqZ&vxcgSiaG +#ښFsOg狛oo*) ilxp!-Aq_.*8Fw3)NzF^s3?wGS'ssN>rR'Wp,`hX`& W'&6&~''O>z22{*J"*?"3B"?"sxظhV>gWw)o;r.2C+ +rj';ʏ> n:{~NK rRJcNj&#nJZ:s?'g73>*.3ˆs~b'.c>‚š.~:F?r Z'._&&*/fϊz3K;;++OK*ʚb_k.;f&rS_['{j:&Ξn/[Ãz{B.c/ S*˛'rOfZ?o"Z_ :>oO .:zo3s^fsKR.rNJr'szO{*&./nn+.zB"'KnS#rsJ.sOS36 ?{[>s~3R+ +/*sg#SRcg*OC>{O*>sRr&Oᄁ2RBrSO3{oZwS+*2Zn˚';&3wG'{")fۣsKK^Jr_gvz‹{ꏷ/;//Js'fJ_zo_2^C_SKo&:CnCz" +r. r +'ƈF _2f~R;O^)/2k(G&^srR?rC{HKRjc/&fɻ{W:_6kZR& K:K^bFzO/GrrS?&#‹+67z^gNGc&s2'gk2R[_wr"n~_Rs/:f_r^~R c{/3"ffZ.[[ *KgC'&#ڊ'Nsg[R / +RB>3"2#S/nhs:+sV7gos +*2".&n2[Žs"b[Kb/;C +Br +Rʋˣ{rJ>Brn2 +CKso__Ͽ'O3{s/sw狊O;;+g7(ldl88YѭAI-a>vf`.+)gC2N(֎Cciɹi9 $8,19>hv8_y:Sff2)G +B#g78 @sh 9-'bO'^&׊>(F+j>r^G/O_g?*k?Ƕ@Hb X3y AO)z>N/k_j';jbN.ZkC_'RȈV&hxH/z&i )j +χORzn>2rR*{/?OS#s+O^rFHHVNzfG7i7?oggOzR+rRNK['_3Sc{nhHֶhVJ2^))_W/s'cbk3&&"^&Ck?soO_zHr(.>6·w)igw9))'wwS326>rVF(fBfoGG_;*.rsظVVF~ 9!9Wg_G_R.Fvvf23_g'w_Osۚ*sHV`hFƎwy 9!!Ƿ>6>?_7ig7#2.># >. @,lpNv!q!cXX^hh˙i_9n723Fi) (@Hp,V/qQ2zXFFVo9 yIg"O'vGG i(Lp_IёYISH@VV> Gy_s'.V&CfnS* cSwgLF Gf1AQ&)[HRV O3Y)7N+JBc_ +@@,OG8fAAAIAۉ[&8` .j3)?bor*Z{gZkb'vЈ k8!IAgrVVn^f [#&~&S~JZsjzZZ8 (Z?)i RJ>.[>#O*C'S_vRJB +&*6gfO&2rbK>"^j.*zkb3S_??σj +jjb"2j2j*2nnbr*K#*# +ʚ: +z{c3 ;K:c;K;kZzzKj;{ [cjzj{˲BKk{k{s#{: +z:Z#k* + +JZZBz +j{{{ j+ KZ*z"jk *;k++j +JZjjk*kk**+ +Zj*;[K;K+ +* + + +j +**z[ʚjK*Z"jk[z껋*JJK;J +*+k +JKkK *vs~{Z{bCZjZ" :Rzk*+[jk*+k[:r3Crhbb:Z:2#2B 9*g.I?"jng3V׃_>g[NoR_Rb>3vg6JF[~F{w;^:>s)nN^S6sOφ&__*.2b~+rrgv#'n:sRg^/"{Ώ32/k#>?۟kJff> &'.o3zgn^3 +ZOb.C[rGn2sN{& CnGr#:3&s"nz3fZz;¿;"JoB"S> z_Ÿ*c;s[R^2sn 3K S:2R'z33Cj+/RBJ*kJ+{jj +zk 2› +zk{BC+ʏC"Sk3 j+* +[BjkZz/>Zb2JhV8(6rg_I i''js??_g_/+&~~h``&r By7!^(vs&6~Rj3K7/77)7_3g;cl ̈p 0&I1ay7:Ξ{fNn>&[W Oo#;?oi@lHgF9ya׉7Kkk6h(VK6*'Wowoo{ۏS(x8HHVbb7I ɉ)iGGzB.6vVFf"_g'sVh(H``V~)9 I9i ׇr>N&VVV> +kOO'wG_g?OXXȈ^")W yi9i)WG*n^&V(VFV~^2KS'??GG7''osȘ `hh~ +i y9i9WGO*~&^6V(Fv^nzC?gg_'_o +h8(6?WiiI 9ii)wgzVV(sgwg_O/3V8HxXXsyIɹi WGG'SZr.FV(V((V^n'gG_Oo?#Jh8HX xVR/')I 9yI W)w'S[B>VVV66v"+7_o?sxX 8&2g 9 WIIǷ)'k/j(V6>:v__)YWi i? p8 @zYQqgIH)I) Y!.VX 8(og_'g' b/o;/)Ww d(ڶ_Amqxh2&I- @xVWi>s*R#׉/cW翟gWǀprǷ aAZ`'q-6hvFh  9V6k2GW'O?w_?Wiى0GAy WQAb0p) iGiёaC8`vFhiiڸ>.'w)? g3ڋ?WiW_wq9791q>,i!xvZwZV8ccRZOW/'_Z_W'I)p$LVaY11IXIgSa9H(.R6h(·)VFKg?O_G_j3G_I J!Y9iqG V7G˺ RF^j +VWW7"/_o_O: +[)`lx7YWn3f_ )gjzFFn&jLJOnCS+ +;Jbb *Zb"J:"2r2ZbK*"JCCs#O3 +"+ +ZJjRJ +jCs+JK +j*˛*JK"r{z +czj +J ;;J::K*Jzꋋ +zk#ۋZ ++k{{KJk+:;꺺Kj + +jK jk * JJ**+k; +z + +*k; kK*j+j*+**kkjjʺ: +*kj{k*K :"J˛+k +* +::k jj K *+jzj***kjj +jk Kzj[KJz kJjK*Kk +j* k+j[K J ++ +**+j*k +j;Kz":*ۊ +ʊkk +ʊ++** +: [Jjkk+* + +* j *J +**+ { :k; j +* k ++*j+k+++J*Kkk*++g'#s3S~[J:nZZʊk+JZv'R:"b[.fϣs/#s2J3" 3;r/{BR2NjZrCGCZ{okj"cƻ6R* +J+3kG{/.w&dž^. +f?Z7_S6'>犣Is>3bn)(ZR'>ssN33K~Rrv )^)Vf_W>?OkR6i9_)n)~h +Fڈ7G'ڟ 7s>sHs?¿>ocg2KB2IZN&H >_;W^o7FR"K"։ v^)& +~BNw>OK_>O?_s;Gk_3G>(" 2[?>Jc ?Zboj.:r.N's3j{gB.C;B':C'SRr_r[orno_K*z*[R + JRK/cK*j"r./o"c[CcJ +3n:J{R22N&frzˏ')WgS'jsR +rR:/iZ , (8{ Q-a9vHXf(6iwon~zZn'o{Ok^fΞ:*/O`v&_ )ׇ /C#Sk:B.nNRr"NnnnrZ+c3/O3#j +RN&6FFR3_G7w7gOs +rR>&Nξ2kK[sSs3sSs{ +ꊚ""ZBrnn.rʋKO??/{kʢb2."222z:Z +K C##;k +*+jZZj jJk+*jkkk***+++*Kk +ʺz: ++j*k+ KKKK ;J +jjj + ++jj + +**:k kk++**kkkk++j+**j + +j*+*+ K +**jwOJsS[.Bzb{jJK;+k* JJ+ +j +*+h2 W/3B^NCr2#c3K;:o2*/S*N +#jz +{s›;n +kR&g2gzOzf&JsZ^/ZRjOꂚJRkK[NKG"oNz> [r;2c/.K>⿚gg۞'OW( ^^G{;.7F2B&kB+_O:s_Gf&&7n nVsC'~s'G_zfCgJs#nR)Coc:_R{B_&^ +ښsKꚷoZ&c[8~?FϞ~Sb.bZkKz_"w2ffoKGNR>z^J^.wN{zg^hZʂ?FV'~Fw3OR#Nعwrk)#'FOJ'RcRsowFw3wWg7W2fr&rZZǢSv_7>w((CO>Nx(wg;fF7&* +>gSJgB&gSF:fSs{'^#..;o{*^S{3r"kS>";ںO[Kn{Zoj?:zo+k" Z"+K; +j: **[kjc* j*;kjjz {jj** +kJ; + ++* j;j+j*+k*j +kjj ++ʻ+닋ʋ*j++*k*k++kk +j*j++j*+**+**+k+* +*kjkjj*+jK*+jkk*+ ++j**+**j+j*+j* *++*+*****j+jj+*k++j *jj +kK*kjk*k* ++j+*j**+*+*jj**j.g +gZ[ KN3_O2.RS[*22ʋ[ *:j[# +k;[{{JZk#k +;;jJ:k[K{k +:k#ۊB*Zڊ۳ jK*j;+Z.j/gZz/?bF33+. +/z.*z{s#k +2#_{~^2NfCξkbZ㻚BZj:nSoz>fO˻.cj22J;:>.NS'B +k{Z~o3jSڣ':r^O s3>?O>R㲺rJ/#nz[ +3J/>&c'z[// +R>R _r?N3˚:z"OzJsok2C3*rz#3n3gg*..+/ώNC3sj¾ON."sB:[k&rN⛿ggii33K{o;["/:RfKSR.ۇ,X'W-7ZBnVHx863w 'H&NΚ7IG'c3:2r2 'WW)ᷬ$0W)"mmFVX)!!!!9׷.H0S)IIwi &F^.klj99i 0dG Y7AQAIhx(AYy 7Z`@x& y9iFv&&^.+/WIɗ?(|AY--1y@8HWy1aG + &?)i9^~~ +wG:3G_Pd\6aQ1iV>G9YAi;fhxFLJfʇr''~Sg__'WܐAq!y1a@J_ljIa h8h2 VSnoW3j;;oO*ʿ'GGW)IQqg?_( ?W!(8H8&7H 9ss/C +jC.bG׷SCg|,ȁ~'7iJ ya ڷ_^8f IK_&֘icJC +[O/kn))0|@ǞYG)OxPR!yoHIkR7vVff.3)'"goc*s K{3{/WWǶ lam^7!pIYAr xnw/+hnSGwS"fc/Bj?gOHfqm&IY^A 78Gsx. ^2 +'r6&7nJڢ#gG;3L!:XpxGAaɹGJ@ &W)wGGg8(N?'f:2R3N 3C&3O/_Gǟ*p,3Ay!XV )9!6(&rC!"Vhvw'O# +K3K:#/+Zr.볏___C~`Vp_ٙAQ r8y'w"H`v特I/hh W*&7[#;~&N3{*c'Gw3n68@[q-F 7a9!؈VCy)>v؈HiW־fRן'ϻ{^Zn_7 +H@>FJqwjǻ8p 6&O᱁ HFoog Y_ xhZ)ɹ_sfbk_Go&n?__PlHfx!W 8>V6g ىwW +H֖J iGO_0`_?9!j' >nK&3[+zj +bRbr#/__Gooos[˛#3S k+Jb"rBbrK;+;+K k;+2rZ;JJ jz;ۻK3k/*KjK""J +C{Zk;; + ++K +j[;kz":jjZ c + K* +j+k{KK k+:j*jkK +jkK+J: + +J +[Kj kꊺںKZ+:2"Jjj{j:* * +k+k{ +k* +J*kj*j:J* +;Z +j*k;;; jJjj**+k +J*k*J +;kJ +{*jK{j:Jjk+K JJ+j+;j*; + + jK[+J + + +j + ++ +k+*j;k+*K J+jꋻj + + +K +jzzkK{++ +kJ:J+kʺ +k k +k*J +K *j*k++ k +: +*k+* + + + ++K +ˋj:k+kˋ+***++F)G&K+ *k ***+jj+k++++*j:j:˛ + +++kj*+kkkkk+jJ*j +++k+k + +*+jj+K ++k+ +*+*+*+k** +jjkk* +J*k*jKKj+* + +**+ꋋk+++*j**K j++ +j** j +**j*kk***+k +jk k*j+k+ + + +*+kk*jk +J +*+********************************************************************************************************************************************************************************************************************************************************2&แ"׎Ž:xN.gKc"?^rs‹.s>RS:{ R[+#o srr?S7V&s6K w>797OVIG*i')SFK/NoN'S:~g;zFOj2jK_nR{bO~3SgBC^b2'[[RsSr./jr.ۿ&rS2Nn/Rz+&C*ro{Sck*. + + s"/>J&gZ~+cKC+zok#j:z s+Csr+sr3+k:+/+nr*3:o뛊;J":"Jsj *"#*sC"Z3sn[RSC2j˚B3C +{*3kK++J" / +>/?_Κ:cn":Bۻ+{3kJ*kjKRj+.;Kz[z::+zK+;{ +ڢ"[zʢ KۻKKK* +j+[Kk* +J + +*:**j + +**Z{k *+ +:::K +ˋ k+jJk* JJkjj k+jjzʊˋj +k+k; k*k**k +k*Jk kk*jk*j+kj: ++ j++kk**jjkk+*j*++j+jj +jkk +**ʊjkˋ**k+닋*jʊ***++**j*k+j j+* +***********************************************************************************************************************************************************************************************************************************************************************************************ں;" Kkkڊꚺk[ + + j*+kk+ +j *JJ*k*+kk+++*+jj*+*j*kjj*+++***+++*+**j+**kk+k++*j*+*jj*******++*j++*j++ **+*++k*****jj+*+jj**+*+kj+k+j*k**++**+++**j****++********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_american/cause_39_loop.isdn b/tones_american/cause_39_loop.isdn new file mode 100644 index 0000000..6a79ed5 --- /dev/null +++ b/tones_american/cause_39_loop.isdn @@ -0,0 +1,353 @@ +*d}EьDH$]a')r)^ wFiˆ[zZFj6V+^ fNH +)Wa7Y9J v>kv>gr/i)6o6VvHVl@p`p s IAqٙN^f(fnhkrr3#wwGW/iW^wf(XL pp )A!7gGfvhΆ2RS777Ww7w7Ƿ'wg#Ѐ$ c7 qyqwYaWi[^FVvB~3OLJGGǷ7w7Gbh܀LX8iwaIG)(3.vhV&^(Ǜ2kgwk_7?WGw׷7ܬx(9a!AsyV&8R6OZ +^Oǎχ{7W__H`L^˷Wqi1YY_92f+&2K3N&o'WG_'<8 P!!aa aIhxvsG_3NFn'_W?OS{  ph`G1iAI2wHF6WÏ_Ƌ;{)JrosBjiPh. m!C1J [~w^#6F2cr'G3_?N&_,<c -yW9YaGhV{JnW/WiWBc(ڇsngo'r[JGV|8,ps!wAq["(H.wgʻ'hkS".w7'R:+#츶G9!;[fH_iI^NGskiG +ۋzKK*@f@H1 A HkhWw7wvhF*:W33#_V|,{h`39qQ! 8[>)igks{~[/ 3[;jJJb3R @N&ȆQI)!ƸRBG)j.j&'s_C" +˃^,< F^!mY)ə9B/w.)Fn.w'kcsRsogv<@V8R!mQ!) y7b֘XV_wi~>:>F6^+'wgOj3Fb' Ll (ο -mi9?8 x_J+ ZV>fvGsoo{">2χ'^lP H'-m٣/9'h``x^9)cZg i^(Nb')wC/_+rSN.oG7G\r(fammiF`'Y鿟iIj.ֈ7)7go[#~))sbow8X7hm-abHr[0h_Y)I:˾&GC_F;Clj9kPA  c@H'qG_`؈'w_jj3v6WyO) ̶aэ-bƋhX (WA'gwO ֗ Wi+VZwsW)¬#A_hW707Ig׋VrFgiGo;Kl1I-q &xqAW"OWg(@v')7g '.FJ2FfK''_ i'#+;H$diqk񍭁 2@NɿWyyXv6fj9S/sn*[WIiC_ @$`)ha͍v*ɆphWOKIh&B&x/I zi_& _{Vk7'n"FW''1љKawxGg(gR;C[;f _z{.RJB22bR3ûj+;ۻN&r>R+So3o?O_#{{ +˺r2rB{Jbڊ:n[s:rSnJ3cZ 2*ۛJBZ{zR2k +2?kCjj+j"J:"J;zK Zb{zkJz*;++[:r;.c[KkK[˻ rrZ*j {ۋ{"k[zr"kb #rk3K+Kk+¢c*:[ˊ:jk+ K;zJ +J* +#z+K +BC;JZKRc++{{;kjj++jj˛ k;*kk{ + +K+z::: +*++2"k;:{C#*;J:+:Z: c*;j"j*JJ{ j+ +K:Bk* jJ* *{˻ +"*; kkkj +"j#K +Z[*z" +;"j ;KzJ Jwr#''S )w^nf#OOs?:>".6NWRS[ n>J2J3/:K+++ N+"+??2.ʃc~N/O:{soÞCo_>{/RN{:'C꿏B^.~描Rfۛ+ C7_F'c6vɷhοg +vkCF{:JgO)vgN6r/f&''RBCg7g[.""ێ2S>3CnR?㏃盲~Ks⾊*2o &R_fR~k_jng_zO^fۏB?#2BR.nƋ3.Kns_c+'2B ZCOfJ7+KBN ;۳J^RcS^3.rB#KK2{SO*S?;'[skB#2RJs.Rv֖hVfJo'W)WGc:.N.2*k ;Kˋkk+kJJ +":ڲBJ"+{kJJˣ;KKKk**k;K*ʊKk +Kj*K{K˻{Kkk* + + + + ++*z + +J: +*kk+*+;k+ ++k**Kk+j++j**++k j+kKk + +j*k*k+jj*+** +jk+j**jj ++++kk*k+j*+*j***+***+k+** + +Jkj**jjkk*** k*kk*j*+*kkk*** +jj+*+k* +*jjkkk******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************^\h!myxwO8f{'_))VgHFg/Bn:{2kr'r3/Zʣ*_'_ 3Nz;:'koz>KOgS."ZK+?K/.>ڳS"+R3Zn/r3OvjcOo"B{n2zBR{ۿVFcRrs*?Ncs:{;C*B2o3JS*r'n[k^^3#nf; +*S&n(vs/JO^;CSC'ckwGonCos>[f>~^ko#SfPЬG)_YIa 9iII_YËjbO*V3FH VZ2i(fQ"i^wɆ  G:'3^b#_zR&FbVhn'_Oܬ`zXq9&);^Ʒ)yf'Of拗GjbV2W, GQ-~y&!A9&F'W)s63sz6r~&NJSsOOwz(' GɿG7⸶jo?>gw_^s(&{&Vܰv۱=2oH/!) +!i.GX@Y3~hoysVV'ghSo/g<๸FvIa~ !s6JGB +3iه'hS/w//wc/N:G,t 8^ݱH&9^ prWjٙ.WRξ^ )'Gn:'ggSso:ZJ9dN +Ha7:GkOYIɢwfvN>R3y_"6g?"n[>n'@^VYѻN I'n)..W)#sxc[ +6')KR (ן&z FƲf3W pv2q)/)n cCcGo_#R#J[nR2/#fNN^nN&; 8 +)?ggg7G_[ogR&*2RJR^B&.>&fr[ FsBc.iww~gBn &^^6F{v&~3+sRo[NrR/g?' cS/[_~k+ڞ.>~? n>NW^?cJ{j_/z&?.3nC"& {'S~s'k_F;N._Rb+OSsOjJ ^JNSS^#rBnN?+Boo_*žC_?>_{o;_?J^JڊSsBo^zS~(ϢSr۟+CjϿ2.*SSjCZbj#s.nsi*bc3>'ooBf?+ZzK/H*2ZON'237/_jk:r~3N*gSBcf&*CsdzJ+GFbzRh/_/gc*/g:n/&zOOz;gs"ƞs^fz. *~f&SnG.:bs^_3bkSoG Gk_So[&i;S +~SGSʷb'"G'*G*6g';"/O6jJB3B&sZ#foZǿn3..OCg;2^*~ kBzj:2: +r2*N㎚[bk"*f^bBgrb{+KfƖfr/swWGWO's'/Fև/s800x Sg aA )#NF;S#ۿj*2Rr3#.bz +"**'/Gc~(8h ɹ )W3#B ڳsj˺C۳rrrZR>sO>>F6Vv~wG'sSϣ{3r#+z +rrrn +br +ʻ +ۺC{Ξ^f^nB:+CoO'__OSCcK:br...RRr22" +JJ##cjrnξB" +kSO/ssc[+ +ʢbR..nn22BZ*kkK k jj + +j닋 ;#Cs33ssCCC#K**z"2RR2r⢚* + +*kkK ;K ; kk{KKKK;Kkkk*+ +zFVrS/;["2+[;C{Z"+kb.r2; cS3#3[K""bںZzz{+zZz ʊ+;;k +J+kj + ++*jj** +K+kjj +:+k;+ +k+j:k+K J+j ; jkK+*K; j*Kk ; :jkj:k + ++K; ++ʊ K ++j+ ++J+J +:{kJ**+Jjj:+j***{;+z+k; +z +;+ ++jJs(I) ZcSJb + +k[ˋ*j[ k;k Z+Z*{j+:2+3rC{?:[~/Kzo;RZbbJc2#Cʋ2_~_2"b ?^{Sfb^s& n~(2縹('wjJfSFs'&Bh'bz (WZ6)7{S N~:fJrGjzG:&FrvS2"Jw*fW7f3f&.*ʏW+>{/Ƈn('f3O^{rg[c[R;zs:2z/..+[N3nOj/o.&ۂBOJ'{R;C+*'#KkFgzz'>Cϻڊ>C&ۣ2.onʳr +/jʃrSsZ#j/ۏ'C {KkZB +>zr.nJn*hhVFJʟI W!ٙwW'3_[3Kk.NnN~NBZ,`Xxl^Gwa1(hXv +'Gog3CzK/_[/f`x WyׁAAq Fv(F(~o;_cGo3o_~LlXx2GYwaA11qWyyi#^^žKwwǷGgg_'_7 +@837!aA191G9W;斞fn(6:{j?7ח7W'_S''OGHylXh99AiIɷc +&.n(&b~fJ?ǷgWW_3s.fƌ` X(xzىYqY1IW +n.VH"F66r?)g'^_{H H H־b' y IחWG'c[>~F6vvFffo'GG7_'ss +~Vh8x`XHZj')Iicnfv((((V^^rcGGWWGGO_/KhȈxX Xȸhii!yYIG[FVhV~z/_GwwWW7o(xHH XH8*III!!Yɹ 's"f(HhVhvR_WwwWW׷_{XH`X``hHr*)IY!Y 9G3fhhVHhFxF˞GWg__oJZ x`8Ppn׹Iiٙ9W)3((Vv +j/G_7W'X`0`h((i9y!yi )wZvvhhV66#_7wwGg'_ XX`8V>*/wyyyyy)WWWW7S 6V興hv>K +7G)7ggWoP@x0آSy!*ZG)[f`&)i7?'Go7IW)N hH-8:&H aI闉H` &h.W)b~J'."I wIIjgd@Y;a)@xɹgyQAI(RH))8r's)i7gY _Aq!!aw@[y >`G_3/XWCg_wWiIiW dd|`aQ-/y7Y9F@91wy/9yFHb 'Z:KGz_)I iWwwLd\q_χYp19S)X2i!ɣ6frVWw +_JJw׷^\IYiRy0W7 `VI9ƶBhfjw)Sۃ3O2G I ,|<&Yqy'W6p0!ai `Hor*J/h6/'ϚGW7YL|PG_Wi`0'I)y!YXR^s_n[w_c??33/O(h'wI2nJgii7Sr^.j:FƂ'ʾbsg +.+*z+s[rV(^*/ϟ'g??oss3S33zNf~NfڛoCk?Ss3S/Kjzr~^f&fN*3SgGCs3{;S+r^f&:b ++KcsoCs JBZ.nBr:z*j +JK[#/_#CcS{z.:ZrRzrzjʚz*c3k{s/{K+ KKKk*Jb22rZzZ*jzJk;zJ{k3K {k+j+K j"b ++j+JZb+ *~K"jj:*{ jjJz*k{2"sJk*+**2k#j csZ[[[‚2K;Zrºk{H&SS37oBF~BZn~^kOCc ~o{O_.^^^.?;/*.NnC*K/r"zJ +b++ +"brJK{{;{KKzzz +*+˛+j: +z:jj k+kK*ʊKkz ++k+ +jk+j+ k*+kKK:J:K +**kKjzKk +BBr2J/3#;Zn>R +kz +zkj2.Ršk[sS{jꋊj"ZZkb(6n/7G/Cooos:"jsSz~n2fv^kgWWo^> {Coۋʚk7_22N^f^>LJ'/"&&>c_WiWo>zS'c.nrV X"ǹ!gs_W)WǏ +Vֶr2Cg 9Wf6NiiW7ְ,GX'Ww9y9~'9YS興^rb#ggsr(R7W?bf2JˣsSc.^f^BKsS;꣣o?K: 3/Sۚ2BZ:br^ؘ9!w;&vv^7w3*/sK;S3 g7, -ͽM,(q ۳/(8h*فG@Ⱦ!ى.v^ki' &2sww@@`x&)Y1Y kV8(>Ii +.^&(V6n׉)w&(f:_W)_kb)gSP,L,v!QGF*!yy77F>'/bhƣ IW&6)i7 +B:gW9hL<X2ѽ8AёVZ2cf2i@@ȿA6xb陙g.6fWIi)0L $oMmMWH`qg> Sɹ)/ /YY!Irƈ>W[Rg)Yl# =M),`aq'Wy( >I)ڈ`xGaawֺ9 WB7 ᾌ줼X} ́8@~Yq11h37(hH.y)J`X!ayShhfi G[b99P MM8q9wKyY#)Yhw!ٙViWW+"_)IP̜0' M!@hOwfWI9C~h^ i `ւi9iSf6vG)CgIl.^'j۶B.R s;oZZs2Ozn O&*bGg~kg Nfώ.3bokJ~'S.+3sSkSsB;*s3{Rg>sr'kCo滇>+ZfoN[OfC(sw.o/[R~F/3nN ~Bn*RzRfbK~o[//WS'SrC#&{Jcr˛+ +FB>NB2'r[_~Z۳&>KSO(ghKJN*SںZOrR23z{kBss+sK +_J&N~[/n> />:.S.OšfsjRB~3/۞Z#bJO {OK#Or>z3s β?3kS[c[K. ?bjO' c"r^"SSj{+^_+zC˲Rc"+js;kCƂ"/#Ros3z:K[oOCrK/Jrzڛ.K[ۿR"S*nC[?"R3nvj狚Jnnʣ2#c:B"΃w#.B3sz"jJZ2: /HȆ>N/_i9)i)7G_#~NڃÏk c:[kβbROG'nPpx>^zsY!y)iW{.kSggCk^^>f&N:3/Oo+ + c_o3W+0찘F(Fy)WoF"7*n6(6fRKg'o*cK[s_'?ɷL^Nh(>ׁ)gs+6N_i i_s{6FVHHfZ wW'?/CWw P(^-m-irRFyywgOrh `(SGII  + +{ʚ*i Wg'<$,(73澗 mq 3:B(/aa鏣Kk`&{_'7Iy2.jrG)gWRdXG+-kHYAqaR(`@ؖWW)IIG~v.3; i)ǃk[\лa!i!qn8*W1Yǎ`VBi?OcRֶr'_G'WW)ϻRC'설l(q1aaI @VS9Wi9ikXV97r&2Sr~/?Oog[+χW$${I6,鱹yWYY@_K{IG.Jw2r:3''7gsd|lQW)Vl 1aIYIr@@W?_GZ Wgr~no/3sg)'̘!)y(@6AY YW&p`^igiG& `h)gSRnBsZ*'ggo{pL1{ɱIpjY!K`nI(`n3 i_ZCSßs__ϋ2_$ q Bqg,I i( 2>g9ٹ'`Vv  >>o?;_W|Y!g˘ pK_ω!qپH8XXBIYh8Iɟ/j[/;[_w_gGK',L 'y! w XkQaa+@v>ٙ9ȆV`.g ?WW:F3ꊢ +?_C/WWWB0g&Y-18@`VIaa&xXH9 o&`(#WCb3;&'c׉7?o?S$d +. Sam9@)yq&.&^vvig7h~_Gg"i_rjg_sk_;̄l i-6Gȟ`Hhgn3#3o?7ׇ3S*i줌h F-")^yaW)'n>hvVK_7f/'JΛ'N32xX{ykK'Ws/O_{.k" +?++/SOk/Cnk~{۞>RF2Kkz/OGgwG_go_?Cr.K? ksKfNR_2Bs.[F+C^o#Ffgb?2R.[6Jo[ʚzCOC+ :;Bsjc^jjcJ g;3s#R&r뇳J +k.۞.jB/onSZ&+s +:*CcB^7'v/R[Jc^ +{b.~/+^N.3>.Gz?fg"fFK3Knro"_sZ*ۋsrN뿾"/K+fGR>bN^oΊʿc+Rjs#2+j#rf./òn_&{➇/_[DzKJ?K+:.ONZο?+{Ɨ6; +zc_^*2of&cnGRoBz?jnzS׆N&jk&b.£˾/j^*K/rC.GrORϊ /)Nr'{k &^3/B*g>.+Z^2oƷˏk.+'Jn^2ÛB[~n66O^&)&#f[ +c2S"&SNgGv_~J +.*r./+ +.2>r{ .?{"gBn"BJrbK's.s~f +3.kC[ +S + +oS> +~+o{~kC{{z.;rKR{C{o> ++o+z 2+Bbj"ۛKO;Z + zk* +kJb +[{s +{ + ;*2cb:K3늳 +J˚2 +"B+r +**2J Kʣ[+sjJ+B*rz + +kR33.;o[JbrB+s2 +#k;˳ kZ*˚z2JKsZc{+J*Zk +:kr[;/ +Kz3kk[*bz{ZrR#.k3뢳*ʣ{BZ{ +KR*Z2 +zskzJS3:;3.:Ss;r#jbo/#Z2 +:ccZj+cK.:k3s&J^ jʋ{2 +33JJ'R[K>b^+;;KkS[> +/ʊ bJj[;Rk: +Ë"*23C?Oj{3oJ>.orۢ⎂cJ3Rz{/2bzs*C.^BcZ>?#2RkÚo2j[rb j?CC*zrR:Z;Z3*k:j2zR[Kj.~BKCKJzSzr{3k*Z[.rSs;n+zzSs +Js.s#2r"ÃK#+ +["jK:{J{Kkzr +/ +ڂ2J#:*J" +jZz +jK[{R*+J/33s/S3۳;3"+ +Z⚋  jkk3oxЬlHOaqy)ScG)SVz7yI)dz2^&κ/O?3¢r[/L,(mq!{ri辳!InVȈ(f[:cS +3{/ CcZZS'?3Kc,ܬo1QmY +)W_2v(7IH23Jss_S *2ggCK۟l\<am- ;J)_Ji_&(6^v8^ 'oB[+KJ/g)w__Cc) \ mYWSh/'GH 6/awr;H Rrns_G_G7sSHl܌DZѭ)Gc֘`w!1YydzˏjxHv_';S*G'OBf~3gooWo/3'7 L|@fYgy)!3 fi!I׉ i8 Ʋk^z'Gw.^κ;?g7wg'o/c_0lliY!H&/sWy)V((薆wwGsoJrzs3_S/kjs0/So/[++sgOk{^F~jKO//ûk3s#s:bs ;{8h^7 iw73K#{{+2~f^>rZ22+K*S/s*[/KOc+BnR. +zRf66fN.Bjgg''?s [{j.Rnn~.Jnb۳;sroc3[²;j^f^NR.b +__'''_/{ʂNnnb jr2.;cZZJ: +oo ˊ*ۏ z +;j"js +>6&>B"*s?G'/Kϋjb..zzBsCJ 3/o#Bk.J+b(&NNB_wgwO{2Z.2b.bn2+ J /;o.j3oJjZ +K;KHh&.#_wi)W_ÃNNRZJ>Rrrz*kۻcsJC[C*":+BȀ`Hv YYYI WGnZ +{o&f~&KS/[_cO*{## + +#zKj[ pXhgၙY!yw3Fb[:/7_^Vr*?'g_C"z_o#ۏOCL,Xhx qY YYǶFV.?O'WGζ6vH``8OI/o3.jGg'gCGl((hhvC'WW)W鷇?SoSsxx@ X@ָh_Y9iI)GgN(Hhh&Oo7WwwOSs/˳N``886gٙaayI G? +JvhHh(vbo'77wwGg?C3jv86(wYYa iG'?:J&ֈhHhzoGw___?/o3K >  `fW9!aɉGS_JN6fhh((>noO7Gg'_'SOsCNxX ֶ7a᱙7I'_>^F(b'w~?GGOO) L 8)99'YGiv8XXV矃w3sg_7)ii[od|1!_Ah i 6*6F+N6h8z3g '_O/??Ww.>`dƭ-a9`ay)W>hVrO32(V8~O_''3:C/O__g .?^<`g+H`1iS?Nv(s7WfVHfKw[ 3s33s/_g'B<\̘qmQ."N8YAqwznRv3Gc&(Ȉgo CsS3[s3sCG_RRb_X|܌qmmaJf6^VHNqy6?ghHRoǟ{/s3KSgGg>bCgP/Q 98#^qY;VV'K.V_k2_Sk3O +cjRn2{o&̬V--wR6JJ^r'9ayW~~.".^f&*zk{:"Zs{K{K S/* +: jh :B.vOW7gOgG_SSRnR2^^Rrc?OoSs/OsssS8V(VH8(~ i wwwG?S+2r&&&&N»so?_''sos~hVhf/gW ɉ)W7_?Os+n&^>f֖.ncg?'Ƿ'ss33 +xV(h 6k''')Iɹ iw_s*Nf^&vF:jC''O'''_O//ڞ((hȈ8H>S9 Iig+&fvNB*_g_''g?s3oojrf8hvg 9II7'/S>6FFF枞nog'_Gs2NH8x8(sG7ɹ WǷ?/ffF6V(&~S'_g?[{zrR&HhhnG 99yi)GG_SjNF6vV(&rjo_'''G'kJ.nn>hȈVVV(h^GWW9I9i))g3kVVvf2b3ϟggg_OoSc +:B.RnN~&vV(^'wWWIɉW_sB.&6vv6f&~R'VOy .NN2rVPG_فc&R/>k ?NFh?w_Gg>ZKo3gi _["H@$v1Aiv`F3AaI#(F HډW?&^N +c7o+"Bnr(<0FaQQ 8`Ə&&iq'S +.Hω9Wn&~kKr.G_'Gg; J&F0i7m!xHfiyi)gX`xHh K&~o___GG +r>~ @*zǹ w@x +WR~()W#..b +J G77{bB>^&^HȈ& -W;jVCF6WiI!׉3xhH(jgG7's n~>njiןO^ƈ,ȸ`aAW R6GI)W.H(f~)_3jRnz{7gŽ^(`hY!!ə_οVh 7ǷS^F8(v6fjOoחGgz:3gs(rp`_ !!Yf& +sc{g/3 f&V_ +#[r[Z:[KRBvh`3y)Y3s˶(G.37Zf"r~_'s?gog*cNb^žnnVk0(3H?aY) +& r6kKN~rjZJ#33?/S?;S +B2&>~^N j  i +K(J6_/>r3K +Oss?oCs B&^2Nx`X + + vW*!YWig3JBvF *jS~.zr +{k3???o3*^枾n†XZH'xr فY)N>(^BFfkoBn KR2rz{_3/*2b^>~&n*X( 3H׹!Y!^F&fVv>B~#S2BrRn"*_'rfn:~``@ hha!?vvV^vNSz2j j*2kz_?ogG?o..^F&n0yaAAiW!7^sn^Ff6J.N{_''O˻ZRn.~.hHPOaa!qaهr NN.>RÏi3ozk[뺋#/F8 `ʷəjo_ i/B|\X`GIQm1iS@i!A1!H0`(FCIg& +oGw)wg32RV ,''эgox*YaIVXVi'_/_.>+?iiן3ßg_s;?g $$ڗ.YM8"&@`Rwqyw6@0hh9Ck6g?Wi+2 +gsGxdLX׷)^MQYψ[n^19 ə9i(~GwC^>Kwwk':O|Gm- >3Ǿ֘h&y)WGIȸ(6ZHng7''n6n7wS#SOo +KZ~2| Js湁1wowgfVsW3RG7N(6JVsIi^_rR>.sgsR"g/n^ +^6fjkC8~k) GG7g'/33*OSB.n +*;Zn2~&nRCr b{~2#s +kzfbojcOs3o3ˣO_ϳB.sRCJ +.r2.{~# +^B?z; +;O:jr& +g3bZs&c[*3ûC{΂"B_ +On"_&Obb +bfSrJ /s>O3"{;*_Rۢ/:^./.s f{/ ?2zk?"2j:*br&w>3kS{n3ۚB + +R+3 r ~SS#R +orrks :{ +2k ++jS^[^zZ;sKR/s/J^z:; :3+"Kb^oORc>[Ks2ZbZz +Bs[#3*jz"/kCr2+".jOJ+S*.Kʂz{ +B*bs:˻k: kz +ʺ*k: z Kk:jJj +**{ ++ +*:*k+ ;j*kK +j +k+*kK{:kkj+kj ++Jj ;+ j++ + ++KkJ*;k*: ;Kj :*kK +++jKKKk + +*;J; +Jj*zK +jˋ+kj닊j*+ +* +**j +k+ˋ*kkj+k + +{*kk +{; +**:+*+kjKJ* +* j + +jj +k+*j;;*k*KJ +[;+ Z˚ +"JKʋK +jz+Kk + + +: + + +jˊ{kK+ +k*kj:j* +j*j ʺjK**j +jʊj + +j + ++Kj +K ; k+ +k+{ + +j**jkK +#[Z" +Jzkk +;[*;{;*J+ ++ + +::ZJj+** K; "k;*j+{FwO_^B:[zVV/vj#BnS_s_j/g;2B^S*&Rk{N"RogSg)s3˶v&_2&g 2.r3~K +/{s#s2Z/O[S,ܰ63 1 2 g>wzg 7KG'&k?ZJgSWi?+?) fD @)6ahhz)`a9Wix(r.[sJz/7o{'ccG׳[/L9aǗo aa72:2^~Wǣ"h^Ro 37[j +?'_gGGgz['W$ѭo! H !ɉ!yK(&'{*_7fh6NΎg_kʳ[JK'G'[RgWldpa-!37wYva9 chH֋Ǻ:  +_g?_;.kg*Sgg +Jk#,j`H  z_?ֶg)Ɩh wr{{j;s?_Snr'Gͱ +2ny.:"ficf ^(hN{i{~.scOos3'{ gGV8q _'NA(N'G&?Vh>ׇOss/zk_g7pLG--.xsƈA·w:ir(S#Vb_W'.c'' +Oʚ۳?'_\ mMQoW?A7f牷 +B7G#(:?翂V./W7 +2J;s'_33*Br{_ˢr#??~l -O)(vi{GʟGv2s+c˻ g3ZzKko#SOs3.xxq +迟G ۈ 7i_R>)ָcǗsfVoC{sGOZ?s+#Oocz6͍x.`#w~riθX'.V&j'NNOgZBC/Z#s{'_oJF p-M &8&J>`jAQvn~gf2ׇf67' C_r.kkC?:&VX̌f-62VhqY&HshYX2O&Fni 2/gS"cg?*nRz;{ +jjb +*{{>hia7>(/iy&^Irh(V~GdzRº#k[OcrzÛ:Nk# +&Fv08FYA?6fɁY>F>FOw׿(NN[g/zJc3c{K3 r.k#;r^paSNz6(.Iik"~Zw(vBOj2 ;/+zb 32⢺*j{+VxvyYiRkZ_)ijrb>^+ +bzj[:2:kC3o3KZ *jʺZò&08蹁s wJFVSY_r.rvjfFOk.s'S˻KkKz + +Bڢ +˃:(hhǙY9_czR )KZΆ~C J +r2BK;33K +bk J +{+ڛ/^(@JYG'~9g/r&((6J*K:z.bk/óCSsk+k +ʊ+.r//nv,8)Yy G7i_n?iS?G/>Ff~^&n#O;Nc/ +Ook+KCꢂ2J{*:khxCi)_iǷCGgs/?r.n>v6f.;+;c;3{3{ +j+jBRrڂšJ`/w''GW/'cS_#2."^&^V[' +ZK+C;sSۋ"kozz2z~((ڏSS??Ogs#sk +:R>>.ξR**+{s* + +[*kj.rJ+Jb{ۛ{KˣccK[{ +[jkk::Zzb:*JJڻ:J jkK+{jK{k*K* +˻ + K +*kJˋj +; +jJ + +zk+jzK+zjk *+ +*J;{;jjj:*kK* +j+ +ZJrW&#âNrZroZRN{[ +rSr Z#JoN?ZSR3sbΛ:Zj:{sz:Z?R3>b3/KBs"#3:kjB"ˎSJ"CZo>;+//z2J/ +j;Wc*j;js^ #Nn[bjÛjR_or K#C#.bS +Z"czc #:*{J3J"ʋ#ZBK; +Jꂣzs[{+ +z; +[+JjzJ + + +;+ j+3ZJ:Jzjz:*j + ++*K[;K;j + jJzk:z{JB*C ;J +{JK"KZ+: c*KZ;K* +*;: JK+bb +{* JBZ;JjzJ*{j"j* Jb#;+jK+zBzkۻrk:**K*{ʺz + ;[ +:kk +:+**+;j K* +Kk +++;:C Bڛ[*kkKkK;k +j +z + + +*J Kˊ;{⊛c˺++j:K* ;jK;" +{#J+Z +; + +j;ۣ ZBz;#:Z KJkۻj +*j+kk +z: +j*K + +k{*++zjjzj k+ +j*k;K+ +k + Kk: ++k* +K+: +kK + +k *++jj+ +jjj* +jjjkk+K{kj J: +j +j+kj+ ;;k** KK+ +kj++j**kk+*kkJ* k+**j+*j*k +**+k+*jj** + +jk k+kk*kˋ**jj**jjj********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************* \ No newline at end of file diff --git a/tones_american/cause_3a_loop.isdn b/tones_american/cause_3a_loop.isdn new file mode 100644 index 0000000..3c010d2 --- /dev/null +++ b/tones_american/cause_3a_loop.isdn @@ -0,0 +1,316 @@ +*d}EьDH$]aaqYaWZ9(n8b#7WgZ~+K:s) iXL K)ɹAaanv86^6w/>G ZO&.B2_CS)w'f, 0Ȉ1Y9j"悃n>W/_bKn#_w2)b76@8xZṙai'R>oBk?Cf&kS2Srg O0_^SYGj'~g_r_&ֆ_sG/ 7;i, nXpׂ!qig).?c(>WiN?W7h^3K^jwi9!l0Si遑qjFX?{:jn(KϏg)i7_Wi<xȰP'yY᱑k6h..(^ iW9Wۖ&&F6w)g)93r (x08rIAaGR`8&ʞzi!a'fH82K77_o\|x'a-Iabc69a 'Gb(8O+I)7?>$LVw-7_Bx`VgB~;w!AaW>/&hv#G3WIIw?g`$HNsͭ#'0XsKOφ~HG /wi){i>8giQS.LJrƉY鷇IAh>6^I7G׷Zgw_d$gM'.*0V!Aw6HVFFfg7gc_W:oi9Ln7 a68pYAO7YCxhVb?()y G:r)GoZCO_$ni-=~xf[qA! +hx6gwfw^>'iڊ3WY֤D| iioy MQXhJ 6Y VhHƟGRfooχ &D`W'GaۘXnXqYvJB) i'*r3'G $W'Y-Hf`(I1G#3kh_.Ig*2w!)\H(G͑"ixI׎bW9~hh +g_Nv7)[sF_b:GI $ֹ@g-!{zyYX(bsh2Y2^2w2v g2/^vS_[vJ?+3&@ .RVȞɗ9I)zڏSξsZ.S{+2:Z{{22ZBrZ* ;j .NRCos*_o{ۿggo: +j * +#JKkNbr.2{ +"{ +zʛ3oJ2B +kR˳S㋊*ۋ*  +[#2* +⢢zJʊj+ +b;::s*zz + +*k*j*jkKKK *ڂK +Z; + + ++k" + {k +j*jjJ *K jˣۊzzkk +KBK+:;;k*+*J +J*: cK*K*;K*::*+K +*K{j + K +J +ʊ+ + +[ +*ˊ:"c:Zc[ +zjÊZ:;+*:jKˊz*ʊJ* KkjjK+k+z +zkjzK[{ Jjj*J{ +;[ZJ6FYV `wh(9 0Xy/ii(7o&Bgn^K?osfSS""ڎ>3>rB32~G ;:3zcs*'? +o3ÊBk{Zc;s22"k +2_nO3J *onK.okOC/.CoB柟[b>r/SJ2#掛shǹ/Jgv('jzf.^?Bǂk_k>Z +ZBbB/>bn(&kGS +OOsg暏Sz&SR Zg[rzRfR3rCznr*KB.GssJ:/Bznfχ'OG{Z';΂//.N'R3cB~RoÊ"r>O'[rCBos2Z^g +{br:b ;/k.&sR:^O;":O~_g?K ̄[.?)\|78w-͑ǏIa9")G(b׉)GwWr +o7gk"G?[Ɏ$*hq9WIChϏzɉ v^:b/Oò2BRN~R6fNZ*Z":K#[bCc/_'_OO3 zbr...rbK[##sooSsSooj +j*jZ +:rbBR.R.ξNRj;_C +ZkN.ξrz###[ۛ+jk +:zJ"bBbJ*K˻;c//s3*+#JJ²BbZ: +*+ +k+k˻+j+K[;*Kkj* K+j+ KK :Z"j +:JJZz + ; +: +{ {j:{ˊKKk++++*j* K**k +J***:zJkjJ* +*j**k k+ +ʺ: ++*+K;K*k z: +:J* k+jk k +ꊊj + +* +k* +{;jj****J*{ +J+ +jʊ+jjkJk+J +{j+ +jkk JK+j+jj *+* +*+++**J*k+jjk+*++++kk + +*+*++**+*k*Jkkj* + +*;k+*++jjk J +* +*+j*********************************************************************************************************|^1!ϹI xȈZ_'"o&s#&F6Nn33G3 zNjr/σBSo/bz[C{j{{J +cj#B;SڋKk. +K:z:"{rßJoRzrZ' #nr2SoR+".2Jbn~F +_b+ +c2rR뺞"3":?O3/So۲_ +R://Cn'onfrs$|GQ-! !^cw7W7) R6V[[fVVVs7(R"QMYSvΉG^֏wiwgG7nBcsOk 23ÂC[ jn7b$@+I}9)A h``obY :9Og'rKO +{Og7dzJsِl֏>c%m{a,!in!*W{0)a2O&Ȏ_bO)\ )eA,!Y 1m x Rr#fkǗ_SG2OǗ9c_Z(Q) AQyN. baVN(ɷ[7wʾg)\ȏGF7ͥ!gG`l1&Aqh@Xˉwvxf_WkCWk;Z D_i+%Q'W8 `A)QYh@&`FSGF2gg)Go/_+>'y$8I>W")wx, ʷq #xxvɟWi +*&jOOSCojpDv6m`7!P0)RRwY/b'~hW W *rsooS.;JO"jrS;cjrc>"J#KN;OCS3j3"O*'ns.fSO2s^&R"s{?NR>3.;_Z:{GRFSOz +{r;{{Gs^* *'{Zšj: +w/۲_R +ZON7g'cR*/ + +{ +C +&jBB+[sBzfKR6"O_.G/>& s_'NKCF'Bbj*~OG;.r+Cs&>&zsrc'bS_ʺs?B.r{ +&;">2zKkg?;B?bo"jcS7s&WV~K&z>s'.>'3'_nB";gnk#JgjRrš':/SBۚ";ڂ.bf^2ڃ_^#.G/F;3KjRF[fJCB+J&RB{B{N6n+"SS_j;SFbS.o{~¾ok?:Z&cZkrS/K33Of>R*jS#R;>{.j2"[BJ?b3b2[SS_{CcKO~bRJow{s/+oB;R*_f_2cB32';{ +s/cs: *C. + +nKJk Kk+ #"sJ;#Zj K +kK +k{; jkZ*::kښ+k+*{JKK k +*kKjJJ ++ Z:zZ* +J*Kkk۳{{[J{*JKK*:Z*zb [#[k +; +J:jrb"z +:k:::jj {˛#[# +Kj:Jz*Jzʊj;*J k;ۣ KjJkښj*:K j +{k:*+ k;#{* k: + k+ kJ+ +j kkK+ +:ˊ:j+ڊK jk[+ +*kkJニ*;k +#JJZjj J +*jK *kk*+k:Rb*K;*"{ +Jk +j{+{;KBJˊj* KK ;;*j ;*ʊJ:jrbJ :j{{Kk+{[K+k+꺺 +JZK;.:kJZj{+K# ; j*zZzz:zʊj+z^s_:K[+/Ⳛk::*ʚK +ʋ +j +kj*J{ +k+ +kjk*#+jz:{bK:뚋joSR{Kr"n+ +ۛK2K2O+ +*?CNo.*J_*co +/kSn7N^>j&>'#n)Z+W3+27WG>v(W(nwGvigvg/H~.^ 6'n+gSO7rH /Fk"O.OonKROOGn&2nj+G3~;{{nss{2f&Jjhw o +>G#.Nc'R"Okgf +S~.~r2j2;ƿNJ +/^3[sz~;RS3Ϗc3o:>b">?3RB^Fhf6fnN'giII99i)S/R.NNn.~&Fr^FpXHv"aaA鷳h^h_'oj2ƾ^rzS3»"8OI9a1!1Yɹ)Ǝh(N.og'sKsBJBjc3{'/2VN`HvSi1YAW:>^((6>r/CCO2Kʃ3_3̐ h; 9!щ 9Wc.:ZF>vf2S.'{g'Ogw'I,xhO_'Wq!iIھrBFCF&:nn.J'_W7w'?ON/8pPȖIq 1w/zR2.rS. +^6(nv>kc)i _3sC3 x0(Wwa1Y?'N:*Z66h86f3χ? )o+ckCg0n0`@fF.'y!)'/#_/ nFFV(v&nz[O__'_''___ + GiiIiiig/ BfvvVV6N>2s__Gg''hȘ Hh"')i yIw77{n~&6vv(VV&" S'gGGGwG'{vH XV"ɉ9Iiiion6VV((6&2Cg7Ƿ'_/^x (.I yIIIii wwgb^((v^r;SgGG77'__g'{XxXV+ y9 iiWg{6(h(h(6.jϟǷG7'' x @6RoI99IɉiWG+~h(VfncggG7G'_gg X V6)99I i)wwwGO{fVhhhv^rzS?'gǷg_gXX 8^*OgiyyiɉWw7O&(&hhH^f O_'gGG'ggG'RX`xh@Hg"_!YIGg)yY)'7Hƶ({#w)_3/W Iw7)9|i_V AhG?!qq6'Vbo'/)G?K79W_ogd$a{96pP1ᱱYXfhv>ϏoRSO_*kw3lj i7? P !{W!'8qi7Y)V`j)6V.kOfn/K'wW_[iW_72lGѭ_' aP1-I7 y؀&WIV&g7KwSW))7/?h|\9Q YHPwG؀^9IoFj~N'+*WCwwWH|Q_#IY sy)yi`W'h6>ff^/gzwK3wGw_^&WGw'3?oSoCR~^ff&~C*SOoSssk Br~Ɔ&~ 3og''gg?* + +&BRNRb+/s/ooC[kj+.BBbj:B.2 +zk#SoSOo[ /o+:. +rBr +j:Bz{ +ZJ[###z+KKk; +j*ڢ+KK +Jj{[#**[;**+KbB+: +{ k+K+KKK**jJ* +JZ"+ +j;;k *+KۻjjJzJ+kʚ"# * + +k:kKk{[ۻ*"zJ+j+Kk+**kj *;#jj +zZ + [3c zZ ++j:z:j#*jjk:zzj ; +#k+ ++ jʺJ*k+ ˋ:;;;zJ+k Jzz+K**jk[jJkKk: +kK*zJ k*k+ +:K **j +jkj+ +j* +*KKj +j + + ;kʺjKK;kJ+*k * + ꊊ*k ++*+k+ +ʊ* k* +j+ kj+ j +k˻k;kj:*kk* + +K j+k+kkj***jj+**+++****+;;kjjjk :j+ j +j +j*k++*j+ kjj+*j + + + +k*j*+j ** +ʺ +*kk+j***ʊj+kkk+j k+j*kk+j*++kk+*+k+J +* +j+++*******************************************************************************************************************************************************************************************************************************************@_#2^2."Z*R.vxa&'Ǐf^RNc2J{cO":n32/2zjZ.&_ +CZSzkhxFw!iSCi66".~Fgi +[.>Kڛ?ڛSO{+2kF#SFhZzC:cbIOv?gg^CKψ(.b[wn6j~r_SfG&ZfG'VFGOoRZoSfFbWcoJJO;s'zjjonn>o_&gvFG .~sGG# +BWrF>;N'Sf /b?'?Bc7?2k:Z.Rn:oszKZj*3.. +ogo2Z #jB_^K.Nrc+>;#s3k"2>/KZO?O/S{CC3"* +{K*Rh,|@~nqIVpVß1Acgh6{特o'̆I` WM-)!`fc)wi)y)"& +&Ng77wwiyoY (W>~Iaq76B(0n799(vb2) ח)iPD$ }mЬPV iI1AVhHW96ƞ2O7w)_O7ddF6- >SV,hYy xH`h97)I&RR iWi W;W$ļH1Gq] ^'rЌ@v9Y/`Ȗ V!yg)z8/W WWiRb37Xd\lF9(s ]y6/lsY)iaAFhh h[wG_!f6fRFS77Gw9WCC_,4k(wo`,癹9mhHh@6I#&6(BG i 7ϳBi ȃvFgGGIG11b^6vv`CHׁY){7;hVOssGǿWG))$x]m!Y?@99!iyxh(9Y )".GW3P<0' 7qi.s#!Y)yW:hh(`(7 ii ɿ> +n>+'KRsWW'7! $x``8O!'!~38ZWi 'NxOG))_ "r^>G3'׉<и`qA9Y's'H(6f#/{iW[Fh6kfj3S7'S2f +3/@(8HJYi7aWo'Ff{Sw7~FB s{S_jzJnz{c2O`ضHh77əS7'C^k_O?'+>ffNfr3g*#nrBB2˛RVhFn&g?_'o[jCs:;*R.N&2*3+Sz;cbO犲.?O+Rff^Ko7_O'O//˺k"ZJzz/.ckSRNNK⋃^>fROg_SS/ˎ"ʲn"z:{+nRۊ+ÛR_. Z3Kϋ`F(f(VʗcG')G3g[kzn>~rb;Z +#{j*{2:kSvXvvȸ^ii)7i7s_w#oS["N&F&n"{cO+sC#/ +s38 V8R7IIw)iGW׿s'#Zh(f.s'oO'cK` hH6/Bwg9WIW7W?G'C{*>f(v6^^"bC/o_'g/{C3 h8x&sw7iYG)wW_g3&6fVf&2/Og_'O?#;;XHXhv~^g' IW GiwWןg&vvfBs'?__/sK ;+k::V (Ș(f7gi  iW)G_# +~6F6~~2jK{???_'o:RJ2RrV8hVh(n^zgg)iw yw闷W׿'/k.FFF6&^+;#co/_[{s 2brR/(^VhhFZoi i7O3Z" +F^6rZjOO/;Zn2NffffoWW))W7gS[:rff&&&&> +K;#c?SC{K :B222.^&&~RjO_7wwG'_{kb~^N.rr{ccۛ*:ڢ2rB2BnξNRz*Ïg_S+n.."k3O#(Ww Ÿo:ڢξ~f&&6&fʢ*7WGOkNB.rzzj3cj{S:r{{ +J +nZkZJb&Fv(f.J_) I77/*jJ.>^~^&~n +2ۻO3*3+J+J"kbbJۋkVv^f_W)y )))G .^>f^ۺZ??o3c k.bR*Jz+ֈhHH(F"WWiIYiJ>~&6^& +cSg_?'K*Z;K#H(ǷyYYIIiǿ~^&֖#g_oSkjK +k;6(vhH(({'Gi99ɹIG?CjBBf^&h&&&)gsg Wcg'gg`X`p@X`()!9 +FvvZ[cN##JC_ϟ''g_W)0h_Y!11HVV(6&/+33'?. +k;__O'7_G'IKl^W1!_z6HF +s+*''2ǢoRCŸ{S),R2PpH+&I!A9)ϗW(HVF^vNR[BRg[&o.'_S3Ocsf,θ`Vwi!!I1i/~VgFh^nr.&oVIh7iri?ORVh `hX.>7W !Y! Io&6梎 +bFNǞF/^zǷ/g7G':WȀظ'yiyYwWbC*6v^2~:(;&7:r/ O)?g'gg&VX0^hoyaIWiZvN֞RS[?ﲺ.6^9Wi r^^6n&&.3o'GW)S3nn&.Z3Sϟg'gG'gg?_P8Yy1Aa!IbBH6(N~77gCJ/.Fh6n&'3 ''hעx &))* ZV>fsRn&z;'')Wח"cGgSJ +*O|lg`py!-1Yٱg:(G W +hHV8&3*'iwh37G77"^vV~N&J +:oS/OOVF8&g) YywwshVfORi73{r_s_'B:7Gח'W!l$VP<xm!!*@.)wI +hh؀Xh2jWIIi wF+s_#S?r\ ȰPQ7a--9 +#H^ +k׷77N@x^i z~ƖNS'w7Gg7V̌p 8DZ1(h^Gi >>6N i׷OO>.bJ3{CgCpHhFwYy!቟ΚfS3oOkhV."N"''[33k[*{;+jj okƘ` 8(yI9ig;R2 +˚r>oˎ&N.>N +* +:koSs3#{k k +zo#B(((VV&/)9)W i?Sjz2jS^f&r2N~.2z* jSó#[;{" +krNfhȈVvv6kG )WiϏjkZn>>rrΞnJ: +Ccc#s/#+˻c+z‚ +JrNVvn/gGGG_?33[ +Z2b.nR2"z +K Cۃck ++zں Kk"rRfVFRzcg7G'oS +J.RRR.2rB" +:k ;K{CCKb{K#˺.66rbO'ggoz R2 +jk{[3 j[[j>&&vh(>[wGǷ7OJBZ+JbRZJ+ +z*jZ##J*RR{ +#3#Cs{ZVxFfjIyyi)W +sZ2~3RRKoʣS 3b.NB¢'?/O[ L`hr-A!NBF72fvn_?W[kN֖~K)i)W'S Dg9QMa!Ya'hVaiF {yyYoFzH8?s)id``)q=mIYA`>hA`踀p`w!)YY.HkiWO'9OLĬ@`1Mqٖ08HaIi1HxHh@(WYa9O~vvZo)Wi_O/J3LV0i 8X(f9iI!q6v K)IG)hN{ Ww9 S@,na1i!Mn0N:iA9)FXX `99yYY)Sj+((3WI f<|l1Y -)_vp^haV 0`8{wi!9_OS^Ɔ.G)) 9Iz;<,(G)Igf`X .Ή!!ayg6H`V&i99jV(iIYWhP"L0FY b``B)aaArfȰ(&'9! GVR7i'Lzp

ڗ9kj.&s{g7)rls0SoVq9Abx`hfg9wbR*[W9)[&?'gPF@r{(B/!YYw&.&vNC˛2:nksooo?X8ȀHfw9IAayYIW>(FR^Σg'So_S[/o___'ȀXp8H3W9ɱ1aYYi3S*F(6VFosSgc'goOK g/_svpH؈fiy91!! ?jFhVho' O'?_oCK''?sG>Hhx8kיiWaYYgZ3;Fh֖Vf +#jgwgg;Zs3s_/'X`0o)IAa9R"~(F^z.ÇO'gGGOj so3OϿOzX@0(WYyIAI7Zz^Fv(K"Kg_C?{sk23oC'88 `0`hVY !A!9 2~n&h(6(hV:sK__)b:KZZr_WgoOspp؂sqAI&6^V`hj>)9jWFNFn?sO7Ss/C'SrlHpaaO-Q1W9€b[Y_7W~V(V''GJ.fnS/_oh X`^Y)A)oG(bRyv>~O''_ʲR" ++c{;ʆxȶo)Wwi G_[f~nnNrkk +:[/cJZ*c#*: +;Kz2"j +:k{{{[{Jrff&ff&2*O'ggg_ zRN&fΎ.*[{s/Soc[k +knnnΞ^^^^^{o_'c+.>~>"BB" + K[c#{[Kk+Zb~>>n +#og''_os;Zzrr¢rrB22BZB*k{ + ;kjzzrRRR2:+ [oOSsC##{;jz"ZbBB2rr2bbz*{;;+*ʺڢښJJ;{#c/ssS/SsCjZrrR2rRb +jj˻kj +ʊ*kóCsSSs3/S3C[kK;J2‚rn.R.r"ZJ + +J + ;{;kJJ + +(:ׇg +2iw?sNvv^>Frjz"; +r>Rzb +3 +* ʋ;#/Oos˺z²Brbnbr^RN.+jJ"z"K3c;///_' ;K""..ZJBRnRRn2r2kRH~痹aɷǺ6 8? W瑱O'GXHhvg77_ ,Ȏw1q8X h9wyYI(#_WIy  +FV^LJwW@ 0q_6F6Xx^WY)8v('_w9y;>o'GJ`HWAaYWV&@6KWO_ai(9 +r&;Oo7n0@`@@v!a!q-agrNXKwY9GsNHVf* 79iI)N[J3Ÿ_)/l8`!Y1;/^ *fay+^Hz77G NBgz l8 w!a17o{F@.nb''hF^ 鹉G'c.>2Z*3H쬘 X3!s& &ryg/Svxh^ZWWiW:J3X0[ YoR# YgH&^vϹ WI۲#ZfRSoo^@80i!-aoϟ^xn2_Y C:6~Zr*w)W_g*.~JBs?SF`0xg!aa ?nf`8f?iNFF>.[7))7z>22c2xHi!1AyW#c^κj*7/*((fnZSg'__2Z + +jjʾXh(JgIWI!ISc;rc#" s*CC o/s*or2;Oz2>2f+rRj37?w/ +zr"ZjB3kڎ22>K. +jkkj +JRZjbZcJn+ڢ kKOo3oo[sS[j/Z{#2{RRrKJ +zS z#oʢbskJk*ۻڳkk +{KbkjKnrz*b{z zJ;;;#JbJzzKB";;J{#C +#KJCjR z"JKJ;;Z"j+c*Cڛ*ZB kZ* J".JS kzKz[:;+zz +k [J+ʎ#zZ[ R+B*+³S*ZK {z+ +k+RKKKJcZRsk*k;:K kK;jzz:j{2ZJ +zK**J +[C C{Jj3sJ*s*zB {[C#[["kk>#sJJ C/[kK3[* :"{[k[ۊ:*+ʛ2o +{ZR;۲Bb3k[ +:J#/3brkZ*#+s.S#BkB "jcJ+Nkn.K.r;Kkjbn .C{Kb+[:r*2CB/+z㣋';rh_ǢRrJZ*&j?+K?3K+c_s2;3>[c#"j?{2S2_ +NZo?:~r3{3#b N>#[3{r.CkS/*2RN3/bv~O r/+[CBz/ ++Z;zKK..k2Kn{OS3>R+sz#{+Kc3{z:ڢs/2>;s[{zjc 22jk+z[S+;;jۣsKzj[ +J[KZz +r"3+.r [ËJkKjJjk +c#ʊJj*zJ bj{2:ڲR2*jZzsOOo?Os3/3ks/[3N8Llvw-Q!G2wKHHvS9!YW6&&&./)_3˂{jCgwwWjlL$fmmA'FO' x aAY +(~h2g[>N//s3g7'GGiQm&X#1Ayc&6V&~V(N3GiW##'_gח L  1q:bOB6@`ّ9sF>>Xky)Kno_czj'_'GgGV |L'A-i7#ɇ&`Fiaq19WB3V)Y)֖V ?C>/ןO3{swWWj7) 7G#fVhVv&IiWk/ +s/JP(^g !!G)gv&"+3g'?.^6V(ns';S{ZBr+s#?`6f+ٙ)iin +k2/O*nRB^FvVFNC'3SO/Sosc{b"z: NV&NWWw_s/S3ZJ#*.^ŽΞ~>2.ۊϏS_[#b::"R"z2>VV6^&&n'77GgsSO.rkknN~^bKˣCC'O*Kz;{z+{*fV6&>:/Gw7G_3cBjK +f."j[{S#_#{"Skr;{˳ +;oHH(FFiW)W)KS#*jj;kb>F6>zcs?OSoO3so#/sã;` V*9i)I)CR/O"_kNF(Hh"_gO___og7g쐐`hVX)!yYfFO?/*bWRF HZ)w緿S?iWl|`` Ywى_v.kWwY&6VHvvɉ:'׉WgS)wĽXV aq79Sv9WWi9!YZvȸXF6^)_[{G_/_G,8 vAGiþhGW9IFNxf&Vx: +)ךw_7?o_ss?/8XH6i特IijSG'Ow_gOjjRNV6v&.S3+_'_7_'?s"`H`@7K)yIIiW'_㊋>(8VhRWwWwg'gO/SKX HXH@v~g/[ IYiIi) ?^F[?OW7_O/S*`x`V6/'׹9!IW 7_22VVV&&3Gw''?OS3rȀx8`(3"9I!WI) g'g"Bf&(V(*kC__7ww'?OS`X`H`o7I Iy)i 7g_3žN興Vh^fR{3g_ww_g_?ooj`x`X`V6?wY9Wi)iG'_Z>(hhVV>{G7Gg'ggg?ooo2vXxXff7IY iiw)W'{hh*+7GLJggg_?W@,X(# aAGrG!?9a92xV&(^6Wɷ#O'7Ww) ׷g/sO,Dl(QAY@^aY!aax"#S'G'ȀȖI9i[ gg/?) wjj"hLļy.w 0-с')H XIi{nFx W׉'O>~o/_).2h(HHCi>>ۃoK?'7Kj<=- 8?'0m-'(RV8 n(Hhhr#7)GN+ˏOooW2r60$MAo^)mQ!hK26S!FxVV^cOS?g/siJ2&vMQs_@6mq_(֞BH(!HV!rfO'S_)7s2>FXQQN~2768n;KB.v +OG_oVhh6z/wG[*C{['s +;22s/vNg7'w[gg'g/sRb2f(~j??s/'_'sCO_翏sJF(V88^+3CiIW)wS"n>(f&fns'_7_oO__o/Hfσ)WI9WiwwgSs3*.vvvƆ&nR+o_Oo/oXh`8&/3wi9iwwGg'{BR>V(v&&{'?g7gosSv8h8` +? ɉiחS[bR~(V6f^>R/''?3#J>踸8 (3'O)I )w7G'C n~VF^>^:SOs;[KrxxHx`X&'iIIyɉ"n>V(֖V6F6nr +o'_gwwG_?.x8Hxv/III 7go;.>fFvFFf3?_'_w?_OsK.88XH&_׹YIW73[bNvvV(֖f:/_77g_???Ckk k&xHhH8xh^.gGW9yi7g*&F(V(6&&.''_7w?ϟs+jR> `hV'11WI^#w j3G"`6>JGi'gZr))_/;J&, )A--vHNH{I1y_?) +8^Fg9as#g'Ɩoi /kv0HIGqV`x/IၹڀH)3_)kFN')go׃NBR866G y #O1كZ &~w9Wgzr[b>RWw'wicJJRF| ٱ7AohVH"Iiyyg^8 ^~2Z)!77sf6>"R+iiw7'Rx|0xw1QAᗗ_v^zSi s8b7gI)3>rv¿G'oV2P!I*N8_Gs?gf^FVngGwG ++r#K3{sS&P,0(V8HaA/IvRfh^^& +bRˢ +k soo?CS[[J^@`G,`؈2CIaI ZC>ֶ6/.g.#jS/S"/k{+j+~^G0@ cGyWaaI3jZf斎&nn/3/_?3?;K CCK#k2&0V(3!)aaIɉGj^&6 +>Go_/#CK*S +ckj>@^H ((nC)Yṹ s.VF(fn~?^SSO?S3;;j +k+^Fp`Hy 9 9((^b+3vJN3{g'7oJ/sskfଢlx`^!ᑁA_if6&(6~&o c&2?F_g377g_7g'3Kszk>8Vl8VYyWaqaaYG((nhh΋ZLJ"(H6>&>[Cg׷wokr{#O#?bx(,,3ֈYq!W&V~X2G'7H`H8.cgG ii)KO^r 3S//Xhlo)Aq1AK2((vJ) ) /.&@HHi W 9'r^3)W'ii&laqqAIy'hh /'ig^8Xxxxw)Y7Go~n~_w".(L`FiIAyx(W99>&xi w9y_>Jn.g_jbrvLhYZ8`~RvNGiYayWvXG))7Z+ s_7g/X|mm))GoX`R_g!;r&XxFNy׳z z&nkg?ogG3ZbKl@; qmWixꇹG#G 72hf8x_WW:2Os''ϻObF~j_`n7?1AaiGɗ&")?/CWFFv6h&C3.o2Z3Z?''/JzRZ6~;KZ'pvos~ɹio)w/n#Zr3+>&?Bcb:Z+znjCSZRNbBZ"z{z: oSk^f;osjgsS?_:cs_;+[ +Rj/~~>K/nRns>.Rb 3>'j*NS's:OC"B/ns.scZ^^bzJ3s2CJf* + C2" >+rkKCbr+bS?N/{>n /n3ZR"Sj*rΚK* {:zjCo/Z[:;nFS{R";f.;ssnS*[zKk3? zc*j + +k" K{{:zJ*j*:: + ;nJjʢ#z+z +* J[K{32Cs>Js os.Zrs ++*B*JK*jKK{ {;J++j+k +JJ +*k K*:*{[ +k +jJ + +j*kk* + +kk + +j**k*j+*** +kkkK+* ;+ +**K+jk++ j*+: +JkK k*j* *j*k+:K** *+k+j++kjk;Kjjj+z+k;K +k k:z*+:j *k;: +K *jJ;j +kk*kkj: + +kK*J++*+*j+ +K: ++j +kkjk j* *+;+:*j+jKkzz * + +ˊkꊊ˛{z +k k+++{+ +* +k +JJ +k+ʊkz*K +k[kj*+kj +j*;+:+JJK;K:z +*{{j;;K[*j*Jkj +Z+~YO'(jofz#n‚X9sf'JKoˎ.bOz{2Zjnk>.*C//s*2jkBbb:[;2.B^^n2NFbJiWo_'g'//SϏg^lt,F !)Xx)A!!wxX((HxR8h^ɹ_23/Ki)$hYבMqi0&vhR Qy '7zc)W6xx(Vn)IG//Go+jKS G cr_?Q!'iQGp./!-y +^HY/よΛ'Y'R:b??OWW'rsdmgaQ逬 O?YwV^~F&)((`x I?N"C_S_'+g$l-Qىa.቉a6XȲ??)?VV^8S'k^jGGCCs{o'> La'ذH!I8[W ?b8rg3G/;rR"_'kk+_gh$,VQ KG00IS v!GsHVb7_#H`#)^>Z/w NgˢCgzd|Oq&_ `@&-O?xa(^h>)8V "KK?Ko'_2΂G7Oc+/L0) q7fO>.XYfgSxyIO(h.&Vh&WgƀiIFgsgB*scn70 Z @QGFK;HNi!^(&v6G)`0Y Vf?¿obN&NgjL옱 mR~zW0`'-QhfXفyHɗ:6V.C99?b&ΏOs[2:jZg:R:;X`Y/2~zꉹy.NfB'wbF^Nn^^f'Yifhfg~s;G#&*z6X@lVa"'K:jYyOZ'^(xz N"vw?N^~*w_B'CR"OσJʊ(8xkwiiWBn>+'W)W>^ZKS{bZfVC)^>/oj'R~z[CKZ[/K&VH,@?/{BhHH !ayG/&V8)w +n:2(hg;C_/jfN)_ +B?.ZJSC:r*OSZJ&(H6nZ+gO"㟇_2+{K+Ά^^C/Z{zj[ B* ##j/ϳ>(0 xw!gW7ٙ)ikxH^[skv~bJ 8r9B~zrO2. o'ϋ&hHJ#)7O* +3?oǷGK2JnJrR..JsO_3;+ˋ3ϿRJv HwY!Iy ;G?i>r.R2(V~bK#O_'OoK//o 2JCS2:;RKڲZp7 9Isz##w2;r>~#s/:Bs3;{ۣKz22B2bZ{Z( 0*?)GOgS*C/sCR&./[jj ":j[#K:jz+j"2 +{RHV3JK/G''g+c#c;R2z2zzbZjJJ + +J*jr:; jz:*zb +rR~z[S{ϿsooOO/3C#K+ +:# + +:Bjzrrk:"BKjZjkjkK: #K Kkj{#ˋ*kj*k ˻K*kk*:j+ʚJ +::J+ j:J *+k* ++k*k+;++k+Kk+k +*kk*+*jkk +kkkJjjjJJj jk*+;kKkj++*k *++k k+jkk+{* +kfVW??& :.Bj;۲˻ +k +z;j(krc˞JC.ck*.o;>ss[.sF;~N +Nb;Kk:Isb_nSF +3^3/nb.jBJ"Sr&S ;22onCnjBoOnS+ڛ_32 +./23{ڃrCr32#~BS*3K #sJ+*ۺ* ;jr KKZۊ"Z:+:J ::{Kb{{; + +;ZzK*3Ckb*k.bjۛ* +r:K;z"JsJ:ZK*;*˻ +rzz+k#zk +[;J:kJ{:*˻ + J{*jkjJ*ˋ +Jz + +*j"[k:J ꋋ+jjJz*{ +J j"kKJzk k k +j*+K+J*jk K*K닊:+K kk:j+ kzk*+ + ++jjk *kj +K*j K+:++ +J +;k* *J****++Jjk+k*+ *j *Jj +* kk+Jjkk+kkjjj*+* ++k++ *k*ꋋk+ +*kk*j*K;kjj+k+*jꊊ***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_american/cause_3f_loop.isdn b/tones_american/cause_3f_loop.isdn new file mode 100644 index 0000000..b33173a --- /dev/null +++ b/tones_american/cause_3f_loop.isdn @@ -0,0 +1,154 @@ +*d}EьDH$]a3^?wn2/CbjC_綟;nWg[&.rz#3onG#r^6ZF ƞK.w#n#NzG77"NǷhO#;">oON2[+^?nv >[2zH&h֞&VGGk; .Nv۷b?O_>W SW^ϛ;kVr~~;ˆv&_g'BrSWg׳^石3>R6f'^"7Cwv^?2.+?Fnw"'΂f&'_SoF'ZR+ +Z2+^g&'goCN::)Bg HYH27Rr'o?V(i3ַCWR^yI#VfƳiggzV)G(GNNa~+;xdžv+)' OrKFg>Oow.)'&kַ'6s8_brr iƋ(NHV+(I(J++fHiFwf_6)'sSV;i6J)#zGyWN/__wNjs +zvWF; gK&i_WZs[7/[vWB3gr's> /i>N.j>sj&.#^&gn3*v +Nf {_&j"RsFS2N6^&+JOO;sK'&Wz +)o/on)SR7/r?+B*_ +C 8W) yI)/K> +[_g'ss##bKR&ks;GyG,1-AA ~^{)_^;F"7rg)NoW !(܌(螁-I9! WhK 9);"vvG['ss;Oϛ7)WWI$l~a)vGw!V^ׇ7ֶjOIBdLэ1c&6i)Y9 HiYgsk(j ϷiioGЄ|< Wqv((Vy Iw)S "ևw!W>2~FfJɹ_/w)'Ldləy!qa88> KgaחW;_F`Hn9ofn{99Sk)aa)C-ض.`w qy:^ȀVf7^I)&V&΂sr#WiS_Sg?b2d6a?Q؀&j)q9S` jgGy (&nB WOϺoW!)1QVhX&QA>nK8)7''&[zCG) 3sO/O| !!-!`8R_);zN Sww?6(./J2iSwܤpa1Hnh 7a /+R0`'ɟWWVrC~oWWowiLay[g vxv&`HY)@@ W G)Z6^2Z&{_W)''׉̼8jb!1mY֖Z`H WiV V3?"[3 +._i,l,vcfWّ!I'?xx8zGighV>2 Z?__ +zNJ +?Gi#0@^FHʗ7wk' B.f.Jz;#O+2"JocKsGWX`NF^a ''w˚" Zà +>ZⲚnZ# zzcso c3O_{VXV&(hSI);g7/{'?k:j3oR">>nR +{Cjb:C{cO#3gvG+#GGo33RZb.Os:zcO_O^h8V&n^6?w#S7 +Sϟo3Z.J[cnn /K*+/cKz/s?`x~V9)ˏGkk_7zrFkJk.jcO#3*csWl,Px:XBqGGyiHi{3χ^zGφ2J7g_Oog'_?ao$|lw~X1M#9wpFyr!َ f?8)n{)7Oko":'i9<089QY*!!spVW8(!ai((f&(8cN W3^K_{>K7G9L R@m!!H(oIƆwG F+77BϢR^.s_׋@֖ 1 WaᙗBƎ^(;s +:ׇn/ +.Jo3.R+(J3v(&wWg'W )'3CZ;rZBON>{NfsvWg +fJ(F^ZcWGZ.#+*kRCkSBO_O&bsrC>*f+fc." +r.J3J_cC{C'/sjG.?JcZC^/F?.KfR)>(+S:nzG[2sÏc_.:'JO>sj&'_G3J> C{NRBRn2&&[&ʛzr2"#/N7R^7sG&ncv'c3hn~&'nc>oK^cϣ[;/^fs/*wo6_b:^_N_2wN^»7nǛb&o3RbkCocBO/s&'V^bʞ>S7c⚛{>[zSOrK_ssg.Zzc;2b2 +&S^"R_f'j[/7&oJ&*R"JfnS:3O+rSS'[ sn+^JZSBJf.n2fkr /sC?O'3 +nrK;j{S[KˊS*3#[*#:H8>NJ/#׉'Oo[&K[_K:2BrRںkK [K* +z2+++c*:++* +k jJ jJ***ʺk; ;K* j* +jK + +j* *ʊkk++Kˋ+k+jk*ʊK++kJS3Ï?c3K3 +2"J +B6&RS'7G_?ORnr2+z{o''g'O/;*RRbf88js#7 IWBRN""?GwgZ2.r^^B{O;*NFc_srjjS 0XH۳)i Io&v>GwgחcV(Vf{#cs{SSnfoSó/z.N [ (>WsjK"rC/cs"0 f釷7&vhF'I#ZrnfRGf&rBn^C7wg3__Ͽ/ #",,0xy^VFBcy8fRjgw(֎CG_;J>hyyI;螋cso#j:[[22NHذ VGa>[[z[799韾hF3_32Rn2(V? i_rsg?3;# +.^fAIfV^zgiٹx +GbN&xHˇy9i~N:'GLJ˃ + +N~0,,@8GY1*OGiy7"8F:7W7x`xh׹ 22/GG?o{ +;x ,01q)n興;GI!a9g NWCx`IW#ngOsB +??G) ܜly -HOg9YW^ V3 9w~hHHCI9n'gKϿ7iP_qap0X'Y)FNFƆh6aif;gW'''/痉_:Fh(ɉ WOjv/* nJ"bnNvFSw ۻ#sO3#jRb"k[KKK ;;/SsϿ@_Ai{FVV{n_)y99GjV8iׇR^n&f2S)G+֖ +s_o/S3^FFog~> + +? +Nnڛ/oK +B23okb2*c3 +JZZ薈OYy9+6VJgg_#3~ 8o9n(&/_ۏin(86rwsbF&&~R>^^>+OǟR&g'S[j:zn>+s~&&:[Jr&r_7Kk/Osc3h00XaQnx ȲS)Gy ף xZ y'n^ WWs({)O +n&~.Z3g;>6>J/__o29'.F(2gg2^bOo?8`^w!S> '36((:w/&"'_?oo/).L(M==Qج,9I{x)AQIʘ``h 뛏w NhW!fH'kC>n +/ zz* *zB + +Z"zJz˛ z ssCÃ3/oosK+*j; *k+2b+Ͽl1m ~`@@Rg9i G'&h `x6 InSggˊ+*k+*C[*2 +`@"y!W2hKO7W))7vH~sc/?_rZos/sK#:2 #k/,vaQQ1 &Kw9i7;興(f{yi"^ns¾NR{33S3{KKv~2g_gg+""bRNff^;s/So/SCC{jB2bZ:Z²2š+;+k;C j:c33ãkʚz":j*+ + +:++jj [+*j+:z:::j***+*kKˋzzJ*K{*kk*kkk+*+* +jKKk +"b +*K;**k +k+*++kk+*+ +j+kkj{KꊊJjk K* +j +*kjjKK*J +++*k **+ +j + + ++ ;K+:jK; :ZJ{{Kj+kk*j +kˋ ++* +*+j:j; jjkJ::KKKJ ++K;*JJ+; +* + +jk+kKKk+jj +jˋk**kjJ:z+{K+ +Jk ˋ+jj*+k* +J +jK +:jꊊ**+j+kkkjʊ*kk kʊ* Kj + ++*kkk*j ++kkJ ++k*j +j+ k**j++kk+**+ +**j*+k+**++j +k +ʊ**J {K*.27>bzR"{Ksk k+ +j k* k:jKZN#z{ckz[Jjk +ʺK; +jk;kjkk*Jjkk +j* +*+**kk+j +j++k*jii{hV)>w^? [h6!)y)&^f3F3'fcz"6O~fږwK>曺fG)3r//o.;W^*~F+C&s^nGf2sv&R.2&FO'2/&W .FNGF~ŠFsfVS˷_s:#hW? gVH))w6ix+H,אWYbV 7q0hag +rXz8~^NHVK&(H{7)`C_hf2KV +FZsG7sb62'FRCfNC(9ؙOgf+g^G·H_nhq8;Vwa')^jKGIyʘFن98hs>C3FN'[!Rfj!Rٛ +7h)ZY.(O_2rʶ?v?n6'6G[7V6('? + +ihh6N*_ʎg9)?&ƿfI/6φ2O^C_F~b[^+V!X _WHwJJF W& V  Ə>N9VRn#ږ&G2{jS7G" +('WN)&Yvho3FWX)8OI/S?j_/[.'^8"v& 2o fR2o>z'.&n rfڞ./#JO#Oj/_Jck.nʻ2.z:"B+ ںZ;~vv&.S?;?WGwGG_OC3r.bjP06hhX@~{gyIG)'goOg;.FHhh./Gw77LJGG_7G pH`6^WSa!Iwɗ)g)oNhHH 'WwGW)WИ^h:I9 G gNfNFF&/g_7WiiI@0h@V_W)YigW!9iI9 K6xxhK'w7)WWWi)W WX8@(`,^2oBGI)W_wW)Iig&nHh(VR+C'wW7Ƿ7G/3SJ(H8H 8V^Z"'gWW)w)WWw'3Bf6v(FR#_gǷGGgOS>Fh(VR +K/w7ozJ:B2bnS'7n~+`i.w>JWi)_g)sF(VN++^?G'n7_*:fF>^R'O +R'':RK3rNjn~κN2[S[3"3/ +"jCrc#;"jbB*j +"r*:2bZzksϿCsSSs˺":jrN>fvvƆ:7?{joᅬ/o' +/??Sk;kR>n^H``[)RB9采Zsn^(hJ{zs_7'C˃/+r)F"&7!_Vx6OI*&wH#w/^6BCsJ~Nb?'_VlMPׁIG)60Ayxb!Y>h")iڎ^(NGGfR +?o3_+s' +z@ xA`WW>jWax2NSjFhVw>((F" +~['w_Sj + +3/cnrʢ:2ʛ"bK"rBJj~#3?___'3~wZZ"'G +ye=:hxQf'(/yH@h> F7n G*GZ&F¿GckYyDlyMXaVFmmwH9׆>~I" 8R*>y)Z(w_Cg>n[Bz KǁW$ a=ѱhٹlǁ (VWGXƷֈ*[fh^6()!_So&wWscoC+{7h0-I) Y/WYqsW!:gS^bb(Ȗ(C'k'j^?[sJKKf`x:(fHbR^WϗWǃww.R;*kV&fF6JO?3r*ǟ;£g#_s3*C+vHHoOoi9W_I)s3g{B:ϳ:v(~hxz2RGoO_?gggO#gSS؀VF H@~jOG ig_gWKS_fF袳&+W _go_g/S8`8X&s9))ii'wwo O+&HvfNCs__og'_?oo?H(ظ&W) 7[/s&.Fv(((ÿ+cgO?'g`(` @xJ:ƃ_!W7Oig"7/'i~ GׇSW j2#:Wi7'W)윐0+ 00-f'1VXqFAY`h`W yf _v2I:W鷻W'ow($0? ->y1I8!A‰`V:xFۆwF"_B oG' +/j+g|P8AAy! f(^9'_hv((8HOg)cKb:óC3OOs_ HW7y7#_SRSZ3Z&6&fF/?+SOoc?/[3cK C#3Sָ(://) )777{##33k2z2"rfFFf.*z#/S/ ;cKB3Nvxh6((V^ +sG i)GGgo3#>R&^rNf~" j+O?o?Ss#j 2j +b2V(Ff6>G)W)wgcj*[^^~.^>rr" +sc3s3{Kk[KJJ +bbBR.F&bjS_'_Gg/‚"2>>n22 :j;+;#++{# + + *B +j.2r.&NZ+s'_g'/{[#Z2b2nrⲲRBbk";#;+{ۚck²:r.ξfN+_LJ''Ck#rzBRJrʢzN+*b +kK+;z3K&fFhvF"3)7O3꛻ .bJJzn+ +j:2+JkK/s ++7n p` Y!1qa."s'So+nF^ʣKK2 +gwg7WG `\(9Ym'Gg``Fhya! yhh8xXV2#g ywF&f;) Wi7wX0wYa퍱_^V`ViىyaInx@8f{ !Y)鏆v&((['iyɗG'llya!m!)xx`Y)hX7WG!!9?ۣOf(FNW))i_o3l܎ (!YWyz @VSg;gqWII ^HH Hr/IɷF^W)W)w'?*`ll6#QmaAYVh`PxhAIGs~ `XXh'W! W)Wn^~FV^Z7Ww)0lPhIioǎV`(")aY9 v(HV֏Wǹy LJ.&&fc7W)vw̌'8aљ)Q!_(8h(湉Iə!Fx8x8"&"WS&R# +'gGG/iP,(ga1iya~ Ȗ I)_Fh(kWg_c".NN>##`,p`hh3AA!x(2 iy)wVVf_7WWor&r~~²sO(,X(h_qq ~ֈ8vh&_S7鉟iWk+S66{_w'jB:RJNV8p`NA9 wVffhKB&_G#{6.r>B/Og[{*"ڲZ;[{K+r>VH(Vv2Wi) yS[:Ξ^Vfr~?3 +jk+ +6v`rڶ2i9Ya3BB&.f&Fn:So??G?g#3"K[z*{"f8 h`Xf)IYaGwfB^^N&&hvžf{#wLJ'7SCoo{ ۃⲎ& H0 `6okgWY WoG_~~憚fvF.fnb.{_r_iw7Zsj*~b xi_n#VNf0@3nhr!93 9b'~goN_j'RH,@X!YA1g^(hFNk+swwSj&V{OO_OOsˋ:jk*+ +jk*jbnFFVV(Vnr*S?W)))ii?r>&v֖Ɔ^>/'GGo.^f(v(V(r3i ɉiiwG_n~fFVFwG)oo +NξN^>&vvv>[OGWiW)Gs3C.FvvF>NڛS?'ǷG_okz"rRNξN>~[/ǷwWW7GgS^^fƶ6Ɔ&f>j3O__?{{3 jZrrRRrRn>>NRb: [ogGGg''3 ">^&f&r+3///o/33;㛋*jJzzZ"2nξNnB +o?g'_s# n>~NRZkk{##c +j:ZbZ"2r2BrZ') i)W7Kh(h&;3sJ +KRG_ǷsK2nnrjBRHhȈ2 yyy/R^rr_+Jk~{_'"2z +:"Kח'jcV P܌V)W?-mFfV0Xv I?H 8vhv)YYɿ>^vgyI7CVVBj{)ws&x0|P y9-YHhV f7!YWZh@R:2陙iC8&:!9[_?bVp VY!فqႸ8VvיYWgC`Ȟ+sK9WFhZ.{S)yI73 Kr^^/O__{.(lH1!>(66VFi9A_ch`j?IGb8F(3ǿW)+ˋ*'w{#FV(888 8'!9/6h&Z9ىgz&xH־3 _7'^Xv__#))o:/S &&3 OS/.&6(8@sIAAg&79w86"G8^OOחkO^Bos"ZK/&^^h8X ^YaI/NF7OOۊffv^k;Og7_J+jcS3OO/ +KJZR‚Rn2r~80iw9an"(&KO)77's>((v^RoO糢j/zz*2RB*. + +b(6g 鉉yO3R;k΢SO׷Z^V&f +3ۛ +nzS/+jZ"z+zR.rJJr2rBrrz* 8hw_9 jojBۃ +Z.^^RR;zڢjrRzjJJ:2ʋzNb:Jb3ck[;BϟOo#S3+.{s*{.RBZ.Rk +‚: K*BRzbZZk*Z"JZ +{jjjkj +CsS/o/s#;; Kk* + +JڢB2rrbZZZb""JBZB +"ʊˋ++{[k+ {{*k + K[;j ++J +* {*JJz:z:ZBښ"j+ z: + + ++˻k KK{ˋ*;{;KKj+j*+k+k+*+*+:ʺJJ; JjjkjJzzJ + +k +j+*kʺj +J*K{ˋKk++ +jj*kkK +ʺj+Kk +*k:kkj*++*j +***ʺ +jkKk*+k *k+++*k+ʊ**k* ;k+*** + + +++*jˋ+j +***k +j+k+jʚ*K * +jkjkk+jj +*K; + +j+jJ************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_american/cause_41_loop.isdn b/tones_american/cause_41_loop.isdn new file mode 100644 index 0000000..f5ff2fd --- /dev/null +++ b/tones_american/cause_41_loop.isdn @@ -0,0 +1,231 @@ +*d}EьDH$]aJB^SR**^c2Rk.:^b{+*;7W׉i7'jb^RNnvl6x׻!1!ag^vxhHvffB>c_'G /??gogflZH^9yAAYW''N8&(nCϟgO+C/*Og_7'_ {f1qY'&^x6(.7g[ocsJJK3'?'GP,!P,Npa1qI׏.H&HOZ~7'_[S:JBsg?G77 pGSw!A KhȈNHwj_g'KsZ*Kۇgg'|*북A!-ɟiָ"SiǷ'~RN{Ogg??_ @pl0()+AqɹG>F*h)IOSiW&Fb;nS'Gkkk `3o A1q)a8>hO/ G ?3>ˎC?_{23?P iYAىs F&hZi_  k'/3_WdzsOKXX8P緁)Q9Gzox +~2)#2njR:/?oK:LXVxnwq1YaiVnxv[ k_wF*fw'Wign./3lX(pSAaq(X8{I9W iǾhV.Sn6gKW/ff"g<̰88Qq!)!AG VHȳIY^)28H'ZiW+'7_w8L.hhwqQaW( z(hفnV>W;xF_Oj2')isg/&SW_|V8H>y'Ya>X*~V&wa2wxXV#7j?I7{^6W)PV Hrm- WVo>91F`G *9Y9?&Ss^ \֗*M ).iٟ 0^AqAXȺ.xK)o3!Yh6b_On^_ydhh`R}!H['Y_`xa'7y)h +/R˷yD xݍ oGx,l99AAifp_1A9 'i+NyaIWg7 NGw 9`(flP A9)9 xr1I&#gH8OCy9W.Nl< Z1X 1wY!c0@+#Ⱦyi~:6Z)9_'Ng (&^0a97a9`@H{8Iy'֎3+#w;s{*WdlhH) !`&z_(&h)2jS^kj SOOc '@lyH09љ2qi`+vYI*OyS(xF'^vF;VKR~ "2(&F/3G)woz/LJ2ˣ +Ok~&NJ.SC.+"2Crs. +s#ZR.#*;{+bZJ{[r2 /os#3o# j2 Cb +Jkr +"kZb[{JBzc+{*+ +ڢbK [;*/3J*r. ;koCۺ2k +*J**kj:J +Z +;C[kZB +Z#;K+K{:zJZ+ + ʲZcJ kJ ++bbz{;*k kZZ +{*J;cjK 2 #k+# +j+{k +#Z:{ +;;ۛJJ** +늊K#KZ*bKK +Zʣ+ ++*z+ kJ*+:ۛB{ Jz{#+{*j KK +z +:;:+#;j +KJ{ +j + JB6V'v.I&6z76_Z^Zonf~_+3z{3j#s+bCZ*:*s"2K:Kjz#:r/nN_jNko+2KkNB +Zk2+o [rB n[゚OONÊ""r"Zj" +o+*{s*J.z/nJo3J;/ +RSsoRr/.sKN3r^3^+/or*~3'c.B_?NZcjK+zS.vK.R O +{K+^{. S/*22zz+:" RCKz;SK[ZSr{K+[z;SJk*k;{*jCzskR&+Ã/#[2S2R*k*oJ#3j/[kS{*z˛+.N:˲n˳ +#;3"`xf>)ףg7i)W/'_'Ocz*+B2ZRf~J/wϼdLxvmc7_WryWN2֎2NJz/OS[oJ{l\ xQͱ{Vn r"I!)>~fVH!I/.W?hbWr+&2gld|x(͍!ih(7RRI"S{ζ(Vvn'i7soj..j"r~..JbR2J .>.:ۛ_'?/#{:ZbB.nN^RrN2Jr;cs?C[ScJz Rj +JbBZ*cSSo?/C[ +Z2":...r:"k{۳3[k+k*jj2Z*b* +*; {{K;[sscC Kښk:k +2B{kz c ZJ[jš;[kz {+ +K+z +J: [K**+ + jjzb JK* +J J+ +z+{J{늋:z:j*kK j: + +J+KjJ*{{ +Z +;c: ; +:k* +* * +;;k*;*kK+ZJ++ +kKK jz+{Kj++j*+* + +JJk + + + +zjKꚊKj:J;*::++*;J {k::jK* +* k**j* +{j* +J+j;k + k+j+ +k + +++J +**j*kjj****j***k jjj+j* k**k+j** +*+** ++**kKj+kk++kˋ* +j+kkJꋋ+j*k***+**jk +j*kk k*jkkk*j+k+j +kj +j++*j +j*k** +bH0!)*3n z( .i'&?6&; +'_/#krOs/s +r&rR73OC2"rZ +j2oRnko+:CzZ#{kj;ScK:*k""o;+j"Kk +*˳Jzz‚C;J#[3oz{o3K +#ú~NJr"B +NRJ+Z" Nr +N:Z*oO?'OSS/o?˛z// N:! 4yX=- ƹX&^ n!c6nG +hg^ni~^gGϗ,+(Q 2aXI HFWg(V"7iji..g9LJ6S?j$ܘF` +aͭ `69FGYokOwnvF~n~) [rjJ׏K>.Zsw,P2(!@k(.G~8Ζ)Nv& JBR?{*"׹7`*(aP`fVq)WFxHG +6Sgjֶ)S?w)O_ +j alwx3xa6Jyʈ'nXG>_'?'vkOZWG g磎'KKd$ x_! ، F`h7n__nkNs[soc'_SZSWɉ'x=39la39c+>V3 [f J+?o?g'n{s)yl(V-1~gl87^qV{&xFCV2RS^ +k'7rS[oWiL ͹zI B9C2CoSV/VS)w.&~˿RR"ێRϟLFh9aowiWwzs)ROfj3c&+bzB_z~C "*kB>#*N (6G3*[CZ:osK3z;:J: kc~" +Z.;Rn*nZ;nJgGg+[{k_?jr.&BZ+nJ^:+ +Z~3 +kj >#/soZBo33 cgnbSNkʋ& JZ:/*/JnCʾC*R2 'j +.k_B/3;S3gcsN۶oƂw +nR/ršKZ:".*~J[C/2z[_?&C{ڣ_"oNcS R{:.&z /k&?C;_/#r2or3; .'r&SNZ['orj&S:B3K>O.[JRzzoz*&J*CZZRg[rk*{+s/ZkDzs"^ SR +ﳿS3r:;+ + +B" +.ϣ^#~;JfC_nBÚˣ+2.r.*. +SoNK;Çk?;skbKC[{s//# #o#cF2n^Fzv&^~>&fb+sj+.*z/JSJJs2S /KCcz +CBFc:6[R{Rk>>f^r^+*[SS'O +n.rRr_ zCS_˚/3.B{F++^F&FN/gwGgoc3CZKoNO"2zrz.J3 +.?>Rھ^^fNf:2.[o'_''{?sS:{ZzzZΎ2ZN.{r{C k; k"z +rrRRnRR":+Ks3O/3KBbZBRBzJk++kkK +z:::"zںZzz +Jk c////oCc# j +JzJJ:z:* +ʺ:ZzzZ::::J:J+ +K +k **k**j +*k;[c3s3 +:z::j*j +*k*+ +*j +kkK+j+ k K{Kˋ *+k + + +zJ + +ʊ ++ +*jjjj+**+kk*ˋ* k *j ++****++*+*+*+k+*jk***j+*j**+*++++*k+j+***++++k+**j*+**++++**j***+k*++***++*++***************************************************************************************************************************.s7N'Fo[K'Ú_.sn2r++*Z[; +rKz:s +~3s[Sgwf.(foJֿW"[sSi~fihO^+XH &F &~2({7s/^^kK'j/f'f/ +sf[斏'('nzF3{C>{rnr[bs> +c[~ ?k뻿?Kr +>K>NR:R;&n/CJ./Bz _2c>C3C'n:3& +Rj[Z2{.:rgRgΟbǻ?o No'^#js*~2[ڛZ"ZjNۺCKs;s^O/n:#.SZzʎ;3.srJ?+k2;N[n[C⻚OwFJgƿ/f/bJs:{KnRk{γ +Z^~s?#Rs3Nr*.j b3;kۻ[[{3b#;b ++[JrKJ#RK+*SRC :+ KjB + z;32?jS?s?sS# + +RrBrkRBꂢ2;:jjr~h.Cg) )II )GG [²r22j 2znr.:^@&P( >V_Y79!!9/BR6FVֈΖsSO'_#_JrzXxvx(vVB aa wo r&^^~J+z/j?wVnr֞ff6Ff>['W)i))'_3S{ +n>~&&fv~2J +_OSOO/#"~Fv((֖v&ngW)i i)g3 +rr~&~rJ": kco/Oo>(8h"+sWW IWWWG R^^FvB.r{CO'__S3CKR(hH8h6Zc'i IɉWGg/j.^6֖F&N";O_''/sCZ.興8x6^"3gWɹ9I W7g'c +&vvVF^Š_''gooC#뚾hHxfΊG)III iWNfF(V(f&2zz_oOggg'_ó#+rVHH8xxNwI )GLJKf66vvVv>Bs''gg'_S{CHHhhxn>Y9IW)ǷC[+>vhVv(Fj^G)Ggg?,LlHxiqa)s^vf_97IfXvhV_WCibj/_7 7+ V Wqm-^'֎11Izo`h^2>js)I)_2NZ3ËS7w_)I'r^n,$h9Ag!qqb0*)isqqY(HN^h.'c/S'nSgg'?)K"k 8aGsc`p`9'!(x8~S?3/:^n3_OGwWW'3)LP?1鎹A@; o)A1 &&6HR +v83'rsξ'iK 'WGo':,Awr?[WA R~&*hȖR#&Sjr3OoRǷ?)w?/ <i ¸& #N)WSoW)HfS BZϻ_snr3_VpXvwJB!F)i{F[חϺnS7Nzb&vjkRK'^RÂC:Bj*JrJnB.rR +kRJ3[3//g33+23~j[:r:r&Kj2.[RZJjsoO?o/sCۋjb*ꢂz**zZ"b"b kjzj**{[2kK j*j +ۣ:z +jk +*;{kj* K늺Z +kj ++***k*j*kK :ʻ j:k++K +:z*;k*K[j*jj*j+k+*k+J +:kK k**j +*K;kj+ kj*+J"j+*:KkZzjK+*+*j ;kJ + +k*[w&'[cB/ +Rۻ2+[KC {:S+C:j +B +: +*JϋCJ +˲nk +2zJ*:;r;*[* ++J*닊j++KK; ++k;{{*ڋ*z+zz +kK ++jk +jK+kJjJz +z:j+k;ˋˋkj + kkk˻{k Jjjj*JZj+ + +j;k# +Z + +: +zJ*z k j;j* { SSsk;rB2rBBbZj+ RZZogS3/#s3[{Z2(VJ&riI)IoN*oV + iwWab)W/F&(`  VhZ9y#:vF'GS^ƶƶR."g*zkS_#c_ook +bZ2#jJ"^8VVHƛy yI'?6^6hk3G7g?ooۢzJ+/o/3'H@@8P0W)I19_J~h^n.iK.&f((:)WLJ'3Bj{so +2bWYa!)g/S^¿7ϊj/2NnZoOs3s[r +Jj k +JNFV(h&G׉9y9))W3"ZR>n>.^~Nn2sS/ooCC j +B^r2FVVf^^FC'')i 7Gg?/[ZR>Nn^^nB+k+3Kkz*b j&^2rRCOwWW__S*j.N^>N2zzz:[ J+ꋛ# BZbξnÏG'?O/[ˊk;Z2rr~>rn +*c;+ ; 3+:b"R.R k;3oOo/?/Ccc#{[K+ ;"Rbn>.r.:zKʛ㋋#[3##/;zk +kRNr.jrrKsS/C/SsKnnbZ +r+cK: 3c 3#zZk#C*:K2j{;;C3;;{ʻc**kj.zʊ2n"ʻJzk:; " +k+j* +:z+ +j +J*{ Kjz +j +;[K{kK #"[*Jrn +;j2Jzʊ+kK#kk:zs*jzBrb:JJH9gifB#R6"2zHva8!2v6s*.'7*.#/n;BCRv)nǗjo&;~& CNJ^ n.r2>k[ZcN2'~zK +ϻOC: +kʊ'^3^zgnf'6C_ ?.FS/R.;cKCsskoBN/.O/[~kNo2b3zR:+bãfS'>'#nz?J3:bss: +R:Bۣ>oϾ"oJrZo2;zJ3*"s";+B22O*"Ck+zo/ڲK{:kj[{+*+˚J3[Ck˺Cs3r +Z;3"sz[+:{# *#[2/bzBZ3C"*{{{ +z" +[b*** ;+bꛢ* +:BbKCJck#Cf3Jocb: +:bb + .b*J +j +J K+~ks"C +K+k;csCsSs+#ۊZzzڲrڲB.Rr.Bz:z"j +~~~N2j3?W7g_3{ kz* JR.R>~>^R&fP(haiyW?{~{[KBn>^^^^f^nbb3///Oo/3[+踘x8r)yyy WwGn((+3gGggg??/;; BH x` f~^ !!Yy )w7'{2Rv(Ȉvvvf+wwGGGKkN(X 8H `V^~9YYY9)w_RR>(H(*s_iIiW)w'OOkjjB؀X``>>&C9!yy!)G.2N&fHH(hfSóGI))7?*+"FxXx`H.f99!I)w7bnRN&vHv>;#7Ww?OOoC{*K n؀V~yY!yy׷gG/n^6 6HV?))igw'sO8`H@ HnwYaaII)_g7gKN&^hx(_& yyCokrw)7o ܌H`[Y?)!I/^I_&&^8XX8&fg_)KW'//)GW9Nr."BXD971mwx`A)`Ζ_x8 +2v闋G *R72Ǜc '^b2J(di-f '6`HAW)9V Vj;(vH')ǿRgZ÷2C3Ƿ7KknRC $pq") `1W'ay&XV.8W{o'iWΏ;:_gS.g?gϾ^r +^<.ra>v#`ٱ'1ak )S.+{))J{?szJ/cgS_wZ.:HP:Cq)o)(`7A1r>g?n~hHZ*G''? +Zo3K_7~B⳶< 1sGOaY&_sN~zZo3"['g7^ +z(@ vvg!9Iw)Y9Z^.F(R>O_kKo3joss#k.:[;Kxh(F.oOG_G_?OO_s˺2^F(Ff^~C{SoO/O_/Cۚ(HV88&nG_ǹiW7OOZZr~6VF~FCG?'LJg'CS;.FȘȈؘ8^2.O)yII )'3r&Ɩ(ֶ^^.{_g_?S#CKKb&(HȈHȈHn#wiWwW7gc?:.6vvvrK/燇LJ''_c{kjʢJv(VV(6.W i7'_J.>ff6&^>B Sg'___3+rR.^^N2S'7g'sꊊ...r~~>nnrJ +*[SsoC#Ã:Z:ZrjZ2bz*+:;;K[*; ;{3:jsckڊK zjzz:+[:[k#{ j J*{{"; +/3 ʊbb:WÂ:7Crj >JCFO.k ʲ_?.:3ronk?vs[ο[bΏ2/6 +r3s_.N;["J/N_΃*'sKrc23&k.RBZ";2 ~cSn;k{S3:뚺OfϾrjO.#"k~*#/O[ûN3j"Z +K;RKBۚ2Ozb;#:S"j;[ .Rsj{ :kB"[*B{rNK> +b +3???o/S;ڳn.C+nj nF`x6fWy W)III33&n r?[: +>.fFC'S//SËK #S/o"L@`~yiYA.&8RG)7+#O*h(o'3?N7G7׹ɟjsRN +/_s3s2>XH&a!yA)^*nh3J+SI_{6#Og'"n(f Sw7_/K+^n^.J+ rFvv(#iI W7J2~rr2bZrb"Jjk;[[#K+K+ *;j* + +jJzBBBzk3s/SoS[ +*:BBZ"2B22Z":z +*[ +jj+ * Kk*:*+* +*:*kjJkkK{#;{{KkJ +zj +j+k +++z +KjJ KKjk+˛ +jKk+ +k**ˋ+++k*+kk +** +*ʊJʋk + j +jjʺ +k +K KK+ + + +k * +Kk;J*jj++ +j kK ;:kJ *Kjj+ZJ##+{Jj*ںZ*jKK[*J[{+++*z{jjˋ j* +*Kkz KJJkj:jjj#kk: + +j++*:*zJK{ZSB#Jʊo[:3&*jn[2n'Bzs# +*>{r#cr+>o +sN"O+ ../Z ++[N'2._ڏjC"2"; k.3Rz**Ngn2ZSr;/b/3Os_'g# +"/>/~o3.2/sn#O2{[_.r^R{B*sB2jscj/.?rÂ>CoO^ +3 Kf3*bCKjzr*C.+Rs"2{N{rSCkJR;.szÎzn3*jS"›;; JRc:{KzzJ;B;KJK[JK{ jRjnc#+*/[:BKZKb+ښ 3K +⊳kr ڊ:ZÛ Jkj"ZzkʚSK;j +ZjK3zzZkKzۋZ"+ zzJ++:;J;Z*k + Kkj{:z:++;kK**+ kk +#j# +* +:jj++j*+ K ;J;{***KjJ k**k;+ ++Kk j*jk j +*+:J*+j;;* + +j kˋ*j+++* Kjkk k* + +jjJ+jj+*+ K +*+j *jkkk+* +*Kꊊ+*jj ++ +*++*+kj +ʊ*+k+****kkk+**+k*++kk+j*+k***j+******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************* \ No newline at end of file diff --git a/tones_american/cause_42_loop.isdn b/tones_american/cause_42_loop.isdn new file mode 100644 index 0000000..7197421 --- /dev/null +++ b/tones_american/cause_42_loop.isdn @@ -0,0 +1,225 @@ +*d}EьDH$]a+{[&_Ͽ ˾n +r_'&{'R ~n'F7R +r +. +G VȷCHI>:)~^)__6 v{w9Rw1 2oo;'ƈaO~i +YHa @8  8~:iƐa&w)7+ &).INs&)'V >HYnI(j&? (&RƏJ&W&~Ofw&˸WR6 +k&h_wg>[k>;S?2r7R'vGf''FjFjO_{~[^SR+/cJZcC+"C[{Jnn'NZ&.v'b&~'NR#+2gbKO*^o2_w.&3~b2^~+N:SRr/Bor:S;*^k+COs.ZZK^jKcCnB Sj::ckHXȖZ)W i7 WǗGg7?r#SyTXfhm9&!9__Vg)wƎZJ6n'_ c? Ja& '1p{!Go)I2WB(K.wW"Ξ~7_C?w7o'WaH 7}/I3i)Waa~c7J&viBGR2WFN)G*?G777|ypyx6a@O_aٛy~BF9F>g>'INjIc'Go @tƆYp;7Xp@i!)G/)1VZNϋ &hB>oʺb{3g'[r'7$yЉaAni69~W+?ib:o(8(/2g)~G_&ow'/3C'O׉h$`Rw 0Y! ka&2C7"*)b~fx^_;Zsc/'_x~Bjn~ǿW7g'wCN.FFv>&k?㻳O__@88xv(7J7WGWggOS +R.^ڊC￿sZK_[ow^x`z j WwWgǷ/?G*.+^fNZZkjko/sSo?' X7NF+ )I?W2&.fS۲j_;+go?8.X( 6gyWw7Wig_;Gv2^[cgK_scoO?(lXx@(ן"G9KIz)':&f'_R6rgsG'//*l_fIB_Aa~VciahbaWyn^r#OO/*K_)7Š7wggWz\܆f8l0ىR!h9fWIWgzBVh"Vf"/'#חk"Gnowi$F6(&cNbFh>9!?[rnf^3_{g2S燿7P\h>I9(aaɖfgS((; _IǛ~/&FNZC'#' N#'/S~(l!Y!6J^hG[w>Cjf(2FroO'O'CCk[gp|(7)9!I&IV(2Άɟ{nv^n{S_ggR b.b`|H,!y!A:3g ƈGFg?gwfF^ ++O?'g'ۋbz2nS p,yo!oWrVFfvoiGO)R +"{_og'b.Rz 6pin)/W&_爘b)s7 )CJ_R#F&3S.,X_h8^ 9' 9BOfvgZ 珶vSF֛۷~bzB~{[6Z'J"GɉWW);Ss{;zr*>B"ΎBn2zZ*[J +*k{3jj"+z3;#//?ss +z +: +22.R2RnJrBZJZzKKkzkcs#*K;"**K: * +j*Kjzk;j:+j + +jK+ +k++j:kzKKJ +;Jk[:+zz+: + ++K{ j**Zj # +k# *j ++ b zk+s j +kZ;* j*;kk +k +Zj늢;K k ;jJ*+K*kK*jKk k ++ʻ[* +j: +˛:* +j K+* ++*+j ++jK*J** + kk+ʋK + + +jjJ +kj +Jk.&AVW2^F>rS> +:o*+c+k.K + #.KhH!.?C#^.VcaFIN#"*n V&;FfG7vv蹰iVi V+ +owg:.f~n^*>s{;Bsko3?"c~c/2O?Z龛?Jgcc(#oOsovsO? +Ng3c:>wS^R#_j/cZR_/džSr^ZS+r{*f#O/^ZnN?NKn *; +22oSK ʃjnB2jS{JZ**뚾ZcϟkbB{c3 Cβ;#SRrBꚳ/.R*3Rjz3 +j"[˳k[jJJcbR# jڂRk b»Jck# .";CgoJ#J2k.˺[/*#ʢnksjkZz/r* +ꂋKbZ/;ꃃs+rS:n#*3{j:*JBb s +*;r[s{ښ""Ϗs +BZ*C{b.+k[k*.bb+~oo.2:"z3?_2S's;sOsjk"r +ۋ + ^OGfd#-g+bʿNGi96^R3?/n_/{+9D|pQq"F_!aIs'ZoWo +6~gg3_*c7HQ .o&)!ykjB7F'gN&ۣ_s2;)0YmͱnNv/9aAI&&kwi?(;f{.'R.Cws/G! AV{ox`&n_Fֈ~GWJ>&vN^ڊk;[7io? )lL(q Q)SxWAY'_zٹgSf`yɷbn2ʳ'Zj/7B[WH[!A!VVf &WO"N6**kKOiNJ3_G@ȹ_SmHX9Y{B9Y)wF ؃3S;I o6>/?7GGWycMP^AQY ia@@^FyA9+f>NhhWZ^_NRsiWgir؉^9 2b!Q Inȶ3Rhj~)N_FRgi_Sy(|ؘ`mmNaA츲SxVAQ1i)π~ə)ʷ)6'f6'W')c'7GBGwX r a-;/`@F: yW陙'8VxxVi_igJfC" +Gi)WWgxl|W-YgAY86&f/i)WGiff^hVnO_+"2n2 +o__2nrF&β2N S/3Ssc#BR&n>:2{ +J [o_33s"ۊr +. *B +ZK/C#s+;{k+c: zR#jrNkz S:ʚˣ/ ZK +J*{{*j"ˣ#j +kjZ +J{Kz + +k{+rB:3cJbr:jJcKs{c[j + + ++;˺j [:" b +J[*Z+j:˳jkk2b*j +˺ +j+ +z {; +;kZ ++;CJz;*Jk+j +[z.2;[j**j +*+K +*KjJ+; KóZڋj"#{j:*Jzj*ZJK*J{ Kkj + +Kkkj+j +kkKKk*+*:j+k + + JJ˻ + *JK jK;z:K˺K;*: Kk+jK +:+;***kk+:J{ʋk +K;*j +k***k* +*k kJ +닋k+ +Jz ++*+K; +* + +j{+k*+K+jj*Jz: +j*KKJk꺚Kj;+ ;;K k + +ںJZz:"z."zڂ2~N2 +;cC/oG?S[K{[+B8 8 6Vgy yig_CZ^6VHV&&חi))W''_o_Xȸ`p8(G!)9ɉGW{s3ھvfhHH6Ffsw)77_``@@Ya(əYayǷy'F?HVvVHȖ&ZoG_wO_'O xVpz)IYI)_G{zzfHh(FhC׿ 7W'WYl,9l06!QY^9YK Y!ag'9a!H`@/)SoROig_i/Ï陹i' &|Y 1@f9I^Gaq:V3( hh{^+/_.7W/o)G;owI\ѷsiɇx`1_H+n6惟(WO:c's#7'Og'/Swid<OWa_XviwO!66'j^+*þ2o_G_O/'/o_9$ |21W)80h)!ǟI! +V8 +C"fRBvzGOkRb SG_z?OgswI,N.~r:+b2j/_s{C;J["N^^Nn>^~Nr +K3?_3/3 222nBzBnr:ks[3sCJ#3S;z:R" +R K +K3/S#C{j*j*j:rrBj +r*RB +3;k껋+{K + +kj;{cˋ jzJz:jJK *:jˋ+**kkJj+K**cc#**+ *:J*zۋjkz +J;k**{*kz+ÛZZ #˺+k+*jK*j*zJ{{k * +k{kJ +kj +**{* +Z*+{{kJzjk;K*;jJ +*k::KK;k+*+* +k +* +**j ++*k*j:j K +k*k +Z: B ^gj +n*N+2Z2sCB.b3R;k+n[";#ۺoBzRJ +.C^Or&gOs's*b +NJ +;K[j:j"Bzz k+[r{ __'crF^^^ZrjwO'C +:3oK3 .2>^nsSC'/k*Nx^vhZJ.jGGoʋ+O_'r&vrK?_s'σ3?ScXVVhvJG))'{s#f#kJgggf&^RVrr;oO_SBKXF88؆*iWO?#+ 3'7gnN BHFǏSG*s3SۿK (FRS3G)g?/sW7jVH&h(֚>G矷O3 { CR@((hw)ww_''+?gwwǟ_~&&6v(xv&#oG_gCOo/sO3gl` 6˙yW9ቲG'W)7SζHh(+S'_''_o__OOKhb^;WYaٹI gO:N^F(6j/g''/C#H`Hx@bNWy iI 72~~&ֶ^B";CsS/og'S#[3@NR_ YIIiwg_#[+fƶ6v~J:{{_'Oo?Jb*RVhx `.?WaYɹ9 3[ +^N&fF>?/O?o{KBBxFVHHxZ yYٙyi w_OSO2B2.6F6v^rz*;o/CJbbFVRJ*O) i)wg'OjjB~憆F666^RBjscc;*j;ʲ2ZrN + 'wGg?Os{*B2^f>~>J*z[k[[;cÃ{;{zj +Z2zjkK +so[cKnRR>.Br"ZRrº뻣{k[sû[ jkjk* +ZjK{ *;j+{˛*j*j*ZjZ:*ʚ;[ +kj +{j ;k *jjzjjk;+j +*K;*: + { ** +k +zʋKk:J* ++kkj+j*+**{+*kkk +jJ**J*kj +* k+ +* k+jk *+j* *j++*j+ +(7S?)WZ^&k *og/k#cZ~*2FB/_+~jgj[ϻ'[n3o놏&n3fB"r# +*C{R[k/zk3 +?2?#?nO2n#'^'Z^o*΂3s#;NznZzO2g.r#3nS3r7rJgr?sk3 J3kc+w&KOj/j 3K{rSs&ckkJBs':zn n2nj>+//^^r"z2n#*~zzNJZs>z Ks{g>cSz ++:sJCKZ*.#"kozJ3K[r;+{j2j.S>3{+bRcs^."./*&+snkjSS?gs_J~Rn +J3C*BjSSp`٭9qq9~8(2K(7ɉwg/v>&V^K:GoWn2SWId00V2Q)qH)X8{wIy#b`Xֶ)G.R#)'Ss/sKz{|boo/OoSsCS/ccC[ :(h6(x8(~k)9Iiɹ)G'go[3N&6(^N^^Σ?ϟg7'?O;{K:ZV8hX8֎.^jiiI9W7Gǿn(vvh(F&r gG׷'OCK;+j+&hHx8B) 9 9'gGOZ.Jr&V薶.;'Ww'/B*[ +zZ6(`h;III9o'''3rn:fv(hVb +/_W׷_cCC3C# +{*68`s::g y! II )7'ϛN(vh&kˊ['G'3#Ck JR&`8`Hh7IyYYI iG/???[.bR~F((ȈV3'iiWw_7ǿ3[Co;jJ+;k(vظ7_ǹYY 97GS'o/2^`xj9_7C7Cg_;^&"N&Vg_18"!aS9vHVJ&iW>v(W Z?Oo_{;s{*;z&`S&Vh_`{19) V nni)oVw_' +*O_r.7OkoVLI23`qi anx6V~'(:SV8&;i :/7s^&K f'/c'."^xX ljay(X_ 8HFւS .v.vH_GW~G7's/NbꚎg/""O"8WcaA&(!a_9y VȖN.iWb^">KWR*k;g?3o#J_#X.r'>#.oٷWNfFF^"ZO_.J'_RZc.2Bʃ+.^^8&&B 7/OgO'珣cOO/;r2B&ff^..zR/3/O//ホ3#3 +J2rZfF666RZ ' I׉_?#K3F(^N2Js?'O?3/#K;JJ"rvVv(s{WGI9鉉G)'SO/*+.~f6ƶ^_O_C;k+Jz +r22z2Vhv([[GIi)'KsKz&6f^zJco_?o#;jj22rn.R¢"RN~>NRRno燇w_ϟS 2Rr>.r2+k#KKK;jj +z:JJzʻ*kk;+:{*C+*;ssK{sK;* +BJz.rr"ZZ +j*Jj{ ++ۻ K +k k*+kJ:+kj jK;+K+k +; *+j +:k* + +ʺJjz: +* ++jj++*KkJk+**++ʈ )^j3jJ"*K:+zȟwg*ʿNCjN+"JfƏvg"ǾNzn+C>SR*+:.C[:n~sS +O*.B3Rrj3{B[Ngkۋ#z+2oCo+Rڻr*kK⟆_Z_'_6g.?^&?6?g+ Æ~n3kCj;C"J"kK2+C# +kʃ*?*Z[+Z +*c*rsc +[./j.**czK+2kc S K+z*: *J +Z;k +k[Z:jJZ +:º{2c{j{Koo# {c+ z{k+Zz:jbz"z0hcWW7s2~{sgn> rΎ#*+?o#+:Bb/#so?/p `ىY!sK&c';SJrfN./~'b)/zGcZ3zJZSK+{/oSx V IA'7rc>2c)_?'ff&6F;KoG"'fs +Z3^BKrR >RV~I gG{ks;ZZ22br.R..Rr +:J+ +J + {[۳3[ۛ; +zJ::+K+*;kjjzb2bZ"zjk+cCCó/So/SSs3{KzڂrrnrRrr: K {c[K[KK **J + +JZZZzJj*[s#;+* + +""bB2r"bb: +k;{ *;;K{*j* k K++Kj + + *j+k* + +: + +zJ*jj ++kʊ* +k*jJ** * *+K +jj* +j*j +kK K+kk +++* +++**+ʊ +ʊ* + +**++j+ +++ *++*j+*+* + *+ ++* +* +*j ˋj++ +*+*k*jk +*jjj*j++++**+jj+*+**jk**+++*+****************************************************** WC#[ʲ^k‚.jC":+J{jF(w.ϻ?.>3jo[rOk{ +RcnrjZJOS^Zj?֗&g^7ƟB> 'fZn˞R R3s+/;bN;Z232_*sjÂ:/kB> JboZc+ZJKSOoۚ"c#r"^/r+2+s/ /O[ [{z*{kjs+rs2*C;ZnjroZۻb+*{rJ Orr. KCb>:S: +k *{b 2 cjJKKzJok+CzJCKcZjj*{ +Bj+ں Kj 2RK:sK +k"bZ#3":zbK*[* +[+* +BZ*ˢ"sCb KZB#kK +[k뢣;*J;{˺KZkz"KS{J{k+ +kj+Jj *{K:+k +*jJʋ*zJ + +ꋋ ++[ +zk* +K * ˋ**Kkjb:K*{ +Zbk;{K*+ +{*++j +***JJJ+kkKkjk ; KKKJjk˻jz ++++ +:*{K*K +* +**J*k+j+:j**Jˋj +*+ +kk*ꋋKK K*+k+ kjJJkk* +J+ +J;*j* +JJ +j˺:˻; K ʊ*+ +*jjkkJ* +*++ +j+**jj**+**kkK kKk*+kK * +*+*jjj+kjj***+jjj+k*j*+jj+***+*+++*jj+kk+**+ +j+k++k+++*j*++j*+k*j+***+** k+* * ++jjj***+*+**jk************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_american/cause_45_loop.isdn b/tones_american/cause_45_loop.isdn new file mode 100644 index 0000000..45ac0cd --- /dev/null +++ b/tones_american/cause_45_loop.isdn @@ -0,0 +1,209 @@ +*d}EьDH$]a[F8IWqawn?NV~J^{*s3?[s#kBJ +j3#KR"rn(Vhf>(62~i7_wgC/k*R.nrn^~.>N.B2 ##c[c** kb*zZkzk; +:+ ;csss3*Bj*z"kk j**:bbZZb: +zjk{{j[ +jJ*"K{K#+* " +Jj˻; {*z:+:ښ:J +* *[j[kJk*J+J :k*zj +*+ +k K k ;kjjJ +*+z*J +{ˋ**jk+k jJzˋjj*jzjjj++++****j +k ++kj*+kʺ** + JKkkKꊊ++ + +k++Kjk*:+ʋk++ ++;kj*jj*JʊJkʋk**kj++j*Kk +::k+# JzK#"[ #ۋ";bfB:ϲb"b3&~gRKN~'{._zS "rrCOZb''[ƎKzj[/Ës;ښJr++ sSC_R?^>?'>'ƶ&>SR'Z/'sڛ_/r>n#[&sg/Fg/gORF>9(VIW66KJWn& "6?ʇo^..: 22n/^r +;ϺsSjrSs.k?F_2FRo.Vc2 +Z&rúS+"_Bj.{sFSSb.?3n"o3S~ +krO +/Kr#C{s*/ZbS" OcN>zJz2SϏ~ :Kn;2{Z;j+zZ*zcjrZK3_KrkO*sS.Nϻ.#Z2SRb#z*o2 +Bn&^Gs>#3&ScBjsOs.S'+s&g^/Z?bv&i#VF_[nwG?:fF;/z>/~O?R6.*_B /?Z&2b/ +.~fJJSGsrg;RojS +&*:^F*'On&2{^N; +^vf^._׉ I )g7_Sk+GJd|(# W)i@&Gn!IHhfΈXʉI')Y/FF)9Gwh\\֘ mG G'+GQ96hF0(?i فY7Z>~2s O0LP` p-m)IsVַfa--!_,aa7ʾJ>Vs I HiQ1ְl8?-'/,P@_'Af^VI!p pmї9.,l@^hs-7')( +9//Nv;_yH801G)A 00?VkS6*aGO;+WgyXAWqװP۹H(aꂙy/xNf !9I+(WJ(`yG!aix+^ ;Ng_:?Z/7ggG^N{rl`9#IWF3NCC_ Oo /b;&~f^>HHhGSGoJ7G'7珣obk #BBBbbΎnf^+▆2r#'jocwWG7_OOʚ&~n^fJ(ξ.nzsO^rr2o_ooc7Cǿ+?bB#fR:g#f6Jz6ng^"?2ORS+/oO"zk~>v6>#s)^Z^^_)K_sK7^RV?_._*'G_DzR68vbC.?^oSKg'_rk/RFOf)w"&_F7R~&v~S&'kzO&&.R*2b'.R&{^7J>'ng"[brG./){G;Nn>N3.CNCs#JNRjC.S +.Or j"3 R +rz/S‹J;++{:C겛{#C3kj:b:*{S3+BkCjjkkjZˊ jZ" *C;z;*K;c:{K {zJ +[ k:: +{;jk*zzk**+:{jzKzJZ"zJ#{ ++kK *;*+*z K+zB [kꋢk +;KSZ: rZ *bjr*c/3ۏ#"+CJ+nbjKc +[+V_r#3jZ˻G_Ojs{.> b3jBsBr.VJ~c2G{*/G'Grg#GZ* " +/^/Ǐz22?Z^C.z)ڳiʷW +_+^f.*n+kk;2 n?J>K~k.Kfgn^33R + +>Rϊ+NBc +*n/*sO[kKcS?[{o*o?z?BFp6 HXkwgo9!A9Vh.J)Y!IiS^R&χ'pNnrZ #?Cs#j+RRBR>RrCC/sssˋJBZ"jJ:+; *k: +Z {{Ss/3/s+bJ:zJZK +ZRb +{;:*;Kkkj:KZ+ks+ # ۋ*:š2Cz;S+ Z.;{SN_2랿*2[2ʣ"RRrzj c +nrorrn{fSSZ/_2>.n2 +w>WgrN*[[r_joR'+ng'k^k^ףO:ۆ{Os>&SS [Gchw)onKvOc;~3+32;Zrb3oBo~s"/Ã>>gkKsÿcs? //>3;zz +#;kk[3#Cc.*O+c +n3N*b#kCBJr;z*szS+23ڢk#{[J3Ϛ222J>sK~ ;o'z/ r#3rcK~b~// +b*3ʻbb*[:;3Ck&{JzZJ"^sJ/j"ZJS"c3+ +r.#/.32sBs; r/[j +/jBcKo jo;/bj b[Rr ++k#j[zB s2*"+#;"/;njKo:ۢ[ Z. +Sb #B +{ BJ"/ 3{{?B*/R{jJj2?Z*SjR>s{{k;Ks#O~:Jcr{'  +k.s{:jZ> *3.noz333;{kkC +z Ccjc#jk3"+c{J {;;b+Z:o3 +sR2jRⲾKk; +ڢ2jn*; + +"jrbs +*S{cs2zrBj +3+ + jKKC*ۃ+"+:j[ + +2:[*ʚʢ:2rB":K3;s3S[Cs{[s/C*{ o{˃/&܀rFqA1QAΞFVFk'1aiVVF~g)w7S7 0phY1A1s.fX(C9IIIZW_fV+?ׇ[sC;>r^ZŠsWИ`(Y_19)W.ȶboGg{rڎj#JK2J2jsx&8v7 w_f^Rs?gG/3nZR涞+2~;+2nRrR/ J#bv>N‚S7/Js3#{2{ +Z*.K32b". +Ns3R;&R/Os닲g'RRJ.c[[_cS2S.Rz#F' ^NFK66"2F_w'+;.h2ǎ?r_n?OZϳ^Ok?^g ǟ3F(C8'_~nNwj_BRz֞ fNjC&Rih'{s/'G_sRFjnkFr3_ϾHIǶz'K(/RWvV#~>69(C6g"z&(v8i7y{Fw/O&6++b_ +h' *˲(ig RJ[;&_?H)vCRoG&>GgSΈ7F& _VV"bS O~'K&o6gv3 Rog?FϏGGh^ +r&'VwʟGx?kck_k7f +&R/Rrǖgb/Ç/2WH) w"袇{nBf).'Gr 3^ΟggNoo JoJnf~C_r/2fczB_s'>SΟ?"~B⺊2kڻ/*?&o_r{ Nbj[7hsK#^zbbCgBcc{3K +NgbJ뢻b+R:+cS'{3bsB*~.sZO3szRckN +KZ2 +R[*Js3"{bFSR.*B.j:.[*j3'so[Ckc ʃ?Ã/r2z.2S2WO,V@iiY!-g &V(WyY9O_>hVs{)I<(ll!I ! aYi* J8.R鉹2"&jg_w؀,WiW)!m1 Y)R8+hh&'j _/;f"2K/K.b/whָhX jW)i y)G/n3{~~.^fN>2"kO?ggG'CO?HiWə9wW2VHv^k~_ljoz3o^ 8V`hV6ɗy)׎'>fVv8h3~_i)j'{Xxh@ Vf2ii7yiIyiW)*nF&(8薘h>79w2s X8V֖i7A!yY)iRRGVf((hXF6 wG 9I;3obX`h Iaṱi!G ;#Vx&Fk&_7ǹyə7)33;'>p ( (ȶf!AAaY"xvVςW iiC"+˾g7Y>\,Ȭ@ iq1Avȸ, N.rׁ/ W:V&[hb3/sw)7)wCSGแR-+x@^/iYY7W?6h>*G?)Wo +h|,00ǁ9.-ёYaa#aYg3&r{?i_g +nJ/o8pvWNa-闑؈(h`/N*gWy7rVrZBo/iG;wgr3@8p`AqqGWqٞvV&h0 !W w^SbvG'g +J:?0솀@ɛ!ѱǹ(^[@H~f(WI_I / +B&kS; r~Ph@ Ɂ1;ʷ'iw_'G&"F6j3bROoRjfξ`hHhN ɇ)ɗog#kk~;SnZO:nn."33j;B +J";**+K:kz"*JJ cۃS3;:[[; #z+#ۋ" ++rJzj{ûb{;C[o*.z: +s3+J2 +j + [ʂkZ.k{/zsK:j{ʋzZ +;;J +KKcz +* +z* +*{{{j:*  *z: :*#*k{jڊ:zJ+KjK: + kZzJ K;k+j*j+jz*+ + +;k k+ +z+*j˻ʚk +zj{jJ+k;:j*::+jk{* +z:*kJ*J"f3[*2Z:{Bڊsr+ +izoKrOrCn:s~ ڲ_h3f2;BJ3.s[V'o ^"+sχNrn'_go;Oϛw/~ڣ~i&&s b{֚RSrSk[WN6vGGfWf˲2zkb2^sƒBN/[_fjBNfW_77^77&KS_{n" R +#*B;oBKkn^#>_Ƈ .KZ迿.CN&SR^/OJ+{[: +r2.r&oJ.+/JK+#K&Z'rzo^O2r_fr;&g3 +r +*sSo&3rk?~b +O{.#cr{2*C[R2;"Z{ϊۣjr_">"[ZS.k ;so{s"#C >:b*[K~>Rs'g''Ͽ[Ss+2br"nkSRx"9 a!!YyigS'(fH^//oǷgsC b;a<8 ^zVAljaG^vfvR__"?#sSggOS77_GH! l`fw-!a_HS(>^;ƏO~nSGGiW)(+ , ~ױ9!a!Iygs 'rh+o/ÈF&^J;swɉw/p 08XOױaY) wrOƺ/_Jv(h(Z~zOG_w?/X, ȰHRyw!9 ___Jz涶&^{#oo___vh8 hH> yWw?gSf憶6Fk+['Gg7'NJhFH`x>7G׉9) ){b^&6Ffro?ggg8(Hkrg)I 777OO[(vVh~bwgLJ7__ FHZRii )9 w)'SZf&6VvF>'ggG''_'go&8v88hȶ i)7IIW) )7wOzn^F(vvs{o''g_gg'xؘx 6HNKRw9Iɉ)77LJg*ֈvh6hfB3S_G7HgX``@ 鹉/wWW >o(v((+JG'7Gg__8xxF2II))ɹׇ)?OSf6(hV^~. +?_7G7Gg_'ؘHȎΞIɷ g;~hƶHGwɉC[g)ii))i 0m (#WƘ!qw yYiXx8n)3Z?7w;{'gw'9!W_Xd9/2aQv0_oq-qIF Ȣ_^rc/oRKg7*{iWGG )WLJ$ A*AA9(0CI !A1 `8~C6V'b)Ok7)wI d\lqljwxg'ɁIF8϶r;&' {.?w *s7iw$lQSPxWsW!i`(3i o+;rG)gbRW +C)_g! 3!!b0fa)Ǐ9Yɇ n緇J[nVG/3_7'o/Wya\<&9!7V`89)_yaYG/RǟhVg/ZBG/ccg9< lWᗱ28[7&^/)a ^&36XvI9/Fh*7RRi9i sWFHAYiFhG#_FS)aonWVf&Rcv:B[j3/??oOsO؈ΈBys^bWK.gs?g"J{cNNKNCR~KO*.zO:" +{J z::>zBk*"+3SK//;ãjJ"j2jJJb"R~*b{/O/#J:ښZ2z+k +jK#kz++ + kjk*K{zZ + *+**+;Kk +jjjj +* kʺ*+k{+zb:kˋ˻# kK j:* + +***+ +* + [cz2B:[c*JK[[:zZZ++jkj+kKk J*K:** :{ j +{*b껛 : +k*:K#jz*ۣ;zJ{ +v&)_^+;o2r"kJzB ú3 +kjJ{Z"K:뢃 Zz*{skz #KK# +2ۃkr;ʞnsrrsk3š>2 +n +z{czڻ:Jkj*K*J[: k++ :J뻚*{;+j:k:+*{ k;*jk**û +jK""˃*KJ **Jz [k{#*{{;Jz'kK_OKssn +R6f6*_77goRf&^.z*ˇG77cKko, @8Ozay!)g{R>h_2wG_7bVhF~R'?jr^Z>ss//s?oSkJkjkC;[k+hhH>O yG C.nB3gWw_g'z^V6h(6R3'7Go?c/ sX``@&Oɹ)9/[G7ii)Gv(8_gG_/"/S'7Gl !)s~;)3.hXhNsgww'*S'/ +֬, ~HȃyIIYɷgz_Fvvv6F~Rs3'營OS/ﳳ 8hX~Gy9iiiWG?sJfvN S Ssg/ ;c2R&hؘ +rWWG9Iy)w_+Cff^f.bZZss/Oo/+Z28hV(x^Br/g79y9)igr^~N~NnR‚cSCc/s:RFhFhzjsɹ iWWwGgs{..Br^&&^~+{+*k#jښ"B22ZJ^rR^fn[#_7)wG'ϏoSS3".>f&^>bkK*:+:J*J+K{[cz +ʢBbCs3sϏOo3C3+bRN~~NNnrbZ"ꋣK#s3#c#+kZz""ں #sss3c#K z:b:"ZZ*ʺʊK*k{{k;{kʺڊkښk ˋ;Kk+ +*J*˻{* +*jZ*J: + +k+kjj+*++kK{; ++ k +J +jJ +kjkk+ j*+*ʊ))SjWɿRno&6rR+[OⲃB{Jr::zZBs{jϳˋZ;b3k"scʏcZ3rsbRB/#s#3C#{(?ǾG3^'揟f3&*j{B2b;{+"/C/*R:ojn2 +o&Jz&3>'zR?S& +n:/#BkZ +ZN[Ob_f?.R*>#O&/Zbsb jzk{ڲn#2.R~CJ.S/gr +sfk^2nKS#S.C_C23 +ۛCR+NOSsbj#{c/C&CZRϛRoʃZ:2#{jjc"ZnSN*2J>*3/; +CZ#;۲3kb2 [j bsjOJZBʃS˺kjj+kJ3RS+Ss2o k r*{{rcrkBZ&Z^n'""RZJ.:ʺskk:+z[Cc[s[C+z +bZzjB2Rz".n>Nn.nnˣS7w7LJg_oC#ۻ*K*b&@^.m71ynv YwY3&vF HhN?oG'"ڢ'חOSrpX8q-a!6NYyWyHH O7)C&KoSgG;~&2ph(N)aAYiIGjRNɹiLJG{fhhh&*//G_kš cCJ⚛f(hh6.v&ˊ/gwWG7wgS/kj +22~^&^b:S?Sscss3zN("gwW Wi_O_?k"..fFFƶ6FZ:{_?O/o?sΆhVVfnRwiiw))go; +nn&vFv66r +;#C'_O?__?/SCzN^h8h֢"{WWWiWw_g_~6vVFFF>z +'gO_oO/2&x8XHh'W) iW iW'.N>(V6fR 3333O_'O?OosScJVHؘkJ{w I) )ח'''oj&&f(h6&^^ +;Co___o_/CC/oSz&6HHHc:Cy) iWG_'/{Rf^^FVh(v&^fS/o'/_OssS/"vx`H/n_)9i i)W'_3 rFVV(H(>ZkCCggW7wi. _^1 v׉陙kxN^ wR)_Z[Ƿ?o+۟g燷O.>,\(A6(v GXvcKgCNG +wgk' +3G7gO~X^[Iyiyn8f(/i_vhc꛷g{R*bkW R&"̜WkrAHV/X'w!yXxn~ηigvf(V^W)sZʲ+_cgb~R8| ?fY2soYWaaWhXN( ^VnR sO3 oZ33s_o^~r8L>cKNgqo6_8yi 68Jo)fkp)^7Z(zI) +N_Ww + +Wzs 6FARg鎈`/YAa(zXO_Vs;v fFgi :oOžGOJ{G?s^{.XViY)3FcGGjIsO'f~v6&..sks/ۊk; #?/oS{/kkJnfx(FVhnOw'iW7'_o/Sjr^Ɔhh^^"og'_sSOS2~V(Hr +'O79 W)wgO'_ b2FF6vVF>~^3S7gOo?/[^6hVH8hR.7') )WϿ_{+Nn^v(~ng?wGw;/KC⺺2NVVhHV>r) i9))ׇ'O["f>.::c/'OϛKk2n.rZbR~fff>JO'gחG'oS[ +BR.n~~~~.rJk;;3s[#Cb"ZbBZ JrڊR??'OOSSk+2B"r2R +n{kJ3˻#{ʺ J*Z +˻"Kk*Zjjk{K*۳{ #[ jKKKˋzʚj:zj+ k j*j* +++*J+ +cbrN3W~rRRsg >_Sz.+jrJr'.3{c;Z*.FsJF* Rz~[C +N?J3rk2*b&._sb6: +'b*R +jN2 *j'f~/ۊ +*rkgZKc;Z +JJ*k/"SjbkN2 +No^.#rR"3J3k/rCrCr[j;kb# +/{sB/#sOsobN?k? +k?C3sz+z2{nË"R?.+b+k.zR;ςJ2jKnsK{[j/+bKbSCk2[*jRzKjj2{:bk+Z"kzJrsC3;/_3s +JB[J^BCRscb.s~h@(HfR 9׎KKNf&o/?"r>H^c7Wo3sOϋ;c #{O''OS.{bk[:3z"z"BZJBkZ + +jb..Oo/o'?/j*+.rr.NN2rRrBBZJjk[[//s/3{K kZzz"zZb:j ++{c[k{;+* jJZBbZZ; j{:zJK;[ kj* + + +**j+**j**+k꺊k* +:k*kk* ++k ++*JjK+jk+j:zJkjJ** kK *+***jjk+ *J +*kjj++Jj*j* +jkK+kkk+ Kjj+k+j****++k*j**jJkkjj;j j**jj+ˋ++k +* +*j+*k+*++j**k*j*k+j*k*++*+**+*j+k ++kjj*********fjI^V?&#r3o + +28 _96G^ nR;Jr +zS2n""?r2rs;{C>S~S ++2RC*ڏƿ&Z~Zssj#J~SFzC^v2c.&BK6gCgVg*&^o[_b/*S2C2>3sNË*:JOC[rs^^;ZBzJ?*3z{C*sC/zo[/fgzbrJf:z3c +2/j[.oN.{Cڂ2 +S/b/{Ú +3fSn#+BۊS3*r.JZokkO +R.3K +3J>J2:*#j[/zr*J'oϿ ro+; # SZ +[k>jSr[CczRC +z2K/;2KCSJ.[+;23kCZ+: +: +B;zBJ#{r*[r"zZ Sc.kRn#k#JnobrC:"*.?["b JbۻsJo + +K +ʂk J"b cS+ +r[*{Kʺ˛[C+kk +J::zâJK2k k"k3j{ +Z +[*2" + +:j +c*+{[JÛ **+;J kjKKkZJ* +++*kj*KKں[{z:ʋ + *+*#{K k+:jJ*ˋK +*+**+ *k** +*+*kk+kk+ z +J* +˻+j+**+ *jz +++j+ * k*kj* K+*:+;jzJ*jKk:+kkk+ K+ +j+ +ʊk**+ + +j*jjjj++*j++*;kJj+ ; +:* {* Kk+j** + +Jj +++*jj++ + + k**** k*+kK ** +*ꋊj*k++j+kk++*++* +j*+****kK +k j+++*kkkj +:j*++++****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_american/cause_46_loop.isdn b/tones_american/cause_46_loop.isdn new file mode 100644 index 0000000..ac2154a --- /dev/null +++ b/tones_american/cause_46_loop.isdn @@ -0,0 +1,322 @@ +*d}EьDH$]az&&nn&&&N sϟg_S[r&i)g.&κ?J>&&So/\FVV'GcS7׷_?g.,$ymM!XP 9a翾iىF` 6S)ώvFnO77G{/gG7WGGGH,\ ّIh p`a9wXWo;&>Z7G'SoGW nlP\L  80`caIio/99ٹGR`(g)R^JsGGoC7wW,LOx^ 9) za`vwC.N[_''33SwGClL,xga1с_&w#h)!1!8`XFzǿ3J__OO3 'GWw 9Y!3W/vV2!9G3&Έr#B_?O3sϷ׏м 6igAWφViw)'oW9?&3[.vh+jg[Zo'L<̐H9A ~')"Y &&_WV(fˊb')W*C'S @VVGWI_g>Zg99+b.i)#((z'Oj +SCccX8Ȇ3Wy! )GgOoo_S ^n{oã?G72xhظXjN yaGG.SÎ:r.2*s3W)X( HPV&YYyYYW__n_*{ ʎrk_wXhXph^ai!G_32;OJ.2R>J +o_'Ww؈ x𐸈xc6w!)y Ogr^Br&B2JZZzSO_'ǗW) +8vxPXX(9I !79 ;J^b2'hֈ ؞ +NaW!)y/wRO^Jnrf^J2Ro'_7w(6(XX ~_yWy))ywRvfn:.?o)h X 0X F/N/ !!iWiףJr^ffr.#c'_gg'G7ov`揞W)iىI!IW w/[^6F>ևW9g WyW0Xѹ鹗J>(f3.?2ONs_)GW)W)L LରɇS.FFƟ^(woo_ rBg7kgiG)IIgl7!aqY#a^K^I +)#2g;wW7I P,X,犸ǹ!yAiSV>vB66//'gz_& 33_ )i,_a)9^fNO'?)2/_rk+#3g'WW@@_lp^`,v 9a!YG_(fhzR_'g?{>r"_g7wx,x(0.3Wٙa +W6&NZ[c[n.k +2{oO'7vpp`nvS!y!YZζKv&2o{+>[ + ?_'_g`r^1 ai7F F~&n'k *::Kb/cK_oO?P X (7!19*^r^z"_?**#[3s3'sBgP`v(`aYya!n˺f^r"~fZ:O +.k3#BKS'" @``ri!Y! ɉG/~R"ڊ*R^ff^RZ"ZS{o3S;/_θX(hv?)I!y i)#Jʋ{Êf6fRrRj*oo?CsC8hIiWWg/CckF^.Bn.Zz{o/so/S/?rxhhV(V>/lj9Ii)))W'?s +&v6&RRr: SCCsooO8xH(n)I9IiWwgKJ&6"rjϏcCS?S/gx HhhV#y!i W' +B+Sj:*#o/S3/z +js_3G[pxHH?Y9YᙗRƲJfFBsGgo7)7S"Cnk7 ̌biAq j&s8XZ'?R(2rsgz_/Z₊'_# IY Vpx[)a))?C'8ghi8v 'hgꎳi/ZSGW _$8jHW Oy-QkYio[x(. IJ{grfS^SOG"/'S+$L7WWagG9A8X._.: +G_nF3Bn')gSKO_o*< .XɁёiqFoxoCWIW*w)3>[>Ϗc_狊nSp`x㞏yYy!Yn/V66.?gi7#~+&R/C&_{VZRF;H (Ș;IW c_&3zcϏfBV~ONS>O¶F333/hn/^i)G'3?oz*ZÏ7roj"rS~ff&[^{?6?ZcrS&_BJ_gS_sGۇ{+ڢ g2K{NƚΆV(:.Æz3nNs?R>/B{#+ksj۟3;rRs/{/Jk ;f*:FJ"zr2zǚzjf22{nsF{~/;; Bosr*#ojN#[+Kc/j2cϊOCkOn[[2 +"kچRSO2BC3o ++bkr#^:r¿.o  bogS+?C"boJ.>[SonB . rnJ +rJ+>cJc?K{f#K~Rn*Of^z+2:rNgk'zz{΢ C" ++nnZr+'?W/~ /n +B:Nkc^.&7O_f_K.3N&gNJjos.?oRf ZZj^'J/Nng6z.j{++&fFʻS{z?CSgK{{{j*kj;bK[:+[jj+:*+++ + +j*j; + + +J +K jK* j+;*+:j J;k*j˚**++ +kk*Kʊ*j j+**kˋk** kk**k+*jjjjj*+kj* j +k J jk:j**kk*j++ +kj*++kkjjjJkjjj++jKjJ+k+*kˊ* *+kk+*+ + jkK+ +닋jkk** +*K:2K{ + +BO"Sr*zK k:3B +b/ +;s+˳3 +ۋ rR#::B +" +; +3Z +ÿ{:Sk7Kk KK?rbck"{n'NJc?ڋNKKs3憟C^K3k3F'rs/ƊG&~_B>sF7#fS?^B7oևF6~(67{["r;&ˣorO?3{2'"rC#6{/˳///f +&Ͼ;c?:osr';⚲k.['s'S* 3 ǏN"_&h^f8XHKw7_Iai?"V&f6SS7)WW??KO)㸼쌬 +с iȸnKoginN.R&Fvf[ +'7G7wWggg'ǗWIldVlgh9 !AA(N" Gr*>FsR'7)_G W6d,_@lKC^y67 ♭Y6HBg'v7I9ךSnhZ6?)Wɉ_ @@ 7r--9r@vgnY))R~VZ6'W'?GG'''WwX"B7Gma2GNa)66K舶?Wi7w_o_ף\HGHAaN) h2c'J~zOǷgGG7_'gVHBx,fVIayA9)V^v¶zrSS7Gg3O*_KC7_{/S/S8 ?hWizYW) R2z3f"/So ۛ +2 +rۣkfrB>67W GSs22bjZ3 bN +.ks +Kʛ j zj +J22"Z."ZccSc?33c k+"Jz:**rJ r:+:"*zZ +:j+{k{j+; +ڊj"*J*ۣ;#{ +kKJ+k:*K :JjkJJ:jkj K;+k{z +jj+z:k+k;j; +*J:Zzj:k++Kk*+ +Jjjk+k k{ +*+:jj++kk +::zJ:K#; +zj+: + Kk{j k +j +{*{*jKJ J +*j*k{*+j J +jk*:+K*k+ { + j*j * +j :j*+*+ *k +j*ʊjjkkꊋ ++ +**++k j*k* +**jj: k*++* *+**+j + K Jj+j*j+ j+k++ *+*+*ʊ++ k +**+++j****** +j*+jkk+j* +*k*K + +** +*jjj jj*k+***+j*j***j*+* +k+ +J*kk* Kk +kk**+j +j **k***+Kj+j* + kj*k+*Kk************************************************************************K JZ@Y 96aHfHnWJk)NO:o&bH)v / V^yVH)c'hi/WGW' +ghjG_[N7bϺNsoc&[7s+'fC&^Z+RB+>j+jNjrR3?w'gooi)sWfS{0V9KAg[V(h_w_  +ǟjBGw) ,Lp9~_8S 1V +(;?)'sR2cO77'l0C*3(1!'1!Hf&+6#Z_R?..['3o/s[./o(6g @`'š9aIrW 液f^{B*ZCkk[c{j{/SK{s#csnf(v~*{So''g_O?{+ Z>n&>2{Soooo/c3# +zrn>^&&&{S'gg_s:.>>j+ /oSSSCójʚbBn~>N&nrbc/OOO?s[;Z2B.nRrbk +c{S[{ +*2.Zb2jj {{3#3S3s#{zj +R2rz"J+zj Jz;z[*K{ *K*+K##C##;KjK: +zr"ښjzJ *J*k ++ * K+j + k KK; ; ;;*j+:JJښz ++ +ʺ++ +*J*k + kk** +J* +jk ++KKkKK+kkk*jjj*j +k : zJ +j*KjjK+z:j*K+ **+ * + +j:**J+ jJk +j* **+ ++*++k**+kk*+*+***** ++*j+ +*+*k*j+k*+*j+&vSF*{+cBKz+rs"&oo#fr&RnS&o~.?^/>.^"oc +ǖ_f)>Ǟwfg2I_ƣzcڎ(9X+>kÎNSk~gR"okS2S;gRG f*ZO2j?^6(26(No)iOnZv~[&zoWgo'?n7Rrଘ^^V ziWB6rVȻ+K2:_Ɩ{rvR?sscϗ)\p1l _ly9gI)X_(@[#6hH7W[FFI^i_[GL,(W Y1Y#HB^>cǹ6 fw)o?:)nc,X w-qA(`V[战I+/ 9.K_F?ZɷϷ7_' pPjS-a!IAVY>hƘOSIr+(s'W _?#iL@@fif-Y! ֲ!z68 /[?hG'ϛ7.2g;(V~ YvR8~j_c&N_3*+Go'.ϛ#~;NrgsxN  9sgYY&_^?#Jo#sv>cfsRC_~*S:ok +:[bʻ~^F>N.[s#g'翏s[.JrnRR.JZj:{ˋ;j K{kkkj+"nNnnr + S?O3ckz²zBbzښ+jz+ʊ{k:; +bzzr2j"Zk* +[k#sjco/ k#c: *rZRb" :  + {*":# +;c+{+:ۃ +Z+{+J[j+K +JbJ +:+닊+K;ˋzj;Kz; :*:*kK+: +[+ + **{k;ʊ: +kb +"+ +;H!V_R'>V92^ON.RZ/&/~/3jZs/FOknwjǎ3_~svS.NjccƇ^RC^wSn_+3 :WS7V*bOƙ(V_#vWcfWhz_[!` fn~rcv "VRf>nS&S˲G*BOb+K*[?hfKg.&.RJ2(:&.ʖKgCW'W_y˷JZ>f*(~:XK .x))_IYG9.R2&R[Si_b{^;)6#Wf@Жh8pG!A W_b?(/sNW.f.23.N_G^0 l8'/Fgq wI?g6ֆ'gF~&>': >{r?'7',>fF +AAGIaY˾"/F&OoK6.k/7NRS?S'.o/:''*ΘNȀ#6RO)9i/;.C2'Zk[Sf.j26JG~OCˏNf~v&>OGw?/osOj3b^2z:co3S3"b.N~nrk{kso/Oϟ[{+:2222r2bB":zzzkj{K*+ jkjZJj:j ;KC3ˋ*+*zjj::zz:Zz+Jk+**{K ;kk kj*j{j˛ˊj*jz":ʊz*+j ++**jjkj+*k + *K;* **+*J**j +K+***j+ *kKjj+jkj *++j*+kj*k+*k* j*k+J; + k+ +kjj**jk+j+jK+ j +JK +j*+j J;:z{ *Wπ_&W&w>RC[["{J +j+*1i_S ..oXWyv. S/f?^@7GkB*CFig3οbFVgCBS(&_H!O9iH )~ wS_:yV:7N~F^V&Z6rW'oG +R_r))[+F."(h?/F9noFG6Gh3gWRnWFNfW^h)S#nWFossjbJg3B{6GkNw"rB/&?G{ZO*r'"s#3?O/z^2n+B;^.'~.K.fj.['.vV(XH2&/7gɹ97S#33Os ~Z^V־ƞ"GАIx1yqA +'GOVv3?Iwgo&jkoZz' +^3P,(y᱁_&3?fh(OG73Nƻ?Wo'.&+7nLG@籱alji2:~+iI )vWbh)''9)3rWsqGV~"HxHkWi/9IsB)i7I9Wg.2{;)H\x2Y'wс8/8ȳ7WgI ֈV.Sgw7w_o_^.o_,pkWSA9hO* gz.z(hNwןg#{OsC? ȸ `cgsWYs?OfVrZ>7SCFF΂OG7GS;Cgoh 済GSJoayg_Wrz6[b [>&r^6[O3wgO3++HHh"ki7W?"2ˋr:NR.K3'G?'?'/[3RRN(V趎Nro'Ww7Gw_sc;N2n +33+S/CO?_n8V ^.Zyi7W7 3Sc&^{>~zc&r+>Z ~NRZjO?Ss[[:B Nb~Nnξr ++/gǷg?kjjb.nZ^&^B?'ǷGGgg_{:Z""z2nRrnR>^R"h6^n&&"7w)&&N_ggGGgS'??gLJl`p`p Caɉ1COFHVxk'W!IoNFhr;c{gs[F7ssFff&>.2n~>>&ff.zs'GWWWWחg_#sS''_osL08qaarfn2ׇ~hh886Ƿ)iGs +"B*c/??#c?` YYI7yaCcg^7i#/^(6R2燇/_;j+/'_Gﰬ HV kS)GR_)?lj'rNzV(F~rS?3S_'?7G'_J@`8(8@HR 2'9y)wiO#Ƿ'g^F(^z:o?_'___c@ (x hf )/G)Oii/σg?&6>(vj +볟gGg_[`8`_9!)ǷojRf&&&2J[ϿO##: VVF_i W3:zCBfn~>Jbj[#O c3+r222z.^(V>ֶ'G W77Go;K+2Nξj + +[S{+;jZ.r.nrJr~rjj"___ochcG+z2~f~rZNrcbs{RsknNRb+jZ{3b{Zzj۳ ˣ[nc3*OJkc +JrKBJ.>r;;B#j.{+ښ +sS* +jRzkB{K+JÏss; O{jk2zcʣr>"jj CK*c z?S+#3_O6^o.O[N&"2+b;#S2gfOK&3j37rC._.#&j[SBb3&:N/N/3*{s^ +:.&#Z[o&bs._cZKS.?~SN OKÇzˎo_n*w[+^Or+jKJn/".;CR'B&^s#SZf&z?b'gBz /K +*sJbb2"z +G;:NN.Z"ZZ.RR:.[ +bbkk:ʻooGg'cs +Js;R^.b*JS_,ll`!ٗAioV +RVSIIW+Z2'j:G׏.' L$$i)!/X8cwsWiOVx CWGOwgoCs3SW9 $,3qyWi9AwX0H*ɹW3)I7&`@7IɗG'z.co_) !!WYIVY!IGoi)^XwI9)// KKʣˣw׉i|0Ɂ1AIIIYig(Xz9!G'_dzH ` hf^_WwoNj'g))WW)Ȍ@IYA)Iwiy_Ȁ6 aAY?O2Vx` )7z2swW)׷LJ'>lpoG9 i3CƘ^I鉗OS68xN7w7[* Kˋ3c__+`Vr^sw'?wo'gr^^&f&.Rrco___'g'_'O?Ookx((XONOwI WW WgS.6F&~^.Z#?_G'_2xxh[o299ii_gCJֶff~J[{s?'G7g_?VȖHhs)WiWIwG'_jfƖvvf&B +/LJg'gg_?/S[VFH(X8fFi)i I)GG7'_OΞvVVvfn.*3'G7/svhxHvvbχI9 9 G7gSn6vV(F6&~^.gǟoSnXh88`Ȇ>__WI9i)W7g.~vVVVvv&>n_GLJ'?_SSSh VȘxx79IWW)w7{:^v6ֶzo??GGgO/vXX X>_ yI)i{;R&vVv^js?w7gG_o6X ` (>B/w 9 )iW'{{hVF'g_w7))gs3_7wn `3IaY.GAGo0ضnW /IZ. IwsKdL 0)A iWHk?J(vaǹ!Ih6v XJvs*^OCi9)OSМlɁyaq& +vg9i K/¸ XHvֆG_GiGs:K/SowW7ڊ6< PXW!iaqs/HH/g'!Yig&ȸHظ6^77WOkkj_W )SL vpȉ/yIכȆ2wI YY7^X8~gG'g{RBk3ɉB8,X@s).aaiyjiGh8XVcSI7sN~2Z3I W)( 'r!a*F6Cs!! Iii (8G I)ןZR>#/iIi'vpLP~xO!YCsX3랃 W9).hFk_iIw?ÚfΛG)ii~h<6RAaA9gx~BəI{+ XRk WiWoۚf# lHBYW!)Ϸ[>Wjiyw_8B)) 3Jog'ǖp) X`9aYa!i3..F胹iC&vVhV#GO?[kZsg_l o YOF#8fɟۃWBs6v262'w/7[j:ڏo: Yh W9k&&+O7V>v_RSSۇG[S2j~~8@8 ((SW)))Iwc>/gj3zS^*zc+[/:;+RN^;^;FH/*w_7)io?rBcNJ:*B~SsB'^.N3>fsJsf ?gVfk'J)_'kgKOC?j2~B2n>cNF'+^r"_ο;n&ncf+Sz?_/ c^Gj_{SosZhV Zn?V6K>j^/.&r3f?6 'i[fS'F)i^G>o3SG7fV/')_Cbo։NC#wn2g +n.; ^gR'oNGr.gS&:b& +#^g6'o>CSSvWfDz^w&?_2sJsV GNCSf_rKC7B +NCc>R."C>wfg{VgJ:[;#>6O;FJCZjS2OC{Sb:Nsr'R;2>CcʿS^'r>2"":Bo2~_nfNg_;c; +csR +kBK kS;ƒ*/Co2 +J ;"JnK2k#s#[ۻ*ﻣ*Z*bz2 +J ; +J; + Cc#{k + ; +*Kʚ + +* kk*Z +J +k* +k+jkK [kJjJKK+ kJb ++{k ++; ++*:j* +Zk+ +*kj:z +k+*J˻Kk*k;;*kj k*K K *J+j*jJ +j::zzzJ*z"zJzzZ +**;[#ss/S//ooSs#*JZ"ZZZ~(h&hVh^?7i) iGWb#3z+b*zn*znn.j+ۿ'_^^8X8*^_ɿǁYWi)zWGN ~hF^so'7Ƿ''_?SȈhxH`h^;)y 9) W_w+2f憖Vv&~:ggGgG^hxH.sWwyI9iW?_jNFV(c#www'__SȈH`^>f{yII9 Ww7'oz^fV(V+'w7GLJgO>(h ;' 99II9 )חg+fV((Vv62+7777_/3z6hHxؘF^ڏG II9I i)O[RfVhh(VVF:'Gww77GgcKJnfhh8Hfn˟) II9yIiW'/&6h(VvF^Sgww777Go3 +"R(h8Hh2' ɹ9I W7B^6(((V^b SG7LJ''ocKk +ZfV(HHn?i II i)7_oR>^VVVV֖vRzO'77GLJg_/zr^vVV興~r7)iiiii)GgCn^FvVF^R;sgg'o/{ RN&V֖F&z[oWWWWw7g_S +BFFƆ&.[??O/3K:"nN~&^~"*o?_g'os+bR.nξ>>>NNn. ;#C3C#{kZ&)!v8ɉfio'Iǎ>g)orfSCf"*f;3^'( +`VBV)+Y!9ٹ__?ֶ8Ȉ/: G?)g{ZngGGOX 0NP<,Z8Oٙ19yˈNVXh>N6GƆ/6vR3_'C'3SC?X,,jHYYA1YGW hH>8; [Bor*R3/G7w/G' XvLZ!!q1Gǹ^`~hOwωS*(6ZOg3OꊟOhF8쌈w^9AqIqzVg(XH΂*?9ggwvhF( w K_W{Ϻ#[,&l'׉SqiI(.kgGVֶ~Oi׷'o+[GwLJ`|,,)aAQW~O&x/67y)wS?88f)iwgiO{Z#cϏg77|npAwC-g'v_Gy9wO( 6rj.I?G~/?<`0F!)wR2;h go)WrW9iGKJ +~F.7o))?X̼xBX&qGqa׾( SɹWfhVcGiZj/7'[w׋0 >H@1AwY!is8!wg7Jv8v6F&7W)_gk^&n"O''ǻ`^v8iyٙWր Fֲ!I_b"xhOb9 +Z7Gb7h,,h2`qѱWYI"C^f)Y!i;66SrhXfϋ)_R/>N7? j@l BH!ɷGמH#i?NVn__3n2skK3'h8&ζ7!ix8C?J )FN.f(^ZG_/>^2o?OC2`P`(^NfI1Y)HhŸ?C?7G_3F2ws:2^[o_3/(PvNIq1gsϷ?hNwgjFvV +*Z +bwsb~r#'z_/X6zs9Qy#wo hWi_ +'[^(rjJO7W)+BN?7cz[S,LP8^g/-- vÏx6I!c[O;Hngg??')i^β>J3Ǐ{ϣ|iGmmac +hIR.hx (RW鷷')ɷ#FF~zr[ Hl<` ɃmQV8sJX# a^C`H'WWI>6R2&)ɹ+/ZV0N! AmVH/H ֗in/'i *GI7&O~wW&&:a)mY6gAC_I wv8g6gy NG)R'nJRnR2^>^l<,Y1bWV'GG'2v~.( g_/_/#^~2#[Z #fn+3/h j(HɁyai +fr~Z3'&h2SJ;^RzN[^>/c**B"._Sg7Goۃo[Bb+jڎZ"Z:+ˋz +;Ꚛkj*+ K::j* +z +;jzz+[: j:j;{so[ kjb:j*J"Z:k:Zz+JJ{* +;:Zkjj+ kk kJz J: +z+j**ʊJ +* + ;j*+zZ +;K*kK:K* ++K:*kkkk+;{ :J*+ ++k*+ {k +::ʊ +jj+k+*+* * +jj*k *jjj+kK;KJ+{kJj+kJ:;* +* * +j**jʊ+k+j { jkjk k +:kj +kk +* +:k*j K* +ꋻjꋋ +++j*kj*kj*k*j+ :jkjFwI/n?s"#;.n&r +/.FZj*kR^;o2s[ :h_i_" +rJ{[kzˋ*#["2;nk#c3B#cn#rC3cjkˣ{j2bk s*C3z"222j +#*#z꺂CJKs[*Z{jzNÎK +3Ξo":Rocs.*+c;oRZ>B;sbj* kB:bz*ckJJ*3N#N &.O*.BC{;Z[ +s.nzsSb+Cz:#cۊKb2JB2sZ#[j +>b*ۺʛ/[j3/ +z+"; bKKz;:;jjRZj ʻcKK;{:jCsk˻#*{JkZ +{+"˺ +; +b"bZ"..*Jj +"..BRbj[sgLJ'_'oo;;sc:r:..2_<h6ׁ99y~bZ2zG7k2Nr>Vr_3cs_SjB+r^>Z2.BZ:Z&f~nr"r.+oO?'g_?OO/s{+J"bnnnn2" +Kッ3/Ãã{j:Z"ZZZzʊ;K K;c3sCˋ{Kj +JʺJʊ +J +*+**jj+:z+ʺJ*KˋK;K*j;K;{{ k; + ++*"z +::jjj k**kkJk;;j* K+j*kkj*++*+kkk k+*kkj + +j****jʊ+*kk*+*k*+ +*+ +++kk+jjk*+k*jj닋*++k* +k*j +**++j+kk*kk+**+j +++**k+++++*++jjj***+닋+************************************************************************************************************************************************************************************************************8SJF: r_.6>rv.[?3"2cκKK[J/gf +oS/ +kZr_.o2? ;*k2O# +2'J&bʣ[ڎfo/r//rR#_"/OC+*3/J:k2RRNsk{+j# k ++;JBS #ʣc"N +KC[z.n* + ʛk3jR2BJ;*;s+jk+.ŠSc['K +c"~n{/z3*b.;/J+{S/'*r +*#*"+[rrKn*cr.~^~/Z2.^J*ogggg'Gg_O{s/{k [BJZn.N&^&bBVliNIᗈBaY)"6'YGZ +v>ZRBOOcV*.j?2ns`, (S99_!a[IH.9*~o*>bnωnHg(K{vz$[fY-:xR996၉NO'zN'gZ#2>{.~.j~;GsN.m xag9Vk翞&rxvr"i?ƶ)W'g_k;70ىh=2WI`A'^yI2(~fϗ@c^'IךgJ)bB_s7i|I)/}>xC/xy1 gf XhO'&)/֞ZboGC'sR"2SWǟWd$CcW=a(`آ +ph1Sv 8sJw)Cj&~7coRrZZSG'>yQ=*HXϢ@aG.V8h +6ii:s&>_'3k*3{? OW hܼ^m/7"XgijÎF*rfkrCj#G7r:_Wl|l B_Oɭ)CR'&KsW#2&'_3K +K[ 'g3 +2n:S/`^7awGsRoG_?/37;*(rbsGcJbK{*#R:'2Bc[j&r;+R(0 VFr7iLJ'wS3gS_/?3+Sn^{oCb2;+2"3K"J&RR2>bg_''G SS˚3ς;#n*;zns:[&"R⎂jkcN^+k __oO#sc[?z+;o2?sjzN>:r澺 Z{+&k*ۿfz#O'C#s#S{[sC +*#RnzKžNfRr{&3C/K##r:BZ#Srs#c*gj#S3bnsC +NoN2>Rbjjズs:j+3c[/rz3jbok; sj?jr>csJB_Rz;R*J+:"j*b/RkJSB?/2"o+ZK:+skꞿ'"'O.Jz*^ /3csZ. +rb?^'n>bB2G22o~sOrk2N?"ϾZ+r+>s?;2r2"s3n?2c/>S˲zZˋkCJ{k. +;2.j[#{Rcj#j*+jCKzR.b +CcŽ3b#Kz+ #;2BۺKkj["ˣJ2k+zZKjKj j + ZKJ +ꋊ: +*: +:zkkKK{+K3{[j jj+j ++*ʺk kk ; k;*k*k:*k +Z"J +ʺJ++{{{;k +j* + ++JZzʢZ:bzjj*j +j[ KK;;#Û+;k:+ښ + +zz:k**k {#{#S;j[ZZ"+J+*kjJ{KkK{k#{""j j:jzJJ: +j +JJJ +k{+*k#{kkk +:+jښJk k* +kJj + +*k +k+K+;K+Kk +j +:*cK + rZjۊ+:Kkk;{ KK ʣkZ +jjKJ :*{: +KJJjZkj2rO.cۊB [Bc{"ZJRBο*R:{RjsnJcRZ&?jrVs*zZnRS.^rS ++O?/fc+s~'^rS&_+rC*c:sS2nS?; {j+&2ZRzBRbˢj⟖_7jS3C;r/7JjRF^BB&3fi)2ÃCr(z2/^iG2VB(s/_/://*&/~/sR^w跂#_S_~Ksk2f +*N3j_vR3.grkrN ϛ/fsO./~n3>f/?r+orsJ. .o[o +2o*#/RS* +N B*2 Kz+"3˚f;c ʛKK;*kK:KJ: +3Z["3Zk*:j"C:jš+c*:+J*K3;_o;Ck: +2n:K (fɹy ?_?Nr^F^~+*"sS +[ +[S;o + 0h68()ٙ *j&R&*n.rR b:3{Oo_SK +*Fhh^N77iI i_s:Zz&>Rj;{SoS/so3o?_ZV>^xW'J yiG[nfòcSz Rr+r&~>Z?o?g_o? N>>nr¢2.:J{sS_ggGG'# +2Rn>N~>f6f^^n:7w)W_o[KnNβBkjoo#B:h Ȉ{k9ə)^(^Fz_'/CBbN>f^Z*?B.~ZS/O/ڢZr""Z22r2.n.2b: O'gg'?+"2.Ύ^ξ^&N>^>>Ύ2"#?'7GzZ22nnr">N~(f8^sǗW)IW)KFFBڟgG'oS +b*/O/'gF08iiA7'^(*fo?Oz#&(VVr* g7co/k: + ++{ ++zVX`gaiY9:*R&K3./Roo#?S;j>;R{/006(>>yəW'cGS.. +⎞kzZ +Z +3#*c/"3FKf^n.:~+&`h6:'.iiWGy)s_K.BΛc" +2' 2"z&:{Nr3n~kk.ڞ^.g*z7_?{3o.R;w;.ǢW^*:*NRRn'_;&oR{w;F??~k._^j +׳' n:gGbihHF&ڶr&6Ώj׏~{ǾWfznʞ>'W>K nn7 +Gf 9 n;;J2^)8ט og6Jh{/>BN_3ɇg.grGbRobV'F)O&on_&FXG^>"3VWGjrnG3NRN'ϳ~ Jr7w'f;)8.VJNJ7C' *gJfJBf h'gksF'bR'>Kb:&wR׆"F'/[_F33(rsN'[g(v*RK;g6Ǟ{?kkjGR3ffWH+bF~gnHH^VVfgW_IWC.jj?nrnzʾ6nK/Kn'?W7ZG[*6+~ +;r㐬x@Rwi!Ii?~..n' 趆_f3OO?g7ǟ'[~RsS{))LLh0@y9Wq)WWh&CC79&Ώ`V⇂Wɉw_RcOG׹hЬA1y1?&X{o{iy7&XOgIW''뚛jBK3_w)x0XX yٹ 1/ڣ6K6+ WO?i'>fF踖K_j#;Z*Ss c_g8 ؈v8XniɉWWa":F^NǟJSOorf>沿zOsc/c/S3ۃKOkC8hvNwG7 sKs/k +nS3k:#:~f.2ʻ;KoS//3[cC3/srظh(hFwiWGO +ooc.BSrZ.^&NNRj:{{C/o/S3[;뻻K+f6(γw7ggw)Ww3o'_Oszj33;:2~^>>>>f&nb2b:{//oOoS33sJ {*r6VfVv.ww_wW7'Ϗgosj{:rn&N&"ں 3SOS/CcK:zz+ VfvVW'iOO'K+[ n~>&~N.+oOo//33ss[{ k*ˣC bf趶6VV )'wɉS'j:CúNf>Z"j{s/S3ssSC;˛s{rXHV(s!ׇ)yɇ+[n2JS' +^^nJ:zCo/3s#C/CsoCˣ32 Vv'Ya9INvFRc')'(h('O7/3 + 'oC ;ON ̰ HnwA!I."n2w9I /{(xX`vHI)bcgww73N.2$0H)!-a1r#h((G7Iך^XX I oo nKWw7g&NNxhᑱqNx8Vgin8 HjWI)W{F^J⊟SB[n^.v F@nљ>NؘV/WW*hHVxHZWIi׃jJB/gw?KËnNZ|@0"!!qf (&:^Iə((x(h'w))g*kZ>&Jw'7w'/ ~nb>@pyIYgI`6 YfV`) )SN2~Rg׷7's:r~nְ<&@0)Ia1Q)Vh 7 IG6H (v~.)s~rn/W_c*>flL昐K)a!-SHh8v^& !YGWKȸXx2wIi)G_{Br&n˳Ǘ7?>^&vl0X!Y-?vFH^Fiw9y)WG#8H8hwGIWg//Z^2rCk__o+z~f`Xn9I')/6:b_O''.^~f66>>2j#COsOoc"+ϻ;#k:(xVxH^3WWٙi'Ojk"‚nRNΞ&~~N"[s3'G'矟3ckk˳+Br+ `Fxg!Y!!I9){f^F&.nj2Z>~fNN/O'7gg'O k+b:[Jz +rXx@HV־Wy9iiʲbnfv6rNΚ:R^nRnnjs/3o'ǟS;k;Jz^hH؀& &2i)!a W:~N掖6:.枎+nN;J_G'OCs;+k+j#J,Xh oy!9aɎ7h86CG2C99';&fXH6Z)i77'^2n;GחϺ&ƶ LhiAiaY Fg(Ɂ!Gy7``踘Ɵ i)&.z?7ObR. +Hho-! ' (#Y9w'&&`@~wI__sJr~nJڻ_'Ƿ___ϣ&^"z`<+Y- Xh>wg a!:fhX'lj)[n"bnGG'?JRb Z;>ё9G+()iW_鹹WCfV8x8{gw/{rJzjOSrpp8"^9!w.ffo/S_g_K>66v&2_O??+ ;j+[[j+.fh(6fF^Rzs_gW)iOB&6vF +k3O_____?o3sR2rnN>^^VF(^ +Og7鉉i)Gg_OË:.&ƶ666vv&> +;sO__gg_o{JnN>&vvFƖGG)ii WW7's .~^6v6f.2Z__''gg_?skj:nNN.&f6fFf.Z 7Wii)wG'?3&fFFF^N2: ['__C{j:2.R..Ξ6&&fκo7WWW)'o3*:Zn&FR{s_?3{ʺrRRRRR.~f^:/'G)WW7G_osJ"n&fff&~Z3//ϿoS/{*zZB2rB2Rnn^&&^2{/_w7g'/Kr~^&f&^~:++k[C3/3sC[*:"BbڂrB2.~> +C_777G_SJ2V'/3kf&N:)G'^V^ZzZjc;n8(?9y2&&^g7on^ƶSc3/3"Bz3_'?s[KFH,쐆W9aqH8+~~ +G8 ``hB)WW:O +3wCβ3s n^Nz PW9)a1I88&/>>KYV8 `X6)WW'kJsZ~Ûz2R3Ȱ9Aq12n)!a^VF68 ƿ)ZǛfV6NC'/cG^.j22'?j(8`xF'Y!YI G&Vƺ/gG7W)Wfȸ~r'gK"rRkSOosRRRZ뛣{jh `WI"vg'wG&(F.>[__o"j" +{Sc{JnnJ;[jz/rX0 7ى99sfNg'3ogg{f6&zRf2o3j"2/+k{JJ"2.~nZ*b {F@؆WI׷ 3W" +?S +?Z&r. *: +c3JrZ {ξR2r+;; +J+C[([7)7?_?[s?77J.rjk*2zB>bN.z"rbZZʻck:Zz{Kzb2r23s/o?C[;;K*rnn.RN.JJʊ**닋 *+jj+ k* + +J:Jk+k{[CC3c333c{K+Z::ڂrzzr2:ZںjK* +*+: + + ;*++KKK{; K;Kkꊊ +j + +j +Jzjj:zʊ +:zJ*k *j +j k*j*kk kk k+*닋k*k Kk**+k k k+*j +**+j + +*++* +j**j::+kk+*k****k****k +jj*+k++k+*j*kk***kkk++++jj*+++j* *j******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************* \ No newline at end of file diff --git a/tones_american/cause_55_loop.isdn b/tones_american/cause_55_loop.isdn new file mode 100644 index 0000000..eafd07f --- /dev/null +++ b/tones_american/cause_55_loop.isdn @@ -0,0 +1,330 @@ +*d}EьDH$]aCZon :S&R3R:Oˣ^:^gC?>bo2*#&g2.s#_o2/o:.S2ogs/jsk *Jf{"ڻF?*J&^Z>+6S" c2rRw?/Ǜ&N_Ns./^ F3.Grw2bfr7V 3'V3ZsnG3n*G/ǎ?g^2>'#r? ++Nvn&^wJS [&# +ז'2&R'Oi6N &nnFW^ ~&w>_3gwfK֎cnrw^o)(z?)Oxx^_iVsnS{^7r33ڏv(&F)V9h.Oc/^WF^Yh>?&^)8Inaw:^3w&_crn(jf_y8ƿv~z.h.^GGf#>o?6Sn/G ƋBgNO>ny^)ZVFr2;VNsi~ah~r'c 2hfw )Iz":CW6G2R8ψ^xORk(^Gg~'3 ։R)o'3&xcW'IföBK.K~n!;Ix'菷G֗'HfF(7G((8fOs:ZþGCXix?b(ɣ'ʗgfgSFB'ffI[w;{#NVw~ +)&S9RG>fV鶳~Zvv38_N(O&i_**(72˞rZ'(b_Z7(+ƟbfFh2_o#C??;{sf.'k*W[rc'3r +oV{zVc{_ +j6/Z*"k &oFJkK_B[O2^kS"zsk .*Z{RR~?b.3k{2r{n~:[ڢ:Kr*{+ + s3 +*3k[ + kjbf3'z W'@VFO )Ϣ*?#.sgw7G'Sf,|< H!9Q"(2+IaYG^>((_)os?>&Nwǟ <оi!*xx6NƆjiY!/jZ.fg'g?Kr_? ,i!qQ1ykh.VViWg/2FFnۣ_*O#C' k; qaR*j>(~ow'_gCB+z"ZkSOSK?_sh~rIJSn(Ÿ_/_'3.."/3J+O3?h`@`8ƆN9/3?^^RoJ ?3"*{N.[*"2+/oVX`FFoW'?'G*B2ۣKK [[{Kk;+ +z2:BKsooo[FH8FnGii''o2ZsCûZ3*j* +:ڢJ Js//#nhHHH>nbcGW)7'_LJ"++cۛ: rJRBSCj88Hh>N)_s {;3;* +K.RJj:"SS3?RV86>~ +'G7w#KJ3{[*bJR +2*gC"ذ`~&yGRvJSs"~'."3b*[j "/*n)OP@^NAIWy'6v[Ƿ';_' +RO+~og;3G7l^Nay(~n{2#ɟKogojNjs*nL C Ya!2(r?nÏ NSG'__ Cf{&<0HșG!! I:JΣBnW6Sɗ/:{gV@@ Hh^Go'ɇI99_3g*6wG"gK +c6k6N^+rf +7wGoWkB˷Zncw?ò sڛ/#J^o>B"^^NV22^/S +/sGZOG'N__s;›r&Â'r?*绞R7~/ξ.FfnBKKssr_o2ZSR^ ˢNi*/bfW2:3:jf{/ZGKk[{^˿Ƈc~f/2'Jng+ +~.:{"^g +rgFZ_&oN^*?3cnj*"b'>3RBRSSvsVnSj(3Krf/i2G7O3>'#cRo[/R +_v8 hG3GVcSSoַ/+ssN"G3 s3*_>" +2~KBR ^'..b"g67*GJwic7zc~.*R&sG/GCon +/J" +kz:>*n +n{sz+?_SJk.crr2kzRbn k[+o[oK{3[[#;onrFZ.BS/sc{JʲZ+;3s">&&:7GָhFwəiG7G'r +s'w{RnfnC?O/S[>Rzss ++2"r2Z"#c:b"bK+j:Jj* +{KKk+Jj+k K{{ *: +***{ +*zʊJ +jkk Kkj* +*+*+ +j*kjJj++++ k늊kj +jk**jj&Yٗǃϗ;VHB?njvhȆGW7W?&S^8WISsFZIRL0&i!y_(@ f! )iW xig{K +&r_WW?#+k +^λ_G".??O +N&Ossc_G_cc{ +r. +Zz{v@P؊Y ׇW."gY9 +vf&.>/'7_Ƿw'#RA)_7oX` 2y)2SJS'''/zN>rR"rn.r2+[kV,@Hq-1h8(:KgIj`^采&R:˿Og j[gGi) il|$xMm1O^`g iYy8p s!a2 ./)w_C3_ bkjgG N:û&6(ֆ"_7W3Z+sGwG_g)!аLиqɰpF!YY'WW!o`a0Nigk{r_f(H&{hxV_Gwk/snvfWW"^g n.B+os^rg'&n/;:Jۻ"r.2fCy!iHhG7 &^^^F(&Rϟg'SS۳SoS[ +Z"r33jsOg&P@1Q80(r9I))whxaH8vj7wscKk+r~6vF>SiןR6((/g'cr>kcK3oKz+C/rBJJ2K/H (yΈWI'c{k+^6F;)iF&Bo7_)ldX}`̬I1ىG`A`# ii^Rr#iwo*~2.knnRz*_7i8,M AVIy3WW K@(aqx`W)f~:'__)p|I ! `V9Si I.x 8aiH WORR*/'2?ƌ !m `X7ږ`؈v)'^&OgZb*+oϳ+[3g)(̬̌^Ym&6+nJ'Y3>xhSחwrfBr?Ss*~*c#k*ۺ+c_0@gaٙY_~csZJbc*ں # + ;# 2jk*bJ*:"ڢ:js/#CCo/kz +JJJJjB"+k+ʊj+*J:jk++*Jۛ*jj˻KK{#Kk*Z: +JJ: kzZZ[#K + +*j:J*;jz ++;ۣ JZ""*j*{#+ +ZkkKKJ + ++ + +KK jj *+jJ*k ++J:jk{ J**{*+ ***J:z*j+*j kJ{ :*;+j +*+ +k+JjkJkK zZj Kkzzk;;*˛ jzK+ +Jˋ늚Z  +k++K* +kz:j:"ۻ " K":c+K[ +J{*Jj*ºzj+;C[ +"+*jroSKB2˺#S + +:K{+ j  K⚳ "[zkj{# +Z[ڳ2r3r[J R/ RJZsnC:RoZk[OJ.b{cz+[k++s^KZzJ{j> kczϾS/jbZ˻_j2./':#kC{zc~fk2n"3+{/n&jB +in*s+COƇRR:{C^bʢ7rOGs.{3G3Rg^{ cHwƞH)NF{F&N&s ;k~oR^c)^nkSs); wKkv.aO)83~Wn>ȉh*0oF`H*I )(>X[9!9Is `7Cx97#~ 'xivz~FH)>ZW^8afNr{2gR(ٞ{iWXv/Wh2 džixi_68_iCv)wZ H'[!NHO&./ؙi>^S FH+wo[)iXٲ7ikx) +fOh7'O?wc>22sGNr7Os.W*FgvO(OF ['h'WFgfViV/g> f^~ + +g~GV(7&_J.#k*b>B*'sNkn;_GR{o ~+g2+/fz&S +s{_J>no3s?^#KR[_~ʆ'n +*O.J +sz#j2J +sK"b2/S ZJ+z:J{j:[rZ{+r3[z[ck [J[k;k˛kJ +z*:bz+z:::zz*j**jkj* ۋ[K[ۃ#C#c[#KK:J +Z"b²22.2"2r.R. +/O_G7ww3KJ.N~n0V f7W!Y)i) ׇ'ϳO +FhV(nnC_777w777GP0ȐP,W.יI9iWigOS&xhK_'w7gg080Pxh'GʗIa!yy)iy iI[^x(F*/''gGǷG7GgV@p(_WaY9y)iyiI狞vVxȶ((R??g7gWWg7gP0('3 yawiyɹg 7ff(X6KO7G)GGǟ3r `Xp `VVΟ?i Yyy9 y9ɹ')'hHhj'GLJ7GG_[@p @p6LJ'iI!!yiw9I LJ׷'>6(VhH(&gLJG77wGg''zp@0@8(RGi9yWWɉɹiG?~6ȈhȈr:#_gG7g_K0` 8(Gwg Y9yi׉W)IWSO/N(hvS['Ggw7LJי ^lB V!hAJy36V.@@`?ڞ:w)g:kgw7)Cψ|d$L: w!+8yQAၙ `6 ? wr(biIoig.s$AA?0p?GWh!^+iwR>_.{!Jnp< aA_sWwH8GazGnw&&~)O2 ?GyI$|1'ׇ?f,Gh 'I2oWrngG2gI!99 8|0a1YZ x)!Y Wigff*_gh^SgzJ'C"OGW)y!,L|iY!1ƙ{ay(Hh:Ëh+IFJ "J_'c?'?< YyNr6g6B(wFb_z[76NJR/+7w8,@0i&R9a6[ ^gcS'_2Κk۲&~j2^~c +s +[#sZ"*+BrBN~ 3c/o'sCO3jC b.ʊbR¢R&~f&N'O'g_32zkjrb#+:+C#C {[* +*j+ڊ +ZJ Zc*Zk{#+K#c+Z"k#*z;k j +zk +*j+ ;+* { +z:jKK*zKZz+KKk +J ;ꊺk ˋ+ã z+Kk +J{Kj* +Jj*;Kjk+*+ +jjj +j: +j+;JKK;k ;; z닋 +*K j +J ˊ;˛J+ +ʊk*Jj*K;kJ +k+k ;zjk ++ kKj++J;j7b"rzjcJ";*[~CzS*k3£*:O/sJ3F_ˇoʎ>K/[ jozskNV3#o'':?c"B:.+JCzcJ#:ھ{;krjcsc+:3~R2s:KBrZ3Z::{ˊcK*kKZj{ +j+ +KZ*#ۢ+k{#j+c*J.**z{2;+{*KBjC{KS+Sjkz"JBn2Z2" :* +zCJ j33[SSS/j"k.RnR2Zcso/oSSS//sS//sck"~B23;JhvHȎ#)g W's*.>[sϋBnf2z_)Gwi7ǟGw`@X!qiAYy&ƶ*s 7S(vhHVf"gG?'o's/oOsσ[s"Bk*3 @6yYa!wfNg)GG7vF(Ȉ&Zg 7'?/??g'''<`l0,g!iYbG& rn)iGOVhFG7oC*k/cC Zz Xx.Wy)iYY'g7WB6B^>z#oO?3ʂ2.rZK{*RVȈV(2j;Ƿ)ɹ )WW7_K#+b>.n^>..j#3 cs bB:R‚FhF&vv(6Js''iIɉiC?{JR2f^^^&r*j;j:"6(F6s{ og')ww7wW'g Kz.ff^NzB: +:+^;B&>^Bcg7Og/3# ^&^fƶf^^&RB2"ZzJkCs +K.;OGGGwG''_'o[ +~^ff&>N.rb"j s ZK[nR ?g_g'___Û+ڂ>&ff^&&ξ2b +j*ccSo["J*.r"2bK#S/_'_??Oos:RNN~&f&~.Bz²kk /ccsk+²rz+/''OOoc>^~^>Rr +*{{{sS/3Kkkzb:+JK;3;k{C#[+*j*":r"b*"J[ +jJ{; +*ʺK;kj kk +*{ k{;zJjbZZ[[jC#늊J{3J+jr""k*zn*o[*ccck+k+{z*+zښBJ+*bʺJ[//s{#[[K{;j;{ VGZw)F.K&&c_O OWcrN.B>F>2*[''f˂^n΢sK. sSNGrjO"/粎.Cg .G2F';vg&ַ'ZW6'n/‡ +s?.R ^/G>*^s;n:ÊRS:s/..s .onSb+KkjRCoRc +ϏRzۻjr +cncKrJb[j2"J"ڊ2j[Z{k;O_Bok{.sBR RscOS>JjO{~JO>r&Sb/kRks"2so>˳rs> +[.:?n#N#nR+s*/2oj;:"S.SR.2k:k:BB + k# +/:3:ڳ"bcJ rj { +rR "&{so:*BRbBz+jkj+{{{s3/CC3//c +Z"K;jzkB +nrZB+Zʊ2 +º#o?ϏOCC3; +bBrnRNnR2.2n.š2"N>r+?G7wGGg'_O/3+bRnnRR2czrNf6hV|(v>F)m1W1Ï"9iWw'W6f;o"÷'+ [?oȀЬ@xh+y!a)33{GGggFn +C3{{3s#;ۛ;㣛CSS/ϏsSosnVHh8nrB)99IIiW7Z2rƆf>nR{#s'gg矟_sk8 H(ξ3w)I99i))w/j +R^6vnÃs_g___'g_o?C:x8VNNWi IyWWwR&Fn2n/O'___'ooOsj(H8> I9yIyI)WW7G_{"~F6(f&B#/___g_OO#6H  8B>iI9yI)WWw7Bb&Vvv6^RZK'g'Oo( `ȈI9YI9WW7ǣ&FhVvFjco'g'''O{^v x`v#R?ə!Y9y97;n^^HH6v''Ssog_'_ok`|LKQw/j!Ia_(`sr>Gg.7__{S7gO/_3k:6 P03'39V)a) YHX&h/R'fOGS'w""OLJ?/'^&2f \)GA{ȶS3vI)yVVgBh.B.f+rZ?7g;>&:f( Gi'h^[h(G yf_C^VVf&_/_S OO??O;^Ί>hX^/yA;v +oxFaaə!If2RV66fFv_/'Sk 3O/Os?[~22p|/2ɱqA2V)!! ayh"hVFRf~O_?;#?#[O?g&fJfn1qϟ'fx~w9!Znfh^&^zO +g_{c#s2 +^>G)WWksG7_[66B2sjC cS#Cs s3"s+rHֶhhFJzg׹)WW'' zN^fvvFn2s?o?__3SS3#c#K"n6xh8hh:Gy i?'oj&v&~b;;3?OO'gO/C;{²rrhhF¢#w7i ɹiw_C3Z2^f^v6v^:3_'''oËk*+"B..>fƖ(6F&Z;W iiWw7'ocڂ^ffFF6&2˳?__Os#cCۻ+:r..n~.B.^&^~2:gGwWWwG_JRn&&ffn:*/O{#+"rR..N.nnrR"b2brb +jSS?_''ockZ"2N>Nr:[/3o3Csc[:z"2.RB2rj*J*{{{;#{ Cû[s **:Zzڢʚzj**+ꊋ +k*; k+ +j *Jk;+*++ + K +j *+jJJ* +:* + +j+**+ K+ j+* 8zɎW~kS>3z˺2GO6/bjBkRb;/oúczB#.;RJ#n[r2~o('S_[FRoNs'>Z:+k;[C[3JrcCNSJn3SC^S"R: k +2N+..:*{O//3SCoO;c?NNJ2~^S"ZRkZJ>FHkRiWI2Ώ+&^ r:r{*#s?soo3kkRNBZǻ/ 0` @1 yaQ1!s?28ւ3^2w )7Ok(Vf&6Ff"/ovg_+)"WS.S. +F(hX HrNoY r&Rozn^n.+sC Js.[C +ks:{B B~fvvf>jW)S{z:"b""B2^rBn#Ë:33{S{ +KsZ"kZkZjbJBBn2""#/o/3C[ۛkzB2rRrrrbz +:++JJ + KKK ꋋ+J +J+k*JJ*jk++ ;{ۛK;++:ZzZ" + +zjj + +ʊ**++kkKKˋ k+ ++*k˻K+K{;{+kk+j +j +J: +ʊ*j++ **+**kkkkj+++**닋 **+*zjkj*+kk˻*jk +jj +Jk+kjjK ++j +˻kz*j* +*jj+jjj*kkk+kKk* +*닋kkj*K*Kkz{ +k:+늊z +*j*+j ++ k k **J+ k + ++J*z+ *+* jJ*+jkkK kkkzk+* j* K:K+ j+*J +j* +kk+K+ jkk++j*++j*++*Kjbj Kʋ++;k*j+ʊ+ + ++ ** ˋ*k+*j:*:j:ˋ; j+JJ+jk: :+:+j*kzKKzZ[k;*ˊ*Jk*jjk:Êj; .{+;:*;Z:[cRcz2CJ[J+/.>+/'rS)(wn'B;CRk>7~nnOr'.cZcs;'N2c ~g~s + +b +#:Oڟc:R fOb*Z+C: +S 3.; &"_b+'2Ër'3z'G~K&3nO>>2:B fO..SBs;+b"2j[*B?j#NK*z +##snk+J:CkZoڃ*" 2BoOKksS2 ;:jk2*ˢ +ۃrk[3.Z3;.bS +ZsRCj; +K"[òJc.C_/[>R[k2j{K3:":{; +z*{k:J;{ * +J; + +:늢jk K ;Z K#[+ +*#"K ʚ +{k"[+b[#{[;z k:K + +j * +Z:{j˃:Z+j ;K+ kjZ+JJ*{j+ ++zj뛻K+:: +j*j +[{z +: ;k++Kkb J;*" jk;k kKJ +jk ; +:*{;kkK*j+* +J* kj ++j+K+* * ˋ*jZ+KK+*ꋋ:J j+ +j +*K* + +J**j** + +k{+ʊ+*** + +j* + +{ **J:J[{*Jjk*j +*kkzZj kj Kjz{k:*;jzjKj +K{*z*jkkjJ k** ++;* +** +JK + +* k* +*;*J;K"˻Jj[kb{K::*{k+**++ Kˋ +ˊJ* *Z +kK * +:*++*k+Jj*K+k****jj*k*j**j+K ++ +* K jJj*+*jk+****+j*ˋ*jk*J*+j*+k+ +:*K;K +jJkK*j*ˋ++ + +Jj*++*jj++ʊ {{k+** + +k;;kj + +J + KkJzJ*++kk kj+*+*+ ****************************************************************************************************k;kjJ+K*j*k+z + KJ: + + ++**k +뻻 +* +* kj+kkJ +:J+++ +* ++j k*+++** kJ+kk*ʺ +*Kj +*+++jk+* **jJ ;;*** +JꋻK*jjjk* + +* Kk*j +*j +*++*kk+******************************************************************************************************************************************************z:zzʊkK;{{;{KK{ۣ[#cJZ2r&f>JCcZJjK*kSoos#[s/S[ʂrr2b2.JJ:+K[so/ËZb ++*RNNn" jz:{CO?? b"ZJZ2Vֶ'{c3/'g'?S²2r>^^&Ɩv#+COOϿ'3/r2+&Ɔ&v6&&Bgg?CO_gg_/3Ckښb~rvHF^O.ZKGW7Ǐ z[n^HyinVNW׿S/_, VqAH ^#(IB)y _2R)WVHo/~3 ^ƞgǏrNK'+zcsN~oR[{j[CjZ{{z 8)M(0!ws(+FbBvx`wI'j{77o?_Ck266^VF9miiiYIy)pDļYMѸ3gvpmm&`~Yf+I^`()f'G^_)s_'糲B ϳSgW7Ͽ8l1X!Bn091Yvi'((R)3Hv;(g;Vkvin?iSZb7O +)$`60ZrəHF 'N3ȸV&HRIWf׷7 /??3,f&&^f{Sss3oÃCBڢ2.^nnrkC_gg_'?ۊzn.Nrb*[Sc ++ ʚB": +2Jj:bJ [kk ;#[k{[s[#+K"xG// +j:Bz?ss{O +:B.{JZJ.z"*+ +rC[#*3^^^knR#z+k_)k{?/K~/#fwzۣ"CRJnBfgWcjbjg +'^OwRRc'j*GG#>OOgfbKSSo;ϊ.:o/S_G +/&h/ +R#6.h>'_O"bzGS/)) izs_ +wkXf~)k"(g)fRfRBʷ#^.h''36 +2n.jOw3K>&//W&RO_~^;/^;^B3bw& +c[/r +z3/fNb+ g& >ϻ''>ϲ C 2R>f:Zo#_'O۳[{2"r"ZJZ⺺Zz +j+j*;k {;+ +{K*KK ˛;kkk* +*j:JJ +J**+j +jkkk kkk kkj**k*k+ kj +*+k+kk+K+* +** + +jj+ +Kj*kkk *jj*++jjj+*j*jkkk++kjK k +*j*+k+k+jkk+*kkj+*+ + ** +Jj+k++*+kkk k+j +*+jj** +*k j+*닊+k+j*+k++*+j+kk+j++k***++**** **k*+**++*************************************************fwrio.&;nN32wsOz.B~ڊbʇKS3CzSz2_r*gz>f&kS7_Bo&>*2r"rZn22Z;Z +Cs?_?3o_S?ksgSo +^pdvn'mq1a 6F86fo?S~.{g+??G'ǗĤL0h(b/-1YYy9 H6f7 i9yW+(83J7"nRJj '_GG7O''&$N!i 7Gv&G~Z"C/jo_O3O'O_s{g< &A- i9& &!)?'V.fKsrKs_*/{O'SoO?37vl`F)IY!Bj/riG.&6h(nn>rw7/c:k/Coÿ 2k.3S 6(^WwW)9g'Osj/S;/sO{JbNF&N;3c{ o_' vR>Z"BFK/'gO矿?KJ+j33B..B*"RSk KnSc&Jo. k?3BJ#s".R+B+{+ sjrKG2z^r"Ɔ:k>NgN";# +zrfO&brf: 3_+r"ZS'?r>[B+/3C^g._OG>v.w۾K[GBr +ڣ_23ZBj?g7?/6k^k.3C?O?kZϻ+&3?*o3[grۏ_kC>>r#O&Zof_B?K3.Jz +r2O6 +2b^_gRO#&.G +ƾo^bƖB:b.ۢ_nn[F*?&.JO2/^#rzCB.Jw/w~S>Os /2{^fRn/O +b"jC_OB淆.*&gÿKj+S΋bo.?cz>22cKzCN{Nzc/R˿Bc +#.c>sk >ZCrb"C~C zj# ++CC23#[s3o/#*#o ˎSZSNrbNR/#[kV`Hb +ﷹWYw)g/R&^:6B;?2z2*nSR#"2㏻`p渀p&Yi9g+N*Ozg^ 럷?cKjr"JkC{3*##`X^vW 9ai 'jR+{/+.2&~R&no__3 +;zz. +k3```hO)Iyy!Y9OkBbꚋ#F*6V>OsϏ/SbbkBNjBBzBhHhfBo7iiI99)?;kBb+j"j*~F +^F2n2n +c{[3{kZjb:."R2z2.J&^Ff+)wss/ "ʺ2^.B#N +?s:2/BJzs .._Zj2BZrrrB;sk:ZR +:s33O珏;Z [ K.^J2ϚK:^^ ڏ*nZSBr+[z/N+kb[Krûj;{jSJσ#C.3.B2cnk2 +Z[j2J3ZsۢZ[jn#+KbK/.sc{+bSk.K"C"#nNS+O +Zn[jn+O/[{#bJ?[:Kc +:/~Cz2nN_&3 +j#s _ +ʾNoj O*^J㲺3+^?~JsBJrC2? +jc2_ Ϻ +nro+rC3kK#SF+3bR2rk3 s.k [Rs;/:RN;N{+j[;*rK['s?.fK[ +.3/jSϋ곛*~ +ob2ZbR'.B;k_rs3rCKS*{2+j^bnK*_rCr{J +3jj[" "+B jg .:+S* +B?ﲆ'.nr.{s[CRB2Scڻ[냲R;JS^k +;;[RSS‹#J?"zBc["Bj{_&o.?s#>[s:.B3kS/.N.SrkSb.b+/;+ʻok>.{Jb.+ ZRB ZrnJ#s33[[o3 _/[soK2{.sk:+# fh̐yQ!9) n((f#i9)3#S_~(v'GSΎgrnr?+*_W7SGi6ld$,a!  IWƸy)o)^ֈ+g ZkVv*7:sjcO/{J{oS[o@"/GRR'_skcSc8_Wo7B "IAg{ +hh +)W)3^vhs'kB2XNa(β7B_gZ@1y)29!yWH+6HfJ^?)W.N_3RGJ+3Ê.C;3o/^F AaaWׁ!wXI)GIWFH&gK~FVVv[2⋻3Sso32r*k*OSc(̬8i9!YKO Bf^Hg3sSnxk?_7O +.K;o3{C;r;ós3NhR)w3NW_zB&z;zrX/!? h/׋6KǾ~b'*>6&fy3GA7fS/Xi ^^Fȶ/S'Nv&&N2O.z#j˻[ KrR.NNr2²BZ"BrZ soo?''3ss#cۻk +rBr2r2BJ˺Jj k:k# K[3 j:::brRn2 +[SO''_?o3c;+. +nRRn^c +*.*Jj *##JjkK[csccÃ{ *bBBZ2b"""b +jKKkۣ;KK;{;k + +; jJJj+jJښ*jj;{ۣ[ jʺz:Jz"j +J:++k; k* +kKk+*{kꊊ + ++ k*kk*+ +j *JJk j++*j*k*jjjj+k*++ +++kk*jʺ*Kj+k;;*J**k+ + +kk+jkjj*++*jj +*k +*kk+*+*+ +j*kkjj**+*+k+++*kjk +j****************************************************************************(nWwf2 rsJ;Ξ_cs s{*"Kj;:O+jrZz +CJk'[* +o2CKzKSzcj +RˎC+rzCR{cB?JnS.ʂ_noڻ_Z2+'KB#+JK2j:cZR:/2:g:nz[jjcrKRsZr"#{Z^z+jz2"noZ"oC[ +BKBo#SRZZ3S3 [n#Z.:czj[*#z.j{{ZzS[Knb+{j.cʏ*ò[kZ:cZz{Rr K*Jk*{cbó˚z ++:k +k;[JZZ #ˋ kK:꺺ZjK*KjKkzbz  b#CJ+;kKZ + +: + + +jj +뛛ۺz++;{ ʢۊ :b" CzZ + +*#+ + #K*J*k**kj +k+ +j:*;; *z** KJj*;JZkjK꺺Jk +: +;jZʋk* #CzB#;:zKzZ *k * +kjj*kj:j* k++kK ++ +K*JkKj ++*:j +j{#; +j{;kK+JK* + +J +jjjjkK z +;+*k+j +*Jj j*++K*꺊 z jj: +J +k *+*+ *j +Zk;;**jʊ+* K*ZJKKj +jkk**+*+* +kˋ*K kJ ++K{ j+k*jj*+jKKj***kJJ*K +jj++*j+K +:*;Kjkjjj+ ˋ*jj+ 늺j+*+*k+++** kjJ +*+k**+ +*kk k**+*+ kjj +j +****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_american/cause_80_loop.isdn b/tones_american/cause_80_loop.isdn new file mode 100644 index 0000000..2d6a362 --- /dev/null +++ b/tones_american/cause_80_loop.isdn @@ -0,0 +1,282 @@ +*d}EьDH$]an..&"RZN(Hxx66HV"bB_G)WWw7:RNN>2Rz#/oOog'gO_w)7^XVCw[iigWWii7Ggh6.?_GsS__w)iw) )I!h $x0Ay!Y7&?(WWA!ٹ(XP@(yi!y7?o7 i9ɉ$LLp`iy!9aYx&.Vi911a9W~8h8vv77 ɟ/:2' YiGgI<̰!v H8.y!AIiVxCSV·[sW3ǟ_ljy! W7)W7I($ L,'F) :bx6 yyy7?nvxFV'w7.ֶNswiw)IiI9 79!yp Ss91 gHV6?i!w6hHn +gZBv^n'ß)wgWii9 IWgGwa l,FNbW7jn fˎ{AyYrF&C'_Hov'`cS)93)yyii_wW)W ,|!ѱsx?IAA!) ɟ.֖>cǗG_z(&6&)gg׉GI 'ii aY| +rsH>&( ' Wˏi?' yI)G_׉IlP<0f1g'W1_vVxo iaa[{JcggKH hh2WI C9 7WIIi!Yܬ 1_)v6&֘H9ɉ!Z"6V_7x~VIG'Gs WW9wia\,@̌ AIχawx&)IiIY?>>VOg'bFv^>S?_7WG)iwW )y  yaiH(^(ViyY7zVv'')w &6()io )s)Wi i +<|p, P'Ga8VVhoy)!)RBf(h ''g3.j'Gw)Ww7G9ClL0 ,wW!1(^Rf>iljZ.h^J˟7bNFf>.[oOWW)Wg/ gXX @VC_9i~^*sw)iW? ^ƆN ORB^NoOwח_w , @k)ggbhxFGs7ag#NvhZWOsj^^sW)Gw Sۏ_#.))7OO˞+Cχ)_N/?vz[WiI)w9l8(.燹a +Fȸ#Y9WwWvV&v?g'sffko'gkjr>&.sJ>Z>bKk/?gG77wGg?/Oo[Vhxظv^RS'{{k3'_'_?KF66JwW)))ii׷7χ_``0 N?W9iLJwk>Wiiz.^F3.^&B3N&^&J[_WW))'sj(xHx``Ȉ(f#W闟CZBBr/_w7O +Ζ((v)iWwwwwWiɹW 0LL8&{ I aWBFVV6H׉ OSxh(vƢ?wWO.Vh(.GIɉ)ksSoo7@V3 aAYwRv(֞WYY9of8W 9 __/gW I i )ʬ|,LL0x(fzQaֈVVWi97n/ 9)OKso?_WiɉWG?<<r7Aaa)RVw!vx8fK_)9 W7ϣ7'rNr/ǟppPy!aiwWNkJWi))J~fRwG77Wwk"s;2rR.> @`BgWiy i)o?g_'/kK*k/OOJ._? R;r.;{(v6C+/[nnkNos{__G燃gS'K+[+_*.R{RKfnjz& + +3_~.rz zN"JS2n2_~oC +R{jK#Z&srggfs+3+o?j##C2R_Br:3/+ &'/n>w_:'ʞnN2 N>SsG/swSCBw3 +b6;GSfFj_NN/gJJWO?{?&ʶ*/w73{6:h>.b^[*RFgƇ_kBi;"k)N#C&RfO'3B:^rf^2*^^r#C*Gf[cG&:C׻R +^*Wn_'ך2KNJnRsS6i7vG +g_v'HC_Ck_Vg~7'*nh2N6>7j7_#:2χw~&/*6&[&k)f&F2bF3JGWVq)H6 (9G#KShj_fi[jg'g)_NvO.wbjr_.O'SGF3V^Czf3WR;{"rJKsB*"Rs/rfRNJN .:jk{[+S_[[C'+KZS2bBRf;&bz 2oJ3S+/s#"[j +bck{Z ccK2 +Z +r +ck{Rڋ#+jⳊJB j{2jk{ + *c;[[ **# *c# *+K+Jkk + j +ʚ*K"kJz +j +j KkK*K;;[ۣ#;{KK{{;k J:2zZ"Br>."˃OwWW'O jZnNRrN6hxX`X Xx8ֆK)ɹ999 iWG'c Jjjk ;3ۛK+ˋ*; ^HH @@@xh>_I9aaaaٙiW7?3"NNfz 'LJg?3#{ H @00`h/aaaY9鷏R^h(VVf~#_)W)iw7GS3Jxx`0pp0`h7Y!ٙ W' +^Vh8H8hf>/Wi ii))w_os*h 00X^W9Y၁aa!7CR&VHȈVR I i)W7'?S3J*v Xp@0` &IYY၁aa!9)7?*&VHHȈhfZ/iɉiWo3㺺 + x`@@[G)IY!၁aa!9IiWGB^hHHzS_7)iiɉ)Ww7'j +j  XXp@`X&J YYaaa!Yy9׷ڲhhV3yI99ɉ)W)翏O<,,l~FWIW) Yy!9)'z&h8h(h;jgχwiy9)Ww7{s//CsglL,l xwj9k aA!ɉZf6((n;ϣc/_7GW ɹ9 ׷g矏w$|llȹ9Ji((*91gv +(~fF^_'y))'gwi9 $ܼ,p`ak? ~k aaaa! BF[[&Vzs''׉ IiWw7G7RܤwYIW'GwzF3IY9i7+z{siI!A_hlLs)Iyy!XL>>RBZ;#s_?s{B2...n&Rb/'gG_o/F6(NR;[jzj*oggggOJ.NNr*kJb2B""z +kc33# :"BBrrr:+ {K + +j +;K:Hvwb7i)_h(H8G.^fF{'GW_ۻ..z;CO?O/Û +b>~>Js{ʚ2B"+[#2B2bzJ+;#c##;ʺzښzʋ ;{Kk +:J*닻{+* +Jj+kK K *jJ: +*+++kKKk *k ***+jj+ڊ*J+ +**+*+*+kkKkjj ++ ++k+j +jJJzJJJJhr +37)W/S*2*z +*/oʆv8HxHV'wW)w__S"+2K/_7GGF r + 7WWWG)ׇ_G'G7׉ gP(pHƶWii חGoC??wi+P`v p(aoa Irr +&f3sJr.΢B˳__gg___S#J +br>.B^((HrSrbGG_g_?O??3[zb2R"Z*+bk+[ +;[*+JJ"bbZz*[;+#c**ˋ**j{;;ck#c[C:c[{ʻk˛ kk*"J":Jʺ +*z[;Jc;{*#{+JZk*Kk++j+ +**jKkj zcKjJ +Jk:+ {jk:+ۺ2jKj {*KB B"[[ + + +skʋK* +cSsښ*J ++JcŠ;;22K +B;/ڏNzjzSn{/N[cZr^ϲf +o^.s#k_z.{rs>#Ǣ ;gS fV[?F'2;.~jG'.b3vNCgV΂fr^k_".n^ž׺+&3#^'v*W&7i3r(JV&[_7i)#S_V@&ag.fISIˆI"x9/'^G"?wRƖ(w GoG GRFG'Bs{z&&>W){)f.' +ێn"gJGSǟJR'Ϗ[^wfn'^N;.n/kh"Æ_ssCƲ+*Z&c_{Nbβ[3B+Zg*roC:k*_?#:O.SjB +ښrSn2/ۏ n.Zs&/bnnbjSS;bK +Jz:rck:;nbb +b+{ + +*z+jkj+ + ++j kj*kk;K + +K+j +*+ + +j **+++j*j ++jj j kj K*k{ˋ * K jjjk+: ++jk+**+k*+*k* + J*Jk+Kk**j + +jj+kj+k+k k+j+J+k+ +jkK +J***j+++**k*+*+*k+*+*+j*j***++j+k*** +j* +j +K o ;j + ++ : +kJ;*; +*J;jK* ++J+zkKn: +ZK +;c R. +> 3(g{og;z&k2h.Vcb &_(iCy6N)牿^2(#S&.W_:[f{Vg~^K`hn~f^Z"G)Ɖ 'V7^9^_'^2Ə3&[r׶RHZr+2R'^nZfRJ'ocóc#SfC{zjG*c +.jR/[3_~kkcJgN~ C:2*O{˻3cレJ&c/o.cnC[#++[zjOsΎ:cSO#[rnjۃOsK; +;{KBK +;o;:+b2n"+BvbR'_)WWw7)wwo'_g~z"kSp,`(/_g'gi)Z /wiI 'w)_3c2'?_7g0̌hfW!ٙayGKjs'g3__ƺbg7GIY99!$L̰n9)h(?a!aOwORn'Ȁ.FV6_i w !!YyAq܌0 xWH v[Xؗq//7 +&^VV2zOiI!!!YyA $pP(iizN`9aY_GS(r6G纛SٹIY!YyYYq\Ffn2'_lj)ia @p0 @0`HHh+yyy!YYٙ w3b^~n.^>/_7i ɹYa!^fZr8 00ؘ8fZljIIYyɉw'? BNnz*GW) I9!a!r& +8@00xHO 99y9)WGs#NB[II!a&bzX`00X8H^giɉIy99iG_Oj.[OWW9!RnƸ @`x^r?7iəy9))ןsBbnR +77W 9Y! +VH`@00@ b'wWɹi))7_3s⢂rgGGwi yNVȘ`@X^r'Gi I9 חG'?oKj";OgǷ)WWZZX``XhF>ZOi I i)G'cK+rJKo__'777GwRFV Xxhv^_GW iWw7+:k+C??_?o/fƖ(HHv>'W)iiG77s{ +Z +SSO/s{ ;S*ZZ~^FVVVVvf^*?7))W7GgO/[:c+ʂ"z‹CzZJzcJR>&~n&&nn2j3'/'''?'g'o3Oj[^..>^n>.bbBr2 +*/s??#/?sSo?[/z>._&n"nRBkBrjZ.rj#S?_gwGbr"fFfھFr&2O懢O2zJr.ZR2nj. ;S7woO7k_?B{n.N~nfn∨3#R^K&^+2;Ko3'GW_?7s6"#fƎ/(3{6^FfRF*r[CC3;g'cw7OGW'W2rRGR>z"/>xֈH8x6hv>R7)G)'GG_OO/ B'KOczgVX `H8(V +sSOgi)W׷iW׷o3_3zGsg)'_ǟiNȘ @@8")IɹII ׷)WoOCkÏg7))96ȸ 00V&B/iyyyٹ I i)_?cۣ[O_7gWii9nFH`0p H^W yٙyyy99 iG_oS#CggG)iI)k&Pp8VW 9yyy99I i?o'ggGw)9O~(PPP0@x_yy99Iɉi)g_?OSg7w)iI)h pp`8V^{)ٙy9Iɉi7_?Ss__gG7wW)iiR&8@p0@6rOwiYYyɉG矿3s燇g(8X000 ('9Y!!ٙII)W''?s3k[[SSSO?s fV8 B3iI9yy9 i)_oc ++* +ˋ;ۋk:R^fvv(V&KSg7i )oS+ꊚr2Z"ZJ"*kjjzJ:Zb""ZB2r2B‚#CsSϿOo/s#+J"2..RRr"Z:j + +*˻;˻;K ˻{{;˻;{{;K kj +zzzzz::zJJj+k ˻K{;;KKK kkkkk kkkk*j + +jJJ +JJJ + +ʊ***kk ˋ k k ˋ+**jzvk>?on2JrZ3Cj룃;jK{* +K*j;*k +jjJ:jjJ:J**:kˋ* + KR^ w2&+viV?:VƟrwO2{*>&k>"#:B +s [">r {sCcCz^._úⳛ +{3 +3JgCf['^f~"[ +B>:C2&i'>Wh~G+'Njgr+2""grRG7 ;.[jvcoo>kc/ZiƲF?7'V׏FS&&C2{^:r+?&_GjrS+B/roZ&jGˊ_^.B7f'SVsNB&/ +n+'ʎG"#{[.f盖&Wvcivsw_Ffׇh/)3cr3wcfr/Ϟj?k.f#2BoK#s#zf"O J/Rnj +s^fn_?/6Bg{;nfG΃zs&/{KoJ[.sn _>*2*2[[.k?[3۾/ +NKS# +cobJNZgO.Z*2ˋn 2[bs[cz3sŠ'&KonZR+Oc^ +. +3ۊ[Ck˳/~^*cz^^JC';r#b +~7Fʿg.f^SnF~3**:/Zj**ʣϳJk/bRzʛ; r*3k +;* ++jc3{*j/ϻZzû +{OJNN ^>#rŠkN&2J.N2;[ZZSoog_'_g?'*o#B +sBs_O8X88``؈(Vg)I99yyIW_?36f*[3Go7go/Ûs7w*`؀pp`&Waa!SR"Έ&n_wyYyI)7_W0,X`&'!Wg>"sڋo~F6^*?!aY97W),, ll, hiYq99)"bsSkZgFV(hB:syaaYyIgGiL 08gWYqQI! ?‹[c&:+ +c6^Vhv_w_)!Y!YI77WgWi0`lPo7/qA!GS_;'? O)sNXF6h(&!!a!9WWgW,@ @(6!IA1iy9{:n'? X8(gyYY9I)g7ipFx0 v9aA1y!~sJ?) igB(h8@()Iy! gGW7i9, ,|,VV _ Yٙ׋fO2o wI G?Ϛ&HH6V(yI)wח)Ya6|0X@iW!y&fHSGI 9Ig&(`xH&9iiyIW'o??FlPl(y9!AI+ھVVi ɹ wgSV(nr*)W WGO_g'gW) gh0pl@ nGY)G>F/WIII g((VH~ViwW'7Gg'7_wg +0,@0^ Oo">"GGiIIi)Wo2N&v(Vvhogg''G_g7'_7Ϗ'Osp 99.+R"i)3~vFFfgWw7'G_gg''OOS +n0,@`F'z.ھ#gg ח? vf&v+i'''GG?G7W 'N l `0lvaWW F^h#jI'_nhh'[7WWi Gg7IFwxxP WWIWW''/3g7!(Lx<,@HiW1 !AoWnȆkV' yiW)+ʶh hv III W__gw!@C ̌pN>!Y1aiNr;G)){6ȸN_G )WGwWiiIGlP8p`2ΗY9ɁAGOc7_o_oVh>~ +OOiI9ɉiiI8@ @X аfh^gIAai +;k[3s+6&&>*_W I9II9ya[y,,phH )7Y!a9iIOsڳ:~;RJ>>*nc{?wi I9yyyy P`,,P?iaai2+cn&{3/?')iI9Hyv0`HPp0P Yaa!iGG'B.V^6*2K{7חWWW h?Hp@00H&_9!!9wG2&~RN{ˊ?c'_?'oCo?ڎZ(f(h6^NrjsgǷwWWWg?o +ξN^N^n2㳏?33jzr.R~>~n.*KcC3OO??/skj""겲b + +k;**Kk* +j+Kk+{ˣ{kj;*#cS[BNkJJcJz⢺++ ;{{{[;[;K:+:J* ++ +j+ +;[ : +z2bZBbK;ccCSC3/3[CJ +b2r.b+;k۳sC s:; Zbښ²Z#C33ss[;j*r²2B2rb2O/C_o?3R~+Nnf3JRC~;+V#S'_C#2fbJ^'{S +{{[:V枾[oC_s_^RK**j3Jz22JJ*C"BcN{Z?⊿/NSK [ * ;s +"z[K'zcn#j[RϞNz_3fJZ.3Zs*2S"zzfc;>ς' +R+jk{3J&3+>sR{B +2sZ뚊s*s;+{#sC'zObssCs{SsC*Ïx HhZR&7ח)I) wG)i'Wן'WW` PlP@ֈb 9 2f(.Kg_GG'g7pp@p h.) !Y)K +.*~OCwGg燗W[H&h`@`X` 7)i77ϳ/'?/3zB:'?g#3/gSO_'?Oo&vh(ȸ(F^Zk+_'Ƿww7G_3:bb2rZz +;ooooOO3KzrnfFF6F&^βzۏ?'gg7777g'[ZR^>bۃS/ooSs +KJZ"bZ2Z:z*k;3333Cc[; +* + +zzjz +:::: +*+ ۻۣKK;+*+jʊ:J: +*k{{{3/[B*:bں+jzڊ +j +j+#;cs;k:*K k*ꊺ +Zz*+K{[{KˋjJz:ʊj ;{{#{ [Ccj:jKr2zښZZbzZJ* kk+{K;[ [3c*k{;: +::z: +kkjj +jJ::JJ:Jj kΖ_/S_o+KSoK+;: 2KkJKZZKr2:jj+:*K‹JBj +Z㛋; +3#3JkzvooNcC*"Úr2oo27w nJ?f/o~BJ_o;C +CJ33^?nr΋? +:ϲ.[r K/?#Rʋ:[bB[JZBb*BSSCS;J3KJ#Zss #Jj;+J:c2"*K~.sC+rSsc*K:~ no/[+.bN~Z +[>/S"Z +N#jK:b{J +RB;+J +cc+Soۃ˚nC{:Nn +b +#s"+JszS/*kK??~.2*KKOrbjzKKcjz/{›⋻~Nrz  +BO/;+Or"b{j22+Z;:*SO{늺KS:j/rRKÃڂjKskJjzO?:"BnB*[2kK.Rr2{zbKb3:ks{kK +kb#cnSBCbksRNk+*s3 o+{#"r+z" + +JJRz:3s+#oSK;2>^.+r~>뾃r{o"{ ++ZS3R+3kR2k +*kRbNj +r22Z3_3{k[/[ZrKKc*3.~22 ^B+c:Z#'_ßc{~*J22z"&N.zz.**sk #[_Zj/~.*;2jjÊ[#K3#cS2**["*kNKc+3.SJ*{+J2낂2R;#+J뺚KR2{;{¢:S 6V˿Os;/Ϻz.nckKꋣ+JbBbZZ:: +JnjZ+KJ;+c;*+. /cʢ.Jkkb"+:.KozK+"z"+k3j+zZ:*+ +jJ ++ c*/+*cKZZ+j+K +Z:;Z: +z:KKKK JJb"Zjkjkk ښ;*k[[:z3SC3{kk[[[K jjjj;#/f`xBsO_J.f~WI_'g__Ϗ/SO'7i9V8LLxI!2^_7Z2)9I_ZnBn2ZK6&Z_iɉiG_))wg'!!<\\ j![hV? +yaaw^(6s#(ȆiiG'鉹9'gG)Yl\,WQiFH77O ! 3hHhFsCrVHV. )3? 9Wgi9 L0>QyhxHRWK3aaRv֞ +_ˎV(*) w gW I9 7_O'I!p<\WAёFxv'i7 +^[9~VhV;?_'n&V~)ׇ/3 ׇ)ə` |`1ك~&g>G6j/oO +>2o?r^興s7_9wwW93`\| ~aaI36S))O((Sa9gk7g#vBw)/xv)';iחG7WGg'wa!Pܜ +rg9yi"VH8IIWI99WJ(^_oN&FfWi iGGGG''YWlPvYa纆;G;jyogfV&k8fc'_'ɹ7SWWI p ?iG )_:Nw7G7WK +:~VhxB7w?'GWWWg7GwGg_𐐐P0&B鹙y )gwWWoJbB2VVƶ~J+?''WWWwׇ_/O? h 0P@@`8vS9Y!!yɉW?oSso +"B.ZbBJ{S_)) 'GO#b#k#hV @ x!!Iiwσ+:22>c_777gg__;zbRvHȸ8Vs7w)9ٙyYII׷on^.ffz2R:jc Co?'o?/#C{JjJnnR. +^֖6Vf>~2_G)鉉i))Ww'/C +B~B" /S/s/s;j+2.RrR2Bj^.:k#o7ǷG_sjZRNN>R";;C3S/K*ZBb²b2nnNNN>r3??_''g''/S; b22nnnrz*Jj{[[[C[{**ZʂzںRΎn>>NNRz 3/'''g_OS +Z2nBz+[jK;;; c+k +zjKj*J+.>&f&&f&.r +?'LJg__C3*ʺ2.BBrZ +#[;K۳BcK +ZJck{&vvVVv6NO'w)W)LJO nNzJJ3ooso/3sss"J;+j [[ֆV( ^^vr77g)yyɹYI 珏>~vf^FZn2?'oS SSZjs?(h0@HP8ovF 9 1!aY9 )gFv־R'g__7'_'o?g?S'_)vH~` l0@c !AQa1qa)g.(ȈVf&.C/'g'G'G7GWחWWw7G I0L<,lPp fa11G6&vVv&*Z.*{_ۿ) Iiiii)wi9IXP̼ l0扙1-ɹ (:Z^b[o'OB{+/iyyy)W 9y,P x9aqAF6~kKWg石ۻ.f~rks 9IyaJ0ll HnWyA!G +v^Ow I'_O6(V6&gIY!YIii l̼P, aAaYYYi3hH/_7iIi+Ff^Ryyiy) ,P0AqAa)_(x6)a9WG{N(V&'G7wi9!Yy WiY1 \p`B1yvvFh~9Aq&fr&6Vvi99 9\,`[nAqqXs[_ia1 xfkC*_W9!Y9)g'W9PLLF:3YAIx+_)׹aV ` H^OGg#￷ ف11l,k y!k8`@@9)9϶xXxW799)7iy1ܼpk_i99V @6'y8>i)gi_KyLܼ(syiɹ?`NW Woxb993W W7)IY1s<(/)CO`82ٙ G6x) iS' i7_'AV|| gW gO`Ⱦ9))IvXxvi7SWwg7!1AƐ <<#7)CSiFhX ' IhX8sW /wG_gi q0 c'w)W7oWW)iְPPj2Rw__ I)+VV/)W'?)))) Ll&g3iySx`W9Ys63 z_)W3^n2^v(.g'_ ?G7'o n>ΞvV(((VFb))WWW7p,ƾ/gIH(?  #2.&nz;soG))dz(X` HVvŸwV(fkG)iWg? 2:S'g' ^f&nb"B~Nz_GG_?/_'GoNX`Xh&/gJV)iii_^ +3[N^ +/SRnn3oo/3n+:Zbj3o/s{*3C+Jz:*k˻Kj˜ )GiIi_NJSc"+O7g^ XxV~G#&6v"?7))zNWyɷz'{ ؖr)SvhV/i )w~NnG_o +^ƆfcoOScJr^V^:/_g[j;CS_LJ'_?OO?os6(X֣?JO_3KS7)sú.no_'nhFv73KW Ii_`̌6I32~xG)aI>&s׉iw&((F2G_cr^&N +/'G:n"SzkJNn./G?O_'_C*{J. H6Rc[*+rRw7J+?oK_7Wi9 i i`<@P{shh/w1ᙉgnV{_W 7SrV:SsgGwgg ח)i $@,Xa77x@Hn;AYI)(/?#.^vVF΃_7G'O'WWi iWWWiIidPL37NO_Y1yi7';H+Wf0VNY)/Z/?_i99)W)_''g'' ilhXl&f(vgi99!IcJ[^jrnR6HhBzG'g7w7?s[gؐ @Hx6fN +/?))i鉹 )Ii)7G#>&:&>n.N*s/_'7wGg''_3Hؖ `@ Vi Y!!!!!I i?ΎVFv&2;s'w)W)W7G'FH@@@@ (F3IYY!a!!! ';RvF֖6f>j SwWWwW)jHH0@08(B?Y!!9Ii˂vhH(VF^>rWi Iiiii [H(V0067y!!Y997'vH^Bo 9I ii {H(RV06i!Y!!YIIG'ZΆvHHh(6/i I9I Iin@0`(o9yy!YY!Yyz>fVhh(V6&C')i III IV @0@@H6~K_WI9yyYYYYY9ɉ'[R>h(VV&;oi IIIII9y!`0p V^ccgi Y W3bfhhHjÃSs?g7) I9 i i9Ya `.ׇzfJ7aIɉrBNV6O/SOGwWIIIiwG7WyL l,pȇ{n^h("'')! )/˻{2R~:Ç)i;'GY7GwWi鉇p,.N;Jfv2o_7i9 )GB +fr3kcoo3{Wgo?sH`8Ff.g7Wiiii)7Gg_ +rnr +۳+gg#C +3+r^(Vf#3gGw7G'?scc;rr"bz3# r B;jO{#n2SS*bn2K"2.R2.+rOc3SjSϣ[sc/'N¿"2"r+ /Z*^sCOnNrr Sj**ssSSZoS2#:N'>bCN3Cn^s[OZZk"ssJo +ckNzz~r3ojs+g3NRnrj3c+J3B~kbk"._ʃSRO6_~g>B+R?oZJ{+N>[J꿿7Kr[f?so{b3skO +#3KsR"+."_?^2Cg +#sc&3R +;>σsSC[r&b~?>s/#.N'3S2{f/{o_R; /'sKŽ/3."+b*.rCoˊSJss+~2뺊:;~"s ~. CCf.2:bkBj#jNkB*KOnSZjso~2/ /Z>? bJNj*;"J3+2 :kbJ +2c2; +jskKSC3/sŽNR^Ršz˻k[;K{[k;[ۣۛ;*:Zbr.RRZ+;/g'/{FV(6fN.sOSkc+⺛/SC/_/C3C;:JJˋJR^hHC_YY ɂWOwG(hf^*')gcf&"ڋoǿ[K +^n2:KK.Rzk; SS "rš*K +:ZJ* +*{##;* + ++ k* + +j ++ Kk* jڲXW? aǟc/Nb(`fW>vFc inccǷOr֐9!a!?)9q!,쬀P𐆱A[R l(_k~82 ɉWihvf'wòv^S'7/n>NKRbZ^.{__Ƿ7ww))w!"|@)ѹ~ZȰ( !1A_3n&"I7HJ"n(88^3iG[ )77g$l0а8 +F@)!zfvGyWg (f6FK۶枲J?7''W7wiiii YLpVA~^, 7[q)WRi_h^Vho3SLJoWW)))Y9@lh&r+ƀW+!99G{67Jk' HxFn&/IiW9I iiy3 l9gF'{dz Y!ى#*>N?SJ r8x&')W_'G7giiWwW7 H@p0`VxxhfFs/Ƿ7999y )i_s +K >fvVV~bS''7))99I9ii)`8`P0((WɉYa!!!!ɉwnBHHv{C7W y99yy99Iɹ9H(ppP,А@HC'I!aaaaY9IW2ζVh8vRjWi yy99IWhpP8Ri Iaaaay9o.xXH(ZJs') y9II9(ذp06ljɹ!a!yi^vxH(JsWi9y99)Vp@8)I!a!y)GK.6VhxHHV>2iIII99IIII9V0xH(_)I!9)Go^Fvfڣ'WiI IIɉ II ((( @pА 8z? ɹ!!!! )'ֈHV6^R??g I ɹɉi wȀ@00p0`VsgI!!Y!!97Kv(hHh&K?__)II i'hx@ h6?G 9y!!!Y!Y wK.VH(v^~G7wI9i ɉiW)ָpА0@X(J?YYa!YY W7'/.v(HHHHF^nr{_i I9I iiWW)W8H@00@ 3iy!YYyIiGBh`^bχcKWyy9iW I 9cм ,,xv2f(hY9!O#Co v~VXN7GZ*[WiIi_iI$찰hIghB1aiys W)V&>>ff27_wIɉoǷg) 9 PȸiOV08 Aa_'WW'G nr^㛂ZG?[*ɉW)Gs?7gWwxSs3So#s???_g'_g3so?_Zx8xxXx886wi III iW׷'O"RNf(vf& 3_7;css 6N7W 99yy9Iiokfv((Ff>rK/OwWW))W7'C [# +88Hx Hh>OG) yyy i)Gg>ƶ6(V6Zo_GwW))))Woã.xh8X XhRg) yٙyy9 igsn^6v(hF"#'GWW)))7gsC[3CRxXX ȈFr_W 99 i)wO +^vV(vvF^R 'GGwW)))חg'{KRHh8 xv?w 9yYYٙ9I)w_o[2&fF6VF&~. soǷWWW))'?/#J +*RֈVX;iyY9iWgfffFFFFf^>2zǷ7_[KkJzR2b"^v6VHHfoɹ9I 7o "f&>NnrZ{S?_gg_OoS+ZZ"b": + +ڎ&ƖVhVvf";o7)iiWw{:fffff&&^Nn.rbjKs/O__?O3[K:"rR2B"zJj++ +zbRƆ^"{SWWח7GgO3#[:Nv֖^Nr" + #So?_OSs3Ã#; +*j*+zf(Xp08FR[əy W_b_Ƿg'_OˎfFVh6Z;O_?O#{3_O/SC{ +BrZ;s0؈bYwWi?cRw)ii)wnfƆ. +ֆ2o'G_''Os[S/?/ JKCSoLJ ` xaY7WgNo)w i#R^N^f3[>hꚋ/_g_o3gOSs[soO?o +Z"K?'p v I!yWGiW:n;7Ǘi /n~^f³>6&Rbg_OgoSssSOOO3k +:3Ќ&WYYI)7S.bjw7Giib>^ +sSn~n;o'_O?oC#o?Oszk#3/?_3@,`xH7 y9'חGWW'nNN>#/{:Fh6 χG'_/s/3O''"Zz?@8n)Iyw#rr_Ww))2N>>N2;oZֆ.o33ss3C3oO?OKz:*;[/&X,xHVRWIiGO' +;gW))w7w?*.nR"#RVFR;_/C3SϿoo Jʊ ;3o[6 0phV'wWws;/'?g7WWWwGG[²rr2RRZ +zrNN~6&Bz['?SCϿSOSc[k"rn++:k+f@`Vv_g_K/ggWGggg?3J"bb2.nRB2>FfRڢR:o??o/oOK +J:Bb2RrZz+Hx6FB[Ss{jjsgg77G'oc :rrr22r[{#[c3Soc{K{KzR2‚Z2R2bzJ* +Zr~^&R2BJk+Ͽ'g'_o;*k*+ K"z::*{{k+*k; +j + +‚B2B222B⢚: {* +k;Jں*;{;;;////ssSs[Kk*++ +jJZz::zz:z + +jJzbz"ZzJ + KK[##[K k k ˻++kKK;{ˋk+kkk+닋::JJ + +ʊ*kk++*j**++JJZzJ + +J ++++kkK*Kkkk+ +kK kk*jk;kkkkk+ +j + ++k+++ k***+ + + +Jʊj+kj*+*j**jj***+*kkkkkk+++닋 kk+kk*jjj*jjj +ʊ*kk+j*+*˻K + +j++***kkk+++j +jjj*+k+*++j*****+kk+k++kk k++*jj*+*k+ +ʊ +jj+k**++k k+ ++*+J +jj****jj*+kkkk*+*+k++**j***jj**+**++**+*j*j*+**jjj*+*++k +*+ ˋ ;: + k + + ++: +kkjj +***+kk+k+*++kk+**+++++***+*+*+***j**++*****++****+k*+**++kk++*+*+jjjjjjjj+*++++**++kk+**+*++++**jjj**+*+**+*+*++++*+*kk+k+*+++*+**+kkkk+++jjjjj**++++++k++++*+kk+****+**jjj****++++++*+++++++++k+++*+++*+*k**jjjjj*****+++*+*+++*kkk++++++*+**jj*j***j+*****+**+*++*++++++++k+kk+jjjjjjjj*jjj************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************* \ No newline at end of file diff --git a/tones_american/cause_81_loop.isdn b/tones_american/cause_81_loop.isdn new file mode 100644 index 0000000..98a4abf --- /dev/null +++ b/tones_american/cause_81_loop.isdn @@ -0,0 +1,233 @@ +*d}EьDH$]aHVFns' Iyy9I9W_+b..RR"j{#/'O___?SKH{0аp@VV3yYyw'sf6(h((v&Z_7W鉉)WGG'Nl0@l 0p0 zb7A-))G6f.F[owwiIIɹW7ǷO/SOG8`@̀0;wAQ--a9Z&öR_ZBFv(6nWIy!Y!')[?WL0P6I!Aa&g7Sg9O B* iI97?_K'G)ɹCLܜFV8xVƾ_7W9Y iWG pppl,XVi Y!aYI &hHhxZs?_)iyyYY9IiiW``ppp,@vفAY!a!)iiO6VhȸH(& +?W9yٙy9)i)W)W`lP`× aAY!aYIW)GO^6(Hx8(?') ٙ9i)W)X` [) !aY!Y!I)W'k&V(888Ȉ(f''7W yyyyI i))O` pp ؈" ə!a!yy 328hFn:3iwiyYYYI9Y >Άv8)7 y1Yi9/(^X&kS9!YY!$쀸Z&'wg !yI g6 +_rBHW o) YWiə!A$ S& !WW~ +WWg*Vh~#G/ +r 9 ii!AaLܜ,2y F(3V(R9_RJBB7i7sX6K緇'c G)9 WW ap `yIǾ6kVx (B9a).7r ؖ;W{JZ*S 9y yl @(9.rHh`F)#gR)HNg'2kǗ)ɹII Iya1gl 艙 +x8`)!aaG3ח +ǗfȸzJG)ɹYaHlp&w_88iwi'7W7S +JViGiWW y!1nLv;(^sG77_/b^˳7')ח)YX а6^&vzc;_Og's?Oc3gCg7__*knv^Vvf6&n.Z//s'g''?OS3j +ڂZjJk#3S{/[ +*zJBnnΎR2"*3/Css3S/j;۳c[:[jZZb:j j:+J kzz ;JJ*j [[jZb Cs/s#: +k;kkJK*"zzʺJk:: ;k + +* KK; +K[˻ +*JjkK + ++ +++j ++*JZ +J+j +JJj++ +k;c *+*;ˋKk+**Kk zzz++*kʺJ* +j*j +J*K kk*+*k ;KkjJ*jkk+;j* +j+j* jjjjkkjJ::Kk+j+K+jJjkK+k+jj*j +J(8BRgozgv~*WGO/~Z "?+NZ>2c^2*>ŠZ2j/g'7rBv6.n>boOk{kJk냳/Ϗ[*kK c3c*ZzBBoOO'3VVV^csCc + " +z+3Cs/Kkj+k#z::*;;ˊ:BSÛoo^(BڣSccK[kjjj˻CcۋJjJz*kk+ +JJJ +J +JkkKK ++kk : +*Kj+Kk**jKj+j +Jz +ˋk+jj jk++;*jkk Kjkjjjjj+ +++ + +^沋Og'CCzꢚB2zz#?'/b~f‹S?2^^~*J*Rr gGgSB3G.hH'?sJr&&Ns_?s +2r"Z:z:˳/o[n.r2rnb{S'/zrB*sSSnVV6rC'CbR.rbjo'gSKb3cΎfn"sg7G_3Brn:[WW?x ^3"n^fcW?+R>nBjs3+ƆvF^; )wgoC[?_7B(@ gY)/VhVF^R" Wi)7/2^_7jڂbz2..rrr37G'S?_s/80 ) oF^rb7)w^>*O_3>(Fk_)iWOsgWw)a!V@ &1 YpV_Go) y!I8()!)(V(6(SIIrnj37i)G__7YA1W0$|l9mAS r7O[IYYW8&a!9Gh8fnW i72gW Iwi!!`` -щh0`g79S~HX!Yy(H8H_ 7[rN) )WIYa,|Lpb -!&`@g7oWI9Z((Y9v?i9 N&^giI)7 ܼ -׈@@x.gggWى~)ٙ G6w w^^/7 999iyILlW-QAxhSoZ 9Vx뷹g^hx8־giG;>{G!Yy,| @6`8^ + Y2x rVr9i2?Waa!!YX̤H q!o8F{_yY7XH6jwW'Or~f{)IW7or +KiyY!Y!Y,| a-qh(8gYa^6^cvFI);z+yYaalla1G3k((g!?.23&V/J_i7' Y̜LwiWi)/xXxN _G2F^cf~WI ''7i 9I9l 8JWcyizV`hhS'G):86# WGw7GGG)@XF7c":rcˎrn#'wg3noǷGgg'SozKJzK2&h(v&&j?'7'/O__o{sC*z +3[+BZJc +zbb:bnn2zbZ[#KJ +{SScoOS*SϏ+J + +"": +jJ +jj ;*Zk +j +j*kK{KKj+뛛 jJ{;*j ++;J*JZ{Z +": ++zjJJz;;[ۣ[c+ [K:": +:b"* ++jk{;;jk + +k +:*j +Z+k j + ;#{sc K+#SJJkʻzj +R +2ۛ+ +s{ +c  +zjzk*kZ{sCz*[k +;_ +3J&˿n_2Bj:'*>k[n>k3ώRZ(rKW33z_?N&.OfkK[S_2o23{Z //f n^CK(h^RH*&O2[o(2NWf'^W +Z_fo;G6)?C^G"z[#r^2o3'~R3r~//kâ3.;_JzRn^JrRfSsS{^2k^jr/Or*j[rv*3^soZ2:?.:^B.>'" g*bÃBrB6+>37;o o6kNr +Rg'S'~ۊ"N*ڻ +2S"2s3Nsfbb>JO^**/OK;crZ&# .::f/O[+&/'.bv&~66&*'7gw_w_g_j[&j*s^ XHXV6rS_w_c/*b:_'_g#w)W3G[b/csc[ۆx`ظVf^rZkGG7ggGjz'__'i[S__c__[p`H^.b[ggGG77gg +&^g?o''?g 'C_OGg.Xpp@ /*)W'7gg7CO'O'LJG鉗_O_OϟwF@@@`&ggScg))WWLJGgsO_')7ocg'?_GWi; Pl@ ֚)7))Wwg7iWG_SKj'OgG7)ׇ+S_giIɃ` l xV))WwGO g )7GgǿJ?Og')SsS?GG  ̌,P@^Gww7+S IWח' +n +oS*"'_'7Wii7+#O'Gə PL ,P@ x^7ىG7Ƿ/9yi))?h6;_3Gg_)ii7s__{Ll,pyY G7G_''O3ǹyIiW(V +ǷG7W)) WS?wWYwܜLlȖ.Gco_YYywϋȋW7)?wiI' Iiiyq $$0X趲y>F6F{'aaj~8J7gGy99ya$|8^B'IY(Ȉ7a!W'>vr+gG?/#g)99iIyY\\<,G#G{X 8i9Y!yC^λSjjnF&ocogW99i Iɉ9!\Xf #)g`(y9y9iG .C3hV^*7g;*kəiii9AA\BgiI)Sj2& h  zrB?)9)Wiəq<\| a/'3n(H7Ig[S"27 h3z2sg) yyW)iiiYܜAaKVH؞iag#rKκ9'ffHW WRsI ))Wiy!Lܜ qÚVX@@c9aa 3ǹyG{^vǏۛo9IiW)ii 񀤜<ag 00a9s.yIc&ff2w7S{?i鉉!1H?iBFpXs^(W G'K6vF&2fVfk''g[s'GW)) $|LXv 9kx0@Fy>Vhf[_i +6V.h8ֿW'sO_G99 i y$L,>@h.a s6^Ncgy&B>hFW_/_/ Ri yl܌~vh1@`H886_!wzz)9/#>VV8'g'" +Wi ٱ_\LPXHh.xhN@XɁY_O')WnֈHLJ)Ii ɹyaL<,`@ F(7 )7!a)RjJBF)W_fHrZ)WII9I9!x0`1;fvV`J )!yw?*[^gf^R'_#sw ɹI9IጌPP`2V`>wIYW'jnV +S/7{ Wy ɹɬ GJh&o I9{:2b^.2[#Ϸgϋ7)w) wi9X`, NcW~j^*'_))GO+BJ{3ۃ___ϟo7'7gg׉ghXHV&2Bº c')3_kg3[''goC/h8xh(f&J;oOO'_gG_ggO''O_?';KC2NR&nn6F6V&#oogg7'SW"S'{Rj kns(VNV6F.:.srSzO+7gG'3nO_Ώgnrn;rfnoKNzf#Bk&BggGg˳: +Okj.:'/^ϷǞ{'SfJ[Bˢ;r.*2"zvf k"~jOGs/G7g:cǏo_{^'?>fR'^κz&vg'ssWW_WʾSKr?"WƊR'&*f(^2:{^FN~[(?WIW)?*hσBF~bFN:ξF2S:z֖666&g3#>ۿc6B.*{BFV>3 *S㢲NsË"Jn2NN^NJ_CC{Z:.'?'kÛ;#/J2#zj;ۋc "rzsC[Jb*J + +k;**KKK *jJj{j jJ+; j j**jk* ":J ++* ++*+kj +KK *;; ;k+{+jkk+k*Jk+j+**+ ++++**k+ +**k**+k+k*++kk+ kk *k+jjkj +**++ +kK++*j*j*+ k+ + +j* J+j* k ** +j +*+* +*j +j + +*+k****j**+++*+*++ k+****+++++***k***k** +k*++fi._+""Zc"B ;ʂ J +Cں J J +k"nJ[bC +S~;J'&R{o2Ï[2f֗ )F"rhϞ+'c/ΆO(oǏ#w^~:>ƈf~)W7RjN7W gf"'o2f&/O._;h/Bcz֣or6_;.#^O?ZSn2CSwKN/f.csr7/fcsSNk#SS3KS3Ro~J3J3krΞ?../? +_/";BorB⃏2  Cʻ;3[jjsscs#+jb*ZR:KnJKNnff^~rzj;GǗǷO#?O/[rkZ2bzʋs/ ```("c_w鉉))WWG_G_~+jKS碏/ocSs)W7o#Kb "p0 .s_7)9y iWW)))WWsZ^VH6ۚ?O?'Gii'S/s;#o(0Pp0Xf[I9ٙI)W)iiwo{VV>g_ww))G'??/3{KCOf@00@`Hfyy!YIiWWW)))g?/cb&舖N*;_GGwwGLJ'o [s32XX` ()IYaaa!I)w?Ž&(Z3?' I99III)G/C{+&8000Hb7 AAAa!9 bv(ȸ(v^nC' yyI)w_; x0pX8h)AAYI)7Z.f(ȸ8h6S7Iy S3 H00P0pXxgiaAyǟ".NfvV興HHh6^J׉99I)O3X @0@pPppph/ !aA!9 _/V(hhH8Ȉ(6f^BC?iɹyI)G_S2H@0@XxHaaaA!y9)GgjnN&Vh8hV(:'ǗI9y9I)Gg_+Hh0863Gya9i_FV(h8ֆNLJWɹ9Y9I iww88 P00(C9!!Y!a I9goچ( XHzǗgW ɹI Ww7wwI\L, PVW9h*9')A)i6H&N_7'ۢ;H^>f" +9'7wSO )9IIIi'dl|H.I`8&GCᑱi9VV6wCZovx^^h3iן7WsljI 9I,P|o&W`(wAI!'>fC('_orv>VXf{F.WWCOG/n 3_'_鹉iɗ779 $(@l<7Y`fjhhawwAWOoB(Ͽn 'bs.r>F^W)_ s?WW ɉ WWI9p$ 7qHHG3X8#IqΈS^FGs;s~H8^VwG:)W WW) I9`$ؼ|@X2iWȚrOA)7?{fR;G/Sⶖ#'iW)'W7wi) y,<|<a!rhh~Wg!iy^rSǛ_vn7o)G WWiWWw)IL2P^ wY(r9WY!gמN^8/^^S7ck;7) ))iɉW <6? R>g&NcK~;:RZc{jš[[j{**jZjJ'hn"ֺ)WN '#&&+ϟcnR3'σB K;z";z:Jjk: +":**zzkJkCJrn:j[sk2"S{û*2Z3 +SJjz"Z+ +[k/kZ kkN*/Sb3SJr~*Z#+C.j"BN^bˣ2nZ.J;?z33K/;CO;sNr;C{o".RKJ"sk{RnR';;z;Or/ƞ_Sg3oO*z?j;& 3o+'krû{k*~.zJ.*Os??R&'OK +ںK^^^frbNrrz{ SCr +fv{[R^#J[2nz2^"o;K+ۃg_S+RsoC3 ;r+~N#j2f:nzB&ffn+zR+/_SCc[zjb3 +:{{Ns*SCZ N" {:&>nK#3*&*K _7gCbJc:"n . +"nk~"RrN*NNRO;"*K{s[oJ~掃 co+rR";bn*>K;' +?2.K2ʳkS+>.Br[g?k? zjR&.SK.>FFs*frB^zrzSr[(^C/Co+:#[ +"*_C:kOSbbr_{r2rCO[Bn;b:2s/":J:s#B{*N:zs +{oKS+:O/KJJBbZ"곢" ZZKs3j#+2R2/o[#oS+so+kN>s +rn:^N:*'_?o/3sSs3s"n"n>&^NR/ +Jj:*[s#C#3c; +J+k +˻ +k*sKʋ{[;:rnȘ (^ +7WiIIɉ)WWw77'?/j2K?GWgl,(&7g'IyǏ&fN +w⛏GWi)'O?W)WWi)|8)S6xSI_xwɹ7s2*7yYYY )7鹹ٙlP Ci7x8;_wGiYA!Oʾ?SB(((R_w Wwk{cgi9YٹiWW9Yaw|<,O(_)Wg/_A1kFv& &vS)9in+a_7i!aL.!I^Nio/)ya'NvvF>"(7ɉCrn{YY9GW!0<||oIٗ;88;' )9A~(V6vf.3w)w_C{'Y9 7wWI0L<  w ZֈvϷ 9ɗO9aAAGV(v6((h(V?7Oz;ljYY GWyYp<,'ΆhV))I_G!AWニ6FVhh־7i闟S9YYIWG7W 9y:lLL а8~^ii)aazHHHg)W?koi9G7i IWp, lh"_ Wiח׹yYaa!IiwSbFh8*'/_I9WWi iii)xp0 0V8fN)wY!WC( hBowi)) )))S@lpkw)I iIyyI7OJ>Vv&>ZGW IIIɉWWihVH@0pА@HhIYY!!!!y9)_f(hV&:gɹ9II 800,p`xx莺IyY!!YyyI)7?(fF*sI9I9 I h8^0p,pzw yYa!9ɗC(vVv^;/OGiI iiiHH0p,@;Wy!aaay WkR~((6Ff+s_Wi I i)H(6 0P0V +'aaaaY 3F(v(FNR3'wi ɉ i)G_+((`0@00ؘ>ۿ9aaaa!I)?{Z2&FFF>b#g7ח3B~fhHxxHVF"Sw)Iy )7O[Z~R*coKb.>&^^&&~NN.R.[[ooOOOsSs[++jzJ* kK;;;++J:z:ښz*** K K KKkkk*kJ +kk+jk ;Kk+˻;**kKkj+ KKK;;Kk;;kk+kj*+jJj +z:zz:Jj+k ;;{[[KkkʺʺJJ +**++k*+k+jk*ʺ:JJjkkkkkKkk+ +B.fZi'>0vX3aW{3gLJZ ny +HVZg +h7)O"B3_^NC? z[cKN2"j k z+jb>>J{BF{o* +s?.N3zJ? +Rz˻3*2N^; +RcOsKr/ˣS+{J**3{:rC B.JbJ.rc.{:K*[S:R ++{BnSjRJϻR~R/gž"c/;brR+[3R{ _'rbOJ~3;*?gZ3Jn>  +~>bkK3s;;Ckz.22*+ok".zjb..z3:jcO::k#:Jۂzc:n3/ BJ + k*[[:kkk +nb K ;* +:J +{#;*+{{:nRZ[+jkkKcs jK;KnJk+k +˳sbj { +2b{K*"šZzjSc#jJ;{c#*:JjZBbZ +cCs[k :zz +j +22z:jj*;{3k [#{cCÛ{{K[[Kkj[{*kzbb +K3 X(2;.~⛿GG_g_j +37GG?*rJ{g_JnsCk"r/O*X, sVbw7ii)g'3*2rvJ?cKZsgG_joS3Kw0PLw!;hȸ֣7IɗG鹹KKSSSKr.RBNr^F&f¢o__G7'okJzo''g780L laa > I9)LJ' b"c'Oj>^N +*>f>s'O/sLJ'3sSg)_L0v)aYg֘Fs鹹i7g痉IRr*o矣^R:JR~&sg/"JSGWWoo7:8lLLl6)'vx xvW9i'Igc.?/&&^rR>^v&v&ciG"[WwgO_'OSo7fXPlL P ˹ ڈXw)y K.+'_/z>F~b:R^ȶWiiG_RrJwKS''O3[(`P0WB(8{׹yIWOGi9igk^//ʾf;vhF_)7ڊK/_g_S33CSSs:3?g_f8@@8WyiOF9i/g׉ Wgcr>~n#+2NNrZr6frSW7"rjg7GG? "J OCRnnr:;OsX(._W">^CgiGowZ.n*K[K2>B*JB~&^?ggc+zKs'/ۋ {sos#z2bz 3S +F 8FrGck.GOoo'ǷOcJB2R"Z"BrRrBb2N2N2:[3#3C//SS/Oo/[+CRV8؀`XȆ wwgJ?wWwo_GGg#r.rJbrN.Z +Rv62_S[C/OgsSc3S3ۊ;:p@ (7iGr'WGssgw)s.R +>~NR:K RξR&J')7bs_'sSSOS#Koo.(p0 (7W"27'SKKgW [:J +;j~~>>nʂfV&^'iwÊ3oO?/cÃssc@Ƿ_gSk?G)i)G_osnK R2br.n.?/{3??sOc{ F @@x(b wwC#ǷǷ77grRn.Z j"bB¢N.O_Ϗ//?OS#sSs*+kˣ{k(8 v{'gww77g'__'3*ZRn..rb ++kJ~r*CCoOOO/C{+Z""bz*:Fv6F&~>rs/'gg___O/3 jzZ22rrrb⢢J*kkk k KKk; +***jJzښzJJj K K K kk{Kk++*+++kj*++jk+**k*kkj +jzj + +*+jj*{ K{;Kk+**jkz ++ k"r2[CbjJJ K jKʊ +j+ں+j*+*k*K;K ˋˋk**jʊꊊjʺJ +j + +j*˻;;{˻{ ;{ J:j:ʊ:JzzJ+** KK +k+k *JJk ;{j +kk +*KKJK: + +:J*ˋ {KjjjjJ: +Jj*j*+[;;[k;+ ںZzJJ: +++*;;;;JJ/ *J +j+*j +J^ scC"* +ښ:: +*J++ ʋ; ˋ* +*Jjjk +{** +;+++*b:*j+J+Z +Jkj"2KjzjkcK3{˳3/껛+j[s{+"[:Kںj*RbBksj[";+{+Kj +* +뛋 ++n‹#Z2:;:ˏr +.z* sj#o;s+nϻBNN#+ϻ;c[2. £:.k[.kSkK  +oO*Ns.Sb.K*+"2KK3+>b'*O?'3 +>3j**/*.n#S/ 3ggb;oB~RcwZ~bC'Gg/j.fR/OSb[oZnJ ~Br˚ʿ#z +?GʲNf^N22R*[ +"2r"r +s.~N? +R?Cv&۲K/'3"N[cJ/j j/RNRzK;K#c'{sn~".Ϗ?>:2 zR~nK;*ڲ J3j2› k3OJ+BRJb¾>>&> +RnnonrsoC/CBz{ڣss j#;bjB +: Jcr23{>r +J[ +j:JK{k";SoCkRB2j{CkR"K;sNKZ[sz/o/3ZJSC.J+ "+k{r"b";;cjBڋj[;*ʚ*+Kkۛ;+kk +; { +k*{* +j;*:ZJZ +kjkkkk; +*+Jʋ:K*k *+kkk*J*k*Jk +: k**J+Kk+{ +*** +:*Kj*jjkjʋj Jkz+** ++*KkK+ ˊk + *+* +j*j ++ kkkj +* ++kʊkj +***++k*Kk+* k k+*+j*ʊ:Jj* +j:j+jk+ **+KkK+*k+*+*jj +++**+ kk++*kk*+*k**jj*+*+k++K+*+k*++*j + +Jj*+*j+kk*j*+***j*+++*+k+jjjjjj**++*++++*k+kkkkk+**+**j*ʊ +j+ +j +j+*++k+ k kkkkk**++++*+jjj*j+j**jjjjj*jjjj*++k+kk++++kk*+*k+++k*+jjjjjj + +j*++++*++*k+kkk++k+*+*+*jjjjj**jjj+*++kkk***++***+****j*j**++**j+**+++*+kkk+++++++++++j*j**********++*++***+++++++*kkk******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_american/cause_82_loop.isdn b/tones_american/cause_82_loop.isdn new file mode 100644 index 0000000..b13ae15 --- /dev/null +++ b/tones_american/cause_82_loop.isdn @@ -0,0 +1,222 @@ +*d}EьDH$]ah `Hؘ(Riiyy iS[..R ÏOo?O{#s/O_g) )3h L@&8I!Y7&^7*_ )/FHFx xfWyɉwGǗ7)))ڼ̘\l쌰 m9!!FNccYa)y7v `Ȗ(" Y9) a))i 99$ <$'ډ1AAAWc(;_I!1a+^f@,9!aaI))Gg_ IyY!Y! ,쀇!9AYa^ ^Yqёi3xV^F~O_LJ')9YYY ))wi$LL,!Y1w/Wf88'!1Ȉ&o)s((F:+g )!Y iiWww7)9L$|LpPYA+VxOyaAAAyg&H8h(f.I Hyى9 I ))W7Wəap|LpA +2Hoa1Aa 88W i ȸ8֖99I )iw) y7<GW_( (iyii77i!l|l,P!GSNFK!!!a! /nFV{VV&SgW WWW7g'_gw88h p ` (6J'O IYY9iiWs*2F86k)I9y9 )vXX0P`@ljAaYY)wg.FVhH8ظHVֆ_G7i 9y9IIiǷh Xp@0,0`{A!!!aY)i>(ȸȈh#g7)Iyy9)wG X 0Hh iYaA!!YaY)GN>f6ȸ8Ȉ&7 99yy9I )WGg6ؐp _ 9!Y!!Y9)G'Z.6VȘhF׉ɹy9WGf X0,P`ȶCiyyyaa9ٙI _o&vh8ȸX~šo'G)i999I חWi+ p@p,@``VZW9Yyy!aᙙI ׷ꚞvV8H(v7)'IYYYaٙ!`  p`vrfV:yW)iIaqA)7S>(((HR3KiyYaaaY!1-V|0KVzO2~2!aYɉyIivֆGWjVVVV)g"sGi!99! <ǎn viy)7GW.6)/__'gYY9I!^vya!ɗgG72 O/JK3/{ +g7Ƿ7!1м/S'ghWGW)i W6f>g33_wG'_gGwW)) i 0X8F~kC3>&ƾ[#?GG77_c2 +ۻCϟ?O___'r&ƶV((֖&~2BG/+JBB##C{#s/??/oo{B&F6v6^~R2:/_g_?Ss{cZr2˺.. k+B +sscsS/;k++j"r.Rn.ZZbbbzc#CcCsooossSo?S#kz:z~^>.ں*#s/oO?/sS/s;k*:Z"Jj:ڊʊ +j ꊊ +J+ +J +jJ::*˻{ KKk *+*+ +:J+j+*+jj + + +jk+++ +k +j+ˋ+j*++JzVw_»k~JC2z +:zJ +ˊ2NO__3RR2.R2 kk::rN;C/oo?__*;B.nN^^bJ꺢*[{K#_?CrrϷi ) 6 +) ih(6&[OWWG/&>.*3Ggϻr>nnRoCnR."[sûrrBz:˛Cc + ++K;[{ +:J +J:"~(> yy)Gs;fXxh_+ "^z7_z": +r2 +s_sz.2zzʚ"n/')iSO +hx 8vjϋ2ξ^f&R'Wo~k3S ^s/SC[ kʚ"rnnk_wGO'x`xOWI )&^r)_FN+'sc[*RN~~_Jr~~&f^;חG{ +j#)i*6 @8ˉa φFNbgi ןRh(ˇ)i)7?+'O;^2;>?חO{:wW)WoHpP/AaZχ7wW)w_*V6")':&v^&^.C.ZC'i )WIL0a mWh0p# ))nh /Iታ.Z3WW)jSgWWw7)I?v<|f!- m1p`(9iGw)v88YaYiH0!Y*FY!9g ah$̀ -MY0,xK!y'/7wR8>7ay@p91g&H8^9၁WW&p||`M-J,,)!YiK'_h(nG!a 0`C99s&h+!9ȸ|<,Y p,aIoSO^hf !YwZxaar6(F7!a!Wyi8 01 +`P@ iى7Sw?8V)Y!YiH`82)7FcWa9oXH2Y7Rn3wiyYIi)IL,8Qq1yX Ȏ*s6G7yfvN_&^;_))wGO?3s__7Wiذll_G&&Zg7WG{J#*gg_G__OOgW 70P8F#;kSos3b2Ro''g'Gg'?O_3Cs/ojʊ/OHH6f^N"+۳/oSg_G_S/O;BO/3{{:cn.>n.>~N2j?KCsKSsggS[["R"Z.r n&*>.2KSNC.rc NZ/?'2oO3jsO;K +nj.r:sr":J.:Ξ2z.âSs;c +; J*rRb^bz3N{b&3/.[[KsNRz +k2/ z +ZjKN3Bb^bڲ+r"s:soc/ #.rj* +JRcJ>z3sOJ +KjK2~?SRrn{33O:Crr +jھ~/fBgsnڟ:V_'/[;S_f&2 &OG2枟&΃Zs*frRfN._†; +_ROCn>"CɉƸB_jS&/JRf^_c_[C2&kbczO/ZjBkΎrJ+#gJ^N~:'22sK/_S+JRR:3΋sNZS^˿_C[BCbzORnJ˃KbC"bC +">Kn +z"/r+j2:S:CS>:[sjNo+oso/&Z+Jjgϣ _Oz?Ê+krb +#΢cb2Âb".{{;n.K:j2r>Kz{CcOs/s'?KO/ +:R**j/ +Bf(6(v^FNR2c'[O'oog_So?#/k*Kr +"(Vh6Vn* +?_?Cossc.o3ϟS#?SOss[CJK;*Kn(8ȸhh(6>b 3'GOSS??{ k*oSj33_g_*"b_sǢX Xx88&23'OϿ{>N2oOS/3__'S'ih`` xf#o_Ww7G_/_o?'g__BNn.R +/#/'gGgg_gG7W˘` x^g)77"'g翊~Nr#/S/?wW) 9H0@ 8_7'7WWW_r/'g7SF&fSO'gW)Gg7)i(0P00 `xg G)wWn"'wwGww?V6.jǷ7GGǷW)wGww) @,P xv_ W)W77&~wwWg^(H&oǗww77w)W77GIľx'Y!3o7OF_G9WwWCRX~+)iWW_Wi i !!<|'WW'))y9I aqs\ !) ___0b!Iyg7{'JX Wic')99 iqy |Ha Jc# (7!ٗsCo/Ɔf39r.RVx7IɗʻO?W iɹ))q|`ɱw;{Z()Y':;J^^GyGB>h8^鉷oj˿_'wWi W)I!a<2A)n+00`G1!97ڻBv΃י_ +^r2&H7׏KOS'g7 W9q3|lؙ1ww_j6@PHAY i[zn_y["~V6N/Oj_gwwWwWii) 9!1lW_.p,`ṉI)/VxVKiigCv6&FORosii)) 1:p(^ٙg`) IYaNH(Zg iGnvf..HnC/gKڿ )GI ,\#"O7swח)W`0p@XOo :Z;.?'WWǗ?SSosggg'_' h8 xV6ƞz»'G__緷/O?/3So/3o'_;{*s:z*Fvv((&~"j*c/O__g_O +/SRBJzB/^rN2nRjn&&nRboks/+/_gGG'gsK#gBrr:+:BS6BZz +.jRnf~~.R^#"2Z[_gg7C^jNZ +~jbbnC'o.b2SJ>ւHSB?rrOC6'nG6ozϿN#SV?S'/S2/VJ[o3k;J6'222v&W.^/־~cO'cNRvBB +Nbks_KkBr~ϋfjnnoJ/ϣjoR+ :n{KۻN. +#JrJz#J"b"{;cs +{c*ꃣ{*;3+*ۋzJ +ʊK;z*jJ + ++z*k*Jjjkk*ʊ *;* +j뻛 ;k **:+j*+ ++Kk jJ*: +j +:* ++* + +j** +k+*+jJ: +J*j ;j**j+ k+ K*kk+**+ +jj* k+;j*jkkk* K K+k+k+j*ˋ++*J+*J +JzJ +jj +++JJ**++kk**+*++*++jjjjjj++k*j**+*kk *+kkkkkk***닋*****++jJ*JJrz[ : :jg#sjCb[*"*k**+ K ZJ: +: ;+k{"j ;kz*j겢 +./;z3JË[ãr#z* +jCJK3b&ZR2s:_Fffgo/S3)g'R+NKRSnr/s^zCJ+:Ϗ3b+.~2kÊ ;KonSs"+k* +ZSozK+ ns{.oSks[Nksb.b#R;3bKkzkKۚb?"Z/oZb/::B:osK KKKrZk{Jk2B[‚/cczRK;2.3+{csKʣoOOZÏ2;+ CJz/3K{{(xxxxHhVkG)iWw7'/OgGw7_ϟ_ +2BB>>nrښzkSOF8xX` 6rK 9I鷇c {#**{ K;;3cs3Ã3[{;j:zZBr涖v66֖NsGww77777'osc*"rnNNnRRrbJk;cCC33Cssóc#K * +Jzzʊ*+j+j +ZB2rRRn.Rr2B" +csSooS33C[{{ k+ +J:Zzzʊ +**+ +jjj +jk++++** +j + +ʊj*+ +* ;{K;KKKk +k+**jjj + + + + + + + + +jjj+***j+*++*++ˋˋˋKKKk+**++j***j*++jj*jj + +j*jjj+****j**+**+kkkk++k+++k+++**+***j*+jjj*j*******+*++++++++*+**+****j***+*+*j**++*+***+*++++++kk+++***+*+jjjjjjj**j*++*+*+kkkk++++kkk++*+**j*j*jjjj:JooJ3S?+ +/Z:K3jB#+B~j/ksCbv>__oCCrR&KN.+n3#zb.Bc뢲Z{K* +{[ój2z {jJ* c3sz2. +K[Z +*z[oóZB*z"{k+SO㊲r*;KR.S#+sS2RB2 [S;r.#Sz/RC R&ƶB#w7_k˟#nv2g[>^w{fhv:GCB^ +Bf~[*kj/rv"g3.rJ?N~srgw^~oG>&_ʞ6FwJFF?7f^C&fn'o6_~:r+nrsg."Z +J +brsoJb*oz >BJ/33sZ2C ./.>N+bۏʢ"Rj2 + B2.zCSs2R*Jjڊ[KCS+nʣ/sr#__Jkcr^z[cg_o2b.Z~ffNrrcSog_'?BNfRn[jn^ƆR2JzZ**{SSO?/sSS[S{ +K3o3#J/O/#;k[/',,F#wF&g_ǗG7W)iiG'S{ {oO_ x,ܤP"H`^?)W7 yI73֖&wCkgiII?wWyy,L$ [1 `N7Ww)iW:3_ +BNnFf>gw_?GIw?WiyY3\ 3AqAI& G 7WyY7^7g>6Vr7OgWIi) 9!y|\L~a@)WY9)?6CGW#hV>WW_׉gǗi\lqyFp`6 I9wwI7O))~Fvvh~ i;wIy9IwGw)!9|| Xq-R`@h wgi99WVfC ׿6VhN^ iw7iii)W7a(^3)ᱱYʖ(W7j[˞GSiii) yaxм|l'o&Hv>AqIr&?_:JW`9*Kiy )WI!1Ǭ  ornr``X6aAW_k^() 7B&Xx8hFS)׹iiɹ鉉 y!|'W'o7Wv`*!999OV ggskC{(hV.7w7'w)ii I9l̼ VWyٗ8'IAy.fʂRn^gO^& '7GI9I 9 l08HcYNH(3 !IWvv3+j?+&3S/o7w)y@,,0XgYI() !aYi:>zrV( +KOJ3?OgGW鉉iחWi0@`W)ǻ~h62SY?:6 +S[nrcgg7w)'?oKh8Hx X&r[OgLJ˳{[KOGww_#? +b/CrsGyٙy9W@ >*G) 6ƶ~o')iIyO+>F(V&"* +7?3kJ*2&jJ/'G2n6Ffk GwLJ7g_'66H(ֆk3/ˋC#[GgZ(^N/sWi7wF8xhfB'_ocjnn&b:KwGwg?.^&R2B⢛sSã zZ:Z + 33/k*&&n>^#/3Sw)鉗&HظXvF(63*BR{b__G7wOkn^>&j*/s#+j +BB*J{cSS33kB2rR.bjk3;K +*Jk#ۻJ+ꢢ"JJ+ K;;K{{+**kk*"r~rgWKK&֘趞^{_/_?j2:ʚrR?S_LJoSon6~/77'''''7/F`(F(.GSc_rR&Oi''_>.~^>{{C[J>r"bcOoo[6k__GWgS'7_V8`h(F^s))7"~fS'Wii_Z~&fNSOÊ.>Nb cSOS+2..&Vv&g'___'O___gs(VXXXvgw7Gǟ/;:˃3O_7o:6^G?K W)W z X0@>6 #iayGk*_g_');R&F"+~/'/_O3S bzr"b"Z&^.~RK#[;o?_''_gg'''_?SSc#KZbB.2RrRrz˛c#3sC[;{k kk +j +:zbbZڂ: ++ˋ{;;[[KK뛋jJkڋk * + k+kkKˋ닻 *+Jꊊ + + +kkk k +k++kkk*j+ +J + +j*+j kk+ k kk*jjjJ + + +j jj뻋+++kKj* +*k**ˋj+ +***kk*j**+++j*k ** k*jk*jk*+*j*+ʞ~:_>_NS:C""c++z**k:*K + ++zJo2.n3S +2*sJjO⚊:c3KʋKJ~.jCO?3{oS.zڊ* +;;nkZrB_)GgG .#j./CFB(h**r+ +N[n__sN+ۚ'[b3˾/C~b f?sb_gj+*/fn&/o3+{[_;j{c2&[3;.kNKbBJK3/_' s2&~NK"2ۊsSsokb#* jjK+ +ZRs +C{[ +2:#"K2{*Z;k:+J{ +*{K;;*K++ +Jj + +j˺** + +* +kk ++jJj *++**+*** *k* +**+**j*k*+ *kj+jkk+jk++K+ +**j**jkjjjJ + +Jʺj**++j++*kk+k*k*k*+*kj+Jj*+j ++j+* +++****k+kk*k+*jj+jj +**j*+ *****kk K****j++**+++j*kj+j +*j**jk+kk**++kk+닊jkjk*jj*j+*rS[k; +JJj * ++**jjkkk*j;* + j +j ++gb/Jz[KC2ˣ.zz +;* +[2/jNobh'.7)oj_b#s#ŽR6zf~7+j2{fRnwg7(/rHN7wF+/#>'v( +v2^kO'._2g[.>. +6?2RNG.:ZVnSgJr#NKGokk~/f>)?3fN/{+ +f_ +[.'Ss +*^cR;;;3K#nj?K2go^ +k[kZn_R.W +;ss'f +n~*kJj^RBJsJ;O&s*rOR?BKC +r2{Sc2Bs2S2.>OOBJ.ZcnbzbÊ2»#{s+{;O3oOO_*Onz[3*rr"gPXx_')S[/W I)G'__O/cc3Br.ں)?L< llp_w'*gW)I;Ʋ2H&g7 *og׉ɗGGocG/$$| ,X؆W9Vϣ'w9 iOnn"{Jhxb''sg)Iy w7G'7)y!\,(k9zW!I3΂O*X&BwWW7gSWG_w77)! >f)N8Xh. y!ɷ2# +R2{'S^HX 7Go_iI)GǗggw^<\ _*F_8xf Y!Yɷ> +σZCk>vx#?G'GSOI9GG_ X_^j)7 Ia9yÆO'b>:J#GG7) i)wחGIlVG#)) 8"Y!9I!i?S'_Rn~(6?Z2 +gGi )חil|LpxRsr3N8 8FgyI! 7{sZB&vVVFs+Og'iIW)W))wG7!k̜ @8RF{W?֘xh y!a)/o(V&SOk"OgGi ii)))ח<|L6F:X6W ayS"nRRƖ(v& kOWi)i)iW7G <иhϚ^v#G7 yفIg/&.h~JZC_i ɉ ii)iL0x/j.hZgןS)aI)z&r(hf.Nÿ'7Wi I9I)Wi`L0p3+''ǿa9 99i>2^ƖhXx{R2wG?999iii!(6֘Xxh(~ +337i)9yIIii)GW`X`@,@@@ ^j?YYYYaayII'{(X8HVv3gwi9y9III)W7H `@,,@`>YaIɗ'/+f8hfS' 9yyyIɹ)))0@p0@ `H6oGWYa!a!Y9i)G?VXH`h'G_IiI!I iW)Ḽ ,@ +HhY!!A^6澆~>XV  +I!9Yy׉Ww7)91ldx0X9f8(^&1y9)jgc[KJ2^f6VFCo7giI i))ח7iA9\lxv H(ڷϗg?.^ZK"(_GwWB gI9Ii77wwGiٱ\|v23)_ ` 6gi ə gj'7?C>&R[r`(7gGG*i)7w7GɁ\ G/+R8؀ZəWi/K7g{zb>R‹z.XG ;_) iWggwGg' !ِL#s6CXY!W7#3)wk.n2zz;xJwO[3osoW)w'Ƿ7)yሼж)y&f*X2Ia9)gO7W'&nڛ+r.bƈh3KS7Wח__'GGYP|@^ f(hWYaayOgg/gs2 +n&V*G7_3'7w7_//i0@ (>"W))WWj*"Rξ>F~rJ*s7w77?_wxָX` x8&O') IiW7g_Bf6Vhֶֶ6f[_WW))ii)Wg__7^XHX@@ V_gw I999WwG'Kb^Ɩ(h62#'GWW)iiiWw'GxX`@@X (^2_99999y9IiW7_obhh(VVV2ʃs?'w)iiiW'___hV `XnSgwy9y9yI 闷_o:R^Vh((V6[WiiiW_'8H `@`xv^OWIyyy9y iWvV((((6Bz_)iii)W7G__^8 X`@@ji9yyyy iGr^6(V(VvRB;_)ii)LJ_???hVXHC)IyI7s;Z.N^F66vv6Fro'G))WwG_?oS33 V(x XVf3g)ɹy9ɉWG_ۺN&F66vv^2ڊo'7wWWW'szJJz.(VVhHx8VvfG) IyyyyI)wC ڎ~^FF6~2BbS_gg'oS3K* +"bb"rn^(hhVvR*SGi iWG/".N^f&^^>.2Z{c3S_OSs[k:Zzz +k/OK^VH3_7w Ïs?sB..r2nV(F*/?csg'O?__'_Gn,,@ xفaWn6hg ii)'V(6>n3gw/&66&ZOg7G_SKʚ[3oOg'_?V`p,hW2~6.O)yɉW_^vVr ÏG'r&Fv)w)W.O''7wWwǷf l`HƊWY*^6V6zGis6Vfr#gGƆ^N3Rfnjsϳ_?_os#S _g'o_gg@,0SW99w:)II )ON&f^3?'''SR^h)#JGwwwwwLJ_(, , s!Y ^6v)y9 7_k#S?_'s^^2sϏVJ?[s7'+C??'_g_?o/kp0`Z) IW'Rsw)WGgcBz*v6~JSOO'?'ggϏS'x67 i?? +/_GGGwwG_C+J ++#;k +j"z +n^~Nj;3ooOcóSS o:Z ":Z*kr.h8vfF&^rKj g_燿_//'_OSkkzjk +Kjbk+B⺚B;ʛ*r +{jn{czRcscnz?⺺/zZ +jSk N^[.+ +k#J+Z{k?+ϻCc{Z{:[b/:r2{sZ{ +bo[_"RzSzJC~{rr +3nRB&jr^c ;_zcB{jk3S2zNBN+B" Oz˲R{Ž*^ +2{3 *JsN{ *Bzz#_/gjBS&SB[.N?.z*"C*:O*+^&2s*[Rk**J2oO[+2S3j*3jk ++n¾.s +SbzZkNR*sËZOjBNC*23{.2s#.NkO㊂z #jo ";.C;s>B'SR+#[osF{r + +:;SzRobóJ*/[r ;" +KZ[?*r:r."*o#ojOjcSRC:n* 3J*.*R/{o{r+b{sJSJZ2Sjz2:[/ʊ'Sn*Or:.+ +nRn*?;j S//R+:[;k3/rۚo/"#3r[#OSskb;z2B 2B+κbBc/+nn&j* zz  Sj J2Jjzrok S+ +jj{΃zb3K;3*/ ʋb[[J‚#c"ۚ +;;C;c:[c#"r +2"k k2S*{ +ZJ +J2.3#["ZkێKJBb +krZk:;k2;cCZ;*zs;s3JjZr{"Kkj;ۋj": jJJ +C*j*R+#k*+ۺ[ˊ +J rbb{ʊ*{Z z*[kk;Z"k[+zzJ +* {:RÊ*[* **Jj;j: zj+;z:{ʛz"Z ; +z":J*"  J{ +ۋJK +{jzK+ +;z{j# +* #kK+ +k +K*+J kz++;jK ++{jK jK+ z:kj** +*K**+KJ*j** +*k kK*+K +jj*+:J +;*j +J+k *k+ +Kkjj*j+ +:+ k*j;ˊ K ;Kk{*JʊjJ:kj +j******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_american/cause_83_loop.isdn b/tones_american/cause_83_loop.isdn new file mode 100644 index 0000000..04ce32c --- /dev/null +++ b/tones_american/cause_83_loop.isdn @@ -0,0 +1,187 @@ +*d}EьDH$]a&&fFFFR;s?'7wW))W)Wחwwg矿kJ".nrn> Ѐ(s_ɹ )w_Wr~VhV&Njg_O/33/?OSs3SG xg I ɹGo/ GWi iW_+N((VvJsGG'S[O_W)W7g'g'* Ьl &OٹWחwosGw)əY92H8F*_777oo緗)i)7O O'N<̌.. I!Y'w/)I!!gۆHHxnK/_ǗwǿOG  +bK'_<,Llvrᙗ?G?3wI9Yy&x8VJGGϏ_gw) iiiwg/#*:{lL,PlPfI7iI)) iOrf6vFRgǷWWWW77LJ__?g'bHx`p,p@`X(rI!a!)s6hH8xHh&b/G 99 WO#V 00p,Аp9AYٹiiWǟ"xHf")ٙI9W׷7o*p0PpȆW99!1aɉ(X VgWiIy i)__ 0pl,PP h&/Iy1aaI)w.fV xȈh>WIyYyi)_g`lP@HV.GYaa1aa!Ii7#2N6VHXXhfn'G9YYYyyyIiWw7F `,l,@xfiၱA!!ɗ'zHVNs_7I!YII )WWX,,,`^)Y!Ya!!9i7O;RFv8(fbsWIY!YyIiii8X@0,0X'WI!!Yi7^xXXvV&o_9Y၁A1YH Lp>/68HVR)w IAqA!g:&F^rhww7_gWY!A!PfgG@kYYa!&:o/k:˲Cw7?')ii9!yYa`<$<ȿX>ay i2/Ƿ'^Vvn7') ɹaa!I( Lȷ)iJ~ZF Vw㞆#)W'h((vfn+o緷OɹIiyaAai̜|@w))Jzx)YᙉWwg;>')ןbVhV۟G_Os_wi)W)Ia)|lgo+()aY9_W)G{R&vV^g7?GWiW A1< '3g)_F@.w9yI IɇF*gw^^>~ +''__)i iWWW)9aLL,`/~rg"V [)əy)S;ʺ۳ +N.kS/3S7))WW)׷g?B`x趞Bs?s[ +..kSW)W7'cK N&[3S3oOo3KN&>&FF^~R +CSS_gGGGg'?3ZښJ: +jCSOOKj²n~f&~>+[SoO???OOS[2RB""bBJ+K ;C#;{ *Jjj+jzJj**k ;[[;k**:j++ +z ++kj +* KK{ jj+ * +j+*j*k+kˋjjjj*j+*j*j**+j+ˋkj*˻Kkk*j +j*+++*+j+**+**++kKk:ʊJ + ++*j*kkkj;;* ;*++j*+*+*+kk*++++jjjj+k++::J + + +jjj*+kk kk kkkk +*:NBG+.fOWs."rr&66&{/'O'[K>bz+S#ʢBn~~N~ZKWvHHhh(wwG'o3Z>6F^*o?CjOOo3{*.2k{3 22^껃cOO_33#"Jj +hn*k3_?#&r+iiW `؈:WWVh(vr{?))w_&&β+3g_SR>^~nb SOo"2n.2/3.VvzW)W)wV hwg>v +o_gN^Ko_?/3K~3/3[*:2n~6V(aI7_?7@`(WIw &h越G SZR#_7w_K{{3?ϳ^~jS{** +n.n.?)))'W_f@K !YIz6FF6fO)9yC&(_oORf62C_.R"ZRFƎ7i ǃ2^s'7_so'o~ 0XVWI9 GcnF&N2Jgi G3nF'g_2斈Ȉ9i;>'))Gg'WYg@l`g1-qI&xOc׹!" x ٹ7KFV((hf7IyzƾCiIIiI! P|̀) Q9VpVׇ!!r`ay7XHB_WIbr 9w?Y!g,| - iXSiwGiYw2 8ya^H` 7YI7j.׹9 )7G)9xLp:1 ap 7wI9iO8x(a)V`_NxXryaWa p$| Q6)7g)9x7 vWAARhBaa!rɁ{`l,amm-aNX'_:C)YaxI9WSVX;!aa^Ky)sr2*W!0<8IёYx3WY!hB7s.FR2ww? +ogi 3ia | Qqa_h6Ky &'g&NGoZi'!y6l<< VYٹj.b2rf[GgS2O77G_g__gOϟgwi9@ ,Vs rr*ooO7Gg__'''_#b3Ss(X hFfšKKOgGgg'?gg__3s23K;:3*K*R;c +Z2*R&&f^B* +n +*÷O{3*'O_? sksZRnRKz{Jjb+kR[+2*#/#s"Z *o ++Jc3SCjók:b"ZrJkcJjˊʲ+J;+K* +kk# ;*j [3c;J{;R.g>_rjJ:*z*Zk2 +C  + +Jz*{z +.º{zZ#r; J.J;J +sc2ڛ+ϊ*RZK3c2ns3Z + /J" ˋb +*jkzzR.."c +*j;kC KJKJ +jK; +"2.kj*s{>+c+K::.Z;K3zK.jj3Z3C"Ks*;o +Š>#S"RS**s n>"2š#^#[>.+K.kJ2R~bFng?r[O2Ov{?;?r +j/;"s_3r^oB +k/kJ2cgZ*:2.BnK"j.z"j+>;_{bcb_ێ+b{K +k2*2/ S23kjn +#3cccڲ .kZ [KZCR SrzC{{Z΂kS:..^[ZsocJ*3;{ +Z{"3"Ns*bZKڛ[S3r CNgRf#R/.Z/ZO JK#32K3_jSZJOsSs3o'*z*+2ûr Jj{N2*"#kCS/S__o?o;S/#Rzzڢ#R((ffz{_/_7g'kJR. +Jc c_OO3O/SoHؘ8HVhFB:k?wG'_'''g_??o[*:2zZB +{cS''/oO?_&8 8HHv{CO'77gǷG_?onNNR2r:J#c3/___'''GGR``X X8H^;c'w)WGgǷ7G'?oJ^&&&2¢kkۃC''ǷGgG7耰@ xH''W7__燷wW_"N&Fv2 s33/7wwGGW8pPp 'wiOgwsO W7gϋ.^6hVR _''_o?g))WW)y!y ̌) ~r;/#/_yɉK Fr_gGoo_w)iWW))iIف ܜ,s i9I(鉗iYa!&^^('_ˎs_wy)W9A$X)iO``^YIɉIFf^_s2.vF.O7'SϷW iחw) q̤$)!is:/V`` Aw_'R^7wCf("GzRoG i)7ww)ف_\\<,69Gf.f 8i{?⎎giIW~iI{{*_g) IiW77WIY1|\ A)g/^x@ A)?*;sBbS9)r"(f3wgk[iiiGGWy؜,XI^hp`6GY'OS:N^o9)::r(ƾ gsk[S/OGwחW)iWAL`!i~V9)o>v'W Os;&6;cS_Okk?'ii)wWIY1j;'{k?7WiWWW I

S#+/_GǷ7)Wwo6fs_'gGOSoooz `` V.ۃCg)WgLJg3{C/33OsϏOs/z*;˚:Rvhh֖zZc#o?_'''g_O___''_C/g?_*c?_ϣ . sBfnnfz^ RZbnc[_g+oSkSCS?kjC/*+;>C>zCr&SF/z_'[*C"K^BO[sbrzNoN3R"KJg"NN{3*RR#F>/o/_/S'Sr+Kn"c'o/ J^r΂&32ZϿ+jS? +;ZoZ^? ;bο_7>S{go'srò;j +;z+b^z/ks{Rb.3#Ro2oS~2~ +S~ۚ  +BoO">zϣjo_R.bN{:~BNR*"cR+^/ SoSk˃ { ;[b2Z z +zJO +CÛJCsK[;KJ*JbRjK#b;2k[zKk"k+b[#jʊS#{k"+*KJ jzjJz:+k:#*skjj:##k㢊b::jZbʺ:++z +*k J*J:Z:jj# kz +++*; ++*[ +KJ/[*JjCk.j:kj/ˏkJ2**j/Jz;SNjBBZ rn2{ ۟RC;oj +#ΖK'."'F7:3BzێۺvN>gsZ/So/j/"or&z+{R33.RZ"K3z~*k?Jn+Z;ۣ2r3k2*o +k{n;cZ'#^J_N^sn.O; *ˊ2N#^K/#*3R#./~ +[S j2*;:rjZB#*r +R{j +*:kBR;sJKۛZK#ʚb2*+2"*JS +3KBzzsJZk*R.Z#kJ;+b"+Krc ++[+:#{z[KJJsK[ +z#skj:kJ*j +ʊj +:zrbZ"B"J ++[[kc/sO33cS#;**{c3Sf88h((vN;gG7iiW77G's###;;{*jjj *j K;K[#cCsS۞FFֈhHVƾ.2Kg7)iii)))Wwob&F^~JoO_ggg''s;krf6(hhV&/'7WIII iWw&Fvv&>rJ['g_?Sc{K:2~FVHHH:/Wɹ9I )G?JfFVV6&r*_gG77G_?oCzr&VHHȈ薆wW i)7'σrNfvf^>RZ?_g7Gg'cKʢB2R.Nf6(V(((6nZ'))w'3;:Bn~&F66F^R"+[S'ggg'_Oo;J2...n>~^.*o7wwg'OScK +ZrnN>~^&&&^^~n +K#SoO??o/sC#{ Zb2rr22Bb""b"bB2R.n..rbk#CoϿ????OϏSs[Kjڢ2Bb"zJ +****jjjjjꊊjjj + + +jjjj* ˻;{{{K+jʺ:zz:JJJJj**++*++k**+*++++kkkkk kkkkkkkk+*+***++****jjjj +jjj**+*+*k+*+**+*++*+**+++++j*+***k***+*j***+*+*+*k+k++++**++jjjj + +j +N.c3sOSSCsK +Nv +ÚJ^>Cb>"2+2 +J+ɻGgI/?bF?2N(6rR:i"R?O777+.R?[_LJ6&ƶrF^oBKS'CZ[ۚR# +{{;{k;"+z[ CS#/C??OO_o//[?fȰ@ SSGWyWj?kz'rBR[o__O7i)Wwח77w)97< L !1V~h&waY!!Y >ƶvf?xfj&S)wC_I y977iI9!L$\|,АFQ_O8`Ƈ9I9SfZff:GK;phzgyyrɹyI Yi$ V82ᑑy^8haɿo#hh Iig'/VhVCOʘV[)7wW)WwI )GW$jw!h迗yyHhfgii)kkjC'rVWWGۛ;)'i9 yY|lhى W0!!NVh(7II3r^f*_g'(x99w_2"Wi)Wg9IYPpaYi*hg* y 2>2/'gobNh8~O)iC+g)W77iɉIٙ|PcAaiNVoA_>&Ny + SgS" *R{c#_WwGwWI9iIY`||1afNV sAO&Rω vFs3'c`8(_)i_"rÏ_LJ?sw)iY||qaV^(` Cv^&2? y V6+_Ok~gi7g¢2g/׉y ilL`QX(AV&bc R* +c G'cnRki)'CWW9I9a0<0ѱ )Ȁ)A7s^ry)^2BogGR^Xy)s;g)oW!aL@7'^ n(8' yy)s66׷_ N`8oϚ&Wi'Iaa@\ `__G~X YY)׎8f i)GO^Hv.7gn&f ǟ#'G7GG)9Y\"WI77'WǗ99! PyAig( {^!9IVv&n&Nb#B2{csS㣏)W iIy!A|lplهb!!R^:vI! !Y((VbSIyyy9aqp, @G?aRH֊h W)WSsx(f7GWRljyy9!!Al,llWAI&Vn~ !AG_~H> iww)+ 'wə9!A,0lx R)IiWgOWi 9YA ,PPc!BGgNǟ !YI)_ (2 ))wiW'WiWiai@l ,fƖiٙ)Sogg_yYi)ǂHVh7)w_׉W__7WW7GWy @llV(O?GWjZ'_lj9)*^FSGG7Wg7)G(PhwGG_SOg'7iWf~>^N~J/G)GGgW X`0pHH/gg7Ǘ)W7ϚRr>sgw))wwF @@`8{KkgwGW))"Nnff. ۿg'_gw7gw7wOV @ 88v ++/'7G7ח)7_^^f{cg'7Ƿw88X88fRJ3_GW)))Ww_>^f&RgwWW77wǷG7Gϖȸ``Xx8V>G77wWW))Ww7K.nbzS'g7777GGGhXؘ8xhVf&R*/'7w)i)Ww'/nFf~n*'7w7w7GGg2 Xx6fʃ7W)iiii)WwG?sjRƶ6&>RC/חwwGGLJֈȈX xF. +'wWiiɉ Ww'Oz.f6662/'7w7G''?(((HX`X X(vFo) IIIɉ)woRv6((F^»Sgw7W))))חw7_bhhx ```؈VvNk))99y9IIi)oBNfh(h(F^>K'gWi)))LJ_f8`@``(f"/i yWs;"^FVȸHVh(6›o'Gi i))WwLJHH@x{IIyY!!YYyI7#&F(HHHF^.:s_wW)iɉii)wgXذ@000XH6v"G9y!!99gSFvVHhRjo'wW II iii)GGGH00֖SwwyaY!!II WGnVH8ȸ(Fz3'W ɇ yyyi InP@ll 82v7׹!yYaa)))gvF^ȈFV(COoW 997wف/ pLl`* g6RWRi9asWO6fz +&֎OXV))w7)ɉIwGW) aqAl| X9+iذ.8[yqɁ19^N_V_~?VXsF&/9ISSWYwIəI!A$,0L!2*` /9q! ! [3;kG_~.J֐XfWzy2g! 7IׇWy!1PHaO8@w__)'7Ojo.(Hf>'W+O[IW)WiiYA찐a&hB`GW7Y_Grg'sCH8^Ki)"2'W9y)׷)iI0А,p I[rVF v)y)'7w[s'KNn2*/ 鉉7gWZXP0 Nf^6Vg) II) )'77;;ڳ?S''_?ϛO[[Jn + +(H888(vvr_gwWWחwחS7g"OBkGZ"^SRb&bʂ&Znovrzrz&n./OB?zgo'/wc''7wGg +_SJSf_'^Bk2N/(&oNbKs CsS{.2nϿjZBOrێzJ)ηrOF>o#/*&Z/.2Nkk +3ۿ _{cjvFk'N':.2;R/no'c{S>g6 +Bvw_FBǖ_S~s_on{ j{W)6?._^+~gzK23RW:^wVoN/C2g~)3ssfSBRSZJz&S::B/n/rO?"&_jnN'^;G.2(_hgr_zr_?6sOVI~^SCr#.n ;ROb⛎g&J?NsƷ_F#fJw/>r&Gǟg^&Oo+z2_oB+3Kn#6s~R?ڣC{kw*;G'~S#?˚/~?2 ʳN/**nbC3˺Sz;ozk{:n2CbZkZ{SC볻ss33**bkrkz²2;+jn2 +/2C*"+K"#*K +Jj["kjK{KjJ*k +Zj*Z:Z*j+:#k##*K +*+kjJ*Z+ʚ + +JzkkJK{:*K[kjK kʛj **+kj*k*+jJ +J ++j***j +jj +++**k*++k;K K* {j +kkk*j +*jJJ + +J:: +:J::Jk+++kKKK{ۣCcC3cs33CC3CCC3sC+˻[bN(舸8Hh(^.S_G鉉 ɉii7'oC +zں2z"Z:*;HHx X`` xxH6^jSii9ٙ7'S"fn 6.žss {3o?o'c+"2bZ``` 8(V&rgiIyII Wf~&NRBڊSO''okz2.n2z*k`0 (kJC IIIyyIii)g +V(VV6f>nښ +S'GG))GO/k +:ʊ+#s,,@ 8V;JsI99!!ٹIi)hVvcO/3燷iWO3OSk2~;ckhl@Xr ooiI ɹy!!Y9Iɉ)2N^66xX^3ヿ_?i ۂ {H,llPpX'/ko 9!!YIIWGO*ξ&Ɔ66OϿ_'iIgs3crN2r23VP lPXXJ+Zii9Y!Yy [r^F&.r3'')))?O².b+/0 0 zK2GiWI!ٙ99I)*&&&v*'s鉉))_3sZ:ZJ'p@0vg~SgWWy!YYyyw'o#fvf>^&&؆Nc./)))/g#{ ++cO'8l,0𰀘goF&.wY!9i'+RfF&^&^^V/Rn:gSg 7)))oS{ Ks쌬00pxV϶GyyY! _f&^f^n.F*bn*'_OG )W)w''g#3/~lP@(S^9!9!Y9iW2^^&6^&~~N{s燷7G7LJ'3ss3sG/` 0XVfJ(cg{') I9Yi))w7 NNv66&^~n+k/_GGG7LJ'_oS{/#GXx @X(vƖ(fjsg') II 9yWG*bRN&FvFƆf>R¢/'ggǷG'o/C# S x8x`2ciɹ חG2>VvV^._77ww7g'?S#;oOOr X`` ^RGiy9ɉ)wOZn^^fFV6F&β/'www__sc;K;sϟ8H ``X8H~/Ƿ 999 )wg&f6v6ƾ&2__)WW)W'_?/3/_oVؘ @`Xx&.iIyy9IW_2FFF(v&fr{3'w)7WWgs_LJG7Wnl@``^ϗZ? +I973[S .rr.&&66nB/'3//g_?_oo_'W9Lhև9y7XvcaW7 +ϗ)磻 ¾Bvr3?_??oSGw_79I,\ n`>7 !!WO3K_׿&&fn RFF‚+'OSg?OOGg_7 IIi̤|hw7HiIyY!GbCG))SR&F~.^r2..*sO#s___?_SOG`L/G'G︀@7)'[SW7_^&2f&KK:Z*S_g'O?_gg'_)II>,WS_8`@ragN.CGi)g[..>^^.:* [SoO_g???'g?'G׉I <|iN&vWYWG# +)W~>r^v(6~;;˳?OgG73{C'''oS/w)){0l~;R>JnIɉ)WwOs[ + ++BrRR6[rbJC/Gg燇'g_O_x8Xf2gwIIII )'/6V((Vn"3'7חwwGgg'?sۣ/~XXHH(N')9IIIIɉ)G'Sk.ֈxF2+'G7WW)WLJg_Ss ``@`X8hnG)Iyy999II97O2(((((VV6&nK77w77G'c[K{#sxX 8&KGIy9II9IɹIi)Wg_?c^FVVVVV6& +#O'w7Gg_Ooss^xhxX ~999IIi)/bvvVVVv~roG7777GLJ_??O/SS (Ș XxH{') 999ɉ)^fv֖VVRbʣgG7777G'oS3c#{#{^V V^?G9y9IIɉ)7_*R^f6F&NS'7wwwg_?os; ˻;{C*(V 8~'7)I99y9I Ww'3K2~&Fvv66&RZ 3_gǷw7Gg_O[ +jj*;;cK+zNvVHxxhvf*?Giɹ999I iWw'OScRN^&F6666Ff CoGw7s[ JzZz+*jrvV((F^rKo'Wi III i)7_s.N^&f&f&_wi )G_S[+JZb"j{33;>xX`Hn7W)ϋrJ_))wO"&F(FcoSC*JB:c3oOsK*Jz#S?Ss/o +Nl,PxN9!!I^^. GYWO6fNzfFV(VZC___Ooۻ[S//ss33{{ۃso_'gs8X`@VBw iΎcowiɉWG_Sk~z**nv6RoO__#O_//*o? jjR&@,@(r9YY.kg)I i)_Nn2" +OS2ΞFf>";3O_3Kk ;[so/SS//SÃ/__?osFH`0V΃i 'cZ /'7WWwb.rZJRz#/o/SoooSC[s3sOss#{z H趋 W_S2k'goZ*c*bƆ^>nBCOo/33#{{CssSSS/S[#3Ss33s뎈X`6GW''˛o__gojz"jj2Rrbz+ {;[ssC3c/SSc{[# +*+{ + + ++늻+*C6((6ff~2C/o_g'SosSsooo;KKBښ": + +"JjJ{Jk*J"*Z RK*cۻ[K*3kkZckbc*j[2;z + +Z+ +bnbok[Cz*J㚢2*3jKk3 +[3sJSSSZSJ{Ojs*ⲲksoR* kb. O{:Ï[jR~s"rk +bNZ"#^JO;K3NZ3"zʏ?Z2"c#rs:z[rK +3C2b:{ b{N"b+C3.JZ2s3jnsJC32kj.z.Zj:S +ob:;.so.3BNO[c33 +ZO +*K; ڻs"OR~;'3N.rCNb^Coo +.3_"b3 2k3"+S23.o.cKszOOjs:s2nˎsˋ:Z +3':go K*;+[3sR#:n^Bf3[RZ# +jc[ KO{?:J3SS{['B;*r{oR/[**+R" [ RKorϢ~js " +"Cro.2#3/3*g3~ڻ>3#?3z;BKnJ"C_SO/.":R3 rSK.:*R/.SJSZ?;?Kzc.:;n.: ~sS +rCJ:c/cjb[[[[[{ڂ{krc[._2۳nKz*;J +s+[ʳ:.rfB:[3[[2:rϛ+SN{o"s3sz '+;*>~:+n.J;* +/3"O>3K +ڛk2RzBC.;SRR3b#: sK[#jzbz"  Jn꿳2 3Ro{2*n[+ Z bjzn +:BCJrj* * 3cns +jj;jRz;cjBK +js +s3J3r;SB#jk +ڛk+ + + KJK:JZZ[jkk +b +K:+:kK +Z{;J;j ;r3 +;z +ʊ:J +b*JjzJ˻;;{ +JkJڻj +;;+jj +j J{KKk;+j +j+z *zKj+;k +k ++*k+ + jk ++ j*ˊKK j+*K+zj++j*:* +*j +z+˛j*kK ++*+k+k +K + ++: + +k:k+뻋**K*k *jk ++ * +k*+kjjk +* ++ ++*jjJ** ++ ˻; {j kj **j+*k*JJj*+j*J + ++k***j KKk*+jjJJjj*+j+*+*+k+*+++* +jjʊ +j +*k+kkkkk+*k+j* +*jj*++**jj******++*+++ +*+k* +j +j*+**++jjj+**+*+kk kk+*+**j*jj**+k+*++*++*j +jjj****j*+*kkkkkk +++**jj +j +jj*j**++kkk+++**++++*++kkk*+**+kkk+jjjjjj****+j**j+j****++kkk+++*++*kk++*****jjjj**+++***+++k**+*++*+****jj*j*** + +jj*+*+*+++kkkk**j*jjjj+*++++++*+++++*+*j*j*******+kkk+kkk+++*jjj + + + +jj***+**kk kkkkkk++*******jjjj +jjj***+*++kk+k******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_american/cause_84_loop.isdn b/tones_american/cause_84_loop.isdn new file mode 100644 index 0000000..6ac313b --- /dev/null +++ b/tones_american/cause_84_loop.isdn @@ -0,0 +1,245 @@ +*d}EьDH$]aƆRf":b/S3)ɉY!yy Wgϛ +/?Kl` ,,XV_giq!-ɗ)_F/7N 7?FH .r.Wa'3S/cWI <,,pxa)-YI'6Fr{: ٹW xX0`(^sYYᙹI'?g)y`|̌lИa)&ljIaa!I#fh P@v Ya! iLJwwiɉI)7)\|P,!ى+V(b9aWv8HxX6 +9)闇Ii)W'7IǼ|'wIyyYY!a!YYyIw˂&VHxHظ^"#G׉y9IIi)' @а`v7)iaa!aYYI)'*j2&6Ȗn{o7) IyyyI ׷'_JX pP0`X6;WYa!GhHx8H8Vbsg99I iWWw翟gX0Pp`XVv&wWY!!a!yI)wsh88H(f& o_ II i))wW6 X@0PpАhGyYY!y99I:n(8H&kci 9 I x0P8Ȉ^C'y9a!!y iGBfHXHhVF2")I9yy iIy!AAp̌0PX8fNZ79W)יA(X^ +#_Si!!y!aa1|d|v8*JXyaYyw~2cJh/_3zKi9YyyyyYa`<$L@/(&&[~Ya )BB&n.O_/RgWiyYalL\pHI)6辆XWRV(6"JW iWWə!10)9+~V`gy_'gNǗO3;z OGɉ)9!A`l g>Z @!a9_'rV~_Wi3*+[sWI I̜L0 ;: +Zf'9!y)g'((i)7'OSoljyI9qa,΂o{rN&o' zJ+;Css#* +"z;k* +jj*++ k;kjʺJj*jj +* ;{; K**+k+*j + +Jz+*+:^&[w R.r +c?_vVfB/s {{fZ3_ǷG矏rOg_chhvKS/bB B_gOj#c bbJsCr.z+J +K[*k;+jJzf&~3wiGo*Nn2#[/O?3fHB?wg3nn COg'?O~VH(+.: S'Z>n?_Okb2rr2B2B2.2ks__'O/óO_'gg_V.o +&R:GG_ b+3Bn&FƎ'W; /g7WחǷwWp0C i3 XHۇ77Ggoj&+w)W7rvֶ>OSj2N 7ח{2:_O?'V (9WhHH^gW7Kr2χ'6V^)WgBN +Oii!h ЈAR,P`ZiaI7"[Ošw)i7ZVx`H' '"vkgYY)G_'a((l<<-Y@̌@o91ѱW7GoGGO( 8Vw9Icrf^z)!YYWWIa lyaLl2qiRk_gGO>8>GI/~W9Wal|l -!^0 ,@Y11YW2nCg)+O_8h +iiWKRoG)y99 W) I!aW|n2ښ/'gOgW)7'?'Ƿg'/ +kkj["&XHhv6Ff2˛/'_'ggGGgG_gg'ϟOsc{Z"z~fNJR^vƆfZJ ++Ogg_''__g?O#R:+. +nN2n^nrNZ>brB+ڛSB{S??w'#g_?_'o +3k?3.N*^ + 2*K:rr*B{K#J;:3/'S_?Cb#_;3k+_C~&.#"R:&.N."nzrkb +nB&n^."*Cc{S_g3OOg_7c{O3#or2JoNrbSڢ+.*bƶƞF^&f>ۺ +* _S___ׇ''g_O/'');R*rs>R>>&rF>r&f˚~((^~>&&Rrr{CKϷGGǷ7)gOGg3SJ .2:>ff6vrNr"Z"c^&&Vƶ^oSC_[7os'gwgC##zN/.>2b"B.BrBZN^COOO''3/ʿ'__{C_#Ob'J'2Z>n.b2*&*[nfvFv&^&j/3/_?3O7gss O32>2b&>&2Z:2v((v +*?g_O_gO#''?gGo#3_c{s{rNz&NrΎCFֈh(֖F㏏Og'g_''''_cS/_O3 +/3C{:n nZJB*[vHVvv6R"K{#/_Ggg_S{{c##cCkC//ϟ/{ZBJJzz(HS_gggg'_O[22" +{#o+o#sOz ظhC#gg7Wǟ'LJgG7GOO[nNKSC3O_Ƿ3{/_'?''*8p00HJϿGOGW'W׷"R&f^2K'gg7W?GG7WW0,`HCWJg'G_iW׷?SC.(Vfk'i iwg7)I9IF lP'kJ '_W99y'Ͽ&6f+og##?giyI)WwW9!lp{7#(oiə99>f>.#kC'G)ii 9 ||̰r3?'OV8hh yy9i)Rcz~FV +o/'W Y9!\\&i ^hx !a ׇ[J'z~h^ǹYy?ʾ7!aIgW|ܼ9I&xx(;!aOro'Sw7O(6/K;SiIIIiWWAP\ `Y8(waaΆ#____v(6&:3oSgGi)WwWi9!a\|,hy*ָv x(Oay>gw)&Vfn +3O+js))wWw7׉yA ܼ01'&8@HɁ{{sj釋ffrc?o#OǷ7wWiWWi IA \<(AÞp@; a7_{"2_ w_†(֞'S+꺋'W)) W !|,g Iis^(77w7g +6hjsJr2jg ia\|v7{9a9( @ja3&[ljI)*fFv&'SKs37G7iI i|`/ X hV97;[fzW?fVF[/o_GGWiWW فܼ@8Ɖa(hX`6! &F__GSnF^n#/3ogWiIiWW ,p1ه&N6X ~o)9y!* +ϳc>&"[s''7iiii7)i9!찰@ RG^Ȁxji!i +r2#ÿKϷ9i)W) 9WlP@0`r["_v(6fnwWi Wi'"R33_?oOOg)iw)WWrR:K&fnk +GW)GCs;''O_3'GG_g7Gr@0@x6bb2 cgw["_'_7';SG7__CoSsO?go^x `X8vKK7)W7'w7Gg'_gﳃ ;KS* +jr^FV8h(FN OG7'wiwwW)Ggggۛ3/˂rc2.~Rn.>^f~hfffrj#Ss?/ogw)Gi__ +.# ^.^zo3~N2bB3bc^:3cKCgRWϏ*+Gk3;v&>+?nN~kFR'z>"jB bK/r&k?Sbz?C{ks_cŽkjo+'~C_nF f/.O^wC[2G3KrV^3kr&(c^++J'oFbgnr?'?*/rˊ#n^J'rbNn2vswS:R.fN oSg":^jGw>Crr./&sۇjo#r{.Oi~g.RJzoNz[OR>sN>fj[Rʏ[ +C/*n.: +" +jZ3k++K*K#CB2*Ê Z[;+rB2k{ Jۻ*Z Cۻ# [z+KjJ +:Jj{Z+j +BJʚ*K*j:z ;k*K Jk +jK+kj *j+JjJ + K; +j+J*ʚʊ*J +* +* kk ˊ**k* Kk*;;*ʺj *kj:j + ++ + +ˋ** +*k* + +**k+k+k+*J + +j*k++**+jk*k k* +**+ +k* * +J* *+j****kkJ++*kjj+k++kk+++*+***jj**+*k*j*+ jjj**++* +j+*++k+*k+**++k++**++j+ +++ +**j + kjʛzK*++ * **k+Jj +++ +j +kj* +kk+*k+k+ ++*K+k*z*+jjk+*+k*kjk;{JJ+[ +K +;Z{CZSJ:.j +2k*S;3J˺+kkKN23;nb+j~ +""'C#O&/On(bs2χ?#2oJRãڻ*ھb +:>{Rg[_>#2Zr[sjJ:ˢ23{;Jr;s#. +3k2znZJSN+#b: {J; +Jk#*;KjB#;J+Kkڏ +"2:Z3K""j#B*kJ +ß[#3" +z[ +:JJzR[rNr.&66^f&"'GW7W_OO/#[{z"j[c8`@``8hr +)IY!9)3&f~r*/3G'?_O_?/SOo'H`@0@p@@&rW!a!IrrR +{#SϿϟ'7___Ϗ_GwX00p0А`XVf Yٹ7n>N.2¢ kۃC3Sww7w7Gw)X`0pp,p`x/WyaAAaywOB~~fnrrbkkk##CSWi)Ww7GWǖ 0pPpz7 فaY97Z.~&f^j"~r ۛsO?'gg'?oOOoo~Ɩ֖Vhx8Ȉ^K3 I9I i)7/zr^6v֖^NR)WWg_ﳣbVH88HȈ(2S_G IIɉi)WwZ.fVV֖#/Gwww7g3JZ.N>&fVVr +/7W)))WWGgsJ2^f&^>B:k3OOSJ"²rN>&ff^>nJ3'gGGGGg'# b>~>n:*[ós3sS3C#k*JbBbbB2rrRn."CoS3ۻ+zZZ"::J::z:zJJJJ +jj +JJzzzzJj+ {[CsSSSs33#[;K k+j +ʺZ"bbbZz::J + +jj****++++++ + KK;{[ۛ;; ˋk+**j + +j + +J +ʊ + + +jjj +jjjjj+***+++***+*******++k ˋkkk+*+kk**+++**+*jj +jjj*+++**+***++* +r(///K{##+sj&ϲo[BF^(>_'7WG3j~/3v΋'΃f&3V2g){f>&Zrkn#Jf~Z.>~.?3ʏ''__OOG_'g?CsIxLp L{&&9qa! F6.F>Oi9W7*Ξ^Ç))_'wGiWWiI99y!d|| x!1q^H(VCy!!IcNVn3sx8ϟo΃YiWI@d\ X7X@)ׇ  +/W?^)ih9I9i)ٌ\PfQi&x6֘ HYIwG hzw' w +VR@ Ogwr9WIiGYW\NOap( +;)!vb>> g IgB.rz~~ F j9'CgR))W)G)Av,hɗbIIN`JWi8w7WsFCo ^(6.O)worJ/gGwG9AphVBiyg/[rRž_G&x^I [GI)I\ `qYw:niIBRvH/9WK.R^溿')S 2b3y)OgwIYA!<ܜYc8+sg H&i997 [¢r^fhh' i{+K)iׇ__GiIA9W7Ϟx8b)_r&VH^9G+zJ>^(6irS_WGg7Wi91r6! )6P@VY9wW3^Bw ??&bNƆCgsϻs_ww7wwGwq^\LFaI 3W'^77ii_^vvƲ"wWG[.  gi1,WiAA9@;gI ~r/;7 y9^.NHiogBj Gח)1,6v?q;`(((ISrV I GOhH{wׇo."gwwW77W a <  7h WaWW99ˈSS3o7 +6F{o73?ǷחWGww7Ll`OcgNX//)!Y"^K{?_CoOOg׉ iW7)WIYP@FY9wGiVhIyo.&fv3))7g'kjogG))iWLPpP`iiGabHV^(HW'Ff2k_iGGi aW lIi__a)V&Ȉ3W)I)sFhrjs׉)GS7W) a,,)Ggiف9B6HrGW ى{&v(nϗWɉG'''?W9!9P,l h7'၉.VH(wIi777Fo))WO_ǟwW))!,l,XS>rI3G_hhnN~OiyyW 7nvv^CgiWWgWWi!aXЀ l RvaGWV>Ɩ+W 9ik+h֎+'WWGGGW9!x8x8yWwə ~(r99iGGnvFƶ~_Ǘ))wG'C[*#2&Vhȸ8(6C'wGgC;J J+ڊsScSOoϏ[ÿ_7W7Xh`@h&i9)sNB/_7_?rnN~R2 +Z+cc3s*Zk22K//ᅬoo/SscjZ2&vfb+_''_o{"..nʛCo'GGg'#^Fh(VRsGgǿ/Kj.{3SOO{ʂ2rr.jJ{s[ j:b"Z:jK˻K:z + ++kj* + +"bRʎgWwIW낆hH. +'7wW7/r&fZ_g_'Sjb2>N2";C/o/s#+B2BkCc{ +ʺB:j {#;J:b+c#[kK;JJ*JJ+** +*+kj+*: +j+k++j+**+kk닋kk * + + +*++kk+ *j +jjJ** k ++j + +:>R #3O{+Z2 +BRrbn^&f[C/燇S33sccKn&&hVh.Zg7W7gcjj>&>^n>:[O'g'OOgohF@XX``v&fVWyWj#OJ.b?23.f&nJkO?g_oss + +jJZ¢ڂBrRRn6(֖r*K/gGGw7g_gggO/Sk*j: +:;C? F&8x``xh& 9ٙyyI W^V((Vv^"S7חw7gos{;k +jxx8X`@ xHVn'y!aaaa!YIiW/+^Fv>BK/O___;"Rn>^Ɩ(興hh(rgWi IIIIɉi)'/J22.Zzk ; *JjBb.Nr."2NN^&&f^&&R +Sgww7LJg_O33Cc *j+jzzzB2r.Bb:zr"bb.22ZJkʚck +BZznn2: +csssC#s/ss?//c ++jK +jK3>N~N^^:j+2bz[chWg';/;+NSs33:Ȇj' ++[OR>>f.o&_B_73/ n>'/_ZB뎢{/J>')K'On^f6R.BCor^£sJ:3nssf(3"ۏ[>Z3zSN:럳 s?c?^JGO2rO/O33fᅫ"3nNj/ڢZ2Zcj.b#+3bbObk2#۲z*˂?"czcJo/[3cso3Oʺ#:Z".ۂ2B*NbrcKJfhVF*3Ϗ:''G)חwW7Gg?ۛ[*rR:ʳ'f@А*g/G7)ggKS)i2/wobCs/O"Kc37v,ЬЀfOkw/sw'g)i)//&vzg_gB'77#>zS;C,'W9gG7)W77ח3"*(6sog72۟_OJ#Zszz#Ǿ000Ɵo/_ gW)Ww7O/s *kR6(k{ۏ:S3o[J*k {zbrrJ3oc((FƖVf>z:o/o_gG7wGGLJSCڲ2>>NNRj3/OosS[2BR +{ n~>fFV&n7wWWww'O3{zn&^^o__'''*Jzz+VV88 x8hVkW IIi'+~66vf~nB3_Ƿ777_{#k8`@0xH~OIyYYyII闷's6V6&nrK'Gi)w7g/??^x`@0p@@`ظRiI!Y!aa!!!yyI)W7_o^hȘHH66S)99ɉii7Ggǃ8 0p@`Xh2) y!Ya!aY ?zh 8ȸ(6R3) 9y99ɉwW8`Xx,,0p9!!!y&6( 8(hƞ(b7i!yyY9yyY1APLl<

bf_f^V(&nN /3'7GGGWgGgGSG'7 '*[ ~ςn;f_~B"Sbgf s'>Ͼ{cc.["c> +o{C +R;327{[7{K'3IGbr3˻F^*/ 3S(2Bڿƚk3zrB''(/&bfh)Ɇ([fW((9_(ovKȉ+׆Ϗvy&"~'_.'{+)b)?sF^)n"O~RS2 Vs)z+"KJ.n IhKo^gǚ_Vv#fWiR:F#/z{#:HGNn[rC_*.).2NO2_g/;n^rc/?2{c>oJfCsO&Sk^W>bnr_fn:^n3+r;{^>g^gj>RJRszn"S2kbc{+sZKCoo[:J[[:{ZC"bc{#"[c Zjbz +:* ++JK{+ z zZ.zBJJ[ʚ K[;BښrnR>.cs/oso//S#S#zz.2.2 +*#cã3cCc;j:zb22r" +z+ Kc {**J;;*;;;{*K J +++ + +Z +"Zkk˛;[˻+k+*KkK+ zKJj*Jk+ +*jJ+j* j*J:ZڢJ +jj+ +zjJ +k+k{ۣÃC[{c{;{ k ; K + +j +zR~&6V((V6~rKw)i I99I i)?+r^&^^~h8XXXxhVS'Ǘ)鉉i Wg'?'/*/CJ [jjo{S3:ƈ ` vB'W 9I99I)_/k*k[_'o?g_OOo8``````XֆgW9y iiWG_SJ.nrj+:{3_燇燇7gGG.,,,А0`((6n)IY!Yy g˾r#j2ʺz /_gg7 G__'g Ll,jB~^JgGw9YaYyy/((2k*Ss#O77y)W)G_?_p<| 0gf>77 Ya!9&VhHh.[ss/GWəIw)i_3?_wJ|GaY RH~#soSχ'gi ɹ )iWG3//?`LlАpF?R_WyaaٙY!shxBK__)i) 'Cco7y!YyII n8HF^wWחi)W_S[KpH^'GG9I9YYy9II'S+h(6N"js_gw)G7OosV@`H 0  xr/gi99!YyI )g[J.h(掚#SwW)i i))7g_O?X  0 HS9!Y!YIɉGSjn xȈV(^Z23/7 II9ɉɉWWwG7?'h а` VF YaYY!Y!I闷2>FVHHHȈh(vΊSOwi IIɉwg___g(@P,08 xNswɹYy9!aa IW(h8*'_鉉 7'g 9x @hꉇFJC_2Iyyy!Y!iO/#^ffvbz/o*3lj I) ww)W7G)a|0X`8IXV&&[Aɗ2g_gs㺎."vhfI*熞i')w_)闷wy܌HVk ``(>Y/OG7gB&f^NK+#o'_gGGGwwg)I \l;o/w)WH)9!IGrns77_B>f&>ngS?Gﷷgw'GwW Y0\ܼ7x@9yɗ*N2GWW[&>N.NRbjC;/_'g'''gw Y|Ж׹7jS6H!ٹwwbsGWw+.{Hn_[χ7g'g_??WX|'yiFXh'9agc;gw_cnbr~6/[SO_gG__ocC?Wi֐,,&22&"2Zi))I3+z2b&^R{O''ggg?''g `8xHH6^Bo'wiii yi)wg_Sk"f6H(.OSS7wW)))Wwww'_gg'_`8 `@` X&B{_79y W7g+n^(Vv&KO?'g7ח'{x``X (+7) y999 W7g((h((vNr +S77W)))W7'_XX@p`趾_w)yyy99iW7_{.(興VR#7WWW)))Wח'NjXX `p``8F_wIyy9y GK&vVh(VrKso7wW)WWWWW7gg_''gX8``` H(SW yyi)wgƖ(h((f2[_G))))WWח7LJg_'g`0@`vg yYYI)_?fvVhhhh(VjC_W)))WחwLJg'_g+ȸH ``@@`V^ Y!!yy9I)wgoc2^ƖV(((V6ng))Ww_O?_c @@`(ZO鹙Y!Yy9I)wg?S +Ž~ƖVV֖~og7W)))Ww7?/33oOS hhh 8h&)IY9I iǟ+Z2&fƶ6666F&~."#/G'?{j:::j:ڲ&vVH8H(F2#GWI9yI i)'s;:bR^fffff^~n+S'gg_?S ʢ22rn2r"Jr^&憶vV(Vv^['G)iii)ח7o3+n&&&ff^~NJk3_'g'N/c#3KkʚRKfV8Hh(vƞsw7g'_sC/g_?Ϗ/BΞ^&V8^gg?3K#o__?/3SS/csc RHPPV.Y/C[*i o^F^NBjsOFf[g''_3K{cS/33sss3C[cSSFhx @^'ɉ)gO/CC/_7G'O>.Zjs{k+KC/oS#;K [C/ϿO?s +hЬ,ЀhhY9)G&>WW鉉W/z>^S;6&~R{K?g__OSC;˛#oϏOO?_g_KhP`Hvۗ yW{BN7WiW#b^^β*C//SR8x"_o)?/_ssss/'G'OS&v "' YI'C~^>?g7iiWǏr^&^NKOOo3cn~nƘffW77)Osγ_So?S2H0@67iI)ǿSjn"SG7w7ǟ*B~>.{(?gw7'/_'33s3SϿg_SPP@FWI)GGR>K'w)W'*b.~.BJkSss+r2‚ + K[JNjo_/?/oSS;;+ +.>&憆^^^^2s??'''?o/SSSsssC[;2*z.:;j*b².BBn&.ۃo__'_O/osó{jzZZ"Z:B:zbnb"K{;# +ZJ+SkJ;kcO"K#os;2r*. +jR2[KRZ3j{rs;"k{33:/cn3 RS [ +z{k"+J "Cn"Rb Rb3  +3{?j{Skz+kr#s2*+N2Z +B[rr2;+"[[k~S.jK뻚r/z+3kcBc#Ss *sSZ + + Z3Zc +B[R +/:J+zr+3r":rZJ.[ +z +s#3"kS2k 2j:N Nb*"rK[3k ++J3S.ZS+"{#bRs룺:kz/Srrk2JSۣoz2oj Bo:ck:*KJʃrKKKJ*k3oC{kꢲJJ;z{#{ /c[{+#ZZr. +B*+ˢzSzs[**cc;B:ナk +"[kK*#z*kc" +[z2C*z:*bJ+.zk*BJ.bZ*:n*";rڎzKj:" +KcS㋳j#[s;;k: +zrZZ"rN*n2nB닊JsKC:jS+*knڂ;KrbRoC3C{K3kr^nzB:ںzz*#S{#os[;c +kb;KRŽ:n:*+. *#;  +{ +j 2"z""ξ"j ;*Bs{J"c3{K[;nʻ#/rj*.[RjK+" ++ +kr:2**zz# #Cj #3cckjJ+ڋj: #ʺ+[cb2Jz +"{+j3k +kjkCkK*jˋKJj{;* {;*J:kjkK "K +J*+ˊKjJZ;#kzz+;* +jJKKZkz +kJk2j +K +jK;+J:+ZˋK*KjkZ *J;J+*k* *:j+j+ +Kjj{K+jkˋk*jʊ*jjJ+ +ںJ + kk Kkkjk+k+*Jjkj*JJ +j+닻jʊjj* +kjk;j +++ {K* k* + +:j+kk *k+kkjJjJJ*++ +J:Jj+ kkKK kKkk*j +j* k+ +j +++j + + +JJ++j*+KK kkk+ *++*+j kj + ++k** + ++*+j +j +++ **jk **++***k+**j + +JJ +jꊊ*+k ˋ˻Kˋk*jj*k**+ꊊj+*+ + +ʊ*****jjj**k*kk k kk k*j*j*JJ +jj+j+닋K +++*jjjjk*kk +jJ +ʺJʊ + +j+k KKkkk*++*+****++*jjjjjjjjj***++k+++*+**++닋kkkk++** + + + + + +j**+*++k kk+kkkkkjjj*+**j**++*+*+**jjjjjj*+*j***+++++ˋk**+kkk*+***jjjj+jjjj+++*++kk++**+***+++***+**+*+jjjjj***++ kkkk++**j****++k+*+++*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_american/cause_85_loop.isdn b/tones_american/cause_85_loop.isdn new file mode 100644 index 0000000..9162d42 --- /dev/null +++ b/tones_american/cause_85_loop.isdn @@ -0,0 +1,266 @@ +*d}EьDH$]av(((^Bۏ')ii)חGgc+N^6Ff^rKs/G77G'?sZ2^^^fƖ֖֖RzW)i)WwgS#Kk+ꊺjJڊ + *;K2:F&HHHHV>S_w)iI99y9ɉ_>&6hV(ֶF&>B?7)iiiii)73{ +rNfx x8) !!!IW_JVhȈhV^rz?Gi Iɉ)WO +ʰ@؀p0@pxH))yA1a!YYg6FVHh2NzwI9!9)_X@LF~yaAс׎rVHFh68fF;sowiYIWw7)RlXl`L$lxli -qi!BVvh28X^_V_9i_YYAṙ i V|@x< HF aA1Q1 ^g'wW& Hsi!!!9I7G7i P`ܜPl>J AA!3*&&K7)iyCZȰH6i!!Y9i)wחi I! |l|\,,h) aaaWR&b !a!iV8@VYY!g? Y9ɉ ܼ P0y9Iy7&vR_)y1)?2vX8x I #)iIY!!YYWgG,gi9gwh^v8S_7i9!aa!!ad䤼Vf60`Y!y!aYjVno?ojNHwo7WiiIIyaq!\,o2.OBɁ! I 76ֆGGÛ II I9ၱ<| +w_?s(ay9I7zVBi~Vvr3'GG/3W 99I9YALxNs?@p@HYaYI y)v2'ƆC+R 9I9ᑭ,Lηg'FXiy yN֖zjN;_k3?'77) yA7pl&>7XHfwwWI7OoCzFv _Goo3GWW 9anl,hֶg;6(Bw i3R&#'??OggGG7&66^(hV6vF.ZSg7wwGgoc#kڂ2ãK{OOOOOSbr>&&^&f&>RZ￿'g_?O?/{{KRr"ZBRB"zrZ+;C;*#[#ۃ#;+k{s㛋[;Jzj;{Z:bJ + +z": +j+kKK+ +jj+K[[{kk K+*j+KK;j:ڢZJk** +ZZzj{K+jjk +** +k* kjj*+Jʊ+ʊjjJ +jj +kk: +kj˻K**j*j+*k j*;+*+*˛KkJ +:J".wR/jZJKv^CSOK +zZ[[+ KN~fO_CjNzr> 뚚 +*b˺ +;n. ++*#:[J +ˣs3oscoocb^>bsSc+kk+* + jj*k{C*S'7G7_"(88H(&N+' +rNΎ +#oOo#J"rB #3cˋbrZkkfƆ.gW))gx8ƞjO'gC^R:?_'s+BrB:C3S/#*Z2rBb::j+{[3C*: +J**{ ZZ⢚+k * *k {K+j ++kkK*jj++JB2 k[W)WǟxHvgnfFg7# +" + [3oO?snNNn + { :"b Cc *J +JJJ˻Z"J{{Kj+*+jj닻KʺJJ*+kk Kk+++KKKk*jj + + + +JJʊj+k* +Jn~.[/+2S)i).SwvH(ΚooR^Ɔ^R'7sjb"b +j3R^&^/7'3#)ii0hk׉iG"v(rg7G?['W3R&FRJ[#{:r6F~'W?JiGGW 7^P PqXPp!SS>^9 2V8W*^v'׉KW׷g[3/? +@@xGWǣ(~3g)wgScS?'&F6R_iG WIyy)wwW YK8|츉mQ ,*Y1qAy7+3?'/S)`@ Y!IRV&cY9W1m0$d$|M @ Ll@^!?.CǷri i/fxy3>Vv/YyQ<@q ollyA9O~g/." v؀@X_ya!IVSaa OAXܼLim2l,&YA g?ofn 9R8`IGr(ƚa!`|,mQ7l(gg?ggb>GiYH{ !yGbI!aa!חi!bb^NG7's7wi)i) 9p l0{ )/fn3gGww7g''OCZ~ro'_3''GGww'@2.F枾[3_ggg77kZC_g_O_?_'''K;cJ:jhh(^&> SLJ?OO'_oSoS_*S [ +B>2b*"&B.2>BR";kÃj3/OᅬsO˛Szb2>k{ +2n.BJk+"BK{Z+k#/SR['ϳ{_r:;jzR2Kz*[bRzo3zs"ks:KRSSJzkZ.S*z +#3 /jN :{sZ3 +ʛ#oZ/z.:2J{;{CJZsbr&Zkʊkr2j.*; z:.R:[S3;r +zKr: BczjBn:b + 3N/r{+{>SKcKJr/ +Z#c{"jk+kns +^#* +22#b&"c{;/jr?ۚ +rRr[jSOn[k*J/"JC#Kzn+Znb#z/3O;j/{/Jn3ʚڃR[2 k>j;3k+["r:ʛ{.bBsbcb;2*bn:"[bsCkSK*K?s+jn:b3snZ{J.jR>>:..NJbnrR2rκz+ 'ϟOOggK_ss&>"{~nN.zʳn;3"6(F~N +3BOO'__'/_g?O/3g2N ^ B&j ^r2Zk +(VvvvFFvNNSg'_?'?'J O'S*#?Oo;cSZ" +ZHh(vVZ cOg_'gg_O'; +ZRz;+##OC['7 + +* +Ko/k##8XXxh2 3o'G_gGG__Zff~[ 3c?g/kS3_so( x8x8Hhv.SsoǗ׷wgoNvv6^bK+k/㏟'GGG'g/?o_H0oO'g'G7))wGG'J&V8xhf 33WWwgχ)ih0,,`@@6 ?_G_G))7/GiiWCz>X 8so?_7WWWiY,@00Xk33)cR3wI wgSZ(8` h{77_7))ɉW7Wy!F p8n?9)n'w_.R_) !ٙI)WhhVxXX&o 闇'''wiI9 IaAql$|,JI!F֖r{GI1iG^(V8v)ח'_׉!!Y鉹!AY$|lf?Yhx cw ZrN֞"Z>Vg''G7)Iyi$\6ϲi9yf (K))!!IJkS/'s` 6)i#W I )WWl$' OWyyi6fzg__o"HV~׷oco))W))i9!qF\É Ii9 [6>ww{>((.g?˃o_wW YA\<Wi)XI!IF(F.)GON(n2g?# o??wwwWi I!Lh3{)!i`@Hv)a"6nzgWiiゎV((*_'O;[cO_7חw7WI!@<`V2!Aa8@8(VKɁ!3WIwSs3R( gO*_WWiw<쀈Xxh8&7_CFhGSv("[;_W)GWwV<,؀ FAqG8v v)Iy(^/_7b(V6Ɔ_S3gGa @@i".B׹Yy)36 3+#?)gKj~@hS7CyiZjW)'iI鷷 !@2CiWGKJV(Z3/ww_cۣwi))77W@@@p@ &^RkkC#'G)wW)ws BZ^coO7'oo'G'__?SHx X8h((Vfn:+O_'gg7G'''':s/OosO_gs? 2R.FVhFƞ /OO_so_'sgg_g___/_'z>FN&벺6&&&r k:*b{//S#/_/Og/njsj?o..Brnbncz{SϻfJ+?jk3Csc/_3>##co_NSn ΎJ +g{~'g;FK?.#bo;K7o:>"{Gc[>&.Bk>nSCZOF[NB_"g>j +s3obOs[SZ&CgO:ϋN[3b'G[3sCof2^.S"Ro~J;kSʏrZg233sNۺcf s?B*rʛ+ [b+/+SB;.ns Jzcj{s +#;ZK*z**3b˂[cJ⣊{: Zϊ Sj*"{+#[:z{ J *+ckzb: +k+J{[{*bjk;꣛{KK#" ;j* +*Kkk*j: +b{ +*zk+" +;*Kk{ۻk+jzZ ++JKkKbj+ +k˲{K{;;K:ۺJ: +c +;jzڛ*j˻/ J;J:3SJ[{ +[; +b[+.jr*zb>n&r?zzOsRnj ++r[KR *K n:Ǝ'n.g'k +BKfs' +f^knrn~f +nROo'nCB{c3BK +bkB+rKc[{czkBK o+;bb~r{ +{OK;C+c>*Ck{.sJS#k +n.rbcr +ks3#û#:22#;:{[˳K#JjZ*2*+2kZ: ++b.Rʂn22rz[o/__?__sjSKso'h 8` V8fg鉹 SRzOg矿oϿs;SS'X8 f2c/WWII Wח_?3/ B.":jzk *{C//?ϿoC*+:^^6(hhh(F^Rj7W)ii i))7+Nfƶvvn+o'_Os**n^&f6((hh(ֶfz[o'))iii)Ww7'ok".~^f&r{ϟ''gg_?O/3kJ~^fVnsO'wW)WwGgs{JB^&&>O_'__?/s+ +²R.nN>>~~^&&&^nr*_'gLJ'/c +r~~~nr"2J;#SoϏ/s3Cۻk*j +z:ZRR.N>~NR2Z +3O'___/s#*:Z.n.R2Zj[CZk*+kj +**JJZBrrr2..2sjc;?//{{; +J +ʺ‚bbbں + +**+KK;K KK;{;;b+;Ks/Oo[s3[k{*zV'3B^Z.~>J:Zv>s__?#s&f{ 3Sƞr^v>oBVw'_ki鿆'~~rZ3R{gۇW[F(&2Rk3 +OgO'gG_OO[{KzzZJrRRn(x fy9 W#β"rSSS9Ii_'sWii7)ə$|, qfpFNyqAyW_&X8^c?SG70`XHBg!y燇'G iII i@`-ak8691a9yv(iwh(h Xh[77g))WoRG YWw X|lk AXq(V&^^S! >^F66)C))iI9iw'7!X$|, i9А^yyyy)88FljiGgh.?''OvH99W_r"kw)))) i)7il pׁy_BO9Y!INv.).8fIIiھrǗ))W9a \Y19r_HA1 *^(ik&fF~fxvZ9Ǜr+_W)iɉWiy!|,O!NF p3a.F/?fvN2w)3Xc9i_)WGw )iYYqgz99rRFVaaiV6~B))^9yiiiO9Iy!x|,1k:'(1AYraa9>VvI)fhHh&k))w{Rr[gWw9IYܜ!'HP`7!W YI&HxhKGO"&~.KG7GOC7wIyy\|L@Y 9PP8!aIwi HX (rrß' B{S_'_W'?)I9!a\|@)i!! P,HgG_I!aX Ys6xh~IY[*J_ ))WiIYaI L.&i9@pxI1Q7 c!Ig/x ֋w K׉9!a|x8>-k h`qiishXh)w'_R8FBoswwg77wIIIIIP@_9A&&YIa3v(Vfb&23/ bK_O{ǗWWIyy l )yo +'ƈV׷7Wa9W +cx 6NI[Og7)ɉi ,00cW)+~Ͽg7 9 WgsVH8hF^j7iggGǷǷ7)f؀`@0`>rz{_WiG'WSWחG_r666f#S_gg'gggHxx HFf)wwWiWw'G/~fn2sc'gG7w7??'g?OhH88XxV^΢ _W)WW)G/cR~f&&~RZKs_gwW7OOÏs/3(HHH(v6F77WWW))׷'[Zb>^&f~β2{/_GgOs/3C&((((VV^>zS'g7wwWGg_?s{zz.>^&~Š[?'O_'?g?3#:NRNFFf>nnr*OGwWחWw__σ~'_?o_ÿO/o*;kr֖66f.b:Kggg_g'"⢂z˺+[[:koOoSz/Cj 3#O +hx8V^f>S777Gח7s;J2~NrRNrʺK3g'_?w'G/ڛ`fbJsWgwwgGw*Z^v6v&2+sKg)W'w ),,lP,p ?3?IwKo?w7' 7f6(` V3W)w3'G W))W77׷gII ̼,l`(g 'w9R)iGYaiW'S(VVv( i i9iii_?O'Il ,,pO_ 's Ii)y!Wsk>ֆ&~&VO#/_)7ww''w)pHZWI 9yi)o*&6hhhhV6&rb7W) IiiiWwGg_x@p0`H^)!!!aaaٙI7gC2(8h~z7w) I99Iɉ)Wgǻx80,PI!!!aa!YI )糊6興88HhfNjS') 999ɉWwGNXx0PАHV^)9Ya!!Y9w' hhVV^ngwWi I99i)Gw_X 0X(2gWY!a!!II7Ǐ+bN(h(VZ;Ǘ I i))7GGwrp0vfw!!YٹG;2^vv興HȈ(v>+3_W)i WWGgwH@а0@`679YYYyIIijbRvvhȈ6.')鉉 ii)Ww7GGwW׆ `p0@ VfsGiI9!!Y9IOC&xȈfjO燷 yIɹ)G \ xBav`hO;IY ?#g¢ZSˢ&^^>f/ʺ__)GGGgwgGwG)iW7)yA$|'. 7p@G׹9ၹ[^.OGw +B^f~>__''7gGǷw) iח)A܌ W'+N76 /9iIi_~*OG)'BƞR[&&.ڂ[oO?_GGGGgWiiI!\@i>./x &)yחO3~˿)iGs~Z: .&&BBzogggG77WiIlvyY(8@8 G; 3rB^CojBzO'7G)i y^|\~YaيhFx9!7;J?{_wbf6*oKo/O_'7w))I<6VhX`a_.ggGWg#fV&";Jzo7w7WW) əA||,h !Y +(h6Ha!IˋS/(&zᅬoK3_7W)ii)wWi9P,p v>2 BffF&)WGGo~^ j"b cS/o))))i W>f`N I 99cB~^&^nrC7Wiiɹ9y2n>Vh8`````X&r;7׉ 9IɉG[~FfN/WIy2:fW 9II99 7GO.>>^rO_7 I *{(`` 6> +i II WskR~>bJc?wɹyy&Vh@`N iIIy9Ww3ˢR&/') I996H`@@@@ (2G9997GG'Sú..n&>W)!9*ˢH`@@00@ xF2)99yYٙy 7/z~^ff^ s7)i9Yj;Rֈ800@@ xFZwi9y!!y"&ff&&>*_7wW鉹y)*2f0p0@@X8'WYY!!!YIW7G_jffFƆrjs) II9?r.V00p@xZ7 yY!a!9O/{6V(>>?iIɹy3nH`00@@vO7ə!aaYYi+v((h(vFfnjÿgwI9yy9!`̼ PX39g6(cgiɉ)  ~VX`x{g9 ?'w)iIyYA-f$Px#G鉲!yy9;vŽvwG[3wi9Yyy!Aq ||,Oa_#'08Yq7_Dzx GNh/S_'9yI OlXyS 0zAgs+cg;fֈVkI8xn_Cg''Si9Y!<,_YA! +#; 0 2A9ǻ.*(jY6Hx.ˏ?G[/'Gי |f_.S!s&^{; +:gIi&H6G'g7wS?k&V`?g/cڲ~+?W io/c +(^c##ǷW)I?L,rى#^(x HNwaAaW+gIyh8H6K;cg7GJ6~'˚2h(wIϺbo_o33ow_v ` '/3/3&iWOc + +fֆ?)) +)ח)pXFG9)ƆF6/9y NF.:K3/'_fVZo'g'3c3sKNzÏOOo +Rn2:J;oC 2.SS+S[z2..K33 j +jJ:z"vGi9W.rKϏ>>(hVfOg'?o㚲rRr˻?O_H&?i!/BK?wWofx0ni W_f&Z>&~W9I)'J^F&2{Sos*o#"~VFf{?3/o/OGGgZ Wi_kn&^nKWɉΆrCSs3#[{:rN^ڣO_'_S +.&ffC/3sC3/s#3''_/[[۲&Ș( +O'_ +b"J s_77+^&>r{o__3#/WIII ?8ଌly19x69!ay׻x׷ +>>nh薞IIiJ2bS?////*ZRv #g)G_C"2CGw)WWzF6>{'[Og7ww7WiIO 0ܜH -A> 3Oف1cNg9'n68H>g_777G7Gg'I! \| `จsS!A1iH zWIH3/3緗)WGǷ) !<(q-_ XJs99z )y9韲v~9)zR)9yy7_wə!_,ܤ< A &c7x`xiIG6~K ɉcK_Iׇ'gi 9WP|Ll`7Qqָ8(ڶSiq( WK"Vظy~FO7 iwGgwWW9Y`,\lo!)ƸV^F( QqH_gG'7G6`x.)y랞oWi)WW77W!Ќܜ@bYqy.V"R8Hiq ֈv^~i x[w gS˛_'G)GgcO!LLHS9!I?GW +6ZIYYB>66^>.g7G_C__矿o +˚""Rf&Z__gg?_gg'Û +*jk*:JzJ2j*˻[ccc[{jzS#; +:ZZ" +ۻK{ [KK22Bb#{""##{[3C3#˻;; ++k#K22"; +*J* [[:j;[:"*Zzj* +ʋK ++*j**ʊjۣc#{J:j닋 k*** + +ꋻ:zj ˻*:j;{;;+J*+ ;k *k K+:z:j + +: +k+*j*+ ; +j +ˋ*JJ ++ +J*k { +Jz:* Kk+**+jJ:JkKK ʊk++k닻k*ʺ + +:z*kKkj +ʊkKK닋kkk kzj+ K *+j +j*+**kkKK+*k+ + +*kj + +* K *JJ++k*+kkk*ʺJ K;{ k**++k**j{;+z++jj**+j:J **jj**++kkkk++jJj* k**j++jJ* {;J +*+kkkk k*Jʊk+*jj**+++j*j*+++****++++++kkk+ꊊ +*KK k*j +j***j**++++j +jj**+*+**+++++**++kkk*++jjjkk++*j + ++k+*j+V3Z 3Ͽ3+꺶Hb[SO# +z+"rr +:j;k+*z +k.jۊJkKKZJ z+:n{c6(^[_oZ;o23Z.{ g ^+J#Z./S.+KSnSnJKs +;*bZS/rsscC_> +?no΂/Onnc[ Z[ +n"3 JzCoK{:;kj*z +Bf'J'/"oK>κ3rK?'S^+O/.&'zf'n +g3N?~3[ +Z*'j:sB">ۊ+:R{gnZR2[c+jn[ZSso:B;; + + +Zzjb:+3+nrcONZ2"bKKn +;{CS+23j['_c+[_C.O>g_S/f7c#_'+S*OcZ +' +R?{2>#~3~>{Bn"K.b#oNb3ϻBbj[SbSOB*['_23OJ{ +R?~ONb[C:Bjz {kJ +j+* K +"3r"2nz?.B3' rOJڛBS*Nz//N2ˣJ>n{+R>b +rR.2"jSϿgGw7g_?/ssC + *S@pȸP@ `Vwii)11AA97jF&Vh +/ go3JB.j*[O_wL@_11!I_f(hG) iW_ssOO_w0(pPLl `^'aqq GN68hxFB^GGi iiWWGgOO'gGw+@*@lм,o!Aq!I_&6ȈhSnsigWY9 )i_'gßϟ'V@P@,HHWiY11!aa9G'Hظ>^2/yI9IiG_S#kg `P ogW၁ii^H؈VV2 +Swy i)g#K#?h `@p@08 *!aYa1YIW)S*֘Hֶf*_ǷIIIɉǿ#Js 7 0`8*7g9YA၁!yi?SFV舸h((6_) IIi)gڋzXsX H`hnsY99a!a!9 ?J(h((VvNnGiiiiWg? JRbz86:Xh8V2nOo׹IY!!9IiiG&VVvvns?wW))w_O+;nn.rJVhxxV( +n/wi yyy WW~.~~Ff6Nr +gG7G/BJrN2N2ʈV6hhhFF{J?wii ɉWW_2n&^s3'_7__'3k*+n>.>BR2rbv6F(6vvf^N k3w77)WWWwg' +.&rbN[ CCOOSOsc*n2~^2kn{>Bf&v6&Σ37gW)G'#KrK+Z{Zs3O?oSj{s^~掎R.n.fnRBR².~.r23os_ǿ_'gO3s{:*// soo?[r{*B*RJ"^krRs+^S[^~f¢jb#+* 3B2+B.k3#_'?o+3J#{+kC##3+bn +.c3Krbں"Z/Z^nßB.rSRJsbc"# [skbj; +k32+ RJ[*J{ ::o‚j+*"{J.BJb‚ K* K;s;jrB z ʳ[[J2"* +k 3c;jjz* ʋÛZz+ +"z*kjbZ2: Jk J:+KJ2K*j.zj ;JbZrK b:+C #/3*sK2bBJ+{ +: +Z[:c#+##{*JzzZ#R3/2 {"nR:rr"Zb +*{ C#{Ko33os;"ks* +".B:"kR +r*jZ3ʃ#k[:zk".JccN~oCj/JK:3Bc.RZ.*k2k/s +S7;cJbn +c{"2zb[&"K CS/+k/#Zbnr"r* n3/J;+KC +N_j^ +c+kC/z3 /*"2J.:r"*"b[3:s?Kb/[r.ZSnb.⎺ R"#os*JC#B2S[ZRzۻ"b* {+닋k{K{;# +C+j{c* +Rfv(66Zj/_'??So''w7g/S/[b& 0 ,0X8rWy) W+o)WǷ7_K.>NCooϟk +V(KS?G7?s'OscOCO_O3o#h(V `H8h[wɉ)W)3K2Ks_'?k2~f[O_'wWWG77g0llYA77hf(HZ9))I)oF舖&f"g/Cf^&f>*OoSc..~&r{O+^O.wjo7wϷc;"^(xX6V&9W'j^R&b;[_G_g3 ۣ2Nrjz oOggggw' @6,l g)!i!"+'ˆgI'^>6^λoo_LJ/.R2&Nr23/{*ZR{WFwWG{/O+jcJRr6((F/g)Ww_oS * s/oOosCcs/Ss/CvV8ؘ xhV3'i ))ǿo J#3Ss/33[{j:"r‚Z +**˛+zZbR zcssc//Css{{k*++ J+ +z +"J +:jJjJ k *Kk+{kkꛛ;kc;;{˛Kk + + kʊ*::"ZZJjKK ***.+czˋ[[K;K+j+*jj++j +JJJZJ:+*+{;* k+jjj**k+Kˋ k j++ +**+jjJ + + +jj+k+ K ***++ +k +*j* +j*jk*k***+ +* + + +*jj+*kjk+kk+ +kkkk+k+**jj*jj*k++k*k++jj**j++*+jjj**+++++++*+*j+*;;*K +**+*j*+* +J +jjj +kC[j ++ + +**j*ʊ *:J+;Kjkk*k[;++*kK+: +;j*&n[bnB_w_+KFSoSs3/ó j:*Z++Z;#{2 B: j [:+K;j ; ; +++kjz{c+닋 + + +ʚJ+*++j+K #[+* +#z.b*C rZkS>czJb;;K+j*s+ S.J;Z /KsZf{SrnK/˚rNn[s~O&o.+/>3OZ:j:CobKKrϛ2&/"⾢o> +c_K'/[ +/k*J2Cs6:_ZS"n"J;N)c*&z *z +2SrR.bJ3k~KJzRr..?kZ2*g +s3[J+K ~[s_g_&2Cr7r~.2bsN'>#gšrZ2>_oRzJ.>#S +'{Kn[.rNK2j23_cgCNZ36 +'+O+N#ocb*nJ3{;ZS> +N:NJ ^;N/o*γ"j_o+zn*czJ"&ZC/sn?.?jR2+j2*ZO>B N &{Rz2crr[R2_{Srʾ*:Sg3;s_3#&΢Z*ʞ#n:CCC[{#SK#KCBzʊJ{"// o#*r?Ckj#zn/Ns J{z#KOZ/Oo"r3+ +~^. +Z +. +{2gJKJŠcroKN^ZZ[ +^b*>R: +z?Ks#ʚ z/KS>ۛ[{*:BSScKR oZo;/n :z3ʞrc&OS> Z+&_;ێS{OJ[[;_3&**RN_J˻?/3c#jc2/?CR۞JNB_ +N2bJR;*#S. sc3+/3#R+2.[2rb:ڢB*"ʣK;[+_Sks+S+> N2Crk#n~nc +JCo*S?Z2 ^.z.:":뻚r Ks.KZ +;j3 Z*JBk + +{{J+ +*B;+j*jJ#b:b*:# Jkۣ +JzjK3;k : +KKjbrz۲"z :kJ;ꛢ3 z + *k:jkc"Zk:b +{*J;K+{j;jj;K+K:JzZzK zJ +  j*+;J* +Zkj{ +k:+j*: +j +*;k;*jk +{*+ +jk*j ++kkJ +Jk +jj ++++*K*j*k* +J ++ +*jJ+ +*j* + kk+ +: +k**ˋ; K*+z* J J* + +ʊJ꺊 +j*;+k** k +* ++kk++k +j + +: +ʊ** k+ *+* ++++k+ +kk++*+kˋk*k*+****ʊJjj +*** +* ++k+kkkk k+*++*+*j*+**j*k*j + +**jkk +*+ Kk+++ k*j*+*+++jk+* kj++ +j*jjj*+*+++ kkkkk+++*+++jj+**** +J +jjj******++ k+++**jj + +jj**+k++*+*+**jjk+*+k k+k+**++++j +jjj***jjjj***kkkkk+****kjj* +jj*j +j+********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************* \ No newline at end of file diff --git a/tones_american/cause_86_loop.isdn b/tones_american/cause_86_loop.isdn new file mode 100644 index 0000000..c2f7330 --- /dev/null +++ b/tones_american/cause_86_loop.isdn @@ -0,0 +1,252 @@ +*d}EьDH$]a^&f^.2J +[/Ogg'g_'gos+*O'3':[˂J{zC.h蘸ȸh^3Wi)))W77s{">&nn+3c/'_'gg'g77)iXPPp))aAaAW/>;^F"rc뎎R:2_O)7Wy鉹7 WOpl,WqqAIyY>2(־6+?#/Ki') 9 wǷ)glK~r zb +;*Jj;[*z +k"j";j"jz +#k :: k +g6ShFC^z'S_G3rJ{^r('ƖJbNG/.2ZZ^Ϛ:{3#￷zs)^cnzsJ&WR>K)z&ǣ:?jB'{S'B~~rF–*J&~SC*7'''N'hv6f?So^7?Nz s۶ +_G3h;kV~IFbzo?+ƾsigonJN;&ORFcw/_kB7b2 +:Bs"fNΏ*nf^7Ǐ6v)FKGS&nΈ^>SǞVS+gs7)'& +:+3'nƆK^c2b/b'J?'k/z2g+B3s"b2*fg.j{3‹rK>w'{3Kr{[j.;J.Z:kJz + +kJJ kj+* +닊k Jkj* j+jJ+ +*z + +zJjJ ++*k +kK+++k*+k *ˊj+jK+kJJ*j + +** ++*J*+ *k*+++j+* + *+ k ˋ*+ kk*+*++ +**+++*+j+*+jk kkk+++*+jJ+Jj**늋+*j+***j**k *k+ k+++ +***jj+ +*j +*jjj+jj* +*k+*++k+k+*++jʊ +**+j*+j*+j+kk******k+++*+k**++**j*j+jjj*j*j+++++*+*++*++*j+jk**++**+**kk*++** +*k*jj +j*j*Bwk?skz*:cR(h(3W^:#z?˛scR(&GJRwƷ"g>.3ooRiڶ/(&_ǎ7'J2H~~gBo2FH RV{kwF.Cy37_)*"n)^C23Nzs[3^j_fc&RΞ(+K*ZN>#jSwz_ +bjRJsC#Ksr*{c/KJzn cSRb/[ZÚ*C+br +nsZs?"S zK/*""s Jž[r*ΎRzz{?3ksB>ÃrskB'SZ+k3Ko>.+[3O?) +`hƈֆ[^j)iGyI!I97W'7g3;&2R* +sCS8րPlPp؎KN /KwiG Yyiig)WGg?ϣjb"s;'kOx@,lf(>/wI!yyiWiwii韇'?G__g_[G*)s؀lL̼ȈaA!9 CgۏsS'7WWחG))GW yYW||LHb6{bXXh(^~oYaaIi)g_.c'LJCy!Iw IW I9ay \G!^ HA1AwiBC_>N"3w7) 9ٙII yفa$\,P\V I!HVrف^(Rvjs/ScW_G)Iyy$p yx`a91WK)JFKv^'s:'s77 y9 <, zWֈ +oII9I+Ffs_G'Ww ə!a@(@((S3wi)Iy )o/J +_?W) !I(^؀`00@x.z[w鹹9yy9i??/{r[[zZgG 9YYr`0 HrˇWI Ok+*׉!a~X`p0p@`8VR+7ɹI9 iw_C:;sc?'WI!IgxX@`8.c7W iIiW)g__Oo;s?_G)iYɞ'X`` 8JjSw׉ ) Iw__S3/giYaN(8ذp@*)WIiWw'/'wIy!!!2nh8ذxfOi9II )Www_ossO'WIy!^8 0p@00xHhK׉ yII)7osgǷ)鉹yy'JKh8𰰐p@@ Hf:Gi 99y iW7__?/g7G ^(@@p8BkiIyy9ɉ)W'oc[oﳏ_7)鉹^`0`` V +SW999yy9ɉwG_oss3_gOgg7Wiwb&vH`@`v#'iI9 )7__c˻k3OϏggg7WWF(8؀``x((>[3׉I Iɉi))7g'so*szScggowGg +(ָX``HvB?w)ɹiWW7oKs3+n3gGjoGK/SnXH8ƞ7)I9I ɉ)׷ח_.jÛzC'BJC_ƒbKC hVxxX8Hh&G I ) iGW))'{J[{K‡WSzR*GcGR*V8H6f+g_G7Wiׇ9iϛ7 3 SSs?2'O73CrNO8hhh(R>N;G'W)WG7Ww +Z +jrONo(7FÆχ6_?z_fN&((h&Ȉ(Kfs)GGi)w7'bc?O&cz^kckˎ/vƶV(Vֶ^&~/)WW7)_j{k*{rSJ.2c>Rnns &fvV6fVֆ&RnJj'77wGGW_ ?[ +o;nj2 +z[.J2rrf(V66>_wi)wGGg+:BrzBZz2bjJڢf^fVh(hhƞ2;_W)WW)ww7LJ'OoCCCk +jjZ +"Zz::~(ȸ888Ȉ.gw) iWg?3ÃKj"JZbJJZ"BZ6Hxxx8Ȉ(FN +w 99I i)'OS#K +br"B2ZʋK*+J+Kjnf舸XXXxhS'iɹ9yy9ɉiw7g'O3 +b"BB"J+*K+k:N(8xX`` &W 9yyy9I )w?/"22...ZZJZ::"r>6VhH8XXXؘHh6W yi7go/rr.rr2 +*jj+ +jr^vV8H/iI9yyyyyI)WwGg_oS3;JZb"Zz +˻;#"~vHx ``` hN'YYYYIWg/3#zZ2r222Bz*#c#;ˋ+bFVH ```Xh6N#'׉9Y!!!Y g/ckZRrR.rZz3Cs#f6ֈX XXXH6>+IyY!!!YIiWgC+2N>>>rs +G?W)G_w_# +h(`x8~_I!!a!!9 )ホnn&..;['g7w7GFx``00Xf!!a99ɗo^&66v~"csOgW)ii i))W7Gww7p@0l@P aaig{{jFhV6^rK_i I99I9IiWw鉗plLp,Ha1a1!7CNb2fHV.RgG)ɹyyyIi鉹ipX Ѐ V7!iWiCs^v(fV#WW !9yI yGgi7_#'gyy!aA\$3o91oH ) 99SVhhH8F#cgIɗ'7'k"/_/) I iL|<`.n&W1&7Yz &")IaKzn>v(jnN)wS +K'Ww7IWi|HL R32gqzȾ7:gaAى)W8 KW+ 7i))iw'9b6CnI!~fvg)'WYas7?(vn_g7goj23_g)iW)WGIXLpphI!I6㣾fɉɹ)?/nVVZO7wG'sG__g'p'7Gϊz/?wWW)W7SnnS_gO/?'SO'gCS?O +jcnx HVf:_gLJ7wG??ˏOooSC3c/;C +J2"2Rn#b. +nFVf&~ + s_gg?g +sg{_;[/S/ócjZ [n>+Jk:2Rrk[2..2Kڲ:zZsk>j{ K? +K +jrO*O_χ;z +BBۋﻲ2sz¢βk#K3 +k*ʣ +#2fg~''Z2SsK^›R{[r"s#Zs3J^Jbzc/*rjOsJ +3j"/J3?oR'*R+* ۣ;b*Rn//+2sO'n_j;j+ + R >nb?SfRg7C.3^*jcR.gjon z#''3>kCZkS?*{Z?f.gOo?'K "co/'_ /jz[^23skr#2>zbjǣ.S'_'KZ{>Z^):nBS>cÚoR +k3?k/Sc*.jkjj +ž3+rkkNnSkso"r**{ +*+k2js+ۂ;2*:J[cCb ;[jʺZ: {ˋ +:K*+k+Jˊkj*jkk* ; +k;KkJ+Kˋˋ+;;+++k+ +ʊK +*+;* +j+ +J+kkzK;Kj**+*j+kj +jj+**+ +*+ + + +* k+*+*** K++j+ *k+k + ++k*jj +j +kkk ++***j ++*kk+j*jJ* ++ + +* + +j+ʊ++j +j*j j+ k+k k +j****+*+*****jJj*+**K*kKk ** jkk*jjk*+++* +***+k**k+j +kkk+***** ++ +****++**j**kj*+k+*j*+k**+*+kkkkkk+**k+jj***jj +***++jj+*++kk++닋 kkk*+j****+j+kjjjj* +jjj***+kk+k++k++k kkk****j*jjjj**j*j***+++k+++k+*k++**+*j*j**j***+*+*+*+kk+kˋ+++++k***j++**+**+jjj*j*****++kk*+**++*+**+**j*+++***j**++++++kkk+++*++++j +fHwF:r2[Zr[BJ"k.RSSO#On.r rB3k*SNB2O^CBJ'j+S/H7"2 +wo">r3+oFj_^+[V k3n/OggO/J2jbS #[o'OS'_7J`@@0~ WGVƆ3))IGi 9IIya||<|':(ؘXYa! 'SN(hf'G)C'7 Y!!yIɹd,XAAo_iF3OI j h77ii8n>W!iog!IiW 9Y1>d|0hYȶx@ػ _G)9*vF^ȚW7WW7Wkns'wy9)) y!:N1Apv^z'WʶVə ˊrNfz'&~>".g)g:gWWg7) ,$ xY) 7&`ʉ Ii'h2gWGw7r_'?/S3ƈHvR?GG+n{7g'777wIya\WY3:N8@H9KnVvB_ 'cb +n{_b& C7ßg__gggw)f\,rqq!W~X ׁ.FNΚ7ɷon&R#soOoS/+RvVnJwW3k2*[S_g'_777)A,\̸AQIȖxJY!i‹oW)G{f?{[KR.~r_k[So__'7w<\|Qс7h(!H>zSS3giW_Fso; **ZRr&f^Sg; ㏿''gwI!a<\|o-h(xf._ )g(Vgw_3 +^Vfgoʊ;C/o3?_LJwi!a\l&h(X819Bx&_/ih2kV&˗J3/S_o[?_׷gG)aa\|8668X 8A)fBo3+i w(('C[ ֆ +[RSo/3sC'GwGGya||-Q^H `AAxhBJ2iWr("_Os33/^F'?:Z_/Csg7IY!RLܜlA9FHfX`.a1!*h6f zNs9yICv(^s'/f _o#*{Sogo;۟ μl&qANVvxX.Y?FnFYfzK +oc.^"?c3O7gO'WiY@qi pg!A[BnF(KaI?6rg)g&Z[O'ww7׉9Y0G!iCwVX@PaAy?Vr'! :&(Vz:Zbow_Ssog7W a ha'I*Hph' a!Wiin8xVRg9oOz2iG"RCG's/W)) !Lɹ!y_Y/ ph)Y9 )wH)wGnVh?''_S:3LJ/sG)y9<|+ 9A `F9i9֞Ogg?V[/g/3g_gG))9aL̸3'aȰvKGǹy9&foO''Bچƞ+ ?'ϟ'GgGǷ79aAX·)A7v'IyYI*J&#'^.*zs'o'O_'GY), yG^'.^h6zG_ח SNR&s˿gOg_Gww79!p0l@()og~ff(.÷_חZ^&?__''W)Wi Ylذh։IϏO^FfZCoG?{bf.Co_g___')i0 V7'sOw?^+o{'WgOcJ.*O'GgOO'gg'Wi ` hF*zg7sZc#KB7_SsCj+sS______/GwxȘxH(Ʋ/?o?CCS?O//sc۳{Cs3ooss/SSS/OSoscvV6f~N:sO3oSSc/˺;;c*KkC+Zˢk BBr.&/ +{ z:{33'3K33S*K"2*r:JR22ڻ²"Š +[{b#;;ckKoK:zJ*jbB +;kR;RR;B#? nnKZۣSc.b.N+c^*zB3{#cS."sbK*[z/rJ#BJ +*sKOZj*r[*KnncK +KB +*Rj #zzk* ++z +k3Šz;J +"bKKjˊ˃[ + ZZʺJ +K:k*Jʊz:kʃ;c3c/OSos{j:z^^~2jk*C+zc/__?scR憆6vFfNβ*C3ó3 k;C#[ j*JZ22²:ksOOnf>b+SSc3[++KKso/3s3#;+JJJrB⚚jk[S??'燇gg_6(VVVhf +z;'g;+."j㳳/'C3;BRZj;{{K* +*Zjj ۛ +.6^*Ÿ'W3.Vֈv(~s'?nN{oo?Oz #_)gCrVVh(F23'k +rnξCo3C:nn^&~:/'))Wg'Shhh#S'{"R~.3S3SO_'cr&~Rzᅦ7WWwLJ"(Xxh;gG7חG#N&sG7gSZb.~nʻSn^~_ϣk2^(V6h(6R2?'?OO3j"J {ssO'?'gGǷ_N`` `~/''S#K{o/gBN^>2zkcs?_g_/_OO/".sjCRn6F&zocˣgg?/*{/S_+K33r/"Zns .rf2^*cs vv^.Nr#?'C{gË3O*2w"G3Jc^K/2S&f>c>2NCc2RrGrR2_o{c3g{OR+C.3^&+?O+onN'S&'~K>_g?'.>s3 _B_n"N_R6RFSwZn^.^oos.S)GZN?o^Gjf +bSû2B2 +_nRjS2 &rK﻾:/O3nNΞ*.k[nrRZK[Roz*;+j*Cb+*r +3j/[[۳K /. +.R.z +"zSo +s[zz B2+"+*.:+K[Jk#SC*[+J;2s2.rbrj3[#{[C+{{"N~nNNrRj*{{jKkk #sϳ;#; {J*; *JJcc: **KJ+"jrB"+" K +Z:Z; +kz{K*+;C{3[ó+J* :;brzJ +j +j {[[;* +j"2b""*+**:j*KKۛ[#c33CSoss3 +Jj +J~VVVHHhVVfji 9y9Iɉ)O32>^z(H8X ``XV&SgiI9yIWGg:2Ύn."3O_ggg'_Ͽ#HX@pp H(N'W9!aaaaaٙIiokfFV(6^NKgG))ii)Wחg@0Pp0 xFgW9Y!aaa!y7oZ6H(fnK'9ٙy I` L쐰0&.Vvswi I!y i?R&fֈ(*''7Wy9ɉii))G,\0(w/hxV9!ay7;_3Z>s"8ZnǗ) 99Iɉi )Wid @.~'W/ WٙyaI'f__/".B#&8^K/g7WiIy9iW) h<\$Pc _&x`29I!)Csk+[?C(H^ _wG7 )i 9!a8\Lpc[:7Fx`9!ay{~r3osk'3v~nwg)i ɹ9

Nf^&bKS?g_gg'g'_'GSZ( ` Xf2sGLJ/#j*꛳_'*Rr2CsO__gGw)I"@0`6)'OãSz_GG_j:Zoo'_3ck3/Ƿ0 (f +g_SO'G?{*{Z[:*2c'k&+Z[R2γJ6F~^Bboۻ_O7s/?onnKO7c/s^6_ +'S"ڳ6^~NZ3+KGNfSN»33Sk#onjr #/'s'[># R 6+R&o2 +&cRJN.N;>ښRÎ~SN{~R_g{2j>{[o;?oc&CR3Nz[.JrwG?W?_R+^Ro_Jb'Wb[&3Zˆn.2v.[&v&n7nGc7;[f+#f'c)zZB&. +VVZW/7*sfs"_32{Onr·b n_#Z^2FC3?B'BCnOsJR?K2S_sRK/溢n?G&R/+J[F;3jr.bov/*sJ'/Z2~/&JB˿Nh{F'_";O^FOs/{Fr73#ξ^j~vֆ"b^sVۇϟfz2:Jin(:sn>R[nsk[R>k_cO/[&r&6>s__^/(sK?OFN#ZG^_'{/s:"cn_j~JgC#_z2_c.k' +??_7F)i>Z.Oh+Nkck/CNh_oznoˊgi~o"N"'#[_s.nGg3.>FgZKn3&R*Rj>R^RZ/^#/&^C*B^N..g^W[ús_?OZj?'{#nC+2RcRbs~s_*+{J{32*:^"2r[S[c2czn "J;Ccۺ:jb#Kzbr.rBR> s33K+S?oS#?_SOssS ++rJ',~R&F6F껗W wg?W7W)7_g/?O_?CcoZBOs+J_z&(l Px&f6ȈȈV.鹹 ɉIiWR(F8Zg#&")wg_gS#JS*skr>plLPϗ)& NGiII9IW9)'O/zn>HX&g7J^RC )7'g''_o:S?cpIi8>') I )ח)i3sn>ΘX~S.Rs))7gg'7g;z*G#@LLPx90) W7wiI/K22:HS?SZJb_wwG'_gggg+ ?w7_S(P 6 I0Wɹ7iW73[ +Z.BR+.(JSO_?+7wGLJ'/CCg7)i#|,8ia!;Xp@/ w 7')IKzBnR:B~6&sO''S;3'g''gg?/SgwwWWiI9׈ gW0P)_SW9!y)/ٹσ*o[ >bΆ^6F/sZogG?_GGo?'G)  xL܌ Aa`zs:2?YYף'iY?gc掣&FB*2(hV*W._OOǷ_oGLJgWiya\|Phs9aa9s/9IG)iW~.{n^Rz&NrSoo/_?'gg')i !wܼpΗZx Ȼ !ى gGyi'k:N&B{&.n^^_33*ZGssO_wLJG)I<,FfbkX@H*7iىgwɹW77w^r&*jrN2rnn2'?s?/ S_#{S#3G_wgWIiGCl l0 8.O +(nGYii׷iiWG?3k&&NnN.nNB+zSoonR{COoo//ϟ_'_'gGwgGg˖@pVnVV6z I9yyIiWWw77[jr&NΎZRBz2"sSS#oJ ;'O/O??_'___gGwvhvfFv&b)y9i)))Gg'CZN&~NNR22rbS/[O+cʻKSOO?'_?'g'x(Fnf~&ns'9yIi )׷G_oﺢnn&>^^NRr6BK"3OOs?S[/O??3?#??G HXpH~^f. +GWIyy9I Wg~^^^>>nnB2^NRcZO/3S{[sSO?ooo3cC;;3:3 ?VH Hff~šGwi I I i)WGo3nN^~>n~RRJC3///ϏSS3{+jj+kCC{ž^F(H8hVƞ_) IIII Wwoۺrfffff>n2{cO''''Oo/C[;kJJjۃooJf(HHHhVFC7i ɉi)'c+.^Ɔ&&nr¢z:c#s/Ss3s3sCC#Ãss33s33oSf8ȸ(kWiii ii)w'K"r^ffff^.2r"cC//SCc{K***+ {[[3{ *r^6vhhh(6. +'GW)WW)WwGOb&ff&^~n2 +oO?O/3 +zBrr2B"z +* ;;k+Jb&fvv^nJ/7wwwww7g_o3[*2&^^^>n.*;cs/ooo/33#+jJzZz:J ++ k+JZ.&&&^>.rZ+s_ggg_3 "r.nrB" +k;{[#c#[[;K +J:""" +*Kkˋ++Kkjjj +Jz::JJz +jj++ {KK{Kۛ;˻; ;k+kjjJZZZbZjJb +ښʊK;K[[{#{;;[[ #cKꊋ***ڢJjj:zJj*j;K*K;Kkk{ ++*J{kK* +ZJ뻛 +ZZ*ZZz::"""Jk{ Ã[[K;+*꺺bbZZZb2_/'g[JKs.+{2b3oCۻ"Kk"2:J*:Rj+{*[*+ro;r.b;*R+ۃ+ +J# *:{KK*;:{"K:2;ۊ*B+Cj :Z + Bcj{+3 +J ;JR{K[ZzKzJj #J"["JZ{{ˋ*k3b [*# JKjò[kjjZ*J; ++ Z;{2J:J:ZZ++"z +{[+jk{3k[Z **;zzJˣ*{jJ*ˣj* j:+k + k:jcۣjkj˚ʋ[bJZJk{{zJ{j{Jj K:Kjj: +kkz +K{J :jK;:*kJ*:k+;* +JkKJ+* +;{Kkk+j +kz*kk***[K+Zj*ʊ[: :::*j+J*k* +K ʊ ++*;jz +kJz* k+ +*k +KK +z +jkzjj+jJjK+kˊJ:Jk *kkk + +J +*j*K**kKk*k K;jj*+jj{# 껻* +:JzzJ + +;;Kj* +k {k* + KjjJ:J++j++k + kKK;K+ +** +*+++ +* k*+** + +j+k+++Jj+k+ KK kkkK kk+jjjj +J: + +J +++ +J +++*k k jjj**++**k++j +jj++ʊ*+K* + k**+k +JJj*j + +*+++k++ꊊ+K *++kk ++K +*k+jjjjj + +j +j***k+*j*+++**j+***+j* k++k++*jj***+***+*j*kk*+kk***j +jjjj +j*kkkkkk k+++*+++*******++k+*****+++jj* +j*+* +j+kkk*+**+j*jj + +jjj++*+kk kk*****jjjjj*++ kk+***+jjjj*ꊊj**+**kkk+++*+*k+****++*+++*++++++++jjjjj +jj+++*kkkkk kkk+***jjjj +jjjjjjj*+*k kkk kk k++j****jjjjjj*+**++k+++++++*j*++*jj**+***j****++*j***+k++++++k+++********jj+**j*+++++++++**+****+*+***+*+******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_american/cause_87_loop.isdn b/tones_american/cause_87_loop.isdn new file mode 100644 index 0000000..d9cd0b2 --- /dev/null +++ b/tones_american/cause_87_loop.isdn @@ -0,0 +1,209 @@ +*d}EьDH$]a.Ogy!IWW)illL̼l@y!-Q ):V(C7)gsr(hroχi9Ii_GiII) LLlLa!1q9 n&:blj!g{Vx`` G 9yYy闗GǗiY "Iqa xFcQa)f`VoW J37iI9Y!9iw)iɉ@|hx(i11o``g))iQWNֆ&H6Fv_3iI9)yY!y鷇)ii\|ֈgIvX9qqafvnƖ>')'~(HjS''iW_wəY)WWi) yܜ `.63iy@xj)9I!1qa2iif Hh*cIﳿɉI99 ) ɉ9 $|B/~3IbȀX_#[/Yaaa< z&Fhpj1 {/Fɉւw7OS'7G9A1Al<>isLJ[&VIW׏nh(sFF*??'77Wɹ!aap lN' +o#'7'_S*JC/?77ww/#VHHhV>Rj#/wWW)g_Ok.N.2Z.k__Ϗ'G'c+"rF6^n2Z+s'ggGGg'?[K +Z +zssC{Ssoo/"rNn&~.N{3/3sooOS/S z zb ++jʻ3s3 Z"ZjkJ +ʢbB"k*jJ+{C[ #; +***+j*:z + +zzkkzz + ++ * +J* +*:K#c#J +K{K [{* + Kk::z +k+*z+jj +* +*k **jjj +k ++jJ: ++ۻjʊj+* ++++K +k+ +zʺj+kk*JJ+**k; k+++ Kk+j+K;{K*Jjʊ++**k ʺ:z:"rhV &o/sRJ k:28OB*g˟&Ç"z.>:N22?s3{ .z:"K#*k":B.K껳K#zZkjJ..+cC3۳scC/˂R2r.rbJ{+{{bˋ{#{ +jj+K{{k뺚"Nrj3/C3k2nr*j + K2..BZJ+Cs#+j +J[c[*ڢ"* {;kk+k* jj+KKk K +j++*j*+++*ʊj**k Kk k + + +k+ +J +++* Kk k**ˋ++*k***k*j + +jjjj*++*+**+k+kk*+jj+jj+++++ +jj+jj*k*** k*jjk K+**j +++jj*+++ + +ʊ +*+++***jj**+ kkkk+*j*kkkkkj****kkjʊ*++jʊ* +k k jJ +jk;K kk+*k*kk+k+ +j + ++k*k+j*:j +K+ + +**kkK *** +Jkj; kj* +JJ +*K+* ++;;c3o2f(f7K^&k(i#6v)gVH8v_';^2+J_'Z?_oK^F>r[_G7sZnNg_K.R^ff&.zJ:J:[C3ˊrbk/??g_˚rWa&||`эP lH_!?N..΂ y9H~W.v(^IIWs;sGi )38l!YOxЀ!AAṟ~fNkgGg3hX``IYƖ79၁yٱ@\\M7|v._)i)zR*w_Oog'/{s'OsO#Z6ؘ(F~>>n;Og7_gG_sgg__sco"+osZ[ʾ.b k:"2R +2"bRr;[c :g'O'ǻ/3.jB/2>sz"ڋZ*ssO3s"r3[*CRj[c{>3n[s{:sk/{"*2"sC[* rCrKzO'CC[KR"bˋ'_;":CK_.BJ#. 2j~c3 +zrN +s#Zˣs2o*j{.+ãS"NjK{6?.s/CZ2/KR +CSoobbC +;/ +Z#R B2rZf rr[~scJR*;nRJK?[#jO33sO/Knw~jcSzr^vkfSf^/s㿲bC*3B*#kc[nj.c&ff~G* +{Z'?sß+/fJrvgk[J3Ko'_3Z?S3S3Z>ZG2n3+>{soJ¢2KN*˳__ûKz[:"r*?;:{#37BB:.RSn2Z~/N~sr_:bNO#cB./_C?RsB~SB;CrÏ#/RnCo [ O[;.>O>*?'ZRzgF_+6FgK.'&W.Wj_bKC"nSRϾ?^z +j{o{bb_&[S2"? +R+#2o&sjN'nγ/R3c?b3:jk.ObOO.R:jںz23 +2 +sc.K23 +;;kk#k#"2 +'Zro&S/3Bzo2ozRs SC;RJS[2s "/2CKckn+K.;z"*jS jR3"{# +kZ:KB+J:S*zk*S#k[[R cjj#:*zRkRVVVFf&~rJ;cgGG7GGwgGgSb"3+zrBZSs( Xhڿ'gwwO?'矟^b/OCS/'g'_'?'_'GwFp@Hf۟'?w7o_G7go^n{S?'g'77??LJg)iwV,,0 OW7)Wg_W)7bȸHnK?GGggǷ)77w@ll,` viW7wW)kk)i )Wgc.fVx xVFSwWwG7w))Www ,0```뗉)W)7Wׇ#Ƿ9))_CxXHr_)W7'w) i)W LL,xv)9W/3c_iY9'{v&882_g'g燗III)Wii9!<0HFO)iWr(F'7)IaYc*ڞhh^W7LJ'WiiW)iIܜ @^/ɉׇ(>  ξZRz2zSf Wi))77'GWyY!yi)IqP\<~ɷs Ϗ+x !9yYI)oF3_o/rnH`NI9 W'SJJwəٙ9!qal䤜)0HN a9)'۞fB3iiorfƈx(ZgW W'sJ?Gi99)WW YL\Lp!iǿnf@@)Go[z>:I S..^&>f)G_σo' iWWW)i!aWL\`WA_+^V`ph!_K.Ο)IbfN__"Fggk'׉)wWIA f7))s0H3y ))g ^(F2s.JogGK"wW)WW)!awL\<Ј7_7!wpB)Ya (.) 7Jv~Cv_ +S')))ii9!hl6xp fOIaaN~ y sƈfn^F*w__KCw7)))Ya|,xFZ8 8aw7&(3GGG:V(8JGgG~N#GiiWaC|0` F1ᷞV`x&ɹə.N2Gw7'ϛ~X8(Z/i7K?)))i V,,0ag>V hJ/iYW73b>>+#'oS֎Rj?鉷?_giWWWW))iyc,,аxG÷VfB..Gɉ ) 7oOz_B(^gbo_OSwI)'w_/'ggǗGKHp3?[++jsOwWg''/[;rZwsOw?ã/_s;BR.fhxxV.[cs_G_'g_c;/s/ϳs/K #3/+:r."NR^R[>&&fRnbzz/OcSOOo?[b/z;" +R2:&k.rs^2#^>B냟:.;Ϛk{sg_;K?co:烺R ^>;{"2>/kg_3_gwR".*Gzs[: +3 Nrs?j&[r2.# +.bR#O">>*"Rz*b:3ڂ3sf^jro2~[f +3cRrS[/CB.3CJZj"j+#j[jsozb Nz{KB{/bKo J*"Koc2*kbrj*Kj+C:*㲳3{os;#[ K + +*+b;{j³jK +Jj +*k + j;jkk+JZzk{KKKj**j;# k*KJ"z+*+ kKz*jj;*Kʚzjz**++jj;K+*+kkKj* jJ*{;+kˊZ +jjj +j +J*jj* ++k +j* +{ j+jKkkJ* ++jj+ +*+*j*{ jJ*+J++K:*jk*k+ J+*kkj ; +JjKjBb+k{[{k+k:JK*+*K3B/#{#+Bz Z* +*3*{r;_b΃"N[J3R~˂Bk +c[ck;;/*S//:o˻+JZ +b3f+K [?'>crs{#:.#.o{* bK2{S/CJ.[koS/sÏc{*s;# #+zbzK +:*˳Cš: + +; +[K*k[;C :{+Z*z*j { {ZB;;Kjz{ZZ*:+ kK kc#sK3*J[ b2늢;rzcJ[K [zkˢ#zNrRR 3j [;jk c2#K//;2c›Jk[BZ +kj*ʚ +3{{+K;3s[bcbozzbnb[n.zz"#+z*JK{*ssC*#{NnR{:BkROsRo:ˋ;n{{z:KnZ>N +˂*+:Bjz+z Kr˛Rb2Zz3/*Bk# +JBKJ2+3.Zjbj/+B;Jz˚":_*K:3S{ {KR2:+KKO[JZ" #SzKjf&/gGK+JzbJRz:JJ{kZj +r +ꋊó˻zK[*:"+ʋ"2z;*j[j"zz;zkK" Z +jˣCS#jCsSSϿ cc{['/f@ngO[jKs?;"C_w鉉)'/[soO''?333O')KX< P8OigkS'i)_#+ Z((&W'sc_GwWiwgg'gia(  Ya.V^ +/'SgIY!S†FNrkoVVVϷ)Gc*3W IiWwi!.\Lpᑭ+(ZS.j3'i3h6ngg.Vh6WI)3_Wii)i !90|J;2F^3AAgFHVZWG3k//>f(ry9+/w77iٙ(@lLPhqq2(^k~(A'V'_o[zzOG7 XəI'3{GǗ)WWi 9y,|LH)aib(HH ay ?k^v& +wn(HhFzG__G_WIXpP f7)''i(s_^6Z/oK+z66"o'g_'_gg7W IXlR.92C?SoiigS;/ˎ#.~6n/'g_'g'Ggw'Аx{i)gGc''?OSkkfn2;o{sg?_{s{Js{K#j/ fȈ(Vvv6~'7'g''/C2rRrR.RR:J* k#_S3ۏKo+""" ˚NΎN~nb#S_O_ϟ_oOo?okRjJZ"R2"3 ++3 #3s+r:ڋkKڎ&~N^.Kj;sOC?s" ckc.2.ڻZB 2J+Gr3/.cSBSb:*Rf&&^NzKSgÿS#_kJRz[R:Bn;ss:k SBScBKo*FVV(VB +_G7??c;Znf~>.J +#SgK 'Kc/^hHHx֞>rGw)GOS_3Cc/{j6^N;K['So'?#G_CG3G?gOgH  `X&~7I))W)W'???Oco*rvVN..JJo7)GG?_3CG*) X`p@^yYI i7*c3 z'os(((^g''W7W'go_)iX`@@𐰀Fw9Y IiS/C /g_S{VvZ;?ǟg'soOjoSs/'` `(Rbr)WSSgOCgO{k6>n>__SO3ϻ_*"{k+⏎F:Rc68(V(&N"Bzg_77'7'gO?'OoJ + +ZZS:?Nr^;^so){&k.2ڲff#K_Z*>?nZ >~R*S*.zr7S?"JiK +Ǟ3*[ƚ+Z.{K>rFooRRVVOZKON.Ƃj +Snrbn?fOj3g_nZ:sC +gv.7# +?/n3Z{k" +&ǟOnCO&kgꖢgO럟*"Zrr+J +R/*'r[B'rRz +">O2i?*>K?/3F/"/o&*kJ?^f +rRs/J.SB;z&2#"sv*G#ROg?">?.&/^W RKZ':/ +R:+2_Ssfo'ۿfC_Sz#ۣS~"..VR^O'':c[:[v>;;+J*z&grK"o?~"sƚb#.z"nkOrSo/K{'.c.>n+S?Js'/R梊Nr^"s΂obC?ORZzۃr:Z3Zo>^Nn 3c'zZ_KKzr"3 +zR_*{3[C&&Bc#SKs C?Ro^/fwO'ZKsC37 +JZOz>/.z':r3oF^CR&R;"ZiFW/_N^fFf>^&>ny'7g?ZS{zW6/^JB_^~_g:gNR'>oJCsK#s[g/nww "VROv+Kǚ(J~n7cIF^G#.osWHVI?b/;s>2;)NVGƏ)FNSj?'RRB2B/_ZNVJR)goV'JjfZf"N.N?7s_s6crRR("+f2Ss;+sg3?[z;rko&K+N"Z2J{>B^^Rj~o>'Jbbj;ZCZzʿ.**K_N^B*2+;ORj2*ƒ {s:*;jnjcRKN + ʋ/s/[*.{[#{b*J*{ںbk{Zk"zJz[[ ++:zjKkJ+;;+ 3/##CSSO333o_׉,а`'))o~F~"? !yWχ_'GgǷ_'''S_iIA1aC6f׉W_2fH HI /鉉ii9yٹ``&#SIYA9[H` + Aa7Ɔ^ZiW¾&hXV ɉ ++)i)WIyIIɹ|NI9sȀ0V9a9~h(&S'WWn `gsSJ#?)iWW9)ܜVG9Wn@0x'i 9aY)j(6{/)bxH8"IIGoo{{w W)ɉI@ 'W aI#8 ~O) !! Ov^oSS7))cF6HH(;W9i_?3S/_) W ii"Lp7)^0iaaYk[ۿ){ƶHh9iG7Wii)ii) 9 'Ga8@8^w!ay6&"r.giGێ&(xfOɉ7G3cwww)i鉹y<|<"?)aY7x8.oﷹ!9gJ>^C7))7?;88{wi )G7?s{'_G77wWG0,h)I9ǻR.SS)g3sK +{zRn"*o?os#sO?__?osCsS3/?nhHȈhVSS3SGggS[k+;[ JzRn.2bBRR.;#CsSs//O?os# ˋK;;N&Z+;'gg'O*2>Nnr{sϿ?OSo/Ssk**+:rf666F6v6&>z/gGGGg?/Sk:.n.nNNnRR2"j[[{[{c3{{[# jJ +*jj+ +Z2R.>~>ΎRj{SO'ggg'/sc+*2ξ.bBzzښZkk K{[{[3333SS#{{[{;;**jj2Rr2r.ZzjKkc{K++* +j+k zzzJj +JJKssó##c#c+kkzzzJb"b".RrrRrrrr2*csso3333C:+k +Z"J:2Rr.ΞN.nRb[cs?OO?SCSC3ZR.N>^&&^&^^~>>>k{3/Oo__?_ϿO/oSc +ŽfVVf~RZ;O_gg'__''OC{K:N>(8xֆsgGG777ggg_???/33c{*:22r2R.>>>>~~>N.Z+ۣ.RzoO{*JNz3o??_''c3oo/_?g7>00@X(Z_)iW +{zǗWwGwG'SbnΞ&&NK{ c+zz::Jۣ#;N&>.K +Co???OsS3cãKN6h(;3''?OϿOO/[+ j*:ZJzzʺ*zbj+J2n^6n*so_OOo/oscC +"brRr2[c#ss3/S/#s +ڻb{Z +j.NF6涞FΎk:_??O'OO?sso3* +;z r2JZ+ +J + *; +{Jۺ+:R: +; +3+KzJK*3+S;2j'CZ/R +~&CJ2:. +*#"3_3b;r{b3>JOJcc#ʢkC3ۋ>J&[s"O&:O2Kk[+{s" _>z.*J.rK*nzkzC[ N3"3S ;R.zrJN3J22:S"2sR +n">C*k"RCr;[Sg3:cZ;r{ +rsN#NSzC_C?;rjZ+r;* +R2#j_KR~oc#BR~o*[OZ#; +r2oJkB3ZR+j{b3ʚ>/2C +o"' +jj"˾zZS[*#c2sbr2#+{?.z;RKώjKn {R kj: +ZSc*:n k*KK껳Cj/[ +~sC*?.R +;"nj/ʚ+cnzg3S۳{ *o{z3">Z;cKj/šJ+oK>k#:b"ZC2/+o b3ZZ*# +Kj/zڛ:noS{z^Rz{ڢ⢿K +rZ#Z3/ksc{s k:BJbkk k*c +bsBns;#{rJ3rsrc.j[[*zS+z;./sjr.2*oc.j{s N^zۊ+3BŠcO:2[>"S?J;3ڿ#nr+r[?SJNZBS{S/o:s{ + +.j~n# +3"RK/_bjrC + +R"coJrNK:n[z#CJ/R#ccKRjc{sj*[ +{So:;Krrnz:.z" +3+JSʟz; {{#ZnK{"fNbs>*C{KO/CNs#+n jKS*2NSN& +bc/#3k*+ BZbns CZB#/Z{:.ˋ:.Ξ*kkn3_>{*2;*k2zrnbjC+soB +S[s+z;n+; ʢ +N{K*":j:j2 +SkbbB; +*:+Zjs +jBJKZ2#+rnJ *2S**3Z[;2J +b*[*Bcc;;*Zz:JJz+{"Z#j;k: :ڣB"jJz{KJ +# ˋ*;#:*j:**j  +Kjۛ k;+ + ; J:[JJ[;K;zk+ :*K +z +jzK Jj +j* + + +Jʊ+ Kk;{KkK+JJZ + +" +zjjkʛ+;J[k{+zzj*++k++kK+ *k++j*+*++Jj K+**Jj +*j+jj* +J +:j +***+ +Kj*J ;k+++ *jj:++**K**zk*jJj kk*+j +j*+ +j+ kK +k**+j +j ++*j++k+*++Jj +j** + K*k ++kk**j + +j* +++kjjkkKk+***+*+**j ++***+ +**+kkkj + +*k*j+*jJ +jjjk * +**+kkjkk**+k +j+jj+++**k*+k*+*+j***+*+j** ˋ*k+*+**++ + + +j + +J******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_american/crypt_off.isdn b/tones_american/crypt_off.isdn new file mode 100644 index 0000000..486de80 Binary files /dev/null and b/tones_american/crypt_off.isdn differ diff --git a/tones_american/crypt_on.isdn b/tones_american/crypt_on.isdn new file mode 100644 index 0000000..c354001 --- /dev/null +++ b/tones_american/crypt_on.isdn @@ -0,0 +1,15 @@ +********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************KKKKKK***KKKK*j***+***+********jjj*KKK**+*******+J*JJJJ****+*j K++Z'gF~~!ۈFiJ(aO.GFV69KOg6 V9J8s* V&(O9)a(Fo7'j` Z '9HHa78KZqr*j /!sG غimYF s)/9K`3.')8 .~KsXlȎaq )I*YAoO9iAiN7FW&FG)X`6VZ) ˰ƁY3Yh6&(F;NW9&g@'9 A&&XLjg7~AIghGg!~p/@ƉW7cF`a'X6'gF) aGNF1Oa؈V9 A&NA*&iڸFKZJX9r( Y)!roi~ar./K*).'*yG9&ؘqi0VV'Ƙhy!)憰&aiWN.V/G'&8(a)Yh3h/8N Wƈ&7i)VhVXW!NV8G/V*NG*~~N O~!Y aGVH~WV76'8 cۗ9J r)h7i38n7?^8iVgij`F )X7g(6  Osp9ga)o'8 9VaOOFRrah)ƸXX'هFh/*X7w`v7V&&(6VWA!'*VNy) .Hx)!q*x ~qIFKhGI[jX[Y V yH~kqJ..OV9o'FXioZ(SI'X~FX/6&aW:6A8X7X a.i:NO7h.H9g3F. YXІ)*O* ڈ@V6gVo ٙGosW!~rXo~cqyJȖNNYFK'ؘh~Wi) G'89/W9Hw('!Y&0i s` ZV6ISy*X63sY 8iJJ*Hg/ذy*GY'96Vq'i/O'VyY&`*i&W87WNǗO jV-&6`h)g9 @Z( F)Nh&o/g7釙9VNa)V/o&K9qYX ǹ&G j)Aa@onIVY~؀n!i9~ȸ) V9˙Z8i99'~1!N(V9VF9)ha#+g&H~q*g1N9ǗoXhH a N vFW1!H)cFNO8VNYq/@Vyyธ'ٹπfZFɋ:)!!J~hrVFi!99H)G~g609))H(* HV'ySr,hsFX`n1ODZV3W`AqᆈȈȇgqaF`i~.f  H&i)&hi3X8XA˸8&bW.'a p~)y &)9aAW p`Z^)Zy X) FX)YY H(y)33ˆ&g)1Y0иg6 O'X9726 (鉖GV 0y!rFO&6(i8ȈiYYXH~yѱO*/7?0)h)h0 K1opЖ737I,N9ف& +GCilG 9Wv(/(+!a7ИcGg9C/YI~+Npya3VI.H@.qȸָ~ g.!V@X7AqIn6hamF8FADZwX`(~aq0bshqg 6Whr9X(`o)VVAW!q`(9Wj9H, 9wi/*!'@0Hǁ 7/FpI 998Y&'qh?0q9fX؀9f VpϱmXֆX#fhז&/qNr7 SNa196)9('aƀ@O1ؘNyg99Opl(W OX XyvY&/ ,ƁG!' (yI.G&g90a h23XNXHIف8`VA' *f(7 @HRj yhAW 'aI7SXFg9y)y on(Xqa`عOn)nIـ )9) @gٗi#8c&6O@9ٙ/0؇3R;~s ~R>V?fX!a^X)φ!hfx΁F&&V(y֘66F.GqظK)ayvG'6nFoF6kgsn!g `Fcy~†~wIw9)/N_(`6ɇ`ZONF/h!W'~h/!aiZO)N~ii>N(K6y Y "66XX!y6~f( .VVnHhG'Hf)Y~vh/)OW68rJ&Vؖ7WG .ظ&97:gV)_ NV iW7&i)))9Vo2NYa ivFWWK {nNIa9Wg`39Obv`(9 )i" 6yi&f@h'9G.&. K>I)V V(& y/`wi VFFY)o`{'?ف98Hə&h7Gac&~V8:'7YI/r9)" Z7) HV˺Yy[' +NؘG9YI "N iXVV(hƈr9ɏof +I9F3h.Iy/((~#>ɁRhV8'g)b(Hfy&VO 6V.k&(GOV 9nI9>.>>*&7bƸ!gn8V 9YG& )VV/K![(i g'`FWI7& 'yw'yvFB(nY)@ ) o?s~7Ya36{y n)bKVHٗWpF~87~0g Yqp)NفO) !@Ѐiy)yi)yN9`l'V Y- a@`p~O91G*l7Wi9& X/&hy !!)V@I.VHaa9aHliINnVZcI V@`YVZ,n6˱Y(cYXIFry9FhJ!XWAab`jV gW>KaNc./ya&F!IV`ac*1G*XƁqG6@)XF`W'io@Wv7HX F`W9HV.I1!Ⱥ8ڬ W19Wg~AN()FN / ~O ha9 +'WqSZ'Vi 9FGooi2YWI@y)hiXA7OGrV0 yWy)igǙa' G!V6hi- 78&syW8oN@h*` +'h(j9g.aVp_((!@hpN +iX!F1:li*Z!)VAYhH!v șhl9gI7`92 +9ۙ0VCA(a hiVX) Vo^@a^?٭FNɁVyFVV0>Aج68 )@ 9'hHvyIq1wp,NHmb``G9a l~7yX!V@a)N hy'WlGG!NI `~3I869qh Z/@iYg و; 66Fys(9.!AN:p: F8.iY193J3WFI9/A1Xo!YÂV@VI1 X).iw7y7~9gg .(GI9^ v2W?gV~qwGp?O'X!yiNqygi~Ov qJv0g9V!iCH8mwX*i.hO၉va9S(F>蘈&3N)fgpf~Iq)RV>'Ap yGɁ(GaX9YV/8,.k.f9WُRY9[ V)~;G8`8~((8*!Yn (Hy+Iw膈39qhN^Oih)y_p3aq)hƉF+V')qw y .`ۋA0Wo&YIn9I !OXky9O8 OR& O g+VyaS)+`ñFo)ٞ6hinYR3X~`_:Gy!x@JY9ni.f*1h9W)9 vFa9)h./ +czGq ȉi^Kjc`VGcGXO )3Gon7ؖNygOۿN Y)h yA)v 69&JfwyyvV)ff)(&!2h+y 7VNO_V~hGZ(Hvy&'6yS`n7NXF*)/ 8?/7g(36W**ag NKsI'F?!9ZV*iGJh#ٙFgXa0N&Y)GG&ig&9)V28Vn'a)@o')Vx/Wɸ( && H&ۉwayhN&AoK!I~ko)HX89y(F7i@ȉ!A+(['(IZƙg^W8hAǸH( Os&9s~`cKk Vh2! X8Vg .IVJgNXǙy36X37yiJ!~i/Z6ywFX&!Z K*9+XGYRV" 7.!JXVyA38+:Vs!wH(iy6/c&VoA.X~9 )'H&FY.NFroyy(hS'Y/F())!)Nx.R7'[{o8`FY w&6.V))9ȸ 6)i/V3J a)O. w+g *I n6h8"G.*7G)iZ.ظgIoGV.F.J)'ۖV7)GN6V7 /rȈ.Ǘy(n# 'c.h62*I97&gGɟHVc)&FN&/ 2X6N) )J~.6膻Gy[86.K3Go'Ooɹ6.ZZwO/7gڃFrb6&Grs'i7..&VV g(N/ I7~~7WG3KF&67(Fgin7)c&Ny6&//~~yON6~Y&~.s&VoIF3)~&)/6ۺ' >F&++ 7gsJ7)(Zic Vcc og.XKgw*sho9*G~ ~7Z) F/VW 9')nNOق+*V*G*Gy7+VhHI!g3h*(/Wa36/7*)O&.K)KKF)G'闘*&7)GV"WvG&vVc6.''W(NK9GVO–. 'Yظ.gJjN7gX7/Y3F.W6WHVF9O)g(V&Zh)3O&Z'ii VgOHIZ9*JYi'KZ~Gr''yVVO9Z)&y7WGFk*V(6))&jJ'N!iJ`GJ'Y'V(Z&'IgɇON'6)~済W)*i&Vv7i/.Lj +6V~hsaWG&N36)vh)7O&.I~nh*y97(OY9iFGicy8SGV6NgrV)I7/8.N2IO*V NVfJ7 9HF[/&gW~O (؊/ FV/iO& ')+2+7ov9WV3 .c3 //`{)Y~bNVViW79k2'.VWy*hSgۆh)ar*S gV.G&oƖVJy.Vv&~oo3H K &ǏfFwr86/7Oϟښ'G'FXO ȸ7/>zGXVo iN*h(Oi)g~g)gos*36H9yn(gc))&I OZ*N.99g~V6~3gJgVV6r7y6V:2iy7H s6'F&gƘ3G_3~*7G[wI9GF( O/7)&OWgrr*F)))&HȆ''o/sj(HGg#rvVZ3Z.'i)oƈ~73cʂN&Vy~V~77")gfh&y/~+J)9HVƏI/NZK~~6*9((V/g~(VNʗyV&* +G)gH;G7Nc.6.'&VOoOsOO.7)s3s2~~oW')g +c*~O))fsZ7'6HJ)9W*2/[&g)WږV(G3n23zkNv)gN.g'&Nc **O77Vo'.Oo~F 7*O'G/6H6O)sFKcN.&~7/Vh(gO:/c˖hwWcVOJO'NVF3ig.rc&7˞6Ȇ'_ 3nJ fbwiOcj./+7O+/.JGffVNSg3'Vb*iI*2/OrsggF/W7[r**&coWjVgZ**On~.h&2s'Ks&gG.K~S/V/GO.rF6n'o~&*[OOV'g: jƎ3i)J~hcGo'+F&G7g*v&OO.*/ON6rO g.*rwWNV&&/c:/.f&'G)&Jo/cG/.F*3)gKc.F/c/GosF./s'*Ks~/GZ.rj*~ Sg'V.3ggc3N2JLJ*6~/K3/KZ3ggOJrcj/go.oO.N*ʇoJ~N/'3*NgcN/KGcZNO/Z's&r*K'/~j3wcN3*oO&'***rNZ3cOWg&KO7*J&&:cggg3NcsoOJNJos7/.&JJ.Oos/6/'g{~ڎ.›g3OOK*'.N.&''cssR&.RJZ&~O/oOB~.ZWG.N&./[c*~&)2r.Z*c77/N~37o:"NZZZc)gG*K/.&~JK~.NNs/S6roG/NN'OOZf2*O'3K+6'O~*.N*g7'oGO3oZ~6NK.F~/3O*&)'JN*/*G&67*rJ2.g./oOKN..ˇ'*Z.&~c//'GN.*O N~JsGON~JJKs/'N./gGO.&. .~3.VV./g/*j/K~NGGn./OcJVN/G'/ZZZS33F~/ +rJb&b'GgsJ~cs/ON&JڂNrǗgFNg'sJ/&~rs)Gr&N*S//O~cK3O7G6&O'O.ۃێ./GJƖsKs3sZ6O.Z*N+gOK.Fr//crZ&*G**ZNˋc+oOZrGW.K*O7W/&&'g2~sK.r/r~jjcO.Sg.~JgGsNJ*J+GccsG'ZJ*/rڻ''FZZj3oSN3/ZrKO'چ//K*OcJ/FFN/WF.*ooN'*N.GGK./&*N&*/J3/*.NWo.&Zs**nN&O2*ZJJr˺'OK*.:JrK/*OG/NFO/''*+~*sV~Oo*:g~66GLJr.jcgo(&gǏ**../N&JgZƞ33 cc.FNoGo:&3[+'KJ.&G**.rZ7gK~Nr.o/K: ''~~3sN~Z˂J*gR6KO+/~~rK7ۆ6~/sZڏgSN6ꏇGZ&SJK'F6.sO3ZJcZ/.&*ocj/3K.K'gKnrKcg'/+Og/*c*ZN~g.~Sc'K.&NGOr~b***.''&~/g*c/../77/NNZ*3oJZ/.& OG'N*J+K*/&*ۏO3Z*Z./OOC.*s33cNNsOo*ۂN''/rZKcK~fG'3ZN.Z+N;gGOJڂb*JZ {gZJKˢڂN.go.N/3j/OKNr/rZ**/NN#S*Jc3Z>[s'3N.*KcoO/rJsOO/.*+/K~N3j*cZ&O''/N.JcsssKN/3Kr.K*rO&c##JJ.cc:rc+3O/*r.../[ZKog..c/c/3JJg.r+*K/o.*sr*Z*O'&j3sKs*~rK/O'O*NN;*sۃcsrJ/o/scJN~s3ڎ/O*.zkK3.N.ocjZ_Orr..3sO3:r2**bJK*so...*oOZJ*ZZjs'.rO/*..J/O.*3cۃ3.˛/sJJr+/s3S3*NZ*o/+*JNJۏ/csۂrZ3O3cZ.~OccK:Z*JrOs*r~K3**/**..*/r.Jc/:sOo K:**꺃3*r.rۏs*r*c/J.[/cj*//*c3/s*.2++*sKKs.Kc3Kº*3KNcsJ*c3cڎrJ3c*J*2+s/*:ۃcK.33sۂr*sKK+J..+ ss3/K**:Ko3J/3KKKK*r***[/rJڂc3ZBB*3cjJcK*ssr +*3ooKr**J/Or+*/O˺*KBjKs/3.J:jc*JKJ*K*[/J3KKr**c3cZ*JZ33˃*ںjj/3K**JrJKK*KJJjۏSj*K3cK*JZo/*/**K3J*Jr/OjJK꺃/ZںºsojJ*J*/s*JJ*KꃻJ+*c**ˋ{Z.ZKjۃKZ3c3b**JKK*r.+Ã{**Z:3##*./ **K.s3*.J[K* ˂rڻ/sK*ZjjZcc{jZsKK++K***JJ**K*Z"**3*K*ZsJ˺**+*3/[ʂJK*KK*ccc3ZjK*ZKK3***Kڂccc*rK**K*K* Jj **cK*b**[+***JJ*s3***JJ***cKJZJ3c**:+s3*Z+s*J*[+JJJs/Z*KK3s3ZJ***KÃZJKJ* J*Kۃ*J*** ˺Z*KKK*JJKKK*J**KK*ZJ3cK*JJ**ۃ3*j**J*s**ۃK*** j:33*jJ*J˃****+**ˊ++*KKJ*j˃:jjK*ZZ*K**K**J*KKK+ZK*KKK**K**K*JK********K[K**JJ****cK****J*******˃*+*K*:j *K****K*J*KKK**KK**J*+ۛ **꺺K **KjKK**ʻKK**+*K***Kjjj*K*jj**K**+***K*****+++K*jj**ˋ ****KK*+**J***KK***********K*jj*******K*K***KK***jj*K***k**Kj*+******K****K**jj KK*jK+****K;+****K;+******KK**jj*++*j**Kj****K+kk+*+**+******jKj*++jjjj+j++k++jjjjjjjjjjjj+jkk++jj*jjjj+*+k++jjj*+++j+jjj+j**+++k++jj +jjjj*j+++ ++++k+k+kkjjj+jk+++ +*+j +jj++jj+++닋+kjjjjjjjjj+++**+jjjj++jjj+++++++++*jjjjj+++++jjjjk+k+j+j+j+ \ No newline at end of file diff --git a/tones_american/deactivated_loop.isdn b/tones_american/deactivated_loop.isdn new file mode 100644 index 0000000..0aa56a2 Binary files /dev/null and b/tones_american/deactivated_loop.isdn differ diff --git a/tones_american/dialpbx.isdn b/tones_american/dialpbx.isdn new file mode 100644 index 0000000..921dd64 Binary files /dev/null and b/tones_american/dialpbx.isdn differ diff --git a/tones_american/dialpbx_loop.isdn b/tones_american/dialpbx_loop.isdn new file mode 100644 index 0000000..bd5641f Binary files /dev/null and b/tones_american/dialpbx_loop.isdn differ diff --git a/tones_american/dialtone_loop.isdn b/tones_american/dialtone_loop.isdn new file mode 120000 index 0000000..02ded29 --- /dev/null +++ b/tones_american/dialtone_loop.isdn @@ -0,0 +1 @@ +dialpbx_loop.isdn \ No newline at end of file diff --git a/tones_american/error_loop.isdn b/tones_american/error_loop.isdn new file mode 100644 index 0000000..7ff692e --- /dev/null +++ b/tones_american/error_loop.isdn @@ -0,0 +1 @@ +*d}EьDH$]aRoOsk2C/3k>2s/o.n /3nk/3rn:C/oSJR2{#C3JrRr:#s/s"2Š{CcKzR2 +/#j"rR2J{#Bk3S#jr.rzˣs/*"rz ۳3 +rR2;SsJRn#/SjbRn.KcSo/j..ڋ[sok".n+oo+Rn{3oKr+[s//Z2b{3oCkZ2..jCkRR"j3/ B.JKcSJbRRb;/ :R.KS/n:KSos +..J;S3;nKSs{nrڋ +b.2z#*RZoS[+ZR.r*s[*ZR+s/kr.bjs/:r.b +/SzrRJC/S;Rr"S#2Rb;C/Sc:2Rr";ScRbJcc;ʲrbcS{ +rb:ksjrsbrr*sjrbs#kZ22sã+2rZ{s r2 +3c 2r;33;:rb3sC:Br:s;z2Rrb;3SsC:Rrb:s:Rrz˳sC{JK3SJR˳s{.:3JBRz C3 +B.RB S3[R.2+Ss+RBZks3*"S3[*R2*#33[+ZrB+css+2rZ*3srB"ó[뚲2ZC[k2rB[C3C[z2¢[3C[krr2bj۳s3cz2r2b +۳s3#2r2b +Cs22j33#K:B2B"3C[ zB2Bj3#:r2J{33c:Br2J{ssÛ +rrº;33cBrB:3srrssÛrK33ۊr2csbr2 s3brRrk#ssc"2rZkssc+"rR"*3skZ2r"*[ssZ2R2b{Cs;r +ssKJK3sC:rKc3s{ +2 3s3 +"2Bzk#Cs"2B[s3[*Br+s3[*r+33[*+33[+BrB+33[+BrB*3s#rZ*ss#krZ*33zrjc3#kr2"j3#b2Zj;#3Jb +C J"BZ[#"B¢ +KۃC +" CjZ ;*Bb:{cCc{*ڂBb:{cc*z+3kzbB+kbBK#ÃkzjKC "‚zˣC J‚j[Ã[ Zjc Z + cc[ +ZۃK +Z +kc[Kjڂ +kjZkcc¢c#;jbZk;*bZJ+c#*zbZ*{#c#{+bZ;c#+¢:*ckBbK[cc ʢ +[c[K +Z cc[bJ[jb"Jk{#b"ں#c*z""J[;*""Z:+;[;+""*[#:ZK[㣛k:ZZzK#{ZZjK[#kZ"Z##{kZ"z ##ZZj #{ڢZz#JZz˛#" +{# +JkKzZkۻjJ;[ۻjZJ*[ۻjzZJ+;[[*:ښJ*;[[*:ZJ*K;+JZ:ۻ*J*{J:*ۻ*zJ*{;zzJ{+Jj +zJ; +zJj ;k +:zj ;k +:{k +: jz{ : +K{{ :zK{꺚K{KJzzz+ K*JzzJ+K{+zJ* ;{K+z*{K*zzJ* ;{{K +zJ ;{{K +:J;{{k +:j{{KkzjkK{{KkjJzjK{KkjJ:Jj{; jJzjk;jJz:+ ;; jJkK{{; zj{{ jJzjkK{{; zz +* ;{ zz ++ ;{* +:z: ++;{{* +* {{K +:zz* ;{+ +Jjk;:zzJjk{{kJzzK{Kk:Jjk˻KjJz˻;KkjJ:JkK;* +::jk{{kkKJz: +* ;KkJ:* ;{:kK{K+:+j ˻[{+jz+KjKjKrz{{C*sZ㿿3[ +&G/">6^3'g&6~CfVv~?G?¾~**RfVVi ׿^("?WIIwV>IVHv.7 )?2&Vf 6h&{WɗCRFh._i)_"h膺oWiWb^ֈ(&ow#(hnGisrFh?;{')i'^(ZSiI):f(^:SGi obhw 3Rnk)'{>h(fBg) Wj^Vh~S32Fhhk?w6(c_WW?&V(&Z)izVhv>+(N/i)C2(V.o闟n(^"{?)7KNV6~b˟W~v{'ח'/vf#_^v.GGB2ێ6F>2_wg*vn3G)Z/7_CF6~_vVFN['Sf./7WB62JFFw's:fwG?#b^>KGwo .fvFJwSJF.z_73~6&BCc>bJSOb&6β +Ƿr. G_/62G/+FF~.ZCg3^6>J#2fvfGG_ Fv&'7_/ +~6R:Sǟ"斶R7grvN_7'o 6vnc緇sj6Fr/7g?C&6fNrʏ{&;LJn~2Z#ƆN2'Jn2zS'^Jg_2N.꿇'.f^~_;>&R'_O+f>Sg_Z&zχs.&^N~&R'LJ' +^f^>"gS2NsRff^'Άf^g'~f&^r_g'J&b3_''_ob^NZ/__3~/_c>N>n_ n>~R_ON^2?'oZ^>S'_32>ꏟ_g_#.^&^K'g*Ξ^&_OZ^&&z/_g'.&&^O'k^^BC''^^/''2^kϟ'.~.O_O~b3OzsOCbξN>nSOξ.sSϻ.nN>rs/Oo*2RnsoSr~N#s:rNccZRn*S?_"R2;_+2N>s_Jrn +S_?ۂ~3/?rSsRnjs/Ob;/okr.N"sSϿ3Rʃ3ScrR+C;rBK/BR{c/snCϳJbRʛcbBR +{#SO#:>j;coۺ2N>2K{">jK:[os+2>k? +R~~{?zbnNk[S?~K?Zr>~RJ[JZR> +{Co;.*{C?JZ..Z j.ڊ o +.n s/ۻ .Ks*BnBs{nBs[KnNnz?3 ξ.⺛R>>R"jÿo;ڎ~*s/cK:o[2~nbۏCZ+O?/ Z>ºs3+NR*OK2r+Ok+c3[R.bJk3oCRZ+ScRnr3sCKRr3crB{S/snrz#[R.j3oZnRrK/ok2R2zcoScΎ.2JÏsۚnRS/CbNrZoϏS*rNRJÏ/3ۺ.rbkKnrKo/snnr/oSCj2n.2bo{nRb*/3c;Rnrk3/3;R.rr"K3/S{.RR"K3/SCK"R.RsSCn:#SS +nr/zn soo;b.NnSosBN[S +N3/Z.N;S;.[SooC2nRJc/ooS:rnB+/o[r.n.b //SsZ2RR;Csss+"Rr:333jZRB +3s[jZBRR[3sr.R#sSs;:RRZc3/ B.n;3/ڲn2 +C/[n*#3Sos;..Cs//Z2nsSSbnn+/oz..ZK3//*"rr[sSS[n*csS3Z sSBR2C3ss#R2:{3j +cC3jj{#3CzR*#3jR"{s;jrRk{SSK.r / J. +[s[2nn;/3*"R"+3C +R #o/c z2;/s"Rn3ooR #S#z2n;SZrnjCS/;jZ.zkCSK +2.2J3[j>^rKC^r?_bb~rr3g†S^(xƟWs֖8G7^~&^z7~&fr& ¾f^LJss(^wvfsWW/V666CW׿OhWWǛ(6fvsg7si)ChVi)'ohVi)/(h#i(V7Gsh(vOh({9i ?VhVK_'h(ֲS  GfˉWIVK_i&+)g_7n(v& +W?)g^fVF&zO.v^~:?GR^&V&"S'>F7w'NnRs7Ûo~rWocGf6'/GOFv'igO6V>_W&F(&&)(([gFRVk7I)b^(6_ nFVbg_GIW*nVֶ('bVg'.Fb_6ZsS{.^'W'~jsW'r^ gsW_k6^ƣ7g˾fGSW_랖fF;Wf'#~f6ov6糇2F(NKg*FFN*gֈ_W &6hS_w[h~cRWw.#׷rf>>C7GGz^(΋cGs""~V K燇#RbΖ{_s_'#NrN/./>>S2gG.fVzgrf([b7gBf(+B?wǣrJbrBoGw/bΎ.sWς>n)+#W+6&g_c/&k'_(&ff?W3&&)S'^^&/GW[_F^/?^Ξ'7ko^fB_ +^&_f":s'Kb+k37z;fnºÏG*zj.Z7W+>R;ow)&~n+/SCJO3f^>)O~f&~ʷWϟN^^2_.&&..'/_n.'.'gnnRn'gr~RbZrgs.j3n&rRZ'_Sf.* ++/3N>>Z+s/~F&b7os27w??SFBn'ƶ7gnF6N&nB&澇wgz~F>^_G7fgw#Z^>FS_G*&6ƃs3 F#?cSr.fOgn. +{o**r*?KNNNs*?O 2noj^.N.??ojRCjNng'Oj'2^&~_O_#.f&ϟG'3.oG +f~RϿGg nsLJÞ>n6*[LJ/R26"#B"_' +k?*{Ʋ +'f2SSsb+Ns3ϣrn ;nʳó/*zcn㻳s3/Nn#oo*r {O?^z __b^_gg3.Bz/GβfgGon2g?*j&n/'G;&G +;^Z?ǟjs[^~Nj/>N +3'z/nn_/S2.J{RZJ*{On{z? 2z;C.rJ[s_cn +nRBJssr +NRr2>bso2~rs7?j"~&^J#':憞jos*&wO.^.37gOOR&['?C&nnoS^nNjgoo*2>~rC>2"SS{."N;3c *o#K + +2jR C;;zJ"r?{"n;s;ꂂN2bS[[ +²* +rRs'Os +r&"C'.ncg'?n>K_'+^>^j__'/["f^z'J&S?'/*2s/.&[SOR.R;SBRR˻[scCbrNB; {S#Z*"nK{[kBjZRK;K[ +2*cc{{"JbKs2Nb2 *;r>..n*>N>:ϳ~^s?oNN&ro_?OjΞf.{/_??nf +OORfOCʢN +/SO_scoK2zK;Z#{zn¢ +j{skRZjJK;j;zRz˃*k;rJ +kcj".:j/{ۃRJjojZRns3NJs//k2>B: 22^"3?bb~^O3>^~N*//_ J^>:sS'Kn>~>C_[.N> o_o#rN~rjSr~>Sc2r*Ws>j3hsWg^?VH*낗) +.{;?!&VvRwI!!V֞V`(9s3`(;g !fZX( :B`X)ɏƢƂy 2@&/WYqg0~ Yf>@(1KpY+h@0>Sٱ7^0@HbA[VpGy^8pZ!1NXx2wqOpȿGAa@`)IV؃7i1_FF0 ّjNX@g!1  )aA2`O#SH`6cϿ !o:28`!1  "gAiVXH1sh`Ȇ+ ǎΊ1_81IGf0FBiA(@HR3*!~s᱉"FSbW)n``bAGXSSAO.H '#aa)#n^ j9wfsoi'2[Foc.9)3;+hxRON+y3V_9*h+rFy/x[FI'&6YOhWןj` !G_:`y9GsRH``YgZxnJ)!czC RX`fb'io&h أ;CG!ywz`Oj)Y_Ώ/?y:vؘK/o39>v hcϚ" .ɿKjHxBByi[؈+&{9/CV 9?x^I8VnfrwI/㉙iG?8~_9yg x h>^Z ßX &iYoXx>oygk H&G# (&:GC_fN ֘2~ I)_(n&)9_R)OH^B +_iSg(~Nǹ7ƈ6Rv#7?F^h)gw)&c7i^W׉frIW)86(hFki bv &H6NI׉OFVF*IwWhH6^_I'GH(fIWfffi_G7OvhF^/W(f^S)76>f)7G&f6.G7'F^_&ֶKw_'ij&&f6G'i^6&6(&GGG6(gwI?FVGgF(77ɷrvFhi^([)W)[6(fV))ǂ^V)gWv[7Of.^o+F6fOO/LJfFB悟G{o6ffgKC~6#&KS?*&&Z#gC_^+^ǿ^kF.SG'&BFF:oK^#ۆ^^O?)Gzn?Ow_v&v+_gS6&^w׷vV>GNfΖ +G_F/&g7fnF._oFS/?~:&{;^KB3SKgjNz#RF. _krKf{oGgk{F6.{:'gk +nvF2 wW?j(& +RWS[6V2z)7zjG)J*~S2fVFc_W.^3)ZnV.3sWOr."KO7Rn2f3S7&Ǝ{7_2KS +_.z[Z&f#*g'"f~r[_JێN"B''kS~Fkr3sj._wCsRfڢ׏/f&rR2?W73C6&2κ)s26vRnG'3NrSOKֆZʿWcSZ*CFjJzv^KoG/zκ*'["k&rz_Jz^zRkgS{3n"R^NrB';S &NrO_C3&fbΊ?gCSRr_o^Soz^"7gofF{7oosFF^.#G'^w7j~gwϿo2F>.7'o;6NG/SbF^LJ/^>R +G'3{&.n+Osc2nCs~rSOsOR>~/OΞ~_ +~~~~g>~f&j?'gs.>&N__k2_'_O^f~_g_3bf&Cgg[Nf&r?O&f&&_3&&''O?N^_O3>nκoSb~RR O'csK.2n[_[ó+RrNb/Sj2n>㳳j2nRSOs/O/J.>23nKsor.&.?'*nf^S??_3J.n^fO_J>?2>&/N>fS>~&^3O'[R>~"/sJN>~ΊsOΎN*/??Oon>n?oo/Br^SZ^^ʿ'_So>K*~N&:'ϛ/cjKsg_^&(^2oG'n>J)wrfwO˞"G/Rkn.^s_g"RRNs'Oc~^vn>J&>go7f(&Osf6Ώ'>Fg>^Gig.V)VV()wȈ(^G )z(h#wihf;WsVHHF 'IWCF* ))ɏHV~/)W'&F)W.h7)_.N~RF‡O)ff_#/Ά~RB^Z.۟ow/>Nn_*3nr;_sr&>koOnF&zG)_')Ƿ+V(>))SFf)&377vF3G7k~((Vv'WI7N(VVzϗI76O2Ɔv(Si7Zfv#gr&RfF.K?WsbJ"c~>:Ksr~ڎ3_*g +>fBNNg ^>OGgv~7?3R&N3GFF?K([׉^V֖:goW _Ζ(莏)7h>{3 )f6&š7iNV&Br)s&')SJ(w73J&v&C7/+N&GJk.fJR^?_B:^>3#*~3RSS:&oC*?c"~&ssg/N+/nFFwg&vvZRj'*~V2R'WCN(NZW2n(^/7i_KVn鉇S+h66^ÇWiO6(6ֆkggfvfF)_?^&6nC?~>fO~>&r _o3΢;_3#~rn__+{fbں/_"k&;S'.bf^K..F^:#'wG"BfRr;χחk&V6>N:/)N(f.iOvVN +o)_k6sW)gf66v&ZS~f6rkww'^&F~:_RƆ_R&f~'gg +"2&_ZzNRN?CR2r:z[{>N;;j +~r# +^&.#S7gZ&^~?ƆfZFFn6~w7O^&:wWnrgwW:vF_K2v6vO'G)c&F6V&3)o;NVfOcRN&VFssBrv:#/'/Z"&:[g#"z^>jk_o낋c*bκzoO[ʲZn +ozR&.j'{2N> +_'gC>>N_'7:~ƞ.'۾&^F.F&^F^S?f^OWG'&&f*[g7C>(ƚ*7n&r:7O(2sGkv3_gG[^{# ^Ξʏ;3[n +s;ÛB +r#3S{333>z:/c~BNcS{RR#3'gs2n.gb^6~g7g&>^vR_7s>&v~z7nf/W_ֶW>^g//6Fb/珿F&3?K^‹[#.^rsCkocz.2jÏ:Z/2 +:K+j*nkڲ*{{coZ:bR*/sRRr??>..o'B~&/_Ƿ2^rC?:bG)g +>fƶZC)GNfFgW7rF__j^F>?_.&FR/''_~~N_ f>NS*N^ΊCo2nsk"n/{:ꂊ2; krj + B{Cznn>bC_'Sʎ>N^r*s>>7_o.~^r +'GsB&No^6~G77'2&ǷcfgG;.^3Bfffzo'翿~ƒ?/?cn^^c2+##3k+Bnzk+*ۚr*++ڋ:SۣBr +ˋoJrnbjoo2NRO_?2~&Nڏ_'s:&n3'O +&K3{f^ڏwR&Ɔ2c_w"n뿷GgknFNF^R _o+^:SoϻNf~"cσR>RZKS#{b.B2[#J ËK{jJBJzkC+ 꺚kk3+rJ;S[KkBn..ZcO3kNN~r[3';2_g^2 g +fΚ?gR^3'C⎆f^NgSR^~g&&^s?cJ^›3gsN>~S_SN>BkkOS2n*[/czzRz CK"B{[:*zZ zb2:J3zRnb:osS/:.zO/oSk:n&rڳ*n^ß_?[^&^nûf*OgOÂ&fbzN^f'_+n&f__R&"['SZ"":o':^r&^Bo[{sr~>G'Ǐ&v637rZR_?ZOSSzn +#Ϗ^V&77~( +3.WfZ".'k>3k&r+&hOG:O2/vf7of^N". ; {VO;w[_R3&vfoignF(2sbGGG^N~Ow/z')_^33ig^ +Ǐ^^K_"fbog>Rc_׷ZNv>O;O)'*RF7Jfk?梿&^+')?bhROw r>/.+J 2wv6+Gi+?;63~N'i.h_ˊ#/gG3v:WS&./&v?bf3Rv3nnj3׷R^2>Ɗ&NR'w#+6R~^~^~&RWZsSˆ.ffW_j*V^3Âo)#f>nfB'2~n; +[^Fkw C ֶNnzWI.^Άs_SzrZ7.Sr'';6?Wdz'fnfr Zn +BFO7Bcbff3:&^iWC˻3"b~ogz*Sf&w33*r~{7j^rzg?gc*_ {rGW:/ff2&jW~*?#S&g#~gCJFf#gz{r".'g^#SZo+rB/[F ?κ// n^W2.s^;SZ^^j.s2;ƶw"/Ob +37GS#o:涎ǎsK2냳k/چ>~^Jk~bn~ _o2_gۿ{jGzcnnFWRb~[/OJ_?soC[(cgO /BZ6>Nb:/S.zc:S#ʖR*Fv*gb3.z s?^6+'R/3Zc#(''k'ϲ&vRO~_3 +*jVg_kZBBsVG7ksb2rSO"#/2;.V*rO3ZoZsS;Rzrs sn c +ۣs'v+ +B3z V#o3/"z~"/vz +Cڊ KFS +bO3zgc3r:&v*/[;R?(>+_ +j&g3k⢎fngZn?*˂+'g>SK/NfSSc'*z~ +F~ϟ{*oskn{6+#;o[.n^k&csƆKo[ckgCƆ:s#.;s;:Kkg[CcC." >_F.S{_['r/skkgNZ +S +'Sv~3?[s/Z^_B&2*⻋~rz S{CS.?"F&:?33z^~O_J S[+[&~g{>Z 3~'^k[3ogs^*+3SN&2c3S~?kk#^ +*J ž'Bnk3?J"OÞ;S33sboCnBK_nn *~B?~SK*f^3>:CJZNRJۃb3n2* [Jo';~{>nڣ;_3>;Rr s^KcN.σ>+2rJ :R;s#'">N3*gb^JROϣ&6/Kr{3+n3/:NbO3NJ*+s'zCB2S3'B*ZS3ZC^rCzRJj'SRNj#?>jsrn*S[s3;B/K+s?~3["c3 Žn:kJ[?r/>~R +K㿇n&>ʣ22/? &"k??nC2N j#g盎 +˲rc. o*.rnB3{~"Z'.RskBS?_^zc+ʚcS& +?;rnbZO/""{BOcn32N2"2g?Z{KbN3#[R;{*º{zkor&.OK2br{s/[n^c kG>n2RRkC/+s:*cʾRsCn&bJ +[br"j +RJ33''k^Ί#B+o"3jn +/jnRkrSncck">N:cK+B;K. z +o?꣛*_S"n"+#C.s.>s#.~*B*'3z*#K +& ;{+rb::{2r#''ZfZ//ScFKSbɇz?(V^n#Wg+BFkIi/*2难n:w_N&vWW)s_)WsVhfN7'o?Nf[Gۃ^g_[:KF>+?'?GOv(v^SW3Csn6Ro/WwoVF>>OWRvJr_?vF&o'ǟ[WO~fFˊwiG2r(ڷG_+69舞_r(f*i?_ֈ/Gki#NbFf*nCiS./VCb*gf"7s_(h>))?^r'c#'?~K{ok.GnB[f>'z+onϺ:w#*Zr( +3#(f2 )"fzs7__Gr6Bo)_C&v'j(RJ3Or((&_7g7gc^ƞ /BC&Nk2'?+v(rʺ_cks/^F&g?{~:Bb3 +2oKֆ~ +'_ۏf +W[o^&fZk&χoRR^;c/GNF>*&?g['JcfOG+ξ^K?'S>&gcrB2>WfFrcKokcfn2;*S_z;&GrF '_z&fo)oSʶ&??g72&#.3JÚ?>2ZO*~zR^_J.z;BJ2jffƳO*og>*>&F^WG[C2Z^fzS _W?&^&2~Or^v{+Obbjs/_'r&fzo*Fv"i'jr6n/gwj^&Ϗg[~vS_O^"NO_'s_n~~f>ǿJr22#*cBZK7:jr;s2&sCgS› +j?'?;>3S'S .^ +;.B&R3CZ2N[+?v~zc/3/Ξgg>Zc_'NV&;''gK2v&jw^C_o?~b*oϣr^";#[C"KCjR{:{/zS:CKOkfCs3zn_ښK~[+33?^&R3og2~^[ +^R:;?'zFf +S/K_{Sjn>.nNowK#&^2s cr~z/2zƆ'SOrRB#S/[JR'rB: zJK{~bo/{k+nJB +C3rZ.?JJ+bk+s.b;z3orf{3ooNnCsS>f2˃s'^&NCOƆ'^^&.N'S2(Cg#n&RggokN^B#c3r&.zzOσzSB"Z{+csk2ZZj:;c>&[Jj /K.Rso?[o{2zb/Û>~N S/3_σr.B :s?s{"rNo{OOfrB"jϏSk>z_:&>&^nG7O*&/_bfkw_;*+"^2;C +6&:[{o/#j#>jss [k+rROoSoBj*zsOo"n{ '"R>bk#So+b2.JC[2zkjs;2^/3o[J"ʏ?j2>Nf~ +3 ^f~b''_s>&FboO_&^N'gSz 6b''s/;f6bj_Sz.&&Ks[OÛ^²{c˺Zk3rZbZC{o/.oc+nBoO +KK+So"Rjʊc2.Jz"3 kK2N"ZZsgKB2R +ZoN&n3Ϗ:>^r'Ƿ?RNF3S?O˾&R'o +..nnۊSO{~~"s3c JRr*+nnjz*Z#o/C:+/.rΞjooc{B +32bڢ+:coS*2ΞR{skO:Zrbbۏs>nzBBz/Jr&f^B?&~ +'sr~"#Cg 2^N[3'j^R['o?SR^//Z.n^^.j/[˂N"+{csS ++" +Coc;j{[KRn?s/{rڋO?Os+:~z/˚#r"Z cs +⊋+.B[2 + + R{*JOs:bnRO'_c2&^>Zj_3Rf?S/s:2b#ÿJN2O[{:RbCoO#{# +.Br"O/b.Ύ ;/[bR>RJSoJRRŽn*o:BkR3 3KrnR*Boj+sszJRzoZf".2[__׿VhvNWsf&F^6f'g>f;kr##32*{fRf_7?Rv~?Wi)cvh2oWGVb7rVri)g^VhJƖf֞'ח >of>b2__kcnvnNNR ϟ_/FNZN~{gSk^'RN2z3''jcnv&>>g)RSF.I_&nV()?rH2&&jc)O;kR^JZ'vnJ^&k϶.澆BiׇrN6&:7wg2FrV(:RWiW~vV&iGJV63WbK?j3{f& +J~r>:_럟~N{KrKnow^6"R +_*CŽRBRW2Kn~nw'g6{ +9Wgcv +O)O(>&~Js{wGϏCvb>zoZg瞶^.~__w.^n'S ~~J^Wr^.zf+'g>&[>ן^rΆ^#K7g.^rn&kg gNR +R r3Zb2⇊k+N{Î>>o k> +Z:;gS:;6N3㎾2^7'7gfns3j7?/J6BC;7SSnfO +g7Oj>&f~o +SgC^3&J KC_'*.NZc';~R.~f/W6N?7sbR~v.^&)".&&~g)bN2&gggƺkB_kO{nssΣ*rBbC/?"FFbN2S7'oBRkGs&&^KjGGZzcbN3k7wr*ff^?s_GOrfrFv>/oo_Sr&R"?* +:/3?_CR>kNrs#KKfJ^[ +Cw'2/f;'#3nV[')WSs6v~C7W*c&b_wZB>#K+G +OZ~rۇ?JRn{S'2>fr[GSƆn/wsR2&{[Sw7+:S^~2rÃkò&r>s/.oz{BJs3GO2Z&>[ +?3RcKzJÿn{2~zJz[zr?OR~.2W/{&^K *7i?چ&憆~o_)[Of>.?3s^R +C +KsB3R:Kz[ΎC³_Cۋ."& S'Sn^j'SB.^b&jgS:&^Z>'C_J#? .J;k2?[Rn +R+o_j" +_SjrkÚ3gN;nr#JZofn +2_/[f2's2N/rfS3o&'K/.?[#^:S{"j[SÚzBjZJ/gjZrJKJ" +> ^os :#^zf>cS3zfNbjKf^:S'g²&>rO#3O+ +23oJrR[J+_?k+n>ڋ+SbrR.Rb{csbKj/{~SSbr +osc;K_Ξ^rS;/:nb+ + +B. +O*:zRb+{osb+jOss2{R~>" Z +or+f&Rʋg'.^nRksg#nJ/3'j.N2"j[SS3 +[*ZkJ?3:C;2."Ccok[3.N*{zNrcc*nRbˏ3j ++Rnzs:JZJnK+bk/z.**/+S;"2:..;cKsK/{.N:3c3brbڂ{*/K+Jʋ>Jz:s/& +B'''znfrog_ n^>.N^c?czNrz".k3[?k2 :;zK"rb23sRZ +&s/#n~Rs3o/;K>^B"#N:jB+;k*/{Jz +.k /[ښC;.2c#kkjK +k"3K+jR+ R3j*k;c*r. +3 :* [Zۏk.2J;Ko{ž.nSO# +~fڳO'#rb.n"JOon {nK+k*;ZZ2Oϳ/oJZNb_s3S2rfZ/?s"n. +;SckZ": +j +ﳛCZbB s/j;:rrjc*s{BrJc z#j;;:KKۋ2+:#/:.ksCjNJoC#* +jCJr:n.#+ '_c&>2j#o*R/:r"zG +c[_ʢz# +Rrrf:j_ [JF~g_C'S[soZR+2(6g'G'#.(zOww:J;hh^cgWc&vCG_ +nB+NVV{7WGgs?_zHno?KFV_Y! k)f~v(F2G7gFH7W)G_soK;Vhf"?wI!9y9W_gNh VSO'_3hV6nogGw/:{K_j~'iI79I)舖rbkC'/NH )w'VV~Gw))gg_KF(^ə 3[C{#žVfX 6^c I7[(Fro I)7燇zv^;I)7g3ȸ^Z*jnNξ^6VH~kÿw7i7 +&S3;?r((z)i)W6VvRg_O"vX&/_GG+&&~nK3LJ/"&6(FN./w׷7w'#/S#?S*v?W) W'C>ֈh[RJ&((&n+7w77fNϿ//(8xF.3/gwWV^_gg_g_O#ڎhW׷7W6(^gggOS#nFF枎jsS_v(V^RZ+/'ghfKGi iB'O*((fJ: ?{h(NOo''Fz_w7 ){fVƒ/OgǷg_f(ֶ +s'gG(ȈR[{#3â^f~NG7G7)iWR&NooSo[(8xx6^O'gG7HȈ^o_gg_>^&')wWWW^o/#VV^n 3_)ovh&cgggGWWwF6*soo JKZfv(VF2Ǘ_֖fO?'ggKz6&g7)J&v6fjs'SKh(vfRCg'#2N^F&bz;G_S[6^"GG)K&66B;Ã/333fvvF&Zs/SG))7ʞƶ^Rsۻ#:&f[OG/.F&?_.fFR[[Ko2frkSrvF~Z[Cs7G?Z^F&bJ#s'OogS"n**_7)w&F&2BZK?g'3&vSgw_ +V&??gG_Oˎ&vFZ 3O)iׇ#RvfRZBj?c+2F>?_)iw2v^rJ_gO?g_ֶZ":+s'i)n^6&2zSSK +R>.:;Wcf>ko?/?GGcB&(V&r +{#7i_~v;3#KZ^R*cS3WGfNK_?Cg'fvF^"')i)o;.v&Ύ 3RNrzC)'~f&>rjg'?'k262n[gwZFƞ>nںksSo.r"kSccW)32^^&^>+oO["NV~++G'S[ξr"Bb # knJ[ 'i:~nC//?_s^Ɔ^&&~^&/G7&>ʛ33/c[ +N.r+ϷW7 bN~^"#3/oOo"~">~2G7LJ"n~R[s/;z2>>[SKswGcΎo_/.^&^^.;'_'gO22"rRr2bJ# Zn.n~s7>>rk+c/3 +^^>zR37ǷkR.2R"s nRj;nrSG'/ >j ; o_Sڞ^"2 +sgG'C:2N2ʻOscJ.~>B{rSgO{rjkk{~f&R:.Rk_GsʊZB.k;2"NK>_G_"nŠ/SOS{r&&nڣ2Nr[kJBJb*'bn[ __2~ffBjjZbssz2RR.[c##r~R3Kr#_C +bڋ**oC*f2Rn S'g? +Rr.nRk* +.*;Jo?'N3c3??kb.&rJr>B_3+2nRR;#.ZRbs.#_?Kb..Kc*KS3n&n.:oGgOs;*:.βZ "Z~Bn[#jZn coO>" +.z+'cJR2"f^FfbB&^nG7' cw7GwG2&^26(vf>涶Fvf SgG'g7W )7w? +fֈ(踘xȈHHh(vfGGw)YyI i)7___>8(88x8F^^Nj[og7Wi I!YIiW{R6&>F6hVvFJ {cC{W7G''ƈHȈ~^V3'7WW) IIIIy9 iW7'oj8X X8(&F6s_wi I99IWG{X hV(VVVvfwWIi9Yi)in( Xx(vh(V:3g׉ IyYYYٙ9I 7cKRfV8xxHȸ hvj#K#_Wi Iy!!! )7**^H((ֈhh(VΚۿG7'WiiWGG׷'_{&ƶf&v(h/_W鉉Ww)7ww_OS/#RvVHVf.B^6F~b*KBgWG7wG'C.~N.>Ɔ&>((VVvFSGW 7)'zVhV~"r~f6Vvf~j7W wG'#Kc#>Ȉ(vfHhV>rsG))WW) i)S[:FƆ.6 o''?W)wLJGgsf^^&6(88HvNBw)W)i)G7__g?k((nfvv66f~~FoǗW7Os2r{?ONZn&~+/'wgsS_7חG'sZr>fvr2N&FVVFB_wWiWwwGcK;n&(V6&(ֆ>b_W)i99)7_:{_z.~&&NfffF6f~rkO3CW )_gsnf&Ɔ^NhHVF^N*7W)W)WGgsÿG~FfB2&f&66>C_??ǗWW;2jn~F6v6>+3oCsgw7_?'_[ +2&fF~ Nfƶ^N.GLJWW7gR2J ++*&Fv6fR^fF~~f^C') ii_{j^F^fƆbJB~Ff&"o3SGW)g'/:>^Fv>rB; >ƶ66f~S7wg_'_gWw_/3/cjf[sR.&r#* +#G7WGK;^.J:RrZ:~N~^nJR _ϟ'gkNR:3''[.N~>^^nc/[sOg/RZK[2^F2[ ;oS2nk[kjkc7/++ˋR~~"; +Ooۻjzڎ^^:K: +_c[??σN^.K;#?{rN#scڊ_3SrF6r#ãrbKO_GLJ3۳R" +2n*3CJ&^ZjNƆ^r;/_G'okJ2R¢ +C[rN6R*{3#"kϏ3ob^k/S3{j[o&>^N?''O+o/S["JJ"RS+&>Kr^j{3oJ~n +SO?o3;~&>[33c{ڂ''S3Ss bfZ/~&nBJK#S7GSSSkj*K>n*#3c+bN^&J3_OzNNNۃS* +N^~NZZʣ*[OCs??/kr>NΚK3s:nRnNʺꃿ'_sso/ۛK;n2:* +jcn.JRnJsOos3Sk>nZ:*s/SˊNn{33#>nzCϏs*^nJr2"+j:Jn + C3/S#RNN.2.rnΎK{:.^~ns_G[_SR2{#[+"R&^zSc{2ʣ/ooo'OZ.&>."K+Êr^RR22;O_??;j#SsS3KRR‹{+ڂkr: jڢ.NNBgSb.s3"ff>N;C/rOSO"~fr3c:&n{ Kr{o'__O +OoNZ2Z+*.^kj +2:CG۳/SC#2NNn *.&v((VF"Z/K +S?_GW)i)חWr^^^6vFFFF6V(> wWi )S/gg[vF^>~>.~FV&ffOS g))7OO'_ ʛ?_NN~6.&ff^O/{ +>Nr^'g^J?7矏3gǏ~>(6666fr*nƖKg?7׉i)'O'N#O.^Ǝ3ZbNvvNrZRoGw'wGG[>NNj_7ǿB"/J.Z((&6v.3' g_OGwWς&6N"&c/#2^^b.6f"(F6&?GǷgkSog7ii)fv6(hVz#kjz"R>&^>rZ2B*wW)2^&/gG'J.~>Nbk?7g +>FF?'ggg?c+O:&+S#nfvV(^+c?O/ +Ɔ^.3'w&f6(h&_Ww +?goC//'G'k&&((&:#+FV6& ' iC^2_G7wǟz~z +.(VΚ[:z^&N['7S:+Fv&RWW7G7_c :sB^>fFc?R6Vv~ K3owiGcOjbbG7Ƿg3.2N>2R^~n&vr*/ggb2BvF~n{oogwW;:#R7iIiW'GGBCKRrKF6(v&N. +¾>vۿow G'_gcJZ'G'_S~fNfv.ƞ&6VV(6G?osoO.& #Kc7'OO[+~.R;'7gJ&^Kzn^.~6VF*g_oJ.~;'w/RSJO3Kz&n:b>&.+:~^^.JSgG__Zf&NN;gg?O3z~^ڃ_'{S/Cۊ2NN2RRNf& wWsK.."r2o{+jBffRoo?/[ ʢ:^s3 ++&&"3'?SKsCoK>ff^*gSoOoOϻr+>&c_/sKkBN^bC +r"R^F&BKϳ;n^ +_??O/SZ&.#So/.&?_??[ +B^có{ssCzƆc'g'OJ+JZB&k?SkJ2~o[*3s["JsNJS{z*^&^{sS'/Ϗ/3*j{CR.:cCc/o/".&^~n++gSsˊ>^b˛/sKb>n +/'o * +*^FSJN^&2Sc//R +: +f^RB#O/3#{K*B&~+3//o2R>NZ +SCC3ϳc; +R~ʻc/ˋ.F>nBjoO#SKj:2&RSOcۂ^ZOsS R΂/sS#+"f^sSo[[S/ :B^Bks_cښ"scJJ:;KzBnJ#o3socÃ.*￿3O{[ZN^&^2s>^23 ##:bB_Ob:^&~";j3o/OOOs2.NRڊ/oj2~~.jc; +JjZzC/sR..R+Co_s J&&?CCc.^>CsϳZnNbSj +2rSno'#+2>&&2:*/OC.2*?s"B⺻czZ*2.koOÃJnʢO/ۊf&N[#*O'_O/Rr{3cJB~2o2J{zBB2so +R2rOO[.^&fr+ڂ#gg'/Bn2{[ΎRCS;;Bk+br2Z o?OSr~&ff:C3ϿoO?gg++2R" +{+KBZ##2njJ{ +Ko.+/ +"N&fz ++K333SO_/r&Nr[zkzs3/s껣:JKn^~ +#_~&"Sc3#oo_/NjZ +{r2n^^cscK Krb["k;S?S~rN2Jrš__/3cZ>.BRSoS »;cjbr~^rj*#/_;R^fZ{C/ ;k 'Os>n.n2^&s˻/3//SS3k~zۿgRRNrBrsSSsc {R*3oϏ[[/SsS#:++[s㛻.>~ZO_CBff^3LJgSz&&f~nf6g_'B.n&rss2 +'_ob_Oƶ(V;3k:ξ.ZSiw+ZZN~r7'bJ+roGOv(N&"O˲3) W? FV(nr"/b/_'?_i7hh(^^*Ggk&JjbJ_ScΞ>fB' r3SS?.3Wg^^rN^zSn^>>;/;kˏWw_Skn^&fvڟ?g/*og"C׷(FR?C" +3[RbNNZr&Bor +r/j2;g)iwGZ~&BS^NO3jii)sVFȈRro+*'?wWWg:~6>fRS?ÿSn_O:k/_'bvFffWgo^*ǗחK^^N6FnBښ[Og7'sξF2R?k>j?w'Gj^NھsndzoGGc~f^NF掞>R:>3bGdzzJrjk>n^&_sC[>(kkc^zO3G)i)'~h6ZO_bnzS_gbFNOWwG'3"ƶ^>RRNZSz +Wɉ/^^h8fnJSϏ:";7S/n^.*b.{*"'/S'~&^/B^΂Gg^>&ξ# +bc#''_w&>>v~ +3_3^n?G7''?f6&BNN;r:Njig{>~VFjCB^^rJoWgOGs#hhVVV^rz;s/Jbg7)iW?N.&2S+nb2&^2c'g_zB~R'7g.+?_GgC;+^K_goS'_k:ff^* 2~⻋cWFhV&2'RfNB__7Gg.kcnf^Rrc7W)ÏZbcO2n^r{k7j3fƆŸΎ2j?gGi㋚ƲNNz[b:O#.N +.sg.k["N>.:oi)GWK#Vv^N"r~s/ɹǟ#nV(V(oB C7gSbSC+~b22~F›[s_/C/~>#SV(((_'Iwgg?&6Fn&fr + +ڋ'+þ~(^b[Bzg7W'_&B2fRr6>{g g'.F^&/f^&ogSꏗGGGsb2>FVFvNK77_g7G3?frjz +#s[&f&[SG#B^^nzSc+.n^~bO_CJ6N+Z??)'O&~&^.fFk ?Bhh((n{SS:Zb:jogG'or^62Kf^ffNZSs"'S? __sO(VV[['i_'SvFn'#nR^g/{oWG_>^6vSo#/_ +skr"S.B"+J2r{rn~fNkgg;R^.f(>Zˢi IW'sk~h^k+.n&o/OO3/:[[Z~&2Nn2 +gGoZ>>2bS &6fgG_o jNNs B/Cb#_ϿggsJŠkz&F.N&^66r_Gg׉_>~"jf.n.n&FNBrrWח'cbNNf&jCJ~6F&R:*'_C/Z^F^.&f.[Bg)NB;k+cOc6V2J_g:v"{j#rnk_7'Î2FnjNrf&R'o[Ogg'_OS{:_S2f>N.JrƆnb^fWwknFFFj +ڂ^Vf +:7)'/zf&f2.&^&j_g?z^Kcs (ƾN?S3J{[>&/s_w~W i"RB.Rr>f~NzCۢoo;KOs'b&fFF&.[Rno?Ǘ)7G)WfJ;.&RkO_'&6v&Zr+k~6gG/ZZ//;ZRvhV"_OOgGO?{^~*Cs/z^~/ii R +.fnbS/:SGg/c8HV7wnZ_gwWi).JRVb^ +b Y׎Rh(hxxCy! ɿ_W wO&(ؘhcW鉇)!YiCG3V X/XKro'YYW +fָxhGGJcGj26)R(燗矗fjvH^wvWyIn(V8HV(N?׹)a?nvv`Ȼ^~C s((׷iWǹvƾF"{'Z iII#r68x`i !ھK2s VvȶNCljw :V2V&V?3"s932/f&/돉^&r6Sz*NoW3gI黾3+VhFK&i) r'6F6^'¿yCww^n((b +.Ggb+g&z z/ 3^B''?gKwG W^:(hvR~)/)ٙWcV6ֶ[:^K^ W Wfh^~&S2ƞ'~[WRWWÊ +6Rg&WRfj&(zG_IW#G)b:gRFV&V/G)i3sBVh(8Vf&ɉO 7W2&r2f^_'Rϳf˲("^)7r//f6oG{ _ HxX&{SsY)iKG6&V2^Oii7WR87w2Ook/7Ώlj>#h(Vvbg'.IzcRF6ȸv^GI!yWsj~6hȶ6o[?:bOSBb^Z?G&NJCRRNFon'WWiN +n6O{;wWGi ).*NkVX>FBS G';r.8>VV>2'Gg'O?RF;&/GGI'Ff¾+>oCg:'I)kF(hf? !IGonRN&ff>o_ I3f~.vFF3i/''?v~S[g W__ˣF(Ȗ^6sCbsoc3(&8~J+zs+I Wsc6&nHHH>) iɉ_Ff(ێ#fZnosO_λ (+N^&o7WG{~N^&ig)OOnh8h&Ɔk" IwW)kN((v&66R(>3WIi)B➖V^V>6cgg{n+~{S_wWO&v_Nw 9 2fH(29I))7 i.Nh~VV'gIϿvh&C뾾.b3G'G6V~r^?)WG w';^x_sk{I_ꣾ88Ɔ2gi.&FF?7)i_kfhFnc.g.#/S#36^ +SS*F*_o7WI)&8Vff g')W'>^žF 7g:&Fh(FFfFN+J_i9i(6NƾsW; +&Nv(F悎j/kg7?7'_o((hFRJr*iw 'nVHVhvsG7w'wg~&VVFR."3gkJ^n&f.#SGgoGG.6hֶNn{ _ڋ"vȈHv&'OiW?_'_)73>6VV6G_)g^nF(fVC_sBOC/^&^'r/ 37C/_BCrNf&6~S>^jowOO7_)7((^wwgig&V&ZFf#_w))rKV.K/:/+???s&Ɩ~Wg_SfhȾsú;_SO__˺NV6hFs{w)''>6Ɩ6*GGjC~^Kr7j:ڎrCz/Z3rf +_k_''ZfVnN'w26n~.(w/'_ʢΎ^.S_ )w3"nn^&Fw'/;r +&&NNoS?s[S[f&f˻:?w +^^hFhFǏ_W'&++jBb +K.v'[kbֆ&RccRsrbj>c?_oRhFVÚjo??w_:R~(VV~*g?wg+Rv2b*{rF~#'N+j;{ogÞ^Z{K^R +3n+J'3rG)fN(S'w?'/Scn&;R>f&.nFC2.K[WCs3r +^f"^r;B2'SOz +2^oꟷ/CborֶjS['#_GOO_ǟ?N6h&/)i)w_n8(r>_SfVNS#Z72{. Os +OKW_{2G2~r掿knf^ffFNiNOw9'FVV#(W9)g?Snv?g 2^碎8W [2f_&6 FvogW)K/&hH/IIYy'_ H?wiyIWW2.F H&wiHJ3h2 9)f`X^)9W3))h NSϗIYyGS)ڸFi'wֈ8w IWZr v;wOW(H `V^r)i 7WN6Xklji)i.kX+)_zx`.3˿`i'W)ǟx8ֆB[:7_s'WwcgO^0.i!II)n `Hnc'GS˻ؘS.'s?(i+ 8WGYGח'[f(" W)׉_H +W?.:b8HjW' wSoKJ(88n)wgsH8i)g'G& hOG:oC_'?H[II)ۢ{h `RiO6(x&ggg__hȆ/)oo燗F>/Co_ +VX(giI 7'x@ (G Ii);VV>gRn2'*&xV.[wKhg)wi'gVVw)ǗsH"G''7(j~fs2H` &;i9WiWx((h(^))7fZ'3?vXHf) )['ǛX 7)igsS +h8Vv~3G)wiwJ&6>rc)φr2w חo[Xf:_)9Ii+xVhgWh8fZooók3wOF(^~.sGwoR +g WiWWxxH7G I6^Z'sk~/(ƾiɉ+'{V88HJK?[o'W6h(F&*?gWg99)h(&z;w&_W.N ȶBWWWGhVv(&^‚kz +iwRn>."OkiwrG'J#7(ȈKw ^H8V>g9I.RڋBrhfr^. IGN7v(((&c*I_F.G)W':~Ɔ6VN†kG?J~6f2gɉG26BVfg'_7_397FK ׇ&z3OS_V^o_/(FB)S⳷7'Kh(h>'_Gsn:hf?_*Wi)#2~F _jZfF>'ii)Brgg+( 8C? ɉn6ff:b2o_szfF6RS_"#_3[>. +7zF.[O?) c&hhh(vF"R;Ii_#:z#?sƶrnFc׉i_k +zr(o_ +.s7&frkc*sW)wBV(62FV6/[zbS)9I?{+/k~xV^+W'o3iw_J2^[B?G[{:&GG>?j&(BjKWkWw۾^(f6R +'W˲"o/ֶFFN&~2s7W''i?+^vFR 3RNoW:R&NJ#w[ۚF&R#/2csG)iWOrN ^ظ(j7_{j&&OOOO7/jro'JRۋB^fgWo*2Ow_+(Vf g ?Szv& RZO'_gS?nk^2¾Nr.BJ)?BJ~xH(63J" _?;⎲ +*Ok*z_:czc&sCcnf^c;^2CW72&c/➶FF__SiI7ovvFFF^'_ggs/&&rNFf6. _W G:cg_vhF&ONg7gR&&RZ:Z3~'/3ONnZ ++r~J7wKboﺾhVֶ;/*r/Wɉw_bN"B>f(zO_'_j&ZK†rOw)bRb[g6FvF"3/BW)7bF^Nn+^_)gg?S'&(6F(vF~i9S/OVbR~.k7)  +:.n.RϏr"rkR2.[SsR^ʏiGzB~2B6hhHV~og?w) /r>>n* o//NCB(&)#C;O{>f^N/3*B*.^&[ϏNƾ??#/OboS{&FFBnβJw9s;SbvVV>N&Ώi2 .ʛ"{g?; +CgOck2+r(vV^3z> +O?kn^fR*G)'iI n:Z6fS+3KG+ž~^666niWiW{~^B?&›f^~gG[*23ׇ7O{SRR.z~fO/ˊ"&VVV'׷7W)wO2.Nf~>Z N^>(hNڃ7k' O'GΈs#&ƛ8&Vȶh(z yI ךʊ.ϗG?v +Wϖ(''VVn{6(—9[cZƺgr. +Sf+gh[; +vhNN&KG/W +S"_I(.o^&rC:r~ֶ>ח[G7)w/~+&i_n)/^Fvk^h^:h(GiI'[o[6v"?6#g7^bKBk(F(?iO&)GW +cB766F(f2"ii?'>3iB/VN(b7KsGWV^((_3SG3>BC"G^#V^_Zf(rik^ZGgʲNNwwSSRv_wN^&B3v&r^.V((V'iG?7 nbSwO.J3C⺇VzG2*FfOr:IO#O^&^&NVC#i+NCFk~~:I_^G")_S/2RV*2Fn +fZBniGGk2;O'~w_rN:S2^Gg6FNnjF+ S*/7W#_R˿r_6brk^rz>F׹)#Z/O2) +RS>g_s'vJ.f()?¿7'no)j? n^H6^^Jv9Cr& +6ւZ3 ζ& 'S+7" +f&v)c_gS&n7ik>ZcCkhCrNrf +&6N gSgO'&7W.^C;nnOG +>k&n)YB'_6(7o3N~.f(~>j>6&F&FW7OS'g_[fV )׏_{cOf2BZRff87s'oCs&&/'~r2f&^^G''?s7bC'g_:^~; 2Ɔ(W'/jjcnVCGGW_j>ZGCjr^6ƞ8xv{J?og?f:S*_s"2'_)2nn:r(w_#.ʂ3oN/糢R΢z&'33J>fVS_G_G?/_ojb'~_s;bnR^F3''O{ +&'_OJR3V. +Kˊ&(xHf*S_ig^f +3/3gr~[Gs+NF&rN[Ͽˣz^6⏿_O_s3F(#3gG_{f~HxhnϏ);N#J7_CszgK?"N^B+.c({cB΂_ǣnn?_/S?_Fv#3OgRnv^^bZ+;*GO暃# 釻//ËzOvV&K:;K^7_*R;O'[frr+J'j^;>h6^bzK?'W{3_oSB^7~*B +2O2vo/^3{:2g*g'g'OgsF^b K +B.rf'W'Ko/'jZ_'s.f&ʊV^6 +>G?*ooS7š*zjZ_;r"&Jw_jk/K#3_[b&b"F&&^f_'Cg3'?j>R3o*:JJOgsZێ6f2ZnRJ:''OwOg?k3[R>&ff?/.&nsG7?oorZb"#g'R^^VnZfS"c/GJ'gg'o'+:n6^r#Z~f#j#g__?nc +;'{^&"(66&>Sb*Rw&gg__B~ fjBrۻk +kOg_Z#*B~R +s3GG"^.fn +2&2&B3')"ڳS?O/J?s^&f6zs#*/C.kSsgw7/r"rR^Rfv"/NBŽ&2gǗGNN +So þfFfv^"^ n2"nR{_?wJ&k)Gs"S "CZrZo* rN6f+#wbrK3*㏏*{{Bfhn^*[b+Z'wGSssJ6'ח&v(h6oG'ʲ&+ig3gg;rC/b.nf^~&./ھ^&֞2.gGg?C";o׷7/O_ +*s"NX HSg.NB*2n#Kwb2R?S3WW3C&//)WGO'nv(V.bn&&8V((f[s#oc.*3 +i)׉Ii9WgW(H Fh~6VF^WWI '[3{~/g¢G_7_ʞvƶ3âz/s2n"F.+FFFf^f ROw7gooSBi)gg~f(~~ + +j"&(hFb"JZr+?G[ڟg'.*&h6v{KFfBZO_/i) +㊞f;/gG'g33/Ƃ +:+*.FR(v6(VNo2b7_G {SS/#oB>_Og_So3F^&W*.rf~2^H(f(VNZJz +og3OחwZ)))w__bn6VV(ȈV>NV7W׷_'WWSC'/7z?*N.2 "/Kn^N{6g gO"b.*Bn +&N[{c^?CgwwGOK72>>>zk.F&RK{c_wNor/Gg_zRNv&f&Ά&"+G7_/#NKjccB>^Fn cKS~nSgǟ.''On+S +.nF C/zƶbBF()w?3_ǗgFV*~&>r^2ˏog/^>J{ +&V^SǿkrS{z2΢R>"SGS3[^s3 +r2>~j_+n'^6Bg +&.Cz~N~gj>~2&^2{fw')w#[:.nJ&Nb"~fN3{ O Zb".z ++r>/''_os_g[*Kb*.^&n6N&f.7O:n;OOZ""NC jJbR.+cco7SzSO/R^΂SOKO2^*cRn +J^FR&>RjSG3_w_G_33BK;~^2jnN^[.Zocn:B> +c'Og3 +./Ozkfr^j3ǟRo/.RN&ڢsB?;K/;B2br2 g_/ * +c/S.&nnv6R&>c{w_77r^k¾fFNRsbC+kJK/22:r:ۏOW)[j..?S2~.~Ff>_r~ÿλ>S_**;/sr΢ +r^f#b+/3:zB..~ʻJf^&j__G7GCs___*&b;:Ff^f:KK/Sjkzb*{;O_R.r +nN2C +Sg'˺*c/3ڃ3Fv:ǷO{SOo?:2Jf2r bSC:zJ+;緇~~^~k COo+ϟo*/n~&Ff>[/'7;3O_[b^^&Rk +z{cʢn2nrbzZcWn*[sc?ZNj>6VV(V&NJ+__o[OO& +*~Ff>O7[ڻ*"R2럷Ggof +KRRSgS22 o3C2NJֆ~3O/? +3/Bvk.K/ 3oG7* +~J:n /n.o*ۋ&(&ΚS'O? jƞ+?OZrBR~^N2bos:n&*ˋ:.RS +bۏ:Rv&"r/?[jo'G'/jbVVBkSOo {.>:__'GK:>n~>gkg/Bj~>FRo__?O:fJj+s_C +n&[/_cJbbzz#3j".&~#Ͽ :j[;6Rʛ [Ss3 +3?/oˋok&Fn Sk.^n7_'o^&> [osoc"j>Vs'G7'[B +¾N^&~~ +C˺"b~fC_gLJRNr2./+jr˳_jzFF6F2 3/ScgSC">FfNRz3C##rR{g77GG_Nf&&> [Ë/ +[So3{r^F^rg_G;SGoSOr f^bNV6h_i))iW_g_soNr* +2Z.Vh(kJgÞ~{wG׷2N"?S'3ûK׷'s2^8Ȗ2'z&n{G g#fVVo'g?3o?w_>No>ϟ +.Nf^2ζ8>_Yى"& +&ocbJ33/RNGGorhHh>O_g))c_sNFvVvn[B.fvw){>C Iik>V66VV)ii)G^[ 7>>.rScWgSnFRZ>^f/"zK#z"FhHh^KG7O~6&k7?Zn2K:2R/ +~興V_kS))7's>(o'/ .痷fj_OSO#.ΞH6cח_^fkf2ڛSz^K#K.׉97&Vh.#n&ff&Bkfs33;nf>) IW7OH:J>B +r&f&v^wW{fֆn"*#'wi9g_zj2S?_O&ֆbwG^ֈhRzkGGoVkWgs:^vv7_KR&ξn)iiׇf>2*Zv^Z[ j ((&sGgɉw?+~N.22 ++C f_w9yi^f2bRb +[G7Fv&Fhֶk+vhVGR>j.23') )R{W i*o?OHʺ +"^vvV(fc 9iG?O:&;3 +b{r>/2r3))7'/sWGsN&hh&K^NR^&s) icF>*N^掏WiiW'>ζ~{)W'k&R B(v"jº?_Jnr*ׇN+3VVV  n^2(:s')R6hj +_/^&^F".2Cg_[/g/FfFfCz"r~~J#sI )7+ + +(62Sw7sonv֞/sbN."F6&zJsKgW+*3O )jBN +ʾv.Z{r~f2#'wIiʆVֆ&^ocK F6F&2[oog''_&~.Rg'/>^~rڃgOoZ^v~2SOO'G'&&Ɩ&[gSz //s'*N^{sS[JÇ7_/[;z*ǿ3jrNf66>.{O?o3 >~~J__wsׇ/b>f&β~"RNf&&{)oG'[z.&^CB.Bnv&F./gG {*R:+~>&'SozR{LJ?r^NS?.#j.F(F&^{_?b"oCj O??ggj2ËΞ.B#K+K+~6&NRi//3GG2nNn[[>~~6VF;O_?KbڏwZnJ /O'''oʆV_K:..2_"R;j.Z_'z^.j +.[oS ۳*S__* 3:Ossžf~&;/ +rN.'W7go# +s_BڻcK3Ojf.n.n^6NO[*+_/ +:# K/S3;ZfBSK{#&n(Vƞ"'S/?3B)חwϢ&>Jv^~2roBk;J;:z/cc3ZcC/Ͽs#KJ6(F777R^nˋ*>΢*F>_{N_'oc+zj{/C":zkڃ_OoOOs#kr&h(fRo'bn&KWg_[~j.f&^"Jn.BbgO +S?;[/R K*CS/On(HHhF>n +3g?wr&N⏟C#?{&{7ok.ff΂o{# B.R.jk"ʋ3'wJ.(hfƂ'Gg'^N#g77g/NR&&~N"so3Rrzʂ*S3jNZrz/gwr[_?[fVNbO7חg'gsKf:/:KkNƶ +gLJ&^nO?痗So*2Z"^f&3c;JJ" _7'>&V((v&"'g':"KkS'c{>>fFV3'Ǐkff&f~rko_۲Z +K{?g_/J*3o+V(((&o/G_N&^+?SnRrN2χ_#kr^6.ww*z6F&n*3;:g'ۆ(V6+;__K#S_Rf6fƾ:gG'Z2nVFr+{_72kKko'* +22.JBN~+OOS3o/33ânR>'c2.rRkk 꺢ff~'WϿBf^~r[?:K+o*Ζ(VrξZ;3;3OoW7?CSv(^"/g_痗nH(2+r"{'WG+Ύ((&j ; GWg'BfF +憺{W7G7(h;_k/s.>jGOjCs3# +Bs"F&n +B__oo&^F^&JKWg?"h8BS7_SgZ6((zo' i)׏{oOnhhF*j/'InbKr^fF._'7J +((~sK+ _GJ*j' #"Sbr&o[.:ssf((N; +&~jrB?G_?G':.S6vnwOCo7&^6fnFfB +*og?CoJ"nfR>swiN.z6z+ c3wgO;6~RR.jZ~~SLJ3Ss/zJBZ{N~sg_;{j.BB3[j+//Ko_~6f^~#cS f'GG[s/ /R>r [S?"b~B2fRr3GsS:>ΞNN~R#χWiw"B ˊ֖FJ/__o f^&2[S3{BN>^nbzRfF.3?g :K/SBn&BJZ2rK_:jc/f&ڻ? b'?3sN^N> _/+:b"&fNZ /7[>^Rrrn.^>/_wgS3c66[/gn&FFf^>[+חϋ3>FnN*."#o?+zڊ˺c#?OsV(ֆ.;oSOKo.f.."s"ʛ'/Ss{&n.r/7g:J&nb{ +BRfk*oc&ƖR#k_G¾>>b&/S_SO[*^&n^GkKoS;+^^"Z":ogLJ??n6FFKj +og7wǏk"^f^k{:":O'_~ff&~Z+S?:r?Z..Osc/'wwfF.B+C;?w"nN&RNn3OgwG''_cKf6&^.3G7#Co &VF~:gLJ_(&3ʞ~*73r>ZRN&ƆnR ++Z'7W'/z~6N{SS2+#{c_Ofr#?og_Ͽ?#[fok?RRzK"Kz.NB*ccg'SK^F&R{o77[ +N("[?O_'Ƿ+f&&z*BK/g'oo~fFfnrroWgˋvVvz/o'_'s;ovV'Co#__N" +Zr >BK.ok ^^^3 .3w?SZ˻6'gc*6V&N/_g'{ +^ +r>RR*b'OS_+^v6FF.no_7iZn~^h./GGΞ6kS_O/ck*/r~^NZ*~BG'sj2N^~º2_׷?; +.F^';*~K2{K;3oǗg; ~N"rr"+*R/kS{g/ >6&&RCiwob.^6(N2o__O_{*rN^r>n~NRZGg_OKzjkʞf>FSGC Nf~~fJ___GϳF^Kc3oK2Rc +23j~>. +Ï'OJZn 3s*jn+k['.NFN>N~?)Ǐ'b^vf~n Ïs3j[Kk:+2~n~~J{'sO'3/zB>>/S+BFF^CgG.N.JN&rKojk ++:>s  +B[//__sC +>zS2Z&&NRR~~{'W_[/c:r^ +JCOZnbKnN&~ksS/#_ RBSCR^f~/Ggg_SC:2rN.>~FNb{_g'''jZ>~." +"Z>bW/ s +J.v(f&b/''_C/F^g?~&BJ~6__#GΎ2"C_ssCFn22OzK{ǿ?'"BbnB2);8(_?O?2(88*ÇWii)7 S^H2:{w'Fh6>_/GooZHV(wWwgW"H__GGcVXH3W7 wǾ~v6B'W ֘ 8hJWwGOgN8(6+_wggVhhi WIWJO`ظΟWI)YIvH*_iG_ ڈ8ȸH{) 7_/fH;)W9iW_i)Vh(g777k(h))IIv((6χW')sV XVi_o7o8hwW)׷7g+h(gWiyϣb68 xƾo3?gw)I9w +B(> V2_#xH86"GWY7ZF8w)) G'W(HxhF[Gǹ)jNRֈV?)G #hXXHvOGiW7JV(xxHK +GwisVxS yg?O 6V(Hh&r/Ǘi㊆6V)W'[Bh86N#GiW6./ ɗii^hx I_Oɳb(v"B jIyO/v^ +r_Ǘo3Ϸi.v[g? O^VH(vKw9/^VȶiIIigw.8γ3z+CW iwov?)Gg'3+KfVb_KWg' ~xhv7LJOiyI?2xVn7)חI9ZH8#N.I &v^wwggrk6(VVÏǷ__&(Hxvs?i O>xwWIg'GkFh8xhF^IWGǚ(:?'s)W[cN6~^N+.ן?H8s'G_WIgGhvi!9x Xx{º7g7G&2'/ _j(v(6N'G'O/F('_ ii3&vH*?YYٹvHΞ''R6RGg_3ɉwv((j_iw_ >HH{s׉Srf((62b.i iG/R(x(r2j_?_S:>F67o'G)W^vH(h^IOo.hv&o )7hVniIIɹ)ff((^n~* +B[+f.*gWW)7OfhO 9cH8W_BFffR&cWɹΆֆ +NJ?_??v({3G) ɉGH&osi)W?Vhh(vRr" w_BFV>:rjg' I_RvJS^fBn +j[.FV6~'7iIח(X H_99 wKֈֆ>6cWi[&&n{bJSgs2&fֶb3o??sgJ&V8xhKJWII9I/26X~cKg7W)dz(²Wwg3V[3"gi/:ƶoJ.>㳣NV^ +W I98X; 99yigKF(6&_7W?SZ**jb'?/j6/s3"ƈx8hvFi9 ) +h8?7iW#¾VR7w.6h&.*SSgǗ_B֖*s+N~"[_?2bfVVr2W?#x(62*_WiɹIɷoshxh((vz7)G~FBOScok6>zg/gggc&>cW9IzFfZgii_OrV"W'K&VV&>_i))WsvRzkK?gg_/f(f2 /__7Ǐ_^&>.sggIW~(VV6Vv37iW;6Fn&LJ/&6v ''_G'#zx8v6ig^~F66)))_r&.>&f^n'3Rff~jSgwsvhv;k +7__/~Vff:cc'_{ƶN;C{J:#GWi wSVƶ(gwGnf>^f_Gw&nr2C'?')i7^Hx(vZ*Wi)WWjf:^n {rn~nzcCVV^2ZJ/'ׇw&Vjr?w ggZ8^f3)Wn^8rˇ7Kg gWh.*^Rhki>iG+> v'h)Z&RWW6J)Yv>h/s{WCW9i^g'`Rf/Vi/OW{Ȉkviz{W + +VV!_.I9WIkh6ظiZv^9Ik rg&77n7w>kRY>2iFhNöWk7h rWg()I#fI)^oٺh֏+)^Xo36&i;6NWO9 ~2S FxWfW ?^ȲIyjr?') +Hh2VXȟi;n )a)/fظ7V/i)o>x8*6^&~w&'GV^9GBhǹgF&ɗf{h(7{ISB[niayn2~HXfvFa׉ghFVF2) r>iO/n H?&(舶zj2W>2)2sXoWa>~SFxVVhv:ya9S6X o nWig FCo +nfr+WwVGKV3&_w7r(V9wRhV3'3'f.h6&i!rzHhiϹro26WÿgnxxrW?(8gFkVf "#6(B^(!a#;(h[#xgW k~.ORcvWG#bχR)ƈV)kc(fOgWO>WIov +hV2^ZJaۚ˺+nvH+I))W3[/S戈?&C*h8Wλ'GJS)C8^ãf')wJS Ns&F^JB)&jn?okȘW) 'vx)W{WI'kH?bGowGC('RfOr.o7Ii(&kc&~/KK 36RnF G.Xj7W *nf^HB^SwLJ_n RۂRkswiWv.gf*F憎^s.s8./7kN"#cWɗkfÈX(3vW7_'GOvh3FZgwi!y/fKVfRW GZ +&fN[V[C.>w*h)g))V&HR'WwoʟwjHf&β_!W6^/^ +fI)2z~2;z~fvr)r^_i'2"f>s)gFhKWΞv&gG&;JsW_:_fH&[Nvfs:?93V>N^Άwi2' +#K.&'iS7_n6jGG)_(:'BVFǗ)Gr^׎Fc6V~ 3i'*#nRj&Gه~n*()'"/OZ>f&.N())+^n7/Fv{7g(&s"f/K'.j*NnfVf +. )rSKKc.VwG2#N2^vhWKg7N&Nȶ?Vo׉GF_&>^nRz?~3R +B/枃?fG 36J3ks;igo*hrW?&R7k³:wK)7._z((.rwoׇ.+rF# W~vn#ʟ~k)iS{Rb#Of_g&k6H#&i og_fVFF^g:nGi3KNǛF?.ƞN;> +WIws j:v>hVG燇k(ho΂_)w?^^n2_.r+K2b{g&6^2bsn)bj"RF.S/ +r&^jv8(Ni7Gw/nO&^S'V:?/'j6^ +fvFrRoiIos3&^;_'_o'.:?h>F& +7n_+2>>3kvV"Z +?W~/Z>f.^&?ɗOOGG;h>Crk.C2Vz.c')7#SwGN?s&(O&Z'3bzGs37w6F2NNζ^:C׷gۋgO~bFSw)Ws/#R3Ͼhh6Z;gWr憞;/*S'Z6v2 &7'I.KB6Fn.vs7_wKFB'gknc&Oۆh[KW_W+^.FV+ Ǻf.;/WsFbnF:^.?'k:^^6)cC_cghvz[g/w)'Rn +k&#[*F/' gnβ˻^W +K{?G^"N:.#.^s3NFF Sj¿/gׇ*~&.fC"oZ3c^&kS.oG[Nj +f:NFkGOjS[fz/f#/ n+'GwʂgR*os^Vh^fOCW2"#k_cNn+Rs~Fz_{wi7Jr#7osc_f[ Bk'#nγBoZ3'nGfVv/S)3&^f&VFSSjGG; +nZ_w_>K~ _b~'_S'G &^H':Oo.^ 2FFff +s3&6R .3B;+_G7n^f~j)w.v(h^c[onV2RS>'?#iG'gGO#.^^^/ϟۚ"HV~S/^(FF'7W)KOwO;/GOgRB +;[FVfJR/&΂Nc'>R&G )J_g_/J_2sgn^~>f6Z/;R&v^2㇉SOocj~{SFfBb2'J^^>:/sˊ:FN>z»+sǟJo".⢇rrNJZ^R:ccJr?O'GJo~n.2_'g>c"&/_W'BR++>sSjZ2c_/벎Nn2&n./ggN __)W{3o*r k^~.fF>^.N[;'?rS3 r22[C22>Ƣ">&r"2Kbs2f΂+??o{N&: 77ׇnfb??_ZN~.N J&.^^ZKO__ZRgW3;?S_rf~f6 +_>6ff^N*NÏS{SG7#~;gg{n6nkoKV~^r:;O?G77SZ'G{f +R>?Sc2f>fr#/^&B3 +3#gw7_F+_sSG_>Fn> +nڃ:z*j;"^bZ›'s_Gg'/+Rڲ +C{;c.>F6F^RjSzr^*Jc+Kbr3'gg +/_'_oSs2B&N +ZZ2Bsr"&fNnJoO)Wc>f~S?>_Go.z~R"3F>>."3_O)'k~^?GR.fN>oSw7soKC +Og_j"..+:/~3'..^Jjks?Wsz&&NRr[?sR~k#/G'R zNrz"k'sBrr~&.n+33#'J+ RKZ2~+ggZ ++2ssK*^>zS//sNR3Sǟo+.ۚ+/j&n/'S///c k~^r.g^Nnf JbZ#Og{b&~frCksg'/^{_O# +r"z;o__Z"ksCN~r2:3OWǣrznnJsۛNs :'?on.Soz.ZSSCz&^f/??oz: +3S/+cÇ_z N^.z*JK~*.s?Og{jkB~&RrzffN[c_gڞ#oO:2 +~R#oz2j>RkO__'oKf^^k33#_'S;^**__O&cJz{#"KCo/+:"rR^Nn.[?GOck;g?O +>^r¢3g^>bb>NS;σ +Bښ:jj#zJzf~"gO3#.CkkCCrzsK+C#oO{coJRf&2NN:OC +co; BJj;oS2 :SO.JڋsB2^rjB2zbrrNRN7o&f&b*~^b+ +K/g3NrR^ +##c2&^>bs[++o''BJ*rNn.2kZc?Cjk2&Zg? .&^s?oKZB>&>R ?+ckR3[û +">^~?K"ξN>"2K[; jZ.f*r_'g'C"Z3s?.^f^~c3.nc 3Cobn22z"Nf^ogwg/J6^RR+CKCCBNs{;__;K:2㳳S?*S[ +bn;ww~Fcj*2ZnBs'O/bNf.n/O:>6nK{SCS⚂";__2bNB~.b{'''jz&^:cS/Ss2zr:#3/C~&fr"SsS/*nsƆz oˊz>z:S'Kr"2Nr.B c*f^rJ*ogw_Gk^6;˂R+2k'o:frk3O__;+k +^JGCRڂj /cSGwNv66~bow?;CO#OSJNN^~>r.fV~rSgwOWWKʲ&;{{ZN.RffR?O{3o)wSJ"f~ξ(F^n>r63SOi i)go/#ˋ: [2fȘֆ&2ƖF^^&? ɹ9 77'/K>f6hh(v~2.z^f>.j/G)iG'?ooG_O^VVF2Ck^V^;)iw'_w))gvvvV(hV>N~^vj3gGwiWwg_gosRVv^>~^r&BZNr +#'gG'/g_'g_2b6(vvV^>2"JJ"[n2bg7wiGG''+nrfrK#zV(V^~.R2s{ +&' I9w7gg糢>Rn6V(F>r2J"~>^N;G i)7znRsk3?rRچ6n:*J#o3#nƖfFKǷ??_K.N" r>b*R^fFFF>.22.__s{['gjnnbr.rs/o;>R~~N2nB/_3{j +kc/Û{zzz+B sc.k{zb&Fg_3sO/_[Cs[Jj*oZf6&r2&ŠC"ˏSSG_so222.~nj 2:c#jbrBBJCOg/+2RR*S?_:N>nBBo&6n+s_'c?g'?s3[S:z;CC{"zVF2.2JJJkOG__gggO.R"^>&*+b2.R2coúR +_SC/ B.2jzkjNN&.ڊS'g2Z#ﳻ {{2>N&CˢJbRS/So'_sKojb"fFf&&r+2bZogw))BkRnBßOʃ [*&.z +*;b~j2n~2O//3O/rJB:^^^&+s3/ S__3O'g'_'/oS2".^~F^b:z3#B2RS?Ͽ_à n>2Nz /jNzn*c;sf*S?3 ;[S +k+3o?B^&&~~>~ +j#?Gg[ *Jj#{*kKK..N^~ZCo{"nN2:kSw73/kR2*;bB:kK2ڲrb bójs;b.:# +B^??O?^c/sKnFzzʻ S[O#[c znC[ꚢƾkcC_{ +&[oOJnr>*GG'OSS+zkRn>RsO?:^^R::j:#;K3K/:ZKo^f~/___skk""" +' +3#KBJ2b ++[[k2J㏏ #J&z:3+R":_7Z + ~^R +Zr"#3cNz's;*jRbKOϏ'_>.&" +ƞ{'_CjšS_3 +jb&>f2K*C z~J 7B + +.Rk*SkRJó:&n~6Nk/s?SJ3K[?C[[:rzJ[#;.NN^^&N;g' +~JsS 3#/jSJZbzzN2B2:s/#+*c#[JnNbsOco3.fJ2.Os"3#ϳsÃS//;Krfnrz*OOgwg_[ +b^JJ+#S#"ΞNr + +z+2z.*+s'okC"Rz;3;#"Jf^rgϏs*ϛz +S/K;Kj#+>rχg'g[3csoo[rBr.~zj>b{:*:"j/ۺ o ck:R7G'C+jK6vf~R+Bs/3B[:SCos+s/s{Cc: +*n^2Z+?'_?:Zk;_?cʚZ>>ڛ[n/c:ks_G3*;s+ZR~Z:*2Js{;3/;^f^f^~:??O sS;{?_s[cj2"J[z&^.B~Fvvs/O'_o["B*SO3:kK掂3{k_?s#oc*+Z>&Zz'O{*"&&^&>nCokJZr; 3_oCsok#Ξn&&F&3C/grzf^~b +z +2rk۟3ZN{?7+JJnNB^ocsoornR" +RSs/cJn2R>k3sBroOo{"j"rb.{cOg?Jcf(Vf.n2BCח)W?ﻋ#s7jhV&^^:3 +[#JCRzrg'3_g/+&&"Jb"/˾.>2B'g +c'.'C"B_G'ss_Ξrn/NNv(Vv2:Cg/Ksgw7R&*#K~N.BO3"_g#>^>R^&JGO2{o?Kg_3&&B[o?B; "&?Ǘw#N>2N&ƾgOc3/s+.nS>N&f~n*S?srrJ## /'k&FFFn ZRf澲[O{o_gG/7_:rrB^RJJrKOSZR2R+w rN&B{  n^>N>.^k;Zb;_"b^'o SOOojN&{ßg'/SϏk>&Šr^cO"S3ꏷG[fv֖jk*J^/o7_cCZ{f2:r>ƾ"_'G{*rnb*;R:'_gn^&F{?gG32^s*ZB;.#N:gg/c:z.R"rrnB2Bko'gK+^o7G_Ά>.[RzN>RZ;g珃/Z3OS㏟ C;[o.nzK[{;22>^NR.3r>^fNg__G +2b+soSs+bN&>"?_'/j.nN~NjR."n~>r"Zr2*+" +»gg/.N_C2~^&^Zg^n.~#""{Jk3jj."{c/+{J^;oC2 +o?_Jz~n>nS?ZNN&R#3g_?z..N.>R>2{3C3[*/K C'oR^Ng/J22f6F3kRFr?.N^n+7So''{z2; jrZ +B"B:2nrzo_KR6f~o?'O :z2~c7wSڲrN.n#sZ&f>>^>R3KcKs{33Nf^rk;o{nO/Gw"fc'fFfRo:j~>k:z+: _S ++ck[?[ +#zNFgS r&f>.+oGR>*{j{KRNrOg77ۋKK+{NrR>Rz;C" B2RnzJG7_vRSg# KˏOjsO.N&{Ogg_?C+nJ + +{[sZ[/Kv^r[SzJn;C'N&^&c_/N^~Rr+oc/oZNfB>N:ZKc;BR +bjKs/oO3:n&'G_Zξ~Z:ÿ +¾fvk''_ bj/{#;^^Z/_3j;^&nbO'_CR&F^J*C{R~>B{/oO?gk:ۣ2b~n'oS** ꋳ[:;s:>ƶ&*[KK +bC'?C?K&NrRj;.k[:scC3 >Ncsnrz/ +3/_{:*沊c/[/S Rn^&*2" +:Bc"^>RRbC*r 2:SSc +:gjRzK*f&Ί*3o[KbfrZ.'SsrBbj{#/n?''3{So_3 R"ŠNz+Z;/C +r^~s_[:ZjZR[z{+*o/3s#3'Os*.#J";kcú2.>2"O?c#{{#3*rNn"b +Js +SsSbr..#So{;#;zR.nRZ[so*o33#jNk#O__?S#jsKJ2>F^B;kzS3?n>Rs'_;:*J#;KsKr.rz/ +b+/jNNk:j:ʛ{jJ;ggj2&Ff:'G_c;CK3ʻ:nR늢[/jBKOcO/Kr^Rr2:k*ZKS/kjʞ&R:+_?*jkBr+~&r"J{332JCSo3+£__OSK&[33:ZC Z.Fk ڋs_'/B.>.£;k3;JS# +j# KK*+6Ff&b*+3ss3{3sϟˢʛڂ2KsOg?/+6&F^Fn*n> +#ogGw"fF&_{c7g3 i;nf(hg/[V(hV2sOC)&V(V.J7g I>FV/>Ǝ;'oW)W2V(r/+o'w__^Ff^S_׉*(VV((vbR'7)i_~hJwiI3:6VK2c?'ǗG )kS*F&V:ڞ>.'7)'. 6Ȉff&³'W9hkš 'Gg7wcbkc +f&66>f+w{+&nf^KJ/_3GiWg[N(~NSGWigj.*" +2Fʚ2g)sO.hV^~^~ 3o3CWg#SK:~S_Si)GKKf~Vv>"b{* +ggoO3&&b^2KϏ_ ).Ύb +O?{o:vnn. {_[{Kr^&.~f~zi_g :n^FNN&Zrg?C#?cS^^Άr{ZWb3B:&NrRB:rS7w>Ɩ66{/oOksϳ2ʊ>n2>g)7 +#F&Z+3;rn2~^.:3WW{J^f^>^fNھfw__?.fFFfj ?gwg#+RF&22^ rgW7_;Ob.>>j2SgwCZB#n&>F&2/G77Cj:f3 B΂Z'G_/3zfBf&Z>2{g;*z[{N.Z'˂.fn.2:'_gGG/Rc">JZn2&sGח22vff~Άf+'7sۛR~sbKrZsOg7{+:>k.n2*cG/nRn2*f.k + SS_szZRfb>zJRz:c)'/;Bڲb rb:ff +_7'#K.n~&&~o__O3Okn.>ko//{nr2z[g7o#^B +NN2:ro3o[{;:/澂nGWwo&&^2/J:nro_/?oó[Osc掺nNfS_//Cz*"*ânb2o?SO+s+Bk㺋3kzbNr[rnn&n{oǷ_#+R^JKSkZ3CC. &N:~Oo˲/[c{Kkn&nBz '? +*jR~^^n/_3oSs +*#NN* ~Nzk{{'/s/"Ξn^&'s'2>^Rjc jo+*R OsO?r2^.[O_{kR&&f2:꺏/_s*RRS3 S3;sZ^"k/O'+R>R2ۃ?CC†f2k˲NO?ۂ;OO[[3CzN23*N:[SS#F+[SRr.*S /súj; + 3:Kj3n^N2.."."ZCs[jn?S/ooOrN>.row뢋 KKs/S3kfn˃{?˛3snks/ۋ_+#KNNr.#s_?C>RzZ.Z :; R>.Ͽ>22n&_'sS..2&~rOZ3_K[ +[R*#2 +➎s"RjoZ~nŽr:k#OKS_?++k*'_'S[Scj.Zb>N"*o/ +:s;;S3kZ>~.jc3 +JsCkZcr&^&SOo#?K*Kkbz2b +CJC"RzzZ*#J^&f +Og'gg?K*;jn~*cjKsss3[;B.>RkÛR[ +{S#+;z*N2.>n./_c os[[/koj:Rf룟S*Rbn&^>j[s''c[/// +nRJgS_;B"[jBÛsKS# ZRffz{OO*BNR.2J2.;kc;?'s{[ >"&{ϏSCsk+[z&f^~ns*Zr&sb*s 㛃 +K:>^+/g3?OB+j&k?? +[{?SOO/ãK[{brnNnnRz+[3/k2&2kbZ_ [b2B JzSS/zs 2"+ +f2[_.n"'_'? +(&Sg_#J"cBOKۣnf&:+J':nN.[k?g_'s~ƞ^'o.R&C{ccZv^vRww[b:Ξ__f>f*GGg +'& _7wr;R{_'vֆ"[O'7~g &B'G{>F~Jo''g&_'{NC3scV2s'gO>.B3R&. OZff2S/b^~3ϳ/SBR*/gg.6FNoc:^~B+r27?.^~o&n?OS*zJz'Z^v&ZS'rz +3_n~nzjo"F6'R.nr2jO'OcJ;/&6f2#'C2Ύ23kbNƾLJB>rs_g{RN s/CggJRV~_gs2^ÿ/[k".gG/Krn/sn'+z"3/Z6VV>{?s +.nZsr~>~"*/'#ˋN: B>N~+OCھRkZRf?/C ?_&.'7ǿ3:"N>Nggϊff&"OO+s3'_3Z>^~Rۊn&rr~+w's[:B~/[rNRRs_g'.n +o/N6v~__+: cg7k^rskjZbCooJ>Fbÿ_O~&N;g7ww_;&jc+2^r3JrNnJSgG'jnRZ3g +NVogj2΢coo{j~&kzogSC.^r;gG3&&^~KϣFf&N:s{S/cSo[kf~[2&f+sg?Sjf.+OŠK#2Njbj22»O/fF^J'3k +.[So_csRR.R*?s ںf//3bkۻ7'{fF*S3.NbJ{kRr.KS?_?#Rf.GsnN2 ocʎnZs^js+J" +bۻ..B__j^&^n:?O >N{j""JK{_gO..R2 ۂn.&^.{'SZ&^*oO+k#[S[3_k^f&r*3j22[oSCZ22/c.~^~r3*z3?'S .GG's:˚ ;N"NξrbG?rBjksg"rJrBR^*/'?cjBK +rRz +oSr2:K7'b&F^NN3bZ"Ns˂zb/g+"r#j⢲B.jC&&fGo/J2~.o'#cc+s2Z~nrn.jÿ/ZR.b['gS~>[b''o* ʎ&ZzjrJcOo[r~n*3Nf~Bs+z~.R#+ +3C/Oc+K.zz: +{s cg_scf^~/k~^~KoS bZj+;3Ss2k;CBZJ3K3#&^NN*O?f^#SJ{rzoskJcO/J +>&.KKZ2RCǷ''/^.{s/Kb.B; +JZ2;s* +f>?OC2*~n'3 +[c?/#/ :#k2/:ZB_or>BsO&R2"".+{gKjz>3/? 2B2b*ϏۋR^'3 +.n.RJ:;3r>k2 37wG_2^&vƞSzr2Bj//Ss[{s"B.#cs/sznrb*;+.~C_'gj"fS?So{S??/;"k{s/>R:/3s+{fK#. + +/S[{s?Cj.ZbzjO/O/&>N*?gOc"R s{{2&&f&:jj/GO{ꋺ&fnZ#^^ +ϟ'?/3^3r22Z>r#/K2s''?N^6bjkk"/ObںJK{?/*+"Zr^^r^.b s__'ScrZ:sSKz:[r +2*Sos;?S>fJCn~^fn*{ k+C'_Os:2²R~>.cs*K?os2>Z{O:Zr...nBjcO;bbr: +Ïo ꂲRJS[J2nnʳ[c.cO?JBn~>ff['Ƿg'..:[RNnN2:cc3c'kN2z22*ˋ;[rR£s'_[f^& +3#˻ʺ[# +3[j3RRrnfCksSsz^^> +jZs_r&vnK/f23_w)GhVg7{fvƞk/)Hv2'9 rcII.V{g9:HwIN6h>S'9iNVBG i.vs) )?^V8"3׉c>hV&?yiO8ȶ.[Gi7Fh~i99fH( i? +(V')_ +&sgg6HH2/7G'۶.O nVH6[_iI֎9yK~6薎{o FxX>3O9{z י鏚fȆRow;(62s?7)/of(>zigH&_Wiן^v:){ֆRCW)s>V(ڣSw W_c;&VV6ffjW 62k?WWoc^FRz_/v)I )"+sszV^.G7&V;C)?(FN7'nvhVSB{iij&R7Wv&{w[fvvo) ςfֶ"k{'fn_w"66.˻_W)*3_ r6frRfOsoS¶Rb["FVn;3׷ +6s'S 6VN׉w^Hv2/WIF&Z_{z6^rS{6^og:^(V6fN3gwg3^VλOo"6(bKoii)FV^'Sc^((^*#'3S'SBfFRk_Gos&&rwo/K_?hhv6^{o/^.Gw?&^fRgo^vf~.g¶Vv&2_7"nn&Ǘ'?"6(VF~W*~ffcgwƎf2?/f>+'.6iW)Gb6F>32f6FjGG>r'gS>^O'S/C[##.^3&&&~Z)i#vv&?S.RS/ΎfFC_g7>oG_&VVV63O_G[.~N?7G>fFS_wCn&R3/sO:&Rr#Ƿ_rZRzc/oorf6Fr{n/#3^f_/ +F#3gG KJ.bS[s'_b6rJ//r.>.ڻW*rn&RON>j&F^sgwN&R3O'f +" +/rRnS.f~KC3_G&>.3+CRNrGwWg#N&.Nb{+&>~fB#/''//3KscZ&&f&J{Onn~Frroo[3O_#~.Z{_/ZFF.c:˳zZ?_^F6N:';&.+s'#N&vVBJ[;kS'ww_J62b.2+;ss^^n2+'ǗW^""+&R/SC rB3J>Ά~JoS//3Nn +S/3 Kok^^&SOZRj[gSnN/s +{>~{o#Zfv:7G*sc/c"N.+SRC_C^6f>O3rzk;Ϗ+B.nOחgk^&N:~~&fNr/oBnj/ J~f ++sg^&2cCkJO//k.&*ZJ:"2O''_[.^^~r/#sc¾j?_+Bk'''3k:S{"(V^2[3j#Kg'R~"R.KSSbb~2#GWgO/K22r22"Bfz'ϟ/{>RK+roscO3B^&~[+;{ ?'O:>f6F>ZK{nN23ggÚb.[Ãc{K ++KnºKOFF;2ZǷ'Ɔ&c_jK3s_3K +>&Fn{'kcr>'jzN憆k_'7g/JJ [Bf&bo?SBf&2۳{ښÃ[___~R{ "^~RBgg*.^~~2BZ+ 2.j_osΞNB+sO_gZk3?CJfƆ^rrsC;SsCgg'S+R^f^*[//j;C#BRR>2S?_oC+;c;kBf^N;ssJjkzZN^&^NzKj&NZ+C#KJ/_ccf&>΢ZZzn2Zs7_ozn.:orN'?srR>Bk'G&6GG{NhV&_/+>^.'gCr(VN2sW_RC_G_;rΖ7WwSN_s +n{'GGg&^_7)ʖ(rW)>^v.wFv_7wF6&.O~ƶ~SgWW:b&Rk/SVvrS'2*s_'^N#'>~>JsÛ^6FF;g+R>/'sS*F(vs'j;_s_>66bsgzŸg_2FhV&rG/Z2n__6vֆ2gGCj^>O;.&??LJB2&[j/">FrS?wS*n"/3#">&F[3w r"JC:'j~"??'?RN~2+o'F>"'gk..OOg.^Vfb'K2_F6f"_gGB{RF66v&/_)~ro_WGCB(hFJ#iWϚ&F^{#G_snfJ{/{Rrʲz''*r^Z+g_O[jN>'"fvvJzg'#jnr3+g*&C*rs's.#+Cgo;r^.'? +暲SwSN~3g'2^6^*C7k~&j'Gbv2n[[JƞN:b73. +G_Cf^R['co#>N +?_[c*.2o?[~2fNK/_[:>Zkj#oBN;_g#R_kΆ>#_g2&6+';&w>>OWf^ +Go/R^ZSgSf^'G_ϟfƞborN&ΊšN{+R.N^BsO 2#/kz +oSzR&bJ;"R:soھRb2jc_3s/J>.r#N.2rڋ.^>2j_/3znN^NogZ~N~^RK__ʞ&f>G'N>>2g??R~^''2>ß?_goj&z/;~>'_R>Jr2Nck;sJ+r /S' +r2>sC/*bz>~N+ +2bgZΎ>Nc[o*n~rBS'O;J"N~ۿ?'cn[OzN&_{B^~kg3:nNZSgSn&CSÛbFn_rŽ»'ϏfNZJ?zR>~{s'g'珛 +~"#C32 +oSo;B.*;?ϣ rZC[zڂZbΊZcÛr.C3zbr+{K{~N#3b>ʛsn&kc_3+zB¾~n_'_c*Z^C_gkr*OC; +^fNRK/.ⳏff>2kێ~ +?go:R.Bk/{^>[sCo; +B"kCo[rr2: +#"r+3brOS2.n +CSCڂr+ϿoZnZg 2^>."ϟ_j2ff&>O2ff"C_7/ 's*^*_S2> +g'/>~~2+S{2N&^>/c/zrN:;_'/rzknR:/Ss??s2"k/3/CrB +Kk22bjjJbrn2+{OO/bK{.~c_On>>B +[?OoB>>ڻ3[^&b rCgsn>oSBF&Snj?ns3kb~Rs/Ͽ.>No_+bzʺ;; n۳3?o ++Kb2b2Z +꺺+3#22Z*ss# +r*k[j2.n^RoO +nB;??{z>joOo#^^~>B#os3뎾>>?c.{/ϿCzFC_+oRNzkC/["rKO +bnz S/o;~rB +JKB>:/o?/3;꛻c#jʂ.b + ".BbrZ;3{zrK *Z*kˢnN[/OSS" +[o2~roCr~?_b~nˏ?S33C;Bf~ڳog'OCJ2J3o?NNRzk3Cr2+#?SRbkkc+2²k*K2RB2[[#SoSos ;k +::*ZR2Z#S/ +Bz;sC b˳33>>.++SSsJ3 +O~R+n>R3Zj{w2Z _sV梷 WB;&+ljI~HZsg*[sh&J_ɹ& >Y_z:FJW!X^[GIr :?`67 !iX83iYYW^h `Hn_aYWNXx +gG y F&H>gI9R&)>!Gh Xhs?YYS2>X8v/y9چ Hf/WajX8>:!;zVXh7I!gH VjIa BXJOYSvXgW!Y'H voIyؘ/akV8 3YY7(r_!/^h{__IaIcVHo9c{&hhCI9o+>x2[:yob8f*["s8 .)yG'3H"/9'[ˆH("Rg osHhiFȶ2ci2f2R_IW&.JiY9o6zkIy32jy/.ÂWwۊ6Șv*IV8H?S H"'jI'((c/I ȸ3SW)[JnF>)s.hhKSRoWgv(.vW_J77?S&CןV i/V.2 s^BJcWSb6ȾZ' Iwh Vr7IIoxZ+Oiɇ"x&iR(*zɉ۲H:{wWJ.H&b׉J;H(2W)'kˊ))G(^[zWgj.bW?hV&7W)'vff[W׿vf'Wg;(Ff)ghFFzGi)g?FƆf? G{(HnI7gn&+'goH^^ow)(N)I+VhFOiig)Og(V^ƾ+fVƾn7cvN.[GZF&^'O&>f&G_'Nvf^_G7)kv&7ǎ66FF +W))6[wGwBV6~gW~F7Ǘov6F[WwK^OWGLJ66&fׇ_7_f''7sf6F&^&F&^og2>^ONfFb'O^R&k'GG{&v*3g{v~3'O_g[R~S/wg +~FosGoFffg?)cf&s_s'Z澶6.?O>^__K&>&^___ +fNƞ2&GgG.f.~F[3'kf&ΏSχ+>c'ornBn&OS_'/r2&^'gnzo_s&n&63gJ2BsOg.6[s_w>6G/B.2^Wwn2r62c#r^Nr;S2n6& /?wnR~#O.v2C/'Gώ~~&2&6> scSg;Fr;sB&f*?Žbfrs;fN:{ۇc[s&k;翊;f&rc7kjK+^f:J?w +n^"'kf>cF6NjoGk[n&Z7F;;;ζ6+k3OK:j;G/kJr^NS_ +f+k"^B SZzRfzkCK[f.B3[&NBBs'oCCzn"_osC&&" +SÛng'ó^r2G'3fnngG?f~.'3{JF/gc  +'gS[{2>ZǟC#f.bb/g'/#fF^2Z*gOC[^.Ok&&z_'CZ[Czf2Rڏ's/*N^RΚ'S/Sj.K_Ooc^f^N +/o2^~nn'?O.>>ncS~~ +g3"憞*'b&&._SNff^/ggO>+go3f&k'ϣ&>ZS'/:~χ'3>~~s[.2..n3ΎNOS/S*B2RJ/o>.koOosS[N>ᅬ?c.s?O_?kR>^{S3C/?#RN~^.O/n3&&&o?snN~{?^^J.N.k?r>oS>>.+oZRnC?;ڲcn.~ +//Ϗ +nN3'_{>rB~n_[{~~o?S#s2nJ'ON(JH/z_i~^Bw(NCR{g'Z.V&"ϟR*2R/χo&bV^{?&Vf3g'SǏ~F3;g~gWV&#?G6^&.gg((W +VVFɉi3H(FGi(GɇWch8kg9 7Vy ?vV(.O闹6VHiǹ7>fFvWwǹW6n7')>?WGbR~.3_nNrg{{'nbfΎ7s3NF w+>&WsJ_3&^2SW_;F&fjgG[6vnR_'vvn7?F(V^&?i^vhFCwwih67雞:7RV.'_IWֈ_I6&Ͽ iS:f&C)S^N֞#oWGrg+JF*::R.#gS+Jf^cs.6^s3^&7)Of&fgfFƶ)V6G /FR nV(>g֖舆/GWwsfVfs뷹)VHwoFh )W2Rhbw/N(J#wSڂn^J__ǿk +2>*''g3zrbjB+.{OoRO +BFJ?3rfnnF+'g&^6jV2bw&(r W73>nƈ>:GWw.2OG)rZ^sWgkJ6f37s6fz_WhFF2?'rv&fW'N''.?Sn".Rk';"b+#g /~& +3sg;^&2Jo*^^BZSrr?7wkrv.S)Fiϣ .j3?3ۆFOCF>:[GWO3F&:W'f.go?^&'w^~^S22>gj"..S?[//r2Bz3.j?#nbcCkg_*n~2['ʺfn{Gdz +~z#GGoS+^^"Jw?#6f2*7/R +w)GnvgǷ^^&'7G .&v?7.&?g_g7SnF7O/F6C3Z.JC'#z+*[o?Kێ.3s/:RRS"czbZ??S[R z rn>zR_'Bn~b"'g"6&R'G*OGcFf^~7gof~foG'ʆf^f_N>[s'/.Jgg2B6vr__ςZ6"[__*kfFoO+Rosnrc:S.K#/{*3Kk C nڳ²3#/[n›r{3+r^>rCsڞr?oZ&nbf{_+^>^zg[~&gǏnF掲'G2f>R3w_^ g7_;Fk/'';ff>:[gN>J#o矛o3Rnr:s#nNr?o+:b/K23 +j + +sj+Kz*˻*C⚲+{Ï/o+N"nZ +{S/>.~O'.Bj/2&?_b.>r[7*.~ _w'3[r^7_2^;?KN&f&RSgn&."3'?ffn*_??R^n.oo{n&N#Sc +b. +cSC;z/jkʺK/ J*sbS[s?c *2rK/ˢnN>2{[RR>2K*ϣ*BN&*k_/N3"~B/'2n.c__[N&_''^>^_obf&/O_k2SoRrs//b. {ۂ:B#/s*R" jjʃKk[K k;;J {KjZR* kc/:2:BRjKSOC +RB~:*o'[Bc?cZN~N_' R~>N*oO[۲N>:/gsCZN~Ï_s^&fK'"R^n[^K_/knJss?SR{ /z; ۺr" +zkCo+Jj;"k ++*:kJ{#B + +*/ ++b"b[#rNnΎ*c:Rj[/>>^'rz'O.n^&2B~?c"rNno'oNN#CKʾ>~k;OsC.Nj/sJ2.+{/C3sʢ"j[ˣ* K{C +J+{j#J#S'sJK> n*+[33 +"ss +CsƆ˺.sSzfn".wkZRh(7ێFhg^~V~F~3gjC73Sֈf#? '2'G_g(*&Bע& z.k2&o;f [Ǘf'_#FV>7WNggwfbZFgGS^rF6'j'77w~SC?_K3^bb()bfn(C_>&o'sR^)&vZ_2 + (VZiף6Ȟ?>χ77(&V2Grfo7_gF6NoWo&O&h?^Wi6~N&r^k73fo^GΆzwן^n{G)36BFf..7in;6vÿƾ2w~[N3G3Z;i;+Fw^^N)7Jo />~j jϻvhn?Ji~frK#oB&jǷs&_) :&/ >ZOWZ~b_c:wW??Nf^rWiO{oNf//2nRk)3^rvO;".GW~:.z^~wR + +FϿ˂2S~ϛNOO#^'iB 'S +K&R&~ir +_o&F{#rgz6J_2r{o:F/w["cF+C_WG.+Kczg¾o:bn.:?_fn[ +&3WfKNoCN>'fojfc3_Jroˣ^F {ooo3Nrs +þ^Szn3o._)c*soo(׏R[r#"+bc?K^Zz/?{&fio&n;k>c(b72gJ:C2(W*_?"zfv)n.ó3og&(_n'+S/h^ :_Nֲ׷r~znǣ.*zs^hfGO"bzkV~ggj# .{?no*Z{c(wOz~R;v^2s +z{֖gNg/3s(V +[>NRrSsR2j/dz/ +/jz o_C:2RS6*7gbb +ʃ7'>(&? o&hf Or"2.Ͽ>_ +JscJ2'_r_+oj+3nhƏ/3ncF?*C2ROJvg;{O{2N ?bgcrK_ˆ/G3 +s +k +:Ϗ#. v(R[*Kn^Os>ƛgok/2c'~[:"Sc +N'fVSσS+f.S?_K[K:2.Gb6R:SCkz_NV+#B&N#FS o*n"s2sZS#CÚ'##3;뢎Ώc2[Jc#323joÃF2^&OsSjZR^7S2s{ZS"~ &/o33{R.SfsC[J+†wg +kS cF/fr?#bB#R +j{b_"zO/SC{;s/S"KZ~GS;j j +ۿs..zs3/3O^c#ks~s7^"rzO;S#oo2o.~{C[b3N^GB^ +:+__ +^O2so?nvo23/cR{3rGkNB + +o{''RfrS3[g:fzN.[?ۂ"Nn*b*Z>{^Zs^fN뻛o +O+&fS.jc{/>^c~b*S3Jg.JzKS:o3r:J j'_joR΂ko/j[RF.bJz*3Z?2+_j.rnR + " +_K&ZϏ&.o[cgO";j"O.'+Z +rO^_ +~s#k73 +{_:C +Z;cz.scR sGSz/"R.Ro&*3kj>bCGO&:?nor{g6nS{". +?/n*#2jGgz^RۢK?J_?v^;CZS~.&bs{R&>*R/.3;R&&oGFrZjr +?Bz^.Sokn> + +7C f{ojz7&˛J^z# +>{B.*K{Z> +?O~fr;jgk#{.ʳ +G'~r: ➾"Cg.s"{N+b.S3G7cBbz:&3JÇgf*sn{r3.r*sz^nN_C:zj+RsZ7>n/ +bsB_Z*>.^goz{.^2B'o2&8BzW'z_rr_sHv'/6(8(Z'9Ivk"8w?yF~Vx^) fVWWRJvr"CiikVb_;_""#F燏^['f6&Zg/'s'w"WvfZfFF3'W'6."G蚻f6bG)7^Fv.G>ZVV'{עzb(sIGIF&VhSGjV:i_3oOi;GW"Fr_B_[h(3gW +g[3.(vR)7G:~Ovh2))3Jf&z&O#{w2v;r +7G.[Cf &[#w2;'(g +Z7/CwRNF/>^6[;_HcC)#&??_*S^h"b3_.Gˊ6G.s˶h掳/2&f>^ g:/*ohn/>zN&OoS+K>jF&[WS˞F^jgO+'bc3/.R2~i?o~zf_7'.ΞOs[7'R6+SsojZv__cjz'"z>&&k7sFR(Rۇ7&nF.nSWf>k/K nʾr' +o6S?KK+/>2^gk~B&2G?/B&oBR?s뾆jβ_ Z?Sϟ^J6gS{ F>'+/7ONbOSz^/nno)ZfrNbo[V(bGgbfFfivh6'ǟw~&^i2f~+3 +~nn&~3OzZ 2.s2./OgC^f'cz2Rr&/ +"z*3KRJƚ_*{ .F^NRO럚S3;rBKr__3(>>SObfcK+(rR?_h΂['dzr&2"Gg?S+f^_?OK&#&.WG J^#JB# +'g ~Sk/Kg>r/c*nO'&^b3ok~n2j s^fN?7/#s.2:Sb& +CRS7:"rZۚ cw&n+3JJNFJ׿F&23χKjFvsGwoK*^^JSW.n>N~rsJ"#;~J"Of /.S;Sr⎲c_ +z:Bʢ; +^ +s'J;* k&.+w?j +Jror/O[nb#O3: +*";:[k[ /Rbj*#Or*n+_oB:&6Κz&ƂGoff>.3nfF6{?_:+R~'{cCBjC#2?[K~r'/'{ʻnJ&>22s?'JS2./O/KNnzZz +cC3^63C"뚂Z^Rs/oS 3Rʢ"^ +3O*nNf#Bg +^^bg# +^N^.G_6zOg?>&v'7GRfv g'g;2N.s'#S3+_O[R2..rOSgk~2 +/S^FJ[//J&nξ^;__{.>b{K[oSsr>NJ#OkBjjR**/b: nR +{ʏ_sn~R"jz3gSζ&2#og3"6FNb'7/f^&Cg_O*2F .r2Rb3Osbƾ2ϏsooRr΢C'O+[cRb_Z.r ß:Nnr"? R&N 3s{BʻScK.bR?zjrc:jRnK/gg :b~" {S'C&ng3/?憞oS?;n^f&zs?sR^N +{3[?_C3sk;socZ."B۳㳃ZjzZk'R>n£{;#+n:_/o?CR^^rb"S_?CJ&R#Ï3K?22*3#{#cZr?3 Z:*rRBzK/_3Z:sg*2n&N:_RF^#S^j?^.:S'onZ[ϳKペ.^&#Sc//[22bR.ROs/:RN* Ogb>{C[oo[RbcS"r#o{Z&~3KnrRZr:' sKN*+K* s3*".k :r?CzZNBz/{ZRbbS_Sznrz.Z{SObNO?3'Z>~~NΎ:3's.~o[_#rRBn +3SK[#rZor.zr 3#zrNÏCNSO'Ssk&>23[Ok22..#3k[:":j #;sjZC3:+ :Jc[>ck[kb*R^"cocc>SǃB^^j"+G3z&ncOjZZ&{S)W_fFƾi 7Rrnn WK^&>r/sWGS^v[.oOGO{G7G +&6nhvRG)n+''';RF^N_sr.^ +Ǘ{/^f~RZ77ǣz^^. #7fOs:JSo#~_.2:J?soS['{R~:[_/s[Nf^S^2^>O)?F6V:RO GVNfKg'w7'kv&Rj;gS*/N&BrnCgg['&rKn'Gg6~ : +Sw#㾎Z.^.R.BG/Gz +fSW:nƆ>g_7"&&wsg~R ".23 +cO22b +bOfNSjz2;RS"rn.>WN>Br_w3^>J3+WfF^rog盟zn2/' FR~nzC_/RzZ./Z?f[["o2K"jێj&?w_o;j&Z&_/G_:2V2z2Ggwj~^N*?N>2Fk?cgN>^2{J?Ên3J_B;JJoko[[s" +jZZ?{nSJ7'B +.:n[ϛ.n{:/:^NnfN'>~F#gO^~n3os S>&R{2#:sSz#Js:BBJ[[2nn3o7?bF{'G/>(F^3s)WGj.(v&&OgW#.66R/n"rN3 _S:r&S+c 2{r +k/K?;Sb2oK"Cr +;.2"Kg_;ZoC.{ +s7f^n3S'N..F&?c۾r.f3OS3& NKۚ*CK+{no:+;_g +rN Kw;J^ƶκk#Gsf6k'Sⶶr?'wgÆ6~nNz;;SG{f22+kOZr"NjOG.rc[c2C2.2BBoǿ:3.z''C'.ΞN'{obN>.JkNr O +Z +j[/2ORzn Sn.;2{:cN2ZbO" b"_+BjjGSo^;G/rnN:o_s?N..Cj'_#N2.:ko..;2"C"rK/oC*ںf*cf~B:G+zf/s?O+2.. sSoKN2Bۚs_/{j2^b+ r뿛2NS;_rŽbrڋKs:">˚#BSO;nbr""{3SkBJC?[ + ssJ + +zs#?Jb&&jjrsS~f2_'O/2."c*/;bZ"nsj"{j{#B +SZ"[2^S/s3n>3?/>n>c3o_˺> j3s#SS:ZRc/z:kRn+#JjbR /+orBJ"Z 3/Jjs[2"3sʊjz[.ZK/": Z+S#j22;C'or^2ZC/o3JJn  +'+R2&jk/?o/zNb;3/z[r2 *:k* +bC3*JJ^bχo?+"6&+K~>&&cg":*sj#jnr k{;#ڎkb/C{">›KbOoz2csk ór{so3"2:j?O*ZnNzO#oB?Sk.ZzϿ[ +n‚+O{2z2BK#JS+; +R;jz/;z**3#+c*>nÏooKbFZO?jR>jC'?> bs3n.{NRr"SJ +^.sO/ +ڂ>r:#K[/ +:RbC;R룣c: +[o2:jj#'22Rr[/ooR>.nRbJ[j2~SZZZj2 o zrK Kr3NR K*+rn.zSK:.+[ÿ{*n.z#cڞjcoS#sKR"Kcss/"+rrRz;?/*JR.>bC s*2*zzkZb +rʊ#[ZnNzjOSR2RB*c'ʊnJjSs*~^Z+JzbrNrrRrr~Z +K/go3#ZJ곺&RF6fb: +sʿΞN.2Z2/gw/_7grN*Ɔf^RƆ^nNB&2:#c{"3^2_GGiWǟ?/#zڋogwos(HȖ>3+n&nCg?7s&BOw)){VhnS'g/{vhfb3?'g'/*ζ(G):f6^Z#OC3"~&N/_?'?S;C2hvz;G73ھ^6V( 7gGK((^S_i鷟3c((V6~ۛsS;cB&fNC'gG?{+fֈ(f2;c_/oF(8HoIw +6hh6 +w))WKJ+Cngg'W˺(f?_'r&f(f+w{Άbi)WG(oww7G >fvhȸHOS*RNfFVFfwWw'[>. /__g'o{.f[c'矏 +>6V2wG?//Cr>h2_7W)gz23W[O/:b^bC3[J~(fkwo^(6ROW3BJW7_S(#s'RnrfƶƎJ?Js#j&g&6#Ggc2Z3/{j&hH(F^.;oϳS[k˚FVv)iiiiW^Bw3c3oC.Fffb{O?gB6h6?iiWǿ3*z~r ?_o?O/N^RÏOS'6^.ں{cJ*fVhvfNjogw'Cv)W{^ƞ{'OSNv2 +C/K+^F^n"swGg__Go^^2 +ggoKFVVÏ__O_C&f~j//'_C6&Z?wW)'JF^>o/__6SOg7?6&" +wS➶6~oǷLJk6^r[ooS{.6^rZ +gCb2r¢+//n&ogg7w_*n7wG'[F(&3g_O>.RSn6&7W)_^&f^.Bsso3;2^oOOGW../3s+"FvF^?77G'jR>fFFkcc?gFv6f.Ko3{gJf&2#o_'sfCgwW&f6vnBs +(v&Rۏ/Û[_S +nn."""zg*^f~ǷGOcR>>bRJCo?g7c^6oWW'FF.g_+&f^"3gGg3jr>ֆΎ{G'&vv6&zs:K_G3nR2>g_oR~&&jC'{2>6ffn;CC?7s"fF&rKS'g_ +7_;NfFf.'LJ?B^^Rnrz'?sJ&ƶfRjs+Cׇڎn":k3:R~; #SggONfƆ"Cg7wg>fff&N2ß/*?GgCB22+o'.o'? +RB"{ϟ'_ +ffRʂ/SZk:~G7_o#b.^^'___/ r&n>^f^N.K_OrF6~"kk)?2&..ZSK3 +N.ښB{g_&&~~ +GO*njsS{Co{[cN>^^^g_/Jf>ϟGg ^^~~n#'kbb.kJ?__o3K+Rf&''_s n^ff^n{3'g?~Z~~.*O'*.^nz/'g +Br2J?: +JB.r:KsϏC^/Ƿo#j>v6^GG'oC~CJc?'O3CcNF^2;o_R^>+K?g'3r2R"k^JcCs/3Sk{K~#?Osoo{*2>ƶ /'g'_O{>.22o_.rR";#{枲/z"j.~^'{zS2rR/O>~Now_*>^nC'g&F&/s*r[K*"[koS b.2[/#; +KK"j:j+R>.:ڛJ_/sb^^^>kC33OjZBϿ/B&&NBZ:'"΂rkK.BZJS/3;{[oz^JsÊbn[OOO/S˺ +R>KÏ//3j*c2f>*;K+2.Ogg2^^Ro__3K* +#?b*S_'..ZJ.^^RkOsrJ{[krRrb‹JRB"'skjrn>RC''s:"?;.N. +{3 +;NN2+So+* sSs33Kr.bB+Zjb '':N>&bgG{j2''sK&~2ʃS[BCorb?g7'3kzr/Cr&f^n~^^&fo?'))׷'_''?3c +Nf6v^^(hh(f.;jRC_w))W)W'?k>(((66Vhh^r_)WGW ɹ9Iɉj~n^VVh(66N^fggG/?w iG?b&&NRs6hRN{gg_?OSog7w7Ojv((vf.^~rz3//)_?_֖ffBž6FrcO'''Ƿ7Ƿw7g''S>>ƶhhVƾrff&^.wwW'GgO#&F&6V(vfNrRnʃO)əyg/Ks'B>VV6&FV +s/oo_gg'3c/斖&ʏ'3fvNK/7_/sOggGK^F6>2rZjZfnkr777gg'?3B SϿb2rrr&&&Rn:;g''3"{ 3''Sk>^ff&.ǷKn&.>^~RrKog_3#;Cg#N~2.J&&~b+k _W77_C{.nNrR2nNb"n&f>N>.z +S_GgS_'_S 6v6+Ss">^V(fJoGǟoϏggg7GS+Br&f>^~N&6vr:Sw__wWgjNn/oCZh6&r*KCkJbjCo?'_˲Nr/3zbv(( co3/'O/O?s +rRn^&N"rZڲ[_GG;ャK&&^&^&f~N~jWW#* +7o&f^~rK[j +ZnffFv.ǷwwO# +ڻS???'*r6&ƖF&fffʛSSOG)wc>N~^JjkJKRf6^f&'_c[ ?ggOsszN&&^ʋ + Sr^VV6&/LJSo?'{Z۟F.":B#7'RNVVv&Z"c;Z6F"r2K_77'Ͽϟ/{j{oc_O^n22J*s.~v ϟggOoSCˢRrR23b^fff~B +k3_'_GW'SKnRrBNnKn.^f^FO7i7?s2Br{?ϿCKrZoϳkRںcCk&6Vvf~ZO'G{ so/s {3sCoc;ڲR^ #KK[#cs: +SgN>.o/O^^r~Fv&Jo_G_sS*k:c3sRB/Z+{CS^FvNr:+s/3SS3 +cOsnj/'gJ.&>^~fڛ/ss__ϳz&~. /n^N"N^N"{G_o2 ?3 +>ʳsC{#[ cr>f6Z +jcoOo/sss3zz['g77gϣn>V(v^N2ʂ.B..kCjK_wG_cZ>fbzBSS[*brB.&b+'?gS*""b2bN;so{Z[[g[ "kkRfF6NgSbRR.n.#[*+3O^^^>+[o??sSg/O{>bb2>~~BS#R(&OwwgR&> +3SC#n2;C_'R^FFNR.S SS?_?σ;#j3K[o_?#>&RS? +‹?g?g6~>23sgC^fCK +37?o*2z:zZzK;z ;/bʃ +^&^._O/:nNξROo_LJOۊF&&^~r/sKoGJ;;K+^^n/?/&6vR{__7^f&^Nzs#..Z'nfKs[^";KccsjۏbzJ+#kSgGw7:&^fvVVR#S"3'?[G_?j&F&&&&r/?.f&n;Cs[3gnn^.++o_3_/N^cssB2RN_gw)7rr^f2~fZ?GZr>V(~J/_'__O'Zj ++ˏg7ww>N&#_>>^rjKG))G?CJRNf~~ +Zj[sssKbj^F& o_OSOgiII)'K>Fv消Hxn^VhhVvo'iyyI9iwG{w6f涖֖6r^&&fVh( ɉ)W?[:>~Rz+_'?:6.Λc~FF's#Ƿ)3r&n&2_'3r>2n^f^ʏG))g[bBV(F"[_/&>>K/'G_*ROoCGGJR>rn>6^ח_c&&Ng/>.r2^&/_G3R.BnNN2 /?3Zƶ&^NN/7ǟᅲ)7_'?zn&ff^FV&og/k[+&w7_+f&&rwi WS3"ʛCB~FVV(hF&~s;o? SO3'SosZR֖nciɹNNKO'o^vh(vFn+{J2涶 +; _GWOO33SOSr: +7WW'_ϋ.>2z&f^FvFv((&.Cor>&fWi)f&zbzOo'S[c{ 3;&^n~f&~F?OcN>rSG)) 'scۂ&{w7OkVnS_?/*(F>Zs'{/j:ڊkz_OrR&ƶbGwGOc +.__?^>^bJ*oâ>֖F>?7)wgoor*sKvvF^..+3/?Sc +Z +LJRF(^ '7wB. +# +/ +f~& ??Nr +[[NRj +3sz~2/'wWW&fFrJ_sof((v/ck"kj OOSS/o/{R&fFf"SCo3 +Nrkrns'Ë(hv?OOS2"S'~>>s?s3#jn>^~z#gsb&n.{C:bRz gc;"~(hBcckn&~>B/O/+bbRN^^r:ZrξN{?O/S +brS6(f./'gS+z&+_/{F6*{O{s/C?S[{ +rn#Zr~b+ {7g6v^[w?k6VV27'JJrʣK{JNΆF&2C_ϳNz;oZRZ?7ww_NF&R +/7' +bn>ǷG' +~hHnW)G'"n6^Nn^b :2j?3 +Z;r.nn+Csf#g'/ +&掛OgGgJ^V(s? ;Rß_g;#ZcO/rN>&& +*j +cC3[nڋWSNv(6?77_J2b +O..rFR˿_b.NZ_s;^)~ff~ s7{.r2'Ok~6v[/ǿ+FFFfK_sC*ϿRk [?_On>c_'Rfv6fBS_7o^R ++S?gg;2fF"js/Os K ++jj Rrʳ +B>. s 3o{#zF&. +'G׷'jh6&bsG{n~&&3/SSK +kk.rO3{: ++K3* +Nn*c{snNR;SOG_Sz&F^B꣏W[VV#S7ozzs/33S2&^.CkZ:o'?+.S?&&~2b+SO_g{^r3oOb^F~S_?~z*brZj +**Ǘg3+Z^F;O?_R6VV67))H8;+/NzkGgOc^F6V?Wwgo#csgcf(Vv&nk/f(Vv& +S?) iWhhVf{c[Kf~s)i)cN((6.CO_7'3S+ n>K#C o7V6"/W_:~FVV'ɉ)VVo? ?g)W&^f*Zf>3OwWȈV&Z?GW.f6F&niΖNvf2"*'CkObjgggNRnr;sKBvz'gOwiW~ֈvg'sk: +Nb'Cjζh(Vs3g77'k O.n3Ss/bKnsjf j/7I)皶8F*OrV. Inv6>gKOg?:[s/S^^6?/*^SGi2f6ƶ'o_'^fS 9 hx6r{;o'/fj3Ks_'WG&RrBr.Ύgg7^hƆ2[/z涆NsGWWWח>&hvbs7)*^Nƒ))B^f((*s.&⣣)wch(6f憾K +?*RRǷ)))wfֈƂwWwO˺.n.ÛחOK2N&vVF&^&n">#S[W)W"~^&J/?.6F&bW i)'f6(h&B#?'*Z&+kβkJRk*_ +s_/C_n.N"o:^f> i鷳hHH3_Gs*j;nkGW'Sr&6NzZ*S?K??.Nf2ojf~f>*"/wi 'S +~VvR77_z B^ƶ+_WWw*&6ã +csoG[Bv3/F+O77SZ~fVh(^+ +/jSc:.^^Zg7666R/O 3s*cG7?c3k^&2Bjj*֖&Z#)W_.hH[~Nf Cg_O^6FfB2 ogKb:Bos3oONr/?{rr*o?'goVnS_z"&6fNW9 3hVvF3O+k"?[K"nOSS3~&f^"s[ +3O__?rvV6'WS2FNr)i~F趚/'ϳ2O''?;>>nr{zFƆwG2nN^^~NNj?o+ +&f&NnW)gnf(6noS{Cn&:3?c2Ɩ6f SZz2KS)h&''_;6ƆF&*SG_sg*"*FGgr^>j3s b+2&~2bggo{oO/o[R2r^~ 'b^^~w )7vv&&f> +OJNr˳:_ǟ;J6.j"jzo3oSCC[.^^cS+ ss"2b+2Rg7WO+6((g/b^^>ڿww_^>N>~b"'g/Z{OC33z +k;z"fr>RO/Ϗc.nJJNc>#2ww_J&^O/.NRzc_O[ffR[??f^˟?[s''/"^f涶rk_s&&*O'' +z.&fNZ" +r" [˞&*#χw+rvn_S.&^2R+_g'ObnNnR:s'sNNb. +#?:+.2sz*[ *{[CS6F{JS {os66&ڳs{".~j?giN^f&"g+2.~fnSso'gs{ KS~~[; ~v&b2#3ns'/ +.BCorƖffziwz*2(VWgs3ʲ7/ˣn6("{?sCJ+oK*S_+Z* *R.JK.>K K/G'C;skNFFvf#CSB>~+zk3_7Ww7GZf^{rcbn2W7sG:N6f;o.^.+R2 +rbB~~BOW)WF2 *3'ϋzkn.k+"&~FfJZ_'j.>"K7o6vNC:2RS''Ggo~^&6>sbΞ3_os#kJzB/3{k2:R*jŽzOWWbr/_g&ֈ((V"c?Wy >6rnWww/I) +fVvCRwIgSoz>ƆRS>b^VhVǣW g(6f>¢ϛ;j?Wwi9*bÎ(v2h/i)kR&Nf~c(~s'G77 +Rh&6"s._Wg +/?3+/fkgiHVvvVrΊ) i)FvֈoncZ7wSk(/s/&~[?oC7ws__2f"+s/C7w>.~~nK.fZ^Z3'I)w^HV^F^^>3/o +O^z/'Rr~nSG.?o7;jjnFNR*ʂ'_~~R^//3B3O痹ɉkn8hfS_r:nf)iW7SsGj.JVfvi/&6ff&2cڊOz;ζrBj;3c[R/;{/GwS Bsۢ3F~Fnoi)'Bj(^og79?&f.ֶ& f&FFg)ǷWiWgs^>f>3"_Nrkf&>_7:6(hog/")W/~&VV6Wii_#"^n>vr.. +{"Z)gw?3oz^ֶn:'[OʋG?^2G)ǿ(Ȉh~'ii))꺾F.>>Ig;cFVfF&"jgGk_ǃzJn."Ok'i 'KhF>_jN.iiO*&~>62sGg/gf6vVvֶB~Wi g{OJz~&^2'ֶ>_O_)Ssnhh(fWLJKFv>R7')'gwWKh ?'Wgo{"ָ&hogwWG/^FƎfh.nJZ*3Zf9I__#~~r?)WOw)'RVֈNw#FVv&V(fʷ7Wi)wjbfFR^[W+SS #.s{KJZO I#3zf(rk?Ow77W^NvHVZWiwwǿgOffF澲[.W_Osjr&^&~*_G// +/[#j~N>W7s>h8xVoϿgw)W7#z>N^FV֖KC/?www)wgo/K&&VH^kS'g?W_cz>&^//?7Wig2(6&RkkR>^_gW~hf; Wdz?j&v((h6f^)iI)'g2&zrrÛ'o/G's#~f&~Co_/SN&Fh6J;g?GWׇg#f(h^kS'wGחgb2r((((>)OC{Fn:ZsgS["n  +joG'gϿ 2rƆ^2j?g'_?.(hHF^z)II'sRFf&v(V&>SSWg'SJR^^B+cK^N&^nn3{~.GwG'RV((v*?wGW/?GǗzfֈhc׉)go +2N&N^Nj&>'))7wCrrff~n>rn';_*Zn꛲CR#G'?ß[~hH~{ow7#;*nN(hH +'iIi׉g?.2>R^v(h637KBRf~z2wWW73vvRrjk?_OF6FvZ 9i)'[j;*JbN6vhr/g9i' .R^.Z".~>gbNRF/g{kB&(B:#oGwG/Rh(VV&ח7)Wg;.W WGG#r6&.n2~.k"3'/ʺj"R&ZgjBB^v6NJsog'OO((& Iob2nr2z.^fh(vw)I9i{2Ύ22o+ +oKRS/b.Fn +>n{SC7_βvVF +Og7_gLJ7G_Kȶn特WWo +R*fr~O_ɉiGor^~f^Nf.[r3#":NNK{wgWG_>vh(vff/G'_'??S^6((2gWii )j~^^>Rƶ&>?";^^N~K#ii://;bhf?'^fo_/_/*hh637wϟ^o2vZn_kRF&RB&F6/j''n+*WC;{n(V8s7_ sƆzgGIG?VV >' yy!Iw'VK _i)zZFRs3?'/j3C&6 fO99y!9翟``xV+wyY Z"FVX8(F~O9iw>>(8( S{RVn+wyٹw{ +(x@6W!! .X8_WISwvx6_7I"~:ֈ(V;OwzX 8Fי)) i6z_i?׉W_3I VxHvwi99Gw翎Vx XV*wiO32VV&kɗ7鉉WK6HXrS k"C3"gljR b7y ) _vظ.2B3g ^Vv~"') 7[G_;HhV^NgWwwG(XOYWg_gh8 (2"iWgWi)W_Vh6; gBf(&(v'7iO_'xxHOWiWh6.'gwi'Nvf )9yw/3kV~'I낢;f8`vf +7 GWw76fs'W f(F~.7wW7#' hF#Gw77W)iSx`x(.) 9W3[zHvfcscogwfz7'V2:Wi)W8؈C) i)ǿ8Ff"K?g_hviWJNC[oo2ξ^(VhF)))G^8({7W)hGo[+vHHvjg )gs8Vc?CkcnV~"+Ϗ7I&ָH6"kO_gwV^ǷWVx(w)wwGWGZf>>+>_+^f&&FßSSWoξ~^6F2#')9)>VZ'G')'88hh/ggWcR^~z+/?r6F^^_{* isFƚS)iZF.b^^.RW9oNhv6{_ongG)/[ +*hh(Kgg/s 37~B&^6v#Sg9g.&nCgG+s8OB3)WFhvnk')ׇ.:o6Fvʋ+bgG#.&>.6(s7W?#n*'_SswoHxxvsgG_G'Z~vf.?'χb_#&fn~OrB +3["hBǷ(f~'''wOf(VF6 *G_>^F&WiƢ(:Ǘw7s2.s)_s.^Nr"bj&R'_[C&& +#2I )g^F((js/?_R>6s'Ww__O^Hh~WWgG)Ǐ [^FVF[+RnZ{ Ss/cF~r:JC.&W7((3/G_wIfnS3+OWWO~{so77BR~3χg_&Gw +n:swI'C..n/2ΏwGV(fΎCG*/''{R^oO '&~"R^^j_G;*)Go*[ZVV(h6)'R6o?S'sȖcO{釿h?wOz3/>cwW2^vFoS;B+'/'W'Rh(kKzO){Nf.jsJn+^K# +J*o˻*ֈnS*r2#+Bjw) +.V3OSkOJj ~^ƈVoGgsB燚bۂ*_'[*rh(BO;G2';kN3Ww_#&^b>r"C/KkrrC/'_CV(&n:;_7ǟâR g'g/C&VV(f~bc/?G_^6F&.gw'j:k2"6nGG;‚#?KOC3Fbb"F^s2k#oG_w_[&6f6&.nbjS_w粶F;S_B>N&FΛ77o3Ë"B~_g{s{33C.*W)׿n>N&fN#/¢k3//c3;K~8h&s'___cK;ϟ_/ChJ_ gGƆ6/gc^Z"2S#f"Co/o kSSFf^bB#[son+3J^Vbbs'7{&^/^#z&Cs://s2.Jso/o/SKvSOZ +#z掺si)7_3N>Ɔ&~F[wgoZb.K3z[^ _+Oϊ:?g2so3Nf[wW7'KN^n&jo/so#k;+:Jr[zȶCC{;i)3rOw﷉gh6*)g7#Vfֆ.r_G.>g__Z7/)^(GWGWǺGV>^^^V*?rW9^G&W(N7)W_N'N^hOs';hV>/F )^hkFH(_C2&O_' ɹ7.N·)/^WKnRVhrVzH^f'IWj.wZ_w)s2Nv/HV6^nXh^fwWc>{3'[ ir_W)bgVK38 3F&?>/iG#)OZ o7^o{^.H VJNfwW"— +7BGf&) '"~*6f~?V.N(_Ɔoi9i*_3oG!o +~h/ H8sK_)GzϷ_JB_i^&>F/"v(BgVFFwG#~{sLJJ[ n2NJV(nGfzǿ^?'kOGR.G׳JK&Nv(c>3RR)GS?gJ)I73/_B8xh(V(N#_^wI)/ r2'bO.n6hO6ֈv#/ƋW)Ϛ'O'o2biicrʋrhH?'N&vo/{n.Kw_.^s~Vk2Gbvhn:~S)WG +Fg׿Sڢgg緳N?7_SKOv6JhvFf>Z/sO) +6Fg> +/_SSVnvfV;sz6闿g)'Goۂ׃. fVfONzf^2Zbƶ2)7ogoWW׷6g:>2+Z+or(VF&~fR7G>rgGgIs_3枢˃2(s.֞b2K:v&_?7Sr#'w3^'w?s'3So/osVrHffz/g;FfZϏGoGO?fv;(.^>"F/oGw'VcR:bZ{¶FN.΋Cg_/ n s3_'C'ZFrb#ƞ:kSC/'/7[6f3sË[Sr66RhvƞJ.?O&?>Zkk___C36vk'rf.jnF6KO{_S'6 ھJ#J;S"srvf&:2"gVno k: no/+2~:_&BS?">jJ{vBFR>Fgw7.j'ssggzZNƆn2b:&n:kzfK~:csG{zJn>"^: >n{'OKG7fRZCo'gsjǛnnBfrN2;*z"oRg :oSsznZcZ.o[R~V3zf6>+;ZW[ K/OJ +F6j*˲>~.wK^"fZ^*Wi?gs#KO3gK"R>&"^[_{zJr2Odzf>#3jkFf+ZF7¾;z#/RΟiW;nnNnbS'>&CSJ~^oJh^+o{sWK^zZb*S# +z:_r~j^r)Oo3nCjj_RF^;SsJ2f^Kʋ"c[+"Ss~#RFb~F~SR.3s+RRWW'sb +ZJg)oZ ã[r2Nh^kf3:+6.'CCS+b_ O2_ ++&OrNzzjrg7GjjB/r'+#k;Z2 +rۊ.2'z^f.6?CO/'Zf;[3r>~{.*'O~;[{&>B[;#/c*[ nfR>[+w#ۆ(o?3Sʊks{~2C3{sZ>~ j&f{/ +냣s+"&R + +n>f>[sbz‹R^['#'Bfn:b +n>CrOF&c~/2?Zrsg'GS'g:V"zfk/[Ck(vN_/OWb[/[#? ZV&.Kcj 7Jn+/_ʆ"_S.~Sǿ/o+FSo>f:ZJs2Z{#?;_O[g(fj3 +:''2&>.{/B?_obkg:;s__bVˏ~S3?_b^¢VV^bOg/w?ʾz#"RSZ&f&f2ZjoO332^>?O7JBfo.N+rO:~"j~~~{cc +^/g_#χ^Ɔn^f>k"3Nz/s:o7?C?oz>v ++k;C#[oR2~[_[Gσ3F^Zn*s +~>n Z2K_g+ J +:;>n2*w7'+*^N^"/۟sN.rZ; +jS/c&N~Nn_O7G [FF&>v:+z;[ssSsʻ3&''gs?SNCJ:3'o'o>6ffn:^r*#B~"Z/kbgǷSʏ +'o"kb^NNJns3KSw))O6&3ǃ?&v.Z:"_Z33/[SB?Ogs3cBhfVnbBN2b>#r+n7O_*f7nF> +scc+S'3s:RN[g2RsrK:^:2z.cS2 zNCSw[>Ȉ(O/CO?oo{+nZCO+Bˢ.?jn^2G_S₺BR~rBn~³N{_/*rZ2b3G? o'2N.:#BN^r:n"K3""2nʛ&_'gSCcso?Z+J">7n{:Rjs/WOj&V薆~g3k?JBNf֞/NOoOC{O.G?[BbB":zRBrƖ^J /Gz'nB)ã'O+;rN&7O*??/ff./>_k +3[jK?o;b^^Λ'+fj +_?Og'[KZFffvv& +sgob.nFVhO >ۋk{S?77Jnzb& +3OgS/Kv^ +CZ7_/#2.jog;&~6Cw so'~&v_{?_o{?'c>nKzfF2Kϣ RZo#O3+Osj.#R^~r.Z_W7g[&Ɩ(Vj2[O_fFN_"ZJ/SfΞ{77GG;N6f"S;*2n{Ws;[Znr^F^*g?j":O_+2{RZg??os^~^&N +?o#FZB/'Gg"~f?g{Z*&O^v6ƶf3.76F*O?'O?'sKֶoO_Ggggvbs[ + +_g ZBnRfvO;J#n_~oJvNs'gg'hȈ{/'zB~r +Go+꾎#sR.o/?rf&3˂.;/"2[3#s'knN?*;6O''/_SSZF枆^[ˇ' +*sON~&+ +zC;?S s?G꾆~.>j[r Zg/ʟG7_b>VHȶ+[??/'':Ξ^Z.;#s.2[SZ~>Ï_f*SK[sKRN^23g&6+'sk: ~~kg_#K&b_S[~b:B.GwSrBBrb +s*sSs?3j.&_/.:ϟ?KR:Bbs7GfFN''b.RC;jcc~.Rʛ[k[Cϳr;n#oos*f*+G^f&.g*jSێ^~2" +_wOkRR2*[2N~R*3{J/GJZ +:C#Rb*_?.~>R2nR##Ss[2~RKs)ʋ+~6v&fFrC'7g#; KO +>n^ƎZ3 ZR*3#O?sJ;_➢Ά^*soRf&k/Kg?CKnfnjS_ssKrj ++kڞ.s'2#~*oo;r"RB'S&rJ+Zsۺ.Z/cK &^^SWWǿsƞN3SRjS+c/oϟ#NfFⲣsk#*cO?o +[+n&&r:"CsO'CR&N斆nB:_o+;Zn^"s/S.NʛnS#{c{RNrKJR{3˲r/#3+r +k&^>SZ6F2B+O3#;Ss"J:ںRN2S'g_kbKK;*r^>BgN~~^s_'GgScS3cz*CoCzBr&k_?Ƿj^FV(~cs/+ϟgo*RrC>>2s{B :B22:_?K2N>&{//3/SNN^:?G7))W'??+;+.n6((vf&vff&:?WɹiWO2sc~f(VF6{ZVh87GOS3jR3fr?OB+Ï_/R[RRZc__s +"*3gWgf6vƆG r^v(&;c3SO77r +oO2k ^6Fƞrn')IɗGʂ +;3O/s2f&B'/S7fJ'7+F+./O?os?_".^vVF+òbjgoSs??9yy9Wcz.fV^f>6^V6...ڋ3iI)g77iwW's .66VCB*+O)_s:F&ZR&Rr&k7i ) +gO#"2#^VsS{rKO?SckZ"+ss3{^VVH8fn~&&'gys +Z^^FV(V2F&. +I9 WgGGWKHhF^rK*z+{3?GG/sC">&:  oS2š*J')9IgN&f.Ž((VRFVfrS?_3'wW_/[KJ_;NfFf~6>?SKs)i )Osc(/2Rzz˃'Ww)W_gCcs''ãO*fh(~2?g'G?3_s3C*FVhfs#O_'/3vڛ)ǏKNv(vbsJ/G__ i)CJ..&vFf^f(GW珳Z"_3KJBV(hv^2oS/SRjjjog)iioKS//osz^fF~+˚_Ξ~R'/ nvV~S'7)W^_B*n&>Vh^>...#;.."3iW~&&fRN[nSoO_Go2c/3+"jK3;&ֶ>?j NN+G_/[r#^~n3NN222C꺏_C +rC [2bJ#_'cf.&b3 +bbrF(&n'3*?_7w))w' 6N^V>b[**b2˿'#3ZZ[NBo'_z>&&r#_B~&*33.[nNco/O +kbR ++;o/^&6^rKo[3_/G?jBR3Znr[vFF"{c3#g_*Bf>R.R&^Z{ ۻj[*rRr?OrZJ__+[jn^nB23{b.2RR /O/3#.."Zz*k3'#n.k˃23O2NBrŠ_ۻR.:/g3br[RKϟSJ&vƶZs;{O')o 2r&nRrJ;sˊã>GObr&Kgw"~RⲚzj+k+_*:2.R.2C#sk{+R Jzzj{#zrrR+nrg_sojf&o'[k//Cj2.2ۂ2~2*oK3o'w_Z2~2+*j2zc/J^.K'WwsR.&n?>>~njzZz_2.ξC{[zoggOۋss[3_r.BR.zKB2rN~:**2.rOg;{kS[3 +zbZ*#:RB:^²N>K.sw7'bNrʳ_'3>R:/nR [ +RƞǷ_3rCʺ;oC^ksCcS#k*B.B S'Oo2b??jnzc& +/jRZ_3;zKnLJs +B.nzz{#R>&&^R2:3+2 j77zRZsWg3Bn 3/.^^2sBS3SS[sRKJz/k2N #""kO3S ^~nNN: +Bs'_3/3矣>~jBrNfF +[oϏ+.S[Ks#^΋3W'o{3{J~2"OkNv2:3n" +Og~.n/OSs?Z^>N"rNN6Nr.zc#_BNKJcS3{[ZS_'?B.&Ɔnso? KS#ccj + +^F2۳^>R__3Rb;rzχGgn>ZS{ + 3CFnJcnnrf>G_?SO g'?_'o..zr.r&&frrZ;3_3 +2&RjJ3SS"n[gׇ +&F6w))'SSof&rCoKZr^^'?{N^6^jo*nf>j[_G'c{g>.n +s_{{.fNrK'G*/Oz ۏ?'_R&~>"ξzR*3Sz.oWW_oJ~rσ^>N?_; j~((G7GwwGg>fr~B?))R(hh(f +__Sc99 +ffVV6&vR?'7iRv`8r_gg IwO2(N[#c^^חj6" +r/_ss_G;F&.F#۞:3g)+N68VZr)iWWW/nJ +V^6".k/gg'f(VhrR'7){ZvFfB_) WgfXHs7i) I'" +B&^(vN&"{/*Rs32jf2*/O_7oSz"~Ǝ&2*/׉BHv>)Wgs2 +&^~B {js/o +RO +Bn~nhF>>.N'??g'[/΂ +>&F"'_')F(x&no7'g +#&^N^>;;zχG+J2(^.C_+S?G^K +K/ii'/FvVFs'g*kOR";.f2n" +Êχ{rۛʏFB[Sg'7_Jb2>66nC?G)iGgrRhh6:' {+"^nR;R*_iG'gc +&V(h&:jOWg3n6(^~{z)gw);[((ȈFʟ_)cS'g^N~~>΢&j#3obfFVSW7g/k fv&2{o)ii)'Rf(興h._)I i#2 N6fF6掚Bi99)'[ۢ^V興hrJJw)W7j~h6&2➶W IiO(ȸVf#{'7LJ_LJ[.&^r +Ǘ?nfFFֆjG_' *66./>gG7iW~&6(WWח?ÚVVƾ憾.frSwWg{co^Ȉ(~ח)wGSV^V>B'WIoKnH8~n/gGWWW闿b^F~&V6NGGgwwGb^ֈzC翿χ_3nf&RRg7)W6hF[S#ow_7>&.^f~ΞsWGg?:6ƖVhf/Ws((V6^Z')iii'?ۢ&H^G)i9) +:^&VV(J'w)i(v^fj[[o'GwGs^j#gGo#'^Z 'gO___*NRz.Bf:73'"rVV"/*sgww'&F(&&"ogwSoO +Ζ8h.jr^>sW )iO+J^66(vﷷww鉗z^vN^F_' 'rvVF&RG?CO^v^&~bZ'GO/ &fF6~kOG_3S3RFrb:rnB)7'rnn66ښ +WW'^VHvZr_׉'_sf6h((vv6BJ7Wi7JF&~ΞNRGG?6f&BfK_w7O#6~JB.~^^S'Wg>&6^^>BS'C +ΎKooSۢ2r6/sO7_ +Z&znr"_77'/Svƶb{O )GG_#&fƆ~N2[''GG_?N&6hhf..sG_&&6^z#oGG77Gg"v憆&nZkk/gGO>~N.βsڣ+CSo+.33/ÿO;[rf~J2rn s_Og'oC +6vfr#χ7ggR"探{????C˲r>(Ffn"jCsO_77_{.nNFrffF&& +?_7ww'/jn6vvf^n7OO{~FF^"CN;og'?Rn"*c2kKs/CKrk3rr.rSj*#_ks#CzFƾ''_Oc[R>rOK.f&^f&{_'g'7SzN^>2^^v^Zkÿg'G))7znNFvV(ƞnǷW~&nsNʲg__NB SZ"K3C*B*z.b2 +.R*'+:.N6V. + +/So+J/s/_okjB~Rff.f&Z/'7gƆN>>:{oG7w)i?#VhH(~o7)WwgoRv ^^n^n W'g;VF>OSSz^.^2.:V6:Ç_Gwo_#ZÏ&&V^~ŽG''Nƚk2Rwɷ?{&F/>Gv~6/Sw)GZ/Oڎ's2G' >f8XhHfk ɉ)Zkv/N_:kwgWkF^ۿ'7oK'n~~&&Z?糎/F;&Sgw 9iw2Ch(fJ'3#>c2'o'OkORJ2soO/36:rfRg_3_so3sSr..nnC7O.j#֖Vv'' ioƈF( +g?OO{SGs.6(RۿowWiONFf^^223RB2o3wW g'VȈVf[wCgS23:_z'#JB^~bB'3*Ǝ&f7;3Sf~jh^ks' )Wnnr2fF(2RS?3kr((F')7*ˋr&rRn^.S"CG R:^vh&fG7w_[Z2(6ƶFsWios6fc/s_rrn2[Og&6F~Jk:7'){n^n +^&b*G_g3.6Fn" 3{.n+{.fbZ?/oc>^F..6^[s?_S?Zk3SFF^3JW)R^V~6fb>ffrbGg_?VFn_ss_o[oZ>*[[KbrbZr:G;jV6Z3'_S'_~R_6f&fw#~fr~Ks +" '?"^(>:_gw)G'&vF;WF.v(((>j2K3SgWO_3bV^R;J{o2:F&&R+[Oƞ6&Z. sg7ofN"^>r[v^[S''bcor~K_GCsrFfƶ"c{SjoJzJnGW"66hvb+iW7G*2>vVFfƆj: Gɉח낣ZNnv&Oo#{ock''{"6^.COw?z&^~nڳۏg_~ +nNrS&n>So?*kj{ˏ'oʞR.κrR2Ο?/or*'gj&&NF(ֶr[)'NFf2;.2GW''R&GGg7[J>Bcs[N&R3K?WWO~^6(r/''g?'{*C"*&f>B +gGOcOZo3rR2O'?O"+"k*3~^NNBs[+oSsor:>^6&&/'_W7C^&ffK +RR.{N6v&N7g+n^nn~r_c{Wgkc&VhjB/ח7^Z"/('7Oz^^F~OO#n>&nsr.*k˾j'G3 +f^>o'_w_onBK +~>jS~.OoS_c+.ƆB_#K{Z㏻6΢nKoOsOǿS3˳ۂNF6ֆ2S_o_wW77g*nR^R~fzNN>ncSSG.&n +'?Sʚb/2r>33s&;o3;2 +6&^^23'7'oj ^^>^R/rrn#/___#[[nfgg?{ +~.~n^"ۛCGwg^6f+3_OwO/k# .&6f G#j?s3s*K~.~3:ozoSZRr&cC/??o*rr²&#O_''/Sk"Rnrn2.Ⲏbcʂ; *ssRZZ[s[[oOsJ˂Nb&2Z +[?K/Ogz^ff^BkW'*[ +:.fF&^Rc''#ۃc +Rc3K#333 3bBR^&Z:sg_ocú~f>.ڲZꃿ'?JJcO3"R;jRf.b'b#r'O/OrRn;_{Cz&fn&r+7GO#KSk>>΂ /z?S+:j~.>&nRr>C##*j+ + nbn.[?7s_ڢN^^f^CSO/'r22R:3+so[C3kC +.2 +;s/g盻*CK +: ʚ rs/[sR[3brNr²R_ϛC[RrR~w'3^o'3'{+vfb.^CcSbz3cSC 2z&zFW/#>F&>h8(Sg?'r?fBgbFR +n'ff.s*~{SK/s趾 +Ss>272rs~ 'gO/f&oCv7[>2^_fF.s'7j:grwbscg6F_fv2vk&?Gcf*;7F_'7 ^*Nh>3gzbsb?66{#S/ror_kv)bw3o6V>k'BoR'n;/ +Z[sfOgsS~J(h6~Go2__~~GG/Z#2^_gn/Ƿs3/svBgϾ^ROSRC>/O") G:KfºVF^˷Z_S+?r:[f_s."S'b'SS~F.c&^/g:~^SO+jϏ .Kiw*2N/6ֶO˂_{"S_ϢffGbK?{n+S^R':37/RfVVfۛRB2S.*s~"kK[f2{.^ +oۿ^6FG/n{jgr?#:_J/G/.~jCb*'*fƃf~JOs3jS72^s+2^VbZn2SOGBƶg rz~frRR'''#:溊&B* w_/oξgs*÷^Zj.#&(vŠƊowO^V#jNSS.n/:_{oS.fB#_'KnR6Z~?_*zi.3 +o?nV&^χGSBF22 +>2sCR*_  +SO/r6Vn?>Sc/_ >6O>f.sn~WϢ.sg^V& +^[/3S3v..co*~nO_/kKO>(&s2'oϿ'Bb~~:sS?oiJ;R~k +&:s'_'G&Zn.2/?w_g_ #bk6.&_S'SۇSֲr>2Ύ:O/RB?Wo'czGgv6Z Jn˛og'#rB~N*ZK 6' S{b*sjog:zR2[[b"rJ3?σOW˛>"Sh(S.BoC{)nʆ^:3 +R&{ 332z2/2BgO#CCs^j^.&ff"_W'g;[z;^r&+ ocs{"nZ>'c'/ʻ^(*/C*2Nw&~2>fRS33 +J/&Rrk{JZ;Ir.~j+b6ks'{薞Κ?ϳj[NzRR&^((gW'Oo>ov&3jiwC{B# +&VƃSCon[s6&o:rs77J""^_'cJsjRf~b kBr3:S[B8hz#3'SoZ#nfz#;R7Ⲣ^^ָgG' +oj[O + +zΎ:J) {?/ +.Ï'''o~&.&RB2boRc_ #SO3.nR&hh~?Co_ώ沃j2..~o7woχ(H>2. +oO_'r~zBRr.3Z>Cc;ZN(N*j#/'oSoS+ +K2r3;~n[꣏oJR__g''SΆn+¢rn^.&O{sO/rB&V(KC{_/S_&&3ڣ2"> >gO'7Έ8nrs7_7OrsZZR~r&.c+cgO:j&F{r2* o> +;2&*s&;Ϗ'ǟrsC(&JSϟwwo_2FBb~{S++o{6;k{;O_[sfz2 +S_7?>>z*3RGgoGkKh6R::3S_'澣o+bz.3Sƞ>._' +jSnr.2Nr/WG +f^2Z#rzCSrF"j?â'+~nNK'3gJ{뾆^br.o&>*:OkC~So{77rZnN +/SrN"O_*.B;6>OW?{2*3Ɔ2*r&&nJ"J'R2s+z#/NzrƆk:B_?:~βZObSg>nJ&Ro3/GNF&.BrsS_+{Cϋ7oG&FfFk"/'O* +#kC&2^Ɔ~z;C;os k{rOFfS"f2.ƞZo#S_ZJ Z;#ˏK^~BrN.Jcg_rNz*涾osnbRKGG'Sg/Bnf[k[C3__S/g +kJjn&&^G&r 2Vo2[Gog)w_OoOOc;nƶkN^3z^R[C/fֈv>S?ks7)r&6.&#ϊr>77W:Rv^NZsg''ovV(&?oJJNrfG7))G/O7_{.f^Rnn"//3O/.vNSOSSV6~"g)iw绢NFN.Ϗ3/;Bj;S痉 7?Ά8^J'?CJrnF& +J3S'__..R{SR~~zsCg7_>: {"VZ_/?gR6JZ_gco ˛ og ~f֖FNs_gZ.2Nƶ.#?3_[C_KRNr:2rrffFvN +"cs/s?_OC۳OOB~C3NJSsRN.k *kcgòbrn+3ooG:bzF*㋢'7'{Z^vfR#_{.j"^fֶ&c?Sg3‹Ok~^*kzsJJ b ns+//{+ SzK_"22:.6(B2*3ㇷ33.Js*+{+z+/gw__jN(v&^sS:hZ3k*Oss'sjbfk{#/''OO3+b>n~j +S?ZJK;fVV&b;S_ocR6&Šj3?oCSg#.>~[{sWc3b&f*g'/*rV(Ffλ'G?_[f((>3s#3'__OfvF.BZj'g?#RF&#So/_g;V(~_翿_^fS___gC^^nJ3_'W7O{F6.r.r/g_'/VVvK_G_~66"[ۏ_G_snz[O__gRvvFr"Z/'gg?s2&v(6G77G3&6v~*k#OǷG&Ff^[ßǷ?OfJ*ZG'gSvVVn_'c&ff#{j_??SvF^zO'LJ'[&&>2Z77'fFƾJO''Ƿ7wzF(VFr{[7WS&^^>Z/c3'LJJ~v>2J'/'[NV(V溏'g+&fFF^{;/3__;Z[g;&vF;:SG +6>SoGG#nf66&.Jg[>j33Gw?b֖wg/26FvFS/_7wk[K'?_OnRN;;?/_G?FFBO.fvv//? ikfƾ.R{ +gn&^z*GW)OfV澾r)7S2vv>{Ϗ?'W)>FB +/ff*'O)'zFFFfNR?77'Rvv^ûj_')'rfF>rZ")'+fRZJ{'ifFκ+/gW)Gh +/)'f6V6fN +NβjO'^N2KSWW_"^b"^&NO_[RFr룃#'W7:VVn.2kWw'.^>2/'W732~6V(~b2.zcGO6&ƒi6{knjϟc^>j#3og)N& +#R. /_:vF*?GW)?F&^C_'/J.&j{ WWs{fVVR#[oO_3NfF2?o'7'S NFbBk#SO?SR>jo_G^^.+kzk3_珋vvBj/'7G7g{.*Zr +/[ ~^sS7+>^nb3{orf&/W闇Sv^>.n#cs C'7ۂ^66vNJ;/?*bn&&RWwz~2Bk+J"nʚZ3Ww +>F^f&zogso*BBff +?WW_f~r2 /3[+br{B÷)Go~Ff^^ osJr^:g)w72fn +{{ScCi)'fvV&ff{SosJ2^^N Go J.:J_o:bBrz;b+_W7~F^N+og_[[[*jz:n&^Bw?K+NbzNNB..Z"3gWWSFff2*'Oۋ +jš2~o7 j~"kSOz2J +zzG'[;:^&~r +Og?O[j :2&fc'g's/o +nnnc/O +~~&&n~*'ϳjn^^b3n^&Nj'/S'_O["βO?/+zScnbnRZrjjZ+Jں2'_''g'_OcNVVV((Ɔ^R;r ?3soi7__O6f^&(Ɔ^n;gGg'_S:oW)WwWi>(vfFv.²^"o33k[/s?O'gǗ7'"Άֈ((V:ZsK.ˏ_'33WII)g˻ooBV(f62;'Wi)7糢RKOssgS66v((B~NgGgg__LJjSS[{o#&vhHN2OgsO7wח_wi ǟkK+>f6fV((vFO7i)okg_?s/C^66vvfV.R.~Cϟ''gǗsBr +ۃw)'s^(Vn??s*b +JK/)׷' + zR.R"jJ2Rnvv&JCw{J>rnn_oC{.~nZ/Scf>br2##[{C *NNnBjGGLJoKv2J:+S +*s[s__SΞ~23ۣC3Cr&Ύ~v.g77 +.RRN>?ϻ..Zc~&g'[c+B"*o?S˂n2^Rffn)ɉ))/j"bfN/B>oG#J.NsZ 3_'ꢎ^~.B>Ffz'ggǷ#2Ξf^zz3__co#.ffK*jkr^f#SG nrjN>BOW'JN&Fv633+JƖ> /SK2>{oOJnO+6(h&ZW7'r^^RÏ kJsJ:[3 B&6J[Wg/:ξ~f^^n/ ɉi)oJƖV3/O?S&kB'7G_/:2^^ #Wǿ+^Vhh((^SW)ׇoB^^&>?GGs.2rڊ&&n*Z2 +W77g{rF&fZ鉉)G?SK.VhV//SoZ;*ß7)?"fbcOǗw7Jf(V(vv~Wii)_OjR>>''c^ +.[O32&F.C)ii?:~&F6v))7g'SR(hVfo?".2sK'gsk&^>&>Z/'Ww_#b.>66VhV&))w7o>&^ÿ{KK;K**j" +3#n~^6&z/_gww_SS^F֖FN3'77gwO +F+KKK*z2n.B[''oJBnN~zS'73*jۋ.>f6?'_Ͽz>^>{S#K.Z s?_o2枾&F*S'j +.>^F^Z/'_'/~^:sc # rNʎ~^^Ks?_3n^R?wWw[{kZ&ƎkO*j2n2*sO.zC{jro?Oj>^^>&^n +Zڣ SO2^2Js'?o{R""[*F>":"N" g;[zB cG_j+;n/ RRNrZ/kBs#csso__2rڢF&~Nnr:K;".>>BkzrrZg;OCZ:z"s?fr2n~~>>n_Osc +2Jڢs_"C;bBr>3oR~RgO* + +¢{K;/Ϗ{ۻR^^~r2 +kZBCsC2r3cSkr>~_?jn~2b2k_O'/ B22Zz3s.BjZN3/jR2RΎB?Kj#KJ:볏srΞ~^~R.[ {/o3[zJϏﳿo/*Br~nj.^f*3o/gۚ.>:c?3[ZzZbnbJo[k*"rRr2Z[_rR/3b>ξN."K{3/OsSOS#[n>N#krڢrr>~R+o/O?os#{kJ +kCڢ ++ +ʛ z c* +NZŽrjs7S;;;zjZrj Kk+j*ښKnBnBrN+s_''s*BnBϿ3:r~22RR^:kKSsSs{OCr.>#Ossc~f.Z{ó'Ww_3fFNBBJcS;:j?.c2. O_OC/K&6^.~^fJ_f&nKgggwiiWWj#k"8xh&jsSS3[*rcwGWiɹ g&~^&>^>6βr>b'g'O'Sr#[KWn6V6v"_Gc ~VFNwW)w +2'SCoǟoB(F7W)'SRzR.)iW'''oNFfb/OJ/bs'RB>^(Vh3gN6^6nW9y)WWw';r~ۏo6.vVFK'_k^F(88_W7orj֖o9 iW'ZN~2nN~:{&Ff&Gn>fv(h(&_i7'FFBs)_g73ΆVh6^Nw +R&f*7/kfvh.K)ii7s:n&Vv~{7G.>nn:?'N^>ff+v(hVfRR*i9IWg{&vfgGg/rV6Nn{'{Z +R"B2)))g.(hhhW_SrfhhVN7GG>&~2nZ W7_n>^v^cGw7?FN[w)WOZv8x#S?Og2 ++joiɉ)7_OkfF&BOgo~V(hvf7)W7g/K8/GG*RnZkGgJ~vF"?O^ƶ6&R2iiW矋VHHOg__s +&f&kS'W)׷?Kv>Z?gG'_*^Vh(KW)wGK((~/)w'Z^N + 3g^Ɩ(V6gGgorV(6^;WWW[rFHHHVn3bn^.;s?G7GnFzO'G'?sr(VFw7w))?K>6V֖6c?'''g*nfnJs.(63'3F&&'G7))grV(k_OC^B{oG'vVv6CgGK:&V(v^f&23_7)jΆFfN*oo^6f2jk{GZ&vv~k_g^^n.3O7_3B^FFnz?o_sJN>B:"cO7'O#RVֶ.+g'''?BΞ2"NBO7Gc&F&~~oSf&2j +s_W_+nF&nzo:RR>+g'''O&/?/;~F>N[_7'_/z^6f~b{?+"r.__o3jξ66Bz3_'__^.rR2""wσrFFf~Rz;s//R2[ +:Jz;?_ob>oJfZ2gLJ_/*.>&&f~"K#Coʲ2 +oSRrR?'_?">>S3n˂.ΞO?_'c22R&k3OSk +'oJC_'{{+~f&[O*rj{k2ff#og##[N> *2C?N+sscOoc۳ R~Nn3O*J**N&R2J{;*zn2+Z:JZkS?sJ"z3o/KR&& +BjCj: r&."rZ/?O#K"N.J* +j+3oBƒS3/s/ZN&RZ2"K˻ r>...C/_/j2BJ˚Rr:/?/ *#+{˃'Skrf&~z..j k;~n2/CjK*"3[Z+{cn^r{k*ˋRnRSo/O3Kk; +"Z ++2z#o/##*++{S/n&&RZK+rBKb22bz +O?3cZJ"n;+k˳3 +2^2Z[s;Z"* JzB://Soo;*2B+zJjz2BڛS[cs#ccK3Ss~~"Z +K""ŠrrRr";3ooS?;zz;ξ+J*:ۻ3s[{"+{b:j.zR"++K˻3CsBnb:ˊ +jnnrK+sso;[KRNB"z+ccBr" +jz2rJCK{/socR2rk>z:*c3oS?Oo/oS+.rkO?[2".N>2"k{*B.+33{2jK˛33oSS"N +sCr"Bnn.nnJzj+so3sSBBJ +KK[3*"22::k//?_'o{2۳Ë2nn>Nn¢C +.rKSoOsۛz""+sS//.>Rj;scjJ"R2.RZJ;{##K:"*koO?3Brn.Bbb"+sO_sj.n23k".>RRBbJ +c# +ں+co'S; +*jzzj#SoOS~^^~ +BNn2.br2*Có3+*JzKO''srz.r+c{o/# RK3*" +R"r2r..;j +Kc2z +/g'; ; +[ " +Ks3 + c3+.NJcR⊻+z:+ *S/Kc3s#K2S'_zb.rR{ۋj/S˺2n+S** k+ʚbR;z";JB.n3 ʺBb* +z??r#jj+{#;jzbš3c"2.nNJ/?c˚."+Z2.b{o??oKrR2 +/CK+3[+ + +2JJ::{[*N^~2+S3*K3*zZš//3?_{ +2r:{zjC;kb"b +++K#cs:rr+C3J{ +ʺJ#[crRb + *j:;CKj +ZJ +ںcʲ.>2* ۃ[3kkj*;C'?SjnRz +jZ" +k*::jzZ:JSrnR";[[{c +* J ++:Z{s'OS[+":ZZB+K+j+kR.N~.b;S/ʢrN"*KCss/S3c#3#kK*ښ;rnΎ.rnnZj*"2.n +ocˊrz+KûSS[C[*B.r +'O{2rrR.rr2 +z*#">nS; rRrb cso? .rosrξ~~N.r.R2B"K +ʚrb?o3ZrR3sK;[;3s>NcOϿo[ʚ.RZjZ˚"RNΎ"[//s33{..bSssoϏoO3N.s/S{ʲr>njz +"j;JZ"?oRN;ss[[K[#:r..Nn" K;/o/*:{Kzj KKk:n..k3/+bN +ccSoskJJڂ.NzkSKbnn2j##cj:kbj +*c#sRnJ;* + +KsKJzJ:nBz:S/sz"+cC*zz* brrrRnRJ[//"Z+K[[[sS; +ʲ2ںk[3sC[ +[##+k*rbBZ;CsSk *JK# ˻jb"z 3s; +{33s * kKjrr.. +;ۊ2"ZJ;sOã[*rB":[3[+" +{c3sk ++k{jbr2r.rbz +r.j*jJJ[ooS3s/czZ*{CoC[[{*J ;*.^>k㳳RZJKۃ3_S/#j"BbksSsˢbb+ j +J .R2rb۳/s+22"++k;c/S/3JZ""z +*SS + +kK{c{ *zbb BR~>RzKoOcJb"* CSO_O/[ +r..2"zJbbzk *zz*; zrr.RB++k[kk*c/oO?.nRB‚#c+ +Jj+K˺z"BR"ʻ:Zjk K?/z2n.B2z{z.Z+[j:222b +/'Sr**kk:ښ+[{c#rRr2b*#{+:jˋʋC;*2.n>N⊣2bJz +J ooSzr{cc#KRzsCKb: +o??S2:zzR {ۃ{jBBš[cc{J {[3s ;s##{.~^:[oBbzJJ" +SSCÃ3[ +bbJKJ"ZJk;۳os# +"2"*#/OrB"z:Rnz +*K*Z:#3S *˛3#cc kjZR~~Rkc/c*::Jz:br"ˣsSs33sSCZ{3s["Jk+jK+jJ"r>R2[J +k+"zz +k;:zso{*[ kK; Kz^r/S * +ʺKZ:뛃3s3//3zZK;*:"+k +;{[K kRR2B soSsc+zZ"K{:k{;3K+:#3C#3#K{ ZnBk{SOjFfZ˻j:bB2/ϿSc.>.k3_.23Kjjb"z;;k˛{3rS:"/oN&/''B S?2.jO''rffr'gg/r&vfRk3g'3:"r+s_'/&~_nfso RN^N{b>~_goZ&f3ogO*nB?n>&^ZC/S*brNR:Ss+ +k3SsJ2oO_*f^b"os:BoS.~nڣϿ??jrNb+#OcrRb+Cs>n3?__Or^^N:{3?_σ :2{3o?kn^^"˃sKBºK3;rjc_sRn+'&f~C;jbr"k_;~ +S??sKN2Z?/{BZ SOrR;?g_Sn&nbZo3+‚*?2&^koۢg3 ":3OgOn.;#s_Or&N +zzbjskNz3'o{nbc#Zb[osjR3_j^2S/C#kz"{o?{Zn~>BzSo/.NRN{S3#co_'S;ڊ:oo˲NNr**ʚ.;S_CKzR2RC[J ++{bRr+oz>>~;s +ss˚.BJ//s+2. ;J+?_?szr2ʳ?SN&.Z:꣛+*CC Rz?_ "B.k; +ZZb +[Kj2B"J{_CB.r"c 3/S+ +jS{kBbzzkˊRr"nbk:k{ +;[S/[*?ozZnB.j +z+Z32"";?Oo +R..2zB*z:*cZj*Cskz2Ks3/+;ZRBJj{j"J*j K:jCo/ckcjC*n.Rz: sjJC:*;/+#j.RRZzjB *2b"Kc#[R + ?CJ+nrZ;ϳ [#zZrB[j"zRj c{cz;#O/{Sʊ>>NR:2jK22J;Zjzr [o?oo2r2"*br +Jr* +K?C+;kb K//K:ˋcbZ:z2.z JZj +nZb;[+KB2cO?3zrbKnNR;;[kZ{;*zão۳SBb*: +.K*; b +r2{CS +J.Jjkc{c#3:J[kj{:RBJ;+˂;SsCO[sj3*So+r..R> + +*{ookj/C/c[sjZ .Brbb [nz[oO㚢 +jzۻ;sK#*2 +j "b{{"ZںZrr*{*+/o;3# S/{2{k.r*?j:n +" +oC CSo;2R"+۳2br"[:z/k[B"#s2n+ZKo;j BJ"Bzrۃ; sz*c//3Kso*{:ZZ~RcK;Kj +jz K+{zz.β{ +KJRz"Ks;3j;[[2 +#b>BKs?C#2zkj +C+.K Cz.k+n [B:SO+*"CSs¾Rf^+Z +rr{2.+ÊK2SO#kb> cSb+#b.3jC/ cjkS/zK;^J;o3KbK.KzR{rc{ 2jCB k"o?s.Jsk{ËrK/ +"2ks o*Z+KSz"jr.*[ +/3;*/+‚~"ko+ZJs+ZZ[ZbZ:c˂"[*:" +{jbZ2+/{oS +OÛs#⎞:RjzC bk +BƒS;Sr*zbSrZbbkB+rrrZScKOn+cjzۻc낎.sk{2~k3; +jN{ss#*.skc ~>ʲ"+Z>._S+c3 +~s#z;bnn s#kzZ>r/;KJK[KKR soo s>zj;;/3*j& +JZ;j^ +{ S۳. Sscc.:#kZ:J2B~s33:>c#{?/kjRNڃjoc"NBkZ3ZbC{+/G_K+Bz:{n2/B2.[S'B>J+ξ2{RZÚ? Z2r Ksk'oJ뻚JjN~~κnËb3??Jo  ;k[~2O_z^fRoׇR^FJG)W2v.ڎȶ?W׿ ^hk(h( +CiGnhv+;HV"o 9 V)igBV.WINֈv*7i RFV'wN^(gWb>FVFb?WiWg6(vRC)i &(iWsV^*;) 7F.[׿RhFrIBFv+w3&֎"iwv(^7I;>>ϷW?vVF^S(V6i[f((o))2hzJɉ'[V/wWS66i&֖^)7oBFF>*ig3KVV6^)G/NF2>{W)'CvƾgWS{bFFSr_~Fz/)+R6h&ivVffR_i)'Sf(6^rb)g.FNrW׷rffJ')RG7s"&Fv;37?;6Nϗo[ V>B2CO37 &vV^kCGV(Nn['K(fZRj/g3"V^n.{Sw&2O7_(vwGVfr3S*FKc)gV{{?W) +&vzۃ)g(~:#)hhfNR)i'&.2[7v: +((f(&;'Sn22Jwg3"׷ +6ֆ>:/?_Rv;oc'GoFvrcGsR&VvΊGg#n6(bn/G'czwfV&W_jnN+_/6rsg((fZ;Gw_VZ{gWWwOB.{GǏ^ֈvRkW[(2k'7O3v2_sFv.2c/^b_'_s2;3/?R^:k#oo3r2[???#~~nj/#R^C_b^3?ojn+O3盎^ʏ_3_?'&~ro_rF>^.矿O^N2 gS&>R23G[s&>gO{ ~^RB {^&j+ÿs3sN^^2 3Oo3#O^:jk#r.Û?Sso2#SSJ겊S#{Άr;jC J#+>#ss뺏jf+zo[jN;o+Ύ~ +S*jێ#c.N>:cjbCb2 +:c+JB3_s>Zn~jcJb"nK_gJ#"s>:. r뎾+'{R Z»O^Bjbb_BBZn"[[&2*sc.~[s*3Cj3>"../ok2j2/SSccZRcr>/3*>Jj^~cs뺂>+^?Ck.^#O/KjrK_#2NZo?3*2>r"bC_cR2Z:{[R*B_O&.~./;ZR[g gsN.Nzk'O'j&JnBOBN^~~s2 .O?_&.gG^"~ g_j.F2no''2R"R?"6r ++ǟn6zg_ŽVښw3.F:2gJζ JR_Ǐ+fvg3::"rw^2n +n z2sǷg†FbRR7#vR.gwk&6^BjWOJ&Z:)G +VVF~W)crvz7&F>k{[(Nz37r((v2+ʿWi'NV#s˻WW~#[G W"v(bSiV6ۛCGW?JV(+3WnsoWz(. KO7n(F+SggfS'G֖'g72fVv[[v63j6VR/J'_rFKo +_S3 g7?'2[۷OO'O.vf/w/B(^;{Gw/*Fo7#+F#?G+ +2&_*jrB#ogC3 ;c' +"[ncCǏz;6r;o#*cz&j?'ۊ;:^{_j{#gz rjZrJ[B^CˣN^b;+jk^~c +"r:&>ZCk2 +ZJ#S>:BZ{3j'C:r"+cCz{B˳Ro#b*3S2zC sc:3CjB2+JRzb2{S3bs˚ +/ .r;22{N{r3o[sn[zk.KO3s{N*Z.~jsc32sjz2[KzNcâ*rcrڲ /SSÛc +"+;C +σC"Bczzj{(6rOw?(Og[>6V.[OrZCw/KrvCw. fs/[^F7iws6;)'[F^igFRW''&^Fr)^ֈfJWWgֶ(h)r^v({)7n~^(׷6>^ Z&f~/GN~f&N''/'&f[g/..vcg'_&&&&_fKw?vRw776V&no''~v>ggg +vV gwV&WGw&hFg7)r6F"izf(6hN'icFn?))h(sSWσNF /[FfGC*^FSʟ nBN+/Sg_+^z +os?wr&R#kGBn^~CGK>'KvG'F&[G7.>V7w)z&f6GwSVvRG7i?)J&G.fVvw'kv&[7/.v6KSggk{'k~&_cK.&₳2oO/ϋRZ +'o.ΎJg[2.Nf 7zvK/3*>f&2g&V +_W> g)Ͼ&fȆ_wb>֊n_7OR~&wׇJ.nVF_Ǘg"Ɔ.J7G3^N&rogo>>^r Ǐ. +/s#Rn__oKRfBn~c3[^C&^{2_+{2/:jr"'O(k'(:K{?3*bۿ?s#hR"37w^趲 +/>;:_WsR[ZW7'vV~:.zg_ϏvZk_˞;*;g___nz2 +Ooj^KK‚?~ksz/kr2ʳkZoJjz&s#R{"^r/ +S&RBrBG>B>GzSfn2^J3Wƞ^~_RR2b'2'7.:J~n7_k~._7&r_~^3rC*7R3z{?SG/R&cv?sgr>^[vccS'kRc?#g.oR^snRrKC^Nâ2;b>:CNn{sJR+s[Nrc +r:o2nk+[ʋkRjꣻ{~Z#c?+".O+>z2#zj'o3zz.*b'?[ +*>RjZ;*nCsCrjnk#jj^b~*ZR#k>O3N_#so>23SORssff"cs+ >kc*"_o~6:kj'O>BSR/g+6~ gfʎ*dz۷k.˚j'B jR  *RΟCo[+R~O>[zS+ +Z.^BkSK^3.r^c?cS:j†3OJjbSC{k/rnnKOS'cSS7ZBcK2sǏr~⊛G'v*+"[Gj&k + " "J +_of+.χ+R~S_? ;;N/__*cC+f>cJ;3.f&[Z& ;j.z{gk " S: +Sb[Rf/2" +O&CO~ ?#3NJsoN/?+>Rs^C_RnB{Sˎ.r+SgrB[+^:GK&n;2."&GB +Z2?_?S;nBFƳO/+.ZvO/;Rr:/?/:z6*Sz+63JÛ?jR.S +:k+2FJr '#zfn/ J&J[{ + +rC{rrKʃKB:s{3 +KK{+KZjkj + +rSk 2>/Súr>cCCb r^r +sob &n +cS*jk.Z*㏿* +.r{3nnj_ +2R_oK>.*[;_3R2.~rBos'Zj2B ; Jrbz3c{sBRnB{ +/{3njSKk* +#*3B*;bZ[Z/{cjr3K#: +zb˳ʢ+/Z:Oz3j{R+ڛRn"S{k˿R*+zZoJھrN3/+RRcۊRR~okS Jro{o z/^OoS _"v~*'G +Zۋb:[(& +_ ~hο'6.?_ON3&8VRSi׳(H>nfbΚyY6vBS)>8x>*S`!IXVSIaiSX iy!! `iW`hwa!CvR8Xgyf`3)NnH``VS!g>v8X)YVGIa9kF6x`xg ya)>^`k'!n6VcG)a9B ~wy &xXx.ra'rBwه3"vxVG9ɟ2>^فI_Xֲa F@Vga)/v&giYr@ j_ICx@HgaasV^' >րX(G '*R(`֋!s>HfOY !"R6VS)gn. o_ .؈;''72.&8 (# _:SSK)K +6~9I7֘jkIs/f.oWi_^(_O' 9SfX FSs)IfHXgi9!n& +C)!# XFW !gH ?i׿&8bw9w֘6 ii gN(#iShX;GiIiwh (?cGinXo&6x8J?)i)K2֘+w &V8js)3R&h&WC8ʷio Z6NZ _[ksif6j9:x/#xV^ϏWw88?ov/;_S66. IW{9Ozf[ g'xh&j+iio6(^rsGywCHRN)9?(^f '^>I?ǟh(憾cgVNfZ{I2VN"s?'gf((r'7Ov^J_?ZFv'_F.)_ǿRFbWg&nۗ'kffW_?궖fNo'R^"OGOgF>N&gs&&f?+~v~Ϸ_'"~&6'S_G&&G_iRFGOOwRNF&'^>^6^F)_fR6&i^F^F;7n^O_^&^N6R_i'f6{_Wff&oO&&^F/Ǟ&&^O"~&RC#:~&KO'w.:N6sSG~nf#C)Ǣ>KJ&&3zK)r~rƖ:JSV[.O)wS^&.ksg7fZvVB{C'~N(on^rF*כ&owIFV>?)F^(V'o/ &^/'3(ϏgN/W9s~➶(233i&Z~v{9&n~v{sg9&&ʻ7 &3~3i>ɊF sFVv_ )nfKvZ37f&'^(ۛO)(.{g 6[KVf.#GWF˲΋3sWI熶+[_ I^S{ .öno9f.V{g3{IC6._;nhNs>.rV{7i~JFrW#kf3wkj*FNϳ/g&.O7.fr.S O3n'^k2GJ+&z/'S&boG._j^>[;gS~'bJcgs?fZ?s2_;FjJ#jbJ/o'Sb +SKORoo.:3jO~b3[*~k{_">fbςK'?b*R ˣ/r&#c;?__R^~ ;_;~~NKc/‚^C'zRƞ&J3/oz>&& c3?KZƞrSsz6/ +Ɔoscg*KO;s'{f:_ _k?o{z*gc+ƶnK[OsnzkOgGNb{__ώ6^~3oCvFR[_?)z6vZc)SZF^s3Ǘo>V2ggoJ6s_gNVFf[?g'ggk6&__o(f+____gS>v(^￿_?R>'s_SooBN~K?SK>n^OO+&Rf3.k3[>s;_sOj3f&~o//o2.fNO og3>J#'_&~{"3ooS +&^f S2^6&3'_B&s_/ +66??'cz(k?'/nv&s;^ž ;/ '&Z._"fb/SZ +Jfr[sCsr^S_rnJks'w.k3{Zfn+#fN;_br.*'[kRC^F2_g.j'_ZF~OS'k+~6>~3og .^~kg^f3'S'nNR> +['g^S^nj3"Kr&?g;k^jOR†o&R&Rc^VF''woJ"^r>gos&6rۇSw_v6 +3gK:_BJwGoچf^^k6vRriiRF~V^ +k 2VFi)c(B 'H8v(J _)׈(Bg)hV g f(Hn_ i^()W;IF8&_鉣wFV* VV6G>'W+R7W)jNvb#ΛʞKOsR/K)_6^~Zfb&*i2^*ƶKVnƚ)3z&{i舖I)_VfoIWFȶ&#)iN(Zח &Gg KVFHΗ'?W>_iÎB& +_z~۶_Ow+F+n'jnz/Rw&^֞~CW'#OS&ώcێV^{n[i'6>sii)FV*)W_i'FV&^{)F8h·)WH6("(((&'wS*(hVG)'VVhOgɗN(v{gO(J+ wB~~v2ns.2fK.˗_O+~3W#n~r3'KBrj':s?cN2g+S7S&6R_s'&RΟo'gNf^32^&(~;iwrR/2釲ffƻ>_i:2^FJ&w)鏊H +F/7WW(zi)gnȈvחS_ +(n6_WwghN._)WgG(~SG6^fnK?_O6v>SBOF>;'.?^^ 'Gf^R#'w;3s^&w^[[>c'w2fNW.B&s2*~&F'WB[fv7^/>V/)SB^hf3"66.kǟVBGO+6vn*cG'[>6'_B6.sj +B^j/s*{;R[z+O.Z2Nk/o2Og2;"^3Ξ3_ +"R^o[_۞^sZ&;?׏bfN2N_CrBZ沆z?3w(^OGW7s*ROǏ?NB˾oB+^;ggN_/:^n23#o3Nf//33gr Rv&:S#wO?{:n2g{'S~r:Rg?2 +NG^BFJGnBgξkOg_ò&ZnfSgC&F:s'?.nzS_Zbrb?;F+C?;zN*3z:~KsCG;^">&#R;.*no.nSZSڞR&wo+3ZJn.s2Ê.S2/B>"'/oOZBS_^njnχnN2'7'S^&~oGsۛ;+c'CcË›Go'^>.sgJΞr_>KS GJn:ú2G[JB[B^+_ +JZ+/~k3 +2j&nOJ&;jC*B/fRG'o?~"F"'gb+>NSs{;ΞvssgGcC~^KC;_SoFfk[OG'_R^FBrggn."oGWj^n;O33N&fbW^+>nooRn +;BO +;r{.og"KZ/ZoG[Bc 2rK.3{[jn* +f3Sʿj:O (fCbGϛ(2_s>Vk"CbsO77.J'o^rRj7fnc7^rz'_?/RN"Jcn>{Sn~n>ZJ>[+sr{+²:b."o#ʛ{:*ccz{*/Ko/;F* +g/O~F.O_&."[Cfr&NS&F&b?w'?^6f/_fbk6^wGb&~'G/~n>+_ssRn.ڊOS3rz2s/2."rs*+[;K[/K*Rz?Jڊ"B.j## 2 +3s'Zj"Z3o'CSvf2['':&BS/3or*^R_ZZRR6fg_~ +S3~N~*.s/S'/R^&/O_gJNj:"'_3 +κ"OS+J#s[2R> ;R*jSS...3?/O*ʛ.NKk:rJ/S[Bfrn2?g7w?{>6.'_3O.ok n^fnC[3_R~gk>g?."kWBV'g.*NfN S+~&s:7jf?[;fΏGFo?[R^wΛS3nϗf^fz7'gFv.&)2jo/Cr +.*z7jc;2WWg((^WS.~v>2_(s_jSO[6֊f/(f(߶Fr ++O_糂[;nR6ZwJ7'r"Kr&.^"R S_+z>BN&zozB +g +ϊ v^7i3(hvR.׉NFV#3o _R3K~3nVN9iLJh^/W9?nR&(Ȗ;'c_ +js_*6F/Wwwk6Sf(ƚs*JGCJ CZ^>NSOOzfwiǏ/^c.~BGwRvRi'kfR^&Rjw)*rR&_ +:nFs3#g&hHKW772>ƞf)3j2fSKff[:rR_?gn(G?7O">f&CWWKZ&.OojnfZs~ +/Ov(;'sg7o *&F>7b#oo&"sNSG?''R(hb_o;c6&j/OC6FZWG+vV/RGkk/FFJ ;Gw{FF>NVgGwwvjr iG?ÎNC_^S?s'wsv..Vsg7W)7'rH&g)g3K3&Os_7g&?חo6辎C_O?^V z3'wFJ'o_8^ZrswsgVR3CJKWw)o(H^R?)Iw8.;Wg vKBro))hv66gWiV&/Sv⏃>gW׎nƆ&חG62~KcϏsϛR">s7&RΎGggV+&B_'?j'B';^>{?'C㶖*"F3Wg+gBVVCncKoS>/LJRn>_ ^F +c^SGʋ' 2ϛk;[&f//R+bf. .cW&:r6^:#3_'~(&2._^rRK..r.Sn +^.:Cʶ{Rk [bN+ '?:rNRnwSc ZK3 >/+>_g +"&ۇ &#?nkbOb^{ +O{W膛R3:C^Z2__ڂnƞrz&& k?(n +'gKB.g^S[N&ŽWRK{.R:;2;g*K^3&/{"N+LJnN2::3{?k7&> +{23.o.kۻ2˂jbs.>~K_g沂z 3o:k#K[3WoRn>B*gwk gv&/g &;N.FNnb_j׿F(N/wS3^JF^j:s'[/).(R2C?w(ʋ'ǟ*z^.Fzo3vG_{FK*oJ>ξ:'cSGR^6fG''g~&(V2w?#Z&f&.~/'ck+f_7j.VV":[k.z>>b:R/rS&澎WϺ'G^3WobC~N.R^krS_2>N~ji7_+Kj>~nZ&N:z'_wRf2o[^> +_wGZ{ڞ2Zoj[2.>N +׷o62s[NB~:+Ss*ξھ&Zǻovb{7n^B[現S:N:/*{jN~jz7R +{"O.2 +b"7_R +*R&˿G3:c: ++:oZ_R.n.'n 'Sk/z^J3"KS*B'B:jb[OkoR&>>.3g_;f6.";Os [?B~2#Z'#?N6^bڃ'O~CfZ+CO3[cڊ2c#j[ +:+sK[B^Zj3;o .;z/j3#znSnrSo? +s[3jf>Nz_/2F;>6rC7).Vr[wZjhhZ;G  s^v# 暃vV2#' +&&r'_W?Ch&V/7)73KK(6g6[VfRʏGb#fnRs_gƞR{/'£ÛovJ.N>w?FVv_wfVh^_wǟgN>62sgwjhN?3úۇ""'oksWNFfo)7'FV(&g7CwjVVo)Wrcch~.o?)G?f^f2/'O"Gs(fKnzϷj +rrBK{Cs{g>&sOr7cF67o¶(h""OiȖ&~/wg'N(2+kG*{SG;sfOzcjZ#K2BoO~.6K;Nrn;_ 6>S?KofSocz/ +;Nf3'++΢~+?2g;'^R/cNzj*>;OOr32ff_c.f ^2_OLJ&(onS ..&f +r^z&frci n2n&+'J?OnfS'g_*r6^&O3Ǐ~&nz'G#.B/˞jg"Nn??+scS:^Rz7bf.bKG~+_Grvv&ÇsSnfJ{ooNn2_;['jr2^;SOKz&nsg'~6fbG/.v(#sW)gŽFrۗwJ>f~o'grR&6fr'w +2&/?g[^&oO_RV& +Gs:fV&j'Ǐ&&F>r&SrvS +Bf3gLJffoo__*6. '_nj6rKoK:&Kr*3[jB.'χ{b2v:ZGj~^&n +'gvNLJG~hn/_G;R>B*3JOSjjbSo:Bs:J#ڲ^#oꂏn^^~**SrCR.S^:kroO{c>.>C_O;b;.r2zOobZ.3{/^rZ?3#c{N^˚Ϗs;{ 2ڛo3n&2oS_?_~f澚o_B>&._ +*b2?/""Kšj/bB:+ ;zzZb32c/:*K:b.Z"zgOښ.^J*s +Ύ^ssr[+/Zk2z:+*jn/+ +33sn2;[;3O.J/gO##>~~³?O?f.kO;b:;obΆ[Ksr㣲B˚ ڛJk/#2RBB3NC3 +S;>Rr[OOoS2RR"OC[o+r:: :cz# jÛ"ڲ/kr[?c"RRⲲ2gS +ΞZ3 +.&.?O_Z>&ko~"/sKsz"[;{3 +Rb;k+ +ZBJ +;[ +bCN"ZoSs>rΎ2Rs'+f^r".JOSss&&z##{>kJ"s3 *nNJ2K3s/ûnn: +.+?s+SO2R~z_Gbn^#3gg^~> oO3_2^OZ^^F2s'O_Snj7o3c+n^>K;+N":zKS* R/.3s +K>N'o +nfΊKSb^';z.rsKGC +^NnKs/#r{b/[z[roSڿKۻ^22kk[_&F{3FBnsWs&+r##'c6N_2fV6OOʞ^6&~ʏ3'Úrg3N~rBr7۾^ڲ_'[ +oG_n^k_7Ƿk.(ƚ +WjFfB/'3zھfrS7n..+CoRfNb/>27g(6[GiF'GW)#v(f#'G_6~b'CSf^g/k2>ϟsofNZ3g7_C.>vfG_2f;B2^f{__o+>^R +jR^>fnnw_o__&&~_g.^. +#/'J&/o?/"f~n.;O'*&2n_7gBbζfGGS^>v6Ji'V^[o'b~^n{oOZRZO˛crksKS*jzڢR+?s:.N 3Sۛr~n""2*?*?"C?:r^ +>_?rR.bkG?gO(kGrnB2_2z/ :^rOz*/^.Fg)SCgv~S_iwGk'Z2FB .;woS6R_SS#s_jzzsZ6k;?GOG//6hr))7g'?&nVnGLJ"F"(^Bw7"v{w'b#~^'Fos?b?n/j___^'*6&7_~ƈ&~ sW'?orzNF^RG"/&fWN+k^.{ǗF.vF'g>Nff. +ׇ33^r>k22b^K&zg +^»ó>bRbS/og["6&JNJ[{cC?;fb2#'Cs"JZz'*{F J.zcc;R.#_?g'~FfNS"[ן'V^ۏocS#n"2+_ χrRb^^Jj&Κj''+nN^R'SG)jjf^Ύ^o' z^N'g"...N*n[3j#nn2R[ j*"z#kJkR2kso.{{"sZs:#>BJ_7_SZvr2_W_j~ +CgGs.37oo&ξ.z[GϛRz~. +3g/{Zr.rcRgS2S3[:+[_SSR^/Zb'C:&&ó?o:s2~ Z26Z_so^.z/KJS2oCs2^ ˇ{2J"/Z:j73R~o{&6#S?Ƿbsv^kws^ڞv^_~Fbn6&g__ζFN‹[sr3[zsnknf.k'Ǜ'ƲB 3_7k +ƾ273 gN2NfnWsg.BVNRz_/s^r#_g"zFb: sÏKr.Z?J;Z;? RsOCS'2~^.k/o^w_^^^ʋOGo^f. s'_wۢ&R"3os2j~ [:Bn^NBGznf g">>>:O?K>Z2s7O2~fv^nc7G2f~:s)^~N?;gnZ""3Or:rOojR:C2:'ϊ?s&B6 +"_gC"&^>fr/SG*ZffGjB~RWw&^&2?j*+~J{/sRz;˺ RS" &.Ss'S:2ff:o'Ss Z":R [_ +Fn^'7S&6f^ g[~^^rgr^>S+ϋÿ+n^2Rj3*"oK/bB2[2+"#B"s[ZSۣ{JCʎ2N_c2Zr~.'jN[/S_"^~krb'g//NnjoS"+'/Zor" ~2{;c'Sb~[/ϣ^nn?;[*[S"NrrS_J*+sCnN3˿/¢&[BN3og2j^J"?/'"Nz#_b&&&s ;_o/_rRNZjN3Cr'.J~cR.^zz GwsNjZrCGrKCr{"Z ZOZbnBg/{"*o&"LJKBsk>SRrRRn;/ûc/"ϛ[B z +* +ks>z os; +[^+ZO3Kb.&*ϣ'sB>>抂//_skRs2{£[#ZC"B ˊ o3"Z&*o_szR.&f[[2_'onR +"2 +JZCjfR2OCssN掻z[:.^n g?/ښ+J&ccڟj r +b~ Ëbzzj#S s[: +csb +BjJzO :2/#3[o2&Κ{ϻ/{kJZf6/g*n^b3.BnR.2*[csN +z:/:b&Z{;_'K32f Oo:NR*:/SJB*K~#Zk#{[/˺ck{{+#c ++ >+ +R +ßz Kʺ3soC#+bΞ2{ÿss*.˟SC +ZRB; o {Z:z[: bj{ + +{ nnS'z&ngǟk"n?oS{#*;>rRKS? R^nNn{o'ۺڞ~oo?3 {&^>C3S?O&>Bns//^kRo{S/ + + +BCk+ 2z2B+kCf&;cϣrΊs''Brn__?C2FF&&boO~&rb~2R''_??gg'_nv nʲnf/Sɉ' +b&bCKffR:c7_3k ʟWw' +.(VZkۛ/>>hF>*7?wWiGYaWfX@`(HHfN΢jW 9y'7W>^^fws[nVh>koǗ'Cn6>ws;fVx辻G)3"B Y!I)wf(` ^"JvN?7IYYyI)WcR^&c'/*7C(W鷟3C6(H~r3'K..zB&"*igfV(&ZOϲ.j/BrNj_9 wW( ``Xx(~{s&gi!a!Ii7 .z;^>2(:;Ck?Gǃ(+gW闷7G3&6>ڿ9idzJ((6F6&R:SOz[{χWə!9Ii7_>Fh(HH88x B.fvziI9ɉ7FkOg;Fn{gggǟoK+ &nrk3_SGG[n{G_Co?FVȸhF&~~~N{+Ɔ:)I!YZ&FƆ6fV((V֖VhfNi)7j2nNsSʞƖFNG) I i#f&'OO/֖VVvfRs^hֆNr;so[+*'w I9!!!I.^(hȸ8V6(x8۷ I9g3+sg_?SsK^nz[/3G7_{frk+2Bj/ORf&ff~+O_7wgVhhֆf.*j#J&F&R#GI9Y!YIkN^^fVVhȸHȈhXؘSWiyI)gk;S''O''?'^^fN*sWivVh(v~3k3/ r&fNkO'R&nZ#g'&Rz3g 9!Y9#^Fv((V(HxXX(gWiy!io?'7_;z +rh(6fRb +Cv^ʛ?'bRNn{GWGgf(FƆf&.Zk&b[ow)!Y+2jF6(H(zs_W )'ogOhVS3s'_ζ6rsooO*r o77O~f>fRBBRƶv&B+owWI!9 Gk2""~FFV(&BK?G7W 7gG'cʚ:F(&7G_n&2?_GG'{^cgGV(&^Z^֖C 9! G?Shh(x Xv&>i9)_G_gO{Vvf +"Os:>f> +s *3g_;~^r3'LJ*N&^>rB2>nn&6/O)9!Y9w'oO_'S2&f(8Xxn.j7G_?ڎ>&FnZBcO_c."rjj"k;;C33N^~ΎrB+7Ϛ~f6N"jNNO׉9 'gJ6(h&Z7ww)iii77g'o2>^v(V;^^ffN₢3/CsrR3O7)ǟ3.>^N.^ +II )W'_[[bfv(ȸxȈV'ǟ_'77{2^fv^fFr+ʊˣ"kz"ڛ_s[s:rz*)^^n~/fFv^Ύ II )7GGgOr^6(H8(V&;Ϗ7W7o?;R^6((((hh&boCr.ZjcoogwG/s[./72ff^^fF(6frrv2"~n[G) I9 ii)O'c Xx^*C +χWW77W>n^n?# +/Cc/? +bJk{?7o/#j:>^6(V6> {JV(R>JOWW'G7 GgggS{F((xx2ˣC/_7ׇ_gG iGS>rJ">(ֆ*b *o/;CG'kRf>J;~K_Z.nJσ26.rn"ζ6&[۲&/7i iW) W?__gg>F88xؘH.BRw)W)) I7 RJ?/.ff^^Ffr[SNNr_s[b^f_WK2fRsO/JZ"&hVfnc''鉉))7.f(ƞFVVV(vF&[wWiW7Wi)/v֖&N~J ;g7Www>^>fV(6f掊;n2bz+7))iɹ yٹ ϋ +RfXXX x&>SaY9J">8x 8h^f^CSgW ɉ ɹI99g;˚nN6(HVHHVVF^[iII9!ٙ)ǟ B^VhȈF~2C)9I9)rfVh(H(zo7iG)))V66v֖6&n??S_wiII 9_'sj+2hX8HvVֶVv/)ٙyyyyyCNVVx X&&rc')W)iiIwGw'OojvfFFV(vvȸZ^2ǷIٙ9 )Wo33چVvFvh8Xh(VVVVFOw)999 ?___sfΚF6֖h趾.^os:Cg))G#n&.s~FF^rz&f^ +&'' +3)חw'CfvvvBhh(6h6&#')!!yW7sRƶ(hx8v6[ϟ_oo_WWg'G i#"nffrr.B6xHh^v"?_77)II)i)w)i) )/^":R^(hh(HfNKg7I9ɉח''o"+[RnN(hȸVh舶.N~r'wi)G'iiW_σF&2#o~Vvv(&NJ_7G׉i )7_ZsSS"vv((h((6&N*'wWGgLJ/rnVVƎ:nF(V{oGg''_GWwRBKc놈(62Nvvv( +Os)i))Wח))cS&vVhȈ(h((V&wW IiwGWWWG/^hhRfh(&BZsO?W7G'_Ϗ/g;vfº*k +&v6&Vֶ&&2r; +*Gg3ǗW )#/;:++V(F6_iWW))/o#z>FF2>F>.2B#sϟgG;r SOCK*;JNfcO?2b2v&^>[_7/[gGSC{^.n^&f^&6(h(ffz3GWGG)i)G_g&&f6hhhS)WwgϏOoSowG_Kn~3n&VȈ((V~^"S'Gw׷'_iiW;nFƶ&H(6v^~/oחw)ׇC+ʲb>6Hv['Gg_Cog7wg{Z +z˃sK::;j&(6{/g)))))2fF(HHV>^~nn*_O_g3rR~2r>~&:"r&(V6+)_g_cS__*ƶ^(vfF oC77''O_)iW7'*f&((8Xf.KKO WG'o*".&^k*Jn^6#gO+ w_'LJk "BR.".ƞ>bN&>77gO?O_WWW WOˢ~6hHx8(f^6vF^.[w) i'oCc/Oo^~N^f(6ƞ?/?jkzrs/O^~+c ʎ^&6F.r:˺" s__/SOwZ2f^6VȈ~#o+zO7 iK"ښnƆ~~&Vx8FkOG矿'g'g_Ͽ__3s?_#+Z ++ۊ&^^v&.ƶFn oGO'wW9ɉi)/hVhvF&Br^&;?ǗW))wS3cS? +Fv6^f(VV~ ;3 7'S3SOo'7?2Rbnn.nn2^vv6FR2B2nzRr:z +r+GǷ'w_O[FVF"j[b.kJ2"_)iOc +BFf(hvf."KSgW)_3##os/?>6h(6f^&Ž&>2?'G_7)WGGGw)i ):R&Fv(hhhhFF(vFV6.jJwW'GCR>&&&>&^~&n7WiO"c37 +*;F(6>RF6^:N+6OgiO o"2f興hH(־* c +Ȉf)WgGWG_CcF2>&^"*rc2^Rj"B"oy>^6V6΋#/kFvVVVO:ʻg99 W"(VVHV*Kb:Kn/G)i 76hVR'2&(hh6*χoϿz?'g *[{7I3VV6VVf~.r&[h(v))ׇ'/CGw Ohh8xxSO;nB_g))i )g/'ǟfF((ÏkrNz.6fnZ#Orn~.&f^.'y9i)wgZ&vkF6^fֈK7Wg_3cS_?kCG+>n>F(6[#kN~.Rɉ7os#vvS?{2R +JΎ;3[g/~F^F66W))G[sS&2'#N&R^(HHN/i'_Ϗ'{R +or^~(VfZ3'B&ZncG WwS[(v. +osn^^2&v&bg?/s{(r'WWW?bks/;kRrcWg*fvVhȸS{o_W/wG(&JZr~N^_)i I g?b^r3kJBNvNΆ&B#?gcB +3''/~Nf&O'G? ž(&oϛ +'gG)Wׇ&vHv>&vV.CWW99_#^~&2&Ff((6f?wC~~"/WG3JZ"fOc{K## +^6Vf.RZrڎ_w7gIWkF6V(h(FF(VV&f?7 !!yIWCJN.*Rn6vFrN&r#kۚCO_??۲j* "nObo3&Fh+s/O[+[OO7Gʲ.~rB^ƶv(>n+3GWI i)7'jC"NFVh&fvKoׇ+ڂ_wG&~Bjco'/*k.ƶ((V^FrJB ?))w)'sZrr2NB~FVHhV6~nCO') 7חdzj['3z>V(6>Ko[{K:kk+jj2*'7G''/Nb._gǟNf6N.f憖Ɔ&.Jz:7iI i)g/n3'G烂(8H(vF?_ogg'oo//{rn.B2{/?S?gSζ&S'7[^f.~&^&rǷOOz~r~v2{ +"N&6r»SgWi)w?b3?O3 +>fVxHhF:?7) i)W?gGgSZrvVFƆFfNCOr2c__N +k +C77OC(hh(6^nNNfrB;7Wiii r*''_Kbx8H((VƞRk/__)ggLJǗ)Ww/ +^f枆6FRbs3&›'ogg;R&RRGg)'/"fhvF;kN&&^NK7wGgokC/f((vf^>ʿWW7:g)W?ookֈVf>f~~)i++3C# +J_Okfvֶ6ff&~v>'iIII3s[G_'BnhxVFfN.2"{oO?_wW)_o3+J2Bbv6^[ +v&2C?g_+R2#3C_ooS?o +^f + +:^2o3緗)7ǟ_/sB^68FFFFnN'SsoǷgSkrFrbꢚۊ"..b??gO_//#k*_'s{#{s#;~66F~"kzzzN^rJCgiiWj?g7won8vƖ^7G iLJ[JR^nvv6rbz&N~n+/_c*^~Gwi)Gg/.^k +rfv8x8VF~S/37 w))GÚ"R +s2~FHnN>3Wc23))gWWNk?_*rV> +.>OWGO3K n'_JrFfwr{#&Ff3_g__"(8(3g_3iəi'⎶H8(rn_!I_ﺺS^k[>((Hh&#{.^F^ziw7 N'wiwrnN^^6FZF6vf~Rf6b3zNBj7'g WiWWW'#wGC8` xhH8&Ϗ>?Iy9i'+&FF(~>^jo'ßg7_J"ZSO2giiOR6vֶh**foZֆn.ssWW_{3Okk ).S(rVhhngG7'sii')#(((FN~_)GiIi)/Sn^(ZsS/n3_'Z&8HVfKB>"_wWgIJS{RΖظVh6r r2~O[ w_GOKRȸƾNK+'_ogWWJ*b&Nn2;S22:G+jjozvH&o g'iy9&6fV(6+.3G7iO/_NvR^fn>krnV~ng'W3{o*")6(h +#G[F枾"CCobf6^Wg ''''GoFHXXH(ZRƆ:?WI_.Ɔ..v(V6hVFG7'**vFrwiK37GwG7w7S.^*&^~Fv26^ZnroG[>)!9_?sOZ +K.vhHx82g?w77) r6(V&2j3'Z^ BOG'/32oG))_n(Vv?>ffrgG7 )7 +2jo'nFv((V62枆Vf/I wg)g_ ~VVhHh(8;z{'3)LJgSB +^Sϟbbf(VKn/_W9!IWf~+#(^&FFo3Os'okW GˣΆnnF>ۿ>&k2>Ww?'_CbRg*3+R3_rnV(&nC j7ɉgK[3^(h&nN? 9W) W'{k_"ƆV~J+.nRKr>:{zC_#o'7''ׇ#;2 +&&nB +6v^B22Os2n.Ξ~2JZ)i)G/B +_7+.n(HH88(.k/g77G 9i_FhN^(V(Ȉv&B3Sb&.ŽCǗ;k/?'i+/?~bV(ff&~~o3_w_GGs'i'S";_/rn&f2>FFF^^?' r3Oo_Wgwɹ''gSvhHF^&^&rϟ'iGg7_;3 f~*O/{:33KZjk[{n>>6(:f&&R?_)7'_O& N&hvF&JK.+_Jz{nfBǷg7wG闏O?_+66^^hF2 +B"gW)gg>O^#Λ/."cCR&(VvF&?'G)I )GS?(VvV(VH>O7Go# +Z3*NbCORNc3"^~&fƆ2BF&NzC#..)G'o/WKBھ"^#N2_Skjjn^fF^_O?+ڢ'gϣ~vV6(VV^¢Rw)WiG)w.>R2NV88(^RNk{;>j+"b~G7S'i iiwzff&F(6&VNk3n>&BgGg/7W'gSOC.ڂfV(h(N.rR.gwi iII s^(((VfjgbNjfc'Cnσiw'JN26&vhfFo/)Gg'g__Gzf~~nJ>^b.^F22/3['RCgg7 Rf^f&.n6zR:7wGg"?3sr2 os3cOC^nhf>R*nƆ&nR˟7)II9 )3 + *j➚hh8ȈHv#o/'s?gw3{V^+'GwVX VwIy^h& ~F))y3!(Ȁ6Zfc&H(8Hy!G y+(F  ``fI 7!BOfhhHzg)w_)I2k6VxH2k77i' f"vhHw^zIgiOGv`8pV2y'7aIv^hh(bXƿW9iWAY_.36`@0(xh?))OwWbw7)7 i)hHxذXvz_IƇ9)v^Xx~[#YaI!qr^`8`F(hrV2I?/rK"HVr:iIc9k+ ?_HvFV&h7ىk~V3+ZW!yIWW Άh6H*')Yiw;^Gb8~:)czƶw!agI[&oxNh(JZʗH.#o( +F3'LJiIS:g:ƟFH(v2b2>>FYiYG8&؀V((Kv9w*WYw7ڶ&S7[.Wa_'(ﳂh(^(.rFI>/ +&֘(چɉ!i7iy_&SsˈHh`H9awx^s ?'ɇ^hxV`VNr+vJi>3g&7^n3gOfGWiwgظj7wz)i3f6^HF8~zo6 aW/SV( xHVVxBF_gW(r;?'i'CY9RRX(8v^&&ևfRwb~HhF9b9)I +6F֘Hhfh~s'IIIWFβv{^W_OROWnF(hk&x/*wƿNV·!9i?+V8 ``H` ._s+K>v(F>GVg)W'^R趘8zR־o+~V +R{(N'>[ϟ) )iGΆvxsB^ C+Ig2ˆփK a9)?3VXHx;v(OIW'GV?k~r[ Gs/6Z"?niiʿ3R + VF;'iO g_3BF6HK.wW_Cֈ渖^kC'9 wG_8(8HvVZ'F7rsw.)Ig;h8Hfv.jgogh(H +?7 GIn&&(vH&>R+N&f3Jrۗ )ɷ2f((hϷ'/gBgV?2gii'ǻ^Hƈh^fg W 3)Z>F(r[>~.S7)Iɟ2rrf>Jv拢vv&F(3g7s9 9)(8xh&&.7#hn6">Jzy/ZJvv.vn7iSoVf&N~:)G O/^&HN&Z3:/wgn_s^f8((siIWi!y9 G)H f6#_W^#nOgw_W?gg_7>zg^++NS__3F>&hh6־[)IW_FvHVncgiiS/rviI !IϞ(fbNN6VBSRnF&#'sI9׏wv(ֺ_gWWo:F xHFiigOי  +2^>~fχSw:oN^?s))7g_(>VV6J+FK*h&kG7'yy 7W7ﲎ~h(vv_iϿS_2r^Vbvv6FfZWIog.s:ʻwo6V(h&vbk)9i99鉉)ۿf&FfR&?"j˳ϛr.v6h6ySgShVNoC''N.~>6gJo# "s{oN)i7W&&`X Hg ++Wiiiii7WC_"vX8&>~ZS{'B66^Kb^G_^coo&FVv^Ƿi^~(~g3K?s'>(6ffB7iGJovHV~hVC_)!!i)io7s[6FRkvf(66VNv6Riw7j+H^C׉)Co66hVX;_;gj32{/.JG;/ +iGc*Shhxֶ&s)os'7g' z(_j?'n~nHXƚfb?wyaIi ^ (ȸ6{"gIOWnhf+fBjoywjVys_ɇ/ +CG"VvV8h2rV6ii!i i.N^/WwGWj&^8'fs&y_(')9?_C>kXF6陉!_RRhؘvW!YG3k)8HYǟOǹ3b:)Iǣ^(xxrhȀHaaaiOמF(/Iٙ9{9N0X'יI W@* Y!iiv{.8 Ho9WSƳRN vsw9Yى* O& `hs) Yi+h`X^IiyCF3@@&)AA)iFYSgj"vH`:G)&')W^(icK/C{NX'ǙAwWgN~ր0 h7 i׿ !עJz +H2WSɏN^Zƶn7ǁg+ָ`x['!Ii @ rV ?_)*F8;99~6v(` _iWBx VZg/G [8B㷷)g(xR/"z"n6xg_yy2&vy77X/W.b +_g_Wgsk& &6oWoH@Hˉyy)I_ְ`6f iWwO_/)o2;33CK23&h`9ٹ9wWXXOWIyWrXֺ?7g)i(X6'GwCB~giI׋':V vs7 iy H(8vfi7^2sWo'?@ hvIi ^'w۳gwSw;#SgnV6 +;cξo;#/*c( i99[VXH )9 yIHV?'2._8Vn_iGg#sσX(ƆrgGWGWWkȈHH("'W!_h2+z7ɉ*(sGg7f>HwiٹiW)ZH2ʏB + !Bv N.R IRvVfc:c'_GoȸVƟ/)9Gǖx88rgǷC !o(*#;&V)'~Ww7cnB"+V6H>2gG9c((H^g{[I7 +xC'S +R7W6rZ.hV3"FhF/G7S))i'8>SI!iS6B6)"F(FZi׋N_/(h^i7.+S'&vNn'οsF'WgNNfr(ȆJ2sWOi8Ȉ7Giw_CڶFHo"_nwW[O*.^VhgK K7B>F(ΉWb&f;gw?oW^X8rSS{ w>&v__bs.f&bg?VG+f^6N{[3ObWC/>Vf>+vi9 g[.3rkB(g2:~www/VvV6B_g7Jz/&RF)GkSr32hr7/C΃oRnGWG&FSG)_Oǟv(6^Îr3Ǘ2sc'/Hh^crog?i;7FC~ +'SSgiffVC?{w_&FhNꗗ/nⳛ >iW)o&f&>^(ffoK?{VHFniO/RfRggr6fbOBK.fhFsSgjZhjjsGgNKO +jf*s2v)W7+2rKv~ڿ/&CG 3GKƆH6NgwOgۏV^fr.;/r*wWWgSF^>j{&s?&j?;R R&^.jokOs_j((HSO)7G7/^^^>7w^6fj&hG)ɉ.+22f6C+;>r;W.&s~2GWW)i֖^BRF~_sgw[62۟wI3{ϗ'.hȈWo&F.VwWןS +vG^nKn[C6fc_w?Oi{/FVh?C?o?(F+Oc?iʶw &FVV7׉ r~~(( [ffwh2n~6r+iii#F^ {۞^vf{/3¿wW +kƈvn燉׷/*2;&RKS{hv)IWGnhξB>Oc +s3nrF~;gr*[ww_B.">CVȖvf32>*3i?)kHhV(ogssG))7c{&FJ/.~2#b':&Nr/^*g2[j;6fo2:W׉z28v2*gG7jRsɉBZ~6^WY?2*B&fH +{^7G?sfVnwB_IG'BC^/Cs:Fo6x(:f) )Gx!wW) 7G6SwZvR~._G b^8x*6Hk/26WW/(&׿^fgGJ6Ȉ)>. 9S .73憈B"Iy!+?'v6N7SR'r/F{'oF6nKk'vGN6K6_>v^o~ .GW&sr?z_X @PH^9)[/Ci'oiI3?&x~6>;7i_gvvr99&Ch֊G(VCnJ_gO 7fS6i7{2R:7WW~^' ?'ZH86X`v/VI2"ֈKSNJ'ynV`6oϣ? +'+_ !y  h`WzONWjJ^&ٷOVڞ((;'i^^g;_9Ic{>越rRZׇ(v~辎~_yO&[R6OFFəoO#(R(;Ƙ8Vf~RYa 'ysz^)9w2Nhv[vViW&^*3?ˏ'K(( X z_b/GsWyGo?^"{jf^bF/w"fc.r_GJ&hi3){:_sjƂ׉.>~Ƿ#(/nΈ8;~_Wg)O;7_gg^"*2_RGWb9aI_wW>(VHZnKJ&ƛ'F)W7g2K&fR'_ SK'RF9??~^{Rg2Kkf&c +f)gjGff_?^k)w);rC^7 +2;&F6f> wG)Gc__H)Og'r^F8;?rg&>C*# WW7kffh`(vNƺW6)'7~{KV>g)3S(_g/&BO&[?kBʏk~&{cvO_/[g'/o_W'f?3'Go˾o(VBN>;_sf^o#Ç_?_sBffj_s:sǣnnIgR)i wsK6RZ:6n^Sg)'g)fh(ǛS7 ?.C; +S~ZoNn +S6fhηfO.bwc3&֛_KSGwg'^f(s G_*ww(.χbn(f &΂O/33.iI'iG)yIIIǟVֈhVF( [_)c+RGcOG۲{fzZ"NgNh~ob^(V~s:'7b(N3^".&[37{+V.g׉ W&z+o_s#2VKhfrSS"ZZ / )Wϟwh6HhV' Z/_7w7wNCo'~bφV"2sg''_γoh(f~oO'cf*ko?_Wi'icFRnZoÆZsCf6G Vֶ~O:O)fB+3__^(;HVvf*ZJOSNZ~iyi"ֆVV8(("(HFWg) 皳orZSrG)'?s'[7ƶ&;O*_F^^RvgkWfNn^**^>S3_[&/GC.f>*Cj痏 ccnfjvֆ&c^FZ?2+JLJ_!a y~(xH8f(vg7IIOc>"Nˇ7+O/r&.rsZG+^+LJF;;Z2_R>#.WRN2sz+NN&J*.ngr.+?W3#So'S"J_on_^6^&f.f:.OO9yWw!{NfVvh(^fz[ʎC{*i7srbRF'/7/:NJKnof^{Zo?{K>fϷgSK3^^3&r/jRϾ~"Z'CR^sZǏ3rJ'7 +2(VF^~?7OW)iY!i_3~h(FVVr3/>n_))S3r[G:O''Zڞk_r>NC3"cb>zOO RJ./r/Gw'/n&Zsbs +^>fvfC^/b?C)7.7sgw3{;rFVƋ+&v^^.B +~F˛BzwI)GWiIWO_G–^hh^(h^+jwc'Gosv2/˞'S^f^rjszgcRcgO~ʟZ۟' ↆbOr>cOs2~okj~n2SG_#o7'wrFn32nb6Fzr6.s7w)) 7Gn&Ȉ6H(nRsz.J3'7g?'W))7'GwR3˾&j.&N&[k{''+f&h>.wGg)GKSZgJFz.^2s:&F6NV(kSW_WG_^f>^^2:&rʆV Sc/) i)GGw)Gw[>(((8X8VVZ:n_Ww __dz>>^V&.vVfv(FrnjOK ++_OwgNjCJoSr fRBfR~j†63BG77WWS_o{g7)7_BFv6ºn&vhF(>NW7s{'II)WS/g7_VV(b.nfsB#_ggWGgCSW'j2~V;&;'~&KnKo_.G{J>N'{~onR&&RZr((f&^^7kW'gkn +)f2ff:FR?iWoɉRsV6VhhȈH8BfS/'gg'7iW:ZooFV(ֶR{R"C"3CB7_N'RZS/oc>~~BB^(^^V6&&nG{_)w)SS~.fvf>>6N^2o)GIIɷBjG':~fFh((~^sWw'i+fB'c~VF&Nf"S?Ï_WB?OrƂsûJ:ZRRR2+?3 +gZK'7wk/GW^&>~666f&VFN2*'W)I9igS_ 6VHvF>^/;Çw7G iii[~^VV^^~Rb#{kJ'j'g'G&'o +K{o{^~&ƶƾ2. '7Gs"'G'?/b>+r&6&b^^ϏWiKsZZ:B~&^^F(ֶƶV2O_Gw)? +N&NNF6Ff&fR{OǷ#_s[g72~:[Zn:;NƆNn2.RfJ[{/w7ǷO/_?3J&v(V(6FFڻ"f"s+i 9i'w7_J+b&FxV(v^&:gg׉ IW_kNz2BRkBV(f^&f^2GrZzbSOwwn>.znCof2NB>"h(f.{GWggڞrgOGg(6fv6>R۞f>r^^R{_W i sG'r/s +Hh(Fv^^>*gwW  )gbr2nΛRHh6VK['W?ksOwi鉉ws+c_3Z^2+OnfF6n"NnvNb.)7ׇr ǗGSv6Ɩ(V(k^vvF7W) )w'gG'kKNFVhV(v(ϟi Wo2> Sof:NƖV(v&~*3;zbKgW_Ook&>.Ks .~rBR^J~NnnBz__ggs"rK7WS:_[r.v~~.&^>f>+Oi))σ2crVhHVhh;O[)I9)o3C'JNnr&6hf: JʳsGW)׷77jrRBz +_oCK.+ +>&fF&>r(v^OC/o ))W_3'Ckrb~&6^Fv/gɹ9y7o?k';&&hH>~3s_*GG_'f^.vfFF&n#oo?s'77gGÎN[_N>&Fv6nr[. /K_'??wwW[:>bRv(fƶ&ƶ^FB7w7)ii LJ;*K_nƆvh(HHVnzJCWW)ׇwZf666Fֈ(.N~R";kb*?''?W珃Bs[k.~~S.fvFRNC;.LJg77'S +^rNBVV: W9ϛ3Fhȸ(V6RwGW)Gg7)W )K^6V6ff&z"SsJz7IIG?r. +ZoS>r{>&fv(vnNC?C>vv[wi iWW7Bff22&(hH."Gə!!y7iG{HH((hF(>/_翟7iWW iWo/s3O~2#^v6nSJ/#ʺ&zcC2^^B^&>n3Sbw_z2JO/j#{FFfNk7ǗwGǗw77gK[&Hh(Hhhh(Vh>G)ɹIIIIIɉG ysjžhh6V^^>n>N.og_7ws:>^RF~6~^:377G?g''/CgϳC&NO'/osjZ&N~.RR>N>>~^Fv2oK /G)WWGWGBZ&Fv6n&^ΎVVoWWWIWGG) )oZN(6^f^gןW7G_w7g'7'&^N&>^^+Zoc&F2k~RzZ^&FRwwg¾k_gG_#+K+N>&^2/Ž~nk3g_ OW7F(&."KZ(6JrbKiW)Ii3Nb6Fֈh(hΚK7 + +C3SO7i/;..F^fn+{Or2²sW2NnZO);n^N;#zR.vfBj^6"J ')IW_/'_^b?_'h2bnξNsKi)gg_o2nv(V(hHȸHGG;r/;7)Y7o3n&vF"z:&Vv>2?/OB~^Ff7_[BN2ÿʂO_OCc2 +C/zƶnǷG_# :R~r'G_3J~v&FR2J*'3)ii)G7W[/#N^&6(H8H&"2n›CKyy9Ii?;Ϗz~^hξnv&rFBW7_#;sSs3⎋{.Zcscz.b^~^&{g_'O;LJG[>n6hhh(V&fbkNβko_iIi)C:n +&V(vv6&FR.Z+'giiiG3B>fƶn{^nvjGW7?+~.R'ח_3N.sG;R&&fnnN>2[cC*CsχOsKj;ϟ'CڂfhHVVRcjRξ7)ə9)'**nZb&6V(VhFJó_Ƿgw)GiiW/>Fh(&>>&f&v6+SǷ/sB2K?'wW)i)_kZnrbZSS ^F((Ff^ff~~rN37gǟ?OSRfVVVr;nf&#_wIII Wg'Ss3 3[RF(V((bSS?_wWgFBSb"Nn.So_Ï3FnS)W[:>^f~Ko++/OSBFR&R ~&&nۏ_GJrNB/3G2&ƶ6f&bj+:{~ff*/'Wɹi)7z: s{jzRHVֆJS#˳W)) 77w'6N*[kž&62RJS// 6f.{w7K.&OS_g +ƶ&&:{3N^fvnKǟ+sww'˲&v6֖K2 +&6R{) ɉiWgSSϏo# ʚ>H88hVvfS;+z _wgw''/r^FF.{s +^~J2Og)2nr/gGwo^f^:s/Ogg'/^&fN&F.:r3?;{'GG~&fnr?Sr&F(h6~^/g)IiW{_oOs/BfXظH(2Sc#{__)iin~"ZS#ˣ?~6FfN›?ϳbN(^r:cg7G7jZrb;{S7W))ׇ?RN~n f^FF&_ʢRKSW?Zr^^N>2>nVh~O?GW)iWg_/g'Û{"^h(Vnc[뛛/Oww'2nZ;kR>&v6F&{oooN^j'_gGg_*J2ǟGfƶV&NNƆN~_O_'?KkO'_gCz^nF6fVvb;?7G)G'g_S>Fh(vF薞.ʻZk>JS3OǗi)OW^rf^F{RB)zHhrg3?9yGiwC[f6f2: +k^hh((F^ +zcC7Wgk2NngSnSsZoo'2fFHHxvw/) g _R(fF6b*CNb~f^Ƿ7))G7n +.fVvNV6.RB'7w)W cSrF8N*Ͽ'7Gɉ__wg/.fv b~^nJ3_6^&6^V2ng7g;r##'RnzSZ;6Ȉx8fJG) W)W7ojrfffr"6NVfv*/Ooi7Zr:**jR ^+gG7Ww{KƶH>>3G'CS_S +Z"&.ÿnj^&V(2;z"k +&'SǗGG*zrj3cb&vf6VfGw3gw7G)G˂^FhFr + +N>66BSO S'go">sc +z^^NR"O)Rc>~bVhhG'G/OGg3~NBfn^n_?s~~F(H(vƂZoB7+g 3Gg_s&rF&sN+f(8xhhhfn__7)WW w_*.^(VS*#nN(VKgGwOwS 2ښ.Rr¾Róڂ'i)WC:hHȸ(fjg_Wsg?{cgח''r~^7kbSgO_gz[s+gO'/Jֲ&h8^ww7w9iGSゾ6h&.sF6(h~k') )_fN*2js/3*^nwG2(ȸf>+'sg_g_cbowW//{nn˳OWg[{6VVFzg_'s'>rKkC;O' +jχ;^hhh(r*o7w_iiI9iwr^&&VVsOs3ZVV6zgOGG__KN& + Sn&&&>R;wS۞6vVc7ob+3_)'r#Bn>:g)/Sn8H(z'Ǐ_Nj2n k 'C'_oSOov 8XȖRr'') )7)ɹ9g'"Vh(.K/;S6HFr sG?gs:K_zc*Z777RVf?z[CKڋ'W)/[2KzngG73^8hβRJ..R^ZJʋoO'WW7g_{ ^8xXXH*jSǷi 9)S~^vfO_g2"vvZgc+*;3z:bjb&f&n'?&VVvf^#J:bs_'wGOs"f>Z"C[_gZF(>rc?C"rSSrnrB: +[{S/oχ/owGk.Fhh8X(R''WI 99ibB*r22o/>~&(sSs_G/csS;oS +*r +.*S_׷g_?BƆv֖F&~*__GGrf&B2**s_wo2n~Fzs?R{2^~>^fJ K_OO7igg{šh88HVff>i) i)i)o".>:2S sO[B^&V(&3joSC{2. +n^^f2__wW/CNFv(v~fˇ77gwGNfk CjcgGrr*R.RB..&bS럇ocgG)W>(88x6n7iW)7_o{Z*oo{&f6((F2KsS'_SSooz26fbSi iW7_J>VCw7G??sccnz/SOG'SsbrNNJ*k:2>&^Z #Ss[?w i)'#^fHHhVvFʣC'G_'sSszBs+/#J2bfhF+'?sg*3"Ff2Z )wOb6V(fs_7g:3g +ZN/o77GwO;j+RNz"zb~RڢR +;.nz "[O鹉I/B&vhhh(ڣ{S?j/s?__CR›ʣ#K/.&Fx8(6vRbN^>^>r^>^.^B^.'z_G_zr'Nc)Y9:z +gv.jN ɹwg+Fhh0Xv{^bְxx&kK^ɹWx(Xnh6fz^h> X)aai9 ^> H9 oS3```6I i)GBFXw׏WW_)sOXhF.;C.3WiJv`rO)iI!w)Wi6 ؆oI99 FF8@IWFx`^g)?9Ϸo6^o)g_HH(`yၙ9yO` ` 9a2耀*W )y'.xxV? wWi*~VH)?Gf+(hhX! F؀@ !Y x `>y wKh8 x F')Wjf.VWW )wN +F` `S)ayI)N8XKiia)76(ఘkiW+c'׊fVƈ6~ 7yGWi^ֆ6#g w;(3WWY)yIiؘ?y)ɹw gx`i )iײ&`x^R~'ɉ^Vfv iwK `F + )I yyzڸ>əlj)W O^^x F_Z#_WO.?F(6.'Oə&ȘX8^v_s)_f` (~^W Ii!i?/vX 9Bx6Ss_ǹ' vȘ>;k* 9WǏr^Rig ``.cW)I7(ؘ~g) WS)W_HB:ggs+3^&6~#GwljX8H>??oٹ) hXXO)iw a9؀@W)/IWG*XR'i[VhrۊZG珗φ(Ȗ)W II_^ 8ZsϹa鉇^6xx gi7)ay)WxxBZs&)ǺOJF(3W_hF&B'II;( v" 'ia9y _VH xOS9 iWVw[' I )S86N>+iwO +^ȞG)w9I 7RV`xBnJ99wx8xnj'ǙY!!ף^H82rb~w8vNi9GƘXxx(>k'Wi)g xOKs9)Ok踈vO)i9WwhF*{k)i9I*8V +ob2w))'ֈ'I))7j(x&NZi 7Fhh+J~Wy!ɉsNvhF›FOg +VxX/s_I9y >Hxv:bcg)W鉇GN Xn"RS)i9FVHh(^N~gW#FhVc#/gG Ii.vxJf^#iWs&6H_i w. .>_wF6{g79鏏(FsRo_o'7_&c:ɹ?&^ξII)WGkf XVr2Wi9y9Wֲ?J^+Gsr6(vSG)fHظCRg7Iwb>Fx(;_ I9ij.FXHf~wW?VX H>jG 'R.{[ow?sO_kxfj*[S y(2j227iyFhXHVƶ:Ƿ 9_(H~B#SWW&8ƒ;g)iׇOr:~F>ZãGjF8&F!ygOB6W)w'/` xV~JۏIW;6_?Orb(HV&^J*;o)WחVV.jyI_x8HVI9V(6΂S On3 OGs(&K//g'w(fv~y r~Vvr +)II[ Hr_i7Wi'^(Vn;_g3g7 6h(f.2gs2F#JBۋ;9IWhV6hF#)y) h&v&~Ro:/G#/2 +O_#Ig_*(nR{_)G*^h6ƶ^^2 IN^b׉ǃHHh(h37GGǟV'S_iiiiO^V>3/'?/2FoGw)I )((Vw iǻ>f^g7'FnoS3_W#V(Ξ2r3Ƿ7)ן((((V(FnKÇi &z"no_7)w^vV((('7g6JaY)oh(V^֎'nVVN/'Gj3_iy >8HȘ&oɗ7?2 +g N{x~3goKSVs?fa _(&Hs v3 IgiI7V^X>.F6Cs)8Fww^oiaq[nCVhhHJ7g#h?iw!yۈfX(x^_~SW'x("3I3B>O2H`Ⱦ):磹V^nHC&w.Gv `'(s!6Jvs7V"ʟYav:.hsH)I)G(&IZ鿗a((['hCֶىS&~cV8&f8?yoW9)h~HsFra!;踲769'CNfH((2i'WGɷ7([6?y?>ǷN膶hxF7!o*SVF{oI6Rr6&F.Wiw6Nh(y*_IWo />&3nbI.6Iφ(GKƶKr6fNi).+.;'JRv^HjW +)I/bV_N+ y RHG^hrVH>O )gJGW"+hC&(FOiW:ƚ6VNoo9I>88lj/w97O((> cljI'fs~h)f"wwc^~Sn^;s:)'6h^6(RIayw ^hBN(XHGWf>&Hh{fwGg iחhj~HWI~ )*rh.&ˆ:FVN+7gf^WaFfhgS R>hh~G7 W^מvrO2_g77R{cB2Ow&ɉV6nJs^F!a7f^o)W'gW2j8w?Wσȸ.v&Vg7vhbK2fRG7ViN?gY9?*66(&ˆxI9W +F'?w?Ǘ7(Rww2.6Rjg6gZ3sBΊ_ CwGhv.S7Wo^~ +؈s7gf>f#ǚ/)_jc87fZwWOhhnB)6wN(Fzzi! &&h&rg!I)WgFֆr>8Xk)7'.:? RkN+g(x^7{r3s'yy"66ָhwI'z _O2J&{iɇ>VBkfxֻS/'G.2HVn/7w{VNjfrN +irnƲ^66F6 #W)S3+&2V7 )i7 >frxN*w)WGv:S>~ooo3(^rJc.7YI*^fv(hRI_)_sc NWj.rh32h8B{c7W/>>ZCggΞG~nZ~Rs9y~.k^N6&^V)93_SK&(vo׉WW7obn^F8^#77?'rg)g>6Rˏ_f'{Vr+'J~ffƾFFϹ_+bN^nVG㢏w?C~h[jVk[Ϻ*˗7c~;ϟ'*o#6^&/ח i_Kn>rhv.†niɷs*Bڶ^hV)GGwgHr6vSj>n7)2z'{#_Vnr[9cn&&fh"9G_'Nv~hH72s*h/>C&Zn )w +/Gg/χSv*v>2):>NVf3"bbFr^F'3bCkbZ{j3r&R fn +&Z__'2hffo k{)':F^BN~ gW'/ sC6h)?'cg#hz#Z"C?JF7"z; ?ָfFF.o_WS 7)' +>(" +ffvfi)_j{ss(V+'sZ^~[nwsb^^fv'Ok"wfVF&n&6b_Zwێnbz&6WG #;7>N^>_O*gW?V6hVWs'(6fN_Nʟ'~~*oOo+&"o+kObC_s.sFn{cח?'Vf~f6'w)_²J3(~V[GO/SzC&枋b_'fok'[FNwr*zFBgn~ʳ/Bʆ6F&6/GGNhvbw3KgʃZ7C 6V;^S.S^sƞ/Z. /GWGgor^.&vώ&&"Nh&־G_gjs۳_B6nO&~J/)_O?;: gb3Fh(ZsR?jnz#8^f'7_IǿGwRG6/2v&&6g'.ffV(Vn&2_w"gwOj/c.'g[R/3cwBV({oc:SVVf6>gIw7cۺ>c/sS.vhk&2 +N.Rok/Ii/3cs__Wo6vVHh^R2j?/.&~+gK&n2OSRoB^N +.'sj#_/&(2j +?G?O;&^&jSGW7矇Wwˋ~kG3f ^&O׉ii yw3f2N'G#F>"kg./jf&n. +3rb"_OG_B3S{fR.3Og'k.JξbSw'cRBN>HX8*{ +g׉W/oO_'_wGO32~RfnbC^f(֞^g_'zbBNK{b&N//sG.bJn3O/3ƾZ#&n3s^?.&^v^Z[o''_:V֖VBf&&^&^&Og')WW)) )I!aYyiIIi'+Oz*>cS3Bj'o'(6FfN +"Zz~^h @pp@`ؘxVf&&^R /og/[cn&&N&NCRںFNnfS['_?wrnc+ szC3{S.~bsN[c+KR6VBN.N/G7g'))7))&6( X8HhVFK7w)ɉs{3'ח'f^f?'.f&z'/?^^cZSc7ǟk"2h((v&N&_GǟCW)WgOS^hHH8膆~2bS3OGW)7_^nϿS v6V6b;gg?C+Kos/.>K s??g7kNrN;o&^.Oc*IyYyן22n(HhHH^[)iI7o''"n(n +3JbN>2_7''skc[*_'7'/__Sj/R6hV(v^2Cb&Ff~kO i) W)G'G'NvHxHvf6^Σs__o'OK2"j'O_+Z~nffR{3gW'_co+{:so;r"rffn^&FN>rBsSSۿ''gəyis&v8X8888ȈF_'g'7G?O_S: [~rn 2k 37'3gg7s[B;*BbZ..+;33ˣ((fnR&RRR>jϛOw7GWW)I II)73&Vvh888hv>nLJ'77gg'''Br;R>s+{3C[3s~RfN>ns#3:z:j[[og'SZ2J"Z*Oςn.Zcs?))vvvVhhhhHVvFfRJS'7wii)翳;O#Zz~>ff&R2.;{B.Rr:kSۛ+?g_?/k*bRRξnr^.&R{*?gSSOW)))7/N6FVh((FRRB/_77WWw''LJ?S3vF^RZR>ڊrrr";/3OOSgg/_S/ +rf&~~~n.6fƞS3gW鹉77G'_/jVh(h(VF6fn{ +#g)7o2nNrcb~^Rn~ZSG)Wgj"B*3Ϗ#nNbBo?O+j>^&&^&F^nf&>&NsGgiii7KVvF6FVhhh(ֶ&kG''7'S33o_o#[K2NNff.:#CcꂢˣokS+? +Cs +sc#kk koc^..6V(6N.RRK"zj+oWW)wgOc Z~6vVx888V6Ffnk _W)77GOoϏ[#Z2&>rc_LJ_;>>kc[2nj/ko枾znr2+K*/3#+S#/Gw)WG3fV(֖(((V66f2w׷gO..R2.&r +kJ;;;k+ocjrK;c#;O sS +jSjnNΞf.~>ZR/š++ggi'/;B.&hȈH(Ύ3WLJ7G';rn֖F&Nnrbz C*k{ jK#CZ2#o3z++k^nRR2 +*ڂ;J~n +CoGg珋>n:J"~F^>ڲ23o7gwG:2^&&hȈ֖hfb*g7ɉI iWi)WWwWǿ:f^6V(hhvK3S3{ZOWwgGgg3;_wG_S.vv֖^f6S?Ƿg_J~^&fFhhȈhfgi))WGi 9y WRf66^&Fvv(Vvƾz+kkSggi)77/s*[+""..^>.FvRNR{7_?_G'f(VFƖ?GG) 9))W))w';fVh(VvvƶhȈ(V&N+))W77wW'"k22?LJS*(ֶF^Bn(V&&rW)wG__GO">F6F6vVVSÚbO?''K+>랞"#jjj +k2b2 +?'c2b;Ã*o/:. +#+oZ.Jbn~2.&ΞR~N{_'__OoS[/[+#&F6vNB:+oC"b cO7''b.~^Nzr2Z^&"Koc/J"nn. +C 2nnRj C?ǗLJ_3RN"bk;Cb.^f^~NRRc/og_'_g_#rFv6F&~"R../gWi)#/_g_Sc.r~&&ff2nk+k..Bs_?os sCחWww*>f&>>>&FRR2csog?S3 bڲn>F^Z3cG/sz"[7))_/b~Nn.r2SFV 33S +. +g'O *#_'LJc#sj3ۛ ;J&(V(V&nbco[z ;χg'F^sO.j[s_)Woj2:/[ó2&6&^F^&~"Z&N2k['OSsSccBnjS?__/K +bzj:ks7+.^^fFf~~f&Fƶ6&r[gWg's* ۚ憶F&nbk[COJN^gG'g>f&>/OϛB2r2r:*_77_c.rK/"rrRz;/''s#KO__OosB((RzrzSg7GGB"NNRb 2β2R.2/s3Kj3[/#.Rn3o3+j*Rk{ S+n&F6~2:[ss*3ooO??wgb2.Br^(F&>Ks3_WW_'oJ +.NRFvf^ +*BNc_G''?o/3_/o n..^^&v&NZ".N~N2.b{KSgw7w''ww7/3cRfHh(VVN>^"+s'LJgg?+BnnNf^&6&nΎ3o?S')WwgBZ2nb*#c3S*2~&掂R2*RrSOOO'ggg7GRn.j +^v6((((F>Goc/?'_O'O{FFvF^>.:nbc?7Ƿ_o'?3>&F6F&.~6&n*cÏS3C/SG7))'oO#_g'ۢ +&VHH(vf&6>NǷWi)W7'#_/#o;⾆fV(6F>sKrZ2:?G7w'cC2c + .†^.cs3{ +k*ξr{ozssg +[c;>6V(VVVF. s''gg7G'?oSz +2Ξ^FF^fF>Jk3sssoOo''g'_/kBbJB22r +~~.rڻZBk"rZb +Ss/c[ʋ#oo_'Os"zzZJKK .^^vV(/_gG'wwg''3kΆ6vv((6n2B"S_G7_wgS3s3+RNn.nb"K{"~N^nr.jbß'g''S3G7?σJ.N.N^&^6F;Sgos k ;K+>>&^vv6>+;Sgg2rk{rn^fCc>&~2ksB3SWg/[C#kV((c{S_燇gC;*~6^N*;[/s?'_?o_7_gSc:~^&N> +>>:[jZJ;""Zz:"*SoC/g_'2^(((HHH7Wi)W'~Nֈh(^R~nowi gcs3Bf6v&RzC/nf S))wc;N^/{OocC{:z#K/NV(vfK/Z£/WIiG'_OzR +2r^v(6^^{ kGGkz'?; +2FF^n_';[7'oofF&NF^&&^ƶnJ))GGGg_s;&VF*/__GW?:s/bn>hȸ8h6^>f+7i Iy9 )7#_7g'Bzr&f^>;GS"2>(((v6(hVF6vVV;_7Gi WiI9ɉ)_*&vV^f&N.O7'?'O[+b&FF6VhhV&^~b +3WiW)i)sSgcbc*fֈVfN&Rj B..66vRrJ'_W)WWWW7'_~^&VHH(6^RrZj ?gG'[~F6֖h+ *J_WwWGoRBc{{3?3K +>f^ZrN;cZ.&sso?χ/osg_O;&ȸhfrR*:.n+7i)O"v6{#>~Sχ緗˂^r3g'Oj>n>nz‹Cob +{B.~>Rz{ _G>S''7s^6(F./3OrBK37'ž~&Ff2r.2R"rN΃OgwZ2j so7gKr~^JS3;N6Fƶ6^Kz[rBڢgg'g?{ +jKz^V^>*;c/3Ojoh(VnrB.F 'w3S#'''.RۂK.Ξ&VVB"RS +Zbg))ws;ֶ&~JrN>.Rnn^^ +c'o?os^FF^~f~rjJ;{ "&ß_'g7w7_RNs?73s#N&F^zC#"^~N&nʣSS[/OSJ_OGw翋666f^>^~.R>s'GwG_O[FF&2R>N^>^&›O7gG#kz o__/;s"6&R" +k;S n.nn^^^.''Ͽ#;㏟ǷGW'obFF6f&F6^>ξ[/g7gw_O^Ɔ^*n>F&nZGg_ + Rr[*N&^>JKOO[zrf2; + Sos{ K;KOg_&^nξ&bǗWW7'ϻ.&^n[ +~N>NZCs'Ƿ'CÛJ+{c{ ꢺrrr.>bo_ok&ƶfKo?SC"rZz*o_Ƿwg?ϟS:N~&&F66ƶ^nRB/O?_G7z6&&Nr>rF&n37G2Z_g'營[B:N.sS{.&&^&^~N>.Rn2 +K+[3oOwW)?;f&F&N: +2NB;Ƿ7)iS"^fn."j{&^6&r/o__O_Ϗ3Rښ#3/..z/[#K2F6js[ +j'G)G_ʾ^2.Z+rvF&&sϏs+f&ƶƆ.r&&^;)G?j+*c_Sj.>>.BRs{~憆f>B:Jb.ZGGgG7gn^~ֶ&.>RRN[_WWϳzkc ZNfFƆ>:oO_os:2#sOOJz2ZCs ;[[*{{^rz #bR2jk#_G_'"BΎ +ʾƶFfS__g''gSR^^fF~^f>rC_''S#C3//c#{ : k#Oۻ[.2~&&B.rbR3O_'G7G'/K.r^FFvf^f.og'BN>^6v&NB"*/Sc3OO{{+*?/#cS#CO{R.>~2&rr>n2:ۿ_'G'_JFv6>nrRJCo/GG?s?':b2.((v&^s[/___OGGOz{Zb+b:ZK"rb~^22""kc+zb +_חO#{+NVh(f^'SLJg_'_w/:rR^F6^fFb*{OoSssϟ_/"o/RN.b22rRΎN2SOg燇'~fƖ6F62:[??S/g7G'gGgKj"R>^ƶ&&~"+ +z:z/O#;sosb: +{zzc?oooK˃Z*K;"BNRz:"r2 +g'_?/So/s3KnRb~^6Vh(fN_gg____g_gojJb6v6FFfNnb+Co_'W)G+&z* ++s3S_'7W7g +>^Ɩ&~N2ZJº +rn2n&NB_GGGw))o2ֈHh(n swgo?'_oSsfVh((r"S_Go'nf~2 +_iW_SSk>^^^nrbJ2NΎn>~^"oG) w_;z>f~6ZjCgG'?."BkGwFVVV(vf^R2k +3_G)iw?/+jz +ʣCo__2~f6F. +s{~&&6RwWW7__)W7gJ^6VȸV6&R"*{?g_GgO_"ֈK j_s_22 O))z^nbb#KNN>.b..^βCOwwW鉉gs +n>(h&g'?[#CCG))wo".v6^&&^>kG)Ob>RrۣzC*_C[on&&n*CO{^&Sgoo''wg'cZn涖VhHHh~*/3cs/og7g'Ǘwg?S3.&8H(f2RR*/?__O'g/~NOww_zN&.ΚkJR"s3+Z^&~f6ƾbkS'i i׷'SRnN>Nf(hVZ'_o3[s?7Gi)'C^Fv(VƆf&~>>nʏS+:ڋ+Br ++s/?'sO/zJ..R. +crƆ&F~"jsS_gGGC +R>&FvF^N2z룣o?_G7~(hV&^.*cϟG7G's{* ZJ'G7g_O+n>>¢>&bcc +R~N^~f&^/o_))חwS[.^f(VvRB{2ZkLJgGw)_JNfF6h2?gj[ﳃO{RJ??'Ggs +Z.."#o'*vFbb2;{K/W "2^^&^ff&B +Bo[3Co?_GWiJV(((fBcSw)? Z.NrRgc +JB.NNn" +2."c#c nFFNJ/7GwWGOs3jrFVhh(v6F~J*R +OW7wGˢ.ΞhV(/"co/ss[:Jˣ'_C"&K{3O'gOsb>>6v6^.r"))S >Nf&N.Fv6Z#C3/sco'w NFv((֖6>>~2o'gg燇s3ˎN+3__/[S3j+J:bk[3;k2 sJRfVfj3''gg''o&njJ¢rGwww7g_SJ"R^((Hh>#3s CC?_g_{;7s~3_jZv(VvF&~^>Jo_) )Gg'K*z:JJZ"6vvV&r+*K; *S#GW)W))#JVV66f.z2:sg?o3#;.S''soC#{brz:;[JZr*s#[3nFFf^&Fg'g7g'gC^~>^Bff^&RgGO?C{N^&((VJC{:kco?sss_/Sscs+Z[/c[2;&&^rO?'?#2~^&"Zn"S___7wחG?oo;&~nNV&Jc3CS?g7)ww'OJ6((6f>rZZ>&:{ko"O//s# j:..kGg' +N&f +/G'?s{ BrN.^&nnR 7)W)WWGG r>&6ֶ^2:+*:Skkjc;_g +*+Z2o_/Z&vzʊ*#?_Ƿ[.~~>Zj#[k"^vfr#/G77WG~ƶVv62~nZCoOC3sogg'{CS?_Ojb&f&~&^js''ggSϿZ.^f6vFf'G7'_K[ +n6~ZrzJ +nNkK+#'_o/SSÛ; # .&&_ggO#ƶ6F^RR.BRr./?7wgS#Zr {;k/S{k>(^KۛG7WiiW~^.BzFFFf&>B.+Z3SCsoOS'g:~"OO?^^>SVfnJS +j#G7OS^{ R&88h^K_W)73{_wWg+JƶF^kz^6f;ws벂{7G7jξ>^2o_O3[j2ffJK[n&&&/gGWON'33 +brŠrvv6FNnڣ__wWחG3z2 33sR^(FRJJ.rnnn"3_g'7'.~&^~sO3bBZ[_'zffF>n:sKrBJ+/'_c33Jb + +*?_38&sǷg7gϟGo[ڂRf6F&^>f6֖Zۏ?3K{KCW)2nC'O[ +Z>&F"+KRFf+_矿[ ""#G'O3o/?KFv6FnR*/owK3#[v6^RR₎n>&fn/SO'GO;ZbR3Z2z#/s[o +.+*Z +b?'翣#C3g_3rhv~ Ccc/G'??'g3 +kb&N&.vF6^;/Ãwgσ+zn^~BzK*js~^f&.R +>R+ o__'c/?o_OocOcRf(V^Rn[3OSo___sn>>>^ff&&>"Z{;ϟ'?ãk2⺊Zr'g +rnRb+cS*jk*j K/#{˚S_?3.>&ƖVƆ~.Zo'GLJ___s??_ϳۚn.ff>jR+k S?g7_㋂bk"*_3.ξ2 +⚺:n?OcJzbZˊ_3[[Co_z^FJ"ۿ_Oso_wG'o3jR.2B~6vvvv^2Ks/?''?3oۃCC[#{*?z^ff^RbZ:Znrb"rbZ+k[;3'Ǘ7g;2^&^rn>Kg_csc3sS?3/j2>Vv6f>.Zrn + +O_G7GS/:zzZ /ۻssojrnr2B.r~^.BBzc?o;Bn>2 SOgo'CkZ"fF :ZJsggLJ'JbK2^V(V>B" +gg?s/S[r¢o?'_^.KK뻊2~ ;zscS3S')'.~^F^^&^B{/33SS#K~6&&Ξf&no'w'scKZok{JJ[kʺj{+ z.ۏ_O#Nf>s//S'_?O/{ +~F((ֶ&Ύ#o:2?wWWg'#[{ cK#Jzn&FVV6fz gO/s[3'''_C{JZrB +_/{Z^n2R2zjrRKs/oSJ.B?GW_.^&^r>>&^^Fv6‹s____'7wZN^vVfGG#K #[Cooss/c;ϿsB&f~"KKj Jf&^~Rz{{+z*{s'7Go#;:&rZ +"r +'_''?/c /??jvVh(Vv^nbo?3?_gJ; jsϏsc2N&^rJjB>ΎRbK[c+Ni)7_""jJR>.fFb ++Zogg_g_3k"rRRR&F(hVF>S''__ kj3oOGg__[#[#Kzz +:*K&f^Nrz:*3jZn"ʺZ +{k3gii)'_R^~.nξ&~^6F^N2 +'_LJs3w_/Ënf6Fff^2;3S?/Cs3:"j˃??Oj&NRJcCKr.."_O/;^^b3'G' {Kj.Rv&:RNCwGg?SsžHȈ(>3ۋK3/goCc/O/s3c{ bRbz2zrnb"Bb+K"2S{z⎞>RJ{/_WWgOSʾ~^~2 c3oO?O_7ckjr&F((Vv.zJ#Cs{b[?Oo?'O/bn"B3O_rf~2ROK2ֶfb&?w)gC~FrSOc:F.N_S:z[NZo'G)Jr*3w)kxFn~g9cn΃ inVCgo~f踸hf +WzVRS__G^Ȉ)!g3>K S^(8837W:^r7 GOk&Ow)ysh&>#6hHxȆ鉷3(vR)yBVko׹I/HV&.G2fvV2:^(3w闇'3.#7ii_6vz37i~VfO jWٹfz +?>6hxH(~S&VF"S_i/r* ig2ƈV2 ))Hֲ_)Iiζ6.ROG'{+nN"?OioJ^^bBk[nF(V~zoZ.s'7 i'cJg) nH8Hhbf6γ_??>:3SWWSbR_GS"~6((62+_)G?FR")?JHHV鹉)7_j2kK_7 +^S?fF(rk_7_sN~_gvnr+s&6(HxFCg_6~R"+Ͽk۟?gcNz?b/gWCbFf^RsrRrW7[f_O&vff"szRfCsg)i)gCk'wzؘ"hvf^jG)ff2㿇Wiw''cN""2c3KZھFΚ/K&VJ?.^vVFRc ח~nºGw?S&FFƶNJ>֖^+/ϿǟGg)G.f&>((jO?SZ^.jOo&G.FF~ _G +rR>~.kJvvB/7_;bk#_7n&2#>vVV(vn[O".zSG)iigS["~f^ZzBZvB*?G_' ++[[C?G77_ +^ƆFfR oSb>~_gbƆ:gO/sg'# +.B3ϚvV(h(fZ Kvv6&CW9WSoWw_hhr66VV6^nz/RZ +/)wG7[{7_z^vF>+JNF {B^2GˋʚSSOsk{ +22>&~fvFf.Š{;k ?W IG;zf^;+>f6^~NrN>R>BK{G/k:OCJ>^O/.rb"s_j>6.'"^JC?gjn[#s#n^憶ƞBJ>~sW)'G_."2VVVhhogG_Ss'sʊr.Z +ˢr+*+c>6F~ *b'gg7S{[:r3owrf6FR*nF^/g''g'wW_;zn&z.fv(ֶf;n^Nj7W)7bΎ:ccSr"?oSC.rbBN^BCo'[+Jk?/jz +z+;Rfvv&N"cJ+C')WW/ڢ.bjJJ^&~f&^fJ_7/KJsG*f^n/szN&nZ;?/K~/so'goo3*KoSBV(v>&6fR+W)wgOC;2r~&^fvvbz 3Cs/_3;[#Cjr>rr'_OsN^ff /+rr?o/r"j +__σz2.>^&6&:Cs[zk7 i/~ZsOo[b^VVvf>...n2;gK+j/_/~nrzo+:2Z[ j~N"o.RSS?SJbBr.ffRZ**kSgwWW7's+kCoo/3 +~ffnnξfvv&o'LJOsc Z#'gO+JJcOO>{{*bR&6KSOZBrj3'_Zbۏ'g_ϋ>ff.R²22z#3/Ã3Ss_oB.[/cb&F.k{Z".[ooOۋJ#OS㋊jbZ.>Nn~^z{Kjj{_g_cbO_kB^^nk2f^J_/3ss+ڎR/ooK.N>.r +jr^fjSOO_s ښ''σ;kJJ;#k>f>.>nrn?3#3CcC+ +z;33;:2>fƶ"o&+cKkZJ;joLJs+2n+^V.3/'7(V(_)7s&~Wio~&& +*'(vNRwOrv&.z' .^^f:#f6趚SVV[F^WG7/&vFb_n^ֶ.j'?2vj/ggOn_7wsfg~&^Khv6N/W'dzF7WGw^^Bχ)7'vֆg[ohrOWwG)'>&3g)^W'^V&kVV({g?R~Zo7w>^6& W bB~^r{OF6>*ogBRnOg.Og.n.nC*3fv/?oR''/Nff_"fsOK&NsGǷWgB>f7W'B>FFg'Wg"f oCc~6(gC&z_)G3f?_b憎snv6rb_gg&^frs3?SBNRr~f~>~o[O Nnrgg7OB&_/O#O*66/s_.'C&&fbϷ)7^f6R뿷vV^jG{rrSwGJ~6KOLJB.C_oZFvBGw7NZ³'g/+2&N^3 +*kbS#&f6~nns_G*k"S?Oj*{;*3;+"n.ڋ[+n~FJ' BKǷ.Rc_go+*n /#fvnZ/72f~7)W_zvZOGwsn&Rr +/'gsB(rsG_O2~r?'/{Rnw_^z_~&^^΂Sc/jccK'{β2R[z*;fʊo/J*j bjoZ:Rʛ/'v^_O.NB"js?"^b*_rBJ ?fFnڋ'B>.oZ>&f>rJoS +&&~n__ozS2rr2Rc#cj: k; +k +~n:kc +ʣscjnb'/SZ.jZ:ok +f&nR3C#2ngG'O2>N+s2.jJCg?S^6vf^./_GSzNncO;⾾2ÏoRZ?rFfB czSC*R¾c{Sbrc;Ž&^껊/[;zkBr/S_S;"ںrJ;Kjs{Kz~f>r.r[sc +KJkO?rzoSJnjO?{"f&;{S nK_g?c&ΞOg_?r 3'_z^vF2/Kk..z3z>oO nC??>62_oor"jS:{b2"rZ+kCo#Ccs/3.‚NNNûJ#s+뛊*[[j[ +;;"//oKnf&f#Ss +.z**[?O{2R>rbKZ{o^2;_S g^{2Š[okNr;/jʊoc+Br3?˺z +skn&^n:+/O/;c +rz+k*{K[#C rn..c;+[Û#C{;sk":J;3/zKS?_sR&"㟏cj2r+ /o:RR*s_?S3{+: +#or^fF^ۚr."[rNڳ/O__ϳkbcJb.*sS3+*s#[[ +.N2/oc#JK{kJ΂Bboo ZBbbJ;;ﳛkKjK#s2Jzz#Ï/:ξJ*s/#;Jrb ++//{ZR~&&&{o?/krBBB/o# +.nN2ss#⚢zOOC&jok"."":KsˋJ.#sS?3{;*BR^.2Z +#3kK {+22:Jjk3so/{+BB +ڊ:*kS*J2R2 +;k jj**oϳ;+.z+K{:ZJkSo+RΎB*s?O*.ŠcOs2~f&^Bz #[c{ˣ#3szZrRs +Z{c:./ϳ:B"Z*[ J:b2;333cZ.N.rBJ 3##[{K+k++K/3#{zrr* ++*BRSc"NN.3C#Kk+K/j~^c;bBc/#jRN~zk///+Rr:KOS2~N;s+k*;J +"bkj{scۏ :+3JB"".r{K+o__sj^ GrNS_))VJwW'K +&Vws.(2[OG[.63'6h8h~;_W^hji{HfK 9WN6(v.)v8ngw'׷ h.s_׉Ws>vhNKs?WfSϷɗh~J37i_FhF2si9 _+nh{') kFV2Og97*8(W9KRvȈ*oyf8#in舖c .^*SgWrN(V'G)2vHh~G IcZ&F:3)6hn /_3NcW*Z~(NiGVbb?Kg)/.vv2'WoJ&֖"oW/j(&nCwg#vrC)gS*Nr뷉w(~iwO~VhN"k'i)g(#)_ 26B*GC.f6Ƣ7oŽ(ss闿:66.ow +RFVÛG_R/K?7G/^6+_ww?C +r&f.[ +K+b.^FR +'3zrǷ?*b2fϷg6Nzjow)7r(Vβ37oVfz)*~(fkwS+V.Ks')7O+FhB'nFV:G/.&(V:oG3 Z~fb3BzkkOgo;Z&f/C/'G_R&V6z'7g{R: +{zƞb/C>BRzo'O;R6^:77^~zF~W'KVF['7_F>+gWGg>v&j'wJFN__o6&^"?S#>vFRSGS*斶NwgK^F^rrsr6>c'ڞ:ZS'3^.Ng_/2>2>?so +~^R~^gC2Rr~? +&s__'+ns?'~^^nfƶ^{''^^f&Z7fFfz__zf?7f^G_^BSGG_fFƆ_'&&~?g^n.RZ£ϳssb&.N//s?_*ڎn[.~33翣:JbCCOs>ƆBcoOG?*f^ZC3'nnn3gG.[/Og'N~^ +7~^OOھ>^^_Z^fS+^.r*gO3rf~κ?'_R&.B_O&2{s3*Rr{:c~R +Z.CSsO/J[cRJ+kJRN2Bj+:+">n+[3_sbB2>^Z+*G?# J~~ZkOb.G'br&6NڛgGOž+g3R[Ύf:ogG7:63o_2B2ξz/OZNN:ó3oOrNBoCRn.sCOJ"ZRJ# cbrJښCC"rb22#;ºkz3sR2+zKo{:JڞfRzgOo .rgff/7_/ +~ƞZs珛;ZKss**_*J^o7Gf&/;"R>>/_+B^rkcO3"cb:B*k:{sB2 b2b +bnbj S?SSSRZrb{;Nr.nZsoOkr..Js/K>n.nBs rR..zSCfN2O_J~Ɔ~.o'fkgo/[r&βK?s[{+'3r"Kσj2ڛ/_/:2>&"#?Cʺrr+K š++"" +kjS3 Z.2 +c#SS2ZBŠ[ûr"?3Znn/oo&^3?'.N:ooo/;r~NS_?&&Jo_o&&.c_g_Rff&2_?o^~''^^C/c.b3?/ +~..Z#3*rRbZ/oCC2R.B{+c3jJ:KcCkZn S?ϣ*2RRbJjzBrks/OC2oO"^>?_gO{^^ +OSf^__#&~Z[sos:.NNÿNNjSϏ/R^βۿ__?cN~.*3oo/3kr2jSC.n"s#;K:ZJ##cb2nBk[{K{; +:b[C3s +N"jkϿ*R.Z +o/ +brkO;Žn C.^s?/ۺR> +obn~^N3O__O^>"/C2N^.sSOc +.:c3/[RNN2so[.N C//CbbJSS// +~;Cs+*.2+{3SjrnRB{/Sb[#S?/rnr:G?32R#j.&jO'(("?)i_z(hnoic&VNK#)'&fֈ gWWRFBOggv66j_'֎w''–6(s3^^'7GG^vG_#^6f:G7f悳wS~^J_?gfg_^^^Sgv6oW_/_Z6F''F&J?WrƆZׇ_.v>gWF^"w_kFFJ')GG/^F6v^nG'[&g7B~vg?V6& W'r&^kcOGR>/rN>{2.n"SC/C2ZJO?K>>~r?/n'^zn&F&NRg?_f6^R_>f^?G;^&O)n&ggwvƆ^G)ƶFwFf??'r^f^+wf"S_gNfB#oGr~rNJG_2^{2B2Sj*.N²o+s?{Rnr_KNr.3Cƞ~gO۾^~^6Ɔ^O7'[~&{osFsCFFZsCgwG?fF63G#^FrOGCr>6g2r3_C:Z~_s*k2_OKZ N bnj #rj[s2Jr/#ʛ3rγ3CBھ>[SϏ&C'g'ONn&j#'O"6Fz77'6"˿GRg/fnr?b^΢s'_cF&Nk[*&^&G7O/^~^_g33nN.+?_[ +rzS: "+j+/j**ʣK +ʚBzڎ"[K3c""NƒCnr C3sso2"ΚC3_rn&^R +3O fRsg*Fnb+/32J#wGo"6f>rZG[f&~2jOr~.b*__"nN^>br>nr*/SZR.rzO[3C2"Ro#/;KkrRjB[ +JssK;b+k{J>z K3 jN"s/~~nzcN>#3'#2^nˣǟ ~^c''Ϗ.R{_S.+'_o~fnO_g+^.3??KbNO?kn^+;۟O +2c?Okʚ>KkSS[ + +jn*K SSs[ +;{2.Jj;*Jb [zˊJc+ꊃ3k*jzR.2{˛[kJŽN*3ß/˚BΞZ?Cb>bK*[?oÛB&nJ3'^nbBOCz>Ͽgs2..#s_oZ>&2:ko_?r. +SSj^~rRjk:~Jc+c.n;S#*322zK/*ZRb +z3*+zj*JSZZbKC˳/#ˊNJ3oS3 :n{3so3k2>b#3s~n?Sڎ;#/O32R'k."o''.^c_K +o?3knRr +cS[rRR2JÏK{2rro/s2r#k*sScK2rbK+ /sKrr{[sc+껢SSBb+Cs + +RB+[3/;rz 3ccZRrBj;#SS.NzRNncBN.3Bk;'ϣj +S?sjB.N2?"rξRo:r"/ +r{sCK"Ⲏ˻CS/3:bn2C/ nR;3#jJk{cSS{"R" +K/3rŠ/[;Rnb+S+znR{c3Ϗ[ +n.:o{ZrnnZ/#Rz.rboBΎnRSsnnڋKJ{3oo[J. +;cs/ +ʲr#s[{J222: sCkbBRs{.š {CS*:[SK*.nZ*3# .[/[kbrrb +˛ssʢbBZ +j 3Sã*zZ/s{KjCRr +3c*2.*#sZBnnzs/s.2joS#*rNnrKco3Cjr2s3#Br.Bڋsss{z22bj3/k2"k[/sۻz..2ʛ *Z":J s3cKkrZKc{ZKc3b2rkCKjBڂJCs3[{rº{sS33 +Z‚3#[r.rco/jbnrK3sCJrnR"KC/:Z2SC2#[.Z2Bf>RCgj +.#O__/:J^Ks.J'rO^r3/2z^Os.Bso:.?B:_rr#n/~{S?Cn[b?3>;CFF +wBn +sCJ3J.?Ɗ_"fSKnrO77On*kS?fO6n˟J?&C:fF"gGNjRKOO2^"_z RJoƾSgRR~{s^Oo&˿cBnJ^s{.';+>C_΂r3{>^:/.NZ[wB[*2o_goF^_{.s.{Jf2O;FjNs.Rkˣ'R+'.~NS/2~&NS7:;.^#r"grʂ^oB22jOg2*[nSB>nbGb+NCŽʟGk +3 N;Krn '+:[b&~JBJGC +no*J"rcR^^7o#Bw'n#?K2Nk/z/R^FS'' +j2^n/s*^nSˢ_bk.n?j&roz +2{RR^ +sBr#:_zC¾b.^r?gr+SJCJjRBO'R + +;n&_#. +:bfG˛kn +:Og:ŽO*ZSSCcKv?'O:R.Z"KZcOsK_N[jJo[b>S+{K{ ZZnj{3R2{r>gz2R #f.?jzS?+[;[*&._*B3";{Rfzr  + ;nOoOjz;Bz˲bS? [s:nsKj>6;'r.nj:Nr/B +2/_&j#^RC{s3sCvR//[;:"&?*2 Sώn;cS;&Fcsc ^b kCZb/s^b#+K*{~ƾS[okJZ:r^2oJb{ʢ[cf{szBsãk{NF^SK J?_ RbR'3N[2j[C3s [ROS/?kZ.2>Rg;jr~.BOg+/bS3o[3O? +.BJ^_oR.r#"o"*+ #OSN.#{KKsK;*r"Ss&/3j#kZ{?&.c{:Jc#b3FS3o{kJnszB z"ZZ&"b33";Cn6:S/S >JSKbkۺRRrʏnnrnOn/R>{J.㿳#sbnR*R+cZ3fN/OS.b3n~Z3##[:"2JO+ +K{czNj[oocC*+ZJ'+N.JRB:/2Z/Bz[ϏcNn[S*:3C; +nZ_/rZ"R*oz3SR*?[>^{2c/+BrB>./OjZ+B2o +SN +s/S2~r[j+Cs[z>k  + Jz#3OSR^b +[C3>rCzÃKk2* Z:+kS.ZSB^S#s3sjbKrZnjbB +/s"S.#oO;^JSk"Jn뢢b#/ +s+>&ZsSs.^2{*cSzZ~[K:+2r;O#2J//KBKj2Nz//;kJooJS2>k{^n{;k +#:ۚ:oO"zڂzz2zn3oCco>[:ˋ;>SbJ32[ +R/3_>&RJ*+s*B*"n3 ڢ22"σNJK'o2~Kk:K{:ʳRk?O r:jo[rrc+~.J;B; +/Cz..b +Z K[bn.:[?+~~KKj;K#z.ssRr_SzZ"RNNrc3_^2*j;js:R[n{SۚJS:KrξR/#?o^n" z"cjcsSzR"jBr?z.{ +".n*;3"r +;[krósSڎzb[O*Bꊚn S+>Z{j:kR2;:*c33J" 'ZZ:Js{#RK+3BR ¢so/jz2_sJJzbn2cg3Nn+{zCz+s{" +{CS{2.S/*z +z.C;ko_:R;rj3[2z#bk/BbZr[#BSSnoOzoσ3ff^. +'B_VbIW3~2W/+(3OG[^2/?i{>h#gGfnwRRC"/[nZjj[?RF^Zbgs.΋CϳZ*S''s&nv_'2 +oS_Cf~^&S^FJCBj^fc3{Rrcgg3.ֶ:/gO/36fgw3#+Z_/"^6.o:_ RbJs[#OzKZ{:_?S"F~Sgs.2S7oSb_Ͽ +~v +Os?J:rN&Og +~&F [?{_k22&FB'zcNrJ+/_{.NJoOsKz+χ3:[>O'NB +3SG{ZZ.*{2*""RcGKnJoBo +b/?c;cnf^Z_3[{rRR'F+Kc?So~n:gGz:&^r*.+O^.rB"Z/K{ +[nrC +{//ksj Z"~#nڛRz_?RZ_'nr>+_'?Z.nJ*{'3R*r[oks Z"+zC3Zn;r //;R;c_gj.>&^n{OJK +Ϗ/g.&../C*[K>N>?on&2Ro'K[r[o+{rzns_ssR2~;CG_RJn^[/OgN&^&o/_;nγ??/N"co3;Bn^nSK#[S:zb"+Jo/S;.N&Ž sb2f> +?OCsۂfF_JnB.'? +r_os/.sG㋢N΢N.3;Cc's2b;{ck c{rz/S"#R2K3KrnRjs3/"B^F'sSzr&B3s_'n>NS3Sjۣ#Z>R"+/ zRBZ{S [~~ +ã_3&&^ʏs&z[O__[^roOO;* ~N2;onf*J3/kOK +K"+bBJssRnb/g +Bn>ÿ3C^.oOOB2z#SSoR// j*r2/O*rʊ +k +;3 cjB..³?/{RRR +{oSZ^&~+㢎.r[_ 2N>z?s".n*"ϟ;nn+S/ + + + ;2bj:[JRb +[;C3r^ꋋoO3{R^3>N2zSoC>nBj+3Cj{/ozrJ"j;+S3 2r.bk/jB"nz 33O BJ[o?/^~^'o:.f>KS//?Ϗ+>f2j*; + +.."SÃ;jz*k;{z +ccrnJ[* JZ#;jb2JS#o/¾.B2z+>~Ύ S?o[o/##Ͽzrzso;j^Z:[s;c ZB;#{#{Rn??"kJϟO/¾jOO nf&/o3~nk?;&bO;jR.2ښ*?OS2>Nk;so3ڢj2rZZR:Jo++bۣ/o B[sS/s#B:3/ ^B3o3##nRZ3s* 3{zzZzJ[{jZRnJ*[?겲2.#s/s3n?O3.z??oۢ>^~:soC .n:{{ +JZbZ 33+{"R.Zj # +k: [ +b+B#oos ʺks?o*2~C3S"nbJZۛ { #"+ "bj +z+++Kz*;KC+":+Nںk?>n?R~~j;;c?n>;sO/;NB{/S#ccz> +K{S3[z"RRzKKϏ + : +;zRrZ"z/B{s3kBNnJ//O +2Ss3C[znzk㛻S3JrRZ+{jˣ3C+ʻkBJ[;k ꢲ¢{r"Z33 Nj/O'?rB+o__O "&>"3O/okR~>R;csKr¢j[*Kc RnK;KK* +:+CrZ: +*Ssck2n+;J/S +2r*3CC{K 2Bz #J.Z +;Cj"nr R"sbkzr:zbg2枎/'?/ +&fs3Og_ObBSn*ZbB*c[/3/3 +:&^~ Og3R"6fb7_SsN>>JGc{R"nj'rn&.b*G".&f>r^N +#o__? +/:r;o"nBC‚C# ++"n3+:RrBJ+zJJj>2.:33[+>f~s_o..F&N_W_3Bξ>rkgK.6:br*:O'O;>."r'_OR.bRg'Oor:~rjO:R"B^^^+?J>N +g__#Nnj'sK>r.zbzb_#ÊNjj2 kS/ˎZnڛKOoo.+ k[s뻛.˛k{K{S +/[{#zjN"ScS NbK'#Rƞ+wwg_3>>Nr[fr.2»S'_/3C>.² [+sBR +2oc+R:rʾ?*.^NN"sO:n~ʢ//['22ZJ +:".^N +s [βKOOjbk:[S3nn2*;/Kj{J;*o3zrjrosJc R2>K _[ʚz>2.r/?:R>N.J ;>^nj*o.oS^2~c's[JkJ+J[SczRJ2C_'cn^nc'_*bBn#ckS/zk+"rzʺC{[&>&JG_ *&OS'/nRf2[/O[JŽ[Kn.jk:jsK{BŠsS;/"NrCOCsJ.J + +K.bk{'kZ^&z/O?S^^ZsϏn΂J3ss#3*2r +R*"{ +[o;kn.c#3{β2sooZzZn""k/oo"k2^n +'"^fbw7?Sf^N/燳J˲zcON"N Jۋ2C +j J3 bCZ 3;22rڃûj&NNB3Or>RBCg/2NnNJC#_{ +RNk/cZkÊ " +b:K SۏcR.RRZK;3o 2k."n΂{3j[B;zKS[O: *R.ZBC'/+R.nJ O?c.RnkS[rNR2bkۊ{?s2n{"S*[ ;+;Cʲj/3 "jo/ +NR"[o:.bsS;2ʚ"ko:kZnj +c+k:*;2sﳏsj2nnk**S{{jrZKS2BڲRc:jˢ ڎk+/*JJ‹n3ssC#:Zbso/Oz^SϿO¾~Rc[?S +&N2k3{*cckkJb/3+>.Rjs//z.zoknr2 +3ϛj+R{"**[JJz r.:z"sSSZb +j:RBr;3s/Br΂K:3Ck +rs::"R:k/{;: Js;*:r* S3:ښbks˂z:nN"۳o_s> +sOBR:S/{;"N2."#3ۛkJk[[r{3bnr#3[s?3*.2zr{+{/*K*:2Zb;{S{zoOj"rβz +{O32bbJ SKjr.Zb{*[{ KkzJ*++" zb;{[Jں2Zk3/:b +j3//JRB3so*zrN2ˣS3n2/cs3*ZbZj{ssj* +ۣ +j; +{s[#3jn*[+2ZSs*k +ںzj{+{ˣ#Z +2ۻ ZJj33oۺ:2~:K3[JzZ3s/c +b2nOûJZR*k{b"#[˳oR*s +zRnJ3ooS>nJ{S/{jj:Rns:"BK#k˺bZk[; 3: Kk [j +{[S{ʢK: +;cb*ZksÃ+bkB*J ++jK;{ۚJR2kk; ڢ˛c#3zn2R."o#cZ.R.r +o+rBr2SOOorzjcJkKC{c[j"RŠCo/kZBNNRs3 +rrnCc{ +:JJ * +:*ۊzkCSck":CˊJKBk#{ +;Jz+ +kˋK#+[cۋjz; +bJJ+;"b+z*k *;kc+ /oSSk[ +ˣ[>B:K33s .J*KS2r2bbz*j *>Z#ccKcog_:;Cc*v^ +3{+ ++k*oOO's3[C{cJ""zbnR[Ks/3c; +;?O{Kj;**jrΎ2r.>nnb닻+2>2bJ[C**k[ S'Gg//GWW)iW'_J88(fzc7ǷgB2zS'/2Nf(^.SzN&~R+S'W矟ۚ&n;''JB.^f + ; :+3*.R +wWɉ)WǿFhH8v^RB2~ff&^Jogwi)Gb~N#'o2n^FVVf&.*s?oc{r."[wGc;*Z^"Ϗンfv^"3OszR~&^NkWi iiGsf(h薆^f^~~&^sחwǟNRrB3Cnnn^6((F&r;sSOSs[Jχ׉iW7'sZ&f&~.Z3oKn&&^F6vVVr{j:k/oS'wWi y /vVvNfffFFvVh~kǷGG32&&>CG_/*nf^K#K +*#CK +"j +???ovVV& +k"zf6c?'_ooSc{{3)IIɉgNF&fffƶ6v(hhhV6g7www/::Kc_?_ϳ*N6f.{O_g_f^R+χ/Cj(&^n&j^/O'_'g_Ϗ_G)iI9fvhhh(VhxؘH(fwWWחwGOS7WW7' 2nN.rrrj:r&(f.J/b>~.:K[:So:&&NÿO/ozNR*3)))ǿR^V֖V(V&_ '/Jz*/gSf6f~R[*S3;b6f.k_+fz 3o/ +rN>.kZ +kC br22S_GWi II)_&6VHHh֞O緗)W7GoSێFvvFƆ>rRJڎ>>;_G7/K Cs/C'_.fvfN2RrbR>~2SGWi?/#Jb&FN&vhhh6.J[S[s'g_/sJn&f&b_K.~KgG7J"2"J ۋjjc{^~~~nRN2*۳Jbo_w )Osc+^~hvn"3gC'g_S3+b>~N: ZJK/?/{c+ꛏ_ǷcJ>^^>:z&66FBr*;[ss*Ƿ ig'#*rH8HHVfrjs'S?g77WO[*:+ 3S??O3kr>^RkJ^&rk+*;s#:..BZ*J;[KS/o3+kc3/SC?wLJ'33c{J~N^6(hHHH6&>r3?O'i))?_'_osc&&~2[+bf&^r +3{3.+Kjj2KsOZbRN>N"+ +#nno_?S?'LJgG7wGS*.NN&ffV(Vvf;ϟ'7W777'N^&N2rfvN{#k'S*j?_:2b[#:B^N2Z"N^^^K7_??g7Go;f(((VvFf+#C/gO_?ˊRbr.RJCû{c_WׇzB* +"[sÚr^f&B"2b:.nNBJkJ:3/?_gGwi ׷/+;K+~hhhhf~*{/_'?'''g{ZN&>>.*C/N&'?o3''Sj.kkk&fff2b:rb"J[o'))''O*vh8ֶF6緗g'''s[K+n:Zjc[k*#KZ.B*o/.N&&.*ÏÚrNr"kjZRzk+3K+;{Jzj3;?g7חw[{{;J&6ȸ(vf{sS/iiw翳B+"R6r*J#?[k#3 33ssbʋKc[r:+*br.2.>n +[SsoO_WwLJ'_/*Rf(VVVvvv66?'g'''GG_/벎^".b;ossoO/ooc {[[SO[3zJ + :Žn"f +g7wwG'gO>(F^>&fNJsSO?_'7_scbRn>>>fFvƞ" r+ۻ{sGG7))WWwg{+Kˢn^ƖȸH(VvֈhVnZSG)ɹ9Y!YyWjX XXؘxhv&>?yIɉ I i)7'jn(hvf6v֖66&S_W)iiii)wG__S:VhȸHH8xxVz˿)ii 9!aaaa!97_Kr( X ؘ8hrZ 3) 9y9IwϿoz8v&f>b'Wg +NfFȈh(B&~.bR. _W yy99I Wi i)G&FVHX88xHkOgYyyy9)w'[f XH(6VVvbCiW7i iW7'C^F(V(hhhF2"3_i!!Y9 iWw'/{2ֈ88V6&憆oi ɉ )W7GO/ +vvvvvVV^n&^jo_G))LJ_w))7#v^~RKʂf((FƆRso_'gWiW_s +n&6vVvV(ȸH2j7)Wg'))Ggb&FvVhhv&~^^NOgW))'_giWW/~R2rR>>8xh&.~FRiII9Iiii)kn^vhH8HHxH(FVkIIgo_'_nV(V֖n"b‚B. +WWg?7g*>ƖvƆ&ZZ~6V(VV(f:o_'w) II W7?R&V8(vFF3gS3S?7)iiiW/r&Ɔ&nK.>&/Osog_?"zzz:Brz2>&66666V&^R{c Nrjoi9I )GLJֈH8xHhV(^zW II i)wGgs.興(Nf66FF^+?W7Gg_WW׷g_ϳk~ff&^fFv&R_'? i)GJJ +2&6(8xHV:oOW) i)go;"f^^^N^&&R.*3_gO3?os[#K/S Zr&Ff>kk:rN~&b_Gw7'GGg_S*>ƶFF6V[_i)Ww'ǷgS+nfvVVVV^~. +kSwWScs7'_o;b>~~Nn^&&&fF6f&^>.J[s/wwWi7g__O".>~f6VVhvFJ{'gǷG?OSc +2^R>J2B2.Z'S'{ssR~~&Rr+[k^ƶF6:*ZkW7wwG7_#kvV6Fvfb +zSO#CCOOZ&&>N2:jJ[c3Jr"sO???s//3J"ksB2&~^nrzJZ2f&>ˋ3 +o?_Gg燇www7?/j N&6V((HHh6.KK ;;;Sg)WWC{*Jʊ++ +J^&.B2Rn.[+[3sc*2R;//#/33c+cKK..RRJ2¾&f^~>Sg+s?_ǷG'O?K~&fƖ((f>Rb* #o??Og''_s{z~>R.R~.zCSS/ "[K;#CKz.zB#ssJ&~n:ZBrB*ÿ_G7s?OS.&vV(V6^2BR*/?GwwwG/[RNNf6VV66~O/KK?wWG's'_O +J&&~ξN.ffVvF>"K_o3'wWi7gOZk "rrn&v6FfrJˋ//g?B^&^Nr²r~Ɔ S'3KK;c7Ggg*~.º{ ʚ"br&ffff~.Zr2n>.Jso?GLJgg>6hhh(F>N&~&&R: +w7G +3n>^6&ϿggS;s/S'gGs{So/:N&6Rr&f&^NO?'{'7wWii)Ww_2n.R2>FHf.k ;/?w))))WׇS2.>.":^Fv62jk#?'s +_OOo +:z+[kk[B^F^." j"R2n^f:*'g77gCRf(((8^~RKR') i)WwgG7?gBfF6v8&s&Bwi'Sc{S'g'Cnr.rJFFf"Z" [&6vfJ_?wI9i_{N~bo?/KhȈ(^v^r3?7gCN~RJ/{:VFg'S:nFJ; +jn*fξ>׉iOϳ{+?gGsR^&rks?77Gos__'S"fV6H^ +7)7Gg_7'_:>VvS7)o J&& ^F&f.S*.;WiW'7+j. *.ZB>^R.7)II)7GSc +RnC_ +R.V֖Fhf''sw_)??sNNFv.K3?'Ϻ&&N j +:zg_^f^B[)W "z2>nNN~6~JJNFNbK'i)7G7[znr2~^&&~6興vBKϏ'k''Zf66>j_+#N''[/Oo;SoZRKo/b.nZfK{[fs">'7__o+ +Z/"2nf(((VfsK r&{*.J/_gGg?O66nK{;.RBr2Rb3/gG_Ow2f~>rSoKk*fN~S__: jNF6w_3O/3s_GGJ/Rnf6vv(hF_ϟ){f(֖FrkbR¢B>fFΎ77G;r^r{sǷ.K_sn&˛c^bC:;/'{K/OO)Ww7'fvV(h(^cr^^>_W)׷KZ2^f. fz{r{n +_gwf&?gg;R&>;_G_'O +n&6Vƾ?obZ {_gLJg'/ +n&Nfv66&23R 7'z^vVV&r:zB6J:?'GW+{C?Ok*zBN²*K222Z;ZFFNsos_'___wWi_*>FVh(&nn^f6h((&b*#gw7Gg*:+#+"RR". {B>^rW)W'*Kzc[&^.>N ++3__oCfFV/_GǟskK+'g7חgg/KRVVhVV(^NBJs?W)kNF>* +  3f>ZR&悳gGGG's‚2BO[c["fƆN.rn *^;OCzo3/K;_GWiw_2FFFF6(F>2J'G))W))gc"Rj:nN>>N>r.n^ffR 3oO'/ Z +GgCZJ>oo?^V^oC +" +k j*".s'G_szzr~^F^&&rnjS)iWwBr2^krN&fƶFkcsGSo'O#J*rJJ cK;z2"S{fB+ +koosc_/3#kjLJǷ"NnBf>^&ֶ>2R_7ǟ''?3nr.r>V(B[Gg'3s'g_Ss;BB2k{Sf&ffz +"#////gwGGwWG?S"ھvFf&vFf>F. +3_g":zO3COsRNN~~^&Nzb:/SCoOK;##skkK[ssc{*rn. [CBN~N.j+뛳/KRBZ/wO*zjj^Vh6.2^+co'Gw__K .KK{sSʚr&+C +s2 r."; bn2+Jrn>>"NΊk:»/OssoN>ϟG))7g?RRb&>^&~ff6hv6n''o?wgo'_k{b^&fV&^JKBc' K*;c C "BjJ+oC?Ff&NΊo;* RKRc‚jS''O_''[R&F&>B[7W +{'S:z*rvF2*KcJ۳'?Jg_^f2O#J/o;S6(No{Z:N"g7wחǷi72&^2v6.(6FbI +~^NZJJn:g' +o_ZFFr+;~hv>N"??g'wwחf6^z2˳sf6^fr[ +:CR~F6Vkgwi)GS7GKnhȈ֖6F:+g'oOwWiidz&~&B/+2>&2?gwW[rN>b?C2Os?+_2~fF&6>.{ڃ_?J.#Ƿg'nRN2No7WOgf/r&88_7_'O/Ow)>&r&V~6>f&3g:/OorKbR"k;*w _OR((v(ֶnO3GSc'i)grJ['o/N&+z.2~VH(BjgSW)gC_WWii'C^hh((f~r2o'sr:77g?/bnN6&2N.Z/JJg[O_ojrfv(6Z kϚSOsOW gs~6N:z[z6fƖ_g'//ڲnc)Ǐ+"R~ƶ6vh~n+S/gG'w )3~&fvV&.JZz3&c+ڿ_#b.BrSK_77WiWGF(hV6F6vh.~GW wOBj"R +v(V6[C?^RV^j'7w_cχwwZz.V^&&ΊNk__?Z&vfbii#ó_3:zȸHVRZ Ggw))sCO^FvF^^ +j..;'wǿ;/&zo'g:JSC":K/_ +&Ɔ&FVVZOjsO7_7S#zSZj.n2K^fHhVv'7gW))/GW))/ۊ~V(VV8(6 +*"KOc'7G?7gc3/c.B +_oKF6N>R "Zc'WiWiG[ kK.2/66>Z{ko[ +. 7糣'wG3ßBZzV(b22#'J/')'3rJV " +sOJjS'_7V+*r'_Ϗ'鷷Wg6vf^^&f~nzwg Gzo?sSBFr>~{Vֶr{{㟷77_)ww)i^&((Z[Z&no_CrfNV?'GwWSϗW#KN(VVVFꊏbiwiIiW'/f^&^BrK[g;RV&3C?#)'~f;"&&BZ^ +?{ +??*nrg_3''sSB ' z#;F.RK_G)))in~H(F&.^^Sii)GB&nkg*3: +zʿ/sooCfv6f~*jnrGwWG?#;ZJZ22V^>/CζV(ֆ'ggO'wG2憖V((Vn6^ Gw'3S.>.j_O*^*s_gK".hh>&&&O#Gwy9'?6f;Z"vhV&K+R>/w)/낛 +c>fF6hjocKR'_7; _ˆƎR&f.^^"K{&o/7'+R/gg*s/χ7w)wgk^(8FFvZnJ')i7_WgskO7g{V&&&rnB~nK3_3./?oO3鉉GS#J6F"Kn&~K^N2fRk[S2^_'7{/sϷ7wgRfVV6&.NN~(*GwWii*^Ff>KNNƾSξ[3{RsoK33O_gg?3szFb Ff&2R'S[j#s_[/ORƆ>*O:f>^r⾆&O)iWLJw3RrBֶhh^ +:*˟i)G2>r"_r*nc[;Z;^^8^n'w_g7')3ۻS^f^^rrR&.j +Άf2o7W_2N.nb;v6&;FFF&;/'S') io/6VH(Ξr_7SOW7?v( XH^h&o!!_'^vfjkNj~hNʺ^Fj~WwI! /*VHx_"矇rwIfVh' +~ ǗI J3SR^fHbVvV +K_7əWϛ2NVHH&sz'#g7)I'OZ(sWÃgG#BcBh(88xOg' IIwo(hH^_W?77f66ֈFV ;~n3Sk{'iI7i7n2((R"Z'3bor^VvVh{g_'_CSs(^h6K: + i_nƲVHF(V +nI9Iw?[fSBF2fv2rn2_3" +i/SJ_G>nOSvB*cjoS.SoHV(ƶ۷_))WG/( Cgk~RN‚_wo7z~&((΃fJ7g_Kn~2 KV&"N(&h&(.)))Os/6V66V6kK.{IG'r/hH6VV>fN))i)Gr? +?*[gRfnFF^fFr .ח׷O +"BjogJ~B&hFV膶6J!ig*f(6Ǝ~66^_WvV2N#ϣN[* +gRڏN[C_g)W?b^&8V( SO9yI'~VFfRf6s77׷S:^zvhj+jʏO)iWi9 j6^>^/*o_(vVF&+rRCz)7nƖ(> +g 7J&vVXvfJ'GyYi?n~ZJSc'&v(^6/g KRJw7w)_.RC:Z*:?r'glj. ظhh{g_w7o*.zNƆFN/9W ɷoHh(2ks/z#Wiw'K3vV2J&Ghcz:?'3.;?WiWkȈ8H&N3GG )__O˞&V(~66f)WWinFB3GGo/S^^BS_fz(hV'I^V(~G7/s^{[2ZR(x8o_IYIiɹw77b^^v{7iWw(8hrڣk^>.?)' +r9Gii3 +xxx82^^rWGw׉b^V6&*?Gw_3o +vf^ƶnNf^fiIy_ʞFJ~WsJ."r>c*)WG6fvvCG_S{/'^(XH8h膊I9iJN뛲S{&2+R.c+>Fv^&v&RZgiWg绢COO'2&&>iGGi'RFHhVo_/'_c+zn^RFI G[FvHV(j/)WG [SO'Ǘw6h6V^ + +n&Vrk)kVV6^*"__GWg:6((hvR3?'_ +*o^:Kڂ[n++{s'gw7ZnvO)WwGŽ‚~o +/3Gg/KR(8v{'GW7)I On^hHh>sGin(v&Fr{s:?/bRÏRGg'z&F&~n#vfB*7ɗW'S"(.7 cSN>j{b^fhȈi WG?Z뚎ff.o'Sʞ(NffWO_S~vVhFfgS/ow)ii3*+H(V"?)g3NN"7'r(^.nβz22BowW+#"^^f^Gw/fxH(bK_SS'_g3f&V^. iSCSCg +NfoGs/.f[soʇGgg_oZr.>vk_Gg'vVRϏcOGw_r^fV8HNSGiiW'_oZۢ^&/7G[N^&r2z.B:>&+~R/sꇗW))W_w3H8H8(VVƻ;sS3˟_O''?cNF(v^[)) O[##Rnc*r2.nc?s_OJ&&fn +{k77'gNB:fN~Kco/8V>v) ɉWo2&^ΚXV^ [f[~.);f6>G.hIG+v>+R_&J>;WS^F/~f(RGKr W{ BWi (vh WKR_vFN3R'noIiSH^)OO)w#~()ya9)`P0` W9G'rf^?陙 gr^)y!!yR6g)oOO(VIy9 7+ @ &yY9g^'k`Xg)!y'(@0@ؖ_I1)ISJXNZ WoWKVH(zw OgKfx0&jɉ)/K`6aawiWvh@N#_WIySwWO{NvzW_>NfI g/@ VCa!!I׊h0H(!W'Sh8 ฾i yIr6VHH6/Sw ![s>f2xX8.IiwIW`ظ8r_gw I;xV23^ىWG:&X țW1aY9W/K2*_I K_/jhXh's_ciIV(b6O''SH83/y9'@0p()Y!Yٙ9WSX`H.&2''C"z3_ ןKcR_;XV>V~?) W))Rx0hfIyI׉.H``v[W W)۲VVk;Gi i&Nv`(R gr (K'79aIvFbowiz@`HhBI)?N`8^39y _:>X@(gi WٙIF(Vo?/ɉ.h~zwg '`X(jG9yY y)w VIIىWgȘFKS{)7&rώ/3Ghh^c7y)i@@fiyY! XX(6‡GgG_ x8F[{i)?z"O*vV 燏noWohΛ{iGV`f"i6iח?or  ؈N!y 7wH2.z;_ə7fvfNf>V& YYW(&;7G9f(8 ȞY)7 )~xx^׉ IWyg6ƶFv gbN +*Sg[ (h^+7YF( J?ɁaICf;'g fFfΏׇw/fvfvRw7ZC)y_~(8V涖>{waIFh(.sJgyOHx&/)7׷>ֈ>I;(hf2'SRBy w? +^^((^II3z+N2j_oW/ȸ FC')iWvxظvziwi)3趶bgcf.'?nR;cʿG?fVF?zrnN2+77Ir`XxHf_)Ys6VFj 33)g/~ֈh&j_r_ۻ6FNb/Z~cg.>N&"SBw 9!y)JhhiS266?'׷CgkHƺ)9)7wk"fhRjS_(Z{Ͽo*"#VSǏ".F>ƻ7#VVv)ɹi?h`h_S7ii){j^&hnN+7_/g+ +b>.)S>VH(VfoIyg[^HVvS Z) +RB>r_ig.RvhFOw)w2;Wi_?">fr7 _n*{2^N'G6hhv֎3z)fvV΢_) )LJG'>vS{k2w3OSx[S{#KWw :hȸn/s3  h&^?⺛'WGwr^&2:/翛&{[3sowfV;rrZ6>; g_'WgG踘^v/I º#Oj/7B&({gC//_g^ƾ.SGws~&f +3nfv.3[ WO;N&sۇGCb CkJGG/8vfoo_WG_&6~ow>>Z;?BO?_/BjsSk*n~R/[zƆ^2_矟_7G*R&֞7i )gc:+۟O"&v6&:R2RڿK.z'??on>f6zzr.2og?~&:B~7s^VV3~V& gbss kg)wo~#K^&f^fF'/3'G_FV')7"N'2^'jnfNo':oos.r&?7gO2~VFB33Ws2~2>(FR?.ښ +S'W_Sg/ ^Fh#'?CC.Ɔf'.b+_{*ښ._NN?'JS[jςvFRSN&3 W G?3{Nf*_G_s"F^oSF&&>&~z3NgwW>v"(V"Cb&(Fvn7i^h _GSGsw?v(&[S/ƻ'/F(v 8wRiɷ K&[.Ko*>RkS6brFV΢6>_V^6;nYYWSsnGW3C'72(V`(WIyi+ii7v2vC2{緺V^:#>S2fz.w7*;_'G2B)RrΆ(8膸V.Rg)~;'_yIgWi9)#NRR־oc.k6hS.bwG9Yɷ)WR.&X`VH^)c9iWY!gO7 韎N~WH&VRnR#> ^i'[3ɹO?gIO"~X66CG3rf[?JŽ*CO_Gj?3nF['6.۲v6^+z2&S7'2I glj)?2~8x `H6.';W9ii)wGJbZnk6(C^fk +>_sJ'ۆsB#W'3)zþ&vbsbv^h(f&v'G )7i)g7_*[;~(.V((6(^FhsBks3G!Yi I!Y9inz^h@0 >; SWG_G'wׇG ىǷrfN^O7{n^^_7oJ^.3*NNi7CSgGrh(RS>r>VFFB/{wOgz.7sg3v6J3N(b"n~OC^2jGkri )))WGR^3VX X Vs'W)):yiWi΂BrFX8&N3?NVVvfo:bok N())7[g7V^OV6&r"c_BN;s{WWw))_#/G>>r(xZJRzr.+iIIiW G')/r:fh`ؘ``V&#g)3 Ƿ_S?3gVH +nZKz_~?+S_OC{23ƈ?'g#Kk_~>[:f>&^&6Nzh3Sg's3^>)׷ϟCGrH /&(hv&6Hn:R2s#hsgg I!WOVxX`ظx&B'gOo9 I9W))?S>FnV.R>^^h6hN{Co_'_37חw׷G).Vf*3Nf>fR&fns_>>SSj_''Z2OSRn~vfΚ#Zf6&C?>f*G) !GVXx`B;O'S'wB'7LJjrr?*B6ƚVN'o'w.?{¢'O6f"&&.&:_Z gJ +'_'gZ_jZ3 +J((6V..+k+~ +b' yay'LJ7g#8ؘ^o +#?))'OwW&ks/Zֆ>6fJóc_wr/S_G'J&rO'~&;.v(^.. ++;'cn?c?Jfzgg~^BON^R:nC&2>:[W)GwI!_'7WS⺎(V&~XxHf 3rGWg?_'GsW3/O/S/k6VhƆrGGs_g2OǷggS'6rƈJƆ^2'SCOKBs''2zg矟&>Vf^Vvs'i )ii'G~ff(8xh(f 2>G7)GW;wcvֶ(hJ{32NnS#soGws2kjo;&6^R~^2+cRB'#K +?rN3+Ϗc?Kgz^&r.k3.fZVBR^B2OrS.g )irf~fȸ8(O_'IIOo;>F^2^VvVF2 +B{o~6/ZB 3;sw7WSJ V(^66(vo/K'Gs K3/g.^&fRK&~^6&ZHh*»~'S_iiiy 7BȘ(xVv Nog_~rog'#SOn*C#?nN2c?S/n/gbN+>~&h&&&*g)W's;C''G'c[S(ֈV(V&FV(F>Kyya!Y9i)woFv86v6r"cKOcCZ{C26^rVFf"c&JoG)WWiII9Ii R&((v^h8JGron')iWw/7_?K.V(^fF.nhx(΂.CLJwIɉIiwr8hvrNfv&7o/cSgS':BJ +: .7g&FZVR^^6hֲsS)W'?_[b[sGw_/Z{ +FF((FVV(VV+s9I9ٙYaaYW )o~(88(^&((*Cc2kg{2n?B"/Rf{b;7)wg_oGORn~b*rhkfF^knn?nbSgǟۻgW)s)G6&Ξ&f.RvxhoWiyyig#2^.^v&>b>r7oZ+O3KNVVF2j.J_ڢs2's{_o3SJ"O?kZbV(6.~+22r./_7g/cKsgS g7_S{>fŽ&^>n^薆vFo')iiI ))GgoFh趶hhV興hRC+*??'?_WJNffbzr2+O3.N&^N//_oϏþ6(h^&¾R[cbR//ljɉ)gjk /f^2Rrfȸ(Vhƾ"#'WiiI))GnvV&>^v6{/Zo/S3o3s_bzʛ#^Fh(.~/_G7zBs?{_G7'oϏ'OR.S{RFFv+2.zZn{n~rB~&Rj[G I)g[n.J[~rB"f(V2NrCO'7G)Iyi'KbV6(((Vh(v~z_g7)_/2&R+R&>BZ+Ks >N3'_?Krc/#3β3S~~KCSo3?>v6&&Rʢ^.;;o?Wg?_g3K~&Os斖&^6v^&F6>+n3_gw 99I w#Kff66+sˋC_'oRks>&^COC.gϿc7Oj"oz*ʎ^^~bR +2.fv*n~ffR c'wWwg翇3_gZ^v6&&3+^f((vV&b[7WG) I9 G_;VVVVh^fNg_7Ϗrnj{FV(V6^?rocZj{"S/'ۊ.~rN#''S3j[bC"^2&^"/og7/C?oSj.^&B'JzFV(62'sG7wWIǷG +((V(6F6^vVvv6f"w7חSS?#jk66_Ë#zw_۲ff&g77/+f~>~.K>^NvF6vO'oSkSo'w)7+>R+'KNN&8x&+#s3oO'W9yIig^~fNJ†(VVhv''g7g7OG' +R^hh/#C'?k.BnNkǟÊ2Ž^~f&NG?/3:# ZKZJbf6Ro/sC rnRSWg'_K.^f^*_'#*f((H(R[/o/_)WW))w?˲nJ뾞r(v6hȸHHZ'w))WW7wi''/&(vV"c's"R2BfGwOû^^^sgϳksZ+O/Zrvv~3K;czzNjz7i )iWR&~z3Cڞ6(hh6f2ZRj /Sr.ڢS׉iWwgkJjbr^&6Hxx~;燷)wSs#w'3/FV~'w7GSۊZ& +CGk~rjC;Rrsco/Ͽ;VBú"ROwW77woF+G/2^>&6^gO3f&6Niig_'J"+cj¢b&ֈH8r/GSC+3/{[#o'_#ZfF;W ))i)Kb&[#[o{VH&nrkKZZRf{_))WI9';Fh({/Sc2kGg''i F(2C;Sch(fK_7>Ffo I9y9wg77GGsNZvVVȸ8rbڋOKjb"rShHhcGii)WWggk'i *N666fg#JRj;"#_'žx(FO?OwW)IiBFf;S;+:"fvhGg'SRfvsGIi7_sr*J&r.[˞興^b'##3r~S)IG ~VFk'O/R^HȖ;gWGOrn&(6^&׹9 _;__oo?_scjV f^^ow)?χN8h^kzoW^FVH)Wۢ>>&6f.ۃ_WB'_/[ZiiXFF&~NN.Fg ior''c/_cFcggǷW)g6vi )Gf^&"vs 9g3)/.hf>R_7_ (88VR+B""b"&(Fni'')7)IyyO v֖Vfs/Z&2)IwO2 c +V88OG Ig#(.3'iI WC*~&~&f^BG&6^*[cۣI)Gb+*VVFN**3')))K&VfSr>R[c{ZhK)7gogG's/ iGk68 XHhHhhCCǗ))iI G'S.F:KhXfR_)i*fڋ7)i7.bNfv^sۻ+.R3_'G?R&f^j>2Gwi7O&r.[zNƆ>Nn*gi)_)G'wW)rH8XHROW_7)g7GG7s66&~BjZNֈ(6>/gwK{/cgK..N^2?_)wg__FfONff^vFFz"ˣ'ggW?;{s;2>^^">f~hVƾۿW)w)ɉg''G28X ` hf7)))w)__'G&>rfrJVVFks_Ggs3ûC_w)woc k2g7Ϛ~6Fz#Z^N&f>3/ggg'OgGG_K>6V(.R/S7g_7Wii'3(hH XHV_g OggWw22Zn.&^6~fZRJ7Gsc_W3/o*&V6^&/O77_Z~>Zzn&nk{&vNBnoSOS''33Oo77br.fvRhHVfβ[IIWwǿWI''?crVHxx8HVF o'LJ_OS*[G闇g{{j*.N>6>fJ + +_7O?3s/rfF:+kOgGWg_ RNfSϊR +^fvV"r2sS : *[Wy WO/_;^f~ֈVhhHH(n{7)7)wG_'iiWGGO +h8&/g'sS3 +_WW7R+#fRzn&Ξ2#;'G[닳3σ*R~'w7ǿr^^ +" BfvV^N2_{"O_ 'orf&V((^JG_g)gg__kR(HHhvFo/6f/7ww))G'S&F R/:n^^r.__;˛ +sZ{_?__2K*:jۃJ_o6h^2ROO2&&IIo^66V6vvκ:ksw7GϿ Fv((hFC n&F2'ggW ))f;".f^ff&2_7G_/+RN.:b~O#[o/ckgS~2*zʂ2zǷo(&&?{&F6&G ɹwzff&vVƖ(vFGiWW)W))WgGOVh(^22F6 #'Gww7'?#rfNڛgGo.>2Ξ~~n2K_OZ"K_O3Zbc'SrBz'_?Z&~jsvFJg)iiw~"kbn~6v((#W )wc +fVVVfff&nBsgg''w))ONn{ŽS_K&((FbCOzJKbn^NGg'__gzNF.r?"~BRRϳ;N.Nn/ b^B.KRNgWG)WW?+HhVVh.3G)9a!!G3c"{F&vxȸxFHʟW)3K?FFVh֞S3B_2&~n7Y +_ +w.W)gy)){ֶioW!yr&8Ȉ8`(`Xf +^C'Nvv(۷W))Rh X(^ÇWaW9WcjhV O_kkJcVXx(VvjֆCV{C.&V&+S/K "W gn23Z?NVfJn"oYs/H'i yWWO#i~6 hK" rg_[ orHFO)i׃f^HVV8 XV6>^IWW_'23C'){/orHƶ.VfFj"j))7?ς:Nh&&k"gWC?"O +_/FF^(Fnv"#/o{O_'w ώ3F.~sfOg/W F(.r3_C7_'I'g?v舖x8n7')O?#2os g_7r^z^(^*bh6:)I?77G#RJN NjZ +vnfjǂS# +Oo23Bsǟ 9GKC~((H>^6S?3[:>ֆƖ#RJ/go9I '.VvhH(&6_??CO_".c +KOWiW)+^h(H趞2fNWwI97OO;n6ƾ.&vFF'7'O/NnR~F~ΚR;S_OúR*>#Jkr_闷Wcg^v&&&fh^ZO7Wcsú 2F^snGo"OgwW)G&HچfB/ONNgR+[ )_i)'+HhVz*gGwGNJ6r~fC_)[swg۲FBbFhfRj:n.+R#SBRvK7))I#WG.F +BxfNSr>{?G9_7O^zZ~R.#/n?7 og6VH(((膂ׇw^&hnRGOCCof^f.r&2woo>2s'^~ÖV^. +j'?GI)7׷_&RKvF6FHx(r'_g~z"S3NwG׷wwS'V^&^>fzn^~^O{K[.wwgiI)WW_[>hV(ȸVV.{_)GiG*#B^v&* g*cgg_'GwS"&~&N*'n2C2'^n:nC7 wW 7+6F8HVO*'Gr~rB2n/7/[oK^6>Fv^n&>>zN2Zz +痷O[?)77Gn>h6hVֆzR#)W)7'vOj[O'>NfR2FS#oz ̄S;FFVf2J3g) yW)o/.vhVȘ^j??w{v^frN.ggW_ǟSK3o:Z6FƖvFZ/;rr*_Si9yiWG3OJ>F(ָhRo7)'rR?Gj_GJ;&>fnbj+CZ2B:'ֈh(FfS79i7))G_>V6JZ^&f~ngi O'GOJCOZ[F6F66+Z^2¿w9IW)O'O:ZnRnv6ָHNGg_[Kÿ)w''W)SF~f6~r~r[r~jj>__R(^FjgIw)9)G_CF>F6+>s?C~Fii7'3?RZ.^&F~~2΂oro~n~>2bsg wwGgoV^Vh&F֞J;:g[Oo_7KB".6>&ks +B 3o/oSzF~n{GgW'Gk3Z&N&>>s[J'?s2^v6f&&r)w')_SzR~VRb b^Zr;R2(N^O)WWɉiw7#>~fVvHV(./K K37GWG/')Gg'sJ&[.ۂ6Jk +3.//B.V2Og'i?R"Bf* R NHhV6j[o')g:B+fv&f3r^>.S7IIy_>?V(V(oc#WGWz~&z 9w&+k(FNֶfVVo2JNjBw_h^Ƿb6vVHFn֏w_+fsƆGy9!IR#Nb(f~_G_?(68`8VvKog*h_)WAY(FVH&>Ǝ&H(/&: +.&oN?gIy w&V(&/;jn>3{6.)IjrH86'&c)/.zr cSff?;G+xHf(hb_o>'_kG Vn+{hFf)Oi7:)9yY # +x舎F*_/&2(^~2Ƴ2_ o~+_i ?OVVZVVr/_Fo +gϿO'"ƶNNII)#"'vgK>'V(fF2Bb7_v(6(VSi) wS'?hFVֈ3f6g"yi i) ) oi'Rx(6>SF_zGOfGGiOoϏ G_'G'^(hjǷG3nb[nvsnO&NƆ{:>))WZVf&?OG +Zfvcrf~2 S3wcfk((n?*Z^J_)gIY9[*vjh~ƖC&w^f+i iz'_ S'‹NvZF~{n'+F.&N :7)Og7gg'v&(f&^G7SN6Vvf>&OٹYgF;^Ώn+>hظ((h{"{/Z>sr3yY >(??rr6H&zλ'N~f{kf'W )+>&V +nZw+vR{o?3RNrIg wڏO&"(+CZ_g[)+bhHHFfLJBgw9fbr6&^J((8V(WO_ 7ɉ WWgfHHh&>K*.f(v"/3s_)W_2C_Gi;Gkr^?WWb.#^Vf&VFFbo.S΋{#_7)9!_sf6>nioW:r* +fSNV ؈n iW)WiWi*:^6~&rFhHVhVViy)7i W7^F>h6;.7+R+zf^Nz3bSB.fWgf3{N"_/''~fhhz'ן#o_r7 _6Vff^kGgF26f.*#*rSs&Z'9i)† BROS3bB&^ȈX(v6Vo*w79yIy9)&&FV(nf&kon*".;>'g'/Ffs)?''Or.²NΆvzK3ۺO_˂+BW_)_':j^*_w_?*f֖hFFV6~~rOc+n^3IGgW +cs–VhVX Ȉ3CoGw)?gyyvrvF~+f&Nr.z2o +k'r{.oJ*Oʾs[J?nZfNr{?s"Z&2>oKo''_g/w3/o^n:c +^^>r*o.澾R37i))O?c2vV(XHxj/g闉__?Vf+Z2Nf>Ɔ뇇'7ϟN;s/"CKsZ[/o.JFjF֎{~۶VRsg7scC2+λgg_R +&~RScRKo"b&>^ +FsnnsG) w_&(FF^vh~wi i?_O_jZ&3ƆF(f:#vnk_c)O's{‚&fJ R +#/>* __F:»"' OgBfZ;n^FKff^~&Fn^_o?c#7wGi))hvv^~f ׉i)WGo/o?_/r^Fh(Fvf>^bjCOSSSj +Vvv&Wg''r /">Nbn&SoSz*#'ϻ&Obr~.Bzn"f.rsGW_o~&>f6&N^^:2zg_o'GG[[O Sk^Fh(6FN/7ggϛS3##>bz*ogCkNRb^&"* ~JjLJ{r.Rn.oo'GO+J jrkk"zZB>ƞRrkk32jr"3GGgG_s*rn>>nBf~fFf*so+cO3S_g/G+jN>6njk gGojFƖv~R3_/+k3k/c[.>NrN_O3_#JKZ_/Os( Ϗ_2 O3F뾸V2ۣ_iwr#gk?o6ׂn_(r{gov'wo.ϋGV6Sw)w֢Wgvf'g^'b '()i ygN?wGzxX8N*b:Wv("V#>w^v H+GNf^9)r6i6hX_WYY?'&^W>Hz'^hII&SG) +_'2~CK7/O?)i/舾KhVOwo)h&x#_gW9YCvV36v~ɗ(/(B)WV)ƈƢ( ξy&fVRG6vv&矖^Sfy9)GN^r#w99g^{W)^6&(F;&VvJ;W JGJRc))b2v&G76FV)(.^V'ny)~b;Hh;'V&/i 3C):^fGfJ:(^V&ʋ6ן+B)gFHNF_vh)'SYBn~{n cVo+>ǟ&⷗7>)6N&ƆV)*? o^n(2//[ ?R2Ϟ"kƆVgin磶K#^rGi?~/b(fshfN'k^)_&bφ +^i/&y k~Ȗ2i²o~WK(#ib>kkgs?*(hi)nvVJ(IC^w'fvhN^6hO/w9!'(ʲh6WKK*_g~׹>czcFHKO+r N*W^Ks2n+.ƺGGJ(ϹSv~b游/.{i&3n(h'9'3?C8 W?rhF3~8 iK__F'v66S_^JIi?i&n~NH`Fw+gBnSS'&8>G[" +V VrgJ2 'ViSKWsG8VG{R2)H'isG~{.8HiŸ^&ǂG'ÿW.GKrkF^cx)wG''֘6k>n~fn2Sifɗb'S+>^(w_[.~+^>o{n78_.?B +~Z_6ho'?w_cS)iB沢N&.:>o7/R~hsC ^c7Kv73c__[ihh;&Fʈh/ǟ_7W7_)(Ȟ.^^ZN濉gFGSocJfv*hJoGG*"FhڣRKCo O oOR3ʲN37#'3ko.>֞R&6n>gog?βGw~(^?2#32N&vƿVB?gjZW V *)>*c+GW7—i۶6..NrKo3OC3s?W۶CoϷobC66FNK7CBj^(j(f'O3g)&R.nn6Nw>_gG7KKwN~KS2~(~:F_/gW/^kWVF.rZvN' +'oWrW)f~2Off澎J÷/&~)O~B?:7N3wvhRnI^*JS럺(hn_;f ?))or )+^fN~f[Ɩ WW266.nO#s놲GfֆkSBoG/) +F(B3:27&[));^r/F"^2bW^J&RG(7[^G*/'Og^F3FVVkG*Wj.jz>_F_;&S3'iKg2^6&^ώNg)NffO7Ns.nrRCKC{wwCʾ.66"_ +fח/JN2 #:r'bFJ[J#i_N"w>cgb6_kvr2+^?O;:k??22^Ow_ +>FSZ?Z{RFJFoO*";Jn_ik~+&V^~Ww?~ bVh&룊K'/?rs6FF>+G/;NR2f㺲6^33{)+':_6^33F/F{. g2*Oz2+zks> +[Sڞc6K~s2_ֶS&gci'^cfF.nSsO'Kv^>NF&g?)/{S^r2ۋ?"/ƒ6>곻&f+3jns'7f{{&^COK&b?"72f~/[sR>"3G&rzf;b2/ǟ';N+†J*g7B_rvv^vϺnnz/nCsb'G_ n>+g?WWǗ3FƆv>V6~;&.w_7n&n:B''?.;Rf.~2*zʏRnzOfZR~3f>o*&6&6FF&ʇcZCI W7)7Y' o>Xf^~N"no'o;gKo7G_bk'cSg)g+Jc>ng3r~h(hRr~N; R^VSG2:[/g7WWW)7WG)Wvn/wc^V` 0>.G_i bRkIio.(f//w)/:BvHGi겋&(FVH)G))㋎F;9rnN~NR)i7'g#Nv2G '&X8^2ZiWw B&>wgGnZȆ.)oCh8ȈW9G(x8iW)_k88vj7g>: +>~r~s)GgB&) )7)G.&(X@f_w'i.R[ w)wVXF6F//j/^hVV~⇉YG'w_kHhS)oGW_8Xv~*2vRvh((&Cii7W)7LJg"˗9 Ii6Vh0`V(C"+9 Άfƶ闇G)?(b'R:F()bR(HxȆ_b+'_Ch˻?'n^b&h~WWWחGr) ʞhXx>ۣBSiWiWwi)S{vhv>>;siGO?ZfV.B_Iii';nVH(:#Ξ+oo (NR''/j^>RWiii 珢)_z~&&hp@`fJ9.>W )i_6&. 'WG_Hן3S'oS hhhs'Hh +r//Khf^Gg_g77 +R^F +gi )Kh@Xf2R{IcNr3'wiii'(~n.S?/hhhֆ/)i7g7vHoo7Gw7dz&HhbR2#COo__O>膞N?_'gWw_/S^_wii)Sh`` (f '+ksi)Gig(FJR(6v^3_)I/NFVNS'ǗWG&v".bb2Rn2VVfnz S/zGW)WW?7G(hh6(fg'JN7 ɉ)/b~bF&bn/hFFFnwG'9IG/2V:Oj:r7C((zK/ÂR*ozF.N&nr*R;3KO7iiiW7x8(w?{rnk*3)w')W?[BNb>fR23*FF^;_37 I)'K.2S>wG#Vf~N/>Vn#W_?c[) iw2H(H8xH&#[:RN~b:+O7ii?jr. +2zoggv.o/wWwO">nrn'gg'j(v>˻ [_&rJ3s&sSZo_Ƿiii&(ȈHxH8V +{:N"{7WW79ycR&[ƶfC^fBn^˿/ﳿGoK .NNSgڢ.&΂;O{>F6RRf. +'w_k/gLJGWi'6(HH22^Z*kJg?g)II 7'3_R&vJfV(R[g)_/ncnGg2oSrkF6fF^j""JjooCGOW 9II>&VVH־r &B>˟?7 )G'oBr+#B^6&ZK2.6^rnkcW'g_úko_gSnBj;+Zr&^&^Ɔ"_/3C +{Ïw'_W9 '*&fVh(&^FξNOK))_Ϗs'&vfCKk:B~^~GWG_'?oKroJ'w7G?+N澺;^ff^n^C/n:G)7i9y c:JR^Hֆ(Vv{) WGOj#36fZ#nrZr":SG?&Z^rO_jr*3>[osJ~nrZNjgSj3{nc_*)i )3ZNh(&vh֞??g鉉77g_G&>.F6&Nf"#'O#k{2Zg'#:RjS/>&n+NF^2ۇO"zRk#7i )Wgs;soV(vf((h»3[c/ljiGϏG:s/SS~6Fvj{s2k[>B3#*K "7GGGkR~N2vh+k&2BʏWOڞ&~Rn&Fƶ?)7J.#' +Zn^f6vֈֆv/GW)))?'gg'G;&Ɔ.z6(HXv^&#wGk;ʂj_鉹Y9':v(xX 8hvr )gw)7r~&&hv(ۇ7'sKogww+z/_˺*.r>6v8k#Zχg#*Z:OG'g?giiW2^NF6h(F_iɉW˲:govHxȶ^^^[?7G')) WwǷgC#B>ƖvƖ6fHV~n#W)GgoCOǷW 9Iii7^&F>&v8HV2/g'G7w7wg)7_g?6&V.KʲsS'SSo;jb3osK*3CJ>nb2v^r+겺3{z~>nb/o/3;SG'ǷgOzbSrF6vVV6Z##CKc: cwG[ &&r"^~o{rfff> [s/O?3[Bf&23'GoC*bjRnRr"zcknr2^>:#/'Ƿ_?ÏCf6vFfjk +j.+c{G7wGg#*^F^"bN.6F_GSJj/C:jo_WJb֖F2J^^N6~rjZ[j[sOgW׉99wgoJr>FfF^憆ƖVZs')W)GKrr+~>kRff6(^Jog_GLJ?S[&F)W7'GKr.nfV"'~&ff^Rʊ#+JZ+{O_g'G)iϏs +2~^^fff6Ff>B2R~F((K_wWWWW_{Z"Rj?^>~&ffW)W_o.^:3'{"b*"NFhv:oˋnn*__ˏ?_?oGI)7o&VvƞNf^f&g7w)))7SJB⺳Sfr2.>V6^7w'__SbFfG_'__zƖV֖2So/Z:rnN.SN'Oo3'wW'_R>>>~&F2ʲnR2.6^^R+/))gbB+o_>~~>~fg'_o[ +K^N.?'OsSos+r^ffBS?/c>>B* +[n^~z.R/)iWw7Z~&Nr22&枆f&>nZ +/_G)W7;k2F~NN^vV(^.Zj/ǟ N_Gi iWo +BN^.R^^fƶ.2~nnJk_WW7Ǘ)i)[ZƆ^&ƶ^fV8Hh&/')ii/'oK;:V^cbJ3+>&'_'_o7GgOSbںB..nNr 2^6vvF^NR"º{_))i)ocb#o 2R6v(^&Rr#iiw_/2jBnƶf2oO_gg  GWii'SFF&~:*{2^ffƶ+.ffr*Sw)ii)iww_s3[VV~Nh֖^SG)iiiwWWG_Szh&r +;&&^&&K/o/_7777':J.b*:>>^>~nR&iii)׷_oc;Sonrڎ>V8v^O'__'Ƿ7wj#/[F^.B2rbk^ƆJoWW7Ǐ~"Cs#jJn&F6~*[#[knn>rNn?'g'3oS3o?/ 2&.br^h6v֖&2KGWwGGǷ3j**ZfVH掚ښRnB..곿_Gg7W's3ۚ:"&^F&>N&&^fvֶrnn2{c_77g'_?_''s뚂hhVV(V^.R +kkoooggB+ +~F&fƞ.>"Rj2k[Ïg_Ǘ_#"R +;3S +BN^^~nzf&"R g7777'___'_ϏR^N^f6v(V>>NrrkSGgOZ?7){&6v(6jc//SIWGG'[jjkʚ.ZK"z.F^>JO'&fF((7ww?7__c#_:Bz&(hhVhcCcrB?)iW))g:~n.s3:N""&(HHH((ZSo? +Z{oÏ_Gw7)JfzSs226Hxv&^>&273.^.c2I)wO2(Vvvrog_RjSsWw__'_:bCz.R.>R(hVHB'W)w?'/jOs).^^FX8FO3NfVNR2rw_jR.KW)O;RV(H8h6>j7)wGWG)ɉ))wOc&趶+C_˂((vRG7'7'goG7giisoonVhHH(N6VfRfvV(f~bsI w''#Nz/G iWg۾^f6f3j"fv" ;zZ66Ɔ&>+3{SC;&SgiI W{~&6OW )Z.>V86R2 +{(&~J׉3oƾ3O/gn(wW)*6(&>B"c7 r^:Rbg'˾憖+_)7)iׇ vFϷ3kVF.nϏBNnnN.c I w?KfSgGG)){&vvֆJwg_#RFfrrZ:o~/Ͽ?Bnog36(VbS?GWy9)o*&Bvㇷ'On~Fh ??R?_z:{'G_.^FF{3S)Wgσ&2sGgg翣N&>B /_zN>BZ:J +3'G_n^fvƞr ;/GWsZ2{^ΚK'G/nrzkʢ ʚ/?77ŽfVfB[37W)_^rR.~Z3?"~>N. ?/s{:{[;K*ZsSS +R66&z[_isnN>Ff/'ǟs;2f[So#Jz.F>.j?'W7_orr^fncÃC?/*2nO?z&^Rrjs3s[k&~o_7_/;B>(h~ G*22cbrB2 no'Ooo{2J:n^~rbc +.F Og'Kf>b?ggg_R^fN?_"~^F^^~J{g7G_s:k_OsCCr.ڢ#cR6vZCO7sO/^> z*'GKƆfv7GG'o*~r[2r.skZ;k.RgGsS[r.^F~/'G.f6~oG_s[br{ Kkc?B6&Fc'?3N>n''o''/jvb3o_'k +;;+k;#CB"~Nog_:FvFC['nNR_Go^~b3[sC". ¾^.oòS:OoKƆ2ϟgg:RZnf^s'oZfƆr/S3/s[{+J6ֆ + + ?.6sR +&;K*SWWGk*2#{KR^".v~o/6VVvsz JRn^r?__o3oʞf^/?Cn2n&&?O3J?gO'7s[C&6>ks_?{3??s"zwJRfF((v"_'+/_ocbf"n>^&fk{SᅬkZ~Bj[OG7C22RVFoGO?O˲FBJS_wꂢ>^cg2* +[+{o_)'6f^Bb[73jR&B" +7)JVVFn2CG_Cc;"#/w)((VfsSw)Gs#"rKZ.n˿?/fF^rbOs{{c{*j[_ ?뾶h6N3ח7{">F&z +k+3w'3rf&{.os :JkOGWW#zvvv6nZrC_O#:Nr."&>O׷oRVbs_G7*Rn2j{SZ2_snR.*J*/gn.b^^^ *fFn²oLJoBS>rC~;rCKrOs~S)9W^J((;öxf'wk2kVV(SS?6(Çbggw&;_2FiGf^ y99;'׿cW!&V&NR8fwh^3[G.&2I(?OG6fR{Woh/I)N")wIo.Ƹ(jx'isf;֚ɗϏw)^h)7N ++?Zh?Gy2W)/B6过^#28V:(^"~nxȋf#WI(xsvzOljyFH8&~^+W9)JfS36s)8^hr)>N))F?(R/O7 wζ +VHFJI3F^(>Wfh^?s.bV6WW3*i_>_ʆiGnn;)9R j86 _ Zsi{ +IaioF?(si:/J(Vֶ')jSw&>okKNF&H*_kZ>7!sh. &FNzCYWZ(H.'n^&J/3Y gNW_;93r*bH6Fhv'n"g'c_I "ws';>&(7RSVJ["~g>fB&kwg:vbB.vGRj:RRC.ÇGyWkhvhhV׳OGS7r9)C(8ȸXhhڟ7'k!)G GcJgG_K(.bfR6 iRvzO'Jvβ3fI * BgfoJ/hF^N"V8FWrn3ʆ>SFiif Cg"iIo2O.jJR`(8Vh._7FIsors'wi'&Wzg۾h臉?f^rsvI7 +g~. +/nhI7ff/hiIWJ/x32"xZ)2GCsOyWOgg(hJ8x8XVoII)/#)yIz>s&VV~oHiJkfΎC2(OKZ~.J).z)6(sG#o"{._z_^(kʞBk{h'#*"N+3 +FwF2(hW'[W&IC>&krhHsS2>~C/Fh)))ǟC"gRw_*R~KF&>R*;._.B)7o{*+B~rWSv^;:jr:RNg韶RWKrv*gs6W{^F8fx(g>2B* wnWWg{^"gv's?S + +~gFfo_Rn[>V(Szf">kSSBS3ɉoF&nfr/Cb3?&^g&J7?oV'7)W'_ +brvfhc*SZF'Ƿ?K&)ZZ2*SGs>*2>z_>cF//# +z'wo+r^Nhg#oO+C{(ȎWSZFVN_>no;(Ho7g_g:'>zk#2n +_K2/¢G&OGC3{^gFj& gr~w&BJ2R{^?7bO'? *[vFOwz#SJr ?KCʣo#^Nsrc;(o~b곳sG7r9i?N&#FZ&RkR>W.^#+~2 J_*{ +~6w'.??ϢGz +ssr&fR3b +OC.>RJzfF/_gng'jRRBN >gW.>*f&Kcnr/ڃ.G Wo +N*"&N&VFr__;ng''W2Ϗ^v+s&z7O#>"ϲ2r/O2F(FJZKW_F62{kg_GiIC66Cg+N'ff;׏f+gJ矣F&&co)Ύ~^^jOn&zOWǻk SzV(6.G.>'/vy '˺fVN.')_R;sK?'&֖~ƚ)Go.v&"_S[_w&&r.ƾjbSC{v&^vgK7Grzfoc&. C&23oJ7i# ??3h66^?)GC/&Vj7I7gV(&FF:'Kz((&> W'7O*^⾆nKCwLJ^6SRrw7hSvǚ:7)_oZs*vG_ɲ.26N{Hg'_w:^(V6V>SIwnV(jIfBZI)oȸoGohXf~ 9g;*g )FKv"z #6(gV_7_7(fF6OwyFF7VƈxVK')3g&6Cfgzh^V> WGIfb[o9CnovF^"S+'Rocf8?fF^Ngs8nrgٗ7wWjc.vw?gV&n6h_Ǿ[i/owIiJ{^~i &֞ +wYGf6NFr&s/6VNg )3g*NRnWzOJ6'?gF2b_cWh*_ϟ?"WY?x X`?bǙ9g7GIGI'^(sV3~f8hhczg.)!"^F^kJڶVFf.()?fvfIB.2nnJ‡a.~ +HVVg.v&nO!F^v6r_Yi +rHnF^Si)'rhW #+FV)9Wr^g3*~R_GVBFXHX{۾* )!)^V.hG'yob(fwjC(23IYIW)b/;'Z2ֈ(V w)KJ{WGyv^VZ' r6(8hH&)J&NB&jGI?nN9I[?w˶3)S(XX`0)9!a3?h.) 9O:nHx(a)s_/FVXBɇƊ(f"o/iٙBRJڇ3hv"v/o)y;V^G7 '.HGG))f8'_~n*r_)i&:k{~ə~ 6hxR~j?KƆo7irg׆ +z(rsf~v2)Zfv^_[Wi#yKFfGi;濃6 V2_VFXvfii')ZgGiYWONNS jr:v^J^Vǹ:hV^ +Os'Oo;7ij(V8Hv~VOr.)9'^>iJ6V^ڛ(&zogY'_&Z^VSR(#3fk6k J7拏nb gK'*3ZZ>WgB^&JΆ&^Fv2NFǗn'bC{7^_7IW/OJ'fXX8h6&7)WW''):~V&ZF2i_N^f8( )#kr[K_w7i"^kv/#NVhFȘ("sGoB3i)i)'k^WG'CfH/W_'ob&VOkn2+Zii fs^R&:s?_&sr[_G'rFvvJgwǷ+ +hNNfs??_~FR6gWiW^jZf'WGw.gS?ofVW)wn~hr77')&.(8^6Ggg [f*O7'X(rO)/{?v_JoGi ^&vf(/gjC6[rG9igV־&Fobhh^Ʋ÷fr&?'i2^8fOg cF( ._gG'Go#vh6N3Wi^VSǗ) wㇳv*_w"#ˆF_w +(kOI~Ξn{~n(8֎2yٗgG*vF;[o.rfV6KO'~^?W۶Nnv>"^[O)g6n6(rrֈ(z: )iwiR2fZ[ G+2V(Vh^Jf wWZ;oc~BƏ?3oƶf&)W^n2nN>7/7f&rN~Ogi_/†v(G9GWG[Fh'cfr_bGw^jR.C_7_+&gKh^2.Ê>wS:K?'S:bn66R(N??2R+b/))SVvfO +{G'gw3s+~^^&hVR_Z>RR3B&.?_o7 +B+?w_*^2v(hS7)G?ws~N~cgN~B~^F;g7S['/oj+B&n2Nƃ_o'w? ?^FN>2oG?G +nW23S&3^~s2jfZ/G OW[Nvv&(fۣNS7ȆBg&Cf¿9B)x{g7/BinfvWazJ)Ȭ8_qq_ _(7)qGN'W9".0,a2!93@hVV癙w((9(H'6 nxR6'() I G)y(v(C_&i7wŸxF*G&h2)w?)Ws_yyYvF(nSYiYoy2Vwo?86x 8( F~XH.;g9fOwrS+Iw׳Ț2؎Hp `VfyI ' +i'w)a)^X؈nhiΉaS;_( O)AS(RYGwr` :ZFxJi?Y.6Voa_oʏ!9yNJX,@XFrVVC_H!9 AɲV8`j(i?) (r[ɇFOH8B'~!7ggB7/i72&_hgr^'~^F.o(9O^. +&W{WS>2)W~_H( 8g!/j/GG[8VN6HCOƸfg! O wXhw?)?W' džFhHh[>~Z9?hfn Iه &X80h6h2cR/ !WɂK[OG#v6'3f_FFWjiZW Wb8rHvf6('Ri)"rf6)sF(3ɺ3jIIi!雖7?VHH@yy fƇyWs VWWcWiwhv.g)b&(rw(6&VwgOoȆf8WJXV8h. 79*237!!y)xx ؆.׆bIiA[SHf+^r/i(hH()sNΆ))Y׉)F(8(*)g.vHIW'&Hhɉ I76Vؚ.b )GO._ 9)ÆV8rZ2/vaIgRȀ #{鹿n&n`"g gGShO 'Go(XR?7GWwFxF:GS7Bx`8wٙzK87yH'ژVh +giɎrNg3c(8h6& +:*.>wWyI)(k6{k?Gwb(j_ɉGk&f"~*xvvCr23'2/ws.R(HVFFfs/)^rr[gk7Oƶk77K>(" +ωrϳ?wBI[cZ(B^"FJOsNs'_7_9irzhVv z2(". WW[SNvFfƆZ^b)g/N/w++φVIr*/z#I7+r Z+WW6ȸ^WGgFVonZ^zrF'g_'iG F6&k**fCR)ɷ*.f(fV(6&W GsC'7GV(n3gnofk/G7n&v((V_V"NIwgc;_ .2bRkK_w if(("z'7F((h&39WI'sCk3k_B"28'9 Nr&O_+_7 +Gg/cSg(fZs;kFFVóח9IO6>F>rZzF2ZW7*^>k7w)2fVKN&~rf[.GiWsR^.V&&(hsK_G7w)C/ +7gV6rN" r77i /F8zk:F(VBGy7K+(R;7oCJh6&sWSN.6>^N3w"c&&~f& " +ƆN3w)'?WS/ '7^VHrs)i9c^_3znh(6FgOFow)[^FF^2v2S?;I)kfvh(r6^>VgG7ʺb".bo7W_?2RF*o.rCJ" W+#[+&ƶ(hVfniIwgR~ j(2s'wWI)ϟ_SH(z/N 2OwI)g_J&vfZZs/ +VKO)wgnfgW_ VHvfwG/'Fr{37G6.owG_fvRk7' vH8FkC2FvVn; WGs*_OiFF(NN_~>IW7W3F(V^fJˆF~&:_))׷[fh&: ih澢ח?b:S.rf&R?G 6S^f(foW);&΢3{/>Fz{Gw)W^~(V:7wf6bGGn^Ɔnc7ښVRsɹiz~v)Wnfָ趆 "B2>b3?>VC7S6/_GW7[x8Wןrsh{*7'F.['RG{3gYWGWO^wi2vrhg9 ׿h~W7/h(h(I);xH 9O)V2ֶ_)) vh(:'iVzs?27v(' WVF6R.(hW7V' 'v8a>66WY9&Vf(v^(hV_wYyr 7rN7O _(2& gRvV! 3 hv ))^fg~_WZVXXhƉS7Ow7~ +SC9f֘(W)&v>(FB7Ww&f(&jFHVF2)~ni)OF2W!3>_2xhx~7I9hǃWW+{Kf39GIz׷Fhv~?iFw'!W׺ZB(>hb/[y))"k 'iiGS{vsf(( xHh#")_';'gBs'/9#^g ijkhI)_^裞)g6FHֳiNֺVKb(Nw)_W.OijOwo'Ǿ'ɺG + xGo?sS?)Gkv^K7o*6s6G2.{^ZizhFhvgc#VʶN{.rJZ#OOb>kbC~W_G)o(H6kgS_+v#GS)isxB79_"r&zON&~.z7y_W3("s2 )G{(&f&'2vx:cr_o_R/hG)"C`H(F>h +jS) gwnO GF "[.3Z.϶FnwiroisjsF.&HoS:{vo'G +#6HF2+gIwWn(8FΏvZW) iF:_W6&kO"g3f& +ֺ 2rC/Rgʟ_fr&V(h/^37#JjGiI'669!W78(NF(?wIgwIW{;^RGGs#CR rcJFvvkKojBs2zʲS/'O:k>&?SZhgwk6ii)_&Ff((FF&Ƿ_fKcׇG.K?O?:{.f+'CbF::r GJ(~'采Nh.g>R> i9b(GgiK>>R.2f(H^_Wr:bZn;kO))iGSo~Zo/w&s/??nnnWw)?&(&2z39y +f^f׉g^>vn6xg3rSg_?r 6ZsWG&zfF; o>h2&vȶ? IȖ&*j? &j^(n3) +)w_ÿ'*^h8H6.'?woFFr~G7WjvʳgBKV) )zO>6Rovh(^**G..i*^nJOB/_?C'_Gǖ(F興V& jnWw +bJO7W'_*R3sgk66H֏gw&O2.z.N^?wwig/&_wZb~f#SsgW+R~*7c2"+.";.f6_£G7'Ƿ.^b>.*.K*JW/Ww^&._OWW'cr> nBOCn#'WW'3JfJ/ rrϟk_Joozb~fkzZZN/*[ksg#+K>zZ +2_gwwG'GW )?興( 7?sSRz r:rcKSk.ZJ+ +;;Z.{Z'磢rO_2kf~V(rz^2~W7'/K)77f^&6V./:_gLJ)3 ok/Cs+ZƎ&Z_#&*zg7GSsK/br.֖FZ;Ύwi)S &&Ng'+(N&g_s[g?_JΞ6O)_+Ž3^gNN6r^V_''.3Sڟi3j2f"V#/B(6ƲiG/OB_iO_[?666Vhʟg O3 6njw{~gW?^^Ff3oO3oRRB[7W2>6"2Jnf^v)i)3>'ii/Rb^hHxH&/GOWgw Ǘò._ONN&wW^Rn_S;K+ "r烚>NR>ƆsJ~VFG"Άw)i/;Oogs((V興FzJ.j'gggw)WS{6&?;rR9I)ϊFξj/' '>>C_"fg+3"wWG3^3'O +H6vN_#nS.Z#W''Ock>^Ss.Nvhfi c(v&3.N~*7W)nR /{o&f&B>Wׇ{?6&.oZF 7G'+R~+>"^Fɹ77W'n^.#3ʆh6s gob6*R_2{2N> wG_Og{f&^:KfF62__#[_S+~rF^n^6wG{n~^^&3/g W7GC.&#j +jC/2&[6ƶ*G?Wh&jV3 J_?OÏ#7j.R&+k^fw*2K˻F>^Ά&C7ǟ +#_:&JsZڂ;r^K{˺J?׷CKO&&f~^r{F2;/oOZsk6FcnS33O??Osvf&n[o[;z.'Ƿc+'_[v^rfNrs闇_;{۳2nsnNB&vVƋG3gCחgζjڳ[ 'cCzsg_JꏋjBKϏ/?+JzB[Z +[{g'ij ^2vvvV^c'JBOiɉ'_r&h3&F^^Fb2'#'o.r~&WgOoKsr_o&(F~3;nZzJ"Rz3'Gww;cR^sVhF^{__g) wOfF^v_6^~SO*S&N&:3'#hJOgrF*O'#R^&G'7W‹?Jv֖h^jOoﳊ{I)3#2ff> +osNvvf?z3+{g[':7j^3n oFh&gF~ngggiOn[(F(V'#ʋJ'g׷ONoJF~{^v.zrrOS&R*2/b&+3o;G:ʊn>J_/JnƖZ2?۾vN2gWw"N[g#&((V~;N>R[3_7W)?"*R^"ϲF(F^k翿2z{R6{o''.ʂ㚏?o^FF;'c۲f&fFZ3O{CBkGG'hh6&2^fGwG.O#ozcFVn.j{FjsJ +Ci7sR*#b +2ffRgO&"{brjڿ?skׇ_&Ff(6^ +>&RR.7__socズ[Rfff;NK_òRbb"z'6f.K_sknrn~&Zr&..;[Gf(V~"N.ξ;Ϸw/G+'sJ;"nff~ +Nzj32ZgGg/O :brB+o:S7K:&gS'.>rN~{^2*'{3S)2v666~Nξr;#SG?/_J3'2RbBnN>[Bn;j^ϛ#c/.JC_.~.[>*?322sWǗ'2Rr^ζ^6zOossoǏZN"R{N +zNjK3o2ZǏ>O?{N^"'S#{N3S:*.N^J*[:zC^NgGg.s^B^&&&ZoC [gׇ''&r#2JffN+s'_2ZRB[?*["bR +;''3OC22++jbz&f^S'jS2g7w_G rfVֶz_.:)i__'7[.^N[/vF3sOgB> +.._oN3[sSKC>zsS;.fZb{C'rr:?g'g&6((6cr?ϷwSfN +JKS"~sOsC:#R¢rSs*3&n;J [~[^;O/o__7WG2bv^²2IW?b6f .Knff2o2C+roG_ʂBCJS2>bΎ +/oOJ˾oCF~r.zJ3O7C&fV6zRO? /Sz^.ښ&^Nںso?B2?"*c_O[2brۃ ʎzKz[JS'RSOznǟ)F6b(63WIKgsN/oFFhfF?J/ +?[/Gw)g_z.^FRs:R"ʟ_i G; +&&h&:G2_wwi?^^2FHVROg7) 'j&6Fξ_7Sw)[g3 +.v6V6~>/oFjCCk3W)'rNf&f'SSgW'#Bf&F [_i'SR^"3S +FV(ǷGGR*rF?N>ck.sG)&(^(>sOsk㇗G{B{?NF6Vf&N/Gw?3/7&bcGcRnx&^?''Ǘ?.?'7; &r2^&. :kkszRW'ﲺ&^^3;'_" +RFhƞ^;bkss2I)G_{7_N#C{#2xn2NGWs'g[nrR2F~n.&/fs˚RgGCF6RN +Zg# ?77_ +r&vhVfzʊ:;39_?'_k+3OksJkH(g?Ǘ/{ggsfnʊ~&n__GwN"Nrk#J?7'_j>*Nh&.SKS GW[Z3/J&VhVV6&sgKo3o_Ƿsk^B2fz~?ξkJr"_7WinF&f6nCZK'gׇ^"r&6^ +g)os{'/^FRFhȸ^nK*G{g'''SoS&nƖ›K~bJB +C3WI2z&Vv^.gʳnNk.FֶfhSnki?'oSRO'R^ȶnwn{sׇ3ob6Vf&NoϾnOss^'ח*ʆ&^.&v'fb'g營*k↎6h>*#&&Cg_w>jGKoZh~>w6w;CW)#ZFh2nkgƆsG'>?GWN2vrJ^g{j7Cr^>(^g'?))RG_v֖v6(BFjG'O;{7)OBk>Vh&nrG{/w׉OBr N#gn^3^nƶFfoO{ןzOwoF6F^f:F>''GS'?.vh(R/SjR/>^OG3Ks.2n.BB;7n.S&~bf(V6OG?o/og_S7#.r.hF^~&k.22#_'7_KOof&v(vcO3.NN.O?i''oK3k /SGb;3^:&(vv.*GOKOϿ'gWG++N(hVF{O'_?>rFro~>&rg_'G#:SO2^26sOjsJN^:6֖ +o _{{^F.v(::ƾCoϣO__?S*& +NV6Rrr6V_G'jgrR:nV+/S.fffff/7n[GO 2.n&nc2ggG'7b..Br&z{vvjoGg?cKK_[cj2&^>OZ/*f6^6C;:/ˏ#'OW7F~^n6R+.c~ WS[ZF.;fb^ +^R[ϗgGÊocr>nNr3__S&~Vh&憎+N"Sjkog#[Gg/Z>kn'g_RBn~Ɔ>>žsg?G7g +?Gs:Jf['/rNhv~f6&ʳ+gkw/Gg_&NbN6{Go_>Vʞ&:rvF&&RR_3_)+c_gn"{#&^Kz*/'/z뎞VhV//z7S g?gf&vNZ6K?ggwwwj~OOz.n*^(6.+J_7#/Jnrb^NsSG_Z~vff~#_GG?ws3soZzBF^2Zkz +3#/)'G{.ʋZ/B>+["V""{{Sw3k>2: 3/OW)?r~fFZ;_b.g/7/ᅴ"NfRg{^vJiG'7'JnN/*n.Vv&6&SꚎogg;~zZ/3+r>^rgOg2vv&n{f#׷)W/'O^f~fB7W~&^^n WR)_G^ VΆ.?o Icw+s66wwVchx)G2_G3Ƿ OvnǗ&V&^^ǹIɇ&Ws&SCvR2'26vg3#.Kn3g igzVV>"/*/RRI n&^.S y)FV( +";g[#;ƎK:{W^rWCj^fk_ +&V^N.S)yW/Vg[G*sg +R_/R^&:g(^f;n&6gljCrCoY9vH^:k..Jn9DzN^gw'Crx(;F.~6i jRhszFb[7")v.6^.(h/gCgc9*j>F^c(6˗iiSkg7n^fv&^RB~W '/vs/'s.g:*s7w^wk#nnv^FfF^f2O#__ɇ8FkcβGo^f?:FbW+'jZNf(F:"^*jw(>:Cg~oOj'wNNog(~f6"F2SGgo_GwCFKSbsˊJR/RBsIs#"Ggf& "S7Rnڏ oBJOW:oΖJV^¢Z(V_ǷSG?/_o)o2f6^J&Κ3#63*/[''8F^Rc.'cFZ''OJBN6r~oO^2N7GO2 bg7~>FFRKFbOgG)W~2oWSF'7>zB_i)*'[b:Wv8Hh^2'o^sgϿ3&.C_22:_c?jj)sNz+&/>({CG7'rÿ)_&N6~R +N;ZC~FW_'G{o#_(VVhb.6K >'_~zR_GF)/_"O3 +N(bs~vָ?__3*._) FZNoR.6FjRZ?SGG;R?fz";grs.3ϗOjoB2BWGrc'g?o*3zZNFFV^sK_'S W?FR&z S+6‡{z*n_Wgnz꾖2k^2>jVVBr??3?wF^3g7GNS;{og_66^.H^s>鉉&nr.fns'*rۏc?ßiwNo_^2BrN2kf֢'7?'f>n +Ǘ?:JgG7v6&F&JVVF~Ooi+z_))))?F(>>&'*V *f.+noɷrf/{*g7~˞&BfvkO33_VJc'bg/~S'OgGW_&6>[Fffrg3z)wSff暣r㋣o6oo/wN2~Ɩ&+~j_7#sZf.n_ǂF./Og+hvvF>Zn6Vhf37G'?_WJ*&&FbOk.{Sv/׏_n^r_gGhvF^ZNZo;r236RO7si7.^^6nS^6H־*)W/'_w w.V&?fo*KK>(6R?'OۿWi3&V&+j.Z7iGKg">_~Sϛ'iG_o_&rNJJvHhȈs)*Ÿ?)wv6&;r+>.ˣ''o*';KO)~((~z&v?) _[6&7sr^~oNs_)Gw&kB3nfvV(&ڏ_g Orff#?/JnRLJ'SW*&>2FF_wI ?ΆF[6VcOo;'/7nbNz&v(V&n;S_I'S"VB*RBRRnK׷GS闏sn&fv~&sc.f3f?sogs#'W_oNrf&Fۊs[S)iɟ;FRoBv./j^O7i+'#+kfnosO)>.nRRF&:B?o?^W_*^;+^FR^vrjogiW'N&2z>b:&f[g7)w3_3n*RNn:6o+[gƲo6nVr#&h(~6vh8׎/6!n(Zv&s/s6׷w68+NiYY"`h>ixSJf^) Ko0G3ciGwgw w2hƈ׷'v8h`oI!!ٷZ8{WχoRFXpHWw^F!9aI?R `iff`')2Zxs(X )'׳/@HWYIj)Sii+r HOy7FȀHy3( +7Y @7Wb.xGIi!!Of6X`&i)!6w9x0 7 +ow谀)! ϗ)9V0&8*i6C~ɂ02!ɷ'xHFW.` Iis~RWaa+疀29c+Nx`GYx'RV frfHRy9i2H8f)! @`('!!gxHA9I7v8h_Ay) R` (oY g{xXhn_`FʷY)HVr_yIFHHVyiW6X`8ig_SVwAى.xHǙGf h^{yV8>Ϲ_V~+ +ٷG>xhVg7wW(HS ws((H6 i'((^YiWNHH>)~ x) &[iF 8ixȈ')R6ȚIaVɇgOX B Z(h (W)jhxH/ɉ6&(Hy^(FW'FvȸS yI&[hjiWSHh ?_i);V_W Yi.vxI9יFR_h2ybVXGW XH{ii9)./h^_?)I^h8Kc{)hSY nR2^8_B>(_^rf"W W Z/_WnƈO_7F(NwW&WW>[_WNfHXvG)S3#giIn6X`BkFHX7)6HVk7)!?;(h8@yN{HhiJ(^7?sR&{gyr.8ȶ_9(V V2riyWC^__iXV&f_)CRH hiIg7^(~2G6(VFI響HH.ljW'rVh2ه7_>y+XRϷ.(b3a9 nV()(v~&7HvN>ۉ陹fh^7?>?orwvN&2w '(vׇ;NwW3*Yyy)^wW(wKzډWIiKh(jcG`xg w釲h ))Fx) IfV&g/xHh'))WgX`ֿW)97 +r i)VFO 3Gzx>W iv& ىWg&&&rGSH86hg9WWhvSWg(b!džhΊ_W_X gwwhHyyyFVvjwW_ȸ^wwFvxoI IF~66)IBVx; 'vfv;WIiivhGr6Rii92xH'wV(?7;&f Rh^7W_FVh?'zVbC!O+wW^F(xHf'9+kF6"gy)>HVII#_NK7gƞ>"nj+Fȸ3ci' +^ϷWwJ~fS 2xVzfg)S'(iϷy '[Rr>ƶV?wo_6'o:ʚ(k/g':Fsrj+8F#WS&JsN9?s[c/'w_Ck2(k&^n6>io?CƲs?iW_'/ +r#F.;_os6f:~NgGORK"Si'F.^*6fƲ&F~6: +S"SBnrF^F(O322z?jǷ3^G) Nv(ֶ'O~;wcnf?gR.3wi/{nf& +~&v(jk#^rJ7Z^//(^s_~+'WgOo2sC~Ύ&6(vkGo++&nGgN +v6?cw_ +Bo[*;{B&_^ƞF~S_s_+/K3G?cfjr~2_vw +3r&[GG'GcζF6>On3w's'K:Zۏ'_*'7g7/RF_sV:..+ NF>f +O?rGbb&JR~+jb6N'3So )i>ffHzriwR~棷r֎C'W~&_'/>^W77nfXr ڳ#Hxh&o7 o)Gk iOVXrFgWv.`Vc(I xrhO) s8G9oHV2Yy*/`8(Y!/雀(BH('Wy' &Ǘ `x hi&hfٚiȖ(>)V>/i(hG7wYxH@ YfVG!yGa7(h^&a)vxVYIyv^vasx`֋h&HowOh(&jY_;v8xvnY)g!f(AgxH .G'9h{_w9Vr wfhFI7Wvˆ/w 2WS ׆'?ٹ&^B: )zv8f_*/y ~.B6@&YV^8zw*(6xk!BzxOYG^{' ƘvX+ÙvXF('FG hv8_xzs{86F^W:n8sֳI K(K +iFkVf'ډgϊ"2fjKi~~&8V~'9ښ86;f9)vNXoy&rfX'V)ə˃F2g:_R&>VxR_I.n^~W(&76WBFG gI)> +ob>6鲷 &z{GwW^c;)&FH +S)3i//7fFo8'fnoGjWbhs +~GiS&SȺ8bgi&J緾6OV IoWȲV?hX7 Vn "2Ϸ)Fx~[J'9Jn'((nS8.rOljS&;.˷o).K32fV3JwI +n~'rW&fN_O2n_g·OkG."֖&g/Frn9^VffijW~^&IG)7&n7zbiiin&ΞiWǷvnFZV6F"BW7'K"C9'j8H;חRv.rioϞGK.[Wo^O6~*')##vfCwʶh*_7rvb6okW +>;>f)׉iR6hcwWs66v??2(/.{'.F+V? +W3FcwW[iNhhhWGj^f)ǞFFvzgj[zσsFF۾&_W7/v(Vh7/"^&F'7*7n?s2/>SK"jSVOK_o.RָRR'?rg(O 7'R;VRRok6c + +{+F.'9:#ƆWΞ V)_ɇƶ?gonچ~3oz~[?3W '7266¿&oGG2n +;֎27#C[g2jwR_r&gBg&&fRGB')zR/'zOsggoƞ~3'_VvRoS_&[c[W/LJV&^C"_fZH(z''G? (6./_)_#oJ6>C.V2 +/3+k?GǏf^+g[ G;VCB3*&FkVos/^.;bg#S"NS^+3&#ںO2'r~w/Rn&z6>Gs*SW[.({/9o_6Vkow//Rfvkz*~*z_nrv kξkJG9ò3*^~_+W*R"+G7^Rc?֞{nB2?.iCγZ jKOﲆNg?j_NƆRg#J.b V.Kjg^&Ngg3Oۖ*_?62foNV&~&Gg2JR(^igN^vWoʖk&JV^f/r?goR/>S:O3bR{Ks+N3_.[SgC&o'g.[NZCG/NO *fn_grfV['7KhF +.?:' NO F^J#bLJ*roÂ^f6O?7b&RV?_G*ZWWi7[c6V/'g+?JZ:>?χ:NrR&:3gw:#s2kZ&bO"3g{f^ngSSB ۃ37__b2ڞ>Rnjg[r>z'?Bb22O6(N*rrC{ʢf&&zz OsK3ns^Vn'G'OHG[_;r6I~(&~3''{F>s_.'b2(o[ +V6^gJ^r~ +so& +32Sg?*r.v:2g:gc;ffj>O3ZKn"_/ +KsfnrϏ7cKNO3f&cz'sFkʻc2>NG~~+3j3*+_SC^'G7^vVj[gSf +:Cwחs{~Ί':'vf:Wif~&VVoGgw>f.2ggwڿ&BOO_nhz.χ7*(6rkZ>j{i).h6zO>趲r^rnZzCG77G)_sB(b.6v–.SGS~>w9IIZVno/ +6VvbwwJrn^>7)zNVvsJ3 "rC[7w'R>/Ob>Rf6&ξ>.K~(^[_W)o+W'~(V&`8xx8# G#N_7iɹwGOs.zzN^6~>^ȶ^Nc +r.2s ++?OJ&KSC'o#;NW_ rf(R>[.+.N&bjϋ/>Zʚ.;OW C#;/{6vx Xh6fg)gg?73B>/;N: s2c_o;~ڲ2RNzrfb{ _'C;~no_w_o zzNO2*>¾fn&nf2CNV&Boz+W7ow7G2nvV(Ș`8&&{_O7'*'C_S.jǛ3_j3?[Jsj&"c'G+2N^cN~.{ksJ3')WW'?Λ:bBnbFλfR:#;~2'CGׇg'7WwWo&&ֈXXHz"Ojjgi'_{J_#:c +"{Jn.Ϗbr?{^"{/Ξ.~n3_+/;o_S_C##f. ^bRo/'ZnZs˚3ׇoc+O2f(hXX`h Nb Gwy GG3":z">.J".fZ{g. +r.r?BcO__/Cÿ#c.&?3sFfj +or*/n''n.N&>o*wׇ_OC)[2HhȈvvβ3Owi/ggO_/RNJCb&V.*Z_ +#KZ+ζc{CK.jBo/#kgS +JZS+JN"Z. +jz&nzNR+c/'w'''_gwwiWw7 +H88Fֆ.[3_7_3'w7sO:n2K N6fjS/{NBn~Rf:KۣS ++ +'?+">溳gC^ ڋ>KZ2rRj›Nnچ&62_'7/_7og_w)'^6hvh((v2Gg)S3>3˞B2&vֶr +c_+s?_'cKso+O7sG?>R /+3..fR>2z.#JkZ[ZsKSRKnΏg?GOGcoC7cfh(6V(VVvV^cw7'_'G׷'wWgW'k "Zn +RFֶ6S_3Z["oS+//O?Sn>NzOs3N~&^K #jS{zNcrN.B#_/Zo'O7gg?oO*R(h(hh66ss燏W3sOjZc&&&ok»NrNS{_)g꺢~ ++O?*~JZž˃/KKo_oKff.^n.[_G7Gwwz{r&nf(2{_b'C'oÿGgcg*'{Szr&b..nB>^.JSo?²ƶBrfr/gOgwg#j'BKr {*b">rFfoc:OzS_ +{3~rnRn>Zs_3_wSk32#/&6v8h(Vf>&"SgWi)'_S/k +Z2"&f&nCj:Bb +b>~k'G'Wi'#O^~N +V6J*j3CSbڻ"sSg_g7O?'gkFֈ֖V66N*?LJg3wWg'O/3 n~~.2 +**c_?#f3'g?/33c?LJjfRZ*ΞF[c[ +r:SoBzrNnnfn.b S7c'gwGs~ƶ6^hh(F~&S_Os[?/g'_C;/soSBC +Nf;{O'/KB^^32OkR2R..k Ã* rRKbRkoookZZ+n>N*3Sˣ_GWg/ڲ&&F6(h(v#O?[_g? srrNf2*on>.~&n cOG_C7G7?/>F#^&2[S2B R^.Bsj.Rn +Cj/#cR? C[{CF&h^f(8h>[ggsi wB .F>Fv6R[RsG_gZs;::''g7rZZ"6NZf#.R2'g'3.:2fF6fv.;.憻k*ssljWwIǷ_&.^vx>&3oiɉٹ'_rN^>^N^f_OgO{i7' ffO;"2>F6c[scCk[W LJ7S'RR&FFbJk.&vF2SCWw))gwOB2z +^VV8HhVfZZ;wW I )i)ww.nƖfNZ&FV6['wϋG'r&rrNo_?k +f^n{S77_3s (njƚJznWi'i wn"6&HX h(WwWIyW) GbzFjkz&&&?>O/#gF{R~.r7)G?Kv;_z^o{{s7 [sbfF&r"{2Ξ2g_')W7 7o{7oںzNf6hXxfk"_w)I7wg/C3CR".fFF^vnOGG7;Z3 ZB&οoG_ + +>&Z;3^fN'iGR{~:kKS ^^vf+sCkG_w/G'[gNC{VHh΢~>NfIo_:NrSsj~.^f6fV^+OoC7'736^vb'/[/c*^*&NO'sz{sn&. +Ïgo_gRf^ +7?~roG's_z CKOrkr^hbFV&κ?WW) ocZ +cJc˞^FVVV)dzb.g'Gڂ&vs +_/s[C___oS +KZO_F.~2S3/[β2vWnOgSs_?*' +_BFHֶ~"OW))7;3Sb'O?΢N>6~kj^+rzO#F~&Z3Og7_o?f'[k/._g?z涆Vf‚[*rF z~2sOSgwLJr3_))/FvVhv^vh2)wB;nc:fV^3Srڻ#kv+#+w7_3[~^F.jR~.>ۇWw/r6>JRZC+&fb3ks_z?s/O') nbΆVh(ƶ&.~i 響wGSKn.Z~Jg2~ho7zn_7W*s*N'7 {~&rcb2z)S_j^^V3k+ږhV.sgJ ˃7W/?'bsggwGosKr^h8v&f&n)'_)G'Kb *>CgCfƞk K{rkk'β3jr΋23'G_s_6vVv~Z/'g*Kwח6v^"fn +BC{{oW7_s_JS/'gg?v88&.?7/crs'G{C+snnR"kZ'On[CS~>&7WBffR#'Wi)''gSrR~vb^'NN6f&K+Js_G;ϳ"C#)k'i)&VH(F6:G/g3ڿc"V(~2J_gڏÎۿOן'7R6^ +Vf>>^swcK*SOFVfn;'RR:r)o +cۃnk3 +3#g^hv&Ffj'o_?/3S^jg3FΎ^&F._3bzC/SoG2cG_OOo"^62SׇOOC wG +.6^6{o.NbnZ>nB~))WGRsJg__S_)iF(ȈȈvƆrk#zZS +J3_3osڋGGcJ3.zBB;?''^bN&z{2r[?nnBjj3/G_.3+^hFn2Zj6:O"oJj_?ÇiozJ¾h6V.O;+R?'*jrS/s*z:2~.;S;Cn^^&k_g_3_s[Zs:RrFgG':zf>zZRf^j Nj+3??Skbo'7gOK&NF(v_'g/c/sRfh8HhF"C?o{rr"?3k#RkR^~"V.nc_'_S*RJǃON~gSS.R^)GwF^vHF6kj&.v&2#')i)GRϣڳgsfV#_#w_ioiw[[6&(8HHh_" +Or~))_ǶvR:χǺSRgC"F.>J3Scc{ ?.~2?csc?ig77 ++BFV[+F&h(gGGw2Ǝr__K2&+6f&g?)&FFnȸ^f^#{f&Kj>׏s##:_[3'2n^NZ[w[7Jj&&~bo#n Kڏ"C_//_)nRJ[N(FOJ;jrwcwkn&J?ZFn.^2+N*^/s W_r:ZhH6>2ڃo+RsLJ{JnN2SoJ"3kFf&^S_ ⏃c~&_f;S/ʞf+Sf^K#*W?g~O&*JN[BGS'n>nBN.BgJoO)7wwښ6h.^g?ǂRfg)s+7OBk +~ C^Sw_+OF/ zB^>'OC*r>f2'_^CRn{*kΞngW7ã/rh :rz; +nRkzR*;+3/Gg3.nΆVrRnZβ.F&;gc^S_Cf{Nf22*oZ'ö&JZZ3fR2.g_ξ:k{NO˞KrSsNbzr"c Wǟ"F&r.?&RjJz..;[[W7rZ.>;jvswor +*: +{Co'+kB&" +'3'o:/">&/?ǟnN;/^sJ?~Jbn&+3~)) ˎ~// +sZbBzÎ/_k_'Wf&R&cR7JJ_oO +2RK'ncV66'cGw: +2>~JJswggR +&os_nZZFk~6^_ G2?z.fƆF2?okr({'"j_rrG''OvvF~JKc'_ʻ'>n:CKj6>2G?zn:R&r~~>noWwgw&V"/kNfrSN(R_7+G_r6h'z?~σgjC?73 +sNNF2?ssjŽkR.&F&&* +_gc;Csg)w''J~^r.^6&憂G)Ww.F^?'cn;~Oks FH[o'+*{on~[b;gBzv&' wW)i7:&~;J*^v.~//O'3k&&s?sO.^&"; o3_W#'V(fJ;nS*~NF#CjF' ogOK;ZvVFc^~wG3 +{[r.~~RfGoJ6FR{oW'3C.[r&/J_7wSbfcbGnf2>#s*&V"*NSi+.NNrj2BR +^BNJ:jzKOj/{s.&n?W?/s?z&rn.z[g_k rC'c3s2>6+>'B. Ίr+s/^;#O_7_NZss&{&2j#O/ +[crsGƈ^Fn_^'''_.Vr+nK#:3+Brs_zꣿJ.r&NNfsJ_:BrzSRcsN +{Fv{g_GSrfJ2soS~6&n: r?Kc F>^R&/g?o +C'oKJV~r66.*Z/ZR_i2BbSJKff6s*CJffN+~njRN.R[Bf&GOi~SR>;;nCcn.;3S.66&___'g'3n[jwBnrfV*[g'3Zfr)W'S:kj3Sn&FF& 2š#Z'__[ +^~&K_+NvֲgWw^RRNr:J +Ks[onrzN((Ί_G/'+cח:(N>oS>fr_i#cr"f^ +RN>2:bGʶfb2S''Co3 gO"c)GOs&(Fۃ?r:Zi_c"n":C~Rk/Ȉ(^jr3gwg?s'7Gnv(^&N g.6vƞN?g9IGnh( +rCRo;wɇvF({bG7 I_K2Vh/)v`x_) 9iO_w)ǗONFv ``V(oSw))9ygB'nHx8^/n_s!yWV>8@ ^iى YGgYYG(@0Xf:j G)7hv `>3'ǙO)) 9YɿR8 x6gGW;c3C _j^h@fvNI)G gW'S_fX (  + yaG2 ;f^_Kki))OR`OG)ˊ'əǣHX8>)"O!O`@RN[o7Gb3iy hvW ):j>V(8p0VVbgwiAWI.xX2λfFb79)w&HX&zs"rO 7iIC86 낣W!y)rXF62{C# i9&X('_ !9gn(njn7F6H`pHVfg;w911!iz^ViGwW)wwvCwGW8(v(vSkN&IiǙ9؈f^'' +&)9IvH&fZN9yy9 &F&rNK(`Xx֞ 9 W'WY!7X8&ogJgwgG((c2gJOW )V8룇G;g)) `C>K/s)wɹs.(ض/OgiY!HVVf6(hvrii'88_) ))IIW8HvZG;?S_ظF&)W).7g /88{W9w_bχ'(Ȇ>?ggϛiww)ׇ2rR^NbgoJ>_`Xhbso  ^G)__G׷g_SvH2Csv'gv88V/GiFky'x.ǷwG_Gw7?ȸ8 h6r>'N+_i )^^hS'ljI&^zO `VzG_'7'wiGn^~fRJκ'i"B&(OZ;B)i~HVhWG#?_)C268^G?sO) ghx88VvGrK."GWoc'ǂv8V6r^VxVF)wGW)WWI9)gsNVrSncz)7v((hF3z'g 7O6hF~n[3*#iGC6h((n'c/?) )R^X6:*۷o!IW6f^>c&((^&'3Kz(f? 7g_'i'精h(v(7SƂ;owO~v(~iG h(>?G+~7+s2SS:?goiiW֞^^''[Sg_7iiF `x&rWG)g. +6Wi?_7FF SSr&&._iiw_Ofv(jw+~+o))_h&fv''{ +)'&6F^_3*w7{6V~>/W)n";Bn.xxX^;W77wi)iN(&sc?C'3SGJH xhV.3Z /7S{gO/cO/ +&hH&zrr.>^*(g)ɗ[j:KIy9SRwiGjv8xHvr.s/׉W)鹙7ff^GK_w׉)>Hngc*㊺gi9I{&HFf>k+3㊻_WW;rfk/ +~&*i io~V(>#gg:{ϳ_)yIirVvk~fV6C"Ffk))w)IɇږhxH(FK?ۢR6".7Cf(V((ֆ2/gGsS7Wi iiV 3Kk+~*sk'g2VV8hhr^"n9GS +h62wy i y7#BBHȘF^Vns:.F(6O7Ii'*FVh&G_z:?_:vf&./b77?oNRffJr&Ni7/+FVhF/g__SiOf(vrrji Gg{6Hx8((V>sG) IW7CNsg)g/K_) iW +hH(v^jZ&>~B'C77_o'I9 /FCKN{o^~ +χ3Rf8FfG7'GG 'WwWW/~2o?oSw_*V`@hh6^vnCw!)VFgWcK›i׏N.F(nF;{)w~n^֎_ +.B6yWk>pxx)GiWhi)+(XVi_!!?bcI /ֈhhȃnۗNx&^(^^wSiY!1&'_Ȉ(yi(86`3?g^_88!ȀH^)YvhhaW)‰Yh3yox8X.!!:9'I!;gH(XNwG> Xh(GiG6ȸ[!a7Izf&gcw6'Hh8x3_{f^ÈG VfH&BW_Wn^(OfGHiir"hRgf(F_aWyi^Vhb~k^1a`^h8`(? 9V^Iiy3Wk^&GWNN6rb^舸27:{B_ωWWFHv)b+hJ)~8Fk +IW7(^W SZrVk 3y)FVg֘^!G{6I9:HVi'ṏx3y9fh)'ىȈVFsKy_ryG3k{iSh&:i _Ƹ6hyi>C)w)'((N7_(xhvk^hV#9yIi'柖VW s>&_n~!i_rֆV_ڞ#'"i V {F._J6nhaX>O'o~&H6z!&Ⱥ[w /6 +׹YY) +~^H~FVF^3h#IG)sV'2{7rh`>&nI)o Nnzf!A V2~hhf9iFVO!yؘڗgF"9i/#)#Gv'gyyS.fx@VVO+OvVIgrc__yfָf9n.cC9Fhf/sGß>V6h86SWO"KGK"F(&Fswr.'_Z66FN798~./^h8H(V3i_I_R~n)Ï[7o3r66 +gF&r(hRywk6."( G fs#))sVظH؞sf[Ǣv&G Ɩh^7_? _'iSiO+OhOi_Gr#Rh(b/i  c?Wonv3iYWOZv.Gsw#(Gǣþkw_) N{f_;?nKRvv~{)GIǿ&oZ7'fΗy9yFVVBg/NVh>(*7_&8V)wI#)gW3BxRg +)&.S6VXƟ_[iG)f.h#igsSRf#^^zWGk6f(~2)G+3;wLJjNGyw{b2oNhRFH"Of&[H2s{&nw_)Ww?6(&V~fۿ+V6O[z'wiGfHF&/Wg) F(V6&:[6s6F:o7G&3&>Zo^ ۇgi>"'yI^bR22Xx vF~&FgO_'w992:>ۿ Y٣3^J~Rh(&>{Gi~Z&.^'nSw9.ž'+BKg7~v螲c^j'ǹ)[2?__矉Os~c?C/&((H(b& +B: 7RsON*3Gr:.J#z'_ˆfvFgZ3ˏg)K[ +.rO7i/kn[/R6&vFJ__[fR3^2;;ɷG7_3_s262KO&VƖJGi3'g?jkjgo22&c3J'Sf^VZ:Ά{/S +N>Jon'Sz +_n6R>s GO.2.֖oiyiiso.nֆ;*ʃrj¾N.Rs[RS7?w:ʢr&*~:nRo3_[ k"[Z[C'g_ǟ/cf&"c&[O +Knrh&Nsbn +~n;3^)  O/3f&VX.rF>^~;kgǿ'#ǟjjGg†_S^>&^fi)bNg:cZNc&ƶCC2 +.Z>Z"ZK.ggSn~""Cξ֖ /'Ggk? o[#7wO>G?ONrxv(;+7Wf^+BN3sR^ff>~.f^rwGw_s[RoGw_Ok^Fo?ʻ? +R>fF^ +ZJNb'g(&fW_#> ׳#W)y_?:ϸ8;o;HȖw.HZoɉS^_Ƹ._HƚVc +6Vis_w_Ggi.>r&"~V66~VWfRbCww^/h^z GW"–nk))w&'GiO&f.Ƣˇ;g~ 7W_);rO3W;Shֆ^;.[/Og^v6:3RB/f›ɗyicF(&Rr:r~i~[.f>nS_#NRO?)S +w.g&IgG [V_(&(( &vi )S^sS)+Fv(آ+7ξZ:_)o >~K)z3۷o:#"?HFrJ*&N 'B[ 6[j.O2g.Cw)cBk/^Vx2'&>7 );g) Oo_G:CVnvr&(C{ +2ڳBF7GI&2βn>G:~7W7oV{sgS^s&+2_sS"_CZs?6f*N#^K/Z7Sio.2Rb^2(*ʞ)3z?O?φR?3ig2nfhv+&C+Ǝ.nC))73KwG):Z6^2nS~wSOS/7g:^&fFs'J^Ci>6V(_6*o)GO^C?NB2G_72F2n>FcOK_+#Nf[~*": iS_r&z^&F'b:FJ)i7N~Rc_3J֖&rWfbCZo &"φRS[>R['_SRr{_s[2~h.?CJj^vo)wif2Bf[S/(~joJN;˾3  +>ǿg_O_fSo[ +N^/ .2/^3s_gG'KSSF^>SovV~'#')wz_3V[)Oo.rhbc*'__'/of2?or^zsΖNs'W^(jsbNfFJ#?__RFf'z(>sS[*k g)''7s6>>^fN.>#rR*'')gg_3J*JN&.fBrN~&jZ*2zJ;sS;s/3;"^#N?/"f>/gs{*n惷jzNβbnB2frn ks/ +;k  +{&FS7[k:^&ffnKjJJS3bGog3nRf;>rb2f³'g??S[sۻ'.;+2Zzf^&&~OK7G/cΊR*?k&^g7&f?3S>^־.b"f>gr +bBb{nJھ3'JNbS NrROi' ξV2n+ +&>掣βSS7i//nfr*+[+R^~.rS/ f2 Z_'ϳ[ f~NO/fNrjs/OO/*ʊbg'o2KJ3*&nZfrrKˏ~cs^FVfnǚfV(&iIVO_^Vv)iJ^^rN~B#?3nS3/. +2'W*&&nSOFV>7c.3SvVh&>J#o[CO7gF6&rz>Bn./7#˟cJ*>R& ++R^NG&6_7)g糆FSgG{.~(VfN_7''_NFF/ +BZ*;{3g &&NZr[3S&W''~.Cg_?Þ^&F.K.Σs7w)i7?ZƆ +B*2~~6&i)OrB^.3COs/r^&ƎZb{rcK+KʣN2o矣RF*WzV.LJS{rv~w;v(>*3+oʻO'SOJ{Z.^Fv^Z+J +ÛßK/w7j~6Ɩz:nnZǟOn^^+Sko3~ff//7g2.j;7k^~& +/wGO˞^NϺBkj +_c[: &f:[o'_;k.n3WvVV;_32N燷wNF"nbR:oSg?Sr:.^2N#"s +S#'#/[;ʢ.2#b Jc#Jc?{:..rnO/RJ^;_)W_ ^."gR~&&[o_/nb://›zbOoo/ۂ^6NNRK"csj{+sgGg_f +RFFn;wg_Z^ֆB3?3_3BF::R?''oۊ*j2##KJ.RfcϏ_g?kJc? +*n^^N2J*?owk2>SsBrrZn.b'*VVff~_'LJo&&&B{h^'I7'?JRJG'^hNiGvʏZ>KnZ +[s?b; +ʎR +&B"')7Cgkk>f+O_fr(hÏ???FƃOOr6v?gSjV&~'W)Ckj&.)& +~jOsnK#b3/grJ(f^rjS3~.fÿGwG+;*Z2OwG3{r^&bG>hX.S)wn +3os g.2Z_s*Fۏʎ'KN^K.2{2#fNc{ږR:~;Rf~;G7i3:g)77WWJf&(HX `fVCWIWÏg_g_:&^~fs+R&fΎv+gWWZ>fv&~f_K&..^FB/og&憂2)鷊>˛_Wis 'GW#```x6c'''糟?i IwK{"'OSFhvV(貛cF&&v^>#G_w'BK2 +sWWK2nGg?oo62{/s/^fNc'')'~HVFhV֖6NG /gG'ώF:#O_?3((F6(VB#'WggNf*')'?2>ʺʳ/s"J&v&.Bb/g_.6(& +s))&Wyɟֈ  HVN+.iI9w'fB:;wG^fV6bcNcCG7Ƿ/_3.n"K_O'"Hv^#sn[K6VF~g7׷[B*#Ow yYɹǻn.>fFfFh88xHgWo/C"OWi9)'/;br/Gs{.VV^k?7G+(nWWGCr>(VNg;{ +R&Vsÿ^roww>&R#G)yi+fX `X~.&rNW 9igi;rǷWW32h6B33/ʎZnRRJ_'/.F>>s?G_o+6^3 _S N涎r?o7Go[NZ.:_))[rN&6v(hhHx88HF*kw_c; 99i3^*kN>V8n'g&fVR2S'_gs.?o_G_'RRֶ2/ +/CK.F6(*>s+o///ó)G _3Ζ(X86Vr2{&*WGw'?ۂ/_{" +jn"&>^ +3*KoϟLJorN?_[3RξOSs ~ZB sr6.~ +c/ +n:2W I)?3[F(66"fnJ wWs3'3__[2 r~.~&2S/3z +[_G'OcOJbw>ZN^F66fNBB&:;sKbNΆNy9YIi''{{(hxvV薶fJS/_s?_)WG:cso2"{7w/*rN>>&fRr#?^&NR6V~&7wooo3B 3sOZ+gw7' s[RhxXV&(VrWi))iG'?/g__Or~F(^> +7G~ڏ3J^BN&s+3.jKJZk Z:"O_2zGwG77*g9)WK.^N.ffvFFVhhHCLJ_''?gSO)yII97gSo;k ^^vFn~.2.FJw''wO'OF"&ZZ2 +b:N^V.Ng?7G7goWKVVv^&~^&Z G'wOKkN~K_'36R +rOs +7_7C7_nN^R~6F&.꛿s..;"jgIW))GS;nkFVVHxxHVfb#g/_ϏScob^O N BZbN +&K"?:#?w''3j>n3o#&6FR/rBoZ{_s77)חW)gSR.n6ffVhVV6'OGo+;sG7ǟCϣ{ +^?O''+s'_3cs{RRZNKkZ2j~2{.sJ.BfF&2S_S3c/o?׉)7O_oZzrGOF6HVhv6ۋWiI g?σ?gGk.f^NRr.'N +J2Kz'_O O;^6FFnn#z+C/:j +z+"&nS's˳_Ƿgg7/"S3Z&N>VֈhV&F& +/''wi)W7GSJzj nf&^6f. +b2bJ_S +*S +[3_>~fb*gg{NvzϷ77/SG*.h(Frf>nRn·)WigK3'>^r2.6f*{scS>F;ϳ'_)Ss3C#K;N^r.F>JfRZB>&rCS'W7_W3*FhFvhHhh(vvGWw)i)W?>~^2ڂ>#S +bS/g7_o[/oscÃ'{s[ڢ#Ff +>>FV(V. 3Bs?'GgWWgǗ)c/ֶF6h(hֶ +/_'s_'ח);FB2o["ھbr*CCOG) 3r*b;*nfvR>j~&nzꂲz +N~gw))ioo/g_GO_j&Vxx8xHv&vFk Iii)G'*_s_K~v^ +. [ Cf^FkKoGJs^^>NS?[ScN~RJۏ/o^Nng7)鹉W)W'/J~f^vFVHHHX xx^3'7'_))IIwgZ.^'Cֶۛv +C3ok3.^ƎzkOgcRSo#OgS +:r~v(hF*#ss#׹7G'B(HFff +OG I)ɉiW'N&&vvfR&v꺎C#s"j+w7:SZbJW?3:^F^&v>orΞfvH&kzo_'ǷgWW׏'3{F(HVh((Ow7))i)?o^v(?bJr^Vv&~&WW/OsoZKNoC/3cc.&&vvF?g )WWgǷW'g_o/3b6HH8H6&2{wwzn"O{ +rn[;ˢ.[sSo[*/Wsb^N~憾.Z΂N.R?;SچVV^oSWW)ogW) 7'sk>6((h8xH8hnǗg_Ϸ))isoN2r&fj#G#;.&&.c_O3[zOg7/jbr&~rr3kr~:jN>'?w))7_OoiW>VHxxh(H(f*K;+')I9i' +& "Bkʎ"cG66>"3R +3*"^2gR^#r{Ssv((. JgCBc'gsoGo;{OoO* zƖxh(RiW 'F((6f6fn>fF"ˋ''/r_/'s/_"g7Ww_2ZV(.&VHR&FgǟGGoǗ_OGg_~FbFh(Hh~Owi'3:w/+*b&~NFF2&^>Br*3b#K'[?o[{jco_ÎRΎ7[ ?"f^hV~&V(F~G_ 9 )ׇG7O~>6ֆ&Ȉr&B뾲")/#;+k_^^FhvOK +c#O/oyIiGwWWf滛NvFh;r^&vb.g;3OIy97'/6>R^>68`` Gc/G)Ii_+>^&Z3ϊ^Bf(f7__sFn)g[g&.N^n"S_Sf^6Fs#wچFf2/7WIgo{O *+(hȈ^H(HVfNNI9 gdzo_ogGg3>NvVvvn? 2{{ ZbszoRnBz?O_gs3~f>3OOr6nRsg3j^>.KCii))'/>/&vV(Hhv{B. W7WWWWGG[R^VH(H(V~÷G/c K?'OJgG'BZOnKn>"v^.2JgogWWIIw+{rֆznf^v(Vsg3o SS'SGG?sB^VN&Rgg'gcg_"._ׇ/zf& +fJ +3r^FvVVh(fnn7w)77) IIG?/LJ~FnVf&N&~_3SϳoJf~rC_srʂFz_gWg__^Zi9W/ϳ>."[ +f&vf^&ʏ_Wg/{.(F~.cB/C_WIiWW;>N&(vfVV(##S/#>:I9g?K^fZJk;*3*jK;j'oNZ;?S[o#[nrJ .v& +"77#BrƖ('7g_^rSwW)ן +&ֈ8vF.^f~&'GgWiO+Z^6vVc/)rNʂ;[s{JC +~^^šW7g^V"kLJG +^((RRNkJ_C*RSO/Cg'_SSCNNR~^(fz ??gGG9_ +FֈHH(o^^~ JfG) )gc:R&>'_7"[KC΂*Ss*ZrVVvff־[g7')WwJssW' +.Rv6RZ^2^(W3_&f~R+ 3rNOCۚS7O7ggg +Krˢ +{_3vRbK?sgNVhHHh()חso*?Iٹi*F((vRbR^&z">^* _Jjk枾*jnf6&gwr:*o7OG3K"nr_o{ZhH>^:'S 2^&~JoSocg)iII9'~F6&(h6^z7GG7W)wR^>r_'ú ;s.^6h^:')'goFocLJ'32Nv66.:rCn"ˣS/ ?c??'GWWgs&Fv(FBcgz6HhfZ9y iWw'V6掳/KfRN^&bGWOR~^&^^.~n{)z.J +W KCi O'Z^()aYI />(vs/_K+j>*.KsZڂcW3[>&6VN_ +v((vv;)Y 'j.(Hxh.?Wy9goJ~f(VSgi)HvF&&&FV_g?s)Wi9y9i*&hvv_ggg+nȆgW77_ώvh'ggCK2F6(v^jw)磛 k_gC k:k~fv.7wGOr~8X./3S#f>KyY9)O&2z##"~vV~nRڂ#'N+GsfB^CW?OVN{iII 2^h?׉)_>2Zb3czڂ&NN~N.s'R>S۞3>JsoLJ y 'V8xf2 sƶV8HRsGGiGS+Z +Rn[rF^RR{g翋/s[ZF&JSi+3*VroGG';sj8'Gg>v>C II_["J/ڋ#C&^Ƣ[n6VF.3'IcN&&~ O;r((oGg(h:sG7G?&f3?'__nb*F^6(F2Z+[ϣS7WIigs.6k;_''G?(v(f^Og__zC£gϏwgg/掂(6Nf^6.Kw7kJ&.OWI_2+fS'R6(HS+VHxW)9)w_g32^f>.;nßCrֆRC'sssnkgOhh(hbחwGg6ڋ'W)) "#_sr"Z#b~n6(VF~fN^bo*KWWi yy7'f~~β{R~H6vv^_''r憎;g' 3bFF(곋~n_Ksgo#_C)7'ϿB&.JsCO'jVvFΎ.3s_cFhhVfNgɉw7O'g' ?sB6VV8ֆR6~OWiIWwo/Bc+Ffv6N#gWz†&N +7SSb"r"sOG[ºƞ~O?o_6ffF^ffR&".+2Zwg33_+2zrꏟK6^f¶(+'ۣ7)WIi'b (8h΋rRRz[ΊKoGoo;2^KKOw'b~Og*^~j*fF&.vhF2f[{igi)wo ϛ:?Z&6F(f~ii.N(G Ggg)KRCX``Xฟg&k_N&Ξ#W ˳'OiY!9 +G^V8V˿V_))ϸ`)>g)9 w^(h#h:'/HV6(&(VhgYaY xKoWٟ23.N&WrOWw)rN(VXhsr3w K6f( 0Xb&!yaIa9gw6S +_hVsC&iV((>8f'9'aZ.f战`(Ɵ7__nF26(r6WogsZ)gO9a Ǻ^~FFS'y7n^V`zf37#فIWw_^S'gN^HCN&6(JV863[Wi9!)?"6;^ob)*CV> .o)i &o.Bn^F9G_7&VV6RN_Jg7N>׳;>>S:^_S rfrh()˷*JɁaIzRhxȘx&JG7?z[ꚎCNƎr2 y)!7ˏ'N&oWW (^(Ff8(&*/i)9KJ^'K:F_w.3(6Jv&(jCakj.rF(xΆ#3Cs2B&J>w'wYI_?g? v"gZnh `(Vgr'Iw/g__7rƖbV*)GIgV.z#)&o_n wo~jV"(cgi3fƖjW)Goin{)i7.26(f^gi_(hVȶNVVHf?7iyY))wGfrs'Go/3BBN&HVVƞ~ښ(nNwaahƺ.'rfn2‚o>.ZgB&VƈnS'_ WyBj[Nf+;ωSVhxhx^jGWI# S釳rΞ>JO?rVH`8CGW?Ww)Wʖ:f&v_+[?n.vf֏3JZ^#)i_J&s&v[/o ~n2(n8jf^sOg_g)3~R6V(;n79!y g_w_ &.((f:bj#_OnFN3;n7ǗoOsk>&~S.wچh(8 ";c&{O_gw G' bbK*3nG Zz(h(hNCvN{ɉٙY(H(^g + +v&&FRN~o"{FWi ǹ v((W))'_gG*[N>&fHX Xf&rwI'r^)?w^fSr'C*h&[IWis+2.6n&zS''k:HȖR)7W.Jw?š~hfS_i's^(8X((27o +NbKG_Wii +36w 2V&(HhNr^{Fb*igiI7*8xHFg)win6ֶfJ~"nNb2g))iiW)GrF&nf+O7w)S./Z'^h薘xh(^39 wwf^nOo/"J*/k7:6(HX؈h6oiYY)ɿ>_*r^β^6R>vJG)W2hFBSφF6SWLJJ2VfSyy!ifȘ2zZ''S_'kOWO(&(JoI)vfn^Vv/2hVG)Y9 GHv_)ɉsvfNz3Z(Hfo+')gW3r>Ow)bz..j&6I WBΣN?/_vS^Cigg~V(Vf~[ )IiZ2W.fv~fn7w__{..8V.r¢#>NCgwǏ>^FsW yYI&V8H(v斎?#3'/'nRR^6Bڇ_Ww&*(3cc:v2.gWWGFN~/7W W&^NBg:2k7I{SOg+ζ'G/;'O&Fvhx))iiGg*#>'G{Nj.s?.vf&(~CCW'_+s3&>Sr&kfwiWi/#&&NZZkK3bBgi?FV~* wG(FVk>&So/ϟGCoo>fΊ[G ?O##.SS"6&(VJw)i ׻~n8hhƆ'iKj.RbZ((FF6"r7''/Zʞ'ScoWSK)#Rs&vF8wY & FVgIIo)θBK IGB^R([f6_~Çyy?ÖRNCbgo_'wgz&FV`Wf~[) gVfwW 9I"VVhVBfo^6c;sSWW2CK(vnׇ'''7+RRK_bRZ>ƺ996Hhf:'7ɹ)9^rHfkSiii+Hrs 's>hj{G#C3 i)sff(~2s))iff2S:/3g'v8v*k9!S(h^7W_S[F~[s97HF(h.? +Co7?Os*#FGWw_n(H(SjOFn^^CG)76~:o i_'H8oC&fK'i9G_3Rf&6v/ _?csfvKG +Kj7kb;^VvjLJKw:~./SW^h(f?C'OVVN[O_zb:g)I';&V8x (?wOs2#c/_rֶK#'sKc3N/Zr~.OnK"ʎ/b s)ח7gwBfNN.kr&^nsgϷ)KJf6/' ׇISJb&Fv6J_/WnkʻkR'/oz^f&ZffR&:bOnRf֖Zlj OG7gcrSZ[c'CoJ&[OrrnK2SiwNnNfFO?>+~^Ύ')_/{CJ_~>N>r)W[z"Z.h 3ii)76S/" fr'[CG&^Rn#g)SO.n.sv^s.OwۇrVNrIII韊J +RHx2b#O7WGin 2N~{^V(Ƌ&óO'S'r_:bJsCkCz?Fh66^ϟ3Or" +7W I7ȸJ3_RfrR+B^F>f/S ))Ffrڎ2Nv&f [Ggg"hVh6o??3†zoiW)GSZ^nn*.Σv(hV~G)/'_i7?nH(&;gWW33F&(VF>.*7)w; +/j?Ng3K.rVFfFˣS/s?sZk:[/gc+{R^2viWW/b興RK3 66vOgW9y 9i;Ff>f^. +*Os~iW'Ƿi_s^VJۿ2^ƆzkBRnnj +*(VnB~~C_)i)JC2^v +ζ.k'>o'jRvrBs3/?Wy y?s^hFrgGbVV(^&kswiw''~Fn&>^kogWg'W*>f2>JF.GOǏn㳎H^ ' i#frrCr2>RvZK_) WGSso?sn&^kb"nnB&&VF&n'׷)iG)'ʎFvFF&R# ζ(NOgivvH& +o;jS3^RNSCrg#os_zHgo./S_ j(h~.Sr+?S*n(OWgogó_W~h^"Bs"W''s{~&Wc^(F#)Iiۛ.RFv(V>')W7 WoS^^R*#s"r*.R +ZfŠiɉi'fr?N>>*&&R:KsGS72n^v&ڏ_GggbjZ/gO*^((;)g)7r*Ȉ(R:nR.*ZOO_Iy)G"6{s'3BR(8VV&VV6F.?'))i7bV(6KR +Rcj'i3:.F(b' +co۲R^nK'_Ggg7*~FVVV~.R_))W'wGS:B&n&rz"n h +K) ii/;[&6((FF;3/?so3bj.&^N* 'ϲ>nbB:?7)y w_J^ff^Rv^b~>Ff^SsJ{{o7?׉_.F&f&^fVֆF^Rs_ǹ9w7'GOF~r&FZJk2+ +Oo3:o*"bfR~~^F3g))Ww7_C;;>6hX86vF[ k#JkW׷Ƿbo #h((~2.ngGg7Go[^#;{BFN&.C/g#ks^&VWiIII_k68x#g?kK;Nˏ 7?:{"h(2"z۳os_''OJ֖&o3b.Z3N΋ZB +gi))Wgb6(>F&B"{σn_SI)7_3z֖H(vFßZnW'{'ZkG''{)JrNR(&NN.Zgw)G_G+66&:.)i'Z&No_>ƒ?O>2.>Ƿ?:'w'J"_Rn^&6f&.Z/c2># swǟI 7:VFvV6(VfZ[N^Ns_g_OCR2fB&v&./w__#N^''_'3涆V&" +[?_S' *^&(FƶfsgW_*s'c [rbgowGSN&~FvnRo{Ck/'7gnֶFRSSS_kf^w2&6VVF;"+KW7/_^FRnfv3?Gg' ++bnJJo?[S2S_#rZ"zfh.R2{'G3^N3럗"j^Vv^fgwi7g +z&J3/+/CfB6ƾ(nʟwcr+ rB& +ggg7sbB^.f" 7{N螎vzj..^*'oGgg_?g_cNNf .NRrNo'GO:~>&&ng7Os2RvV&jj׷N~Ϸ7 )~6(^66S[ *.FFk  bg_7#R^vh^O'obz?'˞憶&ks;KO_wR6_&r2j^(~+g)i/Ά_[zz^(&" 3iw VƆ:So_;.r_j&ڢƖr*o?C/JCs^n"j~>n7G7'~>N_)^F6fCRC˚?*_Gg_RNF[3Jr +ֶ?wWf6jsnj{C/KNN7ǟ? RƆ.2oo/?&>R +2#_gkNK_k/?gZ֖VfBBg_.6^ g'?2ֈ. K.>gsKS R"jC'"b^6(CGgff6rBS/[>Rf{;z/)iwR(B#_O f+;jGs:.NOkbNϗ3"R"&rZs)W7f6hn'';33nNRw_(^"_)igs*^VW))'k">(w7sZ&6BsGW{h+_b(fg7_+zFFnRN"[JV>R^?鉇.8(iC^F((b3WW'k(VFj)ۊ26vFS'{:/3Z>(/wׇ_g3(({S?__'sζFFw IIWS>CGW W7_bFR{_W)7/z"CG'S2v8趶 Iig&.g2~^>ns/?&6֖ff>c')^(b'3VȘx#9)WvF.7Gof2*__s6)HVF^.;sfvzSI W2v(V*Ii _2hhF.)FV(C)iIiw)g/ێ(Vֶ^;?wN^Ff3۟7_rfVN[W _'(V.g'GKB2j2ǷG'r8862Ǘ)WG2n.wgJ6v;OSO^Vfw)?2;/O_SShf:'))'cꞆn;kKs3Ooo"^RVFk)iW2ff#B>6^jog) ן>>k'G'f6V//K:BfBo'7wW)G_r&v2222~Ff*[O?77g珎&v(f"7W7 +~nS?Ύ2[OwLJ'*^Vh6i7;N^f>WWWGOfV֖6&*?_&^j'ggg/ +3_?oò(HVBwG?zJ#zkS;*†2z___vV+WWWgZF +/bhhV*O?'G7/..*oOO^&2;cnfƶF^;g7G3[b"N^N^^jb>_GsF(Ff&RS7w'{2ΆFj[S;"&??'C&6F6^NBKs?SC?_?n +c/og? +b>&^o''Ƿ*/'?k+_''/n.>^>R+2*2."[sO'/j+c'g*~R.F.2*c?w[b~R곳 +z{JJOsjB^vvSCKj +j_sKJ"z2RNss7'77S[Nr(H2zb3_g'o__'?')GGs+~F~hvϿ&oO3g/R#{J./{ orv6Fk^;rfg. _c_3s''G +vRr#G s(6&. & ;{Ci_Wg)Rs) J^&~Hv `XV~.&["c'7w ח*?.(hv(f>koC7'#[wz'[csNJojjVn"^BB +^FZj6fRGiWGooG2237^r6V{66f&r/_7rK'O#GW2Z'g;b3(h(V^&n3?' wGG_7C +GO +>v26K.jNcc#g:{[Zk^f S:R>&2o'G3og_k/wk^&SJNr&.vrNΣbc*)Go'GSw?O:7n^6xX ` 8fZ{)i)))i c_ff({r3RZbCoWgS*[f>bF +BS.rv+:SSn#2Z/#+O'3*gwK#z22j;ʂ^Zk6Br2."c2{S)i_:Z&_g7):hhhx {JRrsgS7W))_.nKξJkbZRr^&C??[S.n;''_w2&6ʺ^>2k3sSS^bf +S*_Gg77__'o"' >Fƾr&Ornn^+j 7?3s?'ZC.zo ^.(HHȈv^n~f7W )#r??+"n//^NN +3[3B&&Zkkc?'7?nFfNR2*Cc^RffrbB'Ƿ3&B#c_g7?sN(֞zKۻZ:sJk2V ?og__K#3oG?&++fvhH6ffC_w7W)>/OOzfv&FzcBNfJo*.gog7?/'wi" N&ff^2.NN&R ?o2Nj۟_'GwW.n32^Kjff +zn~^"jFN>;o''{k+C'7W)B6(hV(h&ii7O''ONrB>.K' f~~F(V˿g'7N22r[3Zr.?NZ*Ϗf2s/SgoB3oog.ξFF"z&&B[o's+C&r2: +ck7?;o + b[?g )O>vvVhF˛_Gw ɗ_Og#cBB^Nk+*R ^nn~B7gG7)W{‚~22Ro Rv^n+R~;/ ƾbj/'+nj'Os >N#''_g3>b*ֶNzCJ"jsSj'G JBNhVhVfNjk32'_/W7w+&n~RJC :zn^ +"Rz˲2:3Oos'Ssk6'o[c[j."N"oBb*coSoogrb +jrZrk[NRc{C3cS>^&N._sk_'k~j*;#/G'/3+.FFHHv֖f +g_O'Gs#W)obn3vk?^fFf.bjs?OOj_+gG'/#n涖jrN..&&&rNf~Z#S۟G_oC:2~:?_?bZbΎ~Nzjs#J/+Z2j2bjiwwGOSr&>vhh"KGg/##wG_+jˏƶfs'..{Rf3/?s3חo*+gOoO~f:z^R +ڂ⾾OB^Ɔ+3o_SnGoNrNf> +_G_n*:rN~j&~c j ++k/*K r~g'gw?&"~FhhV^2ξ:SϿ__WiWׇ>^^_fR"&2j:~'_sjsO3 [KnƾgOS{jJ*~nC3 +."c{K3OKJg_g#~Z^>Z?'bKcZξrBb~~{R~ncC2&B)w))'bR+[6V(h(66(vjz))i7z +o_c."SCsgSRF^nB+s:;c:g33'_cfV>sg'#kozNvVFڋ/*KS#C/ 2o_'& +:czCO+R[OZN^j+r..(www)iGW/Rnr^F&&&~&^>NjoiiJzggžrf/#Jf~&JJ[;S{Soo_O;nf[s~.3kkns3Z2jz{'?NNS:2:b?Oϋnsc?#{obb^2b +:rNƖV6 +'ח/C{nVֶn.fR2Gg_O'Ϛ**Oo^fڋoZ:rnn?3_soSN^C/ ##ʋ[#;~ƞZob^&2/K㚋/_3Kj z~f& KS[[s?[++J"RC{&>V(VR+S_'W))W'g_^vffFfF>#Og'O{;j2B3ۻ2^n +**RN"g_CS:.C//sC2j+2>#c^N* k3úڂN+BR+ kowZ+:/3R^hh(~*SOOGw_GG7?J6RFVv6+R:"/?_g_{josNzJ {r_GJb.fgRnbŽ{GgO~oz"K+RkCOJz2{/r>f:zK3o?Ro:jOO6V(^fsOOO{j#_'G)IIW&fv(&RR>.{닿S3g?[JoKRB[s3 ff:2B[OgR&f + '???z2&ws.>#.zn;+ヺz;j.J+s_)WÚ/Bk+o۾8(cK//_+3' WN3*fFFV&6kbJ3c#OS'?Jr;SfCRfnKc_'B*{rκK:?S*R*^&zsǷ:S3rnbZ:CBzrr&2"Srn?)W;coNb_o{bƖhhhƶ&?33cO3* ɉG;N((vv6憖V^{ GG__ڏ'o2n2Ύʣ{fNnn3ϏKk{{Ro77Sos//k2RzcK#^&JnBKzrn +WwG_/sS+k+ogg.^h(^. +k*"?gW99I ׷2FF^fV6&Rj_'7sJ:ROgOB.^R:W/C2nZ+'.fNGoCJj/3G'n6V^.ZZRΊ{zs#nf_gg;*Zbˏ'r>h(6Fzc/) ə9W'_ff.Rf(h(F^Ύg_)gÛog_'?3K{C{R[O's~&f22NJj{ʳ:Fn?'ggLJ_S{[_?__'+z~6F6FRZk{&~JGw7?Ck7gcN6VVV66V~^.~ƾwə9)_S{rnr 2vvoCSgS + +jOK#JbN΢/?cZZ;[j.r*+Ɔ2J_g?OS##sz;jj.^&憆n>CRBk;o_G'?K:j*gs*b.^FFFV(((Brn*IyI IWgsr"n憆vVV((v2"C_GG#;3'_gg"2~3/[˛BnnRR>RnBsO_''g_S'/osS/[#.nfFF>>&K:S/_'__Ss3S/?>&~vVVj# i))oK2+">f&&fƶZOO'gSso&^."*ks +.>>.nRB3:.ƾj:+#ow7'KK+crKK#+R~~F&Vv&>r~r3S_?gח'?OC*'OCSk.vV6Vv6F6CGGWiy9Ww'nffBB^FV6((F/Og_O/w/b[ 'ϛʲB.r+憾2n"2.'W7'ÊۊJO?_OB^&.^&f&Rn;SO7+Z2:GgR~6(ֶ^f6ǗW))7'O{[oJ.f&?*.hVf>N{Oggi) +ffFj+?^f6V^j ZR#c_7sk/'So?gRϳ˳OG:(VhF{O_O#gGg7k+cgG7i7 v&v6F6V2kgW)W_Ok#crN^vHֆ&~N;;gGg''zr.F&?gw)g*.^^>N JzN^&{SZ +:;*3 +?O_zbF&ff~''[3k BJs?_WGo.~Rv^fFv/K۟gWGw))w'?z. S^6hhVnZJ{'ϟWOczRJr'"f~RNRZ**R^Ɩ6RO?_#/7_ogg˻Bfv6Ɩ+;3o +_o3ssg_wW''gCrN^&ƶv(xfR.*S/׷7773os3KN~f((v~R^z?'/B[{^^#C/g+ +#Z22jncS3so"k?.b_'Gkf6vΞ"[/ o_'_kr>S/boG3sz+&NF(Fr/_G7?Oso/)?Sg_ggO^v6(hhhF>^~c'g7s +J rkjbˏۢBr2"z~rF^SSC/ S*Z*_Ǐ'ojRfF(f&rr*KSoSjJ"SsggGoSoJ:Ɔ&(V(Vf^^o's['gg׷wSs^ƶv6FhV6NnzS_'G? +Rb":k#jrn2z.;/{.n3OS?;Z#*z +3{??;Z&vֆ&fN+CC[[.3/Ooo[2"V(&Z*Cosc#ggWׇ'3"&v(hH&3?LJK{S3Os +R.nNBs{?2^.nC[J;[[S__gǷgOO;nRNf&2.Z :+2B/sg_oo#c3nf6ff&B2Kn3{b#?LJ7_??_.rrv((NSÏ?g?_#C;j:zJ[3:n>N&c:[.N :'/k2rc{Cs['c3oSr+z +"J;cCggOcs+B+Fvf>B>.Rr#'g'gw闷gSO/SozN(hV&CokoOo_?gZS "[;>~nNcϷ'_3nR>^&^RZ 3ZJ/_o_?OϳNrjn~&探2s2nRnβ*jC3NBss3/3:[ +rN2.3kr^^^& S''GO?_o2~6(&2ROc Ggs.Ⲣ+.R +BnnnN:?'7C2.n3ss3kJ /3s3?gkR.RN^b&.Nr +{OkZKCgg_ssJ +^nR[*&N&.r_gg_7_//;&vVֶn CZ&Z{;O_SnkcKʊCj2rjb~:{S?[:~+.3 +*C'?s.rN.zjko~2R.KÛ{#".R{c*cs{S*os3." bz[J&^R[;:Sg7)7'_oN66vVNzZr 2JOGGs3oc#*"#rN.bZKK?S*2Z ;+r2*C/o?g;RR*ښ.~rN&^&[{z~.k[3c*bs;/Sk;. +k:~nnjC"cs'wwwWnBf>&+ڲ>__g?S3bk.^BN.nnZ*J_?O;k:*Rr"2ß?g?CR..nRjkcr>^R3SSs뻣cs +C/c +cã[c2"brRZRRnkCsoOLJww7G#&^^6F>r*_O?''_?s3 +.rr"KR.nnz~Js?OOOoc Rn.{{j*jsSS_'''bBnʂb {SSKB^rjJ+**zk:c{Cc;Κ/o3/cC;^6j/_' 97v(((;.^/_'OS*BN3sgoC/g_:bVV(..gW)ww7Ck66f&jS /O[S3wi3VvnN3#?/CkB^FFFf[g__gSSR^ƶ6^os'_g'"R>&6v +"?7) yiw*hVZZ.BN*Z2rrb&J3KCGwGGGW73zNVHv(s_gWWGW㣲&v(&N~J'GOS nB2kO'OSϏS &6f^Rs''+N~2*kg'_Cbb6VV&&nBggWWG닊n>Nfr>C㚞N +^nn+cO77#b&&f6Vvn)w?or.~&β233Ϗϟ2&&r..zj#ûco#^FbJc_g?.N>g_C#^^hVvR*gWiGG jZ~.n&^^Rk2^RNJrRk_ww'w)7_go3b斶VhVJw7Rfv6^>~:csoc_3JOLJÞNrK˟*2^vF>2Z+2#gcgg&f^NJ?wi/ n^6Vh(BK3σrg)iiig*+rr^&n^."2~fƶR.K[GGw))wfFh.ZW)ocj斆^&s' #g_'S"Z2>~ +2CSOO~Nf6ff~>2s+K33o_GO[&N.3OWw'SfVȈVFZs;㏟i7Zj‚>N*"bzz¾f&FVv6j:OgwW;fvhhhhvF7WG'bff^'';k"Z۟'k~RB#C/g'{f&fz**j/?go[^&6nRR:7CֈhhVvF3;{k˻ gwWwG珣jR2rn2"#n^&&F(((ffR'_gg7wGw736(B#7gSSnV(ƞBS_' /c3's^RcC+ß?Ƿozb^hhvfβ.;c{Cs'O_NNRˊ2+oSGFHhhƎ2:j#oo7G7__+;oʃoosr&6v.*___'gGg/j^F^F>‹C'_g&f +o/kJ;C{KJR~R#'ggOn6v&^*k3* 3#_os; 2nb +_/oJfB곳SgG7_Oσ[s/KSbVVFfBo__'''gGw7g_'s.fF2Jk/osۢ&6vVF&Sc;ookJr[sk3?g''7LJ_"fv(h(VFN..jskbBJS3c/3#sggg773zf&~r +s3/S_g__oSۛ?/s_JFvVhh^z3?'?3g'zR.2Bc/Ͽ?36FF3oggg'o[kos3N&.*Z:S''g'J:fF(V&NNN2*Cc*kCs+".KS{+soG'_[^興hnNbsS_G?# _Oo?g_/;˚~6(hȈ6&ÏgGwzJnJJsKVvV&Bz*?'/O/ ^;*+s?_'Ƿg3[nN>ƆF^:c +[;JK"2r:3?W7W)o "^V(Vvf&K//S'3kcc'g_?+:>NvVV6^~f>ggO_oSj;Bz2.BKS3_?sC†ֶ&z#*''_/#+zzK#Og_sc{2f^&62 +ckʂ2#*;oS_wi'FHȈ(V [?7_{_GLJ7?Oo:+.~vhh(V(V^&6RJ[jrN&"7soKo'?FhH&Z"k33O&F&f3WWWO/3 'OJ&f^vj/3[oJ~>ʳb>Fff i9i'g +vHhg__3~sGJ KG) WnrNf>(V((&O7s{w__jNfF6f_3# r +kF(hf:w77ׇ3Bs'Ssr2jwׇ'oKB:C?zJfVvf;n2 +3/Z{Rn.NWWi )ח?cr>88VnZ3s+&. '?_/KO_w i)dzKb"[/{2N&VhVS?; *2oG*~B^^roOǷg?jʢ(h(ƻ_)scRNsb&^>&Gw7c;;*G7__Jz; k"^>jzz~vFn3?ǷG7HH(bc2.22NROOz{[{))gO{r?S#;8h/c/_gO.βog3+[K?'3ۻ6V8FGg +jo'O2BS)[K+?_gSZ(hf#/;B.βrnbr^f6fn#_W7'77i7OnfVH(&nNrNN{+ZbIIWGs/s(HH(~#c3Jzo/Co3 r~^Kss'/#J g'/ZVVVv.3__3 Os[JJƶn +C'wgOk.Ͽ'{¶(N'_#+b*2~fƞLJ'?'?WWw76VzRN +[.K/)Is3/.(H~KϿ__o;R^N_ +##?Z"nv(z{ +[cS_[Nfn)WSb__gOkfvfZ +*볣f&F֖^*'_?g)Wwڎ&VF^^F^Rb2BnZ"/g iW__'_ۺfvV(V>Z:Ƿ:Nn.Sck#3gs+.~FS[Rzb;S'?㻚&^;O'+:?:&6r;ڊ#Ocj6+/O7))O{F>nfBb.2*O7) gGgS~6VF>Ro#Z:j/3S?'_JB>&Frz{JzBrZkk.~B'g'os/og?{>&^K +B#:BNFvv枾R*_w)WG{[*2~Z"ΞN^fN~^f~2۟GWWwgG_?.~fVv>nrg'?/* :2:Cc3{:j?;^F6r;scSc3> +;o_/?_3KkbfRBzOR~&&~k K;3?W)GOJn~&ºb>Rn>ξ>Fv~^o'7)7Gw +.(vF~&^.sOK"nC/3c CG矟nN&.zCC+c?f&&^&>z#3?s3S_O?scbZbB +/f6vv^ʢZ+_7矏b:ZzJkzb +Jk{Bvf^N*/g))Gggoo/ FvFf&N#?3[J2r.Og'{c?+b^6n2*''#"fn:'?Ã/_s/3#>:so__#jvvF^o/?'W[Ⲣ*brBrNr2^V(h(ƞ£?WחGGg'7Gokn6fnzcO3&^r{sgOs/S3?'_N~NR2ڣ C[/OSʾ&FFf.zO/K{/O/SS.NR ogg[^FvFfNr +O/C'oK#cS[Z.VV&n#'ǷLJ_OúzJ^f66+oSSs*nrJsOgg'oSBR^&.JZ:j/c +r&2O???S/// *jC__CK>fFf"+3Os㣛KSs#Brr.N6VV~_g7777LJs; +zN&&R#zb>zs__?O?_S#^^Nn#kjjcSC#ʎNNN[Ϗ_sCRbRb>ZC+J?_3ccR&^2^Fb&iW'3~f6~+{7 I)RvȖNh +bJrO )s_B&_i_gOC:G燾(V6ֈhj3C/K'W 9gJ3{rN&Bsw7WJkz>^&Ɔ +KcC_wk^&')_'7)zNf"{FkfKw.rr^F^vOrsWiiYO FV(H{{)"{?WGw'^~n~(nF^#SK?÷WS[;r۞^> + +'r/~zfsr/SsO)Jb.{F6?#"gj)_*rNs;2Of/Zv2G'bSK*Ʋ?c^ۛKjG )Cc.6h6f^~+*?;.Cw/Z7gN&fk(FN>6v~.Ç{k'&Z:ϿbjNj/症_ +_>bf&2;?λ>f3kCSW_o [/K:^"^CC.;R& +[;)'׃_*.:RvFf&'s3>rk_'ϏOi['b#ScbF~6^&NiGwgS'Ϻ~fZ&~n>soSoSó  .b&rz.r?#26Nfrjsꂷ)_G/_B NrfF.&#''_sz +b^.ZS2))7Rf&F({+?[J jϋrbsS_3W))2C^>FƆ~6vVv"볇's+2r*kB{^.ÂzsnnN"R.N[#NK˟_Osr~f6~n3nKGW)rS#+k"2So?;#r&&j~_)iIG'S"6z~2:B/¾R~n_?_gW _Sk#ƞRFZggCk+&nNOWOSn& +[;so_Oo> +rnJʏ)i'#ZS[sz.n^~oKZz^FrN +oowO'[RK6~nFfr; +[CkS7IS?3[^˞v^Rnf/G'OZ/.Ɔ^Z7o*&^ƞn*j*{N_/_SFf.N^B3z_go?"Zr:rC?[OFV&R/gw)w7'':[R^^R*˂Bz>Ɔ&2{7)7Ϸ{^NRfS_?)'SzfnƆ.[7_'O2>F^Rc*'Gǃbr&^>N Gw'sgGSRnSObF(6F&&ZwG))Sn^&R^j3Zr&NN^2RowG)G_s.fvf&ƖksG7_S>f&f62s'˚^^N^^.z:>OO'O_/&FfO_GC_g_;rn*f{SJ~֖6 7_G'kj+bKfRrk[":Ύ~fN澲{緷g[R>~V(6&3#s/w7'~f.rz?_3Sk&^6^b{?s~&6&R[__c'G'B[~^ZOSgcS/ۋn^V(FV6'wwG'_o[.~z#~ڳ["z/+>ΞV^vf^n[G'7gG??r~B&vF:{ +'_'gj^R^F^ +/Co/oC/ڲbf>gg'jڶ6&6FΊ?3?OoO:B2.N2o'__F6Vv?__N2Jr2.rNR s/cK3CBffFF^&B'g7wg3Z"fV6.R:COo7'Z*r&Ff'gO:j R&^&"S +S/6Vvv[χs{{;{JK:g'CJfv(6(ڛ37/g/+ښrZ{:ZJr~VVO'W{3ʲ^&.{___kr":ֆ"S?g_SOC:N>&.Zkc矇7'GgCBzrnBn;o_g'#j:.Oo#o_LJLJ'rB&^(V6>{2ZZ:BJ# + K_3sb;CSRšFfR￟wiI9Y7GSsg:j{g ;&^2hXr(Ws3BX/wi>higisVh/N9)C&7 Og&/~xH(Sn'>x/+[VVVf7wo8&(LJO2'hf7v f;`ֻi_98(R))!vZ62rvHh?y{6b~ws)Hx62)J/:&3IoȖ6:3I&j~jO>s7fHfsibCfrwɚ_W"(ƖG S{v:R׾'Xƶ+Gg?3×O?i+(7GBw:F&R)WgRH6Fw N)w7h(Ƈ7W'k**)KVhSo)3>6Zr)79ff^w?g[>K7g)2(XHȊ3WjK)3i~vh^F.6w{Ow&VHhVS_s)c +OGϢV6O'6N7s)Io.(V3)9GBsr*g&Hcgw?C~Zfn3) S(Z//~^g9O6) Nnf2)Vȸ)'2RW{VS׉7&f'j)ֈ:ggzr>'Jw)wFjobZ>&oWwVK27Kr3N?Gk&(KNgw'+>k{wWF>hfc_*Ff7gZ^hsG+bsJG)rHR ^[7GN>8oWW +ho)iz(fS7r+(&wzHV^o_/o. + )H^6/72*gfrC/wS;3gi)r[hFr[GNS rs+Gnhn&+j2?J:__ )R(fR_&_{[W'~vf)J_ +b[o*(N.B2wFۂ{;ZWZ2V^J/kg~S+3I"V~^n[ro:^)?ZsnVW3g&rjZ/ GKFfJ&ǛfR2.s;RƶF:^7/>;+[g'76.'+jo"RS3"f 7OGsNk"~3WWO~ƺ ZfkS&~6z_;g2SSWLJBvfk*BKOgc_Jf֞Z'sjnC KGO Rf.":OBCcg[B+B/b/ǷW_vvSꢎ/&FBSR# +>_so2FsoC2gscF>Nz3sC.3R3wWB^V+c/[NSn*?S#^^~bs~ +/Kg_ڎrFN c[#CN:cosNn2RCoo.Ss_nβR +3zocnfNOZۛ{'_+RFn"s/sr/CKKo_ +&VfZ3snrs#Gsr+~Ks3ro[c#??rFVr/'+Bϊ.+KO'gG.>~n sO2˺#;g FRBr?[;ossg7;B3n +z[γKSÏz.^:: ++oSK +3r^~ +[Nr/#o7#~vJ  +SW32>~_2S#3jkS?k*+VFs'ۃ;gwo>γsJ'#fFK: 3 +C/Jgoʲn.BJK3+o'[CfVSzjsSZ'g +n^C#2K/Oz'gϟ"r&&J+BjsO '_zjr/j3:[JO_ob"&F +kJsJ +_?'f&+ K"ϋzo+K''o#^&zJj +ϿCN~2&3CjK2ZS**_C3F2rKoχonf^K: +kOgo&^n.n++cc_sosN&>{s/jۿgOf~ /:CJ#?'?^+Kc/ks' +^v6fn;3/ʳ:B3r;{kSSo_*B~6&"j +z3 [Ko;N.nʊcsCO'? {3k;kCo3 +2^2+;K3cC#?_?cr ;{{ //??# +~:RºK3S:~^ƺR"j33:{3_o"k6 +oã[g#SWGh([z/)G?ێF^V9OFKsnR:FS량iG6vhf+GC*z^*Gw'hN.?_fN)WW3[h6wo3F~6~wW'(FO_)gF^vGWi緻H()&S7ǃ(vF(v{)džΖf?gshhVksFζ'')#VֆV6gC'N†)oFhBg/ׇ^33'[(^ֆjwϗƎ?_hr27'owΖNc)?wSfVBGSf#i7VVhfzG'OWn6+)o;(6>˷_O)7262o))FFf2_og6;&^szrWg(?S/W>&wSV~?? NNS)wffVn'SoϞF&.cgi~V6&z珏)f>>7_^hV6Vi_#7'ifֶB_Si_#W9g(vVn{?鿋~^FgoG knFvڏ)?3*f^Fzw6(Bi?;ƚ )O{6VSBW_{nfˇWR6h.?bj)BfV[.?w__RFϻgJfh'2bn*sg?.Fz>Og" SiWJ^hOvrgG^V.o'C>ˋGWWGNB~[g'/Z >6J_Zf~h~ǿK3 +i/R26^_gS룞6n/7V^_gS +~nB))jfgo;o~Rrw7r(Fo'n^2RZw)* &+/g/~rCG*.B6 +/k>.nBg)/f~&^"3ξ2.s'{KCOBnsWi?[&&gKSSrbR{G[;zƶ^&&gG3o.nξkSW?c&^fRz_g/orBR[חcڶ._[o>2RcO_s^J'sRcCJF&RZg/N^cW'n^N_'3.>.js?{&N_/^BZW)G_^'br2rR:G^fO'SJzr&~7'g2>&?_z>7gO~6oK?z2>Gwg~f>[J2/NF^F++n&_*J~^fcϊ+n."z?R&KRR^.'WsK^F{;r"R?O&^6c'#2/K>F#[_.&s +^6bj?ڲW_n6Js:&N/s:>>FZb#SO3:*f~#_G__2 +Oso#+^ss燿o>n>F[Z[C7sB2F&BƒS3o[ RK['g.>fRc;:f +g"r&rÊ*RNv^Nʻڛ"n_GO+RF&rS3s 2bggSBN&j۳:ZN: +rf&R*csj"'/zknf&N"jK/{zNz/_7#3^^[ +*r:3?_o.^Nϣ볊RrO'7Cb+{c3*2.RSg33B^&.joc{3n^KgwO*&bO[s;./_G/Z&B/;;*2~k7'?n^f^[[3/'Gfnz;[".~Ί;G'?2Nb2*[3ʚr;;.f.nJ[Cb>J +Og_?2nfn:[˻C;jRJC__?r&>{S'__s*r3;jJj'+r*32s_s[{kË[ڊK'#~zZC>B?__j>.RRz:˛*nzS&>NNBJb+3JRC?O'/zNZkk3J"z*_'?3S2^^.{{/nξn/o'?.R.J# K+2' +Nr :KS+2RnK_KRn~b{JKszS?gkn~^Z{S??j +;ZcjcCO'??.>+b CZnR o[r:jk#kzrz33'?{R.K3 +.: +o:"NBk+ZkkZ˿OJ*{jrOo_+~.*#*bzk?'3*r^Ns[Z>r"/_k"nڊSS?sBrRRzZz3s3b2Rrʂ +nzKo'b.Nr2 RrK3sŠBbúk+3{R2R" S/3??;[&n?On~' w)vn?ʶR/[^v 3'g66gv6'/&/i_novz׳V‡3iIgwhN OV>)F hn7V^_W֎?gf F(_3F73vr3W?fvSʶF_f Z;ւg[^鉟v?_Jv.cF_f'&6'[fogs^:)g6'[fN7&6R/^2>Fro'ۆv'~&: Fg/fr/;JGG'sƎ^~f')r&^6>3G>3FRw^.3s6>6_S~2)ʾC^^j_&n{>&Gjbs/>+_O+C^rS;nr /3n&".Jscn~{/"S2~~'_ +~23Z;BofSoz3RNKGs^rOJNSZ{GGCRz/sN^R//.z/.gJ:/3Zn2*.R +rNJG "SJ>*n.3j.GOkZr2/jn2sr gj2 +n^.szRBC#*NJ_3KB>ror~bΚg[Z*o#^NsjR~ B?;2JsoszNR 2~KZnZ_b#C" +{jbnk:RS?Jj*2R cR2[B?K+j 2krZ 2r[k CÊ2R"K:/*Z +;2."*"" 3#*j+[BZ˲Bkso;*{3Crr" +zbZ*+B*c/sc j :J +zr+{J +k//z[*z2J:"Zk{++c3# ˊJJ*jBb J +룳s;c‚r2jjz +kó3; #+k:Zz2r:J*c3Ss :+K2:‚{;*;3 {{kj +rkk**;33 +;j2"RK[3SJz:*jkk;cS/ #ZzRRˣ ++S뢊#+zJBR{j3/{{{r. +jjjjK3/JKcÃ{jz+2bJk*+sS:;jZ2ZB +K#K* Jj*: ;KCcK"..ZzjKCKjc#{{ z*ʲrz:j +K3K[kzb"..; [s*˻{*;*jjBz ++ j{*#*j{[kzrrZ:[#c#۳;JB":zZڻKkck+ {;2z*c j+K:ںz*#kニ;{K˛r.R22"+#{3 ::*J[* K[cZ.2BJ[˺{K{;{˚zZ+ +K;{˃/ 2R2šbJ#: ;{JJz" +" +;J+[ cS{bb +*;j #ۣ {zZr2b*z#+*;[3nRbZ2#kJ#Ks겲j:cˋ#+ZnR2:bJ[*;[#k{S;RRr2zʢ+s#j* #{C3zn..Kk ++K[[˃SkBZ*+[[[Kj*K3s[:.nJ;JcKC#Rr:b +c *+c{scrKkj{˛S2jzj[{JJ{33zZJ{Kj: +#;{s3.b+ +: [[S/sNNrڊK +*o3 rRZ +:K;[k:Z + k;csS2N.j ;[ +ڢ#[sS3 2"Z Kk*CS//C ZnnRrJ + +jb + ;3SoSbJ{c[;K +":*k#KJ.Nnrj*++:Ks3#nz+c㛛j +s/osRnRr" +j*k{sob2bJ{3[Kk +*{c#jn.B:K#jⲚj3sj2nRr:j3{ {CO/ckn.rz{+:"Bzs3#2š#3#{jzJ*K3/3{bn2ZK#ۻb +{3..B" +z +˛/rRRB2:*b:*+k#/S:B:J[{ +:J+*sRrj;{ :+#/Z2b+늚z+ sooknR**b" +3/C JB##+JJk3S.22rj+ :*js3;J2b*#:zkKok.2rr":+ + + +S32ZKã{J:k**3S3jrr:jk+"b +s/[kR22zjc{zZʊ+#soO3{r2R:+zz [s/s;"2"+ˣC[{ +:J 3/sûbRk;+"Z ++sSC{BRrJ;##{"z +c?o/zrRR;kjz2BbB:{/o:r2J{c//{k z2.BkCSOskB^*[/s;2.. CnkO +ZJZj;3o32n>n2Kos+ZrjOS[zN^z?'o&>B+S_O".j3_G3F&"cGGcN{?GwGfB[_LJkfFfk77?JNf6^Bs_G7fn[GwKRg' +f'sR_'矣2f^n_gg&&> ?cRNnks?[BNr;_# RzCoC.&^O__낾^;?kff>B__+>f"c__>Rk?Ojf~C_G">&?GGK6^koggϛ>fgLJ?۲F~r*_'S~^N;og?z&&R*sC+BΞn*/?cN^ʋco[+2Rk#/[JR>R/orbJkCs +RnR2?o3#2."jS?znn{OjSϳkr>jSo+n&_S.&nJ[g';R2K'OczNnZ{'r^&So[ZNN볿_oK2~nCϟ3k2R::ʋ#S{+"R.{/Sbn2:+o˚ Ss+rRB"+so/Û*rBS{rBZoOkRRss#J.?SN.""~2{'ϣrbKo?oB~^sϻ2>2 /??s Žnb 'N^~R{/;JrJO/#krZK3//sR2":csSc:RR" +{3/s": S z2rzoOJ:2CCó;RJc/ ZR:o{.N;S?nR+3oN>Ύ.￟ϣn/32˳O_.>"K3/s+.RšOS+BN>s33{Bz;/sSj.RJk#sZBB* sZRJ;soSkj*zc2r2*so*R C"Rb /o3;z."ËnNRZ;//;nnRZ˃s:2rrrKC/?OZr.ss{zrr:O#+rbks3jڢ;3/S3zr. +;ۃBrj##{"RRBJ뛳SS3*: +K{jbRRr";s3Kz: +zK˚B#oSK+Z[C[jrR:KC3{B22*Z2#3/o[jzBz;*RB뛣S{jrRBc{*b"Z˛3/krr¢* bB"Cs#+rR.+3{*j" +s3;zZ..2KC3{k:b":kcCs+rRº*sS+Zcc;J2R2J۳Jzj{{*bBZjKS/j2Z +;jbR2j ;cJB2:KK:BzkÏ/kz2B: {+²[Ss#+ZB.J+c#+" +S3{j2nZBzSkzrrr"###;+* +*kK#cÃ;J"2BJ ˋ +kk+ +2zc33[+Jz *J²2 ++; +j˻;;"r2zJ+#sﳣzb"*#KZ‚ /s3 :2 +[{kꢂz +So/c Bnn2z+[; 2r:oSC[B.RzK#;j"+ s +..r*[{ +ZںK#JrrJj3ã{k* [;JzZBK;;jz:*+ +zZ;[3Cã* +ʚ*K; Kbb"+[Cbrr c*b"oOS+"rn:cC[ۋzB. +;s/s+Rn"Kc#J2b*o/"R..rK[[K:B +{c33cbrR.B+[CCzj33j2.r2KzJ +jk#+b":* * kK+ڢ"bzJcK+""Z +Kk+ +:K3o/C{2ZJ {KjZrbz//c.Rr"cCkz+/C +RR#:brKcs3#+r#3z*{Ss㋚.r" [[ˊ"js[+r2" #*k ۳#ڢb Kkkk+zJ* +J +:Zz +KC3k+ + + +j*:Z +cssz"b +k**Z[oC*2nrJ;2rzC/SKbk[#3*ZnS?Z #Ûj2n.rjoϿs{+NR+So2RN#珢f";ž&F^ +'3⎞⊣_..˻'srr/o3JZnrZoOo[ +n.J3OsrRonN>SO3NR.j/?o:>.r''~rgf&~'翏 &Rgg?O{fff&Sn^~ +?[Cgs~:/?.&^R;O/:R.[_SN&澚osoZR22RBO/3nnRo//"ښ3sbn..rscs[bnR.2ڛOjn~.#Ossr +S +&2cã.jg'O*&&2#ϏrJgs^&~?O?S⾞n+O_ON&&SO ..+O__ ^2jnn:S_?~^{so BZB?O>>#ozR"BZn>*sC/#rR*"nJ3sS{BB[_/^NzsJ.."{__'oj^~/3SϟK.~2cS?gbNs_g:~&fJ{/J#g_o.Ξ&"3?Sro+2n~: +cϏC2²n»sϏrrr +"+C:2Rk*[3 R"+ooBn΢K;3S32nZS_C>B[.:R*sϿRrN";3g.~>2JϟrRo_gC2枎{CJR~nS_S:&~2 /?Oc + +rrZ{j> +Cj r#Os 2ΎnrJ#S/ :2RZJo.R"*SZB:k[_Knr +ss2nnB +{/? +.>~O*2nB{o_skZNnB S:>R"'Kzn~ ʲng3 NNROsbR..2jCs{j2NΎB*S#kj_3[2R. +S# *z‚?sjbRR.R:k2ښ +s/[k""*o/K"BjsC*".ʛۺ +'g{O[.N2>~.o3R;'+N~N3SJ2://+Ξ~>S/Ss"rR:?b.n:BB{S"r.J[{;;jJ +C/S3;kJzBbK+"Z+3o3cKZr.rBrZ3K2Z +{3 r22C n2JS3*nn2.._j.. 3 ZR.nrۏo[N:s3;Br{o_zrn~>KCo/2./?? +Z2>r: jn[*JRJ:22j[3s+ڢ..ZK[K*JoOoKrrʻcÛ*r"rKo +b"R2;C{ʂR2bKsOKZRz/J2Ro2~>J#S/ ZbB;'obNn/S[r.#?SN>#s3{jڎR:#Bnnj[CC*k +2RK3SSc +BR.2+kkJjZ:kc/;:Zkڂk#s3zJ:"K{K2bb2Bz 3ocjzB" +3sCk2.B +coO*:Bn.bkssKnrz[{JrʣSoCˊbn>NR +OrNn/3;zRξnZۏ[B +cSscn곏nnr"k;{˺rrko/ûJb: jbB#3[K +":kj:zs#;ںk;Crb+[#2.r+c+ZrR.J?ʂrBzkSsʲ3;CCʲn2 +??3"R.{sSs{N.";/O3+n2J{## +.+3?3r2º :2R[33CKJ"J+*+jJzbzcCs {Kkkz"BZ:K3C*Zkk2Zoo3jZKc[2nRCS/S 2RŠ[ó;.n.jo?3 "rRrS/;zRnsO*n2JKs{ +Bnk2Js3c 2.nz S/c2+KK:B2" +˃ss[ˊ:*;*:ZbC;J ++Z[s/3#*:kkr2[sS3[:"뻣[K +r/Ϗs +"rrk[s/sjRr[o?BnRb*c3[B.NNRo 2kCzbk/?/~r;*bff>B['J&2'3Z~jo_"nfj3?_z^"?LJ^gN&f&J'^f__.&>b['O ^2 +''Zf>ksg">_'cn~ڣOggo fF^ GgSJ>snVVjw){6/WWrVV6~)W2GwǏ&V^)Oz~vGO +v6^wknڛ_'K.ff~'.Nb#".>^n'/Z&&{R2Z S_?sN&^ _"^2/gk&Ɔ';2^&>3z^f>"gGc2^~3"~NgGJNfN[6:CGz>2gSn +'kr^N*C/*^n{3 .ξn s3+r.nz;Sc Zz +{3++zrzjoKRRB"3 r"/_?NRJsS RZ'o{枾s'_ggzf&>g'#"&^zO:NfF_s +n&^''?Cf^Rc_cn oO*R^R[s?;Bn.zoB>RJ //#rR2B":;{ :""3SS2B:+CCcz2*3RNnz3k/__㢾~:3?_o#'_OZ澂''3^bo{.^''?/*>rjOS;^k/_{r#O?;"nNrbʛSOj2R"z˳kjb2j/So32˻#rrS Z:22r+s_?R~OS2Rnڛ^^2{o#2O'o{>^~o??3 +nN2sO&sKR+3Oc2 +[sRr*SS;n.rS/kJ:ʚcs#{jZbB*33 zB*KKkz"2¢[Ss{22j/[z2nBʛSϛNj*J../_s~>3O/JBRs/K"RsOs2.Rb;ϟz.2{3o "R*C/["NNnBz{SBZzS/S{nrr;CCZBb*;[c˺Brz33JJ*ۻ;{ +"BCs:b: +[JZ{3;:Ⲣj#scZrR 3o/sڲnR+sC r2s/?S[++ۊZڋ{ۚ2~rZc3K"bZJ3O#ʲ..Z3SszJZBzks3zB. +Cs[k:+##* +z2BjK#C3[jzb + +*+ "":*coS{+ +zc*:ZBC +²rBJ{[ kJ"B2Zso/;b:*3ʂ.+3oڎnr +ss{*rZ +;Ï?3;".R" +3ڢJC+Z.2 SK"ڊckJrR +c[#"zKۛKbr2" + cs#{ + +jKkcjzZB:kCs#K* ; +:"BZkcssÃ;j;[ۛʢróssã*2n.RJ#[ۋ"2B"kSooorr2K#ャjb s/s".Rrk3{ JZ""zKo:2Û;;bzjcs[*z2Rrj[ۋ:zj{C3C#K +rrbK" +k[Jzr;Cs#;**:{+"+#CKKBB*k +kJZ*{cSSz"‚;[[{J"CSsZ.RZ{b +CKJZ2R*#Kb"jcSsC#Jnnr +{ۣ#[ +Z˳sS3*Rº+;C+bBZ +{Br: 3Cc+ +jKã;brrc;K +ڊ kk+jj2Z*Kc3** ;ʢz*{[33 ʚb2:jk"*So/KB2b+#KJ:zSS3ˊbR.b*{ۻ "bSSs[jbrr;+J2ڋÃCk"r.* [;뺚:;ۃs3k:b#늊j*KkJZ"b22*˛˻kk;;++ZBjK{ +:zzj +*k*zbB:CSsc{ʢ:*㋢bsS +Z*jR*J+Jڢ#ss.B*:s3{kr2~R "?_~{K/'{R&cgz +'onf[_'3B2^⣿o[zrNOr3? *&N__cc>>g_J^'g#&NS_+F&#_Gdz6 +χg6F^g>fjϷgCfFv˿7_~VFZ/g&OG'7ώFf'S'sr'f&.?S?Cn.N"gO"rr/>>^njs/.rR_O>&n/OoCNrs/~rJo?>~&."/O?K^&fOG'_o.>^fβ3^f~.g?"F^Ͽb>;_w[&jOoO?zr^&^j7K~&&s~oo7':NNξ +3S:nkojNc?r.~#S/'/jR./3;^N.C_g +2>>Koo_[2>&N_'7{B^kSzN&k?o&^Jk.&Oo'*N~&s?C^fn>+O/jƎKGgc>&{:_?/.2:S'?"Z?/3.NjSO#:>#CSzRn*OS2냊sR*; 22n>K3~^[?'o*n^&:?sZNZ O"žo'?;RfR +_g'SZ^.B3?#rFs_g{+~r2C'z&RB'S;~f;[ʞRR_g["{/O[J^2rK/_SN~bOJ:^^r"[_KN:/Ob&&jsʺzjo?O^"sO_'# :~JkO'_K:r['gs#.š{3_#"&>Ks'Ϗ[nNrZKC_CcJ&jS/..r +{?#j>n.'/oR" *ξRzJO#2Zzj/{jN>r2Z*r.[#z.*O[#kN2bcj^^RjC_ss Nb['#^>Z +__.[S+f^;_?2z^^.rj?ob2*/O3R~n:ϿO_? +RRJNRβCS*zbz2ZC[Sb2RRCOjJں+3{SBRn2sCSZ*+S3˃Kr>R+oÏ3 +bRb+[?3{2rSÚrڂKϏ#>&>.nʏk2Nr??z枎΂s/{b>S/o/+N23o_OJ.2B./oo>#sC +‚nc"n. KCS2#C[r2N2kj3k +kS;2B»+/sC +++sS{rŽ"{KS[rJB+3co 2NRZ3o[RrS3o/2>.>bSnŽos>R+b2ZK;S?r2.ڛO"[/o+2.n¢KsO z*/o 2BC/+zr3S2¢+SZJb{#SJrzRz**K3*: ۃcC"rnڊk[c3Jrbc3oS.B3oo+r*{3/2N~.šKzJ." +;s.2Zˣo k.b;jJn>nk3[rb" ۏ3;r3O[ +bjs#k."o#ۣ +z + [K 2b#/K{z+kjSkJ:2RBbzJ[s /kJrB*S *{{o[:Rn.b: +c"#bRbCoC"bBjs3#kB.2Zc/3#Zjk/Ss#BnB#SsCzZڃ/CjrR..CCs3b:SsCK2R{##;+{ +b2j ;+ +#3#J +"jZb+ K+*:kjj#3kz:bBbK#{ +jzzjks/cK:2Z";[ˊj*js3R.B3**Z +zJc/ jr2RK3cKښBSC "Z+;cc***Zbkۃsc#[ +:r.K{KˋzjˣKKJ"ZkKK#+;{[K;K K: +*J+ + + ʊJJ"b;++ +K#[ j: +ZKj+:KkJbZ2k *k: +{[;z2Jc b+3#K".Z [c +j" +*#33sc*jJr+;#k"ZCC+ +.rK[k"zj[CSs{R.Z*#3##R://c.~N:// +rs3c."CzZnʃ33"2.BS?s{2J3O#:.Ξjۏ?c^S/ R.KS?'CZ>^~2*?KrnڛRf^N;:^^B#O'Ggr~"{/&&rS'g.^F^n*j'3zffcN~&"ks'+&?*Z.2 +3Oo{JNN*#3#2R.[s*r>r 3/OsnRbkO/BNn*{ZRR:ckΞZ['gSBn"+o_oڎ^B +'O{&^R*s3brks' +rj/n2[/O^oOo˚.Nn"j?_?c.NnϿS +r.RRz/SccsSC j2#C/3;:rrbjk;3Cۺ"z+[b{Co;zbbz*CScKR +3Ϗs NnRsS[r.2sc>N*#O?SkBnNcn&Nr?"2c_cJ~NcSbNNN.jZN>2cb2B/#z2j3/SZ2:s +R..BJ Ã3+ +kkKK+JZb* +ckjzZ:*{jBڂZ[3/cj"rrڊ{C3jbJSO:2nRsξnz#S.>>nobS_.~&^B;?#:rN>. OsknZ?/ŽnzO/ckr#s3kZ csz*;{#3# z::++{;::ښZ;32Bz +#[[ +Jڲ2Cso;:r..";S/Û +R.*Oor..BJo:2.2C?o n~NRks?cΎnr _/{"ξ>bO?RN*Cos˲nR"o/jZ.Bz 3o/ﳋRR2Z#csCKBb"c[K BBbjÛk:+* + KK*zZz"::#k +Zj*2ks:rrZ*3sJrRrB[sO2nr3S[r.*/OS[2Ύ[/Cjn +OO/ˢ.2 +C#j.no3."#sSB2z{cS[..BJ*CCk:˻[[2::jkK{K+zJkk+kkjzJJ{kjjjJ K*zzj #K*:Zʊ{{+z"sz:3sC{bBSs˺nn.2[3Ss..2 +c/S[JR. cS*r.*#SS3K"2.nr룳3s:scBZJ{ckz"J# J:+;+KkJ ++ +K+k* +kz+k;ۣ*Z"zK;K +J"b:j3s3[*"+#C[+ZBBjc/S{RRkcS3;.RKso3k2r/3 ڲ.Rz{:B.J۳/okzB.bcsos.rZ{C3ۋz22bJKCsC[ z2rrK{{+ # JJ*k+; +kˋ J + +J +j*jjz +*;KZ +ۣ{K"Z;3[brrbʛ##*r2JS/"R"sS*z2RR*#ookzrnnk[s/Kj2R2JK/[+"rR" +K/3c:rZC/;:J#+¢:3 +z[k"ښ*K JJ*;{*+* ++kj*+**:J**{;*zz; +ZZZ +{#ck"K++csc;ʢRrjc[Krr*SS +bR*SC{+rSk2룳C#jrڋ#SbBºkcC[jZ"JkッBzk{cc*+J:Kkj*:: + +Kˋ +** ***j +J*K{;J: +˻{+zb* c;j:rBz jzBš;+rr*óc Jr2"j/#K:r2"*[Ck²BZ+c3Czb2㳳3#jCCʢr*3;*z""ڊ˛cs{kJZbJj #{ +:z +j{K+z"{{K **JJ+::k# :Jr*kCs{Z‚J;c+Zr":{CkzN΂3s/nƎ/_O>Gkn&F 7_cR&FZ sbN&*gK.^Ns_N.3^&?&f&fbs'S燏NfƆc'_OR~&&c_'&&^Oo'?bn~S__s^j?3C&>&NN_?>&o'?s[>&>n3_o3^n+S'S;~~C_/s.N>./go#&^NC'o2>ΞC'ORfϏoo2~..2+/2[/OS2>.BosC.2zCS/Nbs/".bc/Ïs22 s?nNRos2boSSbN~R£//r>>oooNn2O_^RKϿO'Oz&^>?O^:/o~~>jOgr>N/g>>>sS>B[3'Ns'[NNNbK*B2.JZR.+zr.[oZ... crRJcS_bNξB; +ZnnRS#S_?NN{3?s: +3'3ZN~Ks?S*N£{/_KBn^R+c{bRCrnR:Bb2R+z[{2R +"KڂrN"k:?o[Z2B:Co/c +b"3S +/:j:+/s23/3 b2JKcO‚~:K"OۂN^rz?zn~Jz^.+/?Sn._sj +nrRCK.rJs_++.>R[Kb.""c?C+rnr"+ojR*{s*kRzZk"2 ˺j2.Jz/k"2ˣ/ R: CϿKZnꊋ{n΢*+[jnBz:/OK+r;O;.Nr/#{ r2Z?3NrBjo?sc["‚J*?3;.BB#/czB::oÃ[Z2:zB{3cc:JzCS[#[2ʂ;#k;bJ + +s/{ڢzJkS{K:+:Cs;Kr.: *SoKr2z/##[b2jkOsC[.R[["rbjzjsSCBb[ +""Jbzo +b2"zr*b{3cC뚂2+c j:Kڛs*b+ʛj*J[c;[2 Bkj{"kj +{jjz; +kbk[k*Û#k"r;ʺcr;*SsS[R +"{jB.Z*3os"Rrk[C:BJ"#s/cZz.j+C +"J*22k;sc +b:jrRzJ˃k+"b+ /j 2": K + z* cCj[J+;;j*#J+jj+*z+[j*{zBj{Jj+*Kz*{{;[KbRz.zkc3s#Zn:jۚRzk3ooj2:KccB:s/+J"z*;+"J+{kJ;[+ +jsZkJ:bJj+jjK#3kK;+jZZ +K;K++#Jb* K+ʺ+K{{[#c:b*k + +*j+ ˛#3j:z +*;z +j #oKkjZj+#So:"b +jsJZj;/#*+ +Z"K J*zZz** + +:Z" ++z +/c{zZ"B;jk + jk +2*:z+K{ Kj#JjKjZ: +"zJˣ#*zJj +k*;3 +J ++K +:K/j: k + +:+3JʚZJzڋkjJzjʊ;JZº **k;+zK +": ++k jjZKKK**"r":Z: +k[{;{* ; [;j":ZZK K+:*Kk +;KK::b":K*{[ˋj;kJ+BZ+K[+j +*K+ + +jkKcCc +J +**ʋkj +:k +{[# kʊkJ:+ + ++:z j*z:J+Kkڊ+ ;;K Z"z:K;:*k{;k[bz+{+JjK {; "*kKkk+Kkj* #+JBb:J{[ + +Jk+:"K;CsK뚢jC*zbrB*3 Z*Jr +k[sB+>nC__sK{&RozN*37wr^66~ZrNfgwnVgO6&2_闏Zζ(.Ç)oNv(v?7F{_fVV_i׏()jv(N og)W'~FVFwi).((B#)hV* WV֞/Knhv.ßW kh#_)?zVV^Ko/Z((&Zci G(6_*ζhhr'׉Wv(>*)2f(hVg"&("Obvhh#7i?RFVvJsiGCZh^;_iGk6VZc).f(V*/iZ&koWgs*NV>'))gO+vVFK_w:V 7_^b3GׇO>([')W/ֶ{)'Bfv^bK?&2+g3vF+[7zV.:[gwGjƎKsSR>SǷ_s{R^F& +?~F6:'GJκ:gÊvb7gOrf.*7GzFf2"sw'SNrc_'o{"v>BwrfFn.G'~6^S_CzZS.fJ#_wjn ?[F6oGO[Z^v^Rs3;F^GG_/+R&Z+gO3ffz_珛fr frSg?C&R_z&fK?g_Nr'G#Ά'6fΚ7G_f&~"og_c>6F.[g7{~F^#緇SfF&njwgSBf&??;>Ff/7*&^N/'sZ&f.OCR'?3>Ogo*f^>jO'_.NN_/~>^r'ʎNΞb3Oo?C2~NJ_gB>~??_^^RC_ggJ&&^R__cn&&^'n^澋__^^^Nzχgg&ff_?ϻs'_?OϿoznnRJCRNs/ObRrnOOonN/;B2no//.N~2#S_BRNJ3OZ.n^3g'2Nn*_*.N~^^ϟOkB.^b?r~&ϟ_gnN^&?s>~*ϟ'szξ*/o+.nz3O?/JnN>#sSo".rb2bOO?2NnnN.3CS3 z2z3o/S/[2n#s/JB sCrÏ3 +.[s2rRN~#CO_:Z.ZK#oO3zr^[s__zZn /ϻr.^.;s'zb2#?sr3os.~^J;csSkBr:SoO;2>˛sZ"{CSbnR+sKJ*rSs+zbzj[{[ +rBJk+kcs+>r"?/"R::/#KZ>nBk/?snR S;kR{/_ۊ>Kϣ*R.j['? J^ROÊZ2>n +#3KBN~z k2.c3ϿS Jj+C3z +ʢ{oS;jz2* +;ck;ۻ" +ˋ c++R."KCsk:j:ks[[bnrS/z2BB"s3C[:nr?OúRn2SS3j.~jOo+Rj3/ +.^nk3?/ 2>RZjcCK +>.zoOS㋂"/ËJ2n{sOOS˺.J*3*+ +z ;/Cj2z;K Kj+C3[{²bBzJ[ b.R.2jS/[b:{CsJR3s+..nrjcss*R~~>.JC?/KBnroS3KB>rz#O/Ύ.s3KRBs/s#R.bcs;j2Z:koC+r { zJKsC##[bBz*CKjJ:k;c{ +ZbrJ3/ +zK{;2Rnr;oZr"Cs#.N>nsoOs:..b*[s/3nN.:#SoS;rrJC3sCŽn:SooSrRR2ʛc.Rr +So/S3KZ22kۻB:KS3cj‚*{+kJzz:뛳Ckz"bb*JJ {; + +ʊۻ;zJ*{* + +k {#*Z2.33[; +k[Czrr +{/{*Z*scRr +s{ʂrr +ck2R{s/{jڲ2 [j²b;/s*zbKKJz"z+[333+:r*;kj +zں{c#"rrʳ;s3 2**c{/{zbz{/ +ښ.r.So[ZFgGk>f^s_/f6?_w{&F&+G Ɔ7?R&rO'OjBRo77C;& _o3~&'goƆ6F'O?^~fGnv?g.&fF3'G'r&&f/Z^³''^^#?oS&^k'o^NK_OkSf{oۏ^>c_SÎnSgg3n^N>N +'_S&+/LJs&3_sOSf~:Ggf&^. +_R^⛇_?g_N&~Rs?R^Bz&N*OOς>N^Nn ___kRΚOOn_'2R>RZsO:Rn~RRO/ßj2nrksKo2N~~rr_?.>rs/f^R_?_?nnnK_'On&Nk'g_'Z&J?Bf~ +_g&^ϟχkRff^&7^^R/_ۢ^^fn3G/ nNn#c[_?{z^C3g_S{rn˟onrr[Sr2RR++/ۺ.Rnc'k..skKs2~NO3/' +noC3{SOn^2b>>&r3g2?:{s''3zrK:?Kf ʳ'_b&ꢛ?["BR&Jb_k.JcoZj + +COO3jS3 K: 3:jZNڋ*#scjR.;+[C:+2^2{SkRZRJ+_s*2^RZ/O{2n^RZ;'/*^.jS? +&bb 'gok22zOâʎ&2 +3Oc~R +[3jr>.rr +_c/:2B.+coʛnBC[S2"¢cok:2:*3;jb:z;/z brʢO[J ++z:cS:rk+k[r:k+ˋSB"+;/;{ZRZk+sozRz˛ccJoO*>RB:jsCz.2bz/{;2J/sk"[{B"Zbco:B2C[2""Coc/ +Jbr*KZ"jZc/#s:j›+b2z J33* +;JZ# +k2Z:3";z3k 2R늊/sj""ZCSK"3Ck"jb/;ڲB +cCSo{ +"²s;ۣzBr2c""J2 +c:2:rKC{/sۺ+뛺;[JBj2.[sãj "R +kk +"j;#j⻋j2jj#j;;kZ :c +뺢2n*33C[; +cc*2:bSc›[[3Z.ºr{[os{Z:+2 {sz.r:.K//:. +Ãj2b +rRjj/k ;Bz;k":rRz;3z" +ۻ{C: +k3CsZbzzjJ*c*z +; +:jjZr ++ {#k* {j*BZj;;"JzjK#[;Kn2ڲ*{s +jšjK:B".BjCSoc**bz3rz":s :k{û::bš*Sz"j#:b"+3{ss{Z"kJb k+ +JZ"*jK˻J[K#Ccc{ +z 2 ++* +ʚ +K +{K;ˋ + +:z +뻋Ks+ kj***;#bB"kK{JJ+j;3KJjz"k+[o3kZ":+{jjʚ2rbjs33{+Zb[; BbJsS/ +Z.bk{*bk/3c*.J:J{* +:r"kS// jBb:Z* {+:2bJ#Cs[+zJ*;+KZK{#K:+JZZJ*:+k{{;; ++* + *zzzJ#[c* +j+k*Z"2zs +Z2kkˋ{ZZR+{ssKZ + [;JJ.rJ;3;rr":+ {+JzJ#3/CbZ +[ J2rJks2‚;[#cKzZJjsS# +b2Jjk[Jj:J{#*:bB:jk++ [[ck +j +: +:J*KcJ +zJJZ +*KC;k3#J*.b:BrbSz + S;^22_/f>g7ZV./)׿nF&"jsgS&/{bf(fr۟w)_*rv(6Ki'ˎvn ))Ζ~{ INhH&w 'ZNh'WI_^VH6:Z6v'Wi7:'ڂ&V(ƂC hfz) i_;(&js{rhf +9wƈrOɉ_ +Vȶi 'KNVHh"[i9H(NkII[2Rϗ?>&/GiW/Vz/gi 2fvS'Iz6/ W? (K') ׏ʞ( ?Ws(. 'i_b(h6:kiS֖"si7orFh&.iV~WK>*iWG[Vf2ƒG鷟˲hVڏ)iCrvVv*_i'cfV(FZׇs^ +/C(z#)gck6Vzj'WOJ6jW7Oz^';.fB;7*N#z׷{v>2.wS^FfBb3 .Fn:__OfvrV^RsG׷o+&67wS;NFk)?[~2GKR(NR*W{RV7 &owZ>vBgG#^ֆkc'ww_*v^Z' +.fRK'Gg?snRꏟʊf>j&^Rn#o~^RZgc.ƶzgg2f&Nr['kv7ggF~OGgsf^z'wgo&&N7?zFFfBw)GgZfN:G~fR/G_O#B'G?C2FvfB[w7_ﲆJo_.Rgf^>^΂/_?Oξ.2R'O?N&>K?KRr~23?_b~>^f^OǿR.~ +?g'[f^?Ggc~&&R___g/f憆^?7r&^k_z^ffn/>^&&"oOfff^n#Ggc^~R'/^^>NJ?g_'_/B^^~S#..b'{N +Sss/r.nBSo.^ :Jn +oo3Ξ&[S*2n/'?;^KO_R^Z/g'^&&z?Gnn_SZ^B'ggORnOo?o +n~._ R.3SsSrNR???#.2R +c3#.nZBZ3/s r[C#zr +kr+3soϳ:r>*+/ckj"r o?32.f>k#_S*j"ξ#So'.fn/'g &*s_rξfO'gr~{O/.fro?'+^N+.^/' +BCorrRr3S/?jښ2N+;C+J.ڛs[*KJ>R" +:Sc+r kS#*.^+Co/C3n+s[~&^Z㟟㺎.j'>fRz3_gsc*~N볿'"&^r s/.kS??32.&;s'{:RsOS*"~2o JB."j*Brr[3SOsK RrcbRbk;.22;cC2JcO/N~"So:.bZOÊN&~~R?K.NR{_Sn&f&>2R~" +.^&ڃ''s[~:{S/ +2f^RJ{'_3[ZRjzr^~2?3*bR2 zZRJ{#/; r2b +ˋZ+[sSsK22R":{"Zں /ocJNξB*#s/s +BB ++^~ro?/+r?+R^ffr[_bN{/?s{fro?N~JOSZ^>Rj/Or.r2/S{.>#OO3..BZ{:. 3S/br2kKk+[ʢ{óo3rRZ*{c#˺oo2nRb/cb2#Sj^~BkSϿS{z.R:Kb^~roOb//N&^~.jo+22+sZ>N2/JB +RZ3o#jZ"ں˛c+RR#k:ZJ +zںCC3sZZK[ :+{3//nnΎ2*#/ +Z‚*[r~N2s[B.zco;zn>rJsoooCS/ss#>~2jsS"r#ˢrξ[os +c3.J;BJB"S *S˺Bkc+2~rr[K2 +N2Sϛ^O_#_g)3b6fV/_)7 +^&~v~o'WwF6(;_G2^k72nBֶ.&w꺖Nn_W3{((^)WV^7(Fs77_vv)wh((.G)v"Gwv(nW'/G_fƖ6.{'S&&ʣg&.>s'{oF^f+G_j~NCf6憾kSgKCfF3?){Ɩ+s&*go'sVF>#?GN^^2SgogVvƆr/?'6vV{7GZ&~#G^ZO7>N&/GǢfF&OSG*2 +'ϳg~f^b?/cgRzn{'g^'?_rnz27go'?>&6 ggFNswGǏ>ֶ&Gw2~6N7'Wr&VZ)K&f+G)G>VNOW7Sz^bO~ Og&&v&3s?rΆo3>^[7 n^nj['&S:{_Ok~'#sS^^~;gSb>&SSg?3&&^NOS>s_&f^vSk*>"?Ϸ +&ff>czsG;ΎƂK>~V&jLJSr6λo22~^2+O+KC'Sb*nvN'_sbf k'_[6nS_2{"_'Î6. o3B Rj c?'^+o'[.;gdz*~v^2'Gsr;fJGs:NN/_/{>jCsr&FNrjG3۾rk+_3&R2*OS+C^zJSGsk۾f~NˏC;S2BB[ǣ3&NNR+nJj K_ǻzkn^RbzSg;{r{{'*JR₊*J3;?+;&nښz_jJ۲B+K{_gN&>nB +';:z /ssΎ2*j_C{;^RS22.Oss>R2*/>~rr.s/.JO_3/RS[C/Zr3CS"Rn:s?[s2#_s3.n +#CRZzC crn*r3o+{/B.2k +rBR3O+ "skr.>N +rrs?cr.j*'3/.Nڎ3O[oSrbO_?jrNξcokbB?sK~2N>ks;/k.2kSO?nZ>C+KJ.z{R3 ZN2.*CkR +3bSKJ *3{zz[ZSs[oC{"N z{ZJo/c +2 2n{{C;BZSczRN {/22sso:2*>*룏/ +B2ccsSNRnzÃnBb#;oS#2n"Sr{+so{º*NNb2z+3K bbk+3o#+R2뻃2**ókR;:kZ:33ss +N"kk { +bKb+cs/3/ Nr2ʻ;+ +{o/RR [#3 +BJK/n +RB[onKSSj²rr{3Z*jS; +2Rn2" +z{j*O* +"223Z[ +jkK{+B²# kj; o[J *k +"b3+"*kjK;+{; +JZJz*šz +3OjʚzZ:+Z +*3C[jJZ2Jk +:J +k3?3kzZr2r+kkjj"zKSKJRRbn[k*Ss#KZbbkJ[ kjcK c㛻z2 +bj j[ ۋ;[:"*zꊻˋ˃{ ;ZkZ +z{*#K3[k;;:k2 jJ:+K :KbJj:bk [3*ۻz +z;jj +{#{k# "JB + +z;+ڊ[ۋã+k:r:+*z; [˺*[ ckRrJˋ˚ + K#K +2 +C#:j*Kc +2bBۃC[ +ˊK;#;Bb++Ssˊkʛk[ZZbb*j*˛ k*++"bzkj k*{K Z:k[Zr oS+rn"O?*K/Ïsz;b"húOx7i +^Ȟ'9R~8H/ #~rx( !>F (yI;_i!W`^c a! XbgF&Hhgw&88&χ!YIRf `H.Oa׆^( V+Gy6XFaٻ^x^ ɞhggX/7a!_)xriف).( χ!( /Gia8^oχi:F8jOaB68 a!_Nhx vBWaSZ'Io#xZik`۳!GX (>Jia?V FkyʆHn莏#Y_ Fi +.HFc!?R~HXH>kgB~8(!gbn֘8Vk'JJV~o[#99[Rh#'I ++hrkHfbi/#JFnsII;k֘hRC[;>hxVK+nw;r886oc I֘s')^Hۺ)GCN8;3)_JH/)N(RIy#B(xhsCG9i'Bxsj9)ςZo3? 7hs3sOij2Fo +_))?2(8{ +s+nhh"cz~Hv2O)#{R)_3hfŽzsZr&7 '#.?iIW'ch.b' .22#9 7C68&Rr3)I):*V8:_ ) 2ɉwj~&2WiO#v8h3ii)sok6b_W7 s.hfbgOhVnb))/h΂^i7/_(f2^S) (&s)_7 +^>6.cW7Rv6r_g^֖^VFnWo(&{WǗךViw~V^.GiF&J7W_G^n3)2(Vf'iw(^)';Fh 7Oۖ6Ns7Gb^OW__F^.&R7s_f6'3^nf^7ϏgZ~^7wG2^&^v'_>6b^ffvv#GgWWzfv7ǷiFv6VG7WovfvwGw vfOw7_wg痏&&vjgGfϷχg +FF^Rǟff&Ÿs_S~ffN[^#~K_ +^ +'{g..>S*/ʞ&ss_J^bƢO3o^:>#oOWGf/OCg_N_7v _wG3&6O7^.'GNv&nCg_G6~>S?g N._&'_n.k&_SSoo~&z&ÏG2s"ccj 'JN3k;'kr#KF"ۊ_zƆj+''6r{oj +f(')s([)G:6.{OR[ww[R~:>2vr/S_n6˟G7NF~/'~.^&rCO^""&3Go3"~S+g[n&*'{/sB&*z2{ +{fNB2g'[o{>>3"N*vƎ/Gsokv&.2 +)7R6rW[ʞ> +W?# "VB +׷3jj6sgW'+~v7s:FK#7"b&{+Šb^[?gcr:r^j[k :;{;_j3Zb*bRKc?rNn3;S[~./~N^Z_?Bn?_S~Ώ_O"F&k7_O/nF6^So^ƾ_7sSnwgS#>bs7'3kFn?#B‹gKr&Nkbڂ['/+{B2k3"NbZRBSj/#RR~ro3#ϳ.>COO;nNJO_Nf'/.^__g.'_gJ^F^*'gggrf>{'_>fff2g:&&&j_?/2&2SggO*>/3b~>'Ss;r~NRC#nrrr;3.n.r3rC {b2>:3ObNZco*>~sS//*/SO'fSO'ǟK.N&'3"۟__g_2FS'N~+''^^&fNo?^o_?SzNNSO...nrs2n +cnrOoϛ&&"Sb+3o{#jC‚ + +^ 37f&/ gɟJ((CIGwIgƈf&s 7W3Hz?wiW/OiOk^' ~nfoG26(&hWS f()9i'H79oh((fI7i88xIIwxS)9GxhVW_(vhgy)Ih&C G + (# +i;Vfn6N3)3zz):)[:> w>**nۏysBOnhnfsw?S(+/>(^?W!)(2Ygi HVWG_ih.gWh(舲R79GO(f _vƶhfFg (i63)si^>f.vKۏiZ^2+S)O2gr>Zc֞v" +7VK B莋g>VֈW')~(H&~nWI7gɂVH^&>)GkFI7Go^xgɷwyRV(V?)fHVSW#^hhh{y'sv&(h ++G9g6nn2g'B:fV2'r(of)_zf['^)SΆ.^o_/S^^[6F.N6WR'gv67ikVf&6G)7:ֆWi)O(v(gcW_(F')wfFoK)gV_))rvf(cڗk~踺 +7WG^B(8"RNW3SƈJ.W#?hzN_7~>Og ~゙J:n~fg*_'3ƶ';?Ϟ_3c/__^&S'__&f{/Gzv[k#GJvK{WW~fbVi׾:V 2ZOgi2Jh>.Wik (>so7WjsvF2r3o7)O6~~G&&RNkOR~oR2Kr"G.s#B +2.~[+&C'{ +foS3#g3Fzچ> w2FfJ+frf;O_S)[Oi'OI*(n;/jKbVcC 3vVf&)#^&+ڋ)?o^Fr~7g/ǟ^r^7'C.&Kg2BnN'"Zn&?//Rjj3>?C:3:js[b3s^j3:RrZ>>;_J;.+f^G_Kzʏ*/Jƞ2R3oJFr;N{7C_fvΊ^wSN&*Zf_7*/#6kSkB~o;g>F/o;f&jCkR3^^sZbj 2 +z/ʚrB2""Szۇ{:#zϲK+?SƲ3oB2{N{_'k&.Zfgo'' ^bǿ/6oC'nF3#gGg_Jr6 +"?''_KZ"'gCKvzr3n{gBocR +3[ڟ>.k#Oۚ_~ + r{b;O*B2"j&// cN#3Z3JzK:+r/ϿK6/#F"./g_?~ZN^b{/_z&R +3'gǢ"f>.+o'G&S^>N:w/ +/B^N~>?o{~.SCBnNrrc3g~N~j'O +ξ.N?:_Os{./2/+*ObCKz"s[s㣎*onΊJ+c3Rξ"[#_?r.b.R[O;o?RBڃ''Rڎ>n3+_+2.n>s{;+Bn +bG?C>or^'_c2&N^'燿Z&>^F"3goR{S_C2n o'?*2^:ko';Rbc??[S"z.r;z"SS#K{2C#+?KjOS/S223[OJ"BN.c_';r +>*b_s .3'Oʣ~RoS 32N gZR&fo? +Rk?;F~rbs +fBÛf~>Nzss2^J'ڞ.kO_rR*s'sR.^2# k[B~r#O BR"/; ZCK n˚:/R{ojK*/+Z^R2sϳo{J~^no_s[ ~b #?Ãn>~kc_?2>&rz'oob.N&rrs'?r&_bN.o_c nr O3 +Z~ +sB:~2{C*r2ooOO;b:R>ko +bZs'r gk/nOb{ &/w>.{G.C3ƈ'Nj?ORvv +{7W)R&W/¢2Vn +?K6_G +&gw{rO_B(.jw ~2?j^>*O/S'/b~Z~/ks_6^f^_'o.~~FW /?';^>oR?w'{O.OjN3'Sۢ +#n('Gn6&F/)o.#r&(Λ7_V[Kf.O7)f:f(f*C?ÿ6RRNJ.Jog&?Rff#'wnrƆ{gn +CGf>o3KSg&Ckf/&3k~^÷Or.3gnS3.[_F^KWW/BvΏo^>.&Kw kzBsnc~/#fv^+)?cg_.ʺNo?W^OOJ^# 7Z^oCgf^{j~ʏii^v{{g_:&{r&'_c>n23R'^*~.·3n[K&￳Sn33[+oƆB332kZGw>f2[^_#~szs;^&3WGS_vzjZ{+'2gLJ"R6: ۟'r^6g/oGK&&nbW:F&'{*Ov*+ck&>oRCkr"&ˇ&n~Ã/¿g{.oj;n?nONۊ^j_SrZ>s+&f +CK/.6&ׇ'&FrBsnKFrb^~CgGOv.{s* +ڷLJB~^j*N.Fns7g zg*62o+s(Ok7RRJ&f 23^^r_;&:SB.c/Nv'jj.26ZGn/?*N^?Jk*J+c?'R3;^g7j2">n'/ZϏ/+:~Kw__/^;cnin2ƞkg~SC{BhgwkZ*&)*s^^rjGf_z"S[kC>"SscR3GZBZz'2. +C~&gos/RN3'*::;'+fB.+Sss +b +*ֶg's^/wCnʎ~2b"^ssz +/RVk'/ +rF?;Nn_7Nfn'gb&s.:˃o*(b#?;Nf[ &f'_/KonBgGb&kZ{?6nC3oo_*2G&Nj k{2>63'چ/_ZJb22Nz&f:Nzj3oOJsϞvFo3'7gSR*Bχ#.RΎrrJNλks[FvCswgO&6*._3?J^RRzN j>Jg^J{#fnOrs3K"~nZB:o?2/FNCo珏~6k_j/3s* br& RR2.OrFfb+O''v:sZcOoCrZfG .n~RrO"2s2f6n +'.33OBš?zRrSϚrKjFg#^k2 3Z2b&'*Z.bK23c^"3o3'o~JKo[Kr'jbJRBZr+#RcfN3Sϟ6sOϻ +&2+B2nR>'Jk .+OϏOg +ƶsB~R/' +.nnZgg*RcF/SOg6>nkڿ/3::+{~S'Jr#ZR^2;Kc~BsS碶k//*'Bj +N"[O:n&ꚿ/'vRk3on#kO/jjN¾wr ^&rϿ/_*Fcs/j>r +n.N>G{JNKosg#.^K?CBr:+&ONn2?g^z+K^? _/JNCSS.+rf{oSBn +N{Nk#'bC+ +oB3o2;c/;r~C22ZN>>OKC_'RjS*3jn.sBr?Ob.".> +'GoR"b&['~&R;J3#nNK+/ +.B.~^/[˟g.fB S;z/C*kSó+jn>R +2^?J/_OR.JJ#J +#ʞ"//J3s.N./cۻBNF&[bSw_R#?gCccfZ>;7J) +No)z">K)SFf闟sxvC#*I9f~xVNwOwOF&. gwC^wBRFJv//Jjo~rWs_#.V k__/S&SW^.vV?RWw7jF(V&/_7~ۇgGW)~fh&7wG_F:kc)NƂf>&o_J)G2Fsr/ +3gz׊cfLJ)k?hh[7i6f +iOGWJF'?_I'£>f&b3_'on^c~+WronJB/*gs2''6zs/R>^?7o?>ָ&n +G '[˾&Ngo*FVkϏ#7kN'~{;"'GR2.FNR_3?/+Sk3FFF3Z_/_ϊV2nBCj[ksn&fZ/';ƞ:Ozwcrcf~zoOsk'3jRf2k+'gK&GFJR&f_6V.oGk&3_CFvCO//&&Bo7þs^f2~SOss&kZN:ʇ'.2^'"{zO">*JSs:>N3G Oz6NO''&Nn>"ϷJ>b2+J?ÿ7?~ώno Sbrn R^K~^'"#&*;{s[~>B_'_O'VNCWJ^rN>*''CgS&zSOKR^;Rfb'bO3s{>Br*z'gJ*N~f??orrv?7+ʞF^3g'&f㿏s?+>G/ss:>k +#/.R"KC3+2SCOsk"n:RC_Wbk?'kF2 g_/2G'S?;~Ɔ#ϣ/n&^f?/‹NBN{Kg'+fRsKg';.&cBcO{VnS?g&&cS/'r~V.g3S[.#Sooz~#/zo.~zs*Z:b+#j[o{.jJ ?Ϛ3#f".k''O3kN"GbR^6^#Ϸ'{&f^o'^^&.'[KJ#?bN#r£;3n"r* 2#S:.S"CSk2Z#>~gOk&^~/_oo_ + n~j?k[^S +S. s+N3;z"[f+/sSjf*BRR_c cO?"nj&:.2S?oSk2J6s3#K"RjJ:.?σJZS."k~n;oKr2.og'2>KSC˞ƎRS'SC^^SgC;2RvF#S'_{J.r>kknNz/ +j./oBK;bbbCk'Ύn"c#O? +rbN^.c//F:2s?_SoJj^&&/wg#'N&/O^&oSknsz{3["R +cKJ3S~ +Jo'ZN3KNrJ/_g#&2o? Oz^F&/oR^껛#.&^jKCK[J2?/3 +3珿SB2Rg'*&.&&&Rg'o^NF&o'"枋~[O>Zc++jN/bk۲ +JNo/3:kF/ˣfZK_ggJn~Z'OSn&n"_'3"j>G"^.+Kb +b?knڛ+s# + >rz[SK' {.zJZ珚22bk/o/N&FFro3J^R'_C &FS/ۛ>>nNcoCRSkbJR[cbr+K/#Zk;. +oN.;+:oCJ&sCOOknF.O㎾>K_sZ[/[ښZns//#sBB3orn;Z*c#z*".{CSk.C*?O?SZnrʺ_Ob^3?Cn&3+3~^jj+J.2333[cKBrs3#ZrRn22'*KFo_ۺ^Bon^;;f.._3nξ>⊟3&r*32r*j3:#S3#ŽBb//^*K__o:.RrcKn6//?.^fS/g3RF?/*{sNn[3/K"*j+"rS ˚[z*N^.BCkj>fn{/'o?S*vOcgs2N^"s2{bJCc^Nk/'.Jꢂ;n".ۺc[{+23r{#g_o^v&Ko Jg3 oV(^/_&v'?R^ھ r{3G7#Jfjfn*rZ6oggʎRf k>3__ +6/+R;3Z粲FۆN~(f 3i?Ks)G'fK&F.R*>6c/[oRgfb.;/J23Rr +N+Cr>#r3r f.gB&oƾ~?// Oj&^ʢSBOK^>K^C'' BFvs.hvFs/_BRf2C?_s~:s 22/&CNg>B6'g'>κ(ΛSgg_{czn~^Oϻ33G*~f~?2~^zs_')^f2&2R'o?{F2R2#K rr.[jC +nJ2Z;z{?㳏*ƚ>SZBkrj{JKk +2sj^^ƢZ?7G&F^#WS&VF^{_/b&~o"ϟ;oKozr΢{Z#'CR&~.{'.jo23Jʣ&:G3:2nrogWW"Zf~f#Z/'^&nf +C+b3ˇG^>rr.7.>2bB~C's>^n#R*j:s^3[?2>ro 2(." +)g &&_WONfK/ +Cg;r SkOR*Z~.**rB3?S/ZB2nnn'sSc;^3Ok'*Fsbj.+sk.oR.Z&۲C^&NR{oǟ^"f :nSoG;vc?oh&.[_GG:6R^KoOvs>ss^k*S3c'Go".Ff2crO7{c?6kb&ko"rcj6CbsjjSf [>N '"2_C2cfsgϺoF2C&c._RSJ6JKB~jGC[rΣ?z>*6:#>KC"">gS&Fo +)k76(n?7 Oj(v^:+hK'gG֊O22Nn/Co{Fj^bw3_[N^ƾk{;{sjRk+.&:2O'+ +rS#JS?rzf.Zg/+3jfb"~JCkb&:~ۛ2O""jKKsN2>s' +_n/"ςNZ?:N[ "scoo^.)O;ž6&o ?'*Ff^^3ϲw_nrf.sbrG[^r2foc_ "+F3&C'n/oZz6/rgr 3~g_cNs__/n>.v.* sۏRBz~*";ro2Rn":S.+3cj닲:.2?'K^~.˃OR6f˃'.fZ'G #Jfngs//r&[w/.Ͼ2wR3"_N N&#Oj*'j'2r_z26G2+O3rO6N>W3֚o^"S{7#"CF>~>˟Crko>/BB;?sJ?{cG{rvrkgssf;S?/NR6nN?;J +Kgo'nN^ +&O#?^?+: /^S2rJk +/"/ʎr3c:.RCs +K# b2:3"+sRBgKz~K3Ï[NrZZ{[Cr~?o[g.R;*#n>o_3gs^S+oŽN#_;o~FZ3Rss/*[Zf>;w>>S?.C_z6ZS+sN' ;/BC_rf#>^_oNSZ#r>gCgz.Z#O~[OkcO~.Kn{oJz2;knk:rc[3j{NZJo.C 2*ozZsnfz[o;23kBoo;*3rΛ^og&2~n.*_GKBֆ^"kS_*C~>.c['_&[_bJ{˚΂2 +N2Z^;>C&/&*: Ú#':Cn?_S&/&R;JRfK_#Ci/VbK&k7ϟ_C/sg~K2s*n&f>>..2^S_sc/'__.ZΎ&^ָhhF2R/S[緇7w_+_'O__/Zz+oS/J?[ +rZScnrBf.v~&^r{n~b._*K."OOO';3Wח7ZRFh8Hh(^Rr +siIWWWW)ǗWjzN2nz>V>~+N^~:FJ۷'_3sg+.No2bNBR&f6^r~r"S#'w?g)I )w8hVV^Z/O77g''*#[SSB~&nNz#SKc.Rr[o +#~Kg'3jg/NKSN^j//RFFhVvn3[*[yYG'wWsnƖV vj_'Oo7''?3ffh~sj.o/>λ)i)''ow n~?#[k.c.V88(:2N36Vv6f +GW 9ٹG#?Ϸɉ闟^h vRoK3_"Ί)WWWW_fsgS__7j(辛ʏׇWosNfg'ãK2V^h~f(Oi鉹)3)IOCRx ``V> g*K3+::׉99WwG6&[_g)w'o3r&_g7gǻR +&+JsF(hrn'/* +fVvzggWIi׉ 3n.#GR~x`XHVfR ++/'WW7)y iiis(6ZS#so^(&K3R*Zv( '7Gs'gN(&O׷?Z.3j^f;χSg)i.NWW_k{{f `X C_[n3GWYi)7))wRv~j33:^{scN(R[K#soczvv^[go*sg'R>&"+j''W6h8v7wgG/'7&WIgcC3*fhHXxFR")/rKs79w)WI^V薈֖&r;kO6VH6.g_7wwsr^>?g7LJ6f>βkJnN~3r&֖f.n;_iONJsw) iW^88HhVfr + +&6fjsgWw)WI9W_R2~j*/6~k2Szs?o';~FF{SIi'[ֶ>^J˃gzhvv(gg/.6GiIiW 3(FhȈhk +r&Rgg)i'z>VvFg7(6v +sgi_o+66V?K.f&N^Nj>nzÿ3CoF(VC__G{s3_wwii)fȘؘxh^FSO)IiG_2Rn>~/ +f6vVRRbsS+3JƖ6&ZRN>g?o7srVֶ>/'Gjn&^&+9yw_Sk6ֈ6>^fN>N*b_׷wgvvzo6Fz/3kNFv66))'Î{_C[ʋFֶ~J / fI 7g2&vhhF~>6F^RSGWW)w/rvFOr.>VV(&RZo7oOso/?*JnN^'gG77gF&rg b#ꎚ&h6 +#/s~NKw9 w7JnZZNfFh6(6&;g_o_7)iSRokoK._GOS*>_?/ʃrnBÿ +Rf66N{+c{2)W))Gw_{BV&>6F֖ƞϏ?gWwKj3C{;[">N&{SϳOS;Co:NnRNN" ;{r((^'?S;b>Z:*/ 鉹iiWgS*6&66VhH(6ƶf>.bSWwg_O[o_[Z^.2jz{zK2΢FFf*B[2O3 +Og/Kb&z&Zn{R&N[/'/) G^^NN~^ƶ(VV^>R_77)wg'/#"R_Û6>*"/K. +OgS:JOSr""_Rf&nN.'/2fֶ6 o3s?siWGg_so:# ":O&(b"~OGsJO;J3N6v^BN^3k +S 73K +Z^hvVN&nr7?sz'?_>^>Z^nNn»{>^22;krk{[KC:OG?*#w? +F^FF(^&bOÏ/'_鷷)W7_"r.F^F~&^n&'__? ?g?_33~^6ngWSogG)oO *FF.Nz +RjzR(vh&K&+.c_WgWiw)) g?wS/SbjƈVV&Bff~_9*/G_7Sچ6V6nã*Z"{g'Oor2 #gOr+kZs;s^>> +&F~oo~rc_Rr?'W?ꏃ?njn&FȈ6J{#fFWiO'#o' +{S#g':RƞNR(:￿k_'_Z'_'o;rrN&~^&[/?S.J#ckS[N2No'skO/kj'gϟ/>/CvNn^*"'G{gϣO/S2''~2ZVhFoo{N~cCJ׷w׏>jΊCS^R66"c.KK&j:ww^NRroBfǷR*/.3".G&^VV&>ZwG'#g+s"g^26hVckgO/7SWIg[v{2fFfRRv&cj~O'+b23WG' +sC6ֆ:vFSw{o[nNg ^fB[ƶ&nSzۿ)wGwW _^. ^Vv*brƖj~R#[_ nǷjb*'+jZ ?.Vv#j"//sC*b__z.{&*z*nnS_)'Wwg7?jf ++zFH6f6J~&V^;_w_n _oWOsZ3nbC[JgO..*>B6vfNZ^>_*'gO''/*s'JgS.f*&zV^RN +__' Wbo[""bZF>j".2^cgggB:c?*.BC"~"cKsg2~f&Jnn2g'ʃgSsOOzb&ZB{*ff~^zr_7gO*gWWg;cG7vh~Z +>k2^sgwRNc/'?s.+ &(~Zcc2&&ksO3KK.Bo3?_ nSWSn [ +ڲN*3cVNksCn^#O'i '~.G 26>RRV>~v^/_//rnJ_k6v&s6f[oێf^7ˊ??S "J?'?K&zk.~&FffokΆF6.N.*_wCWwgϟgVv^6(fzrϟ[S#go> +o;"J orr:J2΋:['Ok>f~rrN>2 +RNfKkRNښSkSsW_g?O'ggoo3"Ζ(6Ff&3*:77'knZJ*/;j^.>nO S.*ZB[s3ûCO/'oR>O;R~r۟c: /sc_3oڲJf6>r*^v(F6^CCcKO/Goos'GOˊΞ^~~~Rzrf&.:3SS3oRΞ;_Oco + +* ?^"rk>z&> +o?__?wOs3OgoR.&BKF&ξz&^~fs/gWoO~'gf&F~v&zN>kR:k^fN?g#Z2jSKs_[sj+Zkj >&~ k22K'w'gOgz.+s[r&6NR.N +#[nNggk***.Z/..N^r+o.rnJCSÏ+kOSKj_G_sK3c +b.BN^R&N&{+^f&+3'7GgG)wS"6^f6V6>b #_s[g_'J +F2># nN +n"z"O/&{sgKR622.fRF+#*^.Ks//[w)w'o'w&^f^66V6n^fƞ__'k[".+[>^~ڊ2B[ +3Wwǿ'wG_^os>FŽN>^6^rJrR/7[ nGg?_s3*kw7rf^R/_kFFJ+R&6Ɔ^B2Rvnϗ)?K/ iw?^"s.N(^6H 7σzi3k^?7ǟ/))6V('r>v6>k.6r^N~&_i_> "OwGk"?6 2:7)cZ~wGK2#gg#"HVVN'GgS* W'oSww7W ^^6')鷳>(Vf +>z(VƾiyIwO gc2RJjFVh薖cg''osbâJ;^2.>BSn88xh(Zsi77g's/sgwWWWiWonnFnZ#2Brnf^>6fn&f.6vV>['w yy G_osz~{SbFX HF;gG3g3{3sg'g~抏b^(hxSWWOKˋ K +*wG?&κs/wOʢf&~Ko'+BrvȈv"GwW_w7_;SSO~/oCVhH(kwWןKBSGc/Xv:G77W'[o¾2/v^KOJ?777'?2^J 2~f^ZoJzN6h#7i )Gk"&&> +>>Z~&6V(vF~)w'o[O'_g_/g*kcx2''g_gCS23[J2F6׉)Gjz2&&&^rB2 + +VVV(WG7?77GO3"r2N3'o +~6VFWi)iwS +BKJ2>k#Og'((V/_3OϟRz{ßgo +k.^NßG7_/z/VV&+sg3K&Vh(Vf)) W''sǏ2^FV6~F:#"bskS_ VFFV^rs緟g/nffzWWWsB[r~3W Obf&^22&V;zFf6(&2z>nz)_ח ww7ggzŽֶV^&/7SRf3Λs)7b^h(^N~z.#7G;?coN"^S?';>sJn;Rjggg"##NVv['gsBr(fN&^r gi?ϻۿ';3;cv&rs JRB3S*j#w_Ff6vFNr2?O:?*:#gs^^>;?ZS? +b#/*;S{ffzCsO)sΚ/oS{bv(K++o2RNzwLJg'?s2VJ'"Rc2.Z*jZ/[gf6'_3BrCssb&_/so#s3*f(VfR?s>{Owg'C*Gc;*z(h^ *&F&r '_{&r_g_'s"&V(N+/s.NJ//#J&BO/3ZZ[ cζ#'{.R___?k2/ KjRhFNRRcsoo:'W z^FVK[>n:S3s +sOG_..~>v&nnrrc_Z.S''g/[S?_/{".n{c{^^^FfRr:3*CS7' +OWW'R jf>F^Nr>~f&J B +K)7ϊf>&NrN"OskK۳?b>rRzs +sg*b2bKS_ƶ6rR23K3sCoO_gGsR*&~^>>r&f&rKoGG*nrr>N.ZncB˻2J/''g_~ +kZ2rZ /SoO/cj&f~^^&R_SsoS_O_g~^^R>^..nK Og'gS[{ +2f~>Rn:.ھrBjgz.2*r + #/'g/+kKSC_OSFF&NBrJ:ZS{ogg''''7ONzzC^fF^rn.rj;gn6vfRR+3nz;bb:›c">.£gS?sO'_ggwGs r{[?^.>fvFFcO7iwWIIgjbk{/_j>ϟcgw7_Ê&Ff>&VvhHv"z '__kJ^SOsCKC/GiWWW ?#&&ncR'2>~^RSB/Cwo~^&^2JB2{2N2[G__7ןc~VVVVfVZfFN~) +c)Ȇh{xP7 8H^+&:/OW/&Ə{:bS2h_W2ii3j&>RVF&^ ".&ɉb +Rc7z{s"oZj:6V6F~FFo3+wS3gk~vf>" +nr?sO_Z~oKN>ff3r[oG_)'oBƶnv~:>f6 gW;ǗGwSrJOznFr"NKZ^:7[3#[Z_?rr膎&F6n&&>^oo'#s"n+Ύ_ [{2/io?7G~V&ZVR>f^NO7)wb'^"[>&v6ƣs'/cS +_3fڎ^CCbFkgkN^r^&znN> +_)7) +/ +[_òZC"R[s;So{2v(ֆfb{jbN.Wi_GwGo.#&26ff(V?gS_i_?3;O[nn^~^v&6f~Z[n?+c/cjN{Sj_Owg׷nânzn^66skn^KZ#Î^3zۛ +2?g*_wiG')3'JF(^^^"OgOSׇs ~f^zR&^v/2R7k cB.zk2^~*ogW)gGGRs;nf2^^v +S* c_W/sK'.*'3zCs+^^^NRFfC^fR?c>Z+.F>&Z+>6( +'*g)_o#rۛf~N.6+o33_N^^hV>(v6s[iWOi)'gSO +n+(2{Nf~BfSc +.Jjj[C'OS/;/G?o_CrRNZf(Fƶv3_;O_;rKNC^S#o)"nVvFv.S׷?_Wj3r6.^?'O_;?cr^.>zz~so+.^~^~Z>:# 7w/G/'/33{n.N^NS//2>Jz&>Kr6f^K +b. +KsGgח_G3fv((( 3nwWWg3/2^>fVVF{jO#soKK+z2+C#;ooowGGr."ZfVV&F.vRrsz?33g_GG7CC[^f>n>FcOw'GWSN&F"#Kr'_7Gko#R:ʎkw?:R_o?CB~~ƖZ&^z)i3SCs;+or^[*z +N(R>+ϟoϿgw[rNƆN^Z 6&z''O: +r>.ZNn.nRbRnN'ww7GO:2kRFV>(k[S7_)w'OS.ChvfFvzo{g7R[; /_c#3[s_:rSz"KS; :(ֆ6^^n{kGG_C'?+rCj^...b_c///gFh(FF>z&B[OowGc3/22Ƣcz*3C_wwSg7gocN.~V6憶F>?o#ζfNr2BJ&Ns' +ʟ_)Wg3sF&" + JB"[{j#ZRf&.^>b.b2 j"gW7GחwG/&fNR VvBrk?7)I ~vV(&.Fr o7_+3g.:B3?돇G)GO:C2JVh6&(~nO[*::#C?BgS/og_SFVfr#wwWG#vNb"V~n{[OGWgOZ.bRC_Ozn΂"2&N#_w ?/N^&>f(&ΚOG))_GK++?_Z>>>/G{k"nf&c2O?.۳'#F^2 k&~fn_iS_[Z+>62nBsgWO(v2&2W7i YyF6.6V3ǹ InhhJ+)I )_))v2~fS^g#^Ǘ>H8X~òy i 9F&FhHȶS~v7)׷ò/FȘo__3)W7K>f:G_'VhFf~7)׉7i Jxظ 6RV&lj7ɇ~b^v &&j#G Yg+OSfRo_kW: v8h6r WI7&f'cn&~Hv86yIiI9C2xVƸ8Fhh(V&j~/r9O7O6n&rNwgK^{#)732Nfc^kfVV*RgW'W9~J&Âf>FBfSWwW) &hƆf>& 2)_Wi{2f&v&2 +&j*'.7_ o +g{_rG9/϶>vvV'gI# 3?&VH(6 +Wi)9W)Gn63bF6RvnF.73wGo"^F6hFg{JWI.Sz3*&6~GnCƈF;gwW'/iW3HF:3i yjs(6H&n;'9 I9nkFKCf2^:~CBgFwkhVFrˇ7_ )Sg_ˈ((hH膢y _' +&Fb6CCo7[wO"{FFR^&˾nO'gg+fN&.fn3G[r)n8(VZyg)W99 jJO.Ȇv(88F))2s۲vHVB;JVfK+''#)W'GwCbR^/;vf((^~_&r/siO7/oz(ȸ&V>[׷I3K+nV֞H^S))I!IWfvf&F6rcCϷg/F2o"Ǝ?i 2&ff3rSwGwKƶxx`f'wG7?f3fBnIW W˻f83>^s"Rڃ)'g.&hCzff.*~_wOW'iGgVHfVRnWg_2fv(VhF7iw?nF^~O:oںoCrRo?^N&FfWW)GgSvhVrn_o{n&(hh Wɷ)WN.&6N;^^h&')jHFJ"2C#7#gg +Rj7Cb'N+(ȈHx2CGiwww?o3VHhN)iiw>&&(bF&Vf+[#Wi7oc(^?C?7SǿrJ*j^n2w_O ΆvvHv&*'gG_W7 /O2.nKY9i )7'cfn6vhfV +rg)G/6~ + RO/n >JKk/'_OG77))W˲nHHhv~&s[O/_f&F&k )WWw(n_r>cgwGW " NNN&FR& cKNZCiGWObN(hHH6iW)O_NR&VV(Kc#G闿^O?[bOs +'g[F& +˿wW{?^ RNRNN +b?ZShF2oIWGwO+2n^F^Nr# I77'n&fv^f&>VzG_'{ɗgg[n^hV*Jk:_gO')g/.h&v(f&OG[O+VFCLJwjnV憲k'Zʏ[3OS&~Nr?_:COJnf(&NFf*+)w/cN8hHF77W7G_C'3 R^^fVn&>׿S?2".2_ϳ+~jZ +^?))_Sn~b*/cnoc#Z?J[jFFƶV6SG)WG/S&v6&6Vr.c˟/iWG.ROk"f(>&ZN":i_/o^hVf3oGG)i7iwwβFV+s_.2&B.r#Ƃ2n2SOw_:R +~FssgZrs:23_kJ:ZOOrz2(H(&gǷNn&fhF +Wi))Gg#jkBϟΆ&r^f^z#;*f'+gggW_ +R.jΞRO+rf?NV{"N'ϊׇϷ:Fh8x(b) g7nfSg>^rSO3n cOΆcF(Oǂ"^>Z斈(oi I9YI))G&x@f^;)>6hsW7w'2F.N6h(x6;ii WGb;#6緗7)oGf6xHHs_77׷&8XVSOo_nr82_' nFJiya!iWI `Ǝ#g_gFVBg iO+ (&wWii_G3 8f'W9y)gn#_WW &vF3{*gR^B;~ƈR/w)yG?7sFX`8NSiB(XF.[/GW7>(H(. )o/OS&h+7' (R) iXXV^c_7)׷3h^C/: ?K"Vg_2( H*bgi'gGO^8 ȶ'iW)))wO[(&Fʇ..N +V'' gO/c & iׇW^F*/wSFHB^W_gÞ((7[KSsۆfIWG))) XhֶO'׉i7sV־fG:~j^Vr)7G HVBiǗ/888V3O)'(~&b/j2ꏿzJGWg` ^ϗg)W )w^V6^.o_)W)s^nʚJ6h6>rjs_NHh&w_WWxhh +2_)IiC&Ks;2r>KfwIɗǷ?F8SGJ&h(F^K/snR+Z3{rJJ3vN>RWiw)7g8x83) ׷i73HH6Ɔ>~c3?W"2n2*/_sjSCn6~ki7_'w7Hh&&gWiW_f(hVFO'W׉y&& +#skn&r ^Fƶ^#C_Gחw'/'NvȸVBʳ'_Wi2fV6(6fr3O'' fFr/'+3v^rNc7g)'3O׿88+7?"rVVf6&//9ygN^n^;˺3k^((f?i7 ^VXHV'GGG VFfNZ_ +ǏOs.b";Jbf6#Cb"K[//OwWָx8VFG ׊(V^β_?)bN"ZC{SJ^R +Bvƞ&S?C +g'RVvf_SI9 >V6^^SI)Of/?;+.ʊ^:7iW)_'*^H(kRf2oi>~k6~6.gI9?~N¾F +6(F +S)W.hvowI'v趞k[&VN7G3#S'O+>F^&3SO9~(ȈV^? I'VhvnN2NNN~#I +3_6N~Fvf+gSnfNN +J.9IG{2Vn6&r)犞~f: +J +3^~o))c&h rǗ {#~FNNfv(VKW7gOg{*'?hhGOǷh(^s?ϳ?G">6R^v_gSf^2"[>nR 7'"vH(Vˣio>RBB;s***j?Ss{>ZB+{Nj +ZjCO'^f^bc'I)N(VS?Oo+OKK((K)W7G_jΞN.~N+?SR"JRR^:_7G'ORk;{? ^6&.LJoʎR6f"OgSog77':R*KNFhV6&:c'gS+{33sf~(nzk#sϿO_GKF(vr{''g_hF.z +oOg77GRF&~&NS'[;/gS>(vFž^o7iɉW&r&>/C"> +#[_w'/3?'wr[oBR2fZGIjNh6.K_W?_ggg??bf(hhhV?'?SjbN> +GJB[sc¾ +#Sg/O֖2N:.ZB2>_g))Ov(vo'_~&+C2h&J +bSGw{. +*ﺢ"^ㇿsV6^+39y 7bhh(^ΞfsW/?6_z8(#f:GWGSw_: +iigZ&ˆ(F) ?.sSr+;Vh)iS'sbs~f*J/f6(2F{7/R~Ɩ.ڈgj7'ۋ7#hF WwRfrN'ON~z>&^Zg3n"NjX6nfGGgr&cWW_F2[WW#'3 ij^^6Vhhvoiw7g#g' +'W7~F^7ɷ&^&s2Nڟ77O&;fV(6^k +S3O3緉?FBvVv^Wj(V(6rS'+a! 9?{ʊF` HF&r_iJ?#[o)JS3:cח?c3w?&V?K6_Zf^V֢R6:g/?i'O_7i^fοG3n6~FJ7;:_r&nʗGʢznVV^oRfBn*:fǙ iyIW g>F*(88X`xvffK_9W'O{~s?;ORc'S33#fBvf_ +26F3K/Z*)+ w;o'k'^f2Ȉ&ro[OnR~6涎:~G_zOG"K NBB>>&2f[ )I sshV(vgr6nzRj[>^#G))iorJ'2F.Vf6(>sR&3RS+z.F&{^+oS*ci'r[zS_ +')I3/CN^N^N(vBfN{JS?kz^2^RZ{FvN_R&&^n ~梟)7i) 9)__)xxC/_LJrw_GGǷOzb2NnZz^Vs +RΣJ/oO{(;2r_7')&FF2VW?z +rf^r"VFǟ_g)_O)ozN&(Nfv^n~>vv{'׷ wWyWr(V(ֈVϣ*2rnJJ6'gj33')G{_z["v/jN&&r3_zf"'/{#'7k2gwr>Ns{Oi'22R*#HVn+;˛[gW+sc[JNNjN"jR.*'O>(jLJ7 N >^&F&bgWWi)g7W)_RS3[:&vh[(hKjoO+bKnz/ +F6 +[3o/s"JW'n·7oK.r^nkjwz^6vh"B*;g?ۿg'[kf./62bNv6fzVHVn #3{'YY II)ǟ N(f8vnr~&~^C?. C_Ƿ_CSn Co2>˿6B[{W6&~r3gOJgSúS[o3'{.VVrBK"rBC)(cZ>n^*6&~zo#o7WG۟ I7wɹi))7ZvN^HVƖ薎FFOF.;3_7/Oi7[KoOoGF2^>F^Nk~jJZ.+Gns7OcS3+3w&[㞺cgn&BVv^^^J'rk7' SoOor2rFƾ&&ڶ(((~_/) i Ii)Ig&Nf6VF>Vhf?o_wgGS cO3Nf^F~:knCN˿ +.rG'>2{#[j;{^nγσ.2&nn&^r*o;g[gW_or+2frf^FvVVF7/g)ii W g.NvVvH~&fR KJ{#:s7g_LJwG_GW_ Z&f^Sbf2~&f^~>'2b?Gσ3[GϷן#Oc__KFKnR&&&{c;Sg/_;[_[RBfjR^nz^vV^NF:WwGG 'ZfN–FhVFƶ"cO_?))G'Wgkz:((66^n>nB{3+~kzϣ?Ϗ;_'/c[rJn&&o nKf^f6r/{S#?oK'WW wg_"cʞf舘HFf(*g77Ww 9i i7w'."RFv8hhF6v*&&j O'W 9GW?3.[2nKJVf*~hV֖rnjgGן+C_g__?Z/ڋG˺2N˿#^Fr2ZN_oK'rbnFNrz ZzRf'Ƿg'Wiii/{VvVxFVV~{b/W)) iwGiIWgk+rF&vFnnfVF3C_7''w7)'s__ϳ/b?gn.VF62HVvh6[ÿG):o) WIWii)g#*"΂N6V6FȸfΆ>sKj +C3O))'_Go/ ++&(&FVֈ *nJ:3GGG7II7W_#Z>^666F&v^r>~^6F^~/ wG7gǷ3k[S:F&+ +>>V&2:[OSBB{s'jbSGK.~探&v^f&.[G')9IiwWgC^&(Hvhf[oi)'W'OGof>n~(6Fn~&#_GLJ_ww 7s_/[?s_sOچξ&FV(h6&fh6;_/7)ii 7W''Gw'.N6~(ֈ>z2s/))g)W7'O#OzbR~F(v&>f~.r~+/Gw'G;R^>(~#[+n"R&/g_ocgWj'_{+fjS{n"+&6^RvZ>o ++/K/ϊg?7'CK3.o^f^FֶV2 o{gwW W)I 7_Ookvhx8Ȉ(h((h66.)WIgO_oN2NΎ&~v.(fZO3ᅨg_#'wg_/?';J:>KFfr~h˻{+ZbB#CFf*#7G7GSw2o.VVFh&K?iGi闟#C?o??6&vhhvVfFh^['wWǿ?))g7//K+>&63{n&.kBkk^FƆ +/o?7w7O/'O*nn2^R&&NVγ'_G3o_'g'Ǘ'gBΞZ>^ֈv6踈h(S/WGwi Ƿw?KRb8vHxxHHV63)wSLJ'W/o3ZnΎN.O{>^vFoCoO#Ϗ'2Sc33[ˏ#>.zNN >^33s&jOooϟocK:c//#RF^f(F^2:.w_3#ggG)Wis.28XhhvsWWW7 WGGsS +r~[^v.:nrfh6.?/IS'_'B>rO{n2Rۋ +[6 +*b^^Ϛ2f"swǷ)gn.._BFVx^ffv +go)W_w99i3j"~Fx8(vV8(&3gW +'wGG_?*K2&r[/&Bf(VR+#sC gs#roOg/sھoRr^&ƖF3"sRJǟg'3o?_Kn+ooN2r>F(&&knFz wgiW)i)7'r&&8HHh6.S_gח7g'gW:+"nJ^&ff.(6V66 +.ggWig_S +_O*bn/+NV(h6(v~3Sj +Ϗ+j۷wgO#['3+ˎN>hhH(h^ֆv>.SG)) W׷'~~RVHH8H6K/GW_G'Cg?zZ"&vz;ˆ6vn{Sgs?Gg'b*/B^{/{;&bZ[[bn^&FƆv.O' +g/{#/##S_gwsSCOS&b(F&j +s_'7GwiW )JV6hHVC/_wwGWWg˺NN~fvRfN&6#OO/חgc [/o?SocJ'?^rVR{*j.J>'Oows ǿc +rr~(h6Ff~?{+#_7G IC/o;rF6v"sksg)'g7Ƿǟ/ +~&ƶ&>^NZƆ~#;'o''sO/ocKS;2 +n2f&~fF^./+z/SCK:#S__?3S +j:^~fV6NVF&6s/__))׷)7G?_f>V(((^Kۊj'//3OoǷ_3/Kz2njû'{:ˎ"bB^n.&*#Z[zC*+O3*K'חsNvb2rnC'Cns[{/G'WrzNo">>+3 +r~S"Br+[g#KO?/wG?O +V(^B^66^2ϟ{燿[2_gwCóR("*z*vv~kCC/2~r#Z'7)OϏsrz_?O'ڎSVȈFF^6rZrB^>.:'wwgww77'+N"/o#J2"G (hfsFNΎ>+WWg#Oo.#FFf^;OCZ_ >r;O7G_;c?:K3c6F~ֈh(FNc꾞O/OwGWW7Sj7)g6Hf;kR&Ɩh^KOcnf~3" +n~^3[jڇSJ2/Roi73Z7VVւ&&;K_7NNV(.:zrS3?'c_''/ssfVf~/JF6F&[3w)#ǗG_gS^&›+(fΚF> +sjo3K⛇'Wsk7Oo/'__"/F6V2fV#)g iW_S&&Vn&FRO' ./GW+O_g_HFf.N.Z#_)WszLJ_[Nf~SWj2{J?RNNr~>2j?O^nfv#O'/{볇׷G_73Z&fFhhhnJ.v(KgwG7)wWG?G)'3憶hv6KvFƶFnKg)gSg7燳B*ƶ^^N [R#/JB+gs__o_ +nbnZB" +NnR~FnnϣSj VN3"_gOgwח?r&hxX6FV^~Ύ{W7Wח)W''Z^:Ϻk~^^^FOGO/_cj&fF6FoZ^&kjs.z77o_gcR+"* +* RV;ÿ +"*SCVh6c*s[RR +{O_OsCOJrF(v2&v&"o*k#_?ggWgFrjF(vfN憶^O'' " ~"z>soc_&zzbf3Z32oRn+/o3[3c˿O+^v6^.SO'f&s:J*o_K2bC7gϟGCZN&(6VfN"_7'G'iSs3B^^n^66.nog'o[b{^FS{&^N_J[Z{3B.*_3C''G'" +#2닏?[^nrbڲ?_o J χ_3oO''{nB".rvF6fnj')WWiW/_#B +f>F(vv~Rw'__G'g3[RkG''2&RjrO +"Rz_#:[rz?SC +/+#'ZsnFf~~J[oS3"nn^o/'LJg_{#ffhV(fvF6bKzw7'7wgGw'O6^+RJ.vfvf. [RCk#OSCO;Zr.^J"KSzj/g__oz +j»2Nr":ˋrff>*c/_RJ?_3#G'g__snvVHHȈfW_O'g''_';ZⲢr&^vVֆ&2RcjRRC緷GOg'R.^jbΎ3#>6*o#/jjCj[k*?3+oz.>Sb{f&3 /czn^ξf~.nj;_S')w/S(hfzS__SSO'CSJ^F6Fff(fz2ZsrcoC)gOs?b.fv>R__''^vn/b"oszk㻻/B2G/s2z/bjF&>kK^nSggGJ&K*N^[sS?_w'#_'ȈH(86C +_oG3Wi?_B.&(Vf.Bƶ2;_g_[3Zk.^czZ +nOϟ'23"ò*^ڂ~sKgo +k(F^V(nj2)#s7Z2(x8ظ^Z)W_:!WG7ێ^暏.˾hhk'G)ʆFfr^hh~'G99 SoyYYGC&Fvhbj^_7)+~~;.V?iWiSFG&66V& +SsW+OKf[N;V{_iNbNc~g?7Ghh8ƶnwnc+o)C6hhϛf +&[wf> !y9I^YI&7vn *jWn^cFRRKs.^HvrnO_j?7iIi*7O_wiI9i9_3^ξ2#'ǿ:CW7wj7#S:vhhV>rR.^S_/7WS?./csjf2VFFCG7ىi)&^C&>VƆVc6.3˳'r[2[2CGs矶z/w)_s&^N3_f~f"'~2 ~fs+*iWCF>*R/R*kg?oVvF{K?j)7W''z[*N_ gwoR +V6V((N'_G?!YYi77_+NZV&"&>&"2F&N({3ZfRGWi G76>F>377 +W?/3&n(B# +)W's;JNVNfˊrig3zR{^^VkZ2>gW w*g6B>*'GcOWsRZ&FXVN?:g9 W'ڎ^~^:nO[F^Bsg^7iw72VF^&~sFj37So;*Nh6΋b_2//)wg3['6⾢gfW**vr"¾sG#{# //#_/lj/SGSw73f^&(x8&nCNۏi YI)))BFV&fΏCgoCorV(^;+Kii7_6(fVf._)Ss"^:2NRjw7RJ +N>J/ss*[bV(~BK.3'/3'c_j.R"fV(.*Oii .*R*kJvv^F.糳CnR^h>C鉗ww_S6V(FS&NJOiGC6&vF6j&.~^jgg7)g:2#oΆ3'soϟ3^&V&f.fn__3#"j"[rCgg)3's&f"v((F~&JOWW7'w scz&;O>.n+_c23^nVhNRO :g WF(^&b>WNjs_C&&(Ξ~&z3wi)wWSSfbf~rSj*&:~f~+_cǻBR/#'w7?'Κ.^V6(V֖s )WiWO'33?#jR. +;K^fFz' iɗ Žn6V.3ZGoǷ:rN(^F۲ʇgGWi7{{z &fN[rOWgg;F6&^^njOG'#"k^2"*gW7_{.66v֎&&>>GWg_7sc"Új^.Bf6f~2JRJkgiofv(vfr G/ZCRR.>?gWWg".J6&&7_;n^&چ6Nf>Sn&.*_S' +/svF~ָo'#O'WG7燗gC"rrSO>rk~2^cR&~/_Ƿ_˞fVn.rj?sGso^rFRw?7g_΂ rcFj7_S7Ks3&2VNCB>k?g_'&v^BJ g/GC+&~r&VVVnʎNڇ?g'i_sjBƳb;ozNbfFzV>^^~nG7g_?(>r[.B?_o +CnZffN#__'K2csjcv&J7Ws3S3>FfR{g'Og2ZֆcB#W)wǷ/fFVF^6h(vJSGW)7Go'gcbrR+3"rn^2..~FRjg?K~>[: Os*sۊC; +>CS+s3+KR&Fnz?s2 +#o'#226&O:_z&v BoO +WKK'w gv&hvV(HxVG'O):7GW/C6ǞOk'go'F6>y)w(f(~j&Scrg_8Vkw ?'ο X)i7_{(Xg9aWlj)I6@x y'^XHX@fv*y_#N~> Wo8n)yYRX8x&ngw YsF @bʿSW)XjwGGY/w2&`8O_ 7 !oNƘH*鉉ۗhx``wy iIɳ_XX:rYi)9Wx&Z_7kV_HFى99I)K2H@@@` fSyyyiyljsH kIGYai #X`6snj ?f"'c&6fO)iIY {sg/¸8 f/9)i)xXh7I9wW78H &[)ay &xIi?))IvH`FN~G3NgFH6hI9iWyx@``Jc797FhxF3!9ى!a9_f h__((VFO7{ ؀XXfR/) )9^ ^O YٷfhVIǗןWI_VƗ7K .jh8RGkOj)zH6ȈvBObi99)iWj&80 xj)ǚVV.:?)I!1ꆈhX6>fwbHHډi))!):`@hhi9i! ) ^ F')'_sיyISXV2s'9G/z^hX:7{GII)CO6X(>g(8`8*)W)9) ^XX H?7Z_)i/hh(n_aa 9O6hh'>3^f(vW')9ףK(` Xh"wwG9Jֈ؀?[)a (*Ckn_Io6Vn33׹'(VF'W?'I w*hx`sig_wቹw3Vg /SOi_3XhFj!YYiWKn^v^*oZ3#X( )Gy9 'v3g'3Y! +xXrIIx g{6gii((R_?G99R>H8x_GW)i"Ȱ /gRWف!y)vhvi_o': ~G[ByyW_R(Zc_)WCFƞv *WW )h H_N׹Yygnhxxxhc;wIyI 3^(>ZroOw)O#rF3Oי{ˆVhhxx֚g9I)xXx6Ryٙ)"&VVhRGw:8X8Jzc3'svFN'wo'Gwi GV X++ Iy )nH8vO{g)iW>(Hx6F~9 iJ^&hf3+Roo/;sK6H膇?o))SֈHxVc?I +~6 ` (FnWoƶC#_#2Fv8frznkgoJVV>wg׉) hFROi io RFxVCOW)?ֈ`H.ɉ7.f{ssggS/ڂˎHx~SW9ןn(&~*sgiI9IiS +nXhVf"s{)3*H(>_o_W''K.6&:_KrhH(ng IIx~VOOG)?RF&.o77g7/#nhxNS#_wWgS +&OΞWwozVh(b#ggi7:(["KW))gV +sS7_gk6FS's(~WsRV.BW)9I)Khv6W'ON^.^")g_J斸(&>2'g{NS+2ß)'V(vfn+;3igo֞rBW)i'[r6F&VVvvggsGs^F" +zKO7)G+R{Ξ~ +JgsZvH8(r3_)iI )nvNff>O?g^V^.Rξ*[Cg)G'v~&β>b'㞶nO+3)wGG^v֖_?(n&B +i)[2s 랶~[rkKg.n"3Rr[_{NN(Vnz.k'c'rJj&(^R&n.i)n `:S3 )"^^_ƏחG(R&f_ivV9VFrǸXVIǶ.(VXhG/>9ɟǹ9X8F'SFB r2Rg28>r!((>R9a&FWwI 86w2(Gii)7sXoihsi('Gj^W( X2'f6^v7&(fiYN6oH.י)9ȘV2HyG)Inz8^3C׹Zgsf7oH`F2g(.&(8iȶNsnvf(O6W?G !iXSxNWg!y)_( VxZfigFy^*&.(7V9SS^ظ;vΟg8#(h9G»JIYn8X[V2wyR&H8 ɆZW7Rjv>v)i&6)rH~3>((9?O/?Giv(RWgO3oao>JȀ(fk/ghcf&&2wWKVƗ^6[WiR([~FOF Ob)F6jsVֿWòYN6.^ rVƷ)g.v) znVvg)>3f? XJh˿viG~_ן裟B!9ˆBJhznFHGGƶgjhICWyBbCRFnOF'; vj^w)Zi)xf_W:waa(.>.&b(!Fo)agwB+ +(o6R/&[Gظ[iȶOf[ ('(nV&3gW皂aw&(2B(^n&!&.;Yz2ww&"[oHySf76kFhg2* _ fh.fFc')NgycFVF&2XFI^#~K'H.W㎃~?6iIg'{[ hb#n_w)"h_hnw9^&Kƶn.o>v_IJ6KB*ǣo+j^>r"G7>_C ~On>+F'7/v^~r>jgij7yW:SnΎ^?.gVF^r;7/9?BƆ6^R +i)gh_2##g[gigxVgwrnBI6&)*oc2&SO>hƖ&~.zrhv)''gZ^f&r +G _SS_rX>^?[ۿ)Ob~RrǙOi3W2&LJxnO+h.&&^iW(kvv8blj_iK VzcF>/?://Ƙ~2O'w /R~RIfkvV^&7IF^ ?O&F( sVf3 Ws.h*W~HzS·g32"K>o:f2fG_s#g7C^97NfVV^NF:ϙiriig_gBJh؎gv?W//FָnZr_w;F)džHB {R.({ ɃZ'KcS[OFFffv_ngi'o[OƟG2WgB螂Rgi''6vr'˶ǹz_g3W?Ύw&&VVO~hhGbϷ7#~oh~/?FhR'>~z / 7r6Zfn"nfFJ''2b3R"W'N9ySf涖F&_(xvJ_gsBb&(3>#7)_&f^n^^jb [f_gr{~JCFf'/rC_wKעv#i?fB^ȖnJ:o''^hr+oW[r7i*^n&6FKjۏ2?ƣZnr:_gJ.#Wi{^b&> +JG6ں/Rs'i??v΢6 +^wj΋S2R.fǎF&fnw{WwOo:.gv&Nns*6B3#g/v6bzF'Ji/ jjjF+bf>&_ +#i#_G~C.(^*6SnKgF^&*#z))O~NKf>B72RfsG6k +^&^J_Jg3sjS?^[Kf^^fֆ 33v2Ff')~ +&OSz&"Z>WwK;rs_'gnsOϊ&S.F*v~z3WCZN(/Jgg.3&^G>. .~7sOffC2*;˞+斈.S?oS?r>6gcrgB{gBo/rB:R"3h^rRR{'G7vRo3n3_:fv:O^&VFNJ^s&v^&HC7og_S/ogg_ ɗ_&^>nn[&f"kBN~b6Hֆں"g2&B9ٹy9IϷ)N&ָ6Vn&f^''S/R&^& v6Nbkg3K[Ƿi7)S/ n#.>˚6n+*'"6&VH(8h^_ WWi _k;;~#7WgZZ:^v[n;rVxHVh8x(637׉y!!y!aAYiWI׉DzF(8hֶ2NNfƆ'jz&(Hfnz) AQ mmQ-mm-yY)svh6FFH(Vhx8hH``XH&X^~2)量_[7SN.k/ +On'_V>~b~6ŸÆ(F&F_g'iGS'g?7I9N&( xh6^s'3ϟ)_'ڋ_OiWg)bξ#JvB3(_wƞJ[oR[_G_c?w +#j&fr/JcFVV.*rgi/)G)zR88((fR3 B>3;+[Jg'/7ϊCs>_:rG'^hb.~?S_'gS×_'GcBN~_Sr/OiO^V.(2Z_C&hF&rnrC2zOg/3' 9YI)wr.h(HH88vh(.R_G7dz2RszgCb.2vFKK'Gg_G'g+?_O_oZWVx8H6+oCn&ci7) i9鉹 ))^R8XHh&^ڟO_wGw&nhffƶ*;7ssGgOj/ +*^^^jiRR~F3^NƲ^:r Ϻ/7w)Y9G_{N~6(h(HFRGoB S3z7?7i''?2n>;;"ϟs'W7O/r^ +#ڻ~/srR^S{n3CF6V^"Z2zRZ#kR[Ǘ)_G)Ww 7;h x8F+[_?'7WwWWW9iG32&Fv6~n^^R:[{^b[Rb".z +.OojnKsˎnrjr~&&F>>bw)WIy7'>2^ȸx8n3s?gSOLJ77O/Ã:Z&^ŠN^k{ C~~^~"ZzkKo +ˏCG7GG'rn^R2.k//Kj&R+nF +Z.Zڋ7WW)ii'˲2FfV(VHFV6^K+k'c'wGOzhf^6v.N2Og''s_Ks_ǏWW3KKNZrrnFFzƖNƆ. +k)W iw/FhHHV&^~cR>ggOGGK/ O#.^c*_o*g7LJb R{3K22&/2sOw7O2N~&>rƆ>fڲ2ZS.3)w)鉹G¢ζFF(ֆhfK[2'/ǗGwGcggN ^&#{&:^.+Rr'K"Szn[kz?#CR&&r&J[Rrv&zzCSO'i99)i iW W#cnVȸxX8x>&.._ljwi777wWRfn~J '{.Knnr&fr.^J'?sGWg{n"b>ZR{.&N2.&&r + OWח))iRZ.&f(hVVh((vBB:2 ++[+'g)7ǟ?¾R>FN>fr3j*?˛rb kZj*2O?C_s+rf^"+kڻ3.K3f&(R i_777g3[.ֈ(((6."f:o7w__N.f&vVξz zRNZ; 3[kK:RgGwGG_C2JCoo:fN^6Vvֶ6RRJ3+Ji ) )/bjzr&hF~ښOCz_??_/kc^BS*b +;kJ+Co{ #sc +kϻ^^*Z۲.Rjf6>fnJ2/_7)W7)w)3KzVVVvhHhh6 _7wǗ'GßC.2~v>Ko3˲nkG7g//cZ;;Z^>.b +[>RRf&&_SW)?3:Bff&^vvVvV(VF?W)W7gs2F6N^6"ںn+sk_gwחi_Ǘg^&~^^^&&^^j{Kr.Z3S'g)G_?;Sj{2>FF&v֖6VFV&Ί)I9 ))r~Ɔv6(VFN"rBR2s:KBw'GgLJׇg/+^"2r~3. ΞNNNFfc;㣟G__g3_z"2"~.6v&FBb3χoǗɗھ~&F~&&&^S?kkS'7Oowgoo/#+.^r+&RRNFJS3fFnz#'gn?ck*?;+ˋRFf^vffbo_g_Ϸח7_zZJBff&6~.~>3o*.2J37Ƿ'7LJS'/{#Z&^~f&f.2NV6&.NR:k7wwiWwGG_cOSz>f֖(ֈh(6NSGG)i)wwgO#{2rrz.f&Nf2;+/Oog'?g7_Gs3'?cs3.6F^R6ΎZꏿ_G7'_gg7g'/Osorf(v6vF(h>)g.^N.~*nZ>NR:zc'_GGgGo*s?brn:.F~&N2B;r{2*_WGG'7OoO{B>6((62*S/'G '7_S/ˊ"ξ&FF2&^N>* c?wggǿo 3*z[j3.r&f"rnFF>bK3"_S+_?gó'gjS;jj&^VV6v&6^2'ogO'77SO_:z~Bzb&Rr2^f2SSCG'kC'o'?2:3rZngO;s[nNbb^^".B ZORJRSg[o_osno/ock#//S^nΆfv^Sׇ__'gSJ'22n.f:&^^s2+3#'ggǗϳo{:K:>.gJjJZR~"*F>6Vf^nZK#okO'_wogڏ+R*V(VFhN.Kss#?o:'sS__{SNK +frF^K'?Ͽ3oS2s:3z;J*>&&nr>ƾZBk +?__'S')WWO[n>v66(FNz.[g'RsKS[ sBB:jn2J 3.62[CKC__g_Oc/sC{:n^zf.f#so?gGOGG_s[JVVh((fnR2'oOow7?Ͽg?/Kr.jB&ff&6vjo33c_[O'?_Co2:nf&2ƾ&*Rf>2/#[s/ǿ_?G)? +RFh^Rb[BCj_sC[?S_s*~~[j&f>*#g:jR;r"Cz_?/KK/j3/RBrf^>{BRB2*kB2KS'g_7;&&Vbz"2j;[Kk/3 +oS_?ϋn^rvVFfR +[?soϿO?LJoo3_{#&^f^nf&N~>r2ꣳs[G)GCr>&N6Ff23"s3Ⲋo?*o_2j;B^N;C3{b3?ϋ337_;3R.>~^f&RJBj +.o3CB7g_gOsc_nnv^n.&^rrkzbjb_z3ZrR2Br^nڂ2Jb3'K.?'2.Z{/kRR.f.2rB./ +zJ3oÏ'G'?;:":2NvF6~~bR2ZkS['''7g_*"&R>{;kSb.kz3[Kr'gosc'//˺rnr:>br{f&R.3c{S77_?g7g[+3kNŠr~&Ξ^2J#.~:R+kgϿJs^6&nrJ?C'son>>JK*G7ggoj&jk2jbBzn6>^r+K#WGgS:>~^^>rk{jk.z?'SSZھN.6N>6:"sSwS N#_ 3)O'JF.jZ^& +R.Z&oNR.ΛRFn_)7sۏ";'GssCnjff&6n^c"+n2>njR~fvJnzoOg'W'gCnnn>2{_'/s_#*vvfBC>zb;n&Ornf.Z[2o'_gi_s_*^ŽjcSz6v&~ff +?Gg׷ϟ{R wJ2 +&n:˳￳3k>&VhFVחחw?o#s3Sn~6~^b*rj[2zR?GgoO sSVhhF'GggϛÊ2;Sg'#s_gs#{"ZVֈh(6Njr&fFnNfF枞'GiIig':k?/{#kZ~fffn^f&^N&n'G';>fn +?OOrn&λ'gS+SS[B"""^^R>Fff枞'Gڃ//nfvVNgG_gWW3o"B3g;/_rrR&6Kof~:"+kWGOs':~&&b3GϺ:[Fvb#)C'_7ǢβjR[R~Nf&nO';*zb&^B''77/#3ۊ*/KOos/{n6VFN&>~NRnR.cGwiG)G" z.+:3&&F;3c'7G/'s Kc.vnBfF6';o3/oj..> +g +ںz??GJ^&fFƎ~&ff2Rrii)GW^NN2b>.2&FF>&og_s/"/s{rB.6>O{[[#Nn_>SOSS2&NbFN^66N.~ +ϟW))7_z&b>^.6VhV+?Gwg?_oZ~>&+bskZ&^Ɔv::_KOg7gSb2&2NF&vf^>*wg7G//?ssOz rRf~r+SO_''Ooo??ZN^F&Nb*j*Kj[ /'s oO_onCsnz^.&~>f&fNZڢ3gLJ'WG_{ +/3# +ZRj~&r"z2{sgǿ''cRk~>."nbk.fB*"O㏏gSG/#3_WgoOO+Cʚzb^^fFV(6~."'gg''_Sgg/+/oc^^2nr"JK +S + +/o*.N22&F澾ڊc{;JjN;s3sG'gCJ +/'/O;z/ScR&fr2^.vVvV^ZS/O'7)?wG?'sK{hRNz2rz#OSs{Ͽ3_&s{Bs + +BR *7og+c +bN2zFfffvf~^?w'G7'__OG7Oc[6hv~(v(Z^BS'3G'+?s^>z&cn.B&(cos[ GzÂ/'S~{g{2&Nf&brskKOz?RkcC*'K/32s(N&R.g)oO'?&2&^+B b^>^;N>*kc?' c_3/_/cnr6ֶ(v;joo;_#/rjk:nR&~/__OOskc{Š{b^{FvV6.j~sGg__[i'goSS_[#~>Fh(^(vz?/3O?wgo#'gO{ۂzJZ.FNrnnR.3_OK*{3NFNKﳛ[22Rf^B>{ /'''7_?'[  +R^VvFF6" +;o{o/go?G7wgnf&hvvN^g'bb^Ʋszb..O))G;s6hƆ*K3WGg/kRR^wgg)w3RVhv(ȖfJw7/K>bß'7iwgI9W +b6(HVֈ +~cjR2"GOoo'gW+kFh^Br +o+'JR2&~&*o_S)GwWkcHh^vNrSow3.Rf>_#W)'/*vhv(fv +osgOÿ*Rr'c[_)w_F6v&f薆h6~R2BWgz"2ʿ7oggw'{srbV&^^涆V~.{'Ko*ξ;SKGWwwg*&hƆv2RbK3rnsCg_OS_B._WW' +Z.&V6V>~^.2gCr#k[~f&37_CljS'__ ^Fb2>&6Fj"ZZ#C~fJw7gOkK&N>F^&>Rr"s'Ssg{C+*soC zZB oSb b^h>>"GOzss#k[7G77Ww7Cr&v6V(6VbkkcR/o/N23OǷWW7g2F6fF&S 뻚#{jbOO__7__/Jr6(fh&&2;ggZ#nR3 _W__WWis~(&r"3c{ +[[n~ "+giIg#2N^v&^z_/j..Ύ+3ss3O_z' +N6&///RR^Fr_{/?Goo[~^NF6N2"{Jsjbk +[[ns GG yW>2&(Vh(&?# +Ž'O;3o:#GgWO/Sh(6Fn*ú3Ok[zG"SG))ǟrR2:NnbN#{z>Rn/7 Ib:RR^h(FVf^N+s+"*2+"r"jGoo[Oǟg__(&fv֞oo:>^fR#['GWWg'gRjR~n+#Jj:["v2+[)i)g#R&ff/ںZ[r:Ss_'ϏG_ck;^(6vNC_k#/rZ:kc'W)7_o.n&&"JFf~br>nfNcC/׉i)w'?jrfvRN*Z.r"r"'_3g_'SSRr^6vF^VF[総S>.R.Ow7G~b^FBoK +^f&N6^#O2')W)ǿ/ZnBR~.Ff2/ +F>KJs3;Sg''_'gSRN(N>.N?gr;K3#7cCZn^⾆(Bcs;bβbfn#o Wg_ ~NFf^>~>Jj^^^ og7WwGc*2~ƖF6k/ +~βnF.sK_皎 +Jb~G/.&^Rff" +[{CWwC>^Z +BڂZCsC)777Sc*ΆfF6^^^NC{++rn>b˺Ϗ?Go/j2bC;Z>zN+S[O2 +kn֖>f3+/'G闷G''OZf^^fNcJz:^>k''OGW/?{NƖv(VV(&>;BB^3{J2#'g7''OC*;;o^n +2z*3"^Fv66v.B2"37Ww?{JSúrrR&F~ffSJ+ggǏ;k6N2&6J*ʛ3">+kBnG_{sc SRN>n +CSjn^&&~JwgG/'_oK3²j"zJR[{~:.F&2K?'3r{_gw/_OFFFV^nSrj3Ï'G?{/? +3+kRz3FF>2N2{?GWWGǟsjNB.>nr.FF66&F~rK"rs_'ח矇GJbΎvnNnr+cRR2.bZ 燷G?''{ڻk;ZRR{"jsskJnBn^&&[KJggojKJJK2*>&~^.*K/'ǟ'g?{n&fH^>n.#.'j^f6RG) _'{J.gG^.bR.nKK ~Fn"g77SJrw nffc3s6(3 +zR*sGiijoOLJh&'o~&(RrK/[^fNGi)GKλo7~S+^ƖF~Rvhn'Ǘ[[['f+[GW7JRVf.~Z^nR['wc?/s_g'_FHƾc"~BnBj{#+/7wG[bb>>o; ;oS?[J&fB&">(vv/S)i'_3oB.ZF^"'GK66fn~bnR&w)ןCKc'?_vhn+nRJ&ξ{&>&ʿwWiw''ss :gw7b&>JksKK zΆnkhhz7?S/G))w/Rb:sc珻hvF&vgW)gã7/.F6(V+?jScnBR&~kϿw'/Sr S;wj/_s[{;n~ڳC[(*{wgs^bs*s66RˆvV*/G_'GO ')ZJ(VV&˂^B*co2jRc"_g/zKb"JGfSGǏ;Bks"r>fVV6RG_??__j^Z"/JN&f^Nnf(h:GW'gOG)gJf&>br:"ƶ^^ΣCfVwgRR?''& +/J o{㏲^Zf((fR'Z~z)G?Z3s_o +nfnB^NRn&JW'O?/o.~f6vfR#n2&N v{'s#n3'SS&._'/*R:FF~o/z+"Ji'2J'ow?Ϣ +.>;?g{gG'w"f.N;NfƞRFB^s'_bCB[+[kc;3o+j{"SB{2fF(2ONs'g)')sr>nc6h2jg? 'w)'c?k"CrF >NrnK^ 'Wj +n_{ZF>/'oCss{>&{c:j늋rr:'g{jggg7go:N~NfvZ˛O7'??;#^ :oBn^Nfn.nr&Ώ_w'/[kj2:{K2.O/3o_Oss +~6f2JJs* +RNb#/[#;7w糊krƶvF^ZO'S_g矃J²B{S *RξrNFvJsS/S +Bj* #bs3___/ϿO/"R~^#JNJn~~n+ +kb:3'G__?S*2.^f&B??ϿG_ R>[SS2r.~~^&^{___s'OK+ZKc +2N:SO?so?gKrƆ^&n +2zZ cK +[{o_?KKNf6v6R/3_'''Gs" +*oS2rR.Bn~^^NFfB#/S3/[ + +oC[Sr>"jSS3'{o/s†FƆ>>jj2 +?g77/oOfFfv^. +kJꚺO'OrS'*b..nn2^N.s{ÿj;㣻n~ +:ks#_gs:s/_'*nf&*KCz룏JC_'g__'g"s>>Ɔ^K;zS;K?'S +O?bnnbbnB&Ffr +Oo?o3JrR.R#SÛo? ^&ˣ;:JN~N.K.b7g'g7jrZrVvF.Jc +{'珣;s7SZr^:2{oo3jRZj>S3oCo?''go'o:&R .jOú#~~.O?g?+c2N^66n2 33?/?osK[;[+_?sj~n.26F6vRk/[{Zz"bs[/s?o___{r~F.jkCzˎ&^.>n.>f gg7#3cB^ΆRZb # +*C{ +ˏ+??z> +&vffSS__#*ʢNʎz>~/O_SO_oobf&&#ζ^nCzg׉'ǟb>rf&^k_2^(sw/r^;gGii/&8rGGJnsro3I'z+V(ֆbwiWo.~(h(wY!WkJv h +/2h.i7.Vh8Ga'H&[W!I'v`XH'Wi8h&/)rv8x6W!sָNswn( ƛ_IFh3WI_:VH8V')![&~3/?9):h8i9w>8 bOI/;r6>')!!iJƸBOW'Z^6x629_hV~sg! #(^8 v!Crh+/9iFX8RɹϏ+vO79Yy7.8螳i!gs86:_~8(S/)w"3)fhH"J ?V(;_WjBƆwyy)S*(hzovVVƊ)/2R&n#WWgZvۏowigKv&Rrg[&(h낲)J6X>ׇ'sbS_?wI^(^nr)WoNFHW7S"3/W)v_w3~6C'3(NR{g3ZVvr[wW{2^VϟW׿kKn(2) wS +H6F~*?#j.9)V+n.wK"(>R''3+&R)__O>;o)W.(vFg*6vf:[g&Hhs7'#&f"Z2)WGnF2z[Givֆ&Jh8hR"' 9i^NJcW)*+fVVf~*[&fn_c_&^Z{G G'nv3cZ#(&2 +'7VVvw_ObfW7&6&_G3rZr{/gBF舶jG7w +&.ɉ)_FF>7'?6oC&((Ʋgi)Wkrrr*_/.vv>kG7wS&fCv&Nwg.'g~Z{Gׇg/f&6VvkZ>Nrr 7Ǘ[BN^~C?2>憢_o"vvV>{gW#+ˣKWwNJ&h#N&fg26((n''G#B^^~&?)w7JN枾+7Wig.&2Jn(vvsgwW +bKsG'[&~~&g>&^&.Z+: +Nח_J΃Sc^~.~ã +>~vJZc?^2s_SO7ǃrR^"S_ /'g_^v(N/ϚN'G)wO;rr_'?o.rN/R6f_g"2bO3b&^KCgGJ~.2jj+j^^&{?gG'/Z+rrcSO2^~.Rr'gww~~nJ{nNf^+o73_[zcS3'OJ{+.FhVfo3S3[gW^6* +{??#j{J>~2sN^&g'K;.&.SGǏj^>jg7ǿKK2z2f6^6+?S#..'K.N [;b&.6~~^~^~OGǿSNzKSJ"N&n #os;2&&Z; 2>B_k&~*_'gRhf΃b.nB_g?b΢ + /b&Bₛ+>66fRGwǟ#OscJ Z"__o[^nB..v&RJ{wϏobB*z/{ .C燗7_>~>N&枎zSzr"3s7_ϟ?K2+s_>6(vVfjK?3[/Ko77'oZ~&>R;_BrZo326Co#n2O{jrf^ +GOۊ+So{n^ƶ&b_/3c &bKS'OO۲.C7'O3n&&nf~Gwg.nb["c>fk +Jz2.2kS_~&^/3//3 j '___s(V.zz3C.?'3B:SgLJ[O3JBh'gS#ˋ_ggc:nR2/rZ:"n^&NSO[*". [ JRnNzCW73Ύ^~&^nsoOϳ+ŠsoS K{/_g&f>ΎN.K?GGb~nz_'nz{S/S.&&f&΂:oc: { +S?OsfF'O?SCo^*oOj +COã[{2.[O/''R~~~6B_/sJzjCoo.j{ʃ+?>뺶r2~&N^>h~z__*.j7W'ƶz'oScZ&(Fhbr/*v^(j'wC2F'') /JN_S8(h·iWoz7iGk&&Fw .H~)׿g&HosV6V6;W{hF牉9^hijVV 79v&((sWF&2f^ˏ'_IGB^R'RCV66~:wig2""ˏsgsNR*37^:NCG&+fNK'i3Kf2B)vVR 7I/&~ZR/˿Ȉ&'cVF*kGG#V((&.w GG)gBΆ.'WǷj(88V7wJFS7g_&^?wfv+j/憖v(nSiG;J2_##SRO'zJjJO.:fvƆ/?osξ&r._7 &^n)? + ;'86?׷OZ6n&?VFƆi9736i8(zG +f^f~Wg)_NFvVϳ7 oNFnNGNViW7SB"vzo"W7'Z^~V2/Wg*Z3'jf6n_?K;C^&o?+nfSj?gO;hO'O>&7^vfFO3wW_N/"_g6Vh*:WNV:j_gh>rzgw*[ +?7'&8^sJ~ʟgsj{fv>.C77?.^KOgg.v>o'/K+/7Jv2Z2G7s3jRZ#^n(nRR;c /^ˋGGjR"nowÊK~K*_fvww[^kS )io3rs7JRVfnkgwSb_Ws3J6ֶ^bswW' +kB2_Z +Ff^R_GCOz"rr"gGSrrrr'g/:S3;'z Bv&^΂'_/2z3[{ 'r2[c7ocnR*C//_vv.g_C3>zS_wsB6Fng~^2R37;#F~GGώ~bkǷ'O&6>&2'gg"NB:~(VC[zʞrO^>.'gzz*.oOo3f^>6ojK;sRˇ3O2.~^Sz*ZZ+rf&¾cھ;'3Fb/Rj233nFV&s/7'{Bb2^_g_/6f_J~.n&ΏOcBFfFjg_^nG~^ +S'S +>냏r&Ɔ:ssr3gOkc"cS3^.F&.SS/r:3N~OϏ +zNo+6&vz3?#rj> 77gO^>>6Jʺ&.{'S2f(.o3BzrZ_GsRNr3?'gSf' +vf&g?_3. +.^^/'3'2Zcs//". r&n.ˣ"2sCS/O??:*22b[Co?cJKcs2&~rK?k{zR_bfFڛ_z n^n{?K.Ff:S{2Rj/Ob^FFj/_:Ξ^n;7o#{>澢g3*N.j_?~&'';NsK2f/S_or:*[nRN>22˻# k;_K +nroʢjz?N~Kk+c'CKZ's[j~s7/n&fƾR_~.2_Cfv>?O_>Bb"g&&& __s .^n__c&^kS/{BRs#Ss**&^*s/σbc/s/s^k +K +:ckoJnN‚s{k:;ʚ{n.[{knzgs^N.S?_ >g''S2ƆϿ_S2/'gc~2 g_*"NN3O_>&6*SoO +.~+'OBn&&[/sJ.K/K2&^.{ 3s3˃SC:r{+CCKcj+3c/[jr.2:;ۚKkOoO >~2[ooc*r3 N+/;2.R_g'sn&cjj?N^s?O[zk?_g_3*^zO# +."[/{&^b+ 33{ + +Cs#3sk +2NB3Sj +#[cz*Z.jkKJK+Zk#O/.~n;c3 R*/Gr(rZ ^RR_LJNJNhSWW_.? V(ָ3w)Jf.wiIGhfx"w96R8vgGi+H.3_iy?R&8^oiKX~siWBx H)&֘VI7& h¿7yay_H fgW!rV x['W!W ({W!aVX`(s^VX^A8@gy(X V'i 3H 6wy:6`8RGYawvh8')aaF867 ɢ >g_wi8xȃ'Y^(c'W!grnh8c!Of^OǙyxFnaijv3ׁbVHJ:aGXx*gف6X( aW/. gg ᷳ&oII 8fg_ai/^Ͽw!J68V3g)aofxֿI!iO>H'>Fh?gy*V(3GSnN^/C+9i_;bfhhnλ7B&hyWs3Hjηɟ38#2C7ώ' zxH2c)WnvCiYGNVXv?Cya9Rf f"G9)sζ8X/!wbh ([gY_B(xO9:VXHS_¾f?_ɉSָo)+~hh/3wg~&rgO&JZ׿;Zh+bzigsZ&)6~h8&_ RF"z/)W{)iJZwIO3>X^+79I)SCF886ə97rhXxO CbV8V[ JjH 'S^h^JJ3WKV.NiZg)_+shhnΊGG^rn?S&V&FiW^F~_)(6F ) 6(6vfWGVf6ZW_(FR7&n)wh(Vv^iW/H(2Si97*V8(ֆ)7GVVF^R)ShvfRiGǿ^ֆC7)_(F>7'ۆ&2s6fNGZ&'O?Ǐ^FzwiOξFgnvFGwjfFf6V?G)f6׷)iCfVv(;g)b6&GWWiVVvV'w77fvF>O)iWǺ(V_rFv>&w)g__V~f{7&FN2R~gOb&k?CsON&~OS?or&'O_N +fos_zƶO'wgΆ6r3sFF)7[FFf6(/_gB6>KǷW_&f6?_G[&^~wwǚv6֞_'GGfn&s'_Gf&fv 'K~^B..?'"FnBoog"+Cg3^B2Cw"&k"~Ko77sf.+/?RN66;cG){kFj⣇o ~+3Sg)c:&2Jʿʂ..So&COGnnzf_gG~.&s'. +n^۟oG[NJC/nro/'2^+ +?z3k*_Î +f&kG{OS2~2ڲ?+?GgSj~ƾºgOk +*rFjJW_sCKFfRB2g*2fF&Z)G3*澎.#7w_Kn:s:J2^F[[z"~nzڃG?ã .KGg3Z.^^bg3KR +Z&fn"2;sk~J +sKZ*j^f~rJ'O~RO3 b&fNb[gOz&&2?oK#Ffn2SO^'?SsZBGG36fn;_c?77'o+ƞbOoS/&R3'o6&{'sS~ZzsjN"S'R2bC2f^^N'S/.RNrC/ۃcΞξ>__S.[/s3b~^^^ΚO''J~&^ZoCR~&f燇3r#oo?>&&n__^kO^G_O/32~~N2s'? N^&O?OS*22/3^~OssRB2C_s~soR>s/n>^soϟ'O2n>ڣ#[S;">NʲB^K//?/ξ~f2S'O{n&ƒ/?c*B^&ßgg^///OoRN>'_oz^//?2>SO'Or ?K2nRS/ۂ>3sS?{*.NBCOo/+2Rfn##+c+ zkfFf;o_'rbk+B.^N.+2_o&6fwǗ_j(;WWWvb'gi>vg' Wh^##7W'SNfV*Wi'&H~)WR(FBWh((iigv(fWWGG6VVKwW?FV +'7ih7)'ff&FG_'>^&gwoNn&n#[?/ǻ&f[#{KCJ'细Rۿ3چB)_+S^r3[F^NkWOOR&6nCgW_.(&2 G[V6v>wφV"77fVnSwnv^/vg)n>/_gWn>ϷRNN& +SOZr^fK/KrjsCrNo.z +kg+~>^.gc3:^>^ׇF2_O憾WG +6(7'CV^n)7iNFCgb(F&Sw77igV(V?Gif{g GoچF(h?)"62)ǿn.Ɩ~;s2 +rCz/7 22+'#*:B2ϲg/NR>ˏ*C 2.Rg /_s{NrR &rn7sffK'gs"f~7_W'^F6{gwgs{WwBfv(r_&C{gNhGz&6J"_wg/(^~&j'Sfbn'So&fϏ;JN.+S [2cb :2/ SSb.*~j3C. ~&/oOSRJJˣ"^&3GbRFF2jχg2:'W~'7#"vN3g)Ɩ> +o[KfFNs?G?sf~+CSoΞRnn^>+OzZRkgÏ:"2>Nn‹b*sC2[2{[rKRsCcOC.* +>jkKΎ;SOβ>k'nnn~"jC_jN7'rfb+s)o +6&rz{jf"*×g'/NffnrJ''?_~&.r_?gf232>n>"?3²NN./S#+ k{jZ[{{;/[ʳcRJb*2 _/{n +SK2z~nJ/K {*>R';;^>NBk +g^&>.>*''oC&n"nG_?~F&N&_Nf.N"g'Gg3"^^~c_Cz~>~f.nF^;__cbB^Σ{ϳbfZ:s3Cz ξ+ + S*c;nzR+j+돏jsz£{jb3SZbkK +΋JO#r^"ˢ_oJRJ+S/o>.*'g{>3'?3&R&Bgz+NNڋ?Z^2?_'z +.~r#?燿[;oo#~~nKo_C~^Rb/C[ZZJSO:22kzJO;{2˛Sj[;Z2.bz;CKooK2jz3CC ʎ&r2.OSNRoOR~2~/'grf/_'*N&Nko_ǷSbn&^n +_Sʎ^>r緟/b>~N>rJO_[&&~?So_oB>N OS?:Ξ~[[O/nξsR~2ڳS 2+Ú:;*bkꊋS33b +kj{Rn3/?O+JzZ3sjr>n +C/j^.jKo+>r + _32/_?S^S'Cn&&^*'okB~?.ۏ_;.n^fr__':B2roO*.RS2~R*So/kZ+[KRB{sC*kjZ#.r ۏoKZ..JO?{ +2bO/[?OKj>s~~f^"o_&#ogg_rfN*Z2fNKO'S+^^s'/j^.Sg/n>J*O"nCOo.RnR?j"bzbk[K +jBn2:;#s[;z+ +r:/ookRSs .RNRÿ/ZbocJ.~+_.&^rO;^&>n og'c~&^2k33ˎ>"_gOcR^fNJSRNs?O+".~NR;22+O"2.Z[S#:bJ: ;Jnr:+sO33CN&sob.BbRʚ*w?&NS_?S2^.fZ_/Κ>s:/.Ά[/C'w'&Rۿ{K&>JBWVs2Zg//^V^+)f.N>{Ƿ S(6:G_k?o>F'_nFnBz/ºK#FFb*7ZsN{_?'+n_gBF^C3r>s?j>.?'g&.2f_7~s[>{*Wv>ozs&.3'7)w~Rngn'_&r.gi7>S36irʺ3/Ngvf"&KWZ"o.6ož_'n&r#3NR'R+_j>r_R2'{n&3'n C7wCzn&?2zk?nocg^_2+?&6Rn^Z{?Dz>N&(;ocs +vfB.f6F_['_zB{+)s(cS?Gf6~ׇRfNo.S_;nO^^ni){#{*rrW& +:go_~bC^/{R.GR{RCb._*.;O>~_s:OF&:Z/W_2n"^c3s"/n~[3ǷORVv;_/jn"NRw7J6Sۋvnb{WgF6{k{f6^/JƶZZ*CK.&Z~G?[Zo#~^sO S+rj +~㋋jG'➻;/[^'N㳂B{cK>Gw>jz^rSO&RR^#S3z֞7jN>ξN>뗉vb?_3B +Fj{ZggO>vb"SgzBR&f·SF3_&b'g_r~??JKnFs/##2ʃk~/o*Nn +c?_FJs3rc+NƛG'3r>2F"?O3k+sJ&_? +N>f7 +2S_gB3&3 OO#&hvKjK2>N)3&~/gs"nJ*sO?vS oO#. N^GSO^^JSRs3j[oOۆ2;nS +JfJggCokZnBO':J{?^ozs/*N2nG"Nr__ +&S2jó[fVsK/Ǘ?k&>NgSnn[S/_VbKOʾ~Š~'_/s/Z&g?Rn*..jZ#6k{'3RcFF/{zR>~osNs? ++"Z_S&3#;*jRN:oN^*#/Krjr#[Z+3cKJ3&Fc/ۏ_Λon#Kj2R.gNooc#Zkc_sfn^'O*rN~cr3òR#+*'J2z»O/s*.^j/nF'?/Kz&;.k{ +"j:g#^fkz3C[&K^^C*kR^'sNjz:#o:_^ +S;{.2Î_#kJz+fkg~B۲?3C?os&۳_#Rz>sr*:bbZKC'f.#?_;^+ >2{㎶Sg3R3 +Sb#Nn."cs[f>kOϏ{/ffJ{z3n>n2 +KOS?cnrC[S3{>^N2˺{_.jNŠOSS?s>C.Ror#N&z{Zbr's"gfn. +s/ +fkN/*Fc+ J.3cnK>Sc~n^R[FƊۂ"j s*KSOc2rr +j_sN>s{rZÏ#O>Sbbbs z'?~+S#B.rj/&BcC + #sjc>#RnK_ n>S3?N*k+/_ +sNf;r2;⋿.&+: _gzr/.fNK*jcs.BC3 z>*ocnnKskCsKzo_Ξ[zR;C:.jʂ2*Crkbz{N +S[+nRʃ3grR^>:S#{o~"j +"KO+c~SObnb[N:c{s;>^+[>NzkJۿ;/Cb^Nz{sj :"SOrZ;3;n * +ϟZ:: sC ?΂ƒÚCZb:[k 22+zRc[Z +KNn*:o" ++SKzۿsB"CcÚ*cZb/*rR'K.k.s +>>.Szo[/*'[c2._w_;b8z7I)^nhNO)G/.JHVos6>6>nS KO)76> 7G7C2^f3w_^&23o3^VoG gF f{+OSھgs_+(枆R'3N>RFz+S73FNn>>W{fv&sj_G^ƖƲ/_KbF>3GWR&VVg_cj>(V*ۇw>6J/WW;627CSJﻷ[r^&w3c(6o3×s6^n;w3s +k[ZS)c&۲ SϳnFVk? +swB>z{GzK^FKsz73;R2f?7OB볢V. +k)'CrRNS{OS;SFnS_#ʊR_s +s2^j;o2w#B/S*S^nʇן*2>&.:+g'okF.벚c +~63_o_["~nZZG+n6^{Oo'36.g#Sn{Jo_f.r.N2s' f_ +rr2_g_b^:*.Ko:2~&#o"nrBKO.bBkJ Ë'gsb>&&*?kۿ/j&o'NΎ +?ʆNNNo#'2^.gbʊf2z:33_v~{2__ +cN&. +S'2b^:J.>S_ R"ZC+c Z.NOG Onfn^Oᅲ'RfrSssb&.##:R;R:.R"‚kg_n^fcss'J+F+*'7_O: Rf^kOnNFrs'?kJF6cggS^~>+_#sn^ʇoC33RBBBz{?bBR2R{r[_.NB>f/[ +f_?N&N2go?kr.>fsC#O2nz^{#C r^;*j'Rn ;*K/.~[;k2o&ZۻSg珺.Z&~n s_CZ"f&#s?/N.3'rʎ.B j{?r&¾R{"2OZ^~2ۋsOϏ.r oO˲[^2#3?ok~bs.~^C_NRZn>Nʏ+;3o3{*^n{B +3#kK{jΚsc[ +[KK>&* /*[[b +GCZ{R2ڃSj^"r.&nRon:Z3/ :J*2C_SjJZZbjO+j#S3[Rnbj? +o/ò+sϏK j[.;O3+*23k{2rcB#sK[z"Z2s?Z2>jSjBN*s/RN~Nr/S/f6r*?oSNR~__sS^.{CC +sCj> +{O/Zo>nrrkk/bZ+"z{o/{sC&^ns//b/?'_3cn.:ۛo[kz>~bz{. +~J/[Z:"bKۣZ"nZ*ˋ[o3C"n^N2B##S2ZN{oòf/'O^_CۛZSO/O_[2b ++3s jK/o//oznRo3#N2kc/Oj.>/?/cꚾ/_3jn>nO?KC^2+C +nZ_S" +2k{K+ 32r+K[/S r.n3ss/*cs'NN2sO3KR^BOOCSZNRn2 +oOO[2~n{SC +3*~.rboss/[RZ + rBrJ3c/n&&Ks㏏:RrR.:cokfn;oS"*o +r ZBڛCj++22+#3Br++*jbkK{{CC:.2SK +"BCs?_.:[[ß/+NKo zzB.ۛۻ/b ;+j + ++RRzۃcco?:rjSO?3NKo'o>&>2cO?J.&s +&&ڋSc2N.;o+KRڂ3sb2//r{#J+* +oS*ZzNrk3C{JzrR++ksBN.bj C/{NZ//SK"nNb?+;B +*[;k.: +[s/3K +R+ +?#Zr2":ksB&?r~^>n3OgR&f/O?/o;>>_ +Rnr2/?ۻZ."{/[ 2rk*;sZz[:;rZ+krb+:+O¾R [3Cr.:ʺ2{?+KRJ#KrzZs>CSjK32z2ãC^j*kjk_;++[+ R2NzS3R.KK*/gO[+Ξ_oOf>.O7)G f>抟Gf{SO;JrN~sO2jRCoۢ&2J3J7'f+#O R*;? + sRSsoOZ&&n+3?Or3~>22sco>⚎>2#';[kR +zjnB[CO3nʿ;S2RrcBSG_K"^['jS3nRk'GON^N.Cn&R>ZSs#/"RbRc _{S:>r*.^.J;/'^Z +*__kr2{ۏ?o+3~jZkzڃC3Z+. +:Jsg3S + +nR'oKsZ...3""f&+7'F&&#Wg3.NzO'O'/s&r*crrΆkC_c3"NΣ''+>2rۋ?S +r+r;ϳ/2r2*?'?3b2rN[ßO^r.3kCnK+s[/*n.ڎ; +S[~~S#cS +{"K+{;Újz//C+j/?KNf.22G3n&v& +3'3r^ +?rrN.s sʞێ3/J +;"R;;[K3;JkBBkۛKj˲o_2:.B[s#Jڊ.ʂ"/2˲#jkssck2B~+/gJ>&>Ss/c^kKBSSsr2J;B/okBncc>^F.J37_26^7r.B?_On.>[c{{&2rsc珺:2RJ[ *{sBzs2*zcjJCN2{o3ˏ3"ObZ{JBº3"2rRS'C/RR^>''S^F"s/oZ& +k2_?*2rz+rrNcR^nz*gKK>~b3g#k +&Rrn+s/Og3#>n +Cs+JCc'K:c:΢:JzsC+BJ.;o/Rz 3["KjJ.jk"o o/Ro[?;kO'#2^N{'oJk&>?o +n&RsooBj&B:#Ͽ33"B[+ ;k:k2BC#co{JbrZJc3szrRZ:g#[R~r3{*ʢN.S[C.Nn2bS/oCrºRr*SOOsR.KK?o[r>oK:3s";;#^.b[Sso/2^FSggOZ_'OrΞ~#k*#Z~&#kC +2rrs/ZBr"3{/.BbZ +/;2r"r#o*3"[ZN.2{zz;rZ2SSC2.rZS_{ 2.Rۏ:ۋ+ Cj"*{rR3OS2.&~b23?__zΎk[S?s.nRs{cΎ3/KRRk'/j"Jf/?/[R~^R o?//ck.^ZZJ3 +2b c#˻ck2BJ⊃J;Z{:{Ko+JRʣS;OkbJR +/S2r2*SJR:; +s +nbۣ#+.kk#{:/o#S{2nbKSoO;"'>>枚/o? +bcs;jrz;ʋCkZk +rrS;R>*C?SO2B2^>JC;?;rNNs3so~n:"*ojz.ʻK +{j#[cúb"b2k#;sk +2/ +r"" {z[S[j:RRK[czbz/S{nbnRc/C/brrrb[??*nºZ+OCsojnbb"" ãKs +k"[zZK.{ K kjnRnSo +J.^NڻOS{R~^+ϏRBZ++cCˢr": ۳s3Cr>n3 n>z*oo3z+n.jʢZJ_SrnRzooon>~B#rRrc?ˢj3os3ZR2++OC3³>'ֳ&&?Nc Fk2" +*/. +_GgϿkO'#kC +nb+;.n&&2;sB.^&f*CzBŽ>.^^NR:/o#o'77ǟËJ3SSO'_C:nRS;*B&&FV^š;Ï__O3_7Wi)w'c&β2r2&ֶ(V(2Zn~R"RNRNb''_3sKʋ__ꚻ3G7'_'K" +RR#B.Rj3[.N2_ic+rFVh((Vh";+ʏwIIɹy ^^ʃ[[bffnr&v(h(f~Rϟ/{rF(hh+77'gr^^))w'???/Zo//ƖvJϷ燇/Zv((hhֆn+_k62ow)əYIw.f(^kokb +*zBȈ&r Ww~('G)WGo/:v(~J{#S3ssk2(Hhnjc/??*RβWIyIɉWrFVVVFVv6vv6_W鉉)W{&& _wǟ??&~B +[o/3# +^F((rggGsfֈ( )2nfVFN*Cc+*ss/J2;)ii)Rff66(h(fNΞF i'2&:/g)G_Ϗj6((6^R /cˊn(V^Nڏ?;;#cˎ"{?''o;~r3LJ'^>k?Gwww׷Rf6v(V&V(FN?G)Ii)goϟ?__3#N(hn #.6v>bG7gO>R{?''c>FZfG7WiK2B.&^FF^2Bv(ֶf2OWii)_b2KSggoKΖ(R:ʂB +2>F6>n:s_gǗ7?:N^R gG?SsFJz{SF66_w) W7+R3cZvfN^6V(F>RC_))7+z3_' +^(h(6&Nr +:J/_s.F&*3O7w/b.O/[ + B(&:kK[C/?n&N#o'giG/{KbnN^RN6h8H6[_{3'ggFvƞr" ++#/?rv6^:{k{kZz::Zr '{z>fv΢#sO?f&c3)wssãcK+"FFξH(vF~R2zSogwGS/'''σ^vV(>?zN>nj[C__w'{~N>RSc>&r"br /oJ>^.? i7g_/_o+^>fv(^W7g'cSǷ7JR^vV6^fF&*^^ +SwWS;[*㿃/__oFf&~Njos26nnۣg)g__OK.‹kVhh^R>O3O?_o'SRFF&&fn +oosJ..+{cs'wk{Kb/OB&N.Z [c;f>nJgLJG'b¢R&hH(hVֶ&R‹o?sGw?77g'>N[r2[CÃsw_ r# +++sSk^^^FF^bjZ>^f>N.#;W)gG7w))G+;&Fv(h((hh(Vvf2{{SsÏgwG~rJ⺲&ˣSskRoS ~^BJz "2r2R.S3:R2nZ. +?wGgg__'/{+J&Vhh֖F^ +*['g_Ƿg'wWwSb>2¾f~>:N2 +  +2:;Kꢲ"j''Skzr~ξ>rC/ssBf +N__w7_S;Zfvh(^>~ +b;o_7__wG7[#2BBN^&~:zrn^.&sKBzKCcCSss?/C*:r^fRc3&&~N^FF>"c3O'ggWW'S[C#cJn^fƶ6(2*#ʺKS_g7'">R>.^6&~>"Z_;:R:'_S3sj/S+ssss +R*j2R&&[k*N&o__g7gw7gskζfFvF&&Vh((Vv&FRB_?G?/S r"bRfB:R^>nr?s*sS3o3/#c[o[2Ξ>R~"z:CKf&~J#OSZBsO/#GLJg'3 ;ˋ +vV(V&>^&~b:OGw)GgS'3Rξ&Fv8Hhhho׉ɉW)))__OZ>&vVhH8ֆB_OO?O'ggw7gWiiW_7_'#B~fHHHV6(hhn +kJ2jSsO7WW) 7R.N>VvVhRÃ77'/{ +S >&(VF^^n>:?GG_?'g2o#;*r.Nn¾fVVVFz"__))gg_gO#b&6V(hV6V(6[[+O7WG'.&&֖(V֖nsOG'[))Woooo#3S[s#RBZBRnRFhvN.R~":BKS/_)i)WGww_z^6hhFN{>+ogG7GwWG'_GoJ^^rN2n>6&Cs?#ko 2&2'?3Oj{:JkN&: /ۊ^>RJ:*oC/OϺn>^>Ɩ("*so?_7)'o +o#ks6ff.r^^^j+s_?'k*k K22KC'_S>K/#^&^~~bj{gGw:n^^FFf斖N"r[oS_GgWw?__{/:>.Rbf^~2NncÏ +{+?3rn* ++ccOG_S[k[{NjZC;R2B>vr +KKO?gG_s+N.ƎRZ+.kzggJc/*.bf&Vf~N&^r3S/j#g*[ 3*#z'sO'*{ +J~>2j:RN2nRnv^~^R"B{3[Ǘ#R;CZN~&B" 3: +__'#;S +Nvbcj..s3O3Cg;n..^.S3sc#ko;;rsχϚr +ff +BZ>; O3g'K'"~~^~OK +k'ˣ[K;3SCsjz+F> +r~ +O/{scoo/3sJn2NZc*2R_S +nnS'r^f^&^RJ:zc'_ScSO.^BZnnrkrJ:/_kkK2J.~fG/ 3s;c3J^NffN.^2b3{¢s/gG'3sF6澞>*χoC˿JN&B kCbsgJG'χS~:BrB2"o/o_ +*s;CF/b^*3g[[oGGGjznB^^(6h(Vr*C/O/J./os+ON~'/Z/3o#[:Nb".R^"2ãO7s[:_O{^>fv&bZ2CK[SG'[c'gOFֶ^ƞ&F2*/_?_woOnjo +N_c*362Gc oZrfK& Z*fVN.&:'wc?'b?>"Bs.ڏ2?)7SR27g_Z'Jf6(&B"RoϿW_g{nSs{ZKj:>R~BO#r3㲋rfOK32~Jo_*g7?rN.fJ>2Ccb2C/s+>2?iw??2N>v(VFNN3SCS''S{2R.bC[R>^##BRo/o[S3Zrj ./NNG[S뎂 +R>&&bN^&^f>r>n*O_#R#))w7'wW_3*rBnNfF&>Ɔ[O_S*n +" ž~:3o>^š˻C* Nr^&&^_sSJS{.nf&6f>J"*>Z3_7'_#ˢBfv6f>~^~sS_oj +[/3oOkc.j;j;.>R^~^^o3/3Ƿg_r2 +Z22rn^V.+kc۟ WwgOoNR +j.^fFƞ&^ 3JcϟC2B+SS?#f okbKLJgCc>^>~~R^g.W)'S[O[ʢs'K&~:r&v^vKGoO/Cs*?'&6^+C26Fb+rNO)?O㢋^F^Rn/Zc?Zo_Ogۏ/^N+*_ 6(vwIiiW˚nJǟۋj88v6rOׇs2nN)IW[k^V(6. +ggw&^V(Vv?Ǘ/ڲzWWSZ{(Vr_7.n6vvhz II IIWGJb6/KOG7;>Nvh6v623'3hFf^RwGN(HH&'wIi?~#>+'7_wJ&C'S˾R(Ȉfroon:N"rZOW9Y9 S/v&fNN +2c&F8HF^^SSˢj7WLJw?s&Hfrj 7g_o +&kBKnVV>N3g_'KJKƶΎ +_gNv^[_i9Iii#"c~nFF+Nv(((::SZo +^6J[GwGz6VjCWw_36.Rr.ڂn&sJ/3{Rzn"[C石hȖ/Gii ɉG"z: +.^&~&f6HhHVV.GGg +B 7wGGg2(hrW73F&NBrb +"f^Gg'C&N.CjB/_?/.^&(VֶwɹIW))3[rzJnfRH(v>ڣ/c_/SbJOoljח7ۻvh膾2g'C{nζfNfNrZBf;7WGG'#R^&nr*s"#VƾwW )w'oCB.cSn>6HFF[OJZ3o/_i wǟ2^vh8HhKC'~{.o/3/oR^rG77G/c:~~{**:Z&6ֈh(^wwW)i'G[k +Jʊ>(hV(h +s?"N>rWG'7'/>֖fr'ϳz>okK +ÊzRbO/O'Kڎ>+O&((fsSGGWig';K??;&^V~vF&Szc3/ + .rG7ǟ)2&vV6.C_G?^/ڎ2˺* +KSr2NO#_[ +NR&nkZKnV23g'GG{ #3sK'bꃊ^f(vfB:BN+2zs/7Ww_?.J(F6SnK?os2+..nrn cr>";/g'/_; S[n.BB'/K>f(fsS_gggs;?c +nFff&^Z{j3NΎBkGwgg[n6^>(>BOc㎢N2/j +#c>Rr cS +*RC~*3'g?[;"JV(KgG'O_ o^n^^2*Zz^[rc77)wgSr&>v>+ +"nZÚ>ZckJ +nkZk?G_'OK*ʞ2b:+b;nn.RN(7G/_O?OOc +"R^^f.n^2nBb^N^ZRc_GWO'~r^6NRZ{Z+;s [Zs>;RK /+Ƿ#b낎KJ>^roo.^vfw/SKb_7+N.JN6NKfKrc~ffO;O3i'ǟ_7o>N^v +2&;gs»{Fc>^*c*s2'j'RZG)_O&rj[.vZVg[/o_wr.{.3fZ:2nR^V22r;zB)gw)W#3G_sKJf6 +J# +s#3b[J +n~^" /&ScnskGjK/kB&_ + oZvnFF.~O?o'_Jo'S_c'3[&~zr.Nj2^~rξR _W)7?_+".R>^&N&rJJj[{/j⢲[[SG_S j#²^*K/C*f62 +o?3Ogw7gSZsZ2&2rjR"..fV.2nb?7gO?rNFbZ2Bn&^R^NNogg_jro2^n'gǷ7s>hhhV6'S s_7O'W)w/_n; ~&jozr23S_3R&v..꺋~nn&g+v(&&&fF۞ۊiW'I W3+rF2&&^&Ow_~>f'?>H ַ I1yRIRv((x>V.NRIfFrvFf&.#nΆFghn~NWW2SK7 i'S3[S^2r6Fwλz 2Zr2×j;3r2R~;rG'sS):3/ioo:N.VȖxF;N?gWwi)_.2ƶ6jjcRK:[뷇R~^2cCoz_g "c"nK.VFKrR[_gWj^n>nz*S_oGGohfNOS7)___?WZ^^Άv^.B^^:K'g7'OsCr& ++[&&OK+_i^6vvSSjogW G^rNK>N3B*soBnڊ&^r jr/2KbJ7'o>B^(V&szff/r?b')isbjr26('SbG?7'w&Z.&Vh((~.J_o+/)'){NR>f>2~ c2f>kZG׃κ.F梆FonhbcgOW:F&^.frz>:'_BZ?wsS7W W֖FF.>F{SjK?f*&.JJCO?"#77'oGR^斈~6(O鹉)gzNn Ff^F&*/v*'{sggfƶ.o{zf"sj +'G_sjr6kn:26V./+wB3~Nof3KOO'~&^FfSs_'s7c +[f +R;ϻjVF2C'OgGr"nFZN/W/66Ɔ +2VZo__O_)wkr/.Z&~KR^>S cƆvV>^N^"'2_O/? W3c>vn&(Vf>f{[ #CnfF"or&"BCGC(vfZBrCw7_g))Wn.^#J+&~ + ۋORbk&*#J.:_ww_'/Zv6R^&ZJF3>>;'7)7?gƲ2f&?#;.OSo/Rz'2FzRfnoJFnC"+ggOWww7__.fN"N~.(Vr^J{_w7_s.KNf&^N .?o3o'nfzs*r2+{?3/W翿?Nn>R~jN~/+)'˛GRR^//g'W׃W놞VFVֲ&h6zj*G'7/ˊ.^~Wo{"OKNrN.SS۳7GG7J&F.&N/:3oOS/:2¿c^ kO3'3*n>&F(h& +;jR">Kc*ŸggW+z +Nr&fNBNj~&*cw'G^BO +R&z&{*6_:~(vRrF_O'g){S[2Rj"OkZ* "ZKRΎ3꿇^۷g/W7_)i?F&3j"v>F^Gg +g7 3csNf.~/;23/7{7 V +ff{"n&_?I7+^Rj+R2BRFf(>^3sC7FkO"+SZ;3_ RÊ6&>R~~6*C7? 3?G/3. +ns.+cBS//f("3&/wW ~V>&J(V'RSOWwb>.3'f6(ówC{ooff_32J~/^&;鷏)W{O_R>^^RvRKonN;Czos;.g.)nNh(n.VvB2C?ggwgsN6n&~^ RBn7O{ڞ+B.Z&V>^r3_ iI)iOJhHrjFR6?Gi!)V^F^f'WYWȆ(XHiG'KHoi96HXwWNY I 9{xhXig2'ׁiNH`xRWcn'yGSF (HVs wi^hfhVVƸ!s7 w_Y8x@fIWikV +i)sNHRV_'!)cG*v +#.zC9iWI {N8 kgi_ W6F6rVOa aWY뎛( vfK)R?C6XBCI#*+ ǶGWvrRZN7G+Fo! `>ciWwr&vbHff(ώ'yWg>8F`H^Wj_/!OIaw~7CȈֈ&HzkR2hg裗^#*ri'oVC F_VbXΊKGSy>68X6H(czC3w!_ZiHxX.hnVvZihF舶 繟 ϗ)7ib놸(bo?_wh{Z^S{I 'g!{_6jS8hv;V f~)SwgO^Xx`hs*&Yci)Ivo&k[Ɔ3IhV;緗_7wyg 8 HVRV__fxVhrkG'y9gGg?s(&hX(6_3')W)?_I(b.8v((6~69W97DzfK?~3s vrFxvy'/9y_ V(hg6i __^6 +~Wi)O7_JJ?3f(shsw)v_jFVF8:h?i9: W^bvs2V))KkCGg(68Hh?G i Y72F^(2nh[w^zf#.s&W/F iyI/fxR73>#gwOFXxf67RG[!Wɉ_B8&c^ǹ3n:V.(HCffoYy)WgRV(n&3~ikG(X( '7CcɹsϷ[zv&R[29Ws'S`~;ڶf wi'W.g^ƻ?^3&NFrx.V6"; I7G8VV6o ?Ǣ n(V&vǷ&_)ySWG2VN:hf ) N6F6V3z*#ooGn).:iG/?jO3nJv8HxXȾ&7oWi9G'KSKwGwKoRr6(^Rg)J?ZG3N&K(~N6FBCW +Wivƶ+(_[SSg'(HF^3gC&ir^>~xfvVNi!VB^"N~H*nR.Z#"~f#_g>ۉ)OW' .XVˎ +_C_w'S_'>XxV#.)_ SRGj&c^+rS3sw_22h(Fr.G)G>ZZ#)"n/:V֘~/3i)i/#Sov6VvhFc7) Ƀ&v8>f&? iK_f:׏"R{NJN6VJJiC) S2v^Vsn W~>bcV6Ȉ.OiI_7 y7'Cn^fFnhFfVfw)C2&hh.Z6ˣ''_"_BNwG> fRָ Hffn~IG9i?cS^&&FVhֈRnvFfRBowO+f&z.rjNB껃FNnh^[;/WzS;/vrvR:;yIWW.nFN興(/_iiW ;fNsJOs:":N .V(rj{*R&zgGJnJNJn26ws?Sgh6hF +z7) g7g^RJkJf6Z_KgwSJf6(F:N(f*.{'GחW/c*7/{'g??FHH>zN;W i?oO:F¶VR3SggiGFF(>VRHVR :oW'C?rʎ +_o k[#V^b(^B&(C2c&v"JRsRfOwɉ'^RV(hv6SwiYi'ﶖVV3.&o'iin VVv!'Zڎ_g'Ƙțo ^3gGg +h(88CǾkZF__WsK3I).JhC>rwGFxV^(`@o7'7o_)K(ɿO9o~GOz"&r_kX/!!W :"^n(8@@.i91Ioi#Hpxχrn/I>" xFgy)).) `VϹٙ'fNiY!)2I&`wiiaaOw ighr7&8x` !:#`p@HiI!y)9鷆0@"8Hviyi36ƈ`؈Iyi*^c{c 'Gفi y瞘0pZ 9iwy(HH_scGRf^h X8^_y))燋8rsg'WGcV @FZ'gj__7`fz™G/W&W/C> @ O!!G yIi/@(:~k7;ǣ& );_f(VR^GYG)WIHF׊'!)7)ww': p&o7GGGi)i&(OfbXSO/YW˷sf`h6 ?WIIֈJ:R'(` VJWw'.O37fxN'i))ISrO#&0(~!yi988(ga#糷'.&H`8F&G'(wG')'@`bgWW ɟjv6. +C&>wV ;)iIW 'sh@ xxFc9ǹ9[ Ȉ(~s#)x8h;igg{'(`8v׷G·~ `xh[iGIi ^ VvKnIyyζVnz_OzJ;z+`6WI9Ywy WjH``hGw79).&R?'wG V(F֎K>o+W{6Ɩlj鏗g'g `xwi!F6H8hJj.NowgNh.S''3_HhZ  >h(>{'W'))yc XXXH^&c/sy9i6V^6g'sB7&ȸFsw' 7 G H8X8h'*g?iىOֶsۚ2o)SVȶFvRrgGbB "^~NgWfH8(NWחw)YH6v^FV^6K׉ r>KsWG&֘V&7'[wɹFf(hRCi{66>{/陹7"N62jn:fvSC6SW7)_7F8jz+OI!hfƞ/Kf. >VFÏ+wB[/(vhn~ +hzO_WG_&hhv~.&ʹWng +wg;W)VȎ +Z;o))RhhhR_2nKi?F"~"ZN?#"FvW)W'VhVxXhZO? OZ_RRFH[2:g7gg^G&>>((n7nwW3vGW+Wi)ᄌ(VRfFNGcfϏ3_6R>K6ffiISǟ(N2VǷ.vv&J*Vz/{Z??*RN^C Obz^ڶV(~))&[?9I)V(+>2vCgjgWg⺚'[JF^C/G)g"(N+꿟*&hNgK.(^/Og(F2+vWj'o'OsrI7ƶ*Jvc(: 3g{{BSg2#3燻&2+ &n::gDz֎/S&(:s)_G>n'77g.;ZK(h(^R7W7/7o:^*NoKbž +nFCCb#skNv6nSS?RZVH~/>/*iwoJ֖.w)N8B*b_(S_I_"~#f~f&.6~s'w Fs3g_"f^o7.iSo>v(v>K_VH3)*G7f_C.^(H^R*G[.f6VCc^Vf)K[?HFs7׃&*.2FN^ڷ)>bKN^v&+3bwr..?V濺bKW)jv'V&kgO7GW2r6FR(~_ 6~"WgNf:JV62 +GSgǿ+6:#N_ II7bn˗7)7 +b/(&*)rj6gg:'[;VNOV(??BCWi_?G)>w7(RYwf6^V'8ƾc~7OWGwzg(3h' 2fy6f"6Nֈni3.k F6F8v27/7)!6F'g7;J3v bVSGhkSǾ8NK.o>I'o(GG&WfG( xr8h6I{h!;GWys:n_'^v^V8N^GSc_oY_'jai +sFNh^x*Gێy#nBGƖ_2r/RZG_VFgVW(fxXFIGg 9woRvr )WyHf_s(ljrz63)72):7 .~v7 (8hǎvz;ֿ)'/oG7) ob' 6JVw67~^O/iLJ* /2'gkoONǟ6h.fVvo):g)/^'s׿&3&wN>?9S&8_6f+6hG7'g_WY GG'9;fNgHSFJF(g?NF~GG&c6›#nR6~26V:W.GzN*'g?fy._b(66>o[cx*#>'gkȞkr:&v_33)NggOG'rVgy)f8Vf>X^_s?J>I2iosR?'h7ONZ(z)3R/36v{vVFN8./_Z~/3W"F^ח#۷R(7>jg;S3C8('oON/'b_rvini/nKfRWW>)72sRf^X's"ϷgG_r_8#&+'/~&Vr'o_7I7F~n_6r Rr*ڇ׆~G&n#)"VvGRƎ^3nVG/Bz>ǗB>[z"F{z.&7ivFg9W'VBHN6f 2"I'wW'_Vh_.&r._wF(7oZ232vRV+G#J6F8gcr_>n){ wgW j'8^)gOko/&n?o†)h#fng²&o'' +2s#))gn)Ow[X>憎f7 ^7Ǘ+(N#B+ss~fof3.[K惉6o)gR2~^g8&bfvniWFb{w{#:)gs +ojfw֋rBBN"rb F7_^n'?3/N&NSiW))WG''{Ɔ6VF6?R +W)_׃ֺ[*Off_'*^F:JSc{6/.7c*6ο&>SZ*#cf3G*/^r's^FRcO33g^.2^ +o&FnZ?[Fۣf&Gן^^offgw/#W Gwꆆ'hh("hF +cs_''iRs7kB:O^oWb +">r~s/_k{NVcSfz2B"6br;Z"^nJg'OkϷg +fR_(:˺jgo^Wsj#Cs(FBcJn&VGw{G)w')C~R/hFVf.fS "Swgf?6:3S*(G.jk2ZCg{o??[' ƎS +vۇ22.(#'/~.gos^ BB{'.CWφf{B.;nbg){jCs +^#f;GZ_i_gG.b^v&&(J+fΚ7o))orG7㎚orǷV(V>?K{oOB6 +gg#Rr +'SzFfN:斎S#'f/+6{Gz"/O&O7WRfk3h6~7nGZW)^H^&Vvζk.F o:+)'i&''nRfc8FN:n "'ǷO.>"f"7Sb2&s/# N_/37*_^6^f+2[w*Nv^~R6Ns+K KW7GWf;^F6Fs^'_kR_'g: 3_WfnKr;3^R3Rsg KZ3&F6h&(6VvfgcK7sKW?{rk2.&kʆoW&/s['?S^rnf&.2 sV(F2Rg3gigo_/z/wzwc"ZvV^vOOJ""+Wfꎖ +7{V(*/>ZV&wCsS_c +7g7 w 9w+rvr/&8 HHf&(CbOcWbiף b*Jn.9 Z2?S_FJgR^/o&&N&B/((R_W)3?놾oCN^O'g:S_ +Ƿ&SZ.~F3vR'C^F66zV+*#6w iW)?f^r>vHhfF_LJ7'i'g K>N".N6hv~f?NOr_# 3S"VKj?#n_' Ikn?':.f.on +o;^(Sb6&"f[&*h2.:Wgbroo{iwiIy)OWjHhxx(&Fg)g)o/gwoO3/o+?Bj+jgc^F{+c˂)OKVKO.zf&gs6j2v&&bfn/"k[;//r/CJGwG^hVFvz.b>[O7)9I797_Bk:{F(&ֈh(6((o +o*_W+7[+_6nbkK7n_zf2;sR'2&RBJ#.^OKGǟb;{bBN6(&3 fΊ/wÿgSf>fbjRF.&fnˇ77WiiWG.n26^&H(j#3'jO_g77 +ׇb2:#f2f&>[_ kS2jK/Gã'2nN2kcfnf^//c[; >S&VFOoI#[Kj~H&Fb [iy 9iobRǢF66V z&"*^:ccs?_2)'2'3'¾Fۗ>Z2bk:{["o鿣3Z: +Z2?Cs'[ ^vF^nNZ6';?o~_s~rgo׎Nn&F(VV>&&/{3 N)鉷ǷwWO#2Wo&(HXRr ?LJWgSWIjCKZ^(kobF&^.jږ(G{K~ƾ3#'ZR_ i'7g3 B'go.">rHgo?*Fn*K.>C'Sks;gW[V^z[vF'f&(&{ ^_Wg) W)7_OrNhhXvk;{k)_Jlj;'ZbƾkCsNn>f^R_΢RJ⚿22sGWgS˺n{(czz:*o{o#b[r^o"~S3sgGǗS2wCNFr&Fff>ⶖFo{gWiIIGy ?R~h`b~N⟇S;2J_w {7_OGwNšC_''.(^Svv6 + +fR'jN#2Gggg&'r;_7szNw +V(fZ ~o2>z~z;G.S~j_[+_snBS{ +{2 +rRn(6Ffvrn>')W)))GwO3s#^(h֖~*/'>r*'c+7I{꾚gz+^>"2NfFv[?G'Gw:/s2>n{ooVڎFZkjjO go[ +RbO{gG/:ʲ;kR&n6vv(F&kjnSw))iiחGWGS/SRfVHhF~f+r22ێciWwws?3R:(f[[_??oo3{";nk[*kzr3/ngCgofFSoc#Oo.foⲎ^Ǝ+/7o?o3^n+{N(^nBr2N7gG'[ sR6fFf~F^^~f2.37)_ +k2~V(h6΋s?7sK'?*{"_sϟwG3OOc+>£VhvN +sB* +[2^>/B^/OOGG^>:6BNΞfv>r +g"'WZGN*R~6hVVx6F&^roO i_gڎVJ(VZ_/)37g_"#J*gšgo'sb"V^–Fc W/s/kS&fs3w_^VNFnc"n˞~^rnSSSg/^N:;&(vV((HhrB7 I I W)IW?{[3 :*R&v8(6z{^&>hF"[S3'?G3'&b23?7*j9_2bvV>B *''+[FFFf>jj+s *zN^ff{CO_)W)i Iyywr&V(HhhVh(hh*>R3;giw/c_RkScrf_W)~6_)'+/;>2R>f6F^b興~3//y93&FS;fh>f&jO.cW2&):Ws.^.R~.R?i72Ç;H8 ((V2ۇ*rc Iy )'_F&^F^hV"fBnB_w?jJSGsCR:C;'i'_'Wi)R^n&Z6h(n.kN&'3SF~~r3GC'WO{n&fNfƈ[#2ZS9Y!9)G[_/h6vx6R^*2.g7ۣ ii?s.^>>^v;_{f&Ns/_7sr2b&sfo')F/7C>ʂ^~>/j2??WW +F*'_'~{r^r&FfNnff.:&RkW )#G__†VȖ&~ {Nz[((s#_jϻs?)G)W_"vs +N6^Bjw)3g?6hfFfNR;?7O^"J+ׇ6&3O[ZK2^F&FZ_Sj^O:;WOO77(R6z{: Vhڟ_y ??Gs{(63^6>H[__SnwiW)*CN&FrrΆVG'>?cOoC_of"2{S_ +B^^z"ڎZ>n"Jk~&_.k"R_g_)ןC#gΆ6nnfF&f.n&ȸ:oI 'cWW'*ۗ'znVXHfffNOWW'i _oSjN"r:sRs&Z_&k(((cׇ7^bZg[/Ss/v.B2^&f>fr)i'_s Sg{s3.^2C_/ˋ.6v?'n&7g'7njK_GςK?SoCSVȖvbGoLJǛW)w_cOskJV^jcwRBvN[66/ +oG?S_WwgJr GK"OS;oRv^n^vboɉ)wn^??OZ^>_/Nf2rj(hhvjS?z +_gI)GG'sc?K(FFF6FnNs's_G*ÿ珢f~NzgSSk>Rϛ&F(&n;#KGCF~k3gORK*_SoϟkCBnN&N.FVbsR>ns 7r_nswG?/o/?g r&HN.W +.7g3#3'gf>ƖF.*>f(V?jƢ_)iWG'Gk ZgCf.^N~6(6bS/2w_.+i?k3Ro^C:>^(~n^&^(7Gs;N.3n^bKbg37_?gfvhfR(vO/7??O_w/^ +{Fv(fvFf:/S7?S{J^o ʞf&/3nbR2b2;JK;2ミsOSCk*_7RZ˻*knb.n^&zO'_O7b"~nR'g'ss.vFF^/g'S;7?_//)wfzھVF&..r{Owg3~#S^^ +>Nr{^f 2&&C'og7ׇo/iG*zz.Z#f^nZ*FFR nf&c"Z+FR/'WiK#sۚ^v(r;sN/#)WG F6N^&FVff;7)c?b_.R__~c/jZSCfZ2rr&ZF>#:.?s?OS 3'_3:"jz.&S ^n3Nz?O~.z_o?ڂ#Kno~(h~2z*RC//w?)ig7'?K"nvf(6Fh(Vh~GǗw7S{[og'Oc{*{~nfff^F.+OCOSSۏ_gW{CJK>:j 3;^F^r&_:r^>痷)'g7OOwwvf6Fƶv{kN^z{+_gOχw?/ +F.V(VV&Sg 7sOJs_+Z:Rk&&~j.> +Og7oJg?S__gB&cϋBR+~j"BsOcOb&F澾*{sW s''Oo#N.nvff(R?ZO)7g7WWɷc#SO~V(^8HvK'7/׉wwiWg:^ O涢Z"cSg_*;ۖhZ&_ +o7)I)Gb&F(6^//GgOi7Sg.kzV`xs/_fnv~2Zw 7/_K27 vfV6 /':gi Ns79 iW(V)rk@p 0` x!IsG!6B(WFi 'GJ6F(i>ۋ'(^.zi;.SFi.^?_W_bi2bHf``( +&JNf&J'7IY)I"FhHSǙ)&KCjI#&8xVh(ǗWW'I_w"VhSN~R_9)[3"JrNV&oJ*nGFVf +f/_Ϸn?Igi/^'#SfLJR(K^R&3'o  {k^hVƈv?).&'7_?gW8( X VOgw")YY7W +/n~[gf΢;f(B3/{?GOo3:>>"i_GG'gˇgVhHhv*nf+'&VN.&_c HhֶzK_ncs_3*{jǗOii_#fx`v&*gyyi9Ⳃjvf&NGOIonHh8.~:žB_R.H6.cciy _n(vxh6^>NWwrRf(6"_ .Wi o_{FVhvOo~riO3_{'7) gWW7_zFXV+F3 iO33NSRGw&+/'w)v(f:n_'G7ڲRv2#ף+'c 7S* +fF(6v+&;3r&j&~/SG? !Ǘ26VH6VVF~:~ +onOOz'S7Gi_Rfk>vh(8^)÷SBbRC^ +3 +oO+"n(h+3'; Co>hN^G/77w7sR;6v82Ǝ/ OOs:(fn:__9ɹkxHX8h~֖&/_oZoSKGg7g)WÚ^(8ؘV^LJLJ7n2./+[CS#cosJR&+Zf+'o K#n^r^ֆ"NB/S[WɉI'GCw+fF(v62kgg?s?N((ƈhCˣ_)ii'&^vH螖.r~kO'r*r&>o7'G7+28xXx6V&2s7)))w 7s"悻.C.r#_Gfn2fFj#nSog'jZƢ2{>+_g/32JƸvhfrnv.oG?+"F&(N?''o))W[>(VFF~^Rv2Ss*^~Ɩ^'GIIyy W)w/fHHhxRg7)χ2Ξ. [*__go''oFR>Nr2b_o +NN>[ڣ[Gwsj&fRnnf;Ǐc;n>?J;/7)wGV& +;F²?'3&>fv(^N>/_ۏ׷9w) HHx8h8F;__) 7ig&ZNg'SC')g3zFv(^F&ʟwKs/J{JڏoC'g?'s׷GGRN(/[jR;>&2z:ǷGi?o ڲ;>2.^^FVV(NsÏ7W鉉)iGr(FH(r3?/*2^"K3/GswW)72f(V^N:37so/sJ~&.+rK?g_7'nB^V(VFNSۏS{z^RNr''gOS#RbzNRFcfb&FΞ{sח c΋Zv((.3?r&N{'GW))#;/Rf>(hvF&zoo'j +fn~+~[iw)^(h;k:R f.R k_i'חR[B>.f2^ffR>fkS;RZc7 )W'G珚n&^.v["΂^f^Bs3K'G)j.66.323o'O>F^f#)gWGr.f&fFz3_;'_cs6踞".>G g{&/giG)ffhhnsB.JNh&*v//G779yG_shxo~F&F>{?7'')wgGG3^vf6(>^3Jk^Z__N3S2.(((63WY9y )?:;F&cJ/j)rO_C66VHȸvNN wyJs'"vJ')BV興Noi)[ )g_i_ 6ƖhF/S2V#ss')GR^NK{SR+wwC~F2o.26r'S7g_iWhvB^Ro7'*_ .KffRfv~['o׉K2FJ +ro:^OjN"[..c*>^xhV6~K' IY) W￿ n6Vx&rf_^&N*ڇI&B{Zj.OO/FnΆnS_OfN&63RgKsG7CKK& +&oWGNF&r/ +:zzS?cG73N~>.GW.k&Fvhλs II'_ꢆ.VƢ> &>:2KΎg _^f^³"?''S>^^cÎNK˾.jWgk'?n6 nϟ)CfK_N&~z gf>^v3'OSKS7G_J3_*2k +'Co3/ϻ6vV(6֘H(Vf)w i)igN6&Kk.{6f.frJ:>?o)wC/2vֆc[JgڿKsvF^{&׷2^;k?nzzS2B/znj'B6֎^ۊjC7?'[[_z_"'SzsSjrnb&VHx֖KgW)7)ɷO'oCF>"2rg[f&B&v~&(Nk._W'cso{?nV/W' +nz&ʏf*~&Ïw'VfSg'jښN>F>~Nr+''GOg/s2ckʢfVf+Ƹ(R"G)IG)os㿛+Ǻs^N^Ff&~v.s)7/K2""v&CrR[_sGώvror";.Kﳷ?bJ2&&{ +[OLJgCZ&hR^fΚ/.gWK:boS'GC +^vFf>(&F +[{j3wi'cj o'r{&vnv2fZ/3/o_'i.Nv^3_ +JCOc2rˋF~o/#*'#f> _;G[/#CS[V(F6N.BSk;rc' ''S'o"gZ.>v&NC/[{_LJ Ww;놂{CBvfF2^h(R:B3/g/׊΋KkKZ[n^2'g'_^^>SNr:Ros۟:bb_/o?7sŸsZ"bfƖNZnSs_bJ2g7'/'."r((H6bc *OwGׇgWO?'~ C2R&‚^fff~Ʋ{Kggc?z. cBb33'r^ƾR#s.;;³rs/BNksz?oz/7?'O?nof(F^N+n:z#;owwiw3 ^^֖(f.:>__gWB:J_:SoO#BkJ&fZR&zzFfn&BZ ?''gcb^3{z;"SZOzFRF[3GS3.K+"gϿ_? ^F2Zcr*zOrr/o?gGOgWwGJBN(R*/JSgg g S/+_&fR6Fr22J^R3Co7_?v~rO{:_ +>#ZZN^2>rsj/&~C3jBb&JOG?7ǚbۚb~6&2Z.v[+>~O)i?)7wo +z#[&vvȈ(h^RC7OŠ/_S?ǿ_'ORbB(F枂Zko_/;?oRKsBoڞScSn"sZz?CZ"zKSc>RnkccG?'W/sZbB枾z.2j JJrj>r#_Gg''g[&FffvF^S+'_'/[7WG?~>&(VھnKSg'k *>&NbO[Og3 +kZK?J:&F~Ss [Kn> +#G_Ϸ'+oZ? C*krRcBno/7g)?z&K#v((n[~^v7ƛ_++)kj?gvk?#(JCGNgcK2fVn/FOBiR*"&Rf)iR'fg:jiW†f2N6_jO;F'WN[{'^o>Gן +g_G{&>f/b(f> /_r)Gr~3S'N>zSWN7_r^vV~KFbig>rfV'r+g/vS&WgwnRg(.G&ZS&JwZ.soS^6 +O'i*Ǝs^(f2cw&O:3Kv2h6B3w6>v^#gWorG:Zg~(_ˏGig3fF{2i^Z &f:.Ns"K>&o.2^.N6j_b&F.BG7"'wb_ +*7(^Hsr 2OVN*^.3"^no_R^f3b6'RN_ +C'B?'bfnwk~^hO//))'R_vF>Rk7WO&{Z:#*O&f{w/N_wRCFoo +&c_Rχ*;nCGHg'*.W'g&Os&g&rnzo*k~'":r_/N7W/^&'_Kvg[7SRw^cNGWN'^J&F3fo{f&J*rvf)3g3fi#ƶVs_k/>s7FV(R;'RI[+~&*n6(sZ_N澞rcn#Oڞs^^JϢc)7CsB^r_f_CNfÇJowr.Rg;^b?C'?^sgf2rsg33s>:"vo&^"Z'jV[ ^?Cnv2F^:rrGJ3>Fš('.OiJ>S'r.OwGNw_JJgsk_+K{>^f&~73;g'{NJ>2onb?o+Rr3 2Gi k?">gJf/jO+.Og(S>.kf~^^G_;nC73_ +fz62Rrr׷k+'osnzs+F+2g'3N/g +S+n^f(6O"'//7/.G("_Scf">FCjK㲞g&ǟc*;CZbs;Or'G:ƎcRz"B f~kZ'o3[S&/G +S_{»&v&&Rn.Kg;7w'?+3vFF>3gˆ&C~ڻ &2Ɔ +3G'sOozK^*3/Cs.f_[kNR2F?gwc+sB& +/&{;+Kksc*~*gr^rKz2ξF(n_oc3?+ +~?_?7'/ϞF.&.~.6_kSwS3ks'vfc/'R"'36Nn^R"V6LJ+SN#"r+owg^#7&j2Jf^(V>_'?C?>6?JnsKj.NzK*Jj2fBh^CۿkgR{'_c"_&^2:>.r">(?_//O^?ozO>^S'FBRrbRNj(K?'_OO_/O7Z/K:/Oǂ&ۇSr&FVnkgOs76~j:&fZK3cjK))SnC_.*j&.rV8V?7w:3KJ&~zzF(v/ {;ogf:#J +S#'׳&&ˏNb2j>/rFڏcs__S[kSS[r>R#'+sZr2f2(^''s/CsON.ZʋK[gi) +n +r&F^nhF[s__wc~s3&Ff^>23so/+B{2B/c +:3'7Gr+ kRBwsf&#:B/Nv;O'[f6j/s7_2*B>^k6?O{?*[ fv>.:N/? )Zc/ϳzn(&2F&~n"_gGRڋZN.krS_kCb~JOr 3"rksg." +Ξk.zn{Cڋr_['B&^*ʣkoOSNn2ƞ*[ +OkJ"^j+gworS2{s(n&3K7bOii+zgVn.;O.">^^g//+fN3R^+z6rO[r+[k 'Rn~rN>++b3[N'j&N +(H NXHȀ?))9AA񑑭qq1Y wWii6vg''GwLJIg[^v8 @00 Ľ,จ(HvNF_ A-Q--Q-q M͍mA9G^2;) 7'/3"ƶBgO'J.N(h(6f2*((6Vn7_.nbVfR I'#fr_7_G.RF(Vb)iwgzfN>vƖHH88&g) 7wG_o7iIis/:8(hhF^[;F>JgOg_c"nJr +I'grv(vf>2Wi/ok~F68H(f/__WIwo _Ggg?K.(8F>W9GGG_zO?2v8hv.{#'WGC + ?_iG*nf./#R&ֈ(v&b_w3_wc ^.77Ii)i7C;?_s/hHX xVhn[ 7_C ΋w)Wrvn^f+S_Grf.Nn_'7+B(v'?__Ɩ(6^rgGO#Z~v.GwGWI szz?OSۿ_kVH `hrz;77_ꚿGg?WwV&R2# w"~fj.2HVvF3kjƶ&Ξ^'wG_7Wg*Z:jW7Wi *J/2Rh88؀HhFB*g7G3i)i))׷sFf&NN~2CV(V>*ۣ3'go6^^‚Rn_/CRnN_g'f6(rwwi [ڿO/OKƖ xȶ_G) wGW'_?S_'.6&&^ʿwkffvv&>2+Gg?/BZc?G))*~.nO;/o_N>&F3rjsO_'sss˺Bx8hH(F&JW7Gg3/g?(v:gbŠ +r[s3ǗGK"Ko3o_wgÎ&F&VVrΎsg.&nڋ3ϷiW7?ks77)g*b2xHHxHVF& +{OG'G''O7f~f*fNKǗK.+g2>FRK2?gGg7W&fNR{ofrƆ&ƞ_o*K?)W_wgOOj+FHh8hB3/_7w7z~BrjΎ:Ϗ +2jR+ڏ?SrK_*2f^f&>zS/ jnbF*N#W:[CÏWWw77?["x8h沊 __gWOSSS z^ogoB2BR&N+>&c/3f.j{*Sgz+"B 3n O..*Oח7'K3cnHHHHVV62s/OO;cחO'g_j:nںj'?2.f2b*&N{BrrSj +j/sS'S:cnNrjº +?g'B.#[zow)wgFh((V֖h>.^ 燇)wǷ7_/sK¾fFfRRRcb K:_S{s.Rn +s3S'?[">cj: +&^vNnJ^. +N~B'WחGG#~NFVh(n6v>BR*/_iwg?;{J"ʣrN^b[Z?Gg?S'#:Zb+sSf3?Or;_crΞFb~&>^^2^*3sG)W W_2Ffb~6F&hhhhr_o{Gg7' k:B{ +*rbK/+O7wg_rb*:2rZ;Z^f "*{S;jn^Nn⎺2SB#'#Z'Ǘ)iWWw'7_J>vB(h8(N6ƆBC_gwi7'LJcsLJrj +>&f3^ڃo nbj"gKr~o +KcOo S" +SgbN2fZ.&RG)Wir^^vv&GO__GW?[3)G?RN^6fjNnj??' "NJ_FFf~+O/N&NR +Sj"b 3?zj/.~&CJ?_wW):֖bb^8Ȗ"*~v()wW9IW_Cκ?Z.f~~zF(/3g:S3i'R""bKo~n&>k2 +RbCϏڊ^rCcK +&i)NjfBo[ro +f(('s/j +"f+gn^FFFKjscO?#? iWWGos'3CZ.*{:Ɔ&f+^~rJr&f^*緟3^:c/Zznz+_gGsRCK*Sr>&rJ +6NrΞfn&"7WOˏ+Zzc&6^F[*{w72sھ~b(hf^K'&NS"{{KO2ΎZ7#*Co bk{rNR_痗f6R;CKSvV(hh^"+2.>{okZ'/?gK. +ÊbjóoJ/wJB~㳻6FF"#33ZZc/ &VgBzkꚃ7))#.CJ6v6J^~J*'+?s7wjrF{'g.R^: +kS:j^J:NR.>zg.C.Rs'g_CS/Fs?NV(2KJ. S׷OS??wSjr +fhbB>^^~Z?GǗ;oC3?s*R^FB +>&:o/{KN+s [gK."bÇ7o66/2..>>Hhvfr2C+GwWWi3>;Wg~VVBZ+J2 +J/7OO3G?'3fVFF S'g3Ko/ںowO^fR +: +?GSrKK^ ;kVRSO;~^~2jk+wJ3hh&.Z2RFhhv(((ֆN.O痉O;So??oC+n; >^^Sjoo?s +_{Fr?'?sʎhhK?_b.fV3Sj۲#Ǘ)wGWii'j&&FF~f((V(6FbfFfvV&7WWI)WR~bzOoS/J2 ng^6VB6& WSJ&B2'7 +N⏏#'k_{v(FNZ#GWW[;۳7)_gJ"Ȉ^;3'&VV((f(>"/ ׏_''W#;oZN>R+f>b2>[/C*s~.G_gg +VvJ_gϟ[V(>;F"/7iWWIWgׇ':O[Fv~ξN66Fo7Gi i{._Z_#r&fnK.r>vv>֎{cwwgwggw/Z# kz3O2ff6V':os9IIWo'snn&Nor^Fhֶn&{_GGg3''jsz~~~:*{{J2;n SZbξn׉7zVv*Zv&v^r/ 3BNRۻoggG)鷇oggR^fƆ^vHhNSg)i)wzK_sr&.s'{F^ʻƒgwWWWWfN.b6^>>HHVv#b?_o"/GW _?skoO{/3 +vhHHȘ.ZOw I_GS+3J*Ko"&fڃ7'S{jrFֆnGg__S+FFΏ_w_;2R.&N.R.憆c7_o_GW/S˻'{R~>R""ZR.6Hx8>Ogwwgg?[J^fFN{s#Ɔ&"{3K+OgW{^Nn. + CKf66&&~"3FGy)Zsr7{ff(ֶ־n~FF62rRϏ׷gg/__O'"f֖&fr:.R>N&VfRSOgǟ7_Ozf2{[[ &fVHR/Λ['w_ Ww"3CnZcrfV(8JC'_"2+/##zr?3^3?O7?_/˞(6N&jSOOښJiiI_S;3CRƖBzvh(rog.k?WǷwSOwo+(h(FNNF>+sn^vh(GWLJO2~+_:"sBvV6R6֖f2[['bfs?3G) a!YW~F&>B>6( 6J2g7G)9)i7KGwǷw)/ÇR&~Rfhh>.[.fhR yrN"2H'yYIrHN~)7'.6(h&+>Rw)y?bZn'zCf(fVVc9فYWorf(2?'b(VVx~I(v./O'&9iO&sx7_nh fFf:WyIg[^BY!Y97*vr/3r~˗i/ؘHhx X( hZ'3Z_II_ +(^&ֶGIiGwis.)7>HFVhXxH'i9G_6ֆ6F&V·ii3N{S~^Z'! 2zBK_c?Xhƃ?g"¾K33w Yg[:Bh6^i'3*r&gw:NvVHX>)w?ʏoZ#27o)g;2>oW)GSK>&>.3 +f8(.)W_rf6c)W)iIi/J&f>& +2JC""N>{G+r(>?)'sbF>S_#s3&VVfNˏ_{NFN*Co*:ƾ;gG_7Gڞ^(RroGvvv/S;g3K&ff_oχ/zFV[3ʞFS"BςWZc;??+G+6Fˊ3J_r&&V8Ȏ_W) )O_+:h({O.ob2RRv;Oo_gOrB'gwG3~^3ogohfbJWOs&">V/GGW_:/b2n2"Ƿ+c뺲Ͽ+?_2~B^vh~SGCO_CwWj^n㋏2Kjs6V3G)g_G2oj v&&R^ V.OSc_2N(&7o?g_gR+o[RJnffBbS2Sn~fzs"N?g?g+F^f6/jgg+&"s{3g'j6(Hw_G^&&RBj㷇oKƒO.R; /j_7os36&:*S꾎Z:6b2wlj:F(((F^^ngskj2r.3.RZg_o:{/o:.2.Fƶf2J/iWsn.R ljifBS3_ןkFkg' +*z>vfC'WGR^^F')gg[KZ +O_VVBۋN/SW;kf(Ͽ/grֶVkc{WGOV~ZRv37WN#?/O{ +kw_[hc_Z[I99_b(s3fKJ~Fvz?GF )_#^O/_"z W(^^ +c^SIg^8V^jgGW9ׇ~R'3_/R2zc~fNr_w'2Os/zJJRKw)sK{Z^~f*[WO.(^nn{w7#"'so'*Þ6No;_OG__.*rJF6v +7#[22jz+C?g__[&NN~&~gg?F^&?'wgO[bfrz'?3'3 +*R>zFr>rr*'wg_'n_G'g>6HSG_gzK.^:>*_;z_ +cjn;s7'gogZnr&J'j_&~~_*ÏoG +>.+f~˟W_BjFZzog/..fJZS__o'{n.ƈfN3~/:惲N:S/ _B&&z_oO +&RO+oVH(Bg'J.z.# +#ZB^zj:n/*Cjk2ãB.+3Co'SN";óN^^;kg_G'_3 +z^2JS{rjz&?_c/ K#ScB ~s7o:~jf*.[k;/Jbk>>^OW_jCs.6^)g'Z^Jv(z+;~sʳ +)7{c+"H^^?^/g㈋ [ Gƞn)rg!H8>O#ji(G>V){hk sIrh?:H9#)2'RH~Vv_Is)_vv_~h^OOvF(ǗW(#h)^Wƞgsi9^HW׾V{&YhhWiVˊ(y(zGHHhh!)Gw8zaRvG'gI).gW68+)68Ƹ:)F6 +x)f6& +f9~)9VVRI){~f(n +FkIFƉy>VxWf釺Hi^Iy2"O9svigg!a)ns6 _W(WyS@n.F)8h#ȷ9gj(NWHXGO: iaGꈈ_&'F)3f:gH22 .6hȈIWVv{2ia':KIBY?+9V8>.((Wh/(H&''S.!ײn i7C)3N/)r(J_v6FhVhhI>^W/VH*!ab!.si)Zy(` 8`H_)"(_6I !WFgf{jFr_98h/sh(w+WzXCSF'IϷzia9&)6Sj{H)vVgNi?'N)φ(c7V'>v)Z/*z97Gɗ _Y^WJ6G3O>'/rs+ !^6Wi&zc'&8>!VGR7H)hc&&oSVVrchhn +wFv'&Kg#6b׆v!&{iעYN_SFfƒV xc&փvN׹f֗)SwʲˏwG6^GH~Hƾ/wHoY32RN/79R(7!)nV^&?O6wh{kv 鎆GFziR y;&)^Oh)VR&Sowr?W&/v_ R'cw7)^s?'Ik`BOh؈V:oxybIG + +cϷ()3I~{WhXi[hffo +)ONjw(S(9iK_)7^Z kCV7+7{Ț&_oZn i"*_'!jV)*h`'׳Z?3{V.yrw 7JN8Hw +g)[o&V _(7BNC__>ٷ/fO7SH{7&{iVhoB(~o3sjv7V)cFF_wgfGv⃲(*((vi )B6NW2?2#R{F'iR֎b'N&G NV>'k_O~9Cj[_FH6OiVOƚZ[62)9&>ß3Kcg #+3_ghIgRJgifZcKHHh&nkiֶ9^fs3B舣ׇB')6)H+ow7s(^ +B*;B3h) R.NgG)Nv*G'_wiZrw׾V^+*h2 y_^?wwָ(o7N(F_gSV:r2>n7Nwb_'oofhGVhs/6Wi2&vN˿_)~Ο):gS:87WR)_뿏~29 hFS*VnG~CcswSvvgV7GSO~j(hRss+b&Wx8#ljG__(N9Fjsz'.)(VN_cWֆ3hnBG'IY7(~3^.8_VF W_F(79֖z'#Hnnz2o2g_V)Ɩ^NwW?'VK )^>3{6H چf?N''Hɹg2R_2g_WfgsW?&nbs.˳(Fii?.3C'3r8szH+o?vF:OHi.N#Skr)>RsiOs&Zɗ[Kk ?>F莉HW&I)&wo{H6)"r(&2#vw?kC~^:_)WjR(FK?#>73_(cHS'dz+Fr(Og3V6 +WZ2o_~FVV{{{?V6Ng'#OOrkƈ'>F._džσzNj7fh( +)2#3{ rg6+c+kO+^iN&3'W6j)S>*cfw^Ff^Gi_ZFR;2no +" _wVhgz+Cv)i/9G~HboF HyC8VJ!6F'. (⃋i +S8o +^2?~_(yI>g'n@y~((HS[Rf֗bniI(K~8Wh(7鶞@(o Io_[V".  !wW8&^ IOW.(N)x6y6^98H'ai7(>giW9耀(('aw>)ww3YG^;rg7iȾn vrF_`Rj;f _&{VSi7^n +[GaI)i.VO>ovf~>KW9_skf&(Vv&ָ'wia!v2'? Ww)xHHh^c^3(2 FGw'iSֿsg:)vHs#I K·8fHjbnh&gIIg3x(/^f)I(*h@ KʉN+J)29;FvȞf)XGO&6x ^v(fW.66^Wn(Nr'戇(h +R_fs)G'KC{ٷ )''gꈾi &^R(`7ys'HRR3_6fc^+كIW^c>)c)!) Nj6xx/C.oVȸ)C WzgF fbs&yr&_*W2IN[SOٹgW"`R c)ΉׇIW 8b'zBfo'S;i*6[ƶ{O){gGziIns¶S8RvzFW )IsRNhX rIi +wrhrbF77 X؈H87Wyyǿ{Hi/ #_^(V^g)wF^(rY!6HNF([!wfXV_a&Wk^Gֶ2sK^&h.f&οiy)Gh'w. wRWR 8HH (h W?{/Io9v/b.3kFx&_!W>FIW6s({WfGa/HƷOFNf>iVV8hJ#gRvN26Ή)&6ٟ)O趲>oY7.!hB xgRig)6v/3^GGii#Hf(NY3o()v`(FWh7a')+n/[iGShNo3[Woxffv#i"ii?_ Yn.NxsF^.+oW*7iIs/Nh +H/:WiiF'gbV+3z_'s~{+J3GVnR/'n +Vxf./B:wC^ƋIsj_ 7k'N>b'臛*Vx &{CK#bR//֞&9(6~^s)G ij.k_.b~k(GW'j)_jjHF6S7;'6C8VG6_& _;ן'h)6f#33wFvWw?OXn?863G 23;")F Ǘ6Ǻo7^ChF)W '>wh8{g2.S&nWI s_'SkN^GWGfof_Vb.Ϗ&6Ig#?&x_*?_(3Ș73 +K_i3חַ6sc'hB>oiSf?6r2.Vc/Si.y)nfokhRF8cSN7iI2KiRoΏ>/6sw'if +.7GJ'>6./co>rV&>  把77&>rs?GkBg6vF*˳ COis>S;vHhcrbg gNiN7b)(B('Cڟ*N כ+z(F73K˿#wFh(sI3c +n9yg_o7Yi_RX^hF +LJ*: gGRƞ_BG(>7{v8gV>2&&9G_c_ɿnVH+vbi?2_y_w&'vx^Z"J㖈'i^)'98^6b.(N^78'BIoN)Hf + Ɖ)( +VfHCB'Gx7 +♾/gK#8 2~CWFI_' nr֏Fx^& +g&{_WNO^^kW&*NJ+^R_.6;˃s''wBg>&&.j#g"Jr/;/&2 .GO?__ jgc"b#;:O/"_K)/VfrfFS)`W nv)ihphև6yJ0)9Z a_ h,II1'R882>W񉎰 PwGagFcIg Ixw )/O> #iiv8v0 ۗIyI'`g8`F vgJ`29a`IV.>yG'x V^! !3P(g ~[ ָ'!!Aa1_(ڳfa1x"`0v9hI 0`V6IoQrV,x +2N8V)Ci)ʶ((ba*Ry&ֆsIA7igH^h8V`^wy9a&! 'þ9x7?9A&@VB^9As'hFI^j^ox >)o9#@(V[>Ɂ>sO6n" 'aȸ J_i!RVxh(yvZؘIWqscXvVf)!/j`Ia2/vfVI׏f(vYs?~f(shiN2cH(>6y~Bg/VI_Ofn6J0蚏7I!ih>2Ii!oWIKBȃiw[hr6W9W9(nNGr>Fg/iy;. 8RC2y:&/cwifFzƹ/V&wh`XB?i2KSo!9~z:wOo8x֋;rzHK.Yi6hGR'v^?ISv2Ƕ+V _ׂx2(!ya?:NvȺH(@`&xF8W!w[SVNRW V_&+ GwNh_枘/9w)gXN3h +))SfK(Ʒۇ+WgFF`x^G7)r{·hH[ΗIO67g)ɗyn(@xV(jGnV&~IYyA əR gGLJ&^X`77.zc8bKGfk柖_jn/B_O)r~ָ[ S9>~J˗ W;;rXSy.60xoOWoWW#Y LJKWng Hfע'ςV*))'#JVW)yG9nFVbCz'KK/)/RBg_'.xJj&hȇjkWywg)OwiϿ6ˆHrRɗc7)ϊNZ[ +S^*.g#wWFf&(gɢzfSwC7W7Z)H^x8VV_779^"J3s +'iG7H/jRnSG9 9+3Ƙfr'~O WS:rv&'Gw.'ɻ6.8zi.gW7'>^K7V8^&*i'KGfh>Z:)brR;3F'_V'i)zGRs^jWzkz_3hc{i7yɎ(;G.f'fhf2O /&jh2".&rS#V'WY9oFv6Sf_kI)[3(&^;_˿_(6b׻>j_?oێ&{^.sj#N?#ffi)'[V("g./jFƲr#GWW9iSK矣n_S +fxNKj/G7w'+vVFNWR(O_Bf(NGi9w7斈W"6;R'o3i;sv6j/~)'v*.3jv^9~NϞ2kR[(2N(^67W)3s'VGO +R'93VH8*_s?syiWgR^Fh63_[.w''G'7[ gW.H>v2_oi*sζ^&^hF_gZfVh~b3 +ZG9y?sV(Rr +Gwg_?~i_*V&.c*r>3N*i"Sf>:VkNf3iɇ?^nVfB:s)jF.fO :N&V:s_G#HF(6(Siib7)>~nf632n2iWjȖx8H"ZFN^[sWIiG&^ [ϟN3rvWySBx:_ +˟W2K~JiWVVϷZ#[{>+_IzV(֘v2g*/K~?r#w I!sb(vhko#Z>ƖBg) yǿ_F?f2fhswiICJ2'ssnF6hgW;Jffg_F&~G&(VV.?ǟ"2N"g )G&x6{z^"n i WO.hH(&KOZ[svf6n[׹92*涖?#v&fb)I_ .W?c:hvW^^6I7B("/ Y7:(6h;yw +>hxH:ia!?(Xza 8H/cW I)~HVG3rf>c.n_7& )W3'KN's& zgg. (k))7CFzcx(aIx7IyiSigxHXiy;X _ !f鷷i[ɖVg_39+8&jwizgwFGϷ) fW':_H6 i)O_/8))iI*f>w KHnxGO& H`nʎ g_9) iAѱ1qAIٙF(8ֆ6ȰЬ@0p쌌쐰x@@0V_II2&(FRr9iiYa1A1qwG7') "^H6ȈVp ,ll0`0h X~R7fV(F.oW''WGwG3Y'OwsIRhhX^ƸBVHhria"vNۛ" .^vFVf)v(y!wJxc+)>6Vy.H(f^H^g'r_c/i'37zg _Xh"G !Fn_? )NNORj+cfb(bZi:S6.6G^jn^BZG"r2&6ζz_" ss'F~'zW9fz8xV('73c66H2(.7WRV/~hsGiLJv#R_WBH·i'_N V^J(^wiiRnʷI?(/KFR;v xh~ǹ9!iy7^(^ǷiJSjF~)~.^NFo' +" +''R'_{ +b&V¶RV("7w 7zFvBIi !W J{2br?V`>/i!Wais +c/icJ&W^rz).^76"gw.RZ3g9S +3b&?y)מh^WY_iR.7'.6>HW)WW7Z&۶[_^V6v3 Gc{. c{*Ƿ7ZB.Ɩv_s[fv(~gn&V8(iwGV&Y7_Ii&_3GfRV֘ x F>OgoG W_h&o_>7G?2V>oGjo_RVZZ+[?>V{?Ǘi /&2O6HF3y (J;Si "__iN8XiwI)I 'w'NzR "g׏SJΏgh#sir)i?ʸh(nSI)>(#)Go 8&f)^["&)ig_I)x xxXsr!ayiW2&Nn.N&#J?/N^Wi)H&o +CfoW9':hO3χO+f'o/3IWg+8888vbCkIY#ogKgg)72fF>f&+(NF~g9s6_'o&&zii):ڶ(V(;3r+{f>Z.& +[S)swDzXH澆> 9yI2^r{S*F(7VH(6Gˣw?7_vc{')_ ghf((:){GG&Rg" wg)^8 ( B)yJ)?oɷ36R6hhۿW7W.fccv+KCVV69!I+vƆjgrn2ۇ)3I7+Og)o(`H&ٙɇ_O?WG _ii/N>;N^V&ns^.kh2N";f?W)S[/&&;k>g'?zVֆoz'o{Cw'O.v._jCoWW'.[GgG_&(HF(&n"JrN#og?+k&_^>KS'gr#2fk(>k_*~r^o#'_Wc_#6v(/Sz'[;'gvBn{NBz:N[/r3sǛ^f&&./{^wg#sSO(VHxxfƊ;O_7_G?s_g+obV*NJ:S;f>CC_c._'"FvRf"+g2n~f{'wKi'S(V8xV^ۏ^#G7WOgS?c&6F6nS{SoZRS/273SfFg{7'_fn6{3f>GiS&V(((>Kϗ_?wǷ{'Ž^nFZ6#.;fBr[*jO2S"/?bkF^f"nFW#Rj*&z3;J; y?˾KB:hNoBgK'S'7/'3r_G? +(nnhcO?'ׇ^O3+gC7&3#ǟ&Ok{^cbSk:'WWÞ..r8nRz?"3gb^''7wG ?gwϲ?KN~VjZkr.^g*GJ#b3SRj3jۺ/J)s_Hfh)_R/g2&z_o.*"SN'3'Nnbnof2^R_ښ#F&F_'W_Jj&{bgg+__R/3"s +_?GGr~( hkW?{3wiw/i;2RSNf(F72o>6g(_S~V~B[iRw&CοGǿWorxhfV&NSG[^Ggw緺N6Vi &WWWKsR6H;8k nVS_'fǣ>y>_w7F~^giRn_c~csJkחGrk nf8VvFV(&W_gO7F.WWS7__WN.[hhs62SZr^6)scz + + F*Owg B//zs++7'3((V(6F#'G/gg'NZ SOnjk*2V>;sڏ+wNRnoCG)ZskCvvF7"RS'/JI?_RFȖFvVrωw_#g_S>J;G7O_+[&ֶZJ2s^k?N?o>6*k7LJ'{Oo'/fV.kww) +rr^((V^R3gn/3F֢^".S?O 6j꣞jK3*~Vk/G➊~FfvZ'SjS'?{G6 wSs(FFx8V;J' 7'R"{;ǿJI^kCrS'&j:rf/wF֞&wGSZ>(zSfc_gbO)׋W3f6GI:?ϊv6 x~"g)n_z{r2 _GJrBn&Ɔ#.:뻞c#'^/SSOSfvBB^ƺC^SggKwN _" +c~(XFH3wg"/wϟ3Sbn_*ʛ?WiKB?NvjbFnÎ#OGۈ&ۺj:_'BfBr{6Ns'zZW{sg)^_wO8oK[)_OSC^.G Nwk2./ΎS{sLJ^[r2G:&.&Rf&7?. /w;Okk&H8hhnK.')۳'Gώ{"f>VbcFjS_o>gjB.O/n;#>n&>?2 J_g3g{g'37FH(8o.'W;S)/"۾?^o^~_3F;6svr7o3vg'^CG&gŸwsfs^V*~;s~Wb.{O3'sǗCF^H866vV2 +nSw7''G_[[:RO?g'zj{O +f^f2:~jj#njrRfs;:nf.J[{Ck*?O{?_'cG?7#?z^hVv6泟gg_f."n+η)S/'&*_J.(KN+r*ws3g#Z3>__2N{?;&~sˆJ_*/sss7'2vVVfF(ֆ..gg7K>/;fSG)7S[cRR:^r^_CZ{/ʲoK.N bJK'3Rn'CC*o;g3'gk+ffֶ֖V薆3S_'# 2nCfFwg?zSCCrv_7[ÿ2ʻs&~r 2b~BbRBjBJRoSǏ_k*_gon6F66Vh(&g/WG/#/+RNNB?+j"ncO{+fNB'Z +;#S곲^vjRr>S._B n_w_7'?SW /.Kú^vx.K6)Z'gSOSSR(7b^S?ۚs&>'7vbOS.WۢvfK2rs?"[#*>k"?K.'W " (f&v^n?.G_wGbF~r:OGg'6RrCrfk wwsnn&vhfrJ{n~Fj Z3wcgΆz_ ^#(ζȎW7g{6hOw/gb^/[wW)*BvhF.3scg*##s/zwI7ھ((&kg^{BC g/F6>.+KC>V2^(V>'G7G'>^f33)oK. s럏_jn~R×ic+Cog+nrcV&&(6fo;*r2sW >. >^~n^>~vOǗ)/+r&jo'sO/^Scχ/ R^>&'7#G _W;Ǘ?^H(V& +_gwۣWgj.+b? +"VxfZǏ3[6&s*Gϖg +.dzO'Nⶎ>(ϗ;3o'^3WON^(2nj"2n #'?GWBR_~o?2薾^jS36f*:^NO{C 'Gn(6:g?2"Sggsw#.&vJ.frfzN[k"W/_C/{[R+6hfkrz/w733rN?. +c'Z3; g_GÞ2&>o#skzs7?#C&h(JjF.*Ks'Ww_o;2_ rkR(h~F.og/w#~.nR#nnRsg6{S#O)'#n^bN/+oG g)w^V(vrfCs;/Bb _'׉_.^O "G_{BN6V*+z_i?N&&//B꾲sR&//ifRrr3ھ*N{/O3)I>~vR~RZS3Z_i gb_#_jnvvvvg)7O'/O22j{sz;~6~K.>^_g+R/:2OZb&cg#_) gj:CΆV^&z(.cSۢ7ϳfNKrG+&Hjk'gW6s7wo(F'¶n3gK3jv:6F_꣇W_~>~('o&Ff7G_WgK_3Ok^_S(frRvH[GFjo''Fχ. 3ˇ.^FB3roG_Gw#SSfN2*:ۇZn)i*sgO~[*rn3/J>VfFfF>'GSj~n O>Zڋƿ)o?g.2^V& b^bK3Wi)'[sG.6FZ+(n'*7gGszۻ&">v(rO3_w&zJg#6Zc㟳c7kr[nN3/S_7_׉g;f2h>frZbGsciWWꊣg^v~hFSg{soO'&3G^S>+^{ +WBrrvnO>r2RZ2*w'' 3(Fr&>*g'7 + +&+V&FVOCžcF3Wn&J~oBJ + b2:ʷI)?~F/:."7GGG/'7'{r+2^fV^>vKO__[ʿbksg[S2rB_'Jk/_"2[ʈFf_& siiGS_f^H6ZC"J_~g׹ײC/?^go((&^H(^K/O +*oc~&KS._BokΞJ"zR;2>'gg3n nV֞6>ۃg'3S'cjR#CZ[rf^Vv2{C3[CSoKkC#_rzO2Z[zʲ.s> f.j&O釿oZ~&foσgW7g:3B2³#Z6F* _7;2Z۟f>6.b"?7.˷KB"{#:^_+"n.R[s7wÞO'vF6/:#_G7'b/?:N_φvf(VvvR3 _'J)gs [[^^jnnGs[o#^>n'gR?"jog~2n:^Fw3Z2bꇂ"fFOי!_ƹG?gS 7HnZGVR GWVJ_/ONJso i?? I_ >Wg))yiN`6g*oZ3)hbRiIY?_?^F("i^6{))_: )iW^F iIO6'rV i׉F')A7>FG7rfƗ)9 s?as_*Ww!_^`#kXF'!Fh (zVZ?{(Vns渆FV&6S_> Kfx)y)7ay(Xz27R^JIj(GǷ'sy! iNBhf{y 㹉gOWwKF8ƆBG?>ڶ h7G>"i׋8`(/&Ǟ['Wȶ+['9)g vxfIF~w^OR#n3h&7~SOZ) oz &2_g"wj '_vhV(R>2F_^ _GO +?GWxH6rZ6Z)fK'/^/_H? cgsO ׷'vx(3WrcS7IIVF>_^NsgNcϗi7j;)^686s[CZ7' +H#.[?# R^hfOGWgW~HxHbGIIW/h^Z.vZ.6N''I_GOiGHV^>fJ{ 78'w7o[.{_ +FȞ>_g'_OXrk&Owy >6֖3"HSʣG>hF cW)KWw(hV^bgƶnWgVFFWG*BRj__(*W/?7w2VHv梢O')7yGvHf.R6ʲ(iחbOws;^8hh2&b)iGF6G_rʳ{/~F6)ǷoS))r8V2Ns[)W k^N+nS(vvnwGBnN^O__3HV&&^:'6vc'cSfh vvis_O+iixk"'WiW i3NVf^^fr^Ho.z'is__3' n&f溃+'W_& +k'now_7Fw>&VƂ 7BJG gx^^{?Ww)g.6r +(VC' NRg#W'o/CZW GG>fR^^*W7gfvJoOCr._:^V波S/SˋIibh(z_CG /f6~h&㎶hr 3{r_3_R#_)WV6(FNnF6c_9Nfs#gO~+Z^(>G.'Jo)׿6v^ƎjGkWG+/(2^vzfso~r{No'k7)))hFV(V^S(_)S;Fnr&?_*.VZS+7ח^FnwOo' )Io>n(r." &RB#2^3Ng7W7F^Vh(7z.rn7Z_OK:F(fZ~*Z.WoϏ_wSVFvff_s +3IiNc^Jb.o7w7w7W >&h"Vbs:^.fRJkWi'shfRf6oI^vO'iw )nf(V+ZNf;ƇOVhZ[iGC 9;z2C6(RV(^..)[f+z?o):/jv2b+isOi'FZhh~N˟)V26v~_N{;.(s +N f鉇 9s&Hh((f.^gZ&bSK/Ƀ3N^>Rbo:Jsϟ7'r&"f3[C:iI)3N6R6"./2&N#6s^^S_77WY)7(gNF⇊Z3ok'*>fVCgko矿_{C&&F 'Gij& k?Oڲ^RgjwW9iYW/R26[gOK^ _N7:^3S'OZ&&b:fkZ'C6.JSi+*+Fr32jRV&."N^Z?wiIGGF.n;*K{_C.2k2[S2"#&:6n:N&g)KNH~7"9)v V9vjIR8>;i(@vY'wW&rwO 'Z/Bi'_p6 _gI0hw)~;J0AG[2`Wg)IrVV) ^`Byiə~7HI! lw&_iIrƳ0&Y'xp8y' 80к9 YA?6`əgHVx01A,ww>(0 i Oh`9Ya)``y!!80ùao@ki0 IAN.X>^xp9A!#KȐPY/Wf(0K Ajr6>!"VVיA9 (Jىrp)3har7W`iSF 6GaƘ hYq`Hw! &f^i_p01a0֖׉rgi!3@/.ca*{'6IqaYhHv/WX8A!!v 6VG{@p6^QqYh.!W&V ! `V6VoYI)fnqɉg`ZWisXvII VXx(!!I>(xa 9gX`&hk!` X)sihA9G@Ș)   )_x8(hrF?v!W [YI  H`9!Y9nVW9`xyWV8"NȎ! i xY1^vVvw'9ifVx)y8(`)I'8( 7aW^FHS黷_f `wa8VX2 aa(6WhR`GVXOiFYI!  ~Ȇ؈gii*^ ljS&c_)!VX~J9ɛx׃)7v>N8`b)9 Ζ v_I_^vxϙyB h#zW~xGiyg^v 'rR`:?B +NCɿwFh!iF0Hk_ ySf@V Ɇc?9b8`F v#w 6.hFzg[(xR7wgg"Xx!&`R?Is+_)yGgh6+g(r(8>Nxz/ !OIh!/C.؈F(9aWWKh ++ig@ I!!'~88FGrHvf3cZHhyiNF^{kqI'G hJIi))xh6F&)_*Ƌa/^HV&yS'c 'IiihfGiR(.ׁy7HF9_7xxYx(Hy):j"YkI_8 xvSfꉉIWv);Ffy)F֟gwȶFIygwHXIYo{`V^7 IW؀xv!!Yٟ+^279`H~ 9)s`vF_)ɗW9H)9闂XHH (:)i9ivhv7y!wGFa9 )(^v3!iחx(n/?WG88XOn~.VFAY!!Έxx_SI'8HNOiwFh*_9Vfۉ_ Z `iyVo /oHhh/iI&nfw)) x &'3WnHfǙWZ+¿יW9)26Fi6rH^GSi^zGC2f8)Wó^F'W y/(Hr&? _ViI .#(83s)H)I)& Vw)WG(8H8ɢ;)/[xgsg3ָϗγ_SFF[F6fww3CF8`*yhW.n'fVH7/73fV''Ά&YF~^/hH K2igo2jiW>rNgBnVOoO/O.oKO&hxf_׹CoVH)F&Z&ڇo.rfnOb֞'9iGoVH6_w+CWFB/+_gSsff/g.vhFifOg?fKc/yWZF:_iV2fKGG.v(_g/ni_iZjX&oz(7Cw*/^[gizz6Z*"r.9O_^nnHv)ggw3'+k[Cf^2 +^JWo~n[wI.ZR2' >Zn^&>&7on:;&VN7N'o6fZwgg[+2fv꣛Z?W3fi"J9 ˶().NFV^hyɇ)s Vɇ)28f`(v+H rR!YChRfInW'[sVsȈaH)hֿ!jxF1gI .&_9' @*A 9oIa_)0 0 i! !p bIAفXxrWfha9^y7k (qAh``.!ሉw#6hYiHN )vHnNۉ+(2yW7xxy!({NY_9[ Xjy xV^S1IA((X>!(xX2)!(.~(ΖI8 rw?ahxhx8"OYy^(C ه. fYiiƖ6[hfvX^JfHf'W::agYɺ'Hx[ϋ)NXƊ[/yWfx6rxa)~V^3~(H1s) +XXF ar!iA`FNY ;X&YルVviA^^V&hx&9waHhh^WxVYg!xn9~b(H!/!ɣf[Vx扈g6r9(awV.6X{igI7oBzXn gc8^NNoɉSn rFٹ92hbיi^^b ^7  8`F;i!!/Nz:)&'X(@~_ +^ÆXiw  GN_gF^ 37)I/>#G2bwWˆ/f`f_O) gBzs+&/I(V*^s飷FB2n:gy&/ƶgYs [W)K鸘/z6:nwIG[GX ^jǣ?nX fgXXry_`8C)iY!FK)rzSׇWR8&2Fv(?gZ9~&fVowG')hz`y~GRW9Ff'V)+bs"sVYBNf_aw(xxjF!/~fg a[?x((WSy9_VvCK?V88N_׷~((jis/hV&&&I)Wn;zW +s?V[3IhV^W+.Ȇ +rfRvC66~Z +' ~Bnz'W+f>^HX>'Wn^bjɏIZ'HgF&ji2o&iǹ:V68X_OiZ^V^fyy#x(Hgoff))O7IGi7nJ__ׇhr_R.W7s&' Fg:WG?h[3'ǟk&S:&~g/^7_)O*RV+CsCjs֏g_ksS__#)*h^/'fJ/v(;_GW[/7jbVWF&vK/Gi?&6(J/j>+&~WOiSRVև*_gg膖6GGGfc׉Jrz{f~_')_6fbJn;?8FR(ۣGi^oK3 ^+wG&ΟzJb&sRs2*;3Wz;^&_sFN ws&&&Nibb* +VfRswgIS(8^g7>(*+?3 WF wϢG8f2b:o^'ʢn_)zr.N# '.&.k7*s'S+o&(>>^~^ WgG'o>[g.f^zR;ó['.N3׃CnV>:jWi۟:βjN^&~+Wi +kχRR/'Ioh(n.{f ^G⇷Zgj&.JF7j'g>c6귷i#S/({ֻC7GJC.f86#3gggf{V#bj3?FK WwRg׏2no*7)chfhSgw/+jfG_&(Ύz^(nVF7?ËZβOO_i7v֖rz+KSgw~Ʋ7{zJ^"#"C +g۾z'B[+3>(6cO?gWzznbN23iR>BS:[__O?fxvz/OjSjF;'[Rh/_2?i/;[>nBJ3B;Cj?_gz^&(뿷g_zJk^.*')'o kK~f^r'˿3v."{Kk–^ϛZ_{k2ۢ7z&ƾFn){sjS6V늚Gbr^2>~>:oOR>>{{62* s_o7Bh:/?g7'{^nR)7b(F2{_WiBHV~wg("ǂorx_׷S68^*Gyf'ro7vH3wiib>R'i/H{F_'G_[(VCǷWIZ&6c'_#OCgR(2R_Vsso&&7CK8./I)bHsg)G.62*k Y)v')zV6 +3[w>V8_Z&(F>7)>nȈ&k[wSG#^nWy_ON>/3oIw*;(hf6wZS3JyWg._^.>WGcKV&>FRrz"&rw~j:2n&B' CV^b_OsbFhx7WzNVVn7CF~vf2&[?k [6ɹ IinKwcS_RF `8V_[foG;Gg I7O>hVֈϺF^3[nf&#K;7sNnLJr_o>J&#s? +Nvg'WFv舆(:C*Zv掋 YW S'#ח)6x8 36Og'7)Wg2BG_GJ6hF [.zg7Gg{~#'c&{Frign>nZWF +.OWW)6FFփ&J&6Nkcc/WWɗכ_'G"8XH ^?fϺrRW' >چCSW') S&&2{>~>:JcNr7j~?&jcSWƞjSS۷#^HnB.r#&.FOWIWws_s_)OHxhx(VfVZG[777/#7ׇw?.&>nf2~ff;7og:.v/g7k>Jnsw.+frzgOo^R6o?c&BbzbZ^foiwW'S_?I Wi'^6f((2[_797{"'7ii7OBr62/{jZVF'S/R~nK3?.k~KOc2_N."> 'Z(6>?"6FcjOsz&(Fg''/#7O/WW)wR&N(hf~n/G7/7C'"nj+.rfNj?o[ckg'3[NR?jS˺jrOObNo*jnR&~Nr&zrO'_WW)_rVh(V666V^{Ǘo_7'G''?/N&ns2:^>R.;kc#.rN +3CfF>.''3_/?S[#'sJ{j2NFcOR[&^(Fʺ›of..O/_'g WIG[&88F(8h6Fg7'_C'wgG7g/#NF>k2RR&+rJ.rn?sn +.bNOGㇳ_?skRkϛFfrN.nJbj2Ɔ>KN>NJoS))wW77炖(6FV֖nr/))/:GK_gWiɇ'? NƶvK/>>((V.n*gS r?_g_gƚ2&c;s~Rs[2F/O3 *Ͼ&R.+bËSWSs3rOWgS~Fh8VNfv_7_/b*_;W)B2nV^^&F?_?GSnR{' ?zRVNwscJZr{{?)w'Zžv&gJ/sR&NZvrVFK7'7 WϊhFFƈh(2cgc?#G73(n. +>hF^. +cj +k#2ζnF__'O#oj:_C/b.v6>G'o/ r.^[Oj&(nZ +'SggWwwwcrVF(v8(6(~O/'7w)'G#"r2B*N6VFC +''{[SS*2S'GsSBF3S3oO.F'K +nNrJs?;2>fSjK/kwׇ7_iJ&6vFvvVV膆6.sOJ?G)WWs_NjR3SjKr6V(fFJ:c_scS/WSK6s/W3sZcOZFv:RCzk&Z+z~'[N&^+/7sgW)I 3vh&>zNv.n憖BNʊbbKI WG?&R +_''Rn&~;ڊj+/ǟ_VFn'_Os37w/rfVFvֆ&^k'+c_#+nBR^6rz__3? +>z&RjnO'_gGi i7gjBSsZ^.jFN"+f6FNB6"'G'燇3"b>SGokZ>8fR/3__΃gg7g/".+BVhVf??gjNn# >~JNRr2FVW7wiI)?:Vf>njn^n6n^'W Gϳ;cbBsssCo +b[ +^(vƆ+OûS7gnNrg'S?Wiw/ +~^VvN.S6f2NKc>/oJ./'C[CZb +S_g7' 9iOR&&r&N6rK(B_'7WiW/7'g.#zRJ6(.^kR[w7C::> +3OǷ_O/K'/R(33KOS~{Cs3&ZbrN*~rOGGiW +N[gCn.s/>f~ζN.K3SSss_Rs__/^nRnz.f>Zz/)){F.s&BJOC;ozϻnv+: +/Ggr?6~ Kog;R&KR>r:.z'G/^>.sZsR+NN~3'_; &f37_cos_'g +&"~^nrVFFww~rO"zc'O3O3g2.f~2CF6VV*O:ZR32s#g77iw__^2BBRR2Ɩֶ&g:gSkGw7w;Crf&^zSwg/Ύ +Z/JGS7O[?)_R.^&Ob#?&Vr6f(VZoZ#3?z#r&:B6 _[oɗ6&Sj?/?>Z~K/>FrsR>kOZڿgg '_Ss&f^&&"c3S"F&ھˏ_{'sZgS#¢^zk{+&J +>VR*?'wW7r;n^J:c2^3'cfh&3'?C:^&N&&kB~6NOC^3sLJ6^ff {wg7)_(^Nj[gcG+/㚳z>K2fnvv6kGɗiG˳bK".J^*[3jVf[sGS7'B>>FF&2CJR'_Wɗ׷_*.^2V& Sjsf>rrcGWGGg vZ~&~86V(N WgK+z&B__//w7 +G 'z~N&V88f^&s&ZW 9igOO&F6(~V#fۿb gSn;r_WCiGoN2(b~:f3F~n6/wS_'3/r~VV;3rÛJ.s_7iW)7o3zn悆6Hf~J+o~n3g#'w _G~ +NF戶V^zkS_)g'CNƛjss;S/W/Jc&f~Hv&&f^>N({)99'?'hnʋ/+:^FƎ:?Ck/GǟRF&6VFFrz&2ϋc?/_G)3ZkhhhHHr//_k2f+Cs3_wW)Ob^f&>.Ff^rZsi׿gSg'6FvNs_W+boSGgOK~f(Hxj"2fKwG')W Wv(hh(hNbS3 +'_sjO +ss?'W7C3.NF2~Z˳b6":'W7*[s/CvvHZ[_g:sgiOχ_Shhhֶ^k.~/gS wk'/r&V(6vb?_OgggNR'?3?_'So) zK>FV.~r˾^RV:sϺO7i?/Ύ>^f;_7GG'oڏ"goo#c?onoゲFVfff&'_s{/LJ+'GG?)/z֎6xx&r' O[g*oG?w))#6F^hfrS6&n*^k'og:_ON>6Fs?×)o_Jʎ.7ogggc*Ȉ(6Vfn(6Z7)_?OsSb‹SZ"~Ɔ(nS_NBS r(" ;OO_'Gi7G2b..V>zfO?ÎJ +[oR?;::"vFfh.c&÷ Ss)oSs_Ggogk[_VFvo? ~#N&3R3ﺋ?+n?_jsF&w_b+bOSBʿ wvh(&^Z#NFfS3j?gã~_+^ƈ>iWGsgc Ϗ&.2gSGC;"v"3RGc~:N/gO.G"b3#C"(.Jr{FR.bcz#j'WIY)^"F"VF^fFv..'W2N#v΂'*Ʋ&r>W)g7> nF^2Z_sS{f2>rfnn:>6ƞkB3'?_nb +:&#/fn&NN^.Kj#^N_w7)[kJs.6~R2 +G'i7s"FS^vnn&_7ׇG+oz^¶'..N'z?C2n?:R6^g/:or~nb"#__G?/kfZ&b.zj# +gf/g.f:7'_O{^Zk{^V^c_'3ˎ^6v~fƞf+Gs[_?Ggc3cs'_(3r{BbNrʆb_NO?S'w2{"[b>S_o{?S"b#/fN^+sjSǿrB +.bkffr#Bk''i9 CKs^fFvCO[s7/NJ. +/3S"&b._g'W>R>R&R/2& _O3Oz+;'R..*W/N_?fΆ>""J '7g7 /R>~fN6Z'/'boN;_ǟ+N_nnk?[6.z + _ZR>o_iwwSJ>c^.#_3SK3fnOn{O~r[[oz6*^.Nn&f*/?GGG))NꂆVV.NOs{Jgw f2z__sBrOo;"+nb[_?ǟڲNRNo.rGJ/K>fr&c_r[' .s . +nBcknB׏IiwRF"V&Ff^B7bK*j *RΏ_Zs/BffnRN CO7_;2^& ornc's{cnڟ[ +_.+o#{&FN~fB_~nc'g G3  F&Ɔv6~NjzGS/)O +&srξ Ok{S_o2OS~^R*~~/r[#oSGg +r~^fK>~ ڢ6~+skO:FnnF3owS+/ʞk&srWicKRJ.N^v^ΆKSOgO))/"b2r^C˺?KOOrb3R~&N6&Bc_i*[b_SNZ~rFrc:kR'7_r^.FKCJ"7sz׃+^#~^f;C)GkO~RFR6vV'/Cngi)i~NFJ*Cjr>s733Ǘ/Zώ&&Sg'?_:*;?ֆ^/__[vr o;noszr'bco>zFh^ "G' _w_O*>fk&F(ȶnGG7;&vr~/v SOGg7+3g?~hvBƶ.N~O?G_?7_Zj(:K^j &n{[:c'G2&~&&/bRۺ3??7?+2&N(o +?Gis;>^n"~^n*ΆsKgSwWgg3+&۾&"[Ogg)#_Fƞ {_'K_/F>:.KCN6oR›Or&'">2㶂o/oSSG[b6&F6掲&J__'SgFfznZRS{S/WgG.Sz"6&>z[j777/+cKn^nrKkSocj"gv3Z3?/Sfckg +n3{B׷ +>.+#韏wG*N6z2n(h2GGcoںbj.Fb*_' wg# +jK~fF oC3{Ǐ/"2f{*2ZC'?RBNZ"ZsgׇɇzR6h^^83Kj^3GiIFf&*⾢vvs_>؈^8RIGB1![N_x0@(Ɩ^(WG~H@fG637s7y)*&``Fws(6F׉IgWvigFiWv 8gI*G~?i /G(XFwY_cwx0,,8h'isי!WG v#+s9'O_rgWIAa_^ p 8F:)'&R i_SXVKs)'[/gy!B(hB3' /Ifp`s&>IaWW9BaaiSW '2zPl,pxb ."g)1y(¾'?g3F 9!)ihFHhƚo^ W^`(/2fZwɹg׿Hh^VV)#cOi!)_^ xh>7i'3)! *xhzJ~3W!,G_IqvvfƆw7 W/HVR[#.^fù y_jV8f 7G2*ɗ9G `XXh>k ZbfOw)Ig!!YayIǖh(hg_n&#_7H0 w7 y!!{^~6f'3>hk'G[v^/^6NIh 8H_ 7Bg7Wyy'H x.oF 99)v(B(Vβw)ZG ٙ_`X&hVיw ^k֎G7! Gw7g>Sw&bF/WzFH`h GwY;)vh hcWiIWi9I)gwZH 8&(h3ag:^V^_)!YWzRNV` (f7j +'y^N)Gi_)Wgg7iW>( /NS +K''b(`~Y ?wiwi)& Fn7ɹ׉9gnHH8 HHVb&rF>[o y Zg7I9)/o3gNȀ@xhF)2G W o"Wg.'whȘظ6^J/?H^yi)Gy~^ X8舶o2gIW'&h 8^'w:2II)sNk )/' "F.H`V.?IGiy9wkvF(wS?ى>((HHZBzۢS?g)3f(Nrg:/s_!yf8Hֲ+rZ(hZ_ wG>~)WWʷWi))~6f&f_)c;vh^?'(X8:g9I7)əىS^H8x8v/SϿbR+z_)i9+^xHH:+#W8(F_I!G)!hV(6rnNV6OחR^&wIW'/i+HNFH6^_i )H֖ )gGWh(xh&Nz?Wh.Oo"?'xH~v&GI _c#)_FVffbSF*_) gg'WigN^9&NO_7))ohV&3^&R2'w/Fhv +):rR8hgGi)''Oov&Zhs#nRO?S^nVי!iϲzSKr*r `X:GwwWyI[Ζ^r~r)9 V2N^j?gGio{.Fֈƶ3W'/J'i)_bƈvjjsC/Gw ~8V;):B #nkF澣3gsf>"6xxX6)iII>f>KBgGYoF(6~*iOk)..6&sϳi .(F2?S9_(V(JW7'OϿ7WW)'vچ^^N n6(GgGG)7WI6hn '?_^hGGWIgg;'(VF{7gG/ǗO6h^z2>NNI ^ȖWOW)i'S(ȸ hFf8vn J6&WWgr#')G(HNo/ +f+Ff 2'G[s~f8xH^Ww/SΞ7i)'ȸVj껟W)G 'j.k?*O)WJ#s^ @踸Fvfa!A vV0&yii[Hh@iO`@@0)~>HiGI!?h^'N a"?HηWg8K鉙gzf8c^ؾWYy vË7yYgN. W9w9&0 X'WcKX^ AqqH FiG*9X`ȗAٷYذX{iA?ֈ!Ay@@)ǛYx(Vqig`:?'GFfNzcH8N3!9Gg^I:Wh^;IVvxVV))RiA!.F(מ XxWia׊(8?VoYG3x &G (~Vfa!G( x_ǶxvRaY(( xhFaRAWxx KS'8f((i* Fs()IaW&iVVHNx*&.iIkۉ^Fi ^6fVwo 2fGyW'V;vOv`(Xs71 hkVXW!1B' _XXF;(ϲ67w ("'/!8K(G)y_`8X/i(wW^!!7F_&yIw?h(批F&(Wə&oGJ +ֆ8XhH'/6oG>Iy93Grw)6VF>hfHv؇W7aOG)h^ iI +V_Vi[&23wRJ)f ؇Jr )*X8K)7h>&IyKfI7Y r/jF&oǗ&jhR^X3jy!9ٛ7FN *;9786i& NR;_7a3^^C9ז~3gGYZF&^~F2x΢nv^^H'+V ɗw!^669+Hh.9F8K_# vwnhgsw2h6.g7SGW"o>V&Bfחi럺Z .&v(~GawWj(vB8&F HfaiG3rrRzf˺iA!f H(xH~f!wwK9s&G'zȎ(sYNChF( +ISR[&S )aI&VZV~6g2)Y׿8V귚n鷳?&'^ch(&gbw'OKWrWWO~"GrGnkƘh&(8~ɉyy׷'#> +ihv^vG/w*(vwwS&VY^ַ/#sN~h^>I ? Ffic.~&(~isSRvH>8>WS2?'j ' [Fz(')Gb疈HS>hhHໟi3חf.okN~o)+·fZW )io϶r(Ώ.slj;VsZ+O_>VhJ*?')?>SRH"#~WC.>&9!ZF"6R'6(h: +7Jvhos' '32)LJ&FH.N2:n3Vg'O#Js'6Hzc !w"bO?{#)6h+{K)iscBzn&C^6Jg_rsF3O;NW?GKn[77hVh V΢" I*RhrR# >3(VN6ϿfR /){gڻO>_Z_G):ۂn^s&VK&nHNj_o_I7 +G9W'7K2F2(&(6Fgo7_g'S)):gO+/wfh23>h.iɇJFwgb_[(HnIN_b^J^f/'#^־FVvnj;r'SW/lj_gW>>f~xh&RIIW)iʗbWwo^h(63#?rc^Ə2&z2?GwG?_>K#sK ھ^ noo'cZh(&ns&.6gI9 闢NK'rVf:~fHG?w wG/W fR:6(.^_3zsRBsn G[3ON'g':."nz_?f>k'cFF>'ZR VV(&fvWRb'ɹIwi{N86NFRONrRb*O/bOI~(nVVrGG)g>?G_Kjg;?C/kOS/Nosr3[~/2&kfnCoSz#rRb{b_惟ZG)?ks;vx؈Κ~WG7_B ϏRcS&g2w/ + +(jȆ'+·h/;?3VH2?Ai6Ɵ @(nwoɹb(ny)8@@vK3^XfaAJHv)WǎF؎H6o)?^8_i*:"*owR8*HȆ&3^7g"&oH6N)_g'xnO 'ΟiɁ926hFOgOHJ6ڷى (8Xˋ)*7ى IJNx8&oNI +h.X`V'_i ?yYWXF&gVVh)ab'>&?/'i. +F^'f*)^kvVnoù((IH?f_7WInaNg'F_*fǷ7 _O2&r Cf6_>r+7#!2'ob.{WɗcI.{Vf?wi!)'knXhKbc:iWGw#frVRsr/.B(NOrr_Sƞ(N&V7)hhfi9Vz'sVx(6 _7(&&gf_2FJ3N_2 9BhNOK)nv&W3iF(6xh oǗw +Cw&;jghF؆_)7>_IwG6nv3_w7gsN(rbkvf֛2 [_Gg[_/CƾV *#Vn{_kBVvhGWɋJf_9s6ȆnWi'^..  s~n~>~f(_3B_f;W6r>zf*_~[/_6>FVF'sIɹ7b3)Fh9舆6F?GWvNb?GNFB{zΟ^K +2)_kfWǹi^vb_"i)WH`77 Gk~ +~)6&(J[;.BnvKiWǟ&K [g_.(o_ wG{&O_?g?蚺_8_'C&'fKO_jVvVXVVC)/K?o))/[HF6V&[z_w?'iG#fG(vFi'۞&?_f'9OfJχ)W??H6/gg+[.ZVBŽ2?+&nR7_3hNf&bg/+?_;r3c7+^2^6(HRwWs矆;Ii^2hh{2G?悞+_{'C^B#OOR&GGJ?Ǜrc76&:O3CVVF_I采O +f^.wR2.i9ϾʢJrV*~k +f?G/gϗCʖVNN:#?7*n7S).[S6FfhNrË>_&(v__'O&6sϗj((2K&f{nbGi?g':^F^7O.{GJϿ2H(ȈS77s_g&F(xV֢OׇG_g)GOsVvF +3?wg2c'_bKV2N?{ +f>CwS +>K N&^3gCrR2_7f(^O7wgZ&hwG;'~ _gǿGjv(NR;2G WW>rNێR/r+OWG&VVRrJGc"cs36o/nBZk_Knc# w7c^f^n{zSrNGLJ_>3b(vN^~gwg돋"?sãNbk7iK^_W[3+&6VOgss/RFJo?g#;RŽ^>jRgZ7K_''SbF#/R2?g6?oO +?sJ V6((fks'73r{bR?fv.;s'˿O.RB3k*j[sRk# WgOR*fC37"HhJS_g?)i)g ^&vF&{c[ۃ;'#22kz"KR*jZs?brJNn.Jj/n>fv(.:?kGWwS'Nfn ?nBf.3'oZNBB''Ɩ gs&~6r_'sS;#&&VF^72ß'g'GzFFnZ2s:s)'f&6SKsv6fv'jcJR2r>S?Ko_7G^F~:n&g_?s_b2rr3{R;:{OG>ֆbNff'b{'?f^~nF>^R/W7c +r.&fbO/?_C~jbs(If&IWS&(֞cJۋ+GwG)_g[:^K{/z'kONo*V(R_^"^r[ ^+#Ϗ.^ +#OJbgsO&KSi'nN;Or:N3'_?&^ +K?_w7 +ƞ))Wˊh(~8h2 W_j7w'G׉wns?giOFF6~:S S/'(&&Bo"n3[r_Gw?/ zbh~^sgS~  ))9rvV(^f(VvVhH(>wiWׇ/WGʺ/>&sj2f6R6fF~oR.~n*..#{W*s/dzJC&6G_Rzff憆C:_7Ww[Jw))˶8 xf(6(f>RwWyWW )Oێ~/S*2{ +S'Ϛ˺B3_'?sssNRjKcr낋~>^ O^&F6舖;gC?s*KIYG'ǿo; +RjfƸ8HhhVngb3SC#O 7/[_"燿Nr)_C2KVfKׇ+.R +>FsWGs/>n6V(>rrbogS)wgW YGfvv(xX8h6fK +oWW'KŽG [.o7)Wo?3^ ?Jhf6f#s +R2f :?iKΎ+.Rs?BNc__i i))gO2F(v8X``8HBWWwwIɗffnjOo"6(~Rc?ڲ+SۇSf>^c_g'GRkB;OSOO:ncf&66v(v6{??GwWWWWiWSH(VFfhhVN iGSkW __/(Fֈ6>K+[o./N2?_s*">~.f΋b*#_'g?gg+o*&־&F²fN6>bo iɹɹח3O3?/fv8`XFcb*{O)WWi7k"hF&ZOgg/_O/ +J3_ sB*2OOG7soΆFg+N&8hH&_/_W97oN*掞6hV88^+'WGgG +z{FFs{gS:R{ +SZfkkJBs'W/^h.F~&nR_II)ǟw_S&rFVV(:o33C)iǷ7{^F&Nffºۿ.#_ɹi'OsVV2z:R&{/G"SjG>&(f(z{nCwi7w79WGϏ#6H6(XV(H((3K)!'ffVHh&N'S׏*B_2Hvv֎6^f/g>gOO33ω9js;(VbR.j7)wWwgg{ϳrN6ZH `8vVΆ*n/IiGff(^_^n^R"?r7G:Zn?c&RR&s +#&{gSˣɹWii3/?SRΈHh8(F"WW燗_") i)O+.^FVf.NH2ns#'WG k(f>&f~~s+jGr~Jʎ/n/Oi?JoGg)rV(8662f((Fg?)w))I)gO{Nfv(fv((V6CJG7wwso'S*J2C6'_g'SS2kob(VvSG#&_7wg'곇R█(xhz2'gS_W_WWGrs^Ï"v斖vvλ. +· )'??k2[krRf^NRr3owZ.R/gk*n"V?SSھ'go7WwojrK^fFƆ( +B3)__/ig)g/n.6^/F:&Fֶrf~bso'GwJ3ϳ[&./k +^Fn"&Ɔ K'gisw)g^Fv.fv:&~fV㿏33_#Gi'ׇC?r.c. +F6(hf~;>G RB*Gg NR_/' *˿rJfZnB&bB+N2^R;/.*_gsJKO[oJn~F6sr66"*˲ogW9Gs_ozb^C&R?kO)_;_7_:FRﳾ&r n&Ύ"fvc_7_/_Wg))i7B.[+.N&^N.ZV&Frgo_'wWWgWwRz>26n>S +sS ?WG22>6Vfj/{:s_R2'N&B3{gSO?w*k:kr:""nk{[3&f&FF~ ".OW iWG)#gSsGS&bNhh(vζR[ +b2K +Oiח))K[;RvNξf;Z #[k[+>;.>J'S.{n&#C_g"JvFvJZrv֎ggc7C 7Ig7#)G'+?og3^( VfJNns.ooSWW)G7G&^n>kR[J/nBz6bn;o_{n.ZR³Fc{3*wʷ__c[KrJK CcvNʿ77G/g__.VHHHhfΛ#_O+K[/g7bzCbRfSnRFb3C:^ó3s"'o?/66Cg'7z_Ά*3[noBn~^B>RB[So7Ss)g7WS333興F(hV֢3';ǿwWi s 6nH&Rۺhfrj G_b랢/sOG_)w_goO.rbNR2F~vFFf(cW''oiw_Z^.v膖vrZ2_WsOz.3Jv3{.ffC?jG_fN_'7oF~Zr{kBfk矞?&C²h^f66hrnÛ[&K77O +G_Sr +6/F6R{ggs7)_grRΆzr2#ws2.o?O_GSR^B>_:⺗g?[gF^ʶ6s^VV>N(37iى C)O 79kN.HָVȆ&(^bFKgϗi'_?b_s_b O:w'?:o~~+f‹(fVZJ?WoKN*_G( +z.Vzf")B/K)I_Ig'ZSv fֆzWƳkFz7f'_9i+3^V&G:;_/'#'W?Z&r(Nvk*^zZ+{?GWwOZk2 Cr& +k23ϛ^V^wZ)'gjǷG GBR .VFƖhF*fv(2ۗWg7G_7oڢ"f>Ffncsrf#/o~~fNz&/n&b^>i)WodzS*^h~fV#?_ggWW)'GN/_*)7JƆhf(vB +~^ZFRck2Os²?s;b:2>C3JS' ++G_' &&&ROJKfcGW_j[ Nn&6FhR_gsWW)gi!7sz/³V6zfFVVNf&Jj33.rKkw7^:NS'gs'r&>Jr?ڋnskS's2+'F^6(VV6V +/O7 y 9WW)ocG3HFF((~o'W +_'s gjS___g">V(V:/k>&r#k3* +{'OZ?^2NVh +kwg+I9GßNo*r/.(hH8xVBc{R''_g''7w/ rOv2ʟsׇ'sRrr^V~JR:.f'_[* g:r{_7nw^ff +nVvN&g 7 9iwZZ)coZ~6(hH(8n^f۞zWw)owIrO~J.FRbGcr+KrN7obS) G/'*gw +#g7jR6.ƸHxv&n/gg_Iiw+S;/?#r2&&nVh"N[o__)3;&>68&^r.g>{_+.sb_'?g"og3v2*k/O'z>Zf>R&8涖hh/))iiyIW7_WG''obs^6fF(vH6>J3rC_so?>Fcbʟw32{JrGo/s?;_oz +[f:ۚ6^"kF2>~Skr^~G7//G._v(^VvƈX(h(^B3?^ +G?_+^B&fN{6RwWR)iof& sG^s&&C+Vs&s6(^G'.^6_#+?i ɇ?2C/''8(&~F(8G33Iii7~VV(H(3+:^&cf&'Z ;)obo._f.g 3(&r2i+"SS ).FhfHVnR^3*I))6Br6&ȺB^OG2.3{sg +"+>iI7G7;".N:giڏR8HƷ3_)go7iOicvrv(Fh GwOJ^Sk)wןbf(v(VF2SCΞ^~))7G3sC'g)/zof":f#^&vhFG)9ɹjow {r*h(nFo>?))i>bvʆ2ro;g; +n+W_gogj3zkc_kȈ&)O~88hn"&zO/wɗ)Sy WrG*rf(Nh(x /zB~i)WȘ֚zs"׏Ks> csWs&V3):^Zƞ +K;(j.2'+*FfWOw 7B3Sgig#Z..Hhf(~hz*ZsWIəYwr.oVh&fx(V{_6JW[RSÊ_W'f~gk~VȖhȶ^&JnB/_sBN^^b>fJnf>r/.Gɹ׿[VVF.^&Z+N*'ɇk'r3'gZ7{~&j&['.Oj>oBhV8fvnOo37'O___WW'O/[ 6V(o3r2nVh))W)ח&Z^^ƶ6&V&2 + +LJw'S)iWWoCc'WwKf^:WO>V(8F+:jz{J{gi99y W7c+zz(n2r"66&zG77G )g#F(f>s/*V^fOgICRfڊwSJkr^nb~BgSs3#_c[>FVv'GƞSk[' ) )_6(Ȗ&vn"~ʾȶBɹ iɗ__jZj."RFfR~~^Nb~rB7'#KS^F"O'ggFVh#w׿ +on2HV趢 j7O7Or>f[wGigWCK'N+^bVVVVh +v)ɹ' f(jNv^V8HhN?Gg:'^67g*f/3OgϿ+ r~*?nkNVr~6Vv)G)n;BIw +?g.r6F#br>.&(sW)ww.O{G>#nN^>BVv"Z:nG +3 o~SOw3 .~6.O_hV6NRR~+JZg7G)_g3CCscCrV6Sz/vVG) W^b~fRgGO2f&6f'_OZR.n'w_3_?o_k;?.Rێڞ66h(V(bRR/s'?Jg)ٹI)nJ.r>{F(VF//ϗo/**ks3R/.fKB/(vo3.c~ ʿ+'i/vf2^;{_GjrvfNzR?z^'**{3g{ssK__ן'Wj&悆NR&&nʆJ_)Cfǂ&."Vh#S:# +.N+GOgogsN^.nKR(h6(FJiW_ &KNN+i 7׷.jfB&rhF^(VvNFj:/iɉ3"j۟*Z ?fֈhf. + '/J&6.GWi7of[*3R.(^ +&&FB&"gJc~ c'7'Z:^Js3h8 /G_OgrzS'6^JcR{G_(&Kg_ +Bz +s3.n~"k3G?j/o[ g׿+WljV66F ++כ{Iy&Vn(f'go!Ij^6Ɩr&v*wW'k^J^hKc &(hfƃwW!*(Vv(i/c鹉i7/g)9OFF ^r;7)>J^>*6riG_fSG7  +hX ^k:?i woKƈR6CwrS^G/G"s +(xHxSϾ>gGW wiY)w&VrB7WO"(xr/wk3O_*co~o*oڇWr(Hh^. gR'GSy9GG2~h‹?_k&(Rvo_~#{iIWWoVvˏOG**/B[H>66ƻcK3 go:?W7GC.Ww7_'(h`Xȸ2BGWyi/OGOs#*s~nj*&_#wG{RI?&^F>ƒkyiicvhV~6{_'6^og3gf +?OʏWW[*~~(v.~^&yi7 SC>#s[/n6&hRVwyGCNVhf(溣g"o׷ '{kf8V +'cnf?')LJ3_i׹b>战V>nrWy9'_gV/G_S8 XȺ.{bcGi )ik3F6Fv6N/*iy^&FJ +S.R>'SCΖv&Vn/)i!Y i_^hH~x/)9)GCR6vOϿ+:?'+Nf&6RFv>zFRG I9w(V6~n_?#׉w_jZ^^v&h֊2bSkGW*n6V_bgG)Y!gR``HH6Oj)7Ow.s *·{KVȘfFJ)'7giI9G(hRFI7wGs"hF6~NƶF2Jۿ_w_&h6{W7wI 9WCǛ(F(VHxXF'iI)"6rcr??z˃# +>((VvƖhfr3Kwy 77hȾF(")II)i&#Ȉ"2'K?.fK6gRv +CS?/~yI7'whh Xh&(hv:Oǹ {s{n_Kig/FhV((J&gkGWIg:(ֶ:c' _3&?>(h[ f&F&K_7 I _症fhHVȾ)ljIiojj'_ _:#Szz26vVhNI77NnNrVZGG73&>KzC?"6fVNv#sniW!aII7fVֆh*sKkwGiw'_j+6">Jgo?((zgF&o?iiWw&R>V^_)GG#n^/rV +C*wJF&6&G׉)99h8ظ8n?wWG#o2zg7/. .8(Fnnˣ '&rn#ZFnzi vZ:3V2J^ƆV ;N +&rO) a!)wwF^Vhv&vVGg_?//)w_{_7Ɩ(V88FnNNC'gGW )_R^6V6wwc' ?3{KW6^r"'JF&F6v^ϗWWiI[b>(8 +?g'_ۛ/iW׷'oj;&FFxH88&G i iW?+f"S?;Ff3)_o>B +[sJ' +_Fhn&Ɔ^>o' əI g>F&&B>&[G_w)_g'*gOGWigjvHhffj +ZWGWi/RB>v^''_{ssnn[w{nB2n"?[nr6(FC;חwIoO;;'&f6F2N"n"'w/"{? jFvvh8xBw)z2J: +.{"~jOz_'g_OB*" +{oB2.6Fz.~+zNs/ljII !i~VN2OrV26(rB&sNOOGO+WGGg) vFv`f>?VfK99BhvH ()!iIhjJboB_ƸKi''c^&ֺs^SƣG !!Yg/+6vh8GoN(8g'io3) +(HF86&_7'fG&#ZCNƖF)9i)/nVv6w)Ϻ{K"gSjNjF(6c'ohn/9aKFHȈV.Kg_VƢv'_#{w779IWFFFf3[b^h6RW) ?(v(6;W/WwI3ffVOJJ/&ڏ gr'(&fȸ~27wibx[ s۶xvI' s; _gg/n(VzfnSGjf^n^GbSOW9;GV6fR~Ig'nbZBw ^hHvn_Y ΢'Or*gkJ>7f(Hֈ膷)W'iWzW'+(hv(^fz*+)72ȸh;nGY)iOrb6KhH6ggF&N_>&v;7?hVBg'J/w(sR+'wgw(HX&ڿW'V2bOr~vFg_3Wwֆ'.FZOgʂN(ζ?Syw'W +hf>wWS&FZhHۆO^6^.IyiɇwiZB +;^_IcVhvV&gW_)6hr)wWZΣ>";oF".V*r_)O_O{+"6k3gb&&(;i)R_#&r.WWgh8H^7_sG#Rϛ"_WYii_#Fs.&266"K')ii +:RJSz:>2:[_.悾."nvF6ww)rh&G7Ncs.vv(&Zis'__Wj^&S#&F6v".S I Ii7'F+C3+>^N7OZVvn~3_JCg/K^vFro;CiWwF(vf6&6>_gO')_F6&6scJZ+k(Fh(VVB^RοzZiI77:RVN cc*_{r &^R;R+NFv(fZ_wi W^B;/.KZKǏ)7n +Fhh(Hnb.7闷'g)gk_s/ώN^^ +*²Vh299yi'ˋcoBk&[fKw'GN+&2^Z&.n^c_{grn[[2_W wχsh(hh(V&N://特yWǏFr?R(hvRnN(^†2'!I9V(/z^z bƢ{Z_WoϳZR66^B>S?/;g~& S/i7;F^ָ ƞNg  Gz sFV#g.HHVr/lj)W_O_Wwofn^znnJ'SSS# ob'R&k.jcfr.J3[;&v梳Y)zvvv2r.HV&2׉ iGoO_痟>hvkvVs999)BR.fr22 +  + +G&(^~['7Wo֖6~>j_wB7 ov (rZCowi Ojnr +FH(hhH8V&^2s?i )W_*?*Nj{i)g'n&Rʲ{Jf֖6o'{og.ֶK)W G"&F^f.&vV8(^jo_S{g'_7sC"Kh&&6^f[ G^frjnjCj^.NN+O7ϣ>frg˻ZVH(6j'G?o_?;:Ic^(VHhZOj._'))G7G'?_?3ʎf:nrr(h(VV~ +'G'os'gg'7GvFfF6j_W_Szfr2Ss(V/G[RFfn3Wgg?#?OffV(H8(F:'gw)7矗χw7Wg>&>H(h('w 22 +/ fb)w_[/N&c.;;2&cSB73b7wO_ NV(hƶvf~{zbS?WG_g#Bn#WSV興vFn;{f^rz3W׷WGg2v*kZۚ/_ ^^Frz>"~s~+BsgN'77i_>6C/hvHhGIg:.»i)):N.R&/B?3SK斖hHvb΢ʣoc>o#3:#:^Nj;7Wiן/3¢Kc&J>N~fj*FZ*OKZ3&'wG))w)N.66>rf6V27i7 _Kh>:o / +*((wS:^".6#'G뾊6rJc +.>??Z& +F66ooǃkcz^ ; +cs_z³2g^.^(hvnn'cFCi:v(ƚS׿Zk6ZO>z'r^3 +voOcz_WI9w6Nn&6B3WI[r:*^fsG׉ʊf6>fZc_#Z3#[CWfRR3'2"˚{ fncZCWW& +N&o'O?''N8V& w׺N.ÇGI ){Fr#?hhڏ'Gi;#/ֈ6nC/?_)#o3Zs:>&NKS#zs&/wsFCN__Is +6֊._?ֶh>jw7WwSF2K7o7)c#^+N&f^v~Z99i7zkS nfNBWw7斶3W +b^6&;w_ϣJ?)g77oBvVv.3O3{[_/KGZ&>&vbWLJ7S>NvF6hnz_Gsr"g3OO_OW/K[VVkSw7s22> gn.?O'ZFVhh&)iI_s²&O_Oxȸ>_OW2s2CڟssN~r>nSZ ?rFZo7W3Kn~: +oO~^fGgJ&hF~jSIWh. Nv'G7IfnnN~~+.;rv& +{Cg) +rgg{7+f(F&*Fz)_w;H8hv&'io_(~zkcw^V&'7RV~7wO3f~ gS2ǟ +k +HV.2g÷G[V6>JG)wG?f~"/_2hVjGWirvF~R''Cb>f'go;.fFZ;?''?6R +*zk˛3#2&zsgKVNn3gƎC3+WzB(sO'WI'ZF6gs2gN.>(n>_WsCN6^V6)FF&_R&ϷgO7j:+f+"g_'rns7)Z~^8((7 IgOo(/3_C +~&vJ3?3ʋzNffwz""CZoJj" +*Ggo:FO[ffbw'(VֆBSGi_h>3/k:j ..S珟_N~v&6BcGGOzf o+/Og/ bBRNS''_^(2^.cW_O/jj/K[&F"G/rn6n37s_K^f/ FV&Z/鉷'g'ƞۻ"#k +32 _w3K+{^⛲n[#?{s.N*J3["o^foחG^(fC3_Fcggs _b_G7Gs3snNf;[rr[sǗCcn>>^3_+332^N/'oښƎ~COwgG_ƈ(./g'gc*^ +[_'+*r.&n'#Ϻ{V^ +G??oNvn_G)cjֶ6V6Oc?j>.^&2SCg{.b"Z"bBZ37g"&6vFs'g?/O2&6& Ï7'Þ6b_o۟{2&۟'珟 ;~krj#˿RrNCO NJB +jSsOrFS_s&F&K*óϿO^^N ? ;ffB"OSOS>R'oKc;>/ssCcjʾÛK>r.:?g?Ž&f>r'wo^z2zbo~nnCO'/:~Ro2k[CORzc3s?oCrnFNR:?_G'O/NZʞ^^/#J憢Kn."c_[*Z2>c'_/+~Z +cso+Rrr23LJfv~frF66^.gWi's''Oڊ7 RN6Ff{"_ggZsZb3(FBsg&Zg_7?.*>SSnjj㎳"۳koJFrG3 +'oObS3ZZ' )+;kB^.{>b'O +b +Zwo +ɇN.hVh  VKWϷ)?nNs))SkCH(xh8Xఐ@@@p`@X86Vhf*/K iWIAaAqqAA!i WoS^>f3&^&;~gSR>N^b~(&_K^JC)G{O7)7n6&6HVֈ(:7)?w''o/;.rΆRZn>{_gcJRRN&k?_{.Rk2_7GOSzBZS' n>2 +B&{6NgG';{wkjnoNǣF΢N~^O3^&;w_g9iwg +[/N8xHhƶRZR."G/)g[B#3{~fg3#n + fF[jn2?'o?SKSϟ{'?##{sNn/3n&Zg' +nڢRO7zRNz.(&~:oG3jǹy)Os?ǟ 6ȖHh֞ Rr2__s/WiWiGC'z3.o~Kk&./gj~.SOG/2f2ڟ_?zC;2#ooR&rKʻBbs":^^^^fRc_rr?ϟ7#b/SNbΖhv":O2 +_'o_i)IIg>(Vx(hž'_k+J_i[kG/GW#{Z.&[>J??#J +2^kj&g_rSO?o +_? +3j?C" >2.?>b/_''''//^bs[.{ ^ NFrʾ~rBW{ IiWǿ_)O^F(H8H:r(ヲ/ + +wgGkoO_[o/ʃ{[BNzn"on&2Z "s 7ʏG#Osn&/Zf2ssnf..rNR;c:gwW)WǏ'/""*KrB+&~hffn^fN&#^g III 7) N[vV(hȶV(&[/3zN/#?w.o_7O{#ζ&;2Js"3悟b.;s +/nss'gSn"K +":ZB~^*..>~*zS?gg_/_'3rRR澾ڋBFV^>>&{ ;''+βχi ))I ZB&vVhhH(VfrÃRZsgG3;wwח_'^NNNrjCBFBrbjb2bK>RKzK{ s3 zc¾BZ2*> NnƖ +BKG'JSSkR&&Ff&N^[#>6F+giiiy:.HH(~^b.n"#:_C_J_2&Fz'3S'+S3;3_n;s7g_ێZ2B +˲.&^.~+r^{:+b_i7SG)j3.r^:F/S^.&)II!!7K#? +h(XF^Hh[~~Ζ' W7wǣ7n>b*B.b +>G?r~rb^&Fo(v^/# #II +S/{ Zo^n3K:Of3'7#On&ZCoS_&6V6^.FF"^(F_ljWw9ɉo~vhnJbJ?2&:'ob[wWWiGssJ~>ۚ/s~2Z{R"# >Zs"&R#s+g_/Jk>VF&^^^RBb^s3jz_GO_GG?Ob:n +*~^&v^f~nFfbk) )W:z;(h(hVV΢&sSOS*Jo'wW737cRrΞ/j"3&R> +c +Ro(fƎSsOSwi7scg)b&fNo^Z+*o/R~v&ofJ?7#fR2wK"2ZZfnnc/N^~ڎh^n"o?)9! 7wcVH6^Ƹ(VZV(:wG3 cGnW +ob^^r?g&>#{ff?GzǷW?K{/C&6. +{ZFf#Jn2 +[COw3wK;27)i7rbBr>V2["^6v~(v"Ss99I99yww{hfVF&~^hh/_OijZ3gR.KB#rOgR~Nsrn{o&j.zC'_')i+OR*[~>~zBƶ&N3Go[B{/ +B+kOWG[;K { n^F&rvNRoJj3) ii׳jhh(^[//Gg)Wg__JOj:7/zK^&n6(k/Z&&c+fNCJRgwggs Cb~6F&#k>H{#c? ^[3;_G'IB?&HVֈ8hN*sKR׷WiI9 _Jnz&F8hVVV(8^nO??gS{K_3ꏇK.?oˊ/S >ogS:J ;:k{[:Z.OOscS +z:cRN;J&(^βo{3#Z3"Gs_g__+Rj{f&r6V6fVRKSsc i igo*hV((H(^N_'矟'g'3?_ CoO zJrZr.3sk>Nn:+ڢwi)So''Ƿoo;뎞nB^VJZrrfڻ:.Kss7i7O7w/gG[JBCf^vVf6V(hB2sr.sWI9 iwwi)W? +;VhhV6h(6R#KO_'gW'[>b'S^ΊoBro[[R'/"~S3RF_ǟ^K'__Z" R[^3Z+~JG_SwGOOo"N^nz^vf(悊2z2"Iyi 9Iw3K>^Vh(VV((~2nrRRs?ϳG7S*_Ks;CRZR:2NZs/ +ks{.&^ڲrnBoO__oG3/SJc.^>~&&&{S3/g'W)SZ*[ێ>ZR^^fvֶ&~~N3_'iWi77'^6ffv6F>^JBjc''g'w{CsoOoz>&N&f 뛣/[BnR2>O/Soo{Rk"ڎ..nF~^n~2ZcBbOO_7w)i73>Ξ;~Vzi )Wi))i׏sO?."FV(Vf>s?#77_?_'3k"K&~c*OCۻ#cNj~.Z3_ +o ss"c[G>Rz>>~&>^f&Cn2˻{?_wo+ r~» +KjcJ^fVv^~F66^r_) )g'o{➎N((&>^&^2ozBG'?Ww?*cb +&2>S;~nˢ^nnrnGSSgG'c[Ïj &&rj^FzV6ΞSϳs_)iW;K .ˣ&nvvvhv>˿o?7i ii WGgg;"+2Ξ6^f^&2vF6v&^N"#o_ogGKs2nNb[ +orsjBR".{r^^+ZK{jbOSs;Zjʋb*s+~2FFrNr zwgGo_BJ#k brJ>F6^v62;S_3ǗWGgBںf6Ɔf"f>23/Gg_wgG;z^^R^^⾎b +^N>2{J +o_?O'*K?K +CRn.#R^fFƶ~v(N[s/s??wWGgOSzr.&rZFv(f6''/ljWGgo.~Ƣ&6h&r2:>(ֆ(.?7_ _g"_2/?j.Jf>R.~k{^+n+:Rr+n_S2B2?_^C+o"3r[^^sRR&v.^RG/_SW'3_j;_/"z3^nnv6vFFFf.WGgg7?R(VV>^v66v6^'緇WG__sϿ/V6Ύºf~RR†S'oׇ[_3Zos/s7{2FJos{3>&^FHsrZ'>bKOG__i)_O"^o/{ :&2>6VhHznZ/73g_??Z2^f>ƞ&vv7g_7_NNZۋSSoWWGz(^V(Fn;&&R7WSFFˏsIWgˋJ6vh(rrjnNfdzO.v6^sSNoǗWI9y'2&F(RBvFBG/S.C IW)o>6hVVvΎb?wח'ϟnnRcSɗ'WW_/B^FnrBRCG7S3r2JRgs'iOO'n닳kk:~6VZ>Gg 9w[>o +rfFƆ.Rbn#[B'g'I9'/V(&hvF涆&o_gO'or+s#'/3.2W(v.&Fj2N~ow'Gw/3Z^S+SRgwo&.2c&~fRvfKϿr/?nFNB+COONkwigf^nN&HfBN^ZSϿjO'oc)_R~fV6(rk'WwOw#+[:_GoBBZbBBs +zBc/OB^rJ^FfbB:J#?'Jcrkcò.n.bROg&>^BʣwLJ/g_sZ[K2^^n SS?#^"#J__i)#C +fj.6(VVnng)))zS.z{纣k"bjNf&^v F')'OO'S/ +³'gW +k;c32ó~R^NJn(^Z>_S_ +:fb&wׇ__r[.+_^>"3fZ:fNJ)'wחos/K~vVx&Nǣ/wGO#S* +C_/2C+'bN&.rN&Nc{~:O7SsJrKrKn^"+?+C+{o#+ o^F&?/'Z2>.^R2>N__O_3/#[c +2NrZ{nŽR.^r +>S'*7Gg/sKΞfΞVHhB '# +K3 ںoskS~ʛ:f6kGOC3ۇ?zNoj^3˂&R2^o/oO*_jR+rfj&RK_;_".bRnk..?3zSSkRsr+/KjRRB~^ʺ +?#Jb:7w'Ƿs_v~n#c'.O__gkǷ_+Nn*S>8h.r^__cG{K +oK'oS/'K3k^K~2Z[g+zzCjJz+OgGsKO3/ێf/3' _+n&&^~;SB*^7iW)7_kn2^v(^fv^rCornc_?Wb +v(b.n"[/Oo_G+3;:#^> K{3_/O[nr2+b~~.[+nr2Zj s>r +n&n*/CoOgSk^^.Ξ.GwwǗwW' "r(VV6&KRrۊ+*?gwGGW7O?Oz>f(^fj~N"3'?s_?*CBۃ/'s*r2R>Br^KS?z2{"Z:+/o_SCbN"*'Cg[>.^&rFb^F _'O7iןw?_{sF&F(v֎nZ +R/) g^ff6vffr^f*:s?G_'_3R.joϳO.B~z[ :?gRB~&>.rO_O~^^/?o''C꺟K>.2rNFF~'WzOkrnf((zjB^.G)9 S h(~~k:LJSOG+~j_o[+.^NC;+3.j'.nf^rVf>Rǟ7sbKO?w[3j;J+v2C3GG:z>&RO[f_ WW)_j.&(Rf>>2ssjOo''cSbnC?s?O>~F"Z{osOS?'g/>FF&֢bs7g_J{c(vN ?2sRZ{Sosnv^.cg'WKk"Snn&B>"jnf&2) igOnv>^.O_''3*s^^S7'*g;Zffھs/37'3FffƶB/#j/;.n^"2G_/s[kb..&VF^O_?wW7?ksR^"&^RRCr.2."&>B_7G7W';ξRvVhVvF.k?7G' i)֖(v~ksg'7g?wS"hF(>BKggW_'Ƿg+ +nFhhh[O7[Ɩffo+SO?~&(ȘxH&SsIɉiI )3Kv舶VnnnoSK;nvV:S7)o^6v8(^zJ GIy ^V8(?';GW;K^(6((Vfn;SgWחW j(Vh(^RR*o__*r66^fj +gg'ww/n&(HV^.Si)) w'2FFv2o[/'s+>FfZ_燇wONVv6&'Gi7rn^V6f'Gw)w/*(f&^f&3ggOw_?Srƶ6fS[/+g.ºZ2RosOSgFVN +LJ7)ɉw>N.B2NƖf..*?O#SNRfs'? O'gS"z^>fVhr)_#/?Rhh?Ǐf^ƞfV'))G/FFVvr^'''˂ R~n"r^*rs_O/G_o>V8fSggW)iw+R2JRFF&FnN2 +g2fvf.#cW7g~&(h^JcgGw(rG7g^~&Vr{;s_77wwKbƶ&6vf2ZS'Gg.>>2N&"KG''G3[j.>6(hHV(f.__o'G)WcS +.>nF:2j?/OkC.^f. /3wW׿Os.R~^F&njS[_?r&FnS_gw'Cc..>.S[7)/&&6> +{[Cǟ3NNnrN??3gg".RNhvzJ;/gw7'ck.ƂB^ڋ3soZZ^V(&6J>χ'7gCs&^~~Fzf:/?k{/zFR2s:s7W'go/ffnf>LJ7W''*&Fff>R^>2OOS2r/'OLJOb{b6vVh&R2>.OG'7'g"frj>n>"o_Fn."SOws[62Nn"ۃKj^2. +k[[/?___"Fvf&^&bKßG)_?c.>F~۳ʺ*/O3ʺRZr>Kc_oc;o?/ .&&6Ɔ^JΎBKGGG7'cnn";2[?C *FvF6(~J#OW'/r>..Z*z[S.&R.o/ +;'o__?k~^f^.2j_GW7*n66#ZNc{J2>zJRNN2g??gg +R66+F~')73KNoz:ʋc&&~Vvcoۻ{wo*O +R~B{>.>;kZk +3"2 +oOZj_/3ONfR*R.J'' + b~^~Nzk.njCsO/Nzj>B#c/g/?c_+z&FF~f6ʛ '?'7GkCSC;+~hF&nJ;:"g'7σjz.R2*Kr^2"cnj[k2b;SsOS3/OBn:[z{j'ogO>&~n2&b[*."K F>. ˟_w3SG#_o^f2Ɩf6&Js'G'S[SSS_ _/g"JRB&(vF2.2..>k+kkξ: +j[:22:c_O/'oJRZ bKj;OCC?bZ;Rz^.jK^JNzO; +kRb.ڂnK?_S';K".>ffNR2Nos+ˣs_O Ͽg'OO'SO2f&.^&.j'7oS/;Kb2R # +[;jKJN[/ +/#n>jN^r"g S *K'g?;S3ZnNˎ^F^bÿ/sR;3.f6VO'Ggs[S'wghx2S3KffR{j7'~fWWW3/s;oc?Ss(hr2j'S{o7)i3Fv&gσs^ffo'nV_g'; +>Z_GFV^;G7ۢ  wϻvh(VRfNOsFiiWW"; +ۏKƈ(s>^RNN⟟c_ +N3gI 7W)JoSOBh( ZSn /s_.>&&kWW_ξRj3[ff/JK#*ZcΆ&ff.G_GJ+{W7ƖVfK?B.6(֖^w)[BB'_OR^fF>ϛ.^nNjozOo2['W ?ss[??*((Ȉ3sZ*{'/Ϗ:Gw^B+J^fF&*K??3KS;r^>_?SG^V(V>2ャRK?3KnF(frWwڃOg32^^&.~Zb2.~fFzsfn/G))G_g_?GV(Hhv~+Jj{R{S+3'7G rf*/&F&>c: O{r_/&ڎ;;jo'G)+^6N +{۟:s3ZF6~*g#;3N^RnnNBRo:.^f"+7g'g''7))f(V(hVn^;NZ{ +7Z"S/Ww_R2>['r^6V~k*SJz'7 ++6~OO[S'_i[[ζƆFF~Zz?Bjzc~G?C/?o7'3 +Bnb:b^涆bzj^j '_w))i>66&.&n^&*_3 +rZ_ׇ'?Z.R~F+ +{+{OGo*n~>3*S3;WGB>2 bJSC"z2vV^N'[Cs_'jKN~>:r&&~>2Z33BB^fNn'''Ã7W ig ^^6^&^zo/k;~b*7W)W?*{k:?cofFnk.~ZG?N>f^cc?j{/w)7 +&&bKS;+?zz6FfJ{Ob#3OO3Rn#+*z&nKsr.^f^Fb['3gWiw7&~~fnN&6&^*c#N^Nn"ggwG?KCSk&FΎ>bR{GG'/.:;skbnzCZ??g'_##N.NkZR"N_Orf&Vv^.{+_O'3*[*bZ>^&JK +&vF6FR"OSG))W_S: +N^fv>.{>o_G_??_?oϻ>R2Ž^.n3gdz:Ά>22zbΊ[ k#3k:sSckJc?^F^2kڣϿckjۃc3/S{.~Z33>^F^.3cS_G7W7_c3s;z2JR&vVfnj{;"nn3Gg''?NN^f.Bξ&f&nkχwGO?on2Z*s[[JBz{'_3K::jZ'c^JS6F⋋/+Kg/o{s;k3O?&&&N2n~&v(6csGWiS33" c{KNVv6{b*~^ +oϟ'g__g__.&f&^^RJۏ_''?KNNz:KZ +k ??s[Z[ss/[k>O¾&fjkO[3ssScss²ʂkC/S^ZJ" +.~>FSC'G7?ۋ;+ J +R^fF&2BRnN^ +3'Gg?#{+"fF^^>rRRr ÏOZb + #j*:+OO.RZj +;#3/J2[Ͽcff&&f3o?c/[cZ:;OO[jZZn2vƶ^NNk{s'wwwGCc㳳j##jZ>>bΎ6F^.+ +?_77gs n&f&NN{: S?O*bB2 +JJ++z3["B2kC//O[:R6&N2oO/3"".;Cs''cb:n^f6v(fRb?7gO+//# +"zn^^v6fs_G7_gSN2.˛jZ֖3Sc#/O3ofv6/3S2rʟ)ggWk~(v2ۇž2CCN 2^V3jnO##k_ii'Gb(HV^?ZK:.^+K~f6V( wW׷')ii_3hh&SZN#+JRfJO^cj*[Z./.c>^6hH8/B gWZB"C{J;c+.*OgkCG&n袃zCo'kOsOOK(~2O_ ;2Zr(6F6Cw)_i)'OOO?JnBBr^f&F^nfZSr'w* JRn(^>N;GS+.? +6F"RB3sggScr_sg#?.^2Rۻ珏>KO[Nf^Ʋz&fn ooS'o*.+JCs3 &NKjffvn6f2oG7gs.g/'ׇg?N~B+N/"z +sO7/2rBÛR+:k.v>^k*ZڳZR'3z32So*nR>+*/sK_sbnRf^N~rCJ/g/gc>ڃZ/Jڊ&n^&6^ ;SgOgWG;n2&..^&.;z +r>: +R277烋[ +/^&*{.SS'+{s^~Bk3¾sgoS?[_RNbb+37 ZFv(6&.sʾs{#SO.;3oK2Cs*ڞ&n~6vfNJGGwgC;..bRjjۣ N^'W?c*b3ʎ&6F掺;NjJsoZ3?sZ~.B3S22o_o_/k~zK/s^vv6bO+Z#'{矟{#;3''{*{Z[n^.2v6Vv~^n3S+cc'7'?wnR..{*[SNBb^^"#gǏO7;OOo?2n^&.rb""3s +S/"# +2jk_Og*Zf&/KۊJcCO?c2v.sSJ.N[ۛc翣cNJ:'oSbs? k£v6v(f2C +g7g'LJ/"~2:#b:nnZ>"22&6&z'ϏSz+_ggos.^^F&&r.~n*/srs[cJO_OsO?O.>n+ +sZOCSs >^fR{2Z[KJSRnb[_;.6FƖ((Ǝ2[KR??g?z. +c#sbnBZ*2n fff^&r'goj_/'/kjR^f^r2rBS?3^R# + +SSSsϻ:zrNr [+j[Sc?Ύ:s:Rkj3oCc>2oo[[r&(vFnJb___gG'#K ks.n:*2 +2FFv6&RO?/Or^&n.Zn s{ s*f^>N>J3o{ss/Ck+*Z#OOO/Jf΢"nn+R. +#ò.nn'o?g?SnfVVNھ>+3S3gGwo*{o2zZˣ+JRn^Ff{'/__/[o3N&&^2r{j+#SnRnr#S:2koϣ3Ckڲ:.nZJ/3#ۃn./:"."* +[kC"Z3C3S/3k:nv^&&&^3_G_s?k:;.:Rn>66^ ;3?Oo/ R bJ"+o#;[KZ.:ZB..nBKs s/SSS3#r㛻kz +*sCO33ڲfZRR{2zjbR2rZZSo/'_oo/; ZF~F2B O'gSۏ''o3"[b zzBn^~F*k+_S3KZB +J**ΎZBnr +* +K+z΂[ž΋K˳/?oOcBS/RrK3c#/Kfr+k;+*b:bnBʳo'//?OOos/s>6ffF6&.zo3_g_?//_g{*3 +n>fv(f kB C/;Znz{o3Jb B 3Cs>n2Rf^>r" +JC3j33oz +K#S/#+.^:R +{" +zbBB&Z o_o3SSo?O?^fzS#O'osooCBnfFBR.Z{SoO33 +BSSZ :.n. K'N~";"#+jr'*J +O/;kƻ_oR^^O:.Ho?SfVbcnS_/osbsR6k[G)wG_k~oOZn^8&;3 ʲ&7i)^r&cwwJ6o[sfv_W*R^6.)wv;Sg)~f>˳?wVfk_)(i f6.)&N&> +(vr_g6VRCw?7i/^ƶR"'WiznfRc'zV膞g7#F.ow??2'wssf>fzKvF_G>BbRgwi_rfΎ__' N.':_2V3'{Ά&NNgOw'*f>r'gGr~R'&~GŽ^&ó)g&f?W2/#JOkfSWN&N#cgz^^^Ï3o+RK2_J~fOGWn~R&S{R~s_3ʞ^r/JRv&3'wgS&zWO^S?#B"k/_cn^&F*W_"n.ZjNw_n&662rRnsRǿ.^vzkWG>&ʂ_ Rf6gOJ2c3SnFJ*#2^fK23_o*"6rONs +ƶ*Z'GG'sZ^&Kns_2FZ2'K";c2>?.6".Z_7o*ff^O'ffN2og'#+c>cojbzF"No3#^*J6F>2o~:{_["..77F^2^^jC'Cc#&3?csfK_[&37_^^^z'j2[gσ>K.j*/ +^.LJ˿{>RJ/jf"GK> +'^J[Gg2"R_j/"N>ʻ  +Rb'?[f^ +/_;>BbgOz^R2:O'ZzNRbo_˞Nf>n{+R#KSbN.~2Rß;.ʻs_[gor~zCo>NRS_Brڿ/_~&'G?++2B/s^N:o'sʋ"r#[g ~~~:?z +."K?{~N^*grR;;S:~?'73jJ*{Nnf"3;+J[J>rg;2"s3_/:n*jʲ.3Ï_ + +ObBSS_[J."KZ;j&r[#z:n2+[;r^o_/ + 2KS;2rRo/*rJR +S/kbK[gۋKR*CBr>N +z/3 +:{_s+~B/?[k[R"rfSc{S2Rʛs;ڎf΂ +O?O3[+k{+.^.s3Z[+/C +:JocCZkZ #c +RR~fnZ??{۲Z.NB3k^Ύ"sC ++Z2 +#[r"N&Rb[3:c"ZB;S+&B?{k/b‹cz:N./_[: +.z+2>N.j#o{OC#sZ+[z;.r+3z[Jr*/c>NjO_[KK#zJ/J +ʾ>.*?'3o*R.bbßs3bN^ZJo#Cۣ""/ Kn>bSs {;Brz?3SòN^>"?#sKzS+jN&Nb:?'oO/+R"[S:^.Ïo#3J{KJËc{Z2RRsC{r3szrn23c//[ +#k*rrNnn"ϏKk22;C*jr>CCo3/cjJ{;s{nβCsϳ cjB{;/c+k~n۳C#{C[+[zNCo?3{3*Z**;*2~r so{3[Ckˣ3{Krco;ck*+c2N3 3**++j>r?sS;zJ{r[j#[+ #CS#N^&ZS#3c ڊj[sCS:2>:3sc3**kK^&K?ssKrJ+jB.Z˻J[S[+۳.^B +ssK{  +j;JNZ{#3s*z ##{ +r~&>RZsSsss[ +z"k[Cr"RkOZ:c 3[N;SS{:Jc +ÃJJjz+SNN?'R&;z"s33:2sgcN.^λ/.s#OScC.B.C/NN_/&62O?~g?^~V&_Nb>^*'~FvNOg_.^S_Gr涖c_?Jn^s'_^6zOg^>&:gg>^n'O~^&:;?_[.fƞ3_S'rz> +O's';2^&o +RΎKO2nR^^O#__2zR_3__:n&3#b>2*K{R2N3sKOrb's_j~&^#_22rZ'ZR^~Nc_'jZ~r.S_Kr^~fj#7s+2&b3z&#{">Br??/ rfJkRrrϏ +BK ';KR?S' +Rfk*+__Knbj_'r^f>;{{NR?GsK>>NF&:jLJϳN&Rsgc.^" +'SCo3g/CRRB'_Oβ3C_o[>&b{S"R~n3#/Gg_/B>Ɔ./Zr~n*#_^NbS + +㟿?r&2sooJZS;3OBNZ:r2s'jBf^n'/J"ÏOJ^.3?_*JbBo Kz^&O_;K>Kz+"^RKoK:'K&~R R +ojK&N2{?##&B:{o'>^&>_?c>2z;sOzKN~n_s: +O{C>N^>C+:;SO3{bNn+/_3š: s/S.r ok ʛ"nRO3 +rSgcs +R.n~>.oK.2:J C[껢nrrRS3s*.>N:2[_cK{zrrN +sB" +[sNCz:[[* rR"2OCcs2Z#_c3kr"2RRNʳK #:2B'S[ZnN +#s#"zۂb.#/KZrs +rN.>Sb"ooSK2#;RZk?'/ojr~&[{SR"bbSO?_3~+ +#O{Z2bo[oj""NbjjKڳO3o +Zj+c +2r*s/Sn2>BZoC zSs[z2:BsۻrZrS;&r +ڢ+"b3Cosꋻ.B2k; o3*.zZ/O::~# rR[oS/#b"">^šcSJr۳SS.Rr:ʣ +b/sS":~RJc; "C/OOOj rrj+[KR2[C/SsS[n.nSkBb{#SSos;CRr +ۋJr[SSS .Ύ2*J;Z:oOO*22Z;*BZ.Socz +.zszJkC/K[[bB2B: "rS[jr.R.r;{ +:K3/oC{+zbZ +b"2jc3Cs +jB2#c +J"*C/oOˣ*"22r2KJrRs/ ...2kK +K#s/oÃJZ"*J"+3sKk+b{ +j"r/[{jr2ˊ +:r2sKr.R2K[J:CS3s[+zrB:zb[c/[#2r+**:+/OCKrb.zʺR#/sJ.n.k[cz;Ooo""..Kz2Zk3+*bRrjJ+/Ϗc{;:zrzj"rnbK.r.z*#jZ.bk{?Sszz2JjbSs#CbRJK*+JKo/CscCc*+: +z:."*{3sC;; +B"rZb* +*ZR:Ϗos[jb*+.z//CJzR.2k*::K3Ss3[2:*"2 +S3#CJ:rBJ+Zr2:SSs{ ZBJRB[#SC[*+K"Z3/Cs/sKrzʢr۳CC*+:2R2JbZ/SsczZZJrR*;s/ss[kBbrbj rk/SSC:zB +JBBR{SS/:nR2Zj +Z2 +;C3ss3/CR"#3B&*:k2g'[b+kb""BbZ[CZ 3Csc'3ڲfROˇRF236fcf/7gh ov('*.Cvi~)/hG鏖b6ɏHi()yGF7iv?_(v(׹zi6h&>;vֲ_"gGn7Fg'&snS(g*VV*W '6J7sƖrGv' +7)V^ϷO>F(_WƂS&V?f()nW&w_^V~·Fz϶hSNogö(gWg~^s>6SgS(&wG^_Vv/G^V^?wrVf_^&V7&羖&OF>^N7wB&*2>k>v&[nSF2bR~g/"ZsrO'^SZf"{gK&3O>3oF'G"c{^Z'>/o"b_'*fconSOg +'N&RrzfnojGNf>ۿ[N^N{JkS2_C~RCogzK#>fN[RBϺ&s'j^΋/RrC?k^N_*:'G^N>##kGNrN*Sk~ ko2>"K2SN^+?/ckNrKbk ^/SC[/2nڊ +;;2R{/o3SˢKJ2"RN2S3{//jrj K>[?ocCsK[[{>&NʳoSC2*>^s/3S;j+ :  3ãs*rrBz*zj2R2{3oS?CZ"K{r~nK3SSOCj2R2j +Bn>;o/[jJ:Jjr+3CsûJb2ZjJ2r#s/CzZk +*J"/3OjZ2 jKRNS/3zb +{[ڲn. +sso/j.ʊ +Z o/j2*{kB*sssoC B:Rn??Sj"+cKzBnN/??3{: + +{J..JcCS[+*jۛBnn.[O?3{+"ʚZ rN#C?s+zj +c ">K?3 n.ښۃ˚βK[C'"+jJcξ2kKc*zˣn>B+_?/#k+**:۳;"n2k {?Szbrb‹ʲ +ʋO'_O+::"scjnnrJ3:z *rN>. +K/??Sc*j{jB2Jz+? +ZzBj#{j2N>.Zk__/K +/Z.Nn2Js3[ZJ Nr2SËk JJskn3??[ zz#zRNrJ:z{SR.£OOS#k*Jr.ˢr>Rnr/s#Zs/RRB.R+/?/c[k*R:#3krrB.;Ss#KKzo[n.rn.s?/s+kʲn:SCۛ:ºCozrnr2nCOsc;".C{Ž2RnC?O/CJnN.r.bs{+J2[SCK"N^rO?O#Ë"3k2Rr/Sj B#˚.Nn2r.+SO;#{z3CJ2nkc;#Z 3c +.NnO3cso/bNNR.JoO+[K;CN2nZ/??/#Zà N.3 #JcBnRz[/?Sk#{C//J>.nb?+ "{C +n.22C?sS{ +j [3ʎRRSsKkkjۃ:n. SkcjS2.nZ o/;+ +K[C2Ύ>r +?3[*s{".rrNBʻs/cc+K#[2nβC/뻣 3SSbΎnj{SۊjsS[R.SOC{jK#S/2>.ooscS;:*Rrn2z[S#{[/:.RrCo/# +Kczn~Bjˊ#Sn>2zS[cKj**#Ss*Rnn>~R/o C#/OorrR{Soc*k{kKcSs>nڣ;[K #/O;rnnNNnbKS?Kk +/>~>RCs;;{KK:brRB +o{{{+K3"..2s{K; K[[C?N.rJ/;K KK#?j2bˋ K[ + ss[;KKkCCRN.rb{;c[ϳnN2ZKsC; {{#?/Z.>~n3[kk; Rn2*ó##K*c/3;Jn>ncC[#SSjnb#[#cK*osK2~R2##*z*CS*2NrZ*sS +ʣOO^&>s_;+Bbog72F~"Oj~jo'#.F.'s:b.N:7Gbf.[OwZ>KSƖV6>:SG2>2j_'"~f6n[Oo˲~fBzs?;2&/ Nfz?[f&RoG F&.JgBN:)'FVfoǗ/F^{OGW'V(v&rCg7G? R.{w3R&6~JS_G7n&gG_^6V[χ7gOc>&>*3O''fvvfRkS7gonC_cF^R:'w7_/{ZNR2B _Ok>&>R?G &f~sr^&k'_f6RJOCj&RJ;owG'o6&R;'?J>f^nJ/7FB'R~NkS_GG +R^FZ_3 +r>CLJNfZ;sJ~+?O^ƆB;s?oZ2rc/n>^[g'r2RkJ^LJ'_;~N +S*2&.j__O3rf&>R:3s2&&r#GSB&^N:/~"JgGOFf^"[_o >N ?oƞ2J'_{zR#G/v"/Sck2b_o3+RfkcOO3{r*k+o3*"n&&..K?S;Z2o3 BΞ>_'NBsC[ck^RJ3_gg'3&>rKOB&'nf&^bo[^^Z?GG_&&~N;NNr*g/>^;{R[Og_o &^n[///n+#S//3K^&RšoO#:: +:+s 2./_K :nN3+.>&f"_/KB>n;[o~^N"cϟN~*o~N2_7ZN~~{ϣRrS_sN~&&+S +r.Rjg_?or~2S[j"s?SsCKB^^ + S +*#sSS3CzrRK/Oo +J{Cs#Ύ +ÏCC#:CsΞ^:C_rK^>[Gg/>jKO~~Og_Ns3n3_*brNβ{33sʂZjSo#jr+KKkj"zo3b.RbJ +cJS/snn*[k +c;{c3C낂r2J3OJ2Jc[>{?O3rr:k;˛3cJn:c3'OcBR.::J3ۚ>J3'CZBRr{CsC*rRk3O:B.> +KZ2b{oo;:2n2zj+jjjzJKCC332n.š+ + +CcZbRRr:cKZSڂrjC/s*bK#cûN";o?[.Z+j[#KŽ&NJK_/#22+[ssK2nr"S?OC+2Rrjۊ2rb_3* +2R +K[#⚊ZZjcS/o[jR2"""ښ*jʺCcs3ۻ‚2+{ +{zRnn #3Ss[ jks3 *:r>R/S/#r: {s#n^>" soOo +2b +SCR +//{"rzcbnN>Nk'2":Kjbb22"ʻ3?2ZjbbZB;c/ssCj2ZJk;# {Kcs3r.R.2*{c{3scjr.c33 +zj3/S#Kjb~;3sSs[JZJS3c; +.RJO/{"2b: c[ Z~>?kz"Z+cc NBZ sOsCJZBZ껋2rrrJoS/S*jjj*JJ+[[CJR.2Bz:k+JJ;s/SkZ2.zK# Kjz껣sS+">K#[:*cSSs".>oo#{Rc/::*[#ʲrz//*:JjjK;*RnR2/S; +{KkJ""bjc3s33[KrbZz: +:Z"*K#só/SbB""{:* +k{C+...Bz+* +KCSokrnNj[C{ +Zk#s>~+KKsJSó3;JR{S +ZZ;cホzRNRCs/s{++ۺr‚"kSCۻ +"J +zZRB#s3s{bK +j r"JjC3[CûJ.+jJJJj*. kSϿB;So+R&'gg~&RjsSsB2B[?';ʢBn. +óJ:z ?s[B^.{c{:BNnsnfk/Sâ2Nk__ONf+C{Crb22[G'_~^nK>N~> +ogfF.O^&ϷG.&fF{'o2&37G^Fo_N~&'G rNfF?{>^OgKbr~kOo+"nz_+b>>R#oK:"kO'.~R Rr."Oj.n3C2z__Sb~ΎJ/on~nBc_gZ^~z/?_'' Rfff{O r~&^+n^J_cJ&._7Ǐ^*3_^ χ."#?O#*brNrK3rJﳊ2.:br+kS r2Rs':.*K#srΎNb/?g3 +r.Nbn../_3^:k_OB.;7ǟ[n^23'#R&˿GGg+2澎?Oczr>rb3'g_k2κOC{ˢR?{+."3Ëzz"nr"OS[˺.RrZ3 +J"." +ڛ?3zBbR[3[b" +O[j*R3 +"Bns_[zr2rS22n>rZCg3+ +2.rr:[{^~>N3+:&*gos>C?sN>/_'O/S +~^kSoKz..NB_s/ZbR.soJZO/##JBs:r.ヺZb"ok"ssZrBSjn2S_;"#Oʚnr2 +_gCŽ..;OsKn>N£sJR>. +o#">k?g rC33rOOc>.S#z//#*+"n3K ZBZB.rssʋ +b:K˂rZb*sC:ڢBzs/rR2o3+Zz:SsB.22 +Os:2r.nS3rNZ_O B2.sOjR>2s_c2>n{oϏ.&;O_S+^> +coO bn^>sC+~ZK˃3jNN[#+rRkc꺺ʚR2c/*J2 [k[z2r"[SCJ*jB{C#2nRSϏcz"RKc +.rRN.S/?#j.CCoS"R2>SkZN#/..n:/c*KcK"Rc ^ZjSjb^kO/C{RN +#3sc .*CS[c" J +z{K#ۂ:j.RJk{3/*Kr;czZnZ/C J 2 +k3jZ +n[/O[Kjn{sos+ZBSO+2OOC+k>r3Ck>nrz3;J>^>n?C/2.ss#rNn2C/3osr +{{ B...2[3#/SJJ{zz⚢ +{ :k+kB +2rںjKcs:KK" +k3:r.BZjokBz*3/ JnNrSO3[rb ok 2cs#"..2+3s+.>zcsoCR.R33sno//o2RRr#[S3rΎ.OcꢲB{ Ks;ZBrkK/k +껺{Z"+J[ 뛃JK bj +3Kzk {+RnZ{c[3cZZ +#S{zRr23#sb2/#[r2+c#C*"2";C/.. +3/KZrr*cÏ/n"[Os"br{;/2.BjoS[jZB+c JbJ;c;JkK:z;jJ*JZ*j + +kk[* kJR[ˋ::3+2b[{"[[c R.z{3#b+#[ó +R.K{/C+Zb22 +csSJrNBk#o3kj##sjNJ ;SJBrkCS/S;b~R/^"j/'kΆ&n;gr>N#O_? b.NR_s*B;S^C_g*&R*coZ/'go{~f& _'2>>no_S.^K'_CB^ۊfC_'oƆK?[.fF2O+FF΋7wg+חKF>WovֶZCw7_B^F.+wn涶^3^ǿNf&sbNRk'gj2b sO__[zn^No{ڎ~>+'g?2>&r*''cž^Kg_R^^β{?'Of/'~ffj/'_[&n";o{&2'ϳf&B*χ_ϛR&f^r'_O#NB /_'/k2&⋳_ۊBNNz;n^& ?kzn+S?OsKR"j o*R: s3r>r*s??3n.":z/O{>N.2c?/#z.rBjsOOKN"?sK^K#N&n'#zN^>rB +__s+n&&NR"#_OzN^^j3_Ê~.J[__2^"O#J".B*So>>Bj3kbz[/o3{22+SC .RZS3j +Bnkso"rb:/s#[{jB22rCSS3crRrb+sC#K>S?SNR{?o3JN^:sbN.S?/n~>[O_?/R>>z3?_>n[.SoCr2"JcO/3.2S3.BZ{C/oSkBr"{SC[kZ2Z*oS3C22jsC3sb"2RZ;CCs*.{Co Z2Js/ú.NR[S?3:R +cS?j.N;SOS +2nzc?.>N+S;"RN2ScjrR:Ïoo3R.‹sS3SbR.:sC3/3*BRRrB:K{C3BJ3s{z"z:ccbbkó#"bR*#3;jR3; +n.ڋ/3{B#3oo.rJ{Cᅬ"2rRR"˳os:rRnΎ;3O#Jr.R[SjC BR:/sC{r.sS/rRc{c +2Bˣ#3s#"z* K{+ +* {[+Z* ++ ;Kjz +"K[#c+*b*k# ˋB ;#c#{+rZjcsKb/o#brbJ+o zb2ºkCbrÏO/;ZR.coOsZ22*/KJrC3sRξrjۃ3ooc*zR2c3S*R. + cS3:"b":*#Z"Zz#ss* ;:* ڂ +[{ۛʲ2b{Zc33#:2"z:+C*:"z*+ {jzR" 3/Kk*z":j3oS[k +.RB:3/sjrJ#k"SsRss[+zn2+;C/S*"2ZjcjbbJ*{33#K:ZZJ{{**Z"J*۳:Bb"+kjZb+ccC{ʂZj ;*z"k3[krRrbZzKCcJJo +b2ڻsS3ڂSs;j"nr3[JssC+:Bn*3#{r:* #C{:2.Jss#*z"z{j"BbS3[;kJ""zk[K*c#JZZ*KK;:bb⢊{[cÃZʋ[[+":Jc33ۋڂB2"KscrkcK꺢3S/s JbCc[jb3:r.rCzʻ33C +RRrZ3/cK +ڂ:*CbrK3SsK[KB2r"3sCZrzj˛#KBJk/zb²+[KcCC3*rZjK;{+ +j + +3Ckjbz*Kj+{cڲr2z+{ۋzCrr23j:kjr2:K3[K:z:óc J"Brr2{C3cZK{r뛣s3#{kz"j{K*bbJc3sCJ"bZ*K;::j{#s3 +J:+ +ښ{#3c{ jڲ2Z + +++#2BZ +;k;k[cK{ˢ:Jn.2z껣#k3{ZjcSK+bZjbڢzʚCzn>3J^go>>SS'J^~ʳ/'_>~&^r*c'32R~^R/_;.^~'_Oc;&&^_'rff2_sf2o'g_z^.sgf6Gv:/''ggkf>KG3>f6&/''Nn_?_gn~FR.n~[?R.. +C+rRKRrrsK["N.Jc_on?c#[&~>z_g NN^R*Ok~f___[nN^Zos;..O..>oC/ꎎ?'r~^>bsos?{RZ?O'o&^ _32RsSJ~ +?j.n£#'SrRr˻;s +b/snR:s[3.2*?_{rN:^>?'gb^2s?{2&^BSg&C?z^^^χG& +?sR>S'?c.^>s ~ +g/+>>ZOS[n>z+_ۺ:cCnj/?3kr2k[C{ +2ƒ#KBrb ó nΎ³s{.NO*R>{sJ. /b&['K.k/Oz^>zO'[2>²Ê2~bº_'3ʎb >"Zc_3nbr +S3kJZNnrb{sB:CSC++R"z[?[[*n"C{NRz +?o{K +.BJJ/"..:kS?_O{kZ3sz~S__{ž>R2Z[*R^RZ?g'RkO{>R. S?krⲂ*co3 KZBrkO3Kb‚o*+2R2 +?//ڲ2zoszRBR[Oo +b"**JJSc{*zb. +ʊ+C;;JZ++C/;Z.>"JnZ*;/K +^~n _/*nڊ?>Nr"O#rboj...RBOCzbBrk3*RR.roo3 +zZ 3CRR.R?3JZB2ʣ[C2‚2r3Sϳ+ +jb++{J2Z:"BCccS# ++KjK;kZ.Rz"SCsk"b*jjcC{b.bZOor2"Z[/ssnnrKOR22 "Nz3S_ۚ.n#s +2RRNۃojz2.S#2rBn#o?*jb.;cbb2+ CS#k +;"bRkkcS3[*k+Zk;r.zKcsCʊ*Zzr2.:s/3;:ʢ 㣳C;Znn2Rz[SSZz*cC/3R cs"2.ˣ/oۂ.>ZkSjBco+.~rڛo3c2Z#3+.*/#C"zz*ۃJ:"R"*/sck:J:jK2"c3;{j+k[k"b2z:#3kj{{[r2ZB + [3S[z*z3+Rr."3b: 3cRNnBJۏ[ +b2[/O +NnrOb" +S3K"n S3jzZz c*k rrC{㳣+:kʊz22"+3s#*ʺ Cc+*jB22BcCۃKk+* {:z:bZښ*㣋k;#s:"2rB:*CK::{#3jZ.nRr"[o/:Z:*Ko+Rnr;oSC +2BZJo.ξRsoۊ"22j3CC+"RCS3*:b:;kbrR.뛣#;*J K* +2b##[ +J+{;k k +J"r"k[Kkjzb" ; kk*kKK[c j"b2"j[*Jj*[J2R2c +z:J/3# :..R33scjbZs3+ZRBS +c3C2nN.*;sSkz¢+Kۣr +[CckJ +k K +r2Z ۣ*K * +:Z + + +j뻻K #K+j:"¢ʊj*; [+Z"kk**+j++sCJ"BrR"k{#[{Kz:/3:nr:{*JZJK33;Jn [3 +#Ckʲb+c +*k [K22:+{[c{k K;;+j + +Z":j+ Kk{kjJB"z +**+k+ [Ã{ *:""2zj+*+k* ++۳S:R"j[ +22koϏs R~^>2+?O Nn3o:&o#R;??sz&^ /g_2ΎrO'r~&&~soR>n ??/{?NR{C/o[ +nN*s?3kZR.j[3sËRNR"+3?_#:RΎ{/Osk>nZ'_B>~/R~__[>ffRj3??/¾2ss>f&ڣ~2__&f^"K/_[RNR;_3R^kSs 2:/R>~.#/OO/[nJcssC;ʲNBs?RrbJ3Ss[ +rnRۏ?SKZRn2//Kr.b ??/C*>.z/3K.b3OOs*R~s3K"NbC +^&~z{sOSzNnon^~. SO/B. ϿNr*oOobB cc*".>β:S/**K#ã +zR{C//s3"b:ۛ+2r*#S/˚²2Zj[ 2z 3SR.2JC/[B..2c +N2 +{Sn?o:nNr;SKrccJ.bKSsjBz;O?oc2>*coS2SrnJSC{ + {##; *R.š +{CSSË:zj{:b2r2B*/os#Jb [;K2.Bz/oo#+"r+{ۃ[jR C/ +2n2s+bR*#oO?3벎.kscrBJSOO3n*s3Cb"JKskRNNnʛ3* #sSsc2n2"3SZ":{ z2.R2+s/J*{[{brRRr˃s/3[kJ+k[{ +2Rbj{C/ʂ..rbJ3rK/# +r.BzCc;:šc//.n{CJbzK3orΎkzb;3/oS{:2#{j"":#s3[Bn2;CKʚ*{[ۻj"r222bj#C#Kj*KK JZrBc3[z +jk:b2+{3/S3kZʻ{kz"BJ+3//#Jrrj[kZںK/os+zR뛣*ڢ""{;n.b +;;j"ZJ SSSs[jRR:kK{[KjZ#3[R. +{Ã*z +{cj2Bbz* +**K;{+*:ZڢBBZ +Ãۛ+ +j* +*+JbJ+k{#ó +Z +{j"ʋ#S˺B⚊{c[Kjbj// +R2b˛jJj{3 J2rº+ {{ *z"zcCs3rZjKKJKCC +BrBK +#cKjZ""": +KۣK++kkK j:JZ:J*;{{[##*+ +j ڂz ++;3ss#ˊb;{ +ڂںSs{"22*+Jzz*Ss3 zrڊK Jڊ #33z22bk kj"+s3+Rr" +{ *jZJ3SSC +Rrj;jjK3#;JBJ+++k#K*JJzbbZkK#KK+jJz뻻*"Z [3sCJZ22J {+:zb*[3/k:2rb K" #sCZ²ꋋ*:Jk#3sC# B2jkˋ+Z*K3 zR"KK *ZjKC3*rZ:* {;+ +z+cC +"bJ;; * ;k + ++j:*k[{K jJ*:ZZZz:+ۃsC;+ ++K+zZk{#SscK +rr:jK +:bJ{CSJ2k k"ZJjc3ssJ2b+ kJj #3C["Z +*jZ:j[33ckbb" +*k*Jz:CoorR"{jZ": +/+zZ22j*{;:r;S/s&&^3￟"N^^Og?>#?#>Z3_s~^^R*sr.β:jOCrNb㻂>NZ_'?Z>~RO:3oc[Z>>>{Ooj^>3'&>/k^>NBCk^^J/_Ξ2?'^^fz3OoRnbcooRΎN/3CS2RBKs/{rR2zS#K +C+n2js[:N.'SsnN>R +3o/R>rooNS[B22zKos+nn:CC*n?_?oSjN~~~n/S{RNβ_?Ͽr~Nr/bRCOSzrN~c3RRoo2nr#c/2r*nrs#KB./Ͽ[2>n2;SNn2SO?[bNR /so;.3?3:sCs#znR?Os +NNNnsσJ2n.rcoO?rn+[3zn.#os*nΎ#s*nnkSOo[rZss;rRRr /r.N"/CBBBsoS{B2Rjks*.Rr[Sss.nnˋ/K..r{sC?:r.+Ss2.Rco? +rNʺssJ2RR*[o?ϳk.nʺsj22{soZ.""*;:.R+SO3kRZ +s*"b.J S;nBk3C Jz.nz* 3SKJ.B"+3*:RJk oS +rR"{# +Z.rK/K +zsbn;S?o:.s ʚnbʋ#K+BZ*j +BB+3C +2 ڢ*{/kJB+*˛C#bR*K/*rRbښ** +r +/?#;2"Zj++J2rC +bBz[:Zr:+CS{kBB:j3ckj +KcSK.bK3c+ +ZBk#/*rb:j{3 r."j oc;[[2Z ++S#Kzz:z+#[k2rZKc[bں# R2"jk#o2kcc;2rB"J*o3[bb[K rb S/CC*b;Zz3sۺښbZz/S +ZZz{ ;"ksc3bBK;;J""ڢCsCSC;j" KcjbZjC#s +zJ‚+*Kb:jc#C# +*:ʛ;;k:"BZʺ3CZZ k JBzÃ㳃JJbkk#c3[jbJ껻kJ:J":;{#K+kښK+" +ۛ["**"Z2;ccK +bj :zz˻#++b"k +:+Z #[+ +z +k+k+;KK+:Kj*JʊjzJ*jk*뻛;ZJ: ;[CK + ⢚:*K; +ZcK + + + ;ꚊJ+ + *zz:jK:⺚b:kKcKˋ +j*j*KjJ"*[+K +:*Kzj:"+KC;#* +z*KJ+ +*;K k* J:j++k*[k;;Kk + j ++kK[K*jZ +j: +*[3[{[+jJzZj;jzJ*{[ˋjzڢj * +::Jj;{*j"K**j*j#[{jʺbJk*+ +zJc##jz"K{ښz:Kc###; +r**+;K* +: +{{# *+ kkj:;;;+B+j +jJ;K +Z:jJJ* +*jJ{;Kj*J k+*Z [ۻKkʋk *j: +J[;; "zj +j +ʚzj +:+K+*ʚJ++ k+Jk{[[{zbzjjk z";##[ zZ +*{k##{KBB*kk*+J"jK{[[[zj+늊*zjkkK;˻j: +**+*:J:j : +* kj +zڊۛ{KJZ**JZbۛK{:ˋ +: +:z +{[[K +z ˻kJZJk#ccK"Zں+K *jں+;c##[ZbbJ*;{* +K#cc ::*;Kz;c:ZZzj jzz ;[;{+J +k*jZ:+cC#[*:ڢJbZ[c[+:Z"+jJZ":#CK Ꚃbzk;{ Z*#33Crr +#/>+3;"c_/k2>&;o'^>O_'O[Zn~^n +Cg"N&~r*3's&Z?g&^ +3';^&B'+R^^N?S+2^^nJ'SbΞ>."oO3ξn"?^nk/_R>bo'#ZNf.sgN&&>2S''/Ff_'/JN^n/_f#fF>cr^F^2ˏGr^Fb{'gâNf*/_G'3>f^ks?' +.&&_g'2>&^n3S:sO~>BKSOO/RbkÏs;Znr{".RZ+s??oJn&›_3*>:3'o{2^Nb'g_K.^:c?_{^fZK.&&n#'b~fN{'g?[B&>/_[ZN^^>Bs?zn~oOo# +.N*[B +K[3#{".B{#s/3.z +KSKr2": SC*nz#rz/Nojn*3?OS.^΂_k2 +_{2f_'/KR^rʃ^^n_'or>>r_oΞn" KR{3Bn. So[:{c#뚲2*;#Cs3c{2¢z+cc˚JJ s33[+r22#oC;Bz;S2nn/O2n.3?/;^~⣏/NR +CO{R^^_K>NzcO2>^nS_2>[?Sb~>n3??/">.kss#*RR{So3zRrz+ ;KBں+{sjZ"BJ cs:zz*sSS#+:".NR:o/b.rz3Ocjr>N2ꃏ?orN.ZKsO"Ξ^RC;bn.[_c^2s__>nZO#> +?"nN.O/RRb3ϿO/[:r;s[ J.RJCSSC2k;;JZ"Jj{{j:bJKc; +ZZz;cskz223SsC*rC/ocj.{sOS;2nrKo +rNNr/?oۚnz3O#Z~Nr[?oZRSϿZN2C?oz.Z{3/ZnnB+So[JrRBJCsC[Jb2B[333kJK kkJkK{[JJzz; k*Jʊ*c[kB{ j + 3/s"Rn +K3ۊR.B[oB>r sO/ +.Boc +2nr:O?o㊂bo/RnrJsooSJ"rn3//s{zRbj#sS/3ZrBzK#cc;B2BbJ#cKJ*++ [ +: + Û+ +"bbJ{{Kk:"bb#3;JR.z+cs:B2"S/3{:sS# BBzKs/;rRRrZ*o/CrR/j.+cS[*z.R#o*2r:/KR۳C{2..2+C33rj;[[jbbkJ: ;K *jJڢK㣣: +c#;*zںs{Jr.Rj3S3c 2rr3o2r:So +rrrZK3o;2n +sS ʂrJ :.nr;RRJs/3[k2.2jss3;ʂrBc[ +"bz3{j""zk;{ +bZz:k[kJ::;[{ˊ +c#;k:b22J;#"Bbj;333:BRR2#3SSCzbB:so#rnRso/C:n.3O*b.N{Sok"3o32{3Cjr;sscRRrbjCSs#jⲲ +;C#JB2B"*c3C{:zJ +kKk*:zzJk#k* +J+k +J:+ ۣ;Z#3cʢ"Z +3SknsSK"RrZ+/o+rnr;soskR*// RRC[Z2RR*c3c RJ;3sskb2rkssj"R{{#/Srk{CO3ˢRBZڢZ{/cj.rnSK&&[翃~^o_c".&s_'/*bR~r/O/ zR23OSsn~oOo2>[OzRn&&.oSO{Ϗ/:2K# +ZS.n~j#33OSb.{O/Sbn.nn 3S3ZRs?S#Nξ +S^n_/#.~NKS/^~.S_S"&~+ob^fOOR^^O?';R?bRNBcCs?{Z2NΎsjbN. O +bzKoσK*Zk +#["z:;C:b[ r22ʋs/#CR"o3#3BrڃOoS3RN>.rk//oJR2{O*N>NnSo_O^&~So'⾞>Z/b~^>Z/3.~o'nN~#~R*Kc?s2.b;O3b2n*o#*r." + S#Z"2 ;[2BB*o3;rBBj[/*nRrsCoCZRrrCS"nRscRn΂/3:~~2_/>~R S_RN2o__n: +O~&JsjB^bϟS BK "NRno; +b.2RZS/+.bCsck*ºj۳[k*Zjb:;c#b:+:+#KJj:B +k˃sCK".zkS +J":oS"ZScRβz?OúbΞR#__ b/k>2/'CKRN.zC?'?KR.'3Nr/Â>S/+ossjBBnr#S3JJ"2K3#{ۺZJZ:˃Kz+zʻcj*k* ; " ++kKz.: o+2R"jCRR2+;r2r o/.ڋos[nRRSoۂR/22.RbϏ +.oo{ro/Kbr.R//S{Jb. 33+z2#ۃCˊ+ʚBk[#ZJJ[#jj::[Kbzcs#[{ڲbJ+sos{"R2k/O#rr +cN.zsOSJnbÿo*Nn[OOz2RR S.ξ*3/#jR +CS??*.nnS?/j2NNZ;cOs{z2NNbo[jRn"*3S# +J:r3# ZBJ+; +Z:ʂ ["JK{#+Zrz3C2ZCssZ..rR{CsS:22B.rks/:RRn S3kb..[?OSrn>Z OZBrNb*ÿc:N +#? "ξrZOsk>*s{k:nN.2 +S[jr#r2r;sKr²Z#+ZK#*kڊ+##K{:j +c ‚J[#k:Bb3S3KZbnjSo +z{S3jz.BÏCj.nR+sO?S .+so znϟ#Kn{?#+n S?#*CCs:RjcoSc;Z2RnzK3cc[jrº3㻣z"Cۋ[ *J +{+ *Z"{ +*zzzJ[sc +"Z;/Ꚛz +KkRrB /ZrRBJoc.Rzoc*B2s?o+2>>s .NbOO/{"RNOϏ3+.nrk3+.ΎCû +RRR:#3K +brr2cc32rJ[##r{{KZ2[ +Zb[[ۣk+zc# :ZbZ{{*ZsckBR2S3K"22B;zrnoSBR*SO?O3bNoOO2.ZSϿSR#s/3#Co3rB[s//S#jR2s3r:*c*Bb c#K:rZ+[{ kzkK*JZzk+*Jz:Z" +czZb*Kʚbs3#Kz2RR:۳Ss㻚2Rnn;3o3:2.bsSk2nBCO3>Rz/sJŽ>nbk3oc+nŠ#s/*RʛCSS;BºKC3;bR2bJ{rBJ;[{ +"Z +Z*+kk+k{;+ +jz{[{kjjzJj{ڢzK#{:rb.R:[CÃN.S2rg/[^FRw7rV3鷳bVjogW)(v>_jV6;)wF(fGiw3Vhw{((gWio.(SW)G^6Vn Wg+Nf(6)W^6&ڣ'GnfvvowG/2f˿) +N6FN[iwKiGhZO hngI_K(bɗOh(^z nv{W )_Voobfh?GiNhF[W:6(V~j/G.&(6nk)#b^vֆr;rvfrk'w?[j'O^>2:ǟ/6"sGwg?#~cFwgO#6GWOvvfWG_Îv(&j'Wǿ˞VF>bs)gSZVֆ.*w)7>ڛ_w3&Vs7~Z/k.ff. +?7#:f&{GofN +k#_Z^2 3g?k~+*3_ rf^rb:''O/B +oS۲&Nr2g[&f>._Sj>f>.gs&F>N'.NB7_*~SGOcrfvFr*'okFv&."'j>6F+7Oc6Nbg?jF^J#.f"ʃSj.&~BJks'O[j^NBbZ{ Ξs/>2Z" /?/NZˏ?o3;~nRjo/^~r#_/~>S''Z^&^OgNf^{f>Sg_&&NOs^nKgOkƆ^N3'/zf^:/_B^&N o'_#r>n +S/n~N.BK?ϏKNnN2oϿKrKS?R.n>Nr SSJ.nN£Sos.R>3?.>~Ro'>^.{?'n^^?N~^*o'g#R>^R{O_:N&&~s'SN*o_?.~2[O+ξ"#OsbNNnO#".n.*Ϗ{2.bssSk2rnKcc3ob2R."Co3*23Ͽskڢ2?2 S +Z>2"n~>bKÏRNΚ[ϟc"R^cO_{.n~~sSS*BR~Jcsϟ2nB s/*rn>N;soOsj..zscrB;33s/.b {[3¢ڲ2;c +": cC+:jbbK3j ++rJ*jCR* kos˺:..ZkSosJ.r ;Cz.N.ZjKcocn{#/Ooz+KOo;2Nnz [O3*N΂Ojr +KSOojnbk{c/n.+ s/zn2 +//kJ2.+ s{+r +*;3SK z"zJ[3+k2BZJ3/crº:;s3["2:S3{Bb3cbb{S;j.z +o3 +n:jK/[+N. SO;nº+c#zRN3#:k+NR"J#[ˢ..:/C[ +njo/ãjBRz +ksKjbRR SC22j3#{B +s#{BZK#{ ;{Bڊ#3c{"ZZ" +ccBZ3CccRr2jCcc#2BbbcSss#J2Rks3{zr{33ã+nRr;3C +2.2bZ*S3nn2b;/o/{Rrb:#[*s3;:22bz C3 z2r"z +sS3[ZR2""{CcK +2b"[sCcc[J2"j[c"s3JBBb;#[ 2bzKC3+"B#3C‚K33;2.+C3ZB2r:s2R2;Csc+222*#ss;bn.sKr.2{3S//.3S/Sk.. +3s32RRj33sbrKcc3kz" +sczBZ +* ; +b2BZKC*Zz+[#CzZJ;#C+br* K +zZBB*{#3*:r2Z[{bʻss Z2.ZC"22jSsJ"Rr;SZrb3:Rbj;#3ÛjBrkC :"J{[3ûzZjKKzBZ +k˛kjZ:kKZ{c#;꺚"Jjk;[ۋ:ZbzzCsS#k#[3/RZ{#ϟjnNrZ‚/32nrSf77fF7fƆcsgg*^FG>fFJg_oK'?{{^^&'LJoF.^^'_6^/O';>N~Kgg'~F^__NZ___>{O'[>N*C_OO_>N2_s*~^ÿgONjS?g/&CgoSz"[?z^~^{?Ϻ^~^kOO?*nz/g?? ^&:og'3.&Rb3_?_>.ۿS'&No'oZ.>nR#oc/Rn23S?b.bsCkRBo3N"JS2nšS2RZso[3?2nRB3;r.b?/k&rzoϿRn'_k^>rS_{~S_'C2f~o:>f?'/ +Nf^^og^^NS;2&CO"Ξ*sO[BZc{_onRNJbnnn +c 3rko3KRn.KC/?3BnRnn;so3S#s{Ύn?Cj~N3ßS .~~>;ss'g[r~3's>^j~j ''+.N&_'Or^&bJo'sJ>zS[B~^2Bo[ʎbo{ʊSok2.KsKJ.22j#3C j+22 z{3Cj +R S +JnR; {3o/r2>;SOSʂ2~ZjrKo_?J^~2o__2f&n_Z&^#?gg/[^&;ogo> /_'s>~N/.nnJObr..Z/oSCZz2+sj{": +CJZkJ:*Ssj ++ʺ;SKJ* + [3jzn:;oK:*{C?/kb[3?S nR"k/kr Nr"*3_3c:NSK..B_/ NN>2ko[nNB˿OObRRj/Ss"b2r/3oú"n[C +z.zCs#J""#C[:j +Z3㣃ZzB;cB"ʢK/#3B2;/۳b +/3 2Rnr S3# 2.2›oS[2r2o/z22R*￳zrn>ssOkrNSoorr.Bck"b#3?o#b.j*/ J22k+SSKbKs3;KJr 3c{++zR:j{kjK2"ˊk*j#*{:{ K[ +BjjZ; ;2J +Ksc#cKJ2rZbscC3*Br"brsC˂"{3srr»/ϏZ2Nr + sS rrJ*CoSrZs/NZso/[ Z2ZSS{[.Z+3[#jBBzjKKZ"b { +ZJk;* ;:ꊺj Jz* +::k+ZZ+ ;[:jz ;{zZj*K3sJJڊ{znʻCSo3 +Zr SoS +2?;::rKCoK + +rn."kO"R2zS:2B:;SC*rCC ZBrzs3SۊB2Z [s jb"z+{C[ *:Z"+j; kjz:{Jˋ*zK:* +++kk+Jzʊ[[ + +B +s3 B¢ʋ/rr;+b..R +o#Rn2KOS[BR.2"*SSscjrrJos "n.›sss2nn2K3oo+Z.2k#So3{R2+3/bBRRz**C[b**c{JBBj +kKkzK; KjZ+ +j+::j:K* +*[K zb˳3ۻ +22Cs# b.js3:rRr2:c/s:.RRZo/c bs b..Coo"2n. SSB.os:bcs"R.bzC//*BJCˊ;C3{*rbj+{[Kjzۣ{;ʚjk*+kJ ; Kz:k KK +""" ;[[:Z˛K:rbk[ssۊB.[ +"rnbj3S J".RbJs.BzCSoSB +KSs#zRn.rz/3K"222Z +{/3cBš +s3[²b";c{zښ;[#* +:z:K{JJJ*+K{{ +JJ +J +**JJ+k K++{;˺z"Jk[ccjڲjK[+J.2z ۃs3;J²z /#2RRb*C#+br.2+{3sc +B.n.bSs3rrs/s;BRšS/J c33r"R +Krzj//˳&rZBgC[{FBow'Z.(2cG/.N/?׷2.v;Wgzn.^(>s'7.2FV +))(F[_ )ϚFhV*o) G#>VV>Gii:VFr"RF6"(V^w2>V>s)jZ({o B"3W 'nV3giiS2hfj.6HH_)g +(8j/9iO^(HhsG9WcnH(n[?i J.ƈh6sg Vc_w7(Bcogj^(F#O'))?V^:s_׏*־*/i{(~2ڣw/cR~oWiR6z{N(Nlj_oh(Rƒwi7_h^":WinV~+')g^(VƢjCw_{Rh(&jOWi/:(v.3g)'((Z[Gi7Ok"{/'{V2[#+znƖj3{w/:>Fnk'7z*?kjfbC?K~bS{+fF^:7SJFJR gCJvn:boG翃f2zw_o[.F"_GvVBrׇO2VvrSFVCWwKZ6V:*ssn*#w_"fJC_wGFV+Sg3k6v. ' 6*O#Z>;j/__s + +^ + +/g'S;^2+Sk^BZrg?SC2ƒ_^~2 +og/z6n"og'36FR2#gGG^v7GO:v&Ϸ3NΊ'776n2GOSj&vχ7'//^osF;'/{&Z/gsc^>2rzgOsSJ^bʣ3b^._O"Zso?2>nR__.>~^NJO_N^N.C_g_+>N^r2f^ +?'c>f&&>k'^&>'/r&^^~'__&~>'O&f&^>rgO~.jgsNnr?ϿΞRrZ[3/ozR2OnB"RO3s32.OSr.rNΊ/3#kn>/_[ZRR~.Ss_Kso?g>^SS_R>N[;&coϟ'oR +r>N^> +o.Ύ>2sϏ/>RNOsnBnr[ϏC/onNocoβ"2Oso#NBRS.2r*s2Rz.+/s "*RcCKsk"J33۳SBz.ʣ{ZRR sO3BBRRKcKsϻ.nN:3s_JrR~O?Crn+/O_BRrN^s r>sS:..&~:/?"2[S3S?.c3Ϗ22Rc#bn;KCZ+:Rr{S/K:*kcoo[K 2nZ*j˳C +zjZ+ cOS; nRzkJsj +j22*s +nrJ?o>J+O'2>>rkc?s+;_3j:&NzS˚z.~B?' bN>ڻˣϿ +RBۛsO2r +[oSjz2{;c +R. jK//ʋ{ [3 +J2J *Br;k +cK;knkJksOSc2:z +3kJ.⢛OO3CkB2C#;znNrs~2;oC{n" + SۚN.zJSOScB>Κ+O?#˚nnS/KnnS?ʂnBz*z.rJ*+o +JRNZ[/sKk;*"j* /ˋ.nº +KsS3#ۺrz + sc;jNZ SosCrb/[J"2J3Ss+2Rr.JS3[ ?/S[ZnR2#oo3[.>n2bkSO/Z>n.C/sccNn2" +?/CjrR2z[/sKzR2bKSO3*.R2*3os ZCϏ*2.Rr2z/sC3CK""Z3c##.RRBcsښ#c#cCKZ2bB"3s{Zzb2KcrrzS/.2s33 r.zo;b.nnz33cCZnRKSo"nR3/3+2.R23o/R.r{[+rZ#3[2..2ZKc[{j"os#[K.*c#:b*[3[#c2rbz##cZzzJK#[[cJr2"[ccJbJ#[ zbbrRk3So[*zk#n.[sSo/R2Css[z2R..3//Zr.⋣#3:rRR2sSc{R2+//RNSN[*::*BznO33Ff&3''GORf#_G6f +sgB~F˻gbFnJ77Sv^>~#緷ϊ'7)ovFGW?26G)BF(&s_g +fVgwW(3fֆ2s7GGs~^j?7s>^ +'>NKS_cS&^nSoZOßZ&&;χ3S_*Ξ&B*ϟ"&^f;_?&>~&BKS?_"&7Og +ffn_7?&_7/F6nS'_{ƶ~_gorf>oSC>N&fNo''R^?C?/n~~{c*~{sχ/ڞ>3  +.nnCZrCS+s/:"Nr//_RfR2osO'K2..?S>&/2^?O'nfF^o?g73b^^S_G&f~ß?7K^f3kNƆFr^&K&;7_o"Nn&O/.^^KOk"N>JKo_c".~{/_sn{#/B.r>c3+_sBNó?k^~s{snN/og'S^&>R~>&s/g#&&Ɔk'>~f ;'gob^&zjKG'[rnj_6Z#&bKbR2s_'C {"r[j~~+S3[ B/o ++>N*2/+Rʊ#S3"&~+ +3^N[r^Z_':Zf +'?"RrB +'_Jr^b緇KZƾn'7GCKZ&[k6.cO3s +&n3#&^>. SN2+~.[/[2r +K?K*.R*?/rb+O/*+ڲBZ*s"*;۟s"jn::ZNr*sS'S:n~2*g ;^N;?{R&nR:oG_s^.*'2&2z3'^>Κ+Gg+&^RÇ_Nrr[o?[^N*Oob.n2 ?R>.N +OsZ2.jS.nnN"CB +2 o.RnšR*#o#"2ʻ# +N~B;Os{3jRn+JS'o>~^B2c_.rC_KfnN?㲎~B.;'2>f~NO?ojr??J^2SSχ?#./Sgb>fۣo/2Jn&#O+Zβ[O:jZr:/323+KKR +.jK+rKzc33nNbK/[jr.2cOSo.>sok>²KϏn^3_3.>s_3f +Kϟ/:.^'_ϊ.2 +zkRs?O +R&r#So[ +Z[CS;*crr*KkKBj +#Cc":.zZ"*ZZ˚ #b2 2: +KB{* +CCS3cK."R+KCcrs?c2Ks3r{Nn^^nK/?oNN2'kZZ>RSj nB"*cjN +;OK"2z####"n+;s+z +JBrb#zû + + +j3 +{j:JZZ{[ KK{;szbz;B"bk3#ZrrZ +ۃ#C"B:oR>nBKC?o"2S_c+bN~c; +n.r3'+.>~b?3;.bz oÚ.N~Zo.₺/S3*Z..KsKJBz#3;:Bb.. +*;c# ;* +JkBz:[Kj+J:z[+# zJ3cC jZr2.kcڣ[OC{NJ[o[2.Bk3os+R2jS +b2.ZK?#"N.ZSSo{*JsOۊnjK{C#{"r;cS3s"RJ*[۳ Kz;KKc[Jrz +K;ʺK{KzJ +kK{ʊBz*Jk[+Jb2 c/s3 + +.zk zZ2+cosK"RB23#ksOo..n;cr2Bz[sO2R.NRjC3ڂ o3+r";#CS *.2z;C/KJR"Zʊ cR2b*+*{.r^/*j?gg''g?3?ON~fZ2R.N&&~N^&cKSڋJ{# nk+3j^+;ʊR^vF#_#R~6f^6{&.')i7Gw'S27LJ2bg+CS3rfB'3^ v~?F# +3)׷Ύ_&jVf?'S&/ώNi{6c+?n?J6Fڿ's'jVBSO^~_ >^۷_~&ֺOfG_~6~W+g?7BfB/2b׷K&sG_B_w_n&Rwf7gbc&(&#k6rVN/Z& nw*'wffk(_抏COFNjo)?~^wn'w~FkB>*3g)n&3v R:7^#kW7^s{O^^b'W 6(o~~"_)76rv:w3'ζKfBg?fN.O))/B?62'r")W&JK^(_'2Bf +n6.2g*KfsfZ)Rok/{w/.3r^O_jRg).s:6s.>&^'o.Cvs{~)S{ZF6ڲb73K>/;nN?)_nc{fffO#n^63w:&N~K.CO&[G73:w"nf?:2"gj#r&6^JFkK†G&3Og.^ʷw[{Z?k +6>'>"^Nk*;r.gwo.>{n>O/2[?/2^osr::3~RN^[ ++~6ׇk'ò^sC&Wg~nKnS3 +gf>3/ZNR +w +⺚Kƶ+Wn.{srSg;7N{o Èv>g>:.* &ww ?Zj.fǢϲ+[sζ^+3C23oS6^7[j_KBG#bO>r;F's‹_N:cFwrz +{*c/32 +#VcoRn:zc7_OC.Zj_;G^.bjϏƖG'{k"wZڿ#.RR*_>FB'n#*.R;j/vR*__+C(&ZCR*O6+.C#*rVf[r?{*J"Srv&nrz +OG#&g{>"NkVvC'KZ.6O/32ROfsCSbK2_;6VSo*r^"3z(:sK[N^K_>S +3{O.+CK /^(.O[sSZ.g'* 2~Z'^?/#zV>_O;"bN'+6>O+czZΎ*vf#+Kbns'V&#;jJNOφ[/z.΃{FJ ˟3R~Jg˖k3sz"NW_*[bKRG/6ksCF"S+Jfwnc +C3jKBN"_&N[{珏3:^Rg^3S*jrǚR/{ +{z^RgG#S^'rc3[nw&3c3jj&ΟǛF&"Z:CS6+Ϗkk~#j* ^^o&fJ+S?/OϞ[&:3{cK'2>;ÊJZS[nr"#s?.f_/>z[c#^g+ks{zS +'">nS_zfrO.fR*Os+o.6Kn:[+rB6>O_z&^~nck&._~++Z~?Gszz"3+r_j~ogN2"C[^^'nC ß:/ +z+#kS3~f_sn2GCZ+r2Zk'&6gbzr;'/F2#NNbsSKnFSj2B/"o~b? ʲ *>FRRG&sˢBnn[ +ŠC.O^ jrNgG;f~Ks+.sZO*{Ob +Go[r:zGs{*RG&&?/cnS>.3ۻ+^c#jOnCs3j#{.SSoSrʢλG#c{&2SZk;:#rjnF>#rB'kK^~c";Ǘ+Kn[R'Nj^ +C?sr[R#f";:>&f3{NJBGf?r>n[CZϷnn"S#nrSOs&rΣǢ&k +Ww&^r*o2.#g:3&R^'&VhV>6"+wF_ g wW?fi9g+^c&wɷnڲ2C?!gf(F8f[__jbHHfjOs^2:S鹹9W[?JIW )&66hK?*RfH‚sɉ'^zs ')6(ho>o3R~ wwwGghΞc+kR?O^&( + #:bV(nCg7 Ks~?rR?7.*~'jG 6G_'&f>>#k{;#nWw{WۺvFw# +k.(6*."V6~F_wwkf6[k"Ff6S)3& w>FHhR7_NOno*Fbssg>VNoz/f3zfV"S/ro>63[;)r^Rg'"oS.fz&^_Cn_::*"[rZNK#62rg?'g_Jþ Cwc2+(vf*?kVNj/?:F6S>^7;v~2*SW^_s7WN&&gCBgh6ƚJ'˻fJFr*;3Gb&+zG/;FB*_;s'b{RsgBcSJ>.SSsw_?;& +3f?~ˆR'sO*^f>Z +wwk2WOGgoR^{_7rnc^6&K{sSrffʊoo.nz^gWGs +3(ngGgR"fF. c{k ƢR .Z_JfJsf_oKGkoFJ.cbSw:#2nng/'f6^֎CSWz.&':i +2[FZ{oGcO OB&o'o.[jvFc*j6_^wbFJ‡&bF{)Ig~R(#s>_&c3gkŽ>K7+rrNo'Zo{~&Cc7n⺲/kg?O&^+'CbkRvS'.NFjZRR^S7ϳ22+;:{7_*3 +r2BNoK;&cz'S?sfNjJ+¾F +o_cRVFo_ +G'"N> g7z&Rnnnrzcs:/?Ns&"??sn>2/3ˢ'g&>fKg +'{>2>2{?G/F>r^>Bb3#_/Jn"OZFZOsZ3[;'3[Z?2.bnc3z^3o#n^R[OǏrfJoZ +_#fK {O{[zBF[zR/n_S˺J ʻnOj^n:" >f.n+2 +OB?r#O/+cBBO+ ;#.J+Z*[R2rfks+;ZR>*K3z~'o_Z"N>rR?FJ3JS_j~nNs_[&&Rbj'S3n.+{*S'~N2 + +rs +B+rg#&zۛz/rn:{C^+cb뇇KƎZ3 3~^ 3r/ʾ2cSn~n> +?J>~& +K _ZR&&;GO^f+o3f~.?_sR2Nk3Sۇ;N B3+/ZF CcO#s{{~NbsjO^r2goK&ꟳۿ{gk^Nr{: . 3#SCf&[J:+"r_{j Σ.nr*ss_b#j+SG^r{sO/'_>zs/&.n"//o6~;ۻC#~R#_OC&~.sB?/&rrK/B3n"oo";* +z2 K/r/{.2~&;//O k/^kϳcO3O#&Zrb3_SZ++R+#C +3nJ.~RzgRz2b"& +OB^[S/r>>o_g?>^~&2/oO^r[?snn:K? +c3sJ*bboS+*s r:KSSnNN3 +B 'G'n&#o/_OnR+z[32rb+3JJ/nBsCڢ"*.zS3[;k/B:*r;'#nNcKs'/^~o_K>kc?Bf2o# [ +&3CC^:S#S3r&Ns;zkOjRN‚ cCJk{z.rΚS;#""?3_J"*ZCSos{:[O3S26^;Gn{ +njrO)OO&6v6{Z>ڞR^2Cyw.nrKRjN/2G_GnNV^vws~{f_^JNGws~ &Nj27^Jֆ.#7^kVJfrGiK v&.^S/Wi V~Rjw.^螟nr*cog_kR+N>23_~&v~'/:&7/r2n)_:~~n[G?o fFnK_ h/n"2S闗_OVγš+7hZRR'+^6 J'oj/ƛZ"kGG 3JNZsn2K:gGc[r2"~3W)W(~J>Bg))hh"KoWcs^R.S{_w&cۂ3fR{w(2nSB3Z~~g_ZJ2N&^2W +^fNgWOFVn"w׏/g(~+N2s/'VN"bBbObb6Fs#OgZ*f;s S&CJ22.#_+.b&f#.)2&[G66^RrGj&jNNrs?[>&B^Sokg_;N~fSzN3׊/J[)cR^")SRr&~&&6/.wFfsחSJNCKW7KNf&n6{r#dz)s^ᅳ'B''+LJ"j~?g#^^ + n/B.^S^SjsBn?2N{>* +O.#?~rʞV*†r7o&>"B^ )?G~&(bj~K?wOfN^(:>'/[o_R^rFR/nK*G;CRj3of~:')*F;:[~vR.KOwg;.^vJ6'gžvz/.ss'NnK_[R'.r;*fr/j>CGnnzON>*NZOJBoNzJorBG2"N.2ζ26ck)(^fg7)^Vf^^'s33.h~RO'7sf#(⇏S?{"o.gF:SRcoi*Nr7))S^vfW 珶&ROO*f:>~~3N/B/jRnZrg3:SOfZZ:.["z#onC˲?2s/.:3gncF +~b3SS_f::zۿ{&&og3NNf:cgR##r^&Z[c"[3:.R2z_"kG/r3[s3)'&&>{?*~^n +O'R&FsR3˞FCGG3;^ƞf ;Zo#'n&n#+ N2CJ{_[Cr[?^n&:'SnzBk&br{'RN+>#>&*O +_?;&;SOK +J~&R¿73o/:2+ +nsJR +[[ +J*"bo2NKk+#?gj +n3λ g +Nf^r[kJ/ ʂNFKfKGWj&R&s.n&V'?On~'O*NS2N_'z:n2?o>_bSK^2~BnO3r+O~v2rSz3jj.B&r:{:[&k +"j{^*_jK/?r3z.c'" nOrC>kc_rn{^ +n⋇{&{{7bO~ bRsW'Skfno#W7#Cf6s/k2#F.{SRZoz3z^C>#&B'Jb'gBs2fBw_w# +6.SngOkRJffJGngZCz[#?O3nNSK~OZ?>n#Sr[RC.ڏ"~?2J7.{kb"#J +'&K k?r j^Oz[Kcn2S'R&Bo'rk.f2zN"/_k2f^> + +~"bZ +Z[3~/o_K2>J/_/r2.v23/??[r2 +bJ3ks:ZKf ss_?j#S^Rr+/_co +szʳCjCrcj[rZs3Z +"zjJrR>RJ+Z/OþjRbKko?~r:3j{s[Z>"#[S"zξ?s{>. +'CJ +oN+3j‚rZ/[r.//kZ>RS ;o *s;c‚R.2*z3k + +BRnKz3oCs{RNR++cK2JJz {o +#K/os/C{bۋrrÂB*n..J;3+2J'3# kzkóZZj.z:&rr2+o >{/;CKK" '/2*ΆR~3rz&ξF/3;_''iyi )7wii'7_?ǗWw'Gχ.~;^^ff(h&f8hxx(h^^nF?32_2rk>戈6*kW ') )၁!gJ(0pP,쬬АP0XH88^JZ2(fkS 7 :v(K'/?R>Z3?gWW?zHVngwj.^6V&΃'[R~3/vVfgiy W)wcFhFnfֈ9y!wwg22V˳_gWozr>N&6Hh&rgϛ6*/'G?S_gJzVZs‹LJ_ggjrNH (r_WG_#"jF8HvRiYWii)G b^vf^6V(.v^W)WgׇN.ÛS_ÏR(fSO総OzFFv&zS7W_'3K^Z/s)' +'ˆ((~s:3.bg۞f澺WiIy9Cb&ff:.fVrVV(^si)Wgh2;wGZ&V(f'sz>R'C3r 'g7''wz(hv&'_OGOhxXxH(. +goV(&ˇ)iyi9{N.˻R>(8HF6OG'I&ƶF.S__*H(bg:&(R_w_~*/2g_Oosj'z(HhV&^S;_c>SgO_緉aIJ&^FƎ&^6(hXO)׷Wg?jf^z_s3C(>{z*?gG^[;#{?':hƶ2+oogc~Hhf:Sg6v>'?W))99 WKNJ{KcZΆ(hxHh^&~+ۿ'IyI#Zn +BWg(nzZS#^vFN^:oO[fVV6._GW7gS/'/^^b:zK?6(>_g׉yyIj +b.r&NF 3g'))_2rS;ogG_o +n&(~ŠkrB'/Nz3ںSg*^>>2og7WiW;fVV֖Okkc>F8(f.:)WWw/BƆFf&^8hoW){o3[O?JfHVrz:k>f&RCgwrgw׷S{jbf6fff^>[;*FFfrOg鹹 7'_cn6vhxx zZs__s{.>rsS?W;;cJrF{{rj'_''ϋOCS#sJJ(^?'sۇ;2R^V^~2"Ξ3h2sg)G7)(f~N#wWk'_? +_Wg[vh(*;;{2KW ^&&;)W_[N^KOGJFVfg'CZ~:_ ƶvno*2fƶ^G3&Ώ/cGiY9_g/2~/'f ``N+"Nngv^Λi ׿3ח&O:g'&n#'SRvj?&# JKcZ&F o"vVh>2#bn +?wG/kj?);22FHv&&Ff^jWG>_Gw_W7'R^FƾnKr /j^&nCo_'[;jK"'7''σNRSKC.[_JFFN_)7WgOWG/'B+NhVƞC? G_WGG_i_.f^N~"^Rs +f^.cg?rnOSCk33K3ci? >& /Rr^揇j6h[nfF637?*{kc)I gSw^fN(voSvv>7o~rg7ϗnrN6&'.FhֲS_O j'ok>Ϸ'/O/ +JCnZ3vbr.r6vRgGg/ZKw7WiG+'V(F[#{shrJZ__SSi_3;SZsJ^r/&Z[[_^;'_2:>OJr~bj>zff[>N&NFgr?7Gi)wg /&.^hf&6>n#*ڳ_'WWig__"nr#[˿'o&r..;[Bo3b{rnRZ"O__ÂJ;"cۿ +cJCKR3cˋNfnk?'g;g緷*Ã.FvVVf.jZ~(^[C3O_Gg#o 2&^κS[j'gggOoR_/Cjn>+2^VViiWgOOo/k^f&JsO3&^6r2NgG'J/s +sSo?GO# +jSF^(v&..NOLJWɉW7ccf>VVfN>^>wiWן'rKsKSo:fFrjn?O2f^Nbn΋ϟg'ccKj +)'*n>nf2r&ƶiWwIiGGs>F(((FC{2fF66~r{ )i)W?''33 N:^&~++3ncn^Bk2"Σ/g7_ϳCJ?[b^"N*SrF((22"RWi))'/gs2ΞK?V^ֆh(Vn.szZiW_c?_&6[o?^n6fS'/)χ.֖n²Sj:gG +V("/+3#gc"~6Z&v3;n#_WɹC?jb*{RVobN6Vr6F>9)_KKGoK.&n.*#GF~WG3J3*n {w_Z?>>"6R{s)O +ZCRF& #n*'G'Ï_B>2k +2^F(2_?&RS_wW_'7:k/so/z#j#2.BsC[s_kz>fB"n3gg'{RR6:JKG_*3_/Ks;~2s'kn.6ξ#G'_O;*r>n^^^R?C Sc* ;zK3/cǟzcrR[R.R&vb.?)Wr"^6r"cBK*iJ.'_o?2&#'r*fnfBB/N2RO/ &v>^n6~6nr +fGO_#sW'g_[JfhO?z놶cz[NBFƈhb_?gn_7_g^˃c~[ZnB +fN~S'gn +B2ƆvƾZg?Sb3'Ǘ77_C*ûr"V(vf΂_O2fFsBs_'g'^Sk^~r2N* +rnR#3?)iOnV.&n^B{ogW7Jg'7w׷[F(v&F::b iB:Z⋳^JOg'c;*G_~g3F^^~n? R2.k^2[OW)ǟo#??R^^&hoO{Z/)Gϻ3s'ocJHR3/ˏ'7wGoʳR +./oâ+"zo^(f2{KBb涆*SgG~2rKLJ)i)w_/N6Ɔff&~& ?oˋ{sG_7)gf6v:>"zZg'GCSZ+.Jf#oozzkr>*/ +~/7'gsãK.s[gJ";JOgs?/Vh;Rʻ#bϳ_'?SOG'7WgNj..~N"""(N23g~kgB^Nk?g&F&^z B" _Cc#K[?.[sg_'g.B>fFFf~Zc C/?o{'_'))W'SJBf6(VƶVf&_'oS>^O3_/s_[[ ++.ΊSS_CF.~ZGc33 +SNfnFv^f/GWgCj>2+o[*_s_7?/#fV(V((bB3_Ͽc k'ϻs;:{#"~'cھf^r[ +"*;s*>&*zN*K?ww77'rN.rFhh>#jZ3og*{"37׷_3SJr&&^NrrζV6F~2O'o{+>^Jo'_?ۣ'gZ>.bs~fRn. :Kk n~.."'?//'G[;^>&(SÚ6ˢ ;z?gwG_'w_wW ^6rβj['sk">b+n.jj&oC'S&6Zb:*sBˣSSs+r2>J3K7__?&&>rNNrƆ&6c''ss.N&"OGo'_S>&&RC+3_GǷ7;B>&&n~NB;Oons/ +;S_w_[KvBK΂ggOO_7g?F6fF(hvFF6" +#:SRo'_ǗiwWg#of6V(^nf&n&FfnNciGK&~R/k +oG7w)'sos{ʾVV>[n>뿿zS{ 2fNʎ^FrNh(*7??szN&_iG_.Λ[/VVh(6Oo7GBKS?;.J3חs3f~;"~(#wW3k;[s'G7Giiw{(HV(hh(;_zf&JS_SWyyI9)G_cVFJ;3v66f^^{)NvNnnBcwi9I:^FFrNJf>2*N6.ʟ_'_'#gwGǃfvHxx(6OVH(^/Ǐ;/''3rΎK۳^&nfrsWw'ϋ~rvFf^r/׉G/~&6VV^f>oG7'32F>F&rKiwG_/kWg7_svVHHJJOSkjf6&~ g9Y ))W'jnZ;gfF(VVh_^6ƾrS)?BR^6&~bK'Gg ++[^C'LJggcs?s7G2hX63#;NNRg)IIILJ))SogGw)k^Vֶ&jKR>^& 3w)7Cc+2~v^J + W)gOˎ&o_)Wg>rk# #2.n~fvhHƾc_Sz+RR;Û7III iwgf^s'_&6VȈf"K^Ff>B/wOnʊS+BRK//?zRN^"?Z"R2Z''b&ho77o#v62w)WWwOo/Cڏg_orVvvVf~&J?/3s&W ))cƖ6^bKϿ'[ 6Nbo'g^BocSڳo;F6zS'_/{r>Vֶ6RS' iiWS2.n2RßGG ^8h~~CsO_rZBC)7_nVfʾ66FfS?_wwWG3+[C?S_'"(hr#'R^(6ƎzG)WG{#7Ggg#v666&f~B[? R>2~2+?w wg/&vF~nn+?g +2N^^~b3oO_O:K3_?[3s?Kr^v^[C?Sk*F&ֶ> O?gw)i'Sj/i)KV(&RZNB":JznN;Gi)s*NNfƶV6~kSO??3²R2B7Ww&2SsO/fvCs#k>&fFVf>*?_7i)SsC?/2~hh(FvF>+ZN~C)iWW))_CNv&~"s3#Cbnvrj_rb2n3 +#?_nƶ: ;sob^ֈF/og)W7Cz3χ7LJg[>v(hFF.b+b.~^2Ks_okNNfkk_g_S.&&O'''o;nf&f&.2OFF&.;OOO'C&6N~ S_;+;Ƿ';;/'>&vN*CoNRZ?7W)7g_#RFFFC3O?jƶf#/c +*ÿrz  jß_?'rnbkkˋ/bKV(^kg{Zc_GG7''g'b^&~rnN>.^___S?go[2^F2*/_g:bj"3s緿S>.3ww3v6/_'gjrNvVvrc?';gg'g?S'_SRFVfn:{">FFnS7__Z.Ɔ^nn.{o.&f[3'gsc_G??SjR.NB3OC"R2"JSsSNhVv>bʟǷ_ "[ii_3oC# &vF6~~澊/o/sO?O3r6~z_2&f&>c3?//?SrnRkKk3SoS>2r_g'o*r:.>^^62Os3gg3/og?S;j.fvv֖ffr˛fFF^"3Gwk^~.2rk +Jr +/o/{J.>zs3#2~Ǝ'7/ʺR~^2 /s3 ˲F6ƞ~f2Os#Gw_s&SccSR^RR s I +v9g8>i*8jh& +fOng~327YɷW' +O~*NgzR){g;^fvzr&F&n_bF[gSWooc2fFR2ƶVV6bo?wgC[_(fs*.+[iS9&V(6nzG+g zS/7G*2vh(f>6vc2_'_is[Z + ;G;3/JF(^&fǷskNR77Jk 2.F/^^;N(nGgW3bv.;GO^^K66+3gח^~sJ^v(>f^_/sO__BWW' rn">6f~^*k&6&WLJsbcnz#gF3k2ǟ~N +O/K?'___2&(r"Nvbs_N6KRo~^zSCc'wW)g.^&(ff.O_G)g'g'Gf>f>k +"goSʖ:K.fRcs C_2zr˺b.scbfRC"/_gS3_ ;rSk&nv6&v;G'W'';{;^fRF֞_'WW^v6ֈzzz+gOk7))GBچV^&F^n{.r+&66OGwG{s#g~bvS'_soOB.^V6o_G/*b'LJg&ָ8F>2_iw_?ZgZ^FV&^R_[{2óG)韂>hVb3;.F:J.kSy!_hH(~3R~NFVi9ןnFS_?z²&n3W)G?2ֈ趎w IG'kvV_Cgy9 g&V趖)'O3_3r^~^ꗉ9w( x88(JGogia7rXHN˛SZJ~/!Y x8Hh('o/{n(f>Cwy9v6F{z&RFf~IYysf_b*.cI'H۟' '3²WWg&xxXVs3og3{3 GIIVhF6.zf6bJۃooWy!Yy)6X8Ξ&23YٹyWV&~o?{3˾))GLJ[~fj;2R:_gw_ˆF&6V+j_3z.z yIׂvhnNnJ_?)7 I_k8hV8VN.7׉WwIW7((V2nVV~&+Z:/7))iS Nn2ƖV.N.RC3iii"f&&hV^6RZr +Ww w33^8H((.ۛ OG +k'Kζ(VfC##_)iO*rnȸHhH6NBo7)׷W9yɷsrHvF((>f"Oy9)g"&V((F^?[_#/^&Nʳ2ffoog?'/S.FvSRKGi)wFv(HVւ7i7IY)GNf(Hh6>V&&niGɷ{;R>f^f7NfVF>{nɹϻ*[+ֆ&vV>jrJw7 I :nh6ֆ>N*sK)w^6(hR7O#_z)oC;26Vh[2>:3>'7Wi.vFFfVvno')wWiiw+~(Ȉ((VR[_RoW)WW )_K^F(v^*KBJ2^f.FKo/gOn˞BC">&^v7חg'Wח7/2 &V66>óK㏛.C_wGg>vxHfn +cc?/c?/'gGϿ/V^^6vvh(.:WW'7:Z(hv~_KS_GW){6v/cc_gz^?#[^ +rR^&zS3k>~γ[s~FRSC2oGo.z&VV66vb(fogwi'#nH(&fOK>CooS3{?> S3b(vvrK__'?G>~>>fbrvnzJ/so7OkC_;oN چ j2oW)wH~&WZNJvfhV&)riY?W7_^*`@HBZ'ڇ9!W2hHx8fڳsGIaRf(cIs†FN^ZFV(SN))/6vF (KB!B^Ȉv9))yNnVX& (nF/!w)/_n J/F {W׻K'Ɩ&(v8J?Kgɹ3Ih6&(rV2jO#7 iaa7Kk X(ظ.?WIs6.j(f'?g{.3.~#*Ê+s{jWf'6#oζ;Z"^cϗ?YfvvF8h +&_~ +i?6hv>> +[+#RyW';)vH^"F8g(&_K3c_G +)fkvJ~Sbnrw?I)֖8hVgWy) G886F79)"_)?+w*~ζ~^6BG")"cj^obf)_^& W_> ;hnָVۋ"_.g?Ggia)FRB&(xhVȚʎgIWIIow86fv/o iIW'i)Gf6>&n/jj7r6Ά"?7'*/iO.R:f^6/+/~gy)!zr*xH V>g3_yW 9 W)HHf3֣'_7W_nRc^nR{kFG7.gFV.^Bg7I7+>*>HrsknS)G!yWCG2֘ &Ƣ7>o_ 9#7og?6Hv(+' )sFh^6Z(?>3*h~no/B.7cƎxhNrZ?7WG +&V&FȲ/GWW_ɉ_G(Vr&rSc sSZ&f(ZG'S{+cN&F'V&)Z+_OΖFX()G iiWi(`8&&Oiy''g7vjVFb:oig7W"6ZZr +KW&FVn(^G?oCG//G)gw[:V(( :N[;/^W¿_wO_+hh6s/)ww)7wgƛ~x +;ff>zo + O.7Oo#k7SCNvhz:~Kg.: )'_/hHHVNSWIgw7NCV֞(hvV ssgI'_.F־*jiigW)'GS6ƆcN?Ck&&c +?S/繉3{(xvH#yI!W &fhƃf?i/_g#_szCvfV(2R3&[;#+^:* 7 i9_WS(X(kgG3G__ +b hhhV(G'9IWw_fΆVN^hHC77'3:v[>: 3+/n:KZ~no77ϛ~*.7iWHvB3_sGi W on(vHV֞)Sgڢ's:N.VhvCW9igs6n~~g_*RCN>nf2"χoi&Fr'o_7)wGi'b +h8ȈvRi)WWc[{(os'Ɩ&>FgiZjB:f;3N2ZFN.f2KN/77w))''(8V"rG )K?)o;:~&xZ?WigsVNf.>^~fjfFG)_'#Gg>2^SBf >C#;/iWgWgh(v("zI_ijOGgoڎK(ָ8ȶf/i 7gs΢6Sb~6.Rw''֞RR?燷sFbr +"C'c/_7kVV(8hFFg)'GחS?JRn㏷g)W+cr>j_z(vf6_w*~NfWO[O//[zF6r66f.z3W7)'?;Fvz7wW7J>&F&V6F^__i+N&~N22R#'sCV"C#c3#?s>C[#_n?'*~ƞO7wW'7Sr^f~O 7IoB&N N&V6bWWGwS2fڿN:B&2n&_Wgg_{ #z&v(~R^~Bvr S_'_gg*.B6hvw )C'FΆ.FhfB32"cWK+›6 +'3"_JVj~[+K7)nRgH6F6H뿟w)Cs_^RNvh6h&gǷY I2"~O+6>R>GiZwGi? +jF8hhJ/wכj_NH67Zsj^h(~~(_yZ&Xpضw iwi'&G)'W)o'hfH JiI)g^ƞȈ6yIwcFz r) o^ `&[ٷ kf7wn(H`s iyY)Ƀ60`xRǗ wx8Vi7Ww?>s{38(.3ןRbv.yyaa) gc~X(IiIy +H@@Vn? #>ZwW )'B*^hBj:w*rscxy9 #hXf"o G(>Rjs)~f>8 ?WI1II7)Vo"gigz +SH0 V({gǷ_W&n~zgɹW7Gh'aVZv8fZiiiiW{H/g; +/3?_":#'g' +2nr ^> iIXkI9JpЀHf;G7)i7._'SgSʺ vH6Ww?;_'b`h39y VXFf.O GwbƸXFR..g_W:[`8"鉷 iGiWoHn?7W7GwrXp0&G7))wb>/) Igs~xowWiǟW[`rzi R(JG))I((62V&~zhxF'iIGۈXG ayH XH^FF.b)I׷__GǏ&(&fO_gWx8Vvgi)y!VV8(/') IWȸV^W)r(Igw)3^V((w7o?牗6h8v#7׃&FvW)i Wחizf>f((~)Iwj+jH``sG)G ks'? ˃3kڂiw#ff"Bh8H֖gi )#vVfW׷ɷw;Ȉ6VNc [B_2~ڣCS'SR *NCzg_3wg)rHXX趶)iS^^J3g')?>hF~>osGV((6n"OgW纟G)w~h6s'SkGy_ +(h6((Vr^v&b_Gg'׉w68>+GǟLJVR&>:韟{&r_ww"igf6.hh>S2舖FΣy)'WII7xh'W'7 9w6xhF#r(^f[)WbW 7kF^:sǗ#oJ枖Vh.9 w_:RFNJ7wWiw?{ZZ?^N.Fh.'9y?K+gvv>.r9ɷO#&Fn +.sJ +__&^f~";cgW WW6(Ύ_7w6(H6VFkoRWWG{k.JK +?S*~&goJ{G^.oG[H(ֶ~wO9 *;rhf.3igָf^*z&'LJcgoc֚g_sNnfnڟǗ)_*i7˾Zh֖hFFIY _^΂3O'' +wiHfc_g?O^3wȖr+k' ?_ +2)YWb"fi_ +F#O~wiÖ8v6F{7GI)?N fV/ww~&:WSr67gG;f +'VRJ&og'Z_36+ێ~s) W2Frgn^r62nv(SOWG>N&^sw_:O/fβbrWIw'GVvZgŸg[g^j +ww^*6~(Vv +/iCOs/C_^^v)WW_^SR2˿_2^VJ+Jcgw'2FW)#Sfh'B?)C^'kBZow ?2nK/__2F(>#Wgs~/3j_BNrr' 2&O/.nzGG/(:+>n&32wG'&8v((fiwG.OZ&oVgwG'3(f.Kg:K/2&:[.VgW S{n.{Fjc>RsOCz_WvVVg''i)))皎2fR[(6R[?;JcZ'~6^O_b [?VN '_s^26(^#k痷o>V(h#N^ wˣi +fvVF:2 R+s3G. z'/KÇN^Fnynf8.~c鏎F:ff3'חOBR +2ϟb&nI6K_'32fHG* y>B:VO*rh&o68v~c9^OvOhV^+ƶO_S'BN(VwhrR (^sz(s>G&#^vBCi_׹c&'(F{K+'X W?&n3i) !!3*N&b#V{&Kƈ8)w6K6_f'9gWGv()ƾ'/._V惚3FVb6Ia3(zƛ&>j&x6&vOWz')i99_Frk&{?(n7^S+/rBiBO(fZ;3z柹GW(ƶV~ÞG6&KhnzRii{kG_*w_[g_薆^*V6 +^NJK_>bv"_y2zh>Vhֿ3R_G + aaSG';:&xX6vho'g6wGgo_rzvhH..&937IWCvVS'&(?VF((Ç_F;6(S)+:fʉ9rh2_dzV_*/2 K>r?JcN_iOo)Ii2VV"F'k6fG3)79J((&&FVB"Nʳ_'FvK7'˷'o_CO)k6gbǗ(F?ng梳/?_w~B_C{V^.3s?+fv^gbBsO_:6^fH(.V2B:7W'gɗg);V裾HV.rVr"Cc77b "ZOSwO~9z3nF': +OV&&s>ƸV9&W'k# i){G{S_'FN^s /(ڟ:rn)7&V#Ij(6C'zB(hKnS6(7kNSwig#?/fƞff6vh6R[F[+R?w."s.oON&N)WFf3)_3r^WioF +zGoB^h:S&W.#z7[h7ZoSR26G_./>W;v+3/SnG׾i^n^Z[oRfbh^2o'7IiGiG)ƎΎf(>(H~r_?)'&kSzf_^h'?g[J^6fn_#2h(Z6.gng /scgo_"7&~Þ^gn3&KG_vFB2>^w~V~KV(R>nfo^)G7)ii'Ww[F踸(:6nnN>:Ggw7)sfr&C۳>'&>ik~g +N7vn:'3Sg:W&# GFvfR~22K"ח>N'闻r~^R?77BS#3foFZn&2V#(Vzo)) )CSV&h8V辛N"c3cWkwg*#NgKh^cG"f /S^ƞ/k:O;:g"^2*ΆNz7v{ +.nk~Ǘ?#wgOOK>&cS&r3G'{rF(F^Bn{_)W_ iwI/r"[/3VhHRHv>&{ gO׉GWGCNv&O2R&F .FfOso{_sn^z^~NB'oOOfr#'znR'..^#~_w_OC3fnKC>J^~f:3s"wGn~&~h(.f +sgO;S7)JsF_r^3+:OKO^cϛRzgknS^_F&"_3.R6R6 ^fκO"盚Sɗo7C.Jwz?Fƈ(f>·O::ʿ)g7y3#"#(fhFhh^Szo'GwO7z'_ssvj˖^w>~R6#3{_'jZK*zFJ~>b3:J{vn_rNoÇO6o+'?)RC&cw&s^rwWGO'g)i/S"ȸh6xȸ8^r)'iWg[kSC翺J6.h8&LJ/J2Nn':K)g7'g)'Swoo۳⛿.c&('/f66fr#B^b_>rr^Z7JF+zGׇ'Wڏ3 6V(FhXXH(6{3.2)iǻ__/w7;')WSIrws*o(fZN^'F~(6FNNZÚgc&o?''.¿.~_W/ff7'.JsSB"iCb^ +v/gK+k{N2_gW)W WnjfV&h(Hvos63SCi)_ϟiScgG['nF.(興h&2Fn'#;j?7 +)GWyG 7Bnf2f6FF~n>V.R'#SG'rK/÷Jk&Bw~ J#F+z+Ϸ)Ws*((ֆhJ&2['g[^_LJ_/g Bo.{2z&hhkKrOh8vfF +Bs?y3NoZ3o_"3:&#'~K+{rO'.ggk3j(>CBN?ocr&v^ Kci)!iOϏNrFFV(&hȆOO'GK.k#w_)s7';VFs>ζ&j"Ǐr7'OkF2~G7IgKrO>[J_;Zzgr&N"ۂ/~_gsiW'cn/&SJbB>BjfF3 9__sNJSJrFFfȸzSggO7goNW闿Sb?R2V:ϞF"C3 +&f_~z{irΏwnRBBS[wn&Nr_OgJ^^N>G'3giWsRBN:;v^;g_f~{GrȖSf.jS '7W)W3㢢F(VFx>ZcھOg'z>[?w wG_W; r^z>^~{ۆ^B3RkVv^{jc_(g׏˟C#'F + CBrS~N+W7).S_zN^V(NK+S3;c&&ffjsw'g ɗ +"So +N&V6^h&R#;OG?s# +/bsg)/&.fNJ3(j?'z/k^~rO׷Gb:&^C/?Wnr.fv3ZJ[v[fBB27gWii';j^Br~^JS"zڻ(~fBOW9))ǟK/gO)7[Z~"f8jR*; + + .sW ׷?gOK6*>ꎶ6NCN&/"^vns' +:wfBSS/S'*)&Z".+*^vƆΖJf#J__z^"{gO^&v&(&')i_kN&&fvbN~_.~'_)LJ/WI2rf^ƖzZn3)r[gǾ~Z 7Wʟ:Jsۗ'3*S_cھ.&66>&v6 WWgOJ3 N":>n^F32&*o779s#SS?':>&JֶvvNB#ffOk~.[gW_/_. ~fV^;gGo^_g?f[7NJ{_?ss f +ncoS&R^^fr//ÊV&_R&wחGzRfZ"fVbKfJ +sS.&FBs)g__O#'soc +nϛff6f6v^c+>g))))_S*^FNfv&vƶ^~nZ +3s[jB*o'g7磏b> +;;3S*?.&΢.j&Nz"V(&2ʏwWiI GszkcsG>jK;2>^N +RfFv*O+s CS3_χG?_&f~v(/K#[33?)_?f6(( +b&{bR;.2#Kr3*'k'[rS۞^K.?Zr{. +S~S/CË~{+Rz'gW)WgZZo?[Rr"Kۻ;^6#n~&N~Rg?/gC?77'oi;O +FVVkfVFNFƆkW_gj3:[+sN:&>6C'sOoCO7LJ3_gR gO#R(~b6vHhv&_w_iW +J:SOSrVnrnn((^j¾׷_Os:ogW7OBFfC +KƆ((F+_g#" ???S+'^ +'/jg'V(bnfNO{?&Nrzg# k??_'_ff?OKþ.3sg"(rBHֳwG7)iww/~^O/&fJ + +뾆^. +zK?.Rffc)_jCjb2ffZ/kc3(ˋff ;{?ck7igk2~nW7Ggc~Sh&^f6v6V#3Fvg'jc C⏚:7>h>:Oc˚))W".Co^R czB3F +o_:>+_? co*3׷?^66"n/'o6&J3*ȈvƆΎRsWwwi)>nS')iw>ƾ[N>F6Bjo;cO_'j>fr#'׷3~g'2 n2^OOzfvZ3ggzfg)wC&N7'k"FbCskʎ&V(b&kB~g'[Z?j{)7ς _hhhv2n^#_)~27i )DzF^{FfJ^&'33^^Jfr[ϊrR&"?2Njbχw'k^.+ggRnNv~NsOSRf>)Wg;n[>>nZʏ77'/SGW>V&V舸n.)i cc'חgCg*Ά>(o_z2ZzRSΖNW 3f2c~FB;{~3_Jw_"Gi.VֆRK6>[RZO'_z^wWvhƞ^FF?Sg)gw)i~N^&Fvh薆n^N^_'3)3RN":~NnBkcSRK_'oJ"ZO_i7:f&2.N."&F>*'';7_sS'F.FVF2S'7"o S{&f.k~*rS.k7Ǜ/ow)_>& +:&Vv^Rs'g)ZRss/6R>rbZZzRS7'.ΞR+^~>NR2^zGwgggO_׉IC*nnVB>^f&^‚+cCbb +'g*^Jn2f^2^f^^k/ǷgGwW).* :rF~6ֶ^sR>o/鷳곳Cc2r&222ZKK{"C7WG3/k>rkbn>2ΞOgkz_w)7 +[&v^Ɔ^cn/&iSOj[O &žf^RNk/Js#J"Si73[+b.sk2Fv^&fF.** >)i)GO+3/.>.N˂R>R2&f&w+*2R~ +JZJ^.*cs/ i WG[J+vnrr2fb[2BC)C??RNRn*C {2J#2/99/K:BßÊ2n^F^^&^NKrR.~^s7_r;G{ r&/n&g3{SSk^F.&BZs{>>Zk{#K^~"ogw_/cnfƶF^>"J/;rr~W_O??/rF6&Nj~."RrNbw' J?o.2nڢB"2VF?7w_gg+{g2Z .rZj*ڢ#b.Jn6~j''gS>N*.N~r{kJ+ +v~SGg7Gσ#Ggr2&~fFr +jbrC>j_?o?sb>J#nRbRz23_LJ'szksbbb~*/:.fF^KϿ3/gG_K.nB32Nƶogws's+bRZʋJ."#Zns?S?g_/3o''Ͽj"N^ff&J2j>S__'CS*+ bzz2Ύ22N."^R +[Sgǟ_s/S rn22FNڂʂkz{*K'3oZ +k{"&>rۿ_C/_'/nNξc +k +&n/g{s[χo*>~F>6^'os_?+ˋz"k*n.:rFVNB[3OOoC3#oCc3C&RNrrjC3 +ZJk ; + +:o&Bz^rR+S_[;'ss+NB.F +JRn{ʎNB{+ +_w7S kۛ~R#:>vFgg'#R3 sg;nzʚ{s66&C[o_gOS[J‚ +#~^fRS:^^33s3bB*J#?b +z*3 +3oO3+2nBnJ"Y(AvgWv`; +GJ.裗f> ۶&hhwOo?6^SSB2FhWSCRN['+Zw)ƾ7[JfV^KW*?"R~WWwWoJ֖vV(oJ'ogɉ:(XF;#G"I)rv(Hx(j6?G*Svw+SW)O I+zV(hH^h(>jOW'g&(Hh+o&*_W NBvV~6)Ƿwj2>^6k_2'kRwRNrhVOϞ&NcgG2O/VhxFoogggw?׹22^hFFNs)WC#?Z(+۷7 I iϳ;Kn~((6gǟk'9i_JG&6hV +2s;{FR6(VNSW_/+֖co +*+sO NBNf+fN"g'CGww.2&h(c[?G)?CVfWr>fN6h({y 7G))so~ &踈V&G?73 +^FVx~χ7^zNh(h(cGc:o{2K37 C_32cNh("FK/ښ)s[n^[CS"_'giG{sۏbVVFr RWC~j;_ yG{cΞ 6& o37'7's* FH&f2og'O)W)ox86f&nK W)_:oV^f{))iWbFr(ֶn^BgwG_O+ :&BR_G7OoC6v&~;gw7/R~fVz"##wWWi7G#F{&s_''.c>N6ƶfO_cgWW))WgWs(hV(::?i[::R&{3 7g7?J&V(>6rW'?/O3[.>v"SG/ǟO2zfBnvB~S{_CJK#&^R~C3k)i7&cfr~/3 k#R"&v^2['gwgw_'2(^Ξ +igCs/R>+6^ w)G/ZhHVB [3gZ_kV&.+2{חG7w>.(V(n2S)gs/Nv^ZW) gšr*6Rn'r^K[&f6R;"' w) GW^VR~zg7n gsB(f&2O?'WIWG7Bh(VVn&6~b_iCgO_[+6>&F''7)7 kfƶ(VfjGOF^Rn^n_WicJ^vvfJ/zKnb:/Rf.Gww )S + &6FOo.2nΛOK^^cgGo_ gbk?vFff2R.R_BvCnf~'ɗio2&v(v&*7Wo)3or^(f&rnb*7gg'w_/ 2hֆ&_;sC>vR))_W7f~Άv(Jֆ22 &>r2>Rb2 +)?2& o2.&Z[2Z?/_&".3ggw)nf(v6&>gWG_ #&FFbfR/ǟ_w7g?nZ?"(hh(&&;o#Os:VFV~jbW)wWI ijJ +6h^jn^~FzoKۋg7WJOG{;‚2v&^&>+B__;>~b+Jgg')wrz N^>RS3GW/kn.Ɔ&&NCswG)G7jvv~3JK'w2hh^&W7yCOS~^&f^V^&J''gW_;&?o痗s//sֶ&r#o_^&3k_LJg?n;R"&. +΂;O_;C;ΆVFR~:?wwWgW)+&vf;J ''o&V((&F^*oi 9燷wi_3[6(vFRjR+^33 +So?KR^((nN&G__WS3>cfFs +Wgz3_J3VVny)#)fFw6kG3G)[awwRhFrs'9ozOؘj¸8vwWI(NgY)>&`Fw+ +)o)c@h`iWWY)agؘ`*k_)G (ȖXfS97 ǹrvVf)i ǙaGiRVO))o))vȘЀ H^g)i 9!_Or vK y)iYWG !Cְ`W''F.ɞ*(@vx?W9h@w)W!{Vx Ia!__`(V8^Ji;Is_&hH)!o'nGR_XxVWy7 W똸#9o9aiH```X +7+/I(()wW rBHX8)'wJ#x8x( !YY! 7X@ng7 #I)9VH X0VGGi +Y !"V#r ^xV`_WaIb/?^ aY99!3@fsrIow+ywp6ZO盹 .HȀ(&GIy7iGfX8XIRw^883?ljciI)!YX^g/ yV2 `vɊ)YiR8ظniʲI{V>( YSIw'i( ``hvIwIiyqOG8(oj +KKOIVv(7OK!W:fȘ&')i燷!?vH؀H(6wgsswaG8`('_ɇR V'o'?׿Z(`H_)9 {v hoO&9wSfh8W "w_X0`wWS)!!iNFRR ?^3cWRW'V8xr _'i9ΣhX6~g׹j8'S)i9/fx6gg>w7(Fz&Wi)Wvv(xNoǃ:FF#WW9Yhƃ){yWzvhHF~.?^& 'ShN>RiǗ*x*7*wWVh&)w?OWa W` h8^K.&jy k(Vjz^wi)B8 Xhrg*ɹg2( v6j)_FfWWWV6NwbyYy2v@` {Z&W!y! ghbsf27'KF8xx6gwgnv ((si?G9i iWbv ؈؈f?S!Yyx `8&~9iGh8HWo) )7HhW )w_#HHx8(g/'W)s nxx6Gy!YG'?VH`H^BwWNvȖRgnJGiiWNhhVN3>.g)gS/8Ȗfsw )(Hx8/_!n(xfbfF2g6x' bg)'6XWb_i'o~Xxˏ3r'w))Wwf86GSW Y)/Rh>nB~ggWK~.vxXV''gOkiW)X ?/ )o3XHV)wy))IW/^@29f(hF& +o_)o6(ngG))s(8fϟGI I6&3##w 7in؀@hBJ'W)燉iiwj~hB"Nn'_c~v8NCwW9) c;c'Wi&82Ǐki)I `ȆKIyɉ_HnVNO'72؈;#S_7)'(HS'ljwfH .b'7W y'^Xؘv^Rs? GvZ'[f{"s(hn[[g/_7i)WWsȈ&3W9[*(HVr2^KCWII'` h6Ã?)yI(FZR^iׇKvH(v~/:Kc{JsWwGvhhV*'NٗX ζ"rg7a9C8ֶnkWi9)VRro3s.>>6?' +88&f볏G)) I'RvH^^kN ig(Hn ;IiH(&F.~*) 9ygVb[/+w*x&N֖/; __kwS{:OCgwi26 HVFffó7III ?^Vh(h)yygRKOW)Ff{2nSgƸF&bb^_ _ 26r.2?9 {>~R7IW2F^&fOw#(/Ojf G*6(vֲ7WwG2Koo//Zg WiiWGfhv^VfIiָfRhh +iW뛏rW)bRGW +fF6/i ))?2>8&[H_G[ Sh{֏gZ3I)9`>rㆸ(hj!9.f&/s[G!^Hx)gH_6vy:6w)ljJgؘ/'nfZڻ9IfNh*!AIO+g!KgSH6g(6sZ SJ遁 hָ8W+OyY 6x Ȟv_>־9kKYkHv;)Ic8Ə(wF(6?IgF.V'!yOWW:x`?jVIᙚH8Bii69ɖ(Vf7R~G9vN `8(ꊸ/)fRwk_v~I!3rVSV{"wYY?Z`xW F!)W_H>oxcB9)Rxv^ GfFG*Ȗ'r)aISV`'!vv#_Fv aWg~HG[WIwysV8H>6^?fW7&FBkn .io8gc[.v & h&sÇBb!!/7w^rf8_i_ai#֢) :(S>6ʖxhO)^~gYy7&ظ^xF3 +)9V*sH6&/rY!_o&ϗ^NF J68@`^)R(H7K wg;&H)ǂ9'WI)fCWg8[>ƾoFk F2^/&11)~Nx9{IGJNs(8^ *'&:C.>gy{V'9 G.x[&rK+s2i f8*VVVbAGK_S^['"&GiɆfvؘzs/` wǟ9Ox (&(J)Z&sgN A!>+&R;OθIo bz>FW7N2c( 7/'i_iW?Ƹiz?G+7Fh8& +Y)wK)I+y''׉FV&Vh;^_v+ 8 ɉ9y/i;^SnfRBSɺhH?&vg;Z>n8Vi)WO:Nb>Ȇs7WRv7{3W__oG˜+#S aHF&^67 '?3'k&^W__bf/&S/^ָ( 8)zksIRh_{ێfJϖZZn^vh_^7[:2)/FW?'?ۂhg?W#HzG*8W/no_)):C_sO Ww))((hhH (')g' 3R 9&^cgV^'hho_KzVX8.ȸVŸWI)osIy"( ?c S/O: y& sFon.6i +F_R:SscgFV:oG[zb8B^(h))gg'ۆ8R7fN2g_w~i?h?)>O9V& FvV. i[gˇ3NiSr__?[ng2'/S^HOv#w׉)&s Wrn'/3^i)F.oF&7SvF +[ϏOj)_js6~Z6(˾^3ڿ~Hf~ϗ*W;^ +GWn¶V + &v "R2#&_jV/)JgGW~(>Sv^''K3vrs+^W7;)GZ_v3 I/7溟nnsFNRG>oW:W?+{O:f^^2ogI GȖZH.i'c_ϋVnNCoZi7&2_o/(fnK>_O+gGV†cV.g/[#_(3zR&Ks8h +"sbb 'O(nCZv2Wn/s^~R΋gs>N rg2[_)sr~{h&OZ? +gZh +Z63fc?R_";w)^;;n"W Vb^vc'z( +'zV__?3grW>H2*/OG(fg/nngwzgVg'n( C'BGGFSj22(‡gK&JOw(7S'Hc/7H8rRbʛgO 'o^6&I>sG~:)I֖bƞ*RFwgz_W'gZgoz& +w*hCFi&bks'_R^.n&^gIg~6^KkR^G>&o;&f +NǿRF.2B_n&7I{fχ?fVr_ʺb +2o7('FBGr(F~?9oVJ׃&zFGfW[RV)7ZσV^) 'Jhvn8Rc7CGaIaA1 iy7)iC2z_s(c _SzBnֈ(x X 0@Ь@pp```X FKF6aa1qAaqq! )ihh~siw)Z.fb'I WgoSrV戆JFH&_Vz:^"NΊOxvVf'7Gwo^^''_?'+Ok'W#O~)j>_FF~(V8`hK.V&"əSy)gw_/ڋ(nn^Vvǿ{s'3bkc'ʇg +N72N +/rOr?^^_3f^ƾbGʳ?z/_39)Wgh88{OG#?z)9i)Gks+B~֖^n.+Ύ#'gN"s_W?W>b"n^66jB.zV^rrO_'))G)wG?z>KrȆNG'WGGwo{oZkN/#NR2{RoO'g_n6^&'Z[ˋ~c"RZkΎ^6~v&Nr3K.Rz[9W)_3'kwi9)W_VHH8Σnfr/cg )Go#&Z.['j"f.>/g?v7gs[ +F&FfRC/~WGOKj''*jfVx8(^&J^#_/S'GɷSGii{3J>b~2f*? +g"כ'ÿ~"&k7"gWG_v+fC_S:zfwǟorScw7'3ofƖHF&&6VvVKKWɗ{__'G'oGC_ +ۣ &N^nb3bK#>Fs?)3oJ~"c[s'O?.VFF&k/ϟ2~nR7gww N 6ֶ&NC;i7'&vFnbf~*rF枊S/b&fF(S7)W?jj#'/{&f(&s7's+Bv׷_珛kC/iS#HւnȖ(hF3;Co?S'wo?ǗS+Jz3ڛ+b^^S⳿*2CSJ3OÛG_.R"N>ۊ¾F.C[n>ƞn:&zWO*sRN +*3'ww G&F6FfVf֖.*oWG)gG3N~&2"fnJ"; +^B" +[g'_gjR3:'b^.f3?~>^FRgw'O32 +O'_goGg/&NFhh8ȈvN/SSogg7)Kj:Z#2SK>&^~&>nb{2_/S_S/+SR+j*{^ +{㞶z*" +OjBCWGigo+ +&((fH6 #?[ÇgWW7'go.k.cnRRÊ^^bg'o; 3S#. #cK[>j3_*s +~Z2[SbO~{S ;wGVhȈ6Nz:C_7_k.JR^bZK3cRRNnfFFf*[*S'?sgJC7cOC /jn2~v;O/_'3/C2n_swIWg/{/Z6hH((v.N~s_ggG) Z/cOCnsc/>3.~hV~o:_w_sCBjn[/.?'bvff6Z sZc3S;s'o'?sgϿ_((v^RNNko_GwrJ zgO.^n#_O??ON +RNKS/fK2">~.R&&~^>SËs/'Ǐr.zk{CCc'_w7wg_:2~hHh66[sw7χg3ϣ:ʛfFK/*& +S?*^K +;b3"?*ZSG)7NS/BF>Ns#+Rֆ+n7)W)wg.>vhVF&^f2ºo#gG7KS'g+C;Ξ^+Rb_#Ko*_gׇ.Z;jg +:g2g_cO?RBJsow?ggojn{Rfh6"zg/?oSSCcNNvFFfVV(6&c_wW)i)_CKk2.>*sr΋*r^h^S?'BcσK'^Oʟ?wn 6H6b k.*J?G G +'g^^oþ3c^2~(((&~6_)7io*^k..(&f^Vh.cgɉ)wBgG' Ã&ng_OgOG: CjfHF(vvV~zoKGsǷsgw{knnv>&v6&:OiwG9iGj">fZR~F6v^^__GGWW/bN>&n _o#+'o_ +*h(V~.?g/?''g" +Jso's²nk^Z+R^JʳoS'7'SǷsrj>fʲ.&~f>+"jS~>6>>'g)))3/^Vf~bbO'GϷ2+zn^(f6"zsSSO*oO_w3 '.Vf_LJWǟjoK'S*62S'&z__G_3&(nڲ/'R#~6+/ +_ǷWWGg^F&^nKS_/{R#S*?o7WWso?s*&~n +2#7' s/zRC_[S'O O2F(f>N"j>>RNffFV6ƞ__'7_))W7C_~~F(6F&6ƆNr2.*go_O?r n~FVv&2''Ǘ7's'_gۚϏn[j2B"RƆ~.nv?/Ǘ^sCk번(23&wWioi))~+go?bVxVR^&(Nj;:':jgO?sz6&zNJfV>O +KgGWg?3_?^oZJ3zZ{cr&V(Nvf)^^6F">.BG'?O7sgC_*626v +f~cSs{7'& +Bvr~BW'g_k*~.n.RjZ{rZbjrn*˺Z.~OG_gg_>^NF(F6 +#OGGS?&>ξf&^{Kf~rR'_wWog:f(F^_'7) 2k{NJ:{ϟg&"CFFNSO:枆(6R3GISgG3JzF&N^VVV/[*GwWioZ&^hV2Sorg_+˛bN^b' 'w_Ogkn{ ?+Boǟ{ +FVh.>~CkIWח׉)NR^FRʞBN֢^6Ɔ6?_?#w7_'Or.6^.vV(h~/s{/ws{R?C;^jc'~~BJ6?jzJOCNΎF.[3_W WG.6~*r6ff(^^j?o')'oobvVf(B*CzO'3K S?jrs_ogcbr"V#3jg/s>&^6>^WiW)w 7R2+&F(^(v6v^fRW) ''"n&fkR&NN?+j/c+wGCZ:j>.>{ϋ2:Jʗ.~3Fs{/Snv^ +fnZڏ'˺_g?)'og˲>*.F6~6v>2SwiWˣo/#~V6.*b#bk3Ǐ__SJ +?b[" +zNo'#?s"{^v6vVf.'_'O3:K +:Ff(6F^nRoW_'ScJfNf.^Bk'; +B+N#;S"s2;_Kkr_r^*ϳS_w'R+{Ff:kkgs?o)z[rj&f~VNVv&+_gO7r*Ʋ~2.Jo3SbJ;/C'ϋj_Ç_o/OrJ3{s ^ƲF~.''k^((&&&~>OS7'oO?o)'SS'_#^^Ɔ6VFvN3O_/s))S[o.rRnoC+JB +K+ +oOKK:&Nۃ{Okcbf^(F2N~2/s/wg/חw/ s_Z&^b&h×'/&7iIn~(F>^Z.nʏ_?G773Wr6.2B2֞~^fh~^f&6+_7 WiWw^fr__jfR2 3Sg)W:zNz3r~^FR֖(h*"CsCWo{&~&:Zk:‚Nz#SS'G ){F~&FNrJFFNhFCo?CG 7R6ZSãZ/_{{_S*.{_'G wW7o~N(V&FΆ־~6>jN&N{S_ )grnZ>k?'/Ǝ:>fۚgO_sN*ڻ[;R> +RB/7gVf+K^rC[+22JjG'o{.&&bvV6¢r.#giׇ _^fv^r"Vf2?*FfNVb2{_)ϟWO GWSKn&v 3W/v^fVSnz_绂kC{O;3W97G#_n6ڂ +f&V^F(owG)'N6ʺsg_ڲn/O'w7/o>3.+~~V^Ff#_)7J&N^VvVj?_o;??/: +wg )7:N"[>>^v6(NcWsRN#S7gG#Rã:_I7 .*c>&&^S3#R&ȖZ)GWwr;^&fNVh.Ng7S3?7j*^'' WG闷#.NRz&&f^vVh66ڿ')W7 +cBΆ2fJ''S3+BN3?GS:frhvb?s.Co#;6W9*z>>6; R/&J*&.7_iw?*b2"^bFƖf7Wsζk BRSJ.ff~ׇoc[6^^^bS{oj3iiig 366.*;.GSWwwgwۚj>/Bzos^j*~&ֈff^C?W/O2Ro3?rffkg7OS?/.zSSSw#okRfRBGGJ.&~&B^F^SZFfb'))Ggr..fzNFVgg#Bfn .c{{ +:Zbj>_g n;NjkZs_S**~J6fwS3oZjj&>&:nn;*>R"oG)iiח'>*K[.~2rNFfhv +?o3/_jb +ۋk.;bJ;*j^r +2[N~&c)77_zB^fNcC?'k&KR:+JꏂZ".BsKk›2RF&bN3w_7s۷go2"jbNR&Fh;C2___go' b&f~66~O*C_.&~kr'?¾S[2?W/R2/n&6RzzVv"z'G?)wLJWG/r>2.~jZs>Z:RS_2NSG++'^ +B>Z7zz__nƆf/6z.&/'C)oo/ogn.2Vv23Ggn.{S#Ob~:fRJb*;;nۣC#CzcK?n~.'_'oSwsbfNr +[K_KJJ{N{JǷS_GJ/JS2nJf^hVVrO))ggG/'oKgnFf.V&.33.nbj;#:'G:oz{ξv6&B/iGg'g."cb{[[2R^fjogOG'˂R +~fRJnnF"n&6(&#OOg7G77gW+Jo_.Nf~zvNr*O? +'gOsk&^>^2_7/rksK/.C&N(泋&+OS?"3krnOrSR"*FvnJ_oG))'g7?;o"NvN*{*r;n[Osw_os"J>ok:nrΆcbZ2+&r _o?Jfkڳ:&? Nf(f2j_)''۷GG3OoOK FVN^fv"*#JΎc:⊎Z3g#{'{&fR2 JzoGSn;fN& +~zz:kr2R_3)*zBCcc" ŽRr&~v6 ///37?7/?/&VF&;O3[^z_'"n&bOR.ZZ #2))nvV>2/WgLJ)i 2~vnNƣ^?nzWo_w')C;"^hvffN[bss_#fn+v.ZۊcCJr"ONFO7 S'_vVvƖNK&^7)7_cJ&:^C26FzZ(f?V( +cgW'9Wg*~&ֈVRBR''J6vV귏s?ێ3/#+ +&SiW?+Czr?^6VJ[__';'''_s{&~'nns{Kf^F +sKO//GgiWGR{kfVf2^>/_kfRJ^N?oOwKg&>j23 >[3"Js"h(k.?Ggw>RR[SJJK/cf66FFrNN^sOJ;G#W) _2>nf➎Ɩnb>&>Ng':Z3soZR3SSNgRc{'JO?K&n2VB#WG3'7J*kNjSOj +&F* Bv6&^ +cr&ÚR+' )*_?+6~fz;;?:6ncn.b7+_C?oJ[.n+^;_'K#_66>f #;S7/2r O#j;>^&F6ֈB{3.C翏'W W +N3R&~;3#2^N&&~Sgoo+憋: S*/{Zon+z[3? +R?kk&(foR'wi_jOzŠ./ngk&Z^hv&V6hbzÏK7')WrKbZBr^*O^h^sB^oG#+c^boz^bGGN +nc/cf>&vJzz"))g&fjzKǿ+>^v~Fv6S#ss[b;GljWLJ3.njFRFc>^2(&f"[.G#)7_gwڎ;oCN2?_ >K&(fSB[G'?Gvƒ +JGo{skO>^&(FF2oiwW'GgÂN&Kb&JzKSZsrn&6jSO7Gc&*.B B.KSOo'oON"^f&>z#;'_G[{&zrKgJ__o/&Vv>V.R_n?SGׇwWGsok^&+.^#O^~ Ϻsg)cCRbzZRnf~~^>>s*r[ok"fRJB[))g2ڎ>C_'#fFv&Vv^z2377)WW_cKO3/SF~vV6R3"[_g+o.n+N>[;r#So//{R..v.bgwi'":ok 3ۇ;JN^&N"^F^+ '_7LJc۳o[sFVF.oﷷ'oZZZNrNK^ƞ + +'/'sgb*.w''zC+b~o[+szs Z"fFR>"Nb*.:;'7wgG?3#SR+C v6vVF&^/SGS_Sgף{3_fko7no~ff^'?Og'['f +oz??3WG//# +>rVff{_W g'O{o2"j[;_ +^^n>Ɩ sB?'gg?;2OrVfNNB.*O+Sn +nK*~Ϸg' +&^R>S?gS/3bvN&^Z#)G)?g22&3;s/RrVFvN;O_#_LJ{2;bC;.Ff:+*2~nN&^.&7_g'BN.;/?3gSûoS^~>">V.RJ/WO_gsOSK_ sR~&vv(h&F/?{#{G׷_?R +Z2N/^F^>S3~OON>F&;3gO33_obNk*oc;*;?/*';^(RB~v: +CC*'og__*sk{//_Gk+R>V^6Fz_w3j?: +/&^NrK.>~^/O? +>j _O;z*N +KZS3'_Sk+^>>&f&&>*c3wO'G7jcj_O*/.r&6V2sOS?'3*bCS3jr+ +R2j[J*rr;B/zsz2N.N:scgg7*Obzn.Nf(VƆ.s2f +ǟ'^Ï? +Bzj&^vv~'?OsKcO'S[Z.2oo&FB_/;FG_7[r?GC3Ozv6g7k^#sZFHsSsocr^&O)WS^zWs&Fnc&8v*wiW?Ro7_?^^VnJSώF6sGNF(js#~ʣ_/3.B +^gWGG[2sj:osS.rN Sw:fRG)''7ۣrJ3hh6;/J_SGJg/ǗoRn6~ +z2+fvNR_o_ 2f~ +[s7׿NnonN+3)Gon'*>ƾV~?+r +S''G_RfzO'o.*#rjf(v(. +S3/Jbo_{W +B&[o{RZz{Z' +fF^b3'_?B~v&n 'G7_oo?o*nFhVVz#"Nf?'sJw#322KNVFc'_#k'kǏ~~~"gc㛎"?K_&fv6&:/[ʛr/6r"g3oS""G_[#K(J +Jk + +/Sg_{/roJ^(V~gK/?Gg/.&:srf^  ff:_*c΂_oO ~f:oo?Skkgs+6V6fn>:Nr+g'Rb۳gW_oJSrƈvfRJ*&o#OLJg*o/b2SbNNrBSJ&V&^.?^b/Cϣ"k:~Nrrowg"R3__Rnv^:~f~2zZsfⳇwgg/''S* *V6*j3rOÃ__gos~.#3R"?FN&v[_{C?~/3#72' 22R&6*/۳s{?g_cZK+JFFnNKb/3 R^iw7/SjZF(rK +..Kj??_'#2r /{r>.ۺ'~փ#O/N.^JoS'_2j&fjC''O"##GfNƞnN2:b_.n^Wwc'/7^h>^.>~RK__sk.#GO2^n*#kkr.6{B>R"*[/~2f{Jso2sS 'g22.6.# + +C?*枞6~[;3g? +:;'3#.>^~>.*.F^'W?  +_j˾^nZo":ƂrnKj ~&KROZN+#jsSJ>[o'77GK[zZ~*z*cJ^F(^^zKZ  㲃gǏsz?''gs.fJbbNN;g+.3gO#r{+>r*[O*2 +~n*+ N^?_Gczs#:>^3_7_?ck/ +R j*šFƞ.Ns_K+7fFn2kR&~&&'#S/r2*zrB2"S/O*^~Nnn;r2gG 2*j22:Jښ +_7_C*C/kRZ2b2b^^nR*/ +nB~r?o 3_WW?_C..ƞ"f6f>#{2_s:OGSs/. +2zO?[ +NRzr*noO Z#r⊳ksLJG/S3ڢcbR&&r:j[RB:BnbK3kK7Ww7*r>fJ^~nf&n2bs/[g_cb2B3sk3C[[3+>n~β*bn>zO C?C22R>2N2³";?'g;˿GjZ^ .Zk.rrk..R*?Zg[rzFnn^>&nS+J;+{#Ͽ_?+nʛoz S>&^&RR~>s [n*j+nR2;''g"ZJcSB".Z>Brr^nsWGBB +Nn&f^"C* +K/oۃ3s [3J~^ZZN^sO_CK뎢zz2r>N"{KSS_KÏ3sRb~~2Zz~ˣ"OOW'' +jzS>.^&N2&.΋;#+o?ookcrZoO[+.~~r2N//{{;3 +rBRz3?OOS#{2>^Ύ{nB>FN2K k{gwW_OJ*/jz*N~>^F^C;sjŠ#3"[/G_ *znCOO?~66N/gf.s)rF3o:*rRcG7Ww*Sf>NrS;–hvƲ__*~V(( +Sw LJ/^~N{ciiʾH( +R(ZW :fvJoGiJRV緇zr~(h^)/B&&.'ןH+/W)石6)sv6V^j/ .68V+gS~^˃)i[^.(&~GRFRzϷW'>Bjo dzʃN;?ioJζhV?_(j3ijRvvjwg&Iɇz6(V£gWW:v&;(66O7iyGf +:jחoVV滏'f6&s_7׹[r2f{#OWVVfNo'_3ogw/>6Rr_..3/[/2^sKn6R/n^V薶R:g'Ob3CG^Fv澏''r>V"jk7W7rowWw?F~&>Jo+&WgS&G;^Ff2/W' +ssWggo6&s[vfcOJ~& +gGWi7rZ2Sg'fVfBs뾆~n[7wSZ~z?jFhk__~rgwWnvrsG*{n*:nwLJG_r{"k燷Srf6fŸ_[.F.חW7BB[?7{s*N~SkBv&.wr;;n>&N{G?? +F&N&fO'wc^^~O'7o^ƶ&&./'?+Rkww*^n6SF(.3/>2׿g&njss3fz?'&^BZ*7W~ns +k.~ZFRJcO'{ +f&~.&Ggsf6oK2~&n"ggszjJ r''.fvvv>:s3†f'G.*#ggg&V&2KS.r~^#_wCڲo_'^Ǝj+3B^fBSGG_c&Nc_j^r'bR_n~&~J{?&66*S'_JnrJsG7KB~K{sf&r_'jRnOW)3ʾf^RSCR&^&n*o_+bkS#S?CRN^&s?w˚* *gǷ2.&N:ڊ'>^h^n[O ZRۇGGs3:3c_;R>2#_ûj2Nf&.wG +:z*[+_/vB:Srbnr*?z&>nZ 3'[ڲ>f>;;_dz+*B#gGg~f. 3k^ SWO3/R#[owr&&f~R#s[zNb+K/'cknz[bN&>N/?fFB[G/#B~>?_ˋj~~.2B#S/[rrn +?LJSˢb2[O?zR6F&&ro_/*b2GgOzRsj>&6>_/b>Nr777g_;.^_[2R&NbNbϟ/ [zn+Sb&FNz3?G*ˊJg_bZ b.Ff{OR..^N.oOK¢zjg/ 2>F{;kb>?gg +2K[osfR{~^^nǗ&n:#3Cc{jR^^z+co_?BR&rJ+~F6f?/2r B_wwo&~nNˋKB2>&^''/s**B*?ggCnβ.S+n&FfN+s[.n*>R'g B{_g_O+j.#?ffVVFz[KJnnjsG7_;{"n:SOoSN^. +Os.^f&>s_''s:nro^FN;/+ʢR2j*:Ϗof^?3>*CgS:R2ZsS_cJ>2.N>+g_/#C*gLJCF:{j +~&rS?sc +ko?珊>&ʋ{K +J.~'JJJ>B/3Z2~R +*SO?s.g'_3+R[k>f~rc3 2+O'c3..rR~^>.+b +RBǷ7'OK2r[On&^r[jkSۚrN/32z.~&&n:#g_2:o_{k^ffj3+ +:..s_oOS_#k"N&>۳SR>fn +O_Os+2+'_/s/..Fb3';*r&bc/'_/^֞;KS6._9W +nfVJK'zƖVC.~:2GG+NJR"{KSK2c>.fN/g7g7?n^;'Zr&>scz3Zf2rK:S +2_G>&ng'Ϻ"3'66NoJBv6_wozFF27'wsvG'+6^w_gvV(iwgןfNg'RvgϏǿZ:>&/B37[jzf>΂Sg[j.Sjg'*:^23brOrJ Zn[Jc'*z +R2*2Z"S'S_K^.j Z&.Og~^>ǿbNF.?wgg fF/7ΆV&w_r^f gGG.&>~['OO7_; +ƖC?Rff6n')bNF//GoCB>N/o[.2~rB3K +^#ǿrj/ʟoOʊ2.{?J.j/ZC2^>^&_/crZR&'kn'C;B&ʿ[SCζ6OC_;n&sgw_;^*k>~(kOg/^FRCw&B'_[:ƾz.sgǏj&.B^2Cg+n3B^zjOZ:[:2ڣ3Osk#bSK[n;3?B2[ZJBۊf>FSCsr"S?fƲ:Oo_+V^ZSGg>v^2jCϟ#s#w'oSvBJSsffNk''r&~^Jc?Ï_R>C''+"ξ#{>roOcJ2 ;S:R2B/⺣RrZcR +>bjg۳oZR2:[Ϣ~KG7S+~f;OR^{'"N33/n^z;_o~fNboOsr&'__Ro_S+Bn.B_3 +2.> + +Z3^_gۻJ>*CskkoSs+J2ڛKk*++SK: +?o3.r;/n2b{z>&z'&fnO3"&Ύj'bf>>"So?.f6R'LJ/R^NR[/_fn[Oo'sR~^{ۏssZ.^K?*.&^":sJZn2sc?/*Zn"JN2 co+;Z{kKkB"Z3cscRr33OC2>so?/;rRn23/OR">>N[Csz~O'3R^K#2N&矟:BN+ +;s~FfOO?ZrRj:#;jb^^.jCSzZN.:;S{jr;s:ns'_;JNʋ;.ko*3C+ˊ*k3S3B +:^Nsoϟ**".b sZr??S +j2Rr +[&bC??C3k‚j;?o n#ÿock[kKN.j oc3Nb +{szjzz RR2: CnRRZcS+"bb + +cjB+?S[BJsc:.Rr + o#B2jo32rRZ/B. S.."k +B2ΎrjsC[Jrrˊ[Oo z.{SCrR"2#CS/:r2 +S3S +z":KC:.c[c+:2j3sSCKJB:j[ K[+jzBos3*" +[{*2[/3sCbbrڛ3czRZ*c/Cc +ZR"b;33s"bKs"nrRj3so/;*j +so b>nn#J"r:zrJ;#/s[zBb+k[Czr{S{rzkcÛc:ZBz+k[Z:j +c++JscBzjۣ[rK:b*ۛ{Kb: +[[C[z₢j;s{Z"*kcjBr2jK/Cc2C#c#"rr3# +*jK3jz;K[j +bjSkZBb:j{[K"R."## +j:+3[*J +j{[zb{s*z k[;[; +B[ʚJ[{# :B"Z{{{*JZ:k2K{;ZbzJ[/ZrB:**jc#sJb.cJ +cjrN.zSSC ojb&BzRGwOZ +cGGr2>)ʢ2V^js')_"(&£gi_VZWI Ƹ inhȆ:?y7 ^FHgR^ iOhxH9yiƈ(nSljiǎ&6ivh'gi )jfH'')z2 I6R/)R^VHh )I BVH&CS׹KbH^3lj97^hVrj ɇFȖ˲fR)s2fg9sFHBI"~Vȸ2陉&h8^zg 9z(HV>G99Fhno i_#O)oζ(^[S G3ֈ)i:(bgW_3:~(fbi7O.h*;(v.W'cjV6 WCKVf)7*(Vb[)7ϳ(~)7ʺGiKfVfB )b(ZO)snʲ_WS*^VkWO#f(37)7/nFV{ +v(Zן/JNV+g)wcVVÇ)G_bz/7W;n(62?)WG㎶V^Ww_&V(n[G7o^(>.OFbG_C.v探'w_ (V.7_S:&(rw)7ƾ⟗[RVV +_7O6^R._sV/73jws2vfoSv~'7g[f6.c77~2GFv>B?G'/vvf^~:wggvFgwg细^&Sg?6^&.Ǘǿ.66?wG>& ' v^fۇG_6f2sGGώFF&z77>z[&6_':^^f&cG_Z憞^.gg&&^bO773N^ffJ&&ff gw_^&&'R&gg7f&jg7^f{'g +&ffr3'77_B^fBgGSN憞JǷN_Gw&&nwr&^"ogGGs&&f _gK>f^fN_7'^^fRO_w&ff⳿GGSR&^s?'7n>kSg'N~&KG:fGǏ2>~~Zo/bnf+/'GgK>Nff7j>~&R{3G7>N^"S'sNn&f~Ï#&&;O7 +Nr{LJ/R&~ +co_g^>'G'[rrN&*/g>&&rk[O"R>&:[#srf:'Gg[Brn^& +/gGR>frO2r&~Zk[?BB~&>Z#GZR^探z'KBffR;"Nr Ǐj>2"{Ogs:Z&fŠ'7'#Jn&nB*{ +"f^n +;+"~f.Kg/K:R&f._G3znf&gcھf/Ok">^.B +OGˊ2^.sKR^Nr" +^B:{k:&^.rg#2~.'o;R&N.'cKz&^C3&.Zob>.go+^> _Sk^^2^NgOSz&:Oۢ^*K^~__3kn^^>NBsgS^NΚ{~^~~ʿg'~^>.Ko3 RNr:''Sb>NNnJO'_{>N;c.>>c_g_3n>N/_'/N~~'OξN'ORc'S~bsڎNz__oc>~O_Or~~R['S.>#_z>NN/_>~No_OSbnN;?'RRO +.N~ZS__?.N/?oR>R rR;Os+rnNBϳnNNSR~^??SKN?KR2Os +>>ZO:rn^zo{bR^n o"rΞr[ϟO3jB.^ÿc:r^zso>~. ??SKrΞro3N>"OnN??N./??;2n~.kSϿskr~B{OOoRNN"co?o +bR>~.jO/bR /?s{JŽsok""[/kz2>zo?o +Z.oS +"~3?o Ξ>rSO3zrN>"ۛo?os3z>N"[_3k~s?_SJn&B3˛n>>N.Jrc+v&f7v7_#~VF66[_W6:SS7f(R;WG_nw7O~(ff)Svi7o'ZVi_VwG'fF(sgWWKFs7if^(#gio&^vO2&;g/wCnn{_G;..sO +_b^B~_++2>s+oNn#C2Ύcon&^^'SO_Ffffڃgg6FKgWf6W(gnNfGW"r#gχOb"F'ן"f[__z~&^{w_Kz~&s"3_#>sg{Nn>s['J rRR? ? +:r_>2_gBN&2R/z^noF>RO.&&f>ǿg"^6fOOgW>6SW?CRƆ'W_"cW_Oz^3ˇW_+vnb__;226Ϸ'_F ns{*N#?o*& +nsNrs/s: +3S"/~Ϗ˾ᅴ3^oOc'ocN~&&oOg's~~S'b{3gLJ>v+{_g.vV*k_ggc""O_G/* +o_{;NNLJ#&6χgSS~zs'goNc'3&.k*3N~bKk~~Kz C//*k*//f&ڊC?_zBzCO'zbZF.2ObF*#j:3K6~Oo[6&2[oGo?sfno/^j[/_n>+'ßo.zCO..N.2bO{222ϋS"BrB +/s"bjko3:sr22k[K?2[*ncc'bb۳g"~n3kk3_C3^ +#SG'*&&^"kG'۞fffzGn&"_o~Ǝ+'?'.ƾ??j>~gJ^rooo'; +.s33+R~RϻRn:r[*n +r"3nRjb#Sz:{. +{b~. +2;O2^N"2;O[r枲. _3Rf&N?okB^Zχ#f&&j^^f.oχϻ^fcsχN>N/g?3>> Ksr>k*?2R&>*:ۿ?:"{oBZr;zKScS#BZz.#3rzS+ +Rz.k;["NB"SScNrb/3OCC.>Cc?JN#_ϏNN>r;K.n_'32._">~/Og?~?nRc/'?.Ï_O..jK~nR닃 c22*+/[J+*kSjR +z ;[zK[˻3KZ b:j{3#[S+2J2Κ*/cK2/2b~r;[b^n2O'3z>&NnC/go+*&ZcsOK^~r;g[~~~k/bNJs_/n~΢Jkn>bZ?S/;rn 3sonR2/SrBB +sC3JJJK[cJ:Zz˳ #J"Z;3* ;z"+#jS k22;3o{ +rRJC3{ +RRn#[?3RΎNb˻O/s2> +oo3ZnSOS +N^nbOO?okb^B#Orr{//OjB..3OCRʣ[ +.rs/##*rZ3[ʚk + * ++JKkJ{{ʢۣ;ꃳK:nk;Zz. +k3SsS#:z.jsoozn2//Sˊ2r›S/ RNRrkS?oC[rNnRJ33"n.:OSrn+oSsJBBjSS//:*CC/+z:BR"*s+J"*{CkJ#K +: +:z +j {zJz + ; +J +{;[;ڂJ{;#˻K2ZJ{s{{Z2B2 /cK"2."KK3s{r2nrjCoSÚrR*CsBr.bzSS/ rb33oo +b.2kso*.R +;c/o[jRR22 ++#/ *b껳/K"2ʊkc뺊: +;;; ++JbzJ[k ++ʊk J+*KjjKK: ˛;* JJjj;;k +"b +Kkʺ" +jJ2Z+ۃCJb"bz 3Cbb[{ڢ;{C3K""jKKc#::" +cCʚZ +j ;Z +;[ʊ3{{Bn+#;/C *SjΎ* +/rfʎ:;[^sJۏfz&&+'?Ob&ڣnJ/_zZsϟgN*#B&N'f.+>_γ +/Z׷.F^K[2掃gZ& j:^_B&2>:g:~'_"f& + +g^g>{^gkf^c[_g>˻f&oCCNK3^ogO'c~&ʳ>/o&;kχ/NKϾf3fkKGO^o&j_>GRfrc''&*_NOgJ#[~6NOr{gfrRG:2 +s{frb枏Jš33~Bs2f_J>rgsrs_ s3^s'[R'SR&3_;2gS#f^.2 '.˟.R.OGn;K.RsG[N&+rB3.kcNfʿBrrwg"fcrr7"jCc{wnjS/2k7 2[B/nRΚC2 .2sRo..'g2[zOcRnb'2"^NcOrR>rKr~B2.nK:~'~RSz^ogzCOS +ڞog_ +&N/+:~~'noJ3'2SN/;J~&;_n32s/ʞf_{c{SK^:_;c~BS/f_Kn#cofR2sJnrc.cCKssRnoCRC.SF3s2+JƾSgb;? +sfSsz +nbfsz>Ro+&fÇ S/jFk's*Oホˎ+."s R_S*rS.~r/;2Ʋ"b/SfBZobnS22oz2o2?/.brSS/ƎS/*rrn["s:.bR{[OΏ[rc. _r#?:Z" S2K?:K&cgr+r:3&KO2nK˳s*gZ.2N;sS"'?JSz{s.R_2o:[C#f_{rz3C^nOZKNB:&>S˃rN^33{#O>{Bnk?n&//ccr_^sC+r~o'{ozb>oF3/B//&csks'BΎS'fN_Ks{;Czb>#& sbN~FzcK#">{gζBcۛc3BΞkgrrCKc"r +[/Jr>zgf~{jC/*.>gZ^*3 R2 +^s?o.?  +COnNr~JC#O>C~Fn~Sb{[[n3Nro?[Rg?N?R&S'ƎZ.fR_RB/OSfn'rRS3zfO'bR{_/Jf&?f*_/fo&Ck"&sk^.;Z&_{~"?3Sf+g'N"?SC^f:'g&>Oo#3^暟R^oos+&OCR^^o/c~ogsr~&b/#Sf2sg/¾梏S[~&R3o"fssN&nCgڎf3ϛS&'o#o/^K&K/3B~^j;2BSSϚKrB:sJCO2Z&? +n&'/zBj{ R^'/{~:+ r~_KNJj_2&S: +J_ +o2~o{zZz"~O["~SoBzB#JK^fCCJ²Zj~fs2Zrr?#JN[s2BR?3 +K3n/*bZF +Srb*n2/*?/"‹Rso//Kr?/B.[O+/RJks/KNooRZKoCRsOrKSns/ .[?RnkCsjB +ºrosjz +?Z2ON#o*RjjJ"~sΛk.jkzʞrOKK.:kCjRocN3nZ/.*r.S3~rBRbR;Onk'?ozzb*r&s?OKښOf#*ϳrʟ/;O/ro* +Js &*?BnJ*#3nrjOj.JB2o"BoRj#KrO?ʲnScrZj/J{s+ʎ&ꟛ;/NRg{.*_n"+s;R7[6kgRfKgK&"&CwNfGGrV&Ji_.2vΛ_sk^c?/sv3C"G~Bj&#S_^r^Z_cKn&3ocCv.sc_R'ooS~&rS?~֖^SjwR&NƎNK;#gsB^s S#Nfb>fkZ*s>V.;j&&C[ws.Ⱦ_"Gw'*^oKGrVkZjsW"'CS&~{Rj)G*(Z3Ss+O +g.r+>_73;JR#2_>f*C;.Gz BBb+Rr#RjnvnC'^ss* +fjOB;J>R++__*[Nfk[^" ΊC'[2ڃf2[sr6n>;s2K^J:kj&:NJ;ssB^.SJS>b.Kco/[[ONNڢjKC^~/s//OoRF^+ n?g.^S?SjO/.RRs3.bj.__ +?Ns;{S^NoS?ÂJ^z >R~Â/';{ccsnnoO;o_.B37s+rk_z +3.rRn3S oSfzCcs+R..J:3JN3b"Sjcg_nrRo_/3 + +fN..jO'_;&So2Nzϛs.ΞϳSNNJo' +^.RsO^Z/_'_&+r2?s3+kC/O&+~{s^n#'#R3;:fK'?c~ :nS#o/n~* +J;2Z^/3/j>n+'*zRR~? [_o.R#o[2:Nk{翃*:k[.s+22n2 >/'".nbS/O:BZ>/s[ ++cn.Z./7nc{"_#ZZZ.rC'[ZJ^3g3R +B:*bs# RZξOO2; rrOgb;b ;s_K*z^kz["3cb3""Nzs+B.[3_[. +ZR.*3cBo?Kkb/S2 +RzKB +{bo2zkKJJ{JB[bS/ϻ+뺛b#?KB+2悏 JkCσJbKznznsO3{ 2*_SR +".K +BkC;SJ>zkco{[2J¢ڣ/3zJ2s[.{B.rJ+sJ +{n:".c"zR²KSsj"" :Czk3/3JJb[ZB.oZ" Zʊ#Z2 BRZc?o +BzRBk[*2J""+["{.ʂ+/ok"JsbkrK⛟Ncbnb /j +b+_#N;S' sr_js. +[.;"sʺR{* ڊ_ڋ#/+*R +o3.[^2['3"^ +RJoK#kCn_B/:Rc^2bj#Z;;z/^JbJn+bZrkGS +澺jr£rJfr2#jZng"C{Szf"7rs*/&NbjBC{o +2zCʳsJfNKn"oBCfk#jJn_k^RK_*[RZks +J~ +3KR+[{2.soK#Ã*2NJSC Ks2NbbsK#c3Z./ *Zr>3s33K*n +BnKo#ocrz{jO[;c 2." +JSKscsCZJ.n;S 3;R2bs3JrJjJ;{s/~zZk3 +BfzOo{C*ʂjSsozNJ?[oJRzN"R۳KSS/"s> _oR +C R.Z>cnsn2nC3/kⲎB#s[~†/S[SgnrcCO s;:nBOZJr.Z2ZZo盲n*f sKnN>CK[o{?s+n&3?SBJ뾲&.cS{ +;:Jk^N OKzNrrj /+>/K.ڲnR/;ZS;ΎgS{ Zj>bJczb>>c2ʳ'#J^_ zS"^ǃsbʂ/.&:˷+>KB7 +R2 bOZN^Scb_.NNz:?c2?J2"NzRBkgC&r>' +?^nZR+b"C2__n&FozSjNr[cC3_jj^JRSSk>RB{* +OO{b^BKn.Zg{ +*:b2Ozn2S>kj3[__ JRnCn23o2N&^c~zcw?+F>ZRkWfZ[&zJ3_+r^s"Z{_b^GBR"J+^#G΂‚CGR2G{3#>Z2[糏sϋn/zJSNZrףS^F& +R*'??&{"Î?3kb?2bggOʃkjbRO:jR"[;2J?s2.rkzN^ +Nc"['/r2 +K*[JGob#2'F{枟oS 7Ά +>/jozn'j.;'⃚>?zk #g+ +[_ZNKsÿ?/OzN&^zgo3Kf>"_BC:>jo'2[2 +B_+nKr~o;^Nz'#>ooRk?.C2['SF~?C3 +ϚNoC(Zn#{r֞?gcZ2KJ&zRR^k;7sfSZS&Nz23'b"&jKgCsJ"*_R۞~2/gB+>Z"N&j ~k&[S7__O&Z>r ^S/g>^z.+/&/_ns{??[> +/B~R:SK +2Zs_Osr2*rZ.B>7_&:22oG'Rn"bZk#k'O+/37Sfv/;Or'oNbC[[S/JsKC?3^^o3S 6{#Nf[/6ƋBBSBsgϿrNC^gS.__/onBGzo*hj~c7o.֣nn7>R~ns: +6:3swG➞rfbnk? j[ +W&fƞ_ók3os&6>O73k&f6Ϸs/¢_/.^^_+;2rr>7S +_KR^""jϷj˺&C:c.w#Njcz3K/;*wJZ^B/[*S2:&.?SoB.f~N/*BRBk ZJ3 Zr {ʢr"kj#o +R;"KRk#o3b3zbo2Z& C'[>&bb//g.NNN; o ^.{s2+:{Os/B3N +bN2 .o*s>:j.k:{3#RnSNzss{J&Jr.j7s{.r.k{;ϚosN~o:Jj_2&Z>s[¿S;B ;3Bo"Ÿ~Jz.cRJJssrJB#O/*2J +^{o2.^cO{{3n.B.3ß? KR"R#3{:β›R3k2++⚳3 +:{Zz3zjCJK[B ++.JrbOj S3ÛN3.z_:;+z3>n*o";BB.B2Ëncjzrs>2{*: r*J 2J:B# +jN +Rn+"S+B~*Z'no+O>"r_#r"o{s:K3"^ R +?g/rNBJ3"JS^{zBۇ2Rb*/^{ +ں~ +KSN>"O{+oON3&soS.惾?g:*KRbN +{ +v:/BNgz*S[2[Z/g:~KbjRS[#f33r*ooΞ2.[zKonf+cb_'nƊK>'3 +^?g.": +{n/rC6NzRO3rOF~b.G3^S{_^c:R^J[2{:fRc SGk&jrSnssKCG&j>#_S B2^kr3_.R7kR+*''F2JS^o[?&Jb?^c:n2CN__{N^SO_s+2;S&*s# G^"Ns# +'B;RS.ﻃ'".>n/.C;/zNj~R/s[j[R2RB;C;Cj3C +# #S.".{ò[/rRʞ"?k#[.J&~sS/Nn nˏ2?2bs?3{>b&OSO*Zbk ;3ˋ3>3+2.Zc +f#{kb^S'JCO:SSgObk~f2»S{fN*:+Nzs' ZK뛏skS7g*2OO3;^oj^^N6Nf^r*>>:r&Nb>:.Frj[nfڏ7gJwWcۂNfRZbffnn(n3?/^*sCrN'S'Gggg[k{ z.fR c +.*.ζ2Oos{[k{?"j'{ks(^&_Z'+N&C7gk_O[Rk +sS:{zCFRxX` HxhH `F(hh6&s3C26'ggBƾ_7wWi g3N`@ XxxX 0p@@` `` ```#Zr+jb>vg'7':nnn)iWw3BN_WW&h8 x&vV(2z:?WIIi NNʃ/sr^VH(vk[BR&F6F&:gSZw_#;&66Nr^z~>>2s㟟svx8R^nN?_w) ~z?'_snh8&*o_2&6~nCW)Ǘ?kRBnjc+O'?^Fv(FfB +_'rNh&^7iWw{V6(vֶ&fvֆ.Z_?7WiI9)Gg/#j+o/#s +Ž&(V^΂JZwwS^ngWy )Kb6vFRs3;++2(&&fbkzjOs>>S{77Iɷƶf(ff6^~6fhhhV^s G)*2RZNg?g'Jh(rg#{_"~R*GG'Coh:R/;66>&O'_G'/fN+Gww)) 9GfvvV6(6f(FH2R')wWWW i';J/o_s??V&Z[S;GScNFw?7s^(n3ZoÏ.ƾ~~_?c +>~OG7iI9WW_RN&((6V6f8×ɉW)I i'ww_'s~(Fv6.+㻛2&F&RCCB.ko'?'~>c[r^6(W i igڊ*R&Vh(hhvK'7gI'{rNSS'_z*R"F6(~/?G{ZJgi{Z^~fr돣sC:Z+&6&Nj;b>fΞ.7i I)i/:>2ʎ6hxVֲ7ן;?W7_/Kn~r6ֶ^>oC;B2j_[_.^ƾc?S/r^N~VF2rNRcff^R{S)iy iS ڢ3ZxhxOo'/;G_s +?_3J_wobnZCJZS:_B&~rF^^F㿺#^^NڎNF&* 2OI))w_. +N&f6H8hV~)iɉ_GWWznh.vo'fK +{+'sbo;.S:rrf&. ~^2_ +R>6Co/ I97G '7_soZRF6HHxXhF^~^/7G)7i'?W'2&n^*S +Nj>ZƖ~{_+z~Ƃ +OSoSO 2β2> +.&&~rsS[s7W)'* [oNFf(舘8vK{o#'g_W_??Kr.FvfV(&^>R."n2** +~fk'_?O_'#c"3[{[[/'sfR&.NRnnv6ZC')))7g)G[Rz26HfvF~_sgiI#;'Ϸ7z6f.n&6"[+/^b/sSG犂n.z7 :c+Cb>jC6f&B&FvFrSG)i)G7w7)#oK_s.H興^VVFSso'oS?n^^OKOr +o/?S{_#/2 r.f".>>&/:J?g')iG'i'âVH(h(VV(h&22ϷwwwiwOrn +ʎn/S^.*ʳ[z_'c:r~'/C*2ZΆO[Ύf"sz^&&:' +{kcW)7wwgIioO/7'KVhr>iiWc~_^6njSz^ZO_^&V/sR6n/ '?:sg;Rv~c''g+VRNF(6sg'3{_Wi)G+OFVh(F&h^sc#~fnsG_G'GW__Z_SJnjoSN>Ss?>>r3^Fhh^?SJۏg_J*O7S;gOJ&rf(hJ":.o i)WW 7O.+ +..[B&&žv( +jrr[rjC?2 rsΎ^Rc/w?o>fjjfs iGO?[Ǐ +F(fƲiyY)#*/s&N(66FNVHV^.ξ>K_sjS늃/wG +/o7'O3Oo RN6(FN2OO[o3gr+:Zbʎ..6v~NN^.s__)9w7ONhƞ6hhVf"77__GWW'7?j^^n2Co^&2Zbff~>~ /_'OgGǷO#Z.>fBVhvrjsCcg')9y sSsJBVfVhHhvƆN¶F'GgsO''gOGw'rRj*k:^fF6Rv^#[s[S3wGsc3r.R +23^~ƎBb;3'/OwiWi +f>v6Fn&vhVK;O;.s?w[O;j.^f6nRJ* B3?RbkΛ7GS'_G_"n{&&6&(v^+c'w)Wi׷GzRn2>~FhhV6FOgOS/'SS +{:+:f";bRz~^fn.cs3CGG'[* +kFv&Fh ˃Ώwiiigɉ ? +bƆF(hFoS.R*// +k⺟'''K2nFzoSʋ#GCCz33K{*3;SS/o?S2/rf^B +;&^(.KC?i )IwG77*Bk&((FHHh(6>+OWg/Wϟ#^+j+ +":#fvv+ZbN"[#C +7'rKs{K"~2vFv~fFn"c[ [^&^f(hxhVF6"S[{g77Jg/Z&3k:RS{Ύ62Rʻj.^{CJ3+NCg3nJsrCRBR2n~R2C;3wW'wwGgSzz^~&f&>FVV66&;GG'_wWg'7GǷ{Jv2>>ʺ&kǿ'#2#_K3;//C.>^6Ξ&cSJrJWg7'G 'jR~趆^((V>3#.3zG?SGgJs;Zv.&n[.b3Onbo/z3oS?/'.fRj&^(&f{Kk +3?7s'7i Ws['/:&FVh((v6 +"b*k'7WϢχ[rORƶ6> "N&.s +7g{ +?# R&2RF&^&f~ro3RS)7_/S'y)'33og3+f6VxB..G釟S' +oSnRB ".b>rBr/{RnsoC#ڟ?n"R>R#G.6~& s+nϟ'+gg)7?; _'3Ú>ffV8(B"+ۿg_7ןg__Ǜbr/sB2s+...B?ok"so3 /.nnsk*Z~s+2kR"N6Fnkk;S;z/_gO7o?sjo{k&ƶ(hhV6ff>.2J'_G'go{bR"nNr&^>&fFRz.2Ï S￟'sOsS?;"kO_o[[Zbn~^n* ›;#Ggg_c3/#SSrR6Ɩ(vFBfnKkOgo[kr˺+ +~frrrZBcc3_oO_g;RS2OCk;z.2F.>^BBJ:g;ggW/7gs:.&ƾ&f(^n*___'~z^6"2BK[3{ *:/go7w__?S;ϟ'S/"&*bVVF6Ff>>^>r~kW)iWG I 9 77_oc~6Vv(88VFƶ k)7)i;o'oO&&^F^6(^"ss(kCj2zG);?3K2s_GSO3Fֶ"ƶ^.KOgb6h(no+;s?)I GOn _K2VV*(憞'wwI9)CGw_o+Nx((hn*gg'sn>b3CoggχiiiG>kڣ/_k[#ff^j2~#ʶVF6gg7)7k +.s+Kr66ֈFJggW)g{"N. wK>h XȖʣ*bgg''J+?wiiWB~j[7J.*K>& o~FB6(H:GIiW{N.+';s^H&.n/'C_3Srs?/&V>.?'_3O/OOnk# 3'?# +.n^.^gg[Jj:Z2C{:{''OsN>zZog_Os+&ΎnjjFƖV(^N/G'Ƿ?__jgg㞞FFVKsoΞ>& +s _i7{+ۊnk?'*&nn;s~&2rrΎo_7)O/SoSC"^>&nb#[>F8kW7G'_w'_/sok>f澆&[?ON~.~NƾJsGkK3ξ'wW矿S_S +&^n~^fN>^&^_77σrjkz^R3/o{^ff&^&FnzGw7Gw'OK k//ú66f>ڟ?+bZFff)Ww3˛+;;Kc .rfNFf6FRjۏG'wo3s3CJBB../[#bn((6^?3GgKs[?R[z>~ƖNb*S'3:*S +Rrv6&j+?gOsC: "ZSGǟ'gZrzN>bFF66F66[_7_O_g˚j3/3珛{#ڎ&(6>r_Og3j[[ #oS>N^^&f+3'_C/c:^^^;{O_#SJ+S''jj3kk>&^.W_o/3'j(VƆf"sSOO'co_+n&>&c>R^~+gockSھ+?CSg'ϳ* +&((~F?GG77os[s?_Oc>^~VV6^^~JK/k3g_?_?O/">RB6n[??/[Orff/sO;KJ*Z^#[ _/o#s':[k+ +r&fF/o__? jS_>~n.B +/#ꛛ#/'7sZ.s{+ ZRJ&ff +'O#KJZr#JNf&^Ɩ{j#c/77g'//'C{OK~(&&f#{[c:/?''_o{Cs {2&6f>nb2"s;²'Gs'/sS/SjKO +k; +zžhVRn~R sCsOS/{_翿_g/+>fƆNZn.js[+csχgO/s 2ζhh( +{ +: K3.^^RKj㣣O[k{3b +.JSjzzz.FVf^Nnr3ogG/'g?3jF&&&^^fNnrSo?wWwoKzv6fnrRZ: +>N[sJKSs{Jk#O?#3c#b(V>^"+/7g'?ϟ_o#S[sO_'g_b&N2>&>fvFR^&njsSOG'Sr>r>>2Z +KS:. __'BK"rross+3++*~vvf2+3Ogg'ǟ'//S#oSS&^~6f+[3Kn¢ g'''3r~N>λ.2&~Rξ.j?S3s_?KۻC?[ +z +S/.b+O;&vf>c''??OScs?'S??[*2~^FV(&NK_'GǷgC"2.2NR;^^#3Oo[r^BkrnRko" +s{s+# S/3;oO/S/.&bjnN.b"^f +O'?[;NNzoOwG'(hh&Fv6v/z g7_'.vVvF(N6(F^~2;"jOgVvxwyxVA :v^C_B#.RO2 zgW?gGGSWOc3;gsC?/grgcGs7rc(vV(6FR{coCg_'or~&fkJ:;[:'6fJo/+sSj+No:暣nsWs_燗_3[+/BNfFvFh.kCS/GS?;n'bOSK{csv6닺FvNJoj+g#k?cnNSK:J&R^&~_SJzGg3s +{BN&Br2&^RN^F6v6:#W wSg'3CZRf6(fr2~NKN*Gח'r>ڊNJo_''Knon^^^&+c+N>^6΃wG7)wOKJ'_?J+7k[..f(F"Nk~g)IW7GK.bs +&F6222;G_g*s___SFƶvf o'/#R& +;{&&F_g'gOj^ʿs3'3s^vjˏznFVV +{gO_nZGg_S&Ffn&^NR~&F&BswW Zb~Rh^r'wgzFrϟbbJ/gWG'KKR"벞fvH(zb?_gcrR2+cogsnΛWVh(vf&[j?_C)iw^~(fRK.6VFfGG3r^3g7)j~.{_)ii)Nfn^^NVV~&f&sg)ɉW)3۳#Kc?g +nK2[K#/zb&V(Fʻg_+/'Wg j֖~~S'[BNʊr梿GGWWiWǷ_ +:~.6Fr"~&>/gG/&ֆnR2z2~:rCw)YzN>~JZ2&6BoWg?K[wW';k2.~^^FNc/s3.^bkNG )G{2^kRJN^^N GG/jnfvBn*O7CBiחg_s22f&VƶF^f&?''7WW)k{f&~&&vHgGwǟN&n*nRO?{ ?'7w33+n枞>&fj.F{n>O+B[gGww?zR>>~ZbJrB#KfN>fz#wi7w/"fxx(J/;rk:Og'wk*#sc"_/2R^&'?~F6^^fFzG ɉi) ɉ72f~3R^&fVV+_ +NnfG)i&n~+RZƒ/>^n2R9׿+rZ/;+6Zc'OF(h^)iS)7G_s"f+C^nF&K/ooo?'/n^^ȸfBk) + +2;gGoc3#+;Gw ^^f~:gB&&NRr2wi )7WoRv. +>^vfr*Bnr~*#?I9 gSKhh6B +cC:Fj?Sf'o:wW_ *^bn>RóBCS3__O/ʆhH(& +ks7w)ׇ'_?/_s/[o?2FvvB"&v^r>+R^S_gwWWOc3sF6vVV6R>&~g__O¶(ڊKS +cgS3o'Ž2R6fb"O# +scFf2zkC?7GC: +*{OCOcB>&֖>k +z^fb?'_'wɹ ׷'O3ƈh(VFJ* J' +R>z/_S'g{_'s +k;B[*&涖V>kg_7_gGj//RJSS+{z22"2Cf^΂sb+w)/R6^6&^r^.Bf&^.CCbz3''s_kZkڎ^ +/g'?#.6((hh2Ǘ)W3SC:j&RfR+J~ +/3OGsϿ?:*.jhF.ȆR"Z7WC~fR_79g w!iS>JyiW)ח2FhX6:FGgW!Yᇣ 66V62i&OrvVn'hζhV(Rj )W9H8VWZ: +WgVxNS)i!>FhWW^ng. +z>8^&RN#~7j{c&.gƈxȶ(W"WaIdžfVFVfXF~_)O!&r>2'˟wwowى>3(bh/^coc^3)^>6rw?iײ'R?HrF:B^W_wOGRH6xNKiW iofvh2KB/B~[g?>^{j/f[^# +.)976ւ2O')'r' VڈhVx;GW'J)n/_F6֖&Rn^^o)y)9#>vϛw[:_~^^*'RgVvSw* k2R›s)WnyWWj~6BW)77z6rֈ8nsj2wIw9i^6&V(VGo:rf &277ϟ Y?8Hv>Ƿ'j^J/.3O^^6f2s )!I{V v&Cc2 7W3n*(j#_g碆R'[/)Rcjb&&R6gIi7Sk+ظh9Wa)Ws^J_8vn[o^kW?w_sR~fN&(^f~sbg)Wi7wi+vV>^'g)GG3^^~&/7 g.2/fFFƏ7+)G3N_"J"hhVh6h6_ɉy_b&֖6^bvfO#Gnhv(SW {?)+Nf~2:/k??O7w7j&N(8fWO3g'O)k;gGC;xF8(/y7 &h&hObRo){s_~GN&>ZR>"f^J~ +_[&z'ci);&Ȉƈx;{GW 3rfnr(^fb~BBƆ.iG)'G/^ +H>rf.C?K' +^&COj_/y)z>o~hFn*{OSCs[[.hZWi (>>v6vOW7'6r#oJn*fg':'ozˎ.{÷.^Nf^kJ?"S)WIg3;_+Fvvh^V֞W'i3O7"BnV⋶&V7GI/K2fVrn.N^foSn;?sח[&&hNNv3"BWi'7NFr6(v^sWWىW RFhhV6(Vɷw'Z&FG{ósj+sVNs^&k3&FG 7OnnHƎ.B"*fg W9)7Wh(VFf6i)^z(62 +>ׇg)_+?N.R#boGr(F '~wz;"K(fRNrɉwigf6F6k32_w)ɇs*H?gw皿'.g)7g' +O&V&&/c>23?>kcfffr6hvVZ'7 y7OV(BR{ +N2')/GGO*^8(2N+.ƊsO)og~cjhfֈB'GS_FFg7)iۇGƶ^Fֈ^R{?wWi7C~&(vjj> W S(nV(^ɗww{~.6 Jڎ+/_bvV*)7gz㲆&Zj+bNV^ 7Y!ɗ7+F^2:/R. ۇ)) OR>fF踈vz7GWg{kJ&ƞ3 r.FNf*WwH867Y!w7?[&;3VO/S.VXfNsaYGמ^(HF7 +.jS? +6V(ZWW2zH>G WsFr^kW!? +x(#/ Ywg?ror&czC"6gWI3&&>+F66.Rjwi7ii/J(6vz׉) {>26&oznz_)hhvh^7owG_S&h'9))i'sCB^^k.B +~nz&[2 +'Ǜh(v^[G'ofƾŸS7SGׇJ#6&''''[w"o:^(HH8v:SwiWz+Nr#V2^&GW GsWZ(s/2Vs):cRB3hFiwgbxVVk)s7 !GK ^f (&HHX'YRgV((vni/77XyiY!wW^VV`Vii96`NnI:8(FPHفy9)י& 8vnGi9I7;3 hnxNcwiyKVh06iI!W[: hK7iA _ϲF@#Gy!ٻaSvx(ف ^r wKhH YȈ +(p y!9!(xȶγO a+?)w6x@`8^yY ~S#'``?A [3XW '[X6"w_~.rwC'W KWW/+N`;W7Ia Gi6(!i)wwX87g>C&hֲgGIח>X@0 8)'!ᙙWw) &X;S[/(V(_CϚO _FV9 I"(XpX+Bsɉ I77;X>NG i i ) XhڿɉSfN"H඗?yy׷GWp)_VxNVg)i׹j0V)iii' ^I)^@lp  )IwIVX&Z'ggyy3HvviScs+H`6> _)Gs6 `F*)IIW`HGLJWx(_S 7^'ɇsgn80@f*wgywׇxhƞ.'Iwə9H6.?7 OgozH8Vg o'''& @ &o׉Ii Hhvv'۷wi!fHHxwG)7G)_fظV&b#ɹ yog@@Ȏg׉wBf&iyiI!h&>_kڃ_8V6:W9W_W6`OI y ))8H"Ϸiw:BHhzW)sgIofFKvXXxxֶ~)WWIvhȸ(#7'YS^Fhg#:~_^VHbϹgK')7(("FWWw w3((&''gwF^'*{W VFJ)w_ +(Xx V(ɹy)gnvHhvf.ggClj_;>r&ξNzc:*OCf(&bw7Si'(:7)W)c(H8vG_)W_n6J?GƆ b^?7'r +g郞6H('i6v(~'C7gGWJVhj뇟"k)'~:&wi){S +/i"hVw_WfVvh8Z_9S.z&(fg +>gϞ*Z')w(rs)ik2&Vv6{fWi[>nƞ&f;/?CÃFNk>jiG>)7)GJV8(v&z9or&ֆ&~GwWO3>i)Vb32 +vVJ37_fF׷nf~*W7ZG) ^(*fiygOoF/ fr3ONV~^Z_i7˚)Ff֘vsz2iiR^{~^rnrw.6{'ng{zFv{Gǣ.(68h7GW6JV^fz.gi)wÞ +or."fF6_3)zV"_ۺ?73fƾBv^# +^k37gR&SG[&>"+Cr^bK_?j KgS/b((*Z+'GǷ_f^rVCCRs&r_fc#o{/6 +g& ?3gsHfrOc' w'Onv>^f.&>fKscW:k*scK~R3rnFf3ggkbo?_hr?Rk)#J^rKkB~sr""nj'jRVW3nK7F6((.O 'W)Nn~֎:NvSg{sz._)Gz2? 6+_C.R7(&(f{~zGi'^*&2:&*{{'/nf?_s~j&Oi._wW7ofVso +z>z +6b +;o'sfO?^ncʻ^&frgiʢS''(hS#iWok~&;Fo /R_j*N{ +J.nr rB{3'7wG/Z^v~Æjsg 'O[6Z.3_翇K/>g7{c~.&g) /S_fj(Fn iW_Vcb膛#n~v/[))i6O_3iOwβ^&r(XI7w~W?)9ɷVW(hRJ'2hxrBvv# )r'GiS/G/&//6V'FfϷoRf ?^^NW)Rf&SW)#k_G#~2)W'>h#R2>Cs8hN^'9jw_ڻIsGi)ÎN6` x>VwRR giWWIk6og/fb3v3 zwF;/I)fN*J^sfO&~&Hc&S:3s:#b))JKKcfF>gn.W2B2hh..n'7R;vk[R2σY97O#KcwInN8h Xh.ϳnj9Ww_)yi&OZ>Fbbf6g(IWC{S>&{w+GJ[>BzgvƞOri:K +~&._ SJZ>& (NK"Z3fh^[?ʣWIYi/_w )gRgV(h ^rFǿ)9 7{3oOʟ))?no&Csv6_/Br.3B)?{N/{JVnJV""6Ǘ.6ZK{7'Ji_Cw>no^33zb(vR76&R/bƈùy7GY9gGIY[sF~xf)I )o+Ϟ_Gz~?(f>&b"W9i_)KwVcK#8*^ff;o7NF*o *fj;g(.W3O7O&[9w&6O62v.7Sw S99_:W7b&F~Xxh6VvfSW#7j_Wo)rRfVFΖ +j>.*sZF[W鏣)_"RSV 'rS*[[F;*zgG겿LJ3>R //S2.rhSff>Bfx6W_o ɹ3Ii?W)wc.N (X(^fFVW{WǏwGWkJBk_ff*okrKZnV>?W3 +[NN7SS;O_k&((6&^h CR>~KOf{?S7b:WB2/&nvV6NS_'JR)+>_i W)ˣHVV8Vr/f7Wsiwr['G:JCVS6(*b2BnvffG Wo{6ww"RoO#nRv"&F^^f^RO_3+?777C?/>^fVhƆ{G?7Kc +W i_wN6v8 `8 >( n>.Go7o?I>)7'n~))__cJfhokh'jNF(?7gK.o[iGVNzbJ.f6_o(^.?cj2wS{o)ףnrbz^vV:^((Snk)3׉i &H.V"W )rSkO3R^?^f&"B("CSRGWWN'sK:?Og7JR_~R*b^¶VF(۳3G3"nwg .W7C)?2Z +z&r&R6(v./>&NO[7 iyWi:rkFHH8؈hXxfKGsWs_C'G_Gחz*SrC~BbVFf/ZKoo ZO'2>?go3'>&SVoff.OSG?gc>'χknw/nNnf(ƊvF*K3ov;?gWiYg') )3~6VF(X hh~wW)G"g)Wz's2&hV^RBNf^ 3_iwKj'g3Jz:'s#/ۏv"&hVh&&c_/32c[oIgsg?GFv>&f>֞Z2^(>b*g'ə GIGw2>^XVHȖ^/WG/w g3)w/?*&~f3c:f>R+Ff +B+sZOG/..62W_7O.2Jfrf(b:gczOGjJC_?GKR_2n _c&n2(&VfOgo I9)cGs~&&Xx`h6hN7c?/)Wi/? Ig)_'o"S&.F6jf^oCzǟ:SǷ)/WWf2&FZƆV^R3v(j.*ZBrF[s/'Ǐ_zS/ gG[F~&(~*#nKλ)7iI i_WwZF(8(hHFO''Soi{)W7W_.rzfFN[*(V^zkSSsKBg/~ʂwjCǢ~F^sn'SKSksw?H>{2Ci)/ +?~Nf?J~cNO:fGSw)ɹ9;'kƶFظVhxhh(^ +;.*W3LJi)_Cvvf.*o"{N; #s3Rv_fnKrJzrW)'?wK:+(2~sƈ(.o{o^膢Rr"j7O;"n?_/&ZO&R–3.>趋kSw b[ +^f^66hf8&γSgdz?I9_S_׏'" +j>ζnΚFFJbCSSCrG)7kog[r#C2^f_*^3zckNRON~2/3)73So&~2gn.c;~+b&ko) w)i'8F蘈h6.{⎲GOw7)G"b2b&n/.{ggo.>r^.Cj?n>#n^;j_3s/ˏ#{2gofv;Ɩ&f2s))_26FSgGb +{ +~zȈ>&9YIIw G(&~FvFJk&FR;jg ^&fv;3~N37SKcS_˃r/cF2s׳ +* +oC +w."2N?V>N2:b^z;W?GgZ{3g"+7''jrnbc.Fh>fhv2S IIy GG?BVr.N3NV6b..~.Ffi)i'3[^zK'OJ" +ׇžO?2~F+BϷBc?ofog*C+Kg^Ɔ*2Rnkg?2.szrB^z{.Jz_ϳfNFVJ^8C/k#g)yi#GgS.& &B k((v(R^n +f7WW773_ξrr^+rO;&/g'O+J>fbR7wcfon*2~_³ǎn66N2~ƾbRn ?+;W+OS'Gs.r2"F6VȈȘo3gI) Oi_3.ˊRokh(fh^'sG+7so +r~SJvi'gJ&B&+oZS^?F ~g?OZ*>~>'#hJ&6Z'* +"?7# +3g)((F>6h(N/_OGi7C:fv6Fr((>gr~rgOgiWgwrrF>"cJ?_w_ ~^vF~nnK3SC;ﻟGG_S+N.#/3+33j[ 겣6h֞f&VÛBg#/';_C_K7O)#n"f>V>vFv+S/GOW_o_;(nBv~NZZ& /3Ss_nkb."~vn[+׷7Gf2Nbs~b[k +3{F.Soo ' +o'3GiboN_sV3*2׏f/orr/K3)'Ǟf~.frVHhv&2Zjc?i7i7iCc;Z6V.Nf&rR&Co?~rR~2&rw_/J*B"6sʞj3 +R~^_?sJb_+K7'# _'Fnf^֖6RkcS;.SZ;W/_Wn;VhvF(H8"*sJ9I/CkjgbFNRv(V"Fg^Ÿj(G__&'/3~O/_.^/'? Σϻbk.2SgROs+w./v(N^^jK3/rV& +z2볿))w/[c7 Z^ֶfF΂'w)W[*r;c^FF^2ZV&J2_'w*JzC:K;:SKfnfOOrrbc #2.6 +/;;r+R;RjsgsrSJ7;rNj(h' 3#{2n grr3gv>~>fN?iIW)k+sRZ6W*~^.f+6h(vHȏCc'ڟwC&:/ggrsڻNn._77K6V^^>˳o O»/'{B*_)Ggg72r###VRfVHcz'h23 i'__)כGB&Rr^zOI:^S3w .F^z涆ZggG_/_zNS7G_r#ww3;bFfHv62~ckZKw/jso)>[VV'2Rb6fkB{zj'w^>?:.n"2_;+OK677obnJRG7o_'wj~;6ƶ#RvOo{RS_S::';noo3gcV(Vvvfֆ&OχǷ'.W)3:rv6&n6vVF~.&oz_OG3?K[_W/'w ..fr_.~njvR^fr^s/iח/KOV6fJj'oJ~VS:{*oc:ǣCo?_:k:79W6Ǝ&v6' +oGw js^΂)grcr*'nS#?^R~.*6{+g)i:2#j"2Ww)7Z_Or6hVn:h6.:n^3BLJ_Iח_+b~n7Ȇ{sf'SCC2/^~~'&Hhs*c(wgO'i)_z*cSgG{Z~B{>fjnhH2W+&b/'kK 7i '[_sO/n(6h.ȈN2ƖBG3_OO) Ǘw?^3^ƸVC6~3)g'3:^g#~VNN#3JB{?g3O'?'jZ^F6['gBNO_ˊ.~b_22kZ+;3(r"7Zn3'znos7?G&^V#c"֎^kfnsC'3G)I G.[GfVh6Bfh(forGk#s*j>rc ^&";:scO+^KZSgG3K2~o_'wgK[CS33V~&ڏSF^ C +Jg__g3#^fB;&n^&&fj:&"ڳ3')wKg)NJfVf6~hF.cR>?7G)iO_?'&c[.6.ZcHJ3f3RVJBNS_.*_~b;37^k+n(h(b .rSzz;g'+3G7W{O+n~^'/cJ(ffnrfOG)iG_o7_b¾(hVf/7_W_C{'_C3oB†N~2:>jF>sKcgzjΊ'">NjS~*K~FfJ&ZRR+"?C??2ZFcWs . +(hvfVvBJ/7_3gwWWgBv6֖&6:2SLJ'?kzgj/ZJ{R2VRvRFn;s:~{^n/C'g23gW3_2{oS +CR&V^ff6ζV&RC>ZkSgGGs's^:_W'{'/(66RFS'#'Wi7O:_2(V6ֶz.O#>?W +rK^R;~2ZskZgrC/3"Zrg+㟺'.fSrKv;kfkbKgb*[+"3N^gww?g7N^Ɩ(VVVf.k ¿7) ))#Sc~~^&~h>2~rjZ"**ork3o_Kfr"Ζ6>cj.J//"no#s;S_rj#ßcf~&ں*RN>bBsK;[2~ +fiGG)W{FF(hhh6~n>F'3#'i)GgG_3s^NF(~j +">f^&>?coOϋR#2^F>J;_.*:SSCRj +S#j +3:+jcS;JBjk/s_#SJ:2rN^^Bzzkn"/Ǘ_'7)' jf(hVVv^f&:*/3sG)Cg'_SNN&V>v&f/[7Ws_3SGs:v>&*^&'''K~ښo/" +nBc?fN +/s+o2:ϏFfzJR6f^osxVn^?oi + 9ɉik6X Ff&F6v'fz*r(6_Cgc__I )~V`fhfVKC_ynnfxRno gBJ>v&6f) Ǐ i?[¾r#gg&_YW{_s"6V6˾ +3Oo&R&h? i WYigw3(hvFF#&G2r#)Ǐ7?WWyc&sfFX`66vs!I_ǿx;"o? f/vf /n?oi6.'NshfKk~^NR[3Gcˆr2O3 w~6_2>*>NV(WzI/'÷_2~(f&&+^>V7*{OgwyW_';h6z&H&~;Z&9ik'&&rn _F^^vF& +b^")"{Kso [ck/22bZ[FIWG3>>˶V^b>2fFoW'r6v"K7s;wi?W_z2sf&6f2^6nFc*Ro7Ow_wO)((2hhk{7) LJro>krF^; Ǿg2# +^F"f^3O._ǃ/hNNvv&v3Gs(*~'i'J3rFv(CF^sf# g))WgjZ>Of2fs&bg{3[oy)'//.vh((h(o)7Wo6j22;O_Vz~V(JcJF/_׷Sc+8B ') ۟)O? vsrFW7 &(F:֎;6_9_)oCO/ +6[Z((f'RoOrrrSs>'g{C7))Ƿ?Nhh.;boO3j O.N^^s*Cg/?N2^f+ *^W?g?.&N&b'ywws(((~SR?;JVRhnƳCio'RrV{rv&S+? bvksF[^i7)CKhFH2zV +)Wk_Rc^cVsGZ_&S7b'fjv~^sׇ?/Js>V6b~V+Fωׇ?Kj(* #fZ/2_i'ORSNR(rGwg?.Jhfo;3rO&&cnjBgcW_iI(22svNOw?Nsw^ƚbJw";krJ3'ZN^n'v^&kkGS)iR[NfS&(^wϿw;&26&&>o +^CsgO˂/➆Fjf^rJGs{G)7g'[/R(&'cOc3r6R.v+.c?_i)'ws{&.N3kV^?rj:2;'RS[+koʷ_6~. +hoSOWG3'w/ff;CO[g'KG3?R&Rczw&ro_O2r;†^N +'OogRrrƾGC3v^&hvƏ+2o:jWw)iO:{&_ + &Z+NgjZ/ov2~Ϸ{?W_nS#~n:V.Rj#lj'[7bBo& CS?O:7)O^~"ss +_n2;rNNv^*2_Kg'˂G{c2vg'2G'.f&>ږf.W'G_b{&rR>jg+n^^ǷOi'wG'2S{nFָ/:gO?3^N^kKk#C_;"{Rjrr+Cj[ :Z&^~R.&SC/O3{3/o.k +F((FR~g)_sg.ross2&rj:+˞>V^R2bfFGwgg7^ffF(/gSLJjRjk > /szO2:>n/3.&sK[F~CRjRS::?kSS˞‡ko''.o6Fv:f^"'o77{7kg'ZKJk666vZF#cGS7SzNbFvV^_w2rncgO2c#3K>~#r/33)g.#>F(f&3>_3OoWR~nO{Bgb3rF(&(?2ϟ +g{w۾K#^~RV6^~j'__7)gw_S&n^ڢF>f^:#N/i:>^n6^>//';'c*Z_׉7~>6S62w7GG^ƞw_#ξx6N^v6V2.II7/s;6+Ki/Jƚb~6v>nf^s7_Gg?b;FR(FR2 +s_+kV(i'G3÷> +Kûwo'7);*vH(6?7c27F2)_Ë_I)C/6(gKO׉(ָ(FF&RRos"oNW_o.#fBsNfrhVf&?2'gsR +) ËfvbǙi ^sF^~ :_/_/;梞˗+GÇCobJhFv^2Go*O?O;[۟jښ7'#//jJvȶVh63_'Sc"SK#?~ +J +G^Bv[rck.k*b' {zkf*s?CiK^cjFf&.6S_?3OnSG+o*n{2˿?.[ k '_gOs6(Z^2΢[b Ƿ+CsFh.NgGgfvNF6NrIW7꺛_ +"3~v{s.ZO'Zz2^hfN6bj{s/_R3R +*;'z2&f^GKR*Zr + +''rS#:s&&&ZȞJ7gCΊ>3O^*kwf^.{'GwIb6R#Nb? +g>6fR6;o?Ss&*&"((frǿ'G 3#&nRŠjJzSsCn#+ksK~&r>So+?/k~.c;J#sʳ:jsN_{h6Sg.3J 7ۆ;澟CZ'k/;wIRsnfH(VnKw_/G.K~/kj#&Ɵ.[22IWwNC&^vv&r? +snKCg‡ƾ~(W_o2jf&jƆ:6B&SOGg{cj;g_oCoB/z:O3f3rf./rBcnRBGsOw_vsFfbf:['ǚo.&6GJb)KG68(Vh2krjgo)ck/6khjVCJs/n{B6Rf~/rb'R"gJO*2Nc>&j^7Kg#+Z~(B(>3rfrj&#o7s?kKOKgzo7'GsfFr^ +f&nZ.J?:J^ڃJ.&J+zg)wO SOs~H~f3sâ^&RFzgGw?gw_'^h..3o~_CjoN'gz +Z+CG)oCi__V^FRRFk۶sN +NRßヒrkV.b2BS_NoFNk2k*jS&ڞ燇?g?/7/ffVf +OO"?_~fz&&67)i_^NF>&R.BJ W_# +_Zfvnr'_'_C*FֆFւFc/z/sso?/oJ{*+>fFRf/SN~S'jcs*/{//RZ^ھNRJ7o~&^bn>&z?G77'rJB~z6N;oSK/>s#[*~v>rKr) WwCϷh.66'?.;6V^Rr&R_7SKo?3*sRFhn?K&#'O7.{R^OS/.)G;o[v2^/ςJjsvF'_{ 7OJCn6.26[BVo3Hڿ*Z7W3Gw7# +6(vF׿'#+Ξsξv⟟7gIW32Sf*kC#{oO"3z{>&r:z^c'o)Wo_r2NN.fr&^ ++" +ZnC*& g?oBs +j#>?*3b[*K&N֣FB#[_'ǚ7[O.r6~&KgnkONv&g_)'_"ockG+>2JSn?CNrrn&KRg)ھfƞ&?'?'O'~(Vro/wW'/Cʟ3sn+.zk&>?3+7_s3ksn?k3_b~RJ>F#Zncw77wz)Fo2֟~S&燿翏Kok~&6Vk2Zjk'gGחg_G"J2~NboOS?2(HX8VN2Ks׹Wiw_;3N;ΏRF +Kr +_No_F7Ww)W"RB*g27W;^g6F_Jsf"3_v>(~//_R^6zbffƸ^'ϊWJ +fVϷJ/ w_)iS + 炲?.N n(_WW9#rO׉熖{C>/ +w&g +6hR'o~>>w7nssf/.Rn(fJ3CFJ*OS2Kχ.Nn?.;c&.f^[V~v~gs?IJjb&.N&ii)?wSk(xxȈƆ6gG/zsZ˞ +_/s+CvfRN>r"ZzW7So;#o+2{ g73 &*sㆾ/" s&NGsZzB*RfCJ/#RjSZB"/v;."z'#w jko2&>[.2)ikۿ(H6(hfFN&F +wׇi_w2f wRbO_;.n_O>&~V^" +ji73o盆ڎ²G/[†f^':2jZΎNWGO;gnﳏbwW?ksJ{f/&ff6g;J#7o*.N"nnGggS'?fC#[vvF>K/G'3C&[K:rkS&2&2sg'&kssz Zn&'Sb&BzrN&Zo fr3 ˾)GK'"z.&z&'3~.cKF^N(&{ {7#/w3nC7'ʎj^_?/*n2#s:.F6Vr;^/wwOO3J3 +~^[nb:/v66nB:>'22[[z^f6KoJJBOVnRr²Bo6S~?[SJ +R&srz["kcÊ+3v"z[r3'R_OSrzfoG'CJKBRgnn6f: ~77gSk?;VF2*_s.˂s&j2NrR7Nw_ϟzr/36/f~2 (/*n~Sf>WjWgz~JF粣K[~:(J2KB;g)&wCg'>6Ξc +'â.{/J/^nf2rσ7ϟ2.Vcs +rR?O3~nfZb/G_zZ_z†_..N/2kFOs*RZ&Vfg'NRC7')w^{+^ SZۏk+&3/^^n +&.:.G3 k_>zۂZ"_BO_/zRO>N2  nrFFOgʆVrO #O#zn>{.^R>G3b.O_Gn;[/[Ϣf*_"r>3"N/'?3'_'7oFkRf'?NfJ"c rj 7+B2RZ*_nr/[C2+Z?:/["&2&"sG +KJ3SR_>b/f.BS_#ǟ2>"f&vrr3[c +K3/"'JS"n~.n{;rϳBO_JJR.hf?::'cW S2f^2sc2S#nfB/CRNJBz{2^~ [kjSCJ[:?S*Jonr2rn2.^;cZnrGJ{J/.Z.n +__7NcR>{+'ˢ˿cB?ʎZ/*SLJ Brk[^&3*z3OO3wo"/BnFSo*SROJNb{"{+3;&?/3JS:g?#^s"s"k{r:n/[ڞ. +r/?3 j>3N:.J&&.#:jsoO'2ZSr[~{{ +ƞ;˟3//C>&2c_"Sk*#.~&'oʚO [s3*B+jrb΂z~GbBc/scS[ʞ.sc#zOB;nkK +r/r23JJoۿ/_&ΞrzFbO{'&:2;nKbf'sC[Ocf.Rf~_*3gGSs>*Z+NN¿㋛O. +'''. k["nrs#3Z[O +~>>k;S'KkRs* +bKo~bO3K*GGk6&jrRv;7SO_rso&kc&~_珚2wo"BJ^Rjkf&:2JF~6BNvgJO^"I_/KCϷ)^&n~v6"fbnS2j.*g_G/Sz_f&F[>F^+*&VFgO3{_O.wI77GOx 88r"o[gnbg9I!!g6Ș86.Oz3"8ظ'cۆ^(.sgN6薆/_wWgO^Vrc˛:G7gΆ ISwK(00HsS_coWk2WIIɗOw'ָ8hF.OS3>z(x_G))Oi7w_Fb_i9Iwb_gZ8 8.''6ڊ^((.s)W )i y Wcri9yW? +R@X&r(F.CN()I7ɹi_h(KWg'{'GO(Jw)o3gRNFXXxVۇozڏW_VhF2')wHh2GW7GGGWW^~Gi7_k vV(V6>: +N") yYyIiI~Cs"r;rv8h(ڂso[3_7'Ch6NC77/?VhV"{W _{Shh(W_ww&)wwGNv`@``8( 'f^ֆr7yYYyY9W{(czx 6RjNbwgcn(~ :7__Gi)IN>?_7#& fO +[777W).X Hv(Z{ +>riIi 9I3ffzz&+{2frSoiWj^'wONvf_?ofV6^Sk3nRn) 9I))~( HVh8h2ffR)ə9I 7+~23s'*h'7'B.~&zSGiiwoBnF(fN.BJV(VRggGGOrNRciy!!HH8h6HhV[G9g2{Csj?vS_))/FFvf*Kg?gob&~2K;['((FfnCOg7gg[RNKo77G) Ii:f6Vh((hhȸ(f2 +o?i!ai**_s[JkS~VFj+#_)w.^+gg'G'Sk&^&&nrB_{V6&^So?g7g~.[W9ى/:.VV66Fv6vhx8Hh6'W9y'S'gg+#Sƶ(Vf&f2{BcwG)wg^f#Oo/+(~.2jOZ66b7ɉə)gs.:F6^f(?I3KS?{zr;.VȖ/WW2j{燷wg7g7'+fvfr[{2?bFֈhV +rn> +G&FWi9Yg?k.~>&&nfF6V8X 6kiy'S ;S'LJ'g ˛c^hfZ?:ϟ_'*j/S_ǗGC&>>Rww'f(v&n_N6Vv_wIbF^fH(RW)obGij{s7_V.S3'7W_"n"sks_S_6hH6&.fRw)>nr{N^b7G3Fv^>rggOSg 9bΣ˺Fh(~f( xNN7 yI)/{G)G3_^h(V^z*B_g &rZ*S{ʛS?/:njj~?GR~/Î&ff.9YWooϿS;;+RR2FhHX xV^ )7OOǷ)i Ww'/.FF:zff?G.r.bggo**NrG /&nn2 +n?oZ涖fR'iIw?_'&ʊKJ^(((h*) ɗ'gGǟ/O>VֶVb'b&N?'3oG'LJ_Sz +z/onffO/'&Ξ^hN;ff^~!G''O/??sJCCoZ^HxxH(VȆG? {ϷWWw7f^F&κC*{ʛ;jko_'Zro{2);^>^&^.VVF.R3i)WWחwgS/(hVHHV>O{K"J3gGGs&Fg7J_o'gww" +&^^Fvv&^fffnj[[Oo 29yyi7?rCjn&hX`Ç7gO'!ٙy)gsFVfR>f&^6V(Vfbk?營''Z7?C2NfV6fvvfÏϟ'Og7 i))wII_o:6(Hx8 ~J___GWi ɉGgs">6v(hFR*?)W)W7s +Kz_S;/FƖFh^>2~B7Gj7II 9 gs'*N^N6VX +_w)IY!yI9ɉS+(h((Ș8(hȈh(kOG)w)W7wWgo3Wc:r^&6(V(hHV?g)I WwG)y )g/h(hH8hhhvRʚ_wWWWW)GvvFf~k~^vvrCGW W#Z;'OK/G'+n&nRNnBnFv(hh"oJbsWw'''Wii3s[wF֖HKK7W iׇ_矊fvf^.n~[(6R +3_gWG?Ww~^ +cKj2J.zh6F6vFh(&+Kc Iiw7ɹw?wn66hHx8Hv6FF.ii)ׇS "/oCz*s*~6f~v(nwwG2 +?zZwW/NNBCz>N.&hvb#B#/os/7WW7NF(HVr>&&*'iiiׇJf3O#*K +vFN[_OosÃSg +΋o^Cg~N +;"VV^Zr2bo_GgSS/c'Ggw7fvFF(^~62C)wWWWGZ. ښR>.(V(hhV(F/3?'_SGoGiǿnΊ3k kbR n(82k^B3RJo?7o/__W)ǟo*FV(&Nn&vFŽ2i)G'2&&n +C'{>V(6^^_?OJ3/OwwS*sOOڎ:{*//~rV.nk+WGggc뢊o#sGJ.ns[N^Ɔ6hnJw_+Z3nn&vfڣW7O7Gˣ/Gi)'/cr>^RCs/zFHN¾ /_o_g?gwoSz>6Ff^h(VV((#_77ʋ2Z3g))w~~~fVN__~^>RWW_/ 3_^&CO3[ڂ^ۻ^&.k/s;sBC7WWg/JJk닢2k.NΞHFr3so3#OcRnr˳Z^Fv^r/3Kb.nK/K2۟gJ~&NbBzO^6.kûnzK*C[[Jzn~??o'Ï_'/ +~frK(V6VnS7WiW׿?So㊊*)))Gf6VVv.zbkˎf(vN3_'GgG_ +*oϏw2"3~+.FFF&:/~"o_7C3O'c2NB+[s_**{3J.rB&&&2{Ï>^ۻ*J3O7_c{B3Z6Hhv&>NBj ~"S?{/''s3'Cj>./3.R(>:;{'gCn>N>+Gi)7/&&>n^F>J/O.&6(r#/Sg7˲nW7{"[ò>"6֖Z*3K:B*GG'osScr +#O~F+b2>J+r.&n/CzZ_)?'r.Zb&*r&F6NJs//_GS薆Z ۻۊ>fF_ ˛룳o緇?[[~NJJ +co"^^r#?_Cn~&ƆNc) W'#2J"j[3c+;3sBhV":*:.;c//cC/G7G_ϋ.⋻b^6N⚎FF^n72KC.R_7G'z"nR soCˢJ+ +N.bC?k+Zz +:3Ϗ[B*/ok3o_+:&)i)f6FF6vBo_R77_oLJO.ff^»Osk/s;.FhFN*bKSʣ3zrBi))7zrz.2js_{2fVhȸ(g'~>..^"C'_sOO>fN_S[r2Bs_o{nC_'O?*66Ki7ϣZhh( g_o?cb#C) o +K"Nvn^ +f{Gi)6FOgcZ(V6^) /#sso>NN&f>~Ff3#jRK*nZ~~&KW )gCRb'))7f6+s?K">V8V>S WǏbKr2r:^^RrRbj/?wLJ'{Ά.rr*N^"owIiW_ˢFv6^''O#Z&^n k[3ʚRz3 +cS/'__326&"O?'s>f(6^o'Ss:&FV(6C'G#J{*?g?ʺRN~/s3Ss˚FvNZcC[2Fn/wNBnRK_G77G:>&vFz'g_S +~ffs+ .2.Bk*/s#/k*>FF>Zc:2vFF6^2[/s3r2B"r +g_OS;O_o;zs{[SKˢ6*j:Zgϳ"v((h(^ #_'_'c&b3*:22/Ƿ7''jb"Zr"kj.FRN~&V2gG/J>{:SGgO+rnbggg?^8j +?bBNnB"+J+S￳k3OosK#r/_/;NN.B2Og7?FFf^O3kJnFvvFFB_C#Kc3 +_ǷgKZ".{srjjkc;#o[^(&^"C_gO#rr^Rc_g'n^R +Ã7[Jr.>&"K3S3{Rk{ãcs/2˳CknNζVRs_g73j2J*+s'g~^f&?'G/f66NbCC3RrnR"[3/s:SOOc *Jr2zj+Z~S_Z.NR;LJ_{"N&fF~:ogg?3{BNJ*OKK#:Z ++r*/ z+jz*R~~Rb +2N2'o~>rs7gj^&Rb*co';N~RSO?s#ZK#3K2N.Jk2SSBN*o?.N&^g?k".*__o3s3{fR+ˋsc#;r"JB.z#3K[kzR*/oz&^&NZ++ s'oNn[ogSrnNnKo''[n>.c?*rJ3R^+ +S'ScZO'K~nrbcg#b&_Ss2~^~" j:znKo_;+ Z"Bšz+s'[:N>/O3rƶR{O'srRnRG77gO +r볟'SC2^62o{2R2r.r2O 2S'?3kN>~~.kGw#2NKoo;z2r.NN.b#SOoosN>N.ں +;3˲zBs.n"S7SkrR2R~&>"ˢrN&n s[zff" 77ǿBbB*[B2{cC.~rS: +bjsOsZ&6>rZ__sj~f&?7{b"2?/J +;knƶ&2CS;*BRnc{KjJJj z_G'N&&ggOr~&&OoNNNRϿ__#kN^^f~sϏCsSsb^^n²"OgS.f>ZO_?#zBRN&&>.o__ +Nz#;s_S{+^nk3oRR: +JkcSOSb>RBrkOKzC3*RO*J(?Gi Wik&^VɆO/:Ao X (V'v((OYyW{ (&&_{wX8Rh zO^/If(QAsk @@ X{)J7i'iF7W)/ڞ8`nC~wɉY!aiNHV;A)B{h"WWgh`0X^O'ɗzF憖'_F86w^)>fxX87c9gٞ86>(F8^g y9/HG))kiRi9(,6NwgGa1vs!H& yGi +H`JkSasNjƺhxHrhjqaR 8 `S?_JVv'z&))Ȉ99!9 + Z[h~kϞ۶F3( +iG!i 8r(NȈS7ar)w^F^Xn&( 6Vˋ+gQ!yhh+>I_W (^G^W"98xf`3a!2gRxv3!yW6&hhϞ ( FyWi*Y)&)v:~C&)^ WiVpH8) y3k'g׉ N`XV6sjWn?>>vi{&7B+iy9 H8^vgJFV.8xzI#:fAI)`X8VR6C7vH(gV(?NK _h2ف!^V+xF*I +'.36f 7[ +X2 X;I2؈hƿGij[)OwWfF8xh8:waታIs(y732Ȱ VhF_/ghw_W S舖;V'_gvZ6 I!aYCx 8Ȳ?gz.'9)W7)`Ȇh ۇ)wk('^SVϋnwqɇ֘`X(' S2S fVhfFٷ 3ΈȘȆIiFƷFibCy9!_X^((J~w) GR&zo(w/B#+zV!əis2)k_ȸ9y+g)HHHh(*_G^7nS_!h>XFr"{hGRsSɏnX3 8(G7/rRR^׳(_(66w)"z(ظ; )ics k'NJsHH(ָwIIY+8Kz'j /6j'gwki)s(Hhov37a+)/g+Irz?zf^f^^2WW_Yx6hRg7ǂƷϳ'a W!(``X fx6siY 9_w(VBssSvF>72RVV^S/7aF~V8kF'WJ)ig~.VF(vOb6_Ûf:99O( [S/H.Fˆ( 3o֞+&971(BJnj(.(KǞk_O +s^ B^fo!)(2x"6V*hZWYingX8~r!))i)9vxh`(n6GW!2G2sJ_s2_w&hXx&JGə);^^v&^ +_7[&F^hFH+h^_77i9F+rhNZ7+G!ovָHhXv(`(N^zi)iskg&(KVx?9g7f7BVhV(hZ+_IW)7_&Hh~7kF7#˷i#O*6_if&vFCwg'&Gǿˣ6Vf6v(: +^cwyə?Wb> +zfHxV(.wyb ^:VZ3RzI_j3rn)s& +V&9׷7W;_iF(F6fvkfCiiyGRhxX88h[3iGGg)f#S˚+&VIO熘h`VH"F +9o{:{j7wFV63))׏3ZhHHG^2s !_Ͼ>.6H.&ֈVaa;h( `hvB?'WWo(vn_'73KVhh/7w_OiyyWk68 (3'wWiΟ'~*b)s)C[?ZRR'N +.Jwdž.VN& +&&7!g[>zC{f((g{Kz.F^r)G9WRkRfhVVfHNgow iyiZ6(kz' +/g_fS?B +V{ϻw'f¶v6v^2WWIY Wfh. h憂GW!yi׉/fs;gvVrW fhOo)w&9)8 k_/FJV)C3oIfsgvCh cyA׉axn+NYyi223s`_1IAن83gH62iHGhy3i!aAS@ iix aiwH3j (^IYAaN _@Nɹ.h?~'f {)Aaawk׶ ,,@&&aACf`2rohoxFIZWJ1z(,@o? 9(f`X8a bc0lNǭQAih:O9 )(pؘF{c&'9-ѱY `xv3&hkXp H!QAa)X`,,OiGZ!aqwR`Vaay@ج&fW)7W!!aYZ萐X(9Ky!a鉉HHP^ VȟY!w 8ΙqmљX;`(k!y,3!!!'?s ZX0^&hV ɑѭ-qƀ8xf H6wIYy98r_!R'73Ii88!hF&:>(‰6X))i iaYI8` H&((Ɩw ɇxp(^!W9/h2Wɉw,x X6a i)'''s^Xl)Iv gI1m jƸ`Аh>gr )3Ȑ,h YAIٷ79X)y I/ ;H`8`BGi(?yAy`hPP``OwiY1X  #s_6`XIAa)9 'ىW@X,`h+f +a- .V` )& +6Wzىi `VS)YYrB^8s:G)3*"gkXX`*'7&^)N&hH,(jja!aٙi ؘϣ7ؘxHvx p;(y9i)Y7W`z7!aAɾx@Hv3g;9I !'@)iqwWGO >)aI^;IIh88`ٱ1qY8pPs__Y1Y7w눸gaa/'nJofN2 XȲI_"c^i!i`80(87 Q wؘH#"8_GH{I!Z8y:H(~ljGFVc鱹yy(x 'FH~--bV06;f(riWJj ai +J~ORX`H㹉QA!)袛K[Gؖ80088>Iaqщ;vh(3!IvXhX8Vv1W^+29@vK!ى&"oI7^8^V{)qaGP0px);(2^) yW郶>iYעN0 x! ׉!y7FVP` ( +aAc H 9)(v^f&yI((6gi?` ظ'aI!.)9_99vR2` F(ammG&`H6ciVxXV +6W/ +j癹)y9Ɏ^0@X ɏH 88ryY7'iiY'>(`X HV&")h 8hW79fhv^bv(V +) S I`R2I7i;(w)LJi i'h 2.gSyYXXHyٹ*8 H'9[泷Wg)*nH/RP@8vII׷W!!Y9[Jڀ0h.oayw^H)G9ȸgrG2IinOH Y9'`X_n9y!Y[n2` h8Fh&1!9龾)wF0v/IgWgo_W Iə6zOיǿ0@!y_ri99i_hȶvx6RW)_.(wY!7` @澳Ǘ)' 鳟X()YY')sF/ׇk(VVv((GG q!cjVO)y PHֶ&ki a!ɹ)@PlIə!ٙiv&rzI)iv) O/VnJ~~ƾ9Wf(X0@h{!qy9iH`@ XFJ_)!AaISh(2.k'V8Hhs>sRCiC[GWW!yYvHPPfw9YA_ΞH~ָhƈc#A!Y1GVXp02F&Ya!فZ( HVi1@P{YYفYo@Ph8/37YQw@@89x(hV&gfɻ˙^faaWjv((x97Rsa[ wiف>hP0@ 3oI!qq>HpPRúhk(CAIOׁ(Yn*x,0*!9!B^OOnp,HF{V(` !hI VXk/hSJlj1^ok_xkw(W!))Y ~'IY `Ws6FX`h>8^am>v9׈H湟a&X[ɲ@&a!_0։_W:Ioi 뀾^ +`p((s Ga +s11#P,)NpRf{!7/hAqIG27WyGSX`,0@ +n 6)iy!#aGm?6`ȖVS.)!!G`ȶȷy1qgh) 8nIIi_`p8VayOɑQqA9;^{X@X@Fi A1!naሶ)HHiSٗ x8R#濁9G鋟ag{r:3JnV@@X hyOiYAa9W(S jF:)hj'w)i99rsY97O fZwW7!1!GH200p`KKHw1aəA2s~Fof r&hxr)x87aRy_!ag[ָ,0`f6^AٱY_3wVv 8 +G1(x8 @౉O7WYZrHjWo{f/>Zh`H2qq119OkiȸX8;V_)NyWGϗK6J2>z"rRJ)9wyFVVV+V gg/舶SQ?F(?vX(( hSAA1- shxvh r~Zy  Nf#x3^6^WWWQ1qWv0` x0`ƶ !!yɿDZ!W!iR~_f.6FFX+aaQ!O" x o6؆(VAqcKV0(FoII9nj> H0F"~?naIz'9׉ OY 360,p '!Q!2X 0 qIٹI @(hX(?Rs_iyٙ7bs6h7Vfx&/k2^#qn^R[p0J2BqmWXV(V[>"^ָ' G?vf `"6('Sy-I)+Hp`hFNkiZaG'Y!ʈHיysb,@XV`{1qW' @p0(V23aѱ1 HrC_&0(Ii anxF^ ,@XFWy#GkhsPpVyAay{Y?fRl l,XظaMs`68_: k--ays,pȘX / 9'f#_ p Aa s&h^wW`p(v&ёW_‚fXv,/( i9AA׃`V`Ɔ))_ +98sx! Ah@PPسJѭ !oF0ゖ(v'AagN^B{?!(pxXI1a1aKv.*vGHl@ H-/舘xb XhIAQ+Ȁ(ظ v(8 WWO7:C+"1qik08ͽmW6@XVxG!aa-!) i!F(@(:7Yqr6V^7)~yY9@,Pf^)AAmi  ( +8&V @p`hiYAQ1WXV؈2#wȎɗFIo!IVH_>qI H`Y1aa`P@`p`8_11qNhx^NX(G!wY9[ F8pXȚYAYb7i20PP@@ !K0b ~H.)918V2sNvXG'KC#iV(˗ɉ!9lL|̬@Aq9n Ph!^ ( +) G`` Oi)svyzwz.WI{ |̐ A--Q1-99PPXHHVX8.YaI/Or ?WWVh/v?)?7 WwFp ~wyiqq1/lPi97`f_Woh6s)^ya2(Ȗv^ OVأwȸ B>Yy aGyFP<)V6"ȈHǛYA/V"7'_VH@Rhhg&!Aى)o82H> iiw&,pvxYa Yx:'Nb?W `FxX(ihfF&ǹyg'wc#f_i)F(nv* G/{8,h!aO (6Iai;v808!c!(`"66;踀;wz^H* +kW!q׉,@V9YA9(*9V *v`WYA!֞N`yY'H/6Hy!iyya9 @lP@GR;Gi!QA&0i!aH IIIVpfg!)& @׎7w8 x;.O Yi R?Q99IqmQ)'(?O?+v P<P>ih0P#xhx0hx8Xh8"IaAa[`Cw!Qa6[)I@@oWa1aigV8Xf^ 8(8bsOIIGkxs`x';9A(Z?f#i! ,,XO)Ay)NRWy VȸFH`vb7"!i?.h3^0H V97hf.(h HnWY;(fֲO?YV`ర0`( +;)I3WI!S82JJX(xO[7AA9i{S_BOXag9A)H{{(aaY(@6".z1#NsW( .haya/6R33>hxK'yAa9 !w? HfV1B6 `(V膖Yy9wc(`f7y ?i'/SW:H`@XWiWaI)nf(RhhgAQY8H(&>xָiAoɉW2/haᱱIOV)qya!i&6xnWaaW^hVfHz62 x6Yyg8HVHh i'_ɿSV`0`@S#y)j2Gw{ 9jsW^foJfk2(xh !!aIi6&ֶ`Y!/w.?J@N9s!ׁ)w{K`(2i9[>3j(R6R;8XfW)ˉ99)I7OGΎx&O )irSIg[ONv8pp^ 7)7IY)9)XrOW +n^'{/??vX fn{9 9 ). 7?ˊGw7 R6hX^3'ygyyYIH h(>r*^Y)SN3VX +_9W3G_H؀`HW O?)O I)R8V(.oY!b6*v2yFkn)HHvjK )NHFVG)bj&G~&V^fFn'wA)y iS^F6.ۻ('y7LJ +*hVrfIy2(HƾW!ySþ>/gNFFJ^VH8h#G)gYGOOv 7V(H֞n6(n!i ) (V"yɷxxOFFCzȳWsIw~F;~N9y)?H^H6nW yi{sn&HHw;6GhB6&hfbOWcSkW9(a9yg?F68HFָ(I_3(Ws38 ^FVobRz#z&BIWn&iBVH``W Y)9iBHhx7'wz>W'chFGk8vڗIwC66N+n^~V.gZɉ'>^XfYIIyHH(Ș?/^'Y7"R_y_Oh*_ +R(x N&No[( 'wS2^2?'(` ZWW9YGh`{cio"rNOGN?W7SWh3iw I. FVhF.~) ɇʟ7'z&z(`I79aف7 xX^BRyڂWg)r *7o8HO)i)bƈFk~&BBNڣ.~oǗ) sr?+~Xx+i!ic H8(G'zGξSKR?ϗ)C׉IYaY(fVFx`FW*wgzwof8(>!h xx(ڿ2K7'b"/g[iB(&rnns' iw7&hFh>膺(+Zr/*W3 26ȸ8o Ɂa!ֶȸ3sGOj'Rs^I9!?{Ff~&;FCf.R>F>&OY!1YȘ8^_C&n&ڿ7'?ƶ~2N9o2BF(>JG.O&v2fFK[( +_WW!)zBZ~F^(Vf)^Rh'_g:KiG!9"xxֶ&v(~&VvSCiI! dzΏvv f:ڗW2?Zh6n+o;IW׉gc8ۇwWG3?hfJb_)i)a>[.>(6^V^/3&hN/_Lj:ׁ7C(.+ZV3_gNV8 @7ٹFw I'o7*^o*sB^(sv"3)yYa!kVV' !y?_`xH).S'cΟwO)g +^b#^rvz~6khHY) 6(RhϹY'Iiֶxذ0 V 7Gy3O) #22V֊WG HJ)y!II V& 9!Y)k;Xظf2w s_7ֻW!)k*ƞOO#ϋbGoC#HX h(H8Vי9w) VVf.י!9?^N8(&;;ZnWWO)!!G'.v[_h66 c6VH8h(V~v>Oyi_'i&((og9)__R֖(xVhzJ.36ZS_Yai_fS)~NׇW7"H8X(V[*g )/?f> jG)I!iN88 XHfz^g[Yii9ii&[^((v'9G.x^*>W) Wi_s~ƶ(;wgW iG7?j.ƶhH.~r~V8(_I_7)? ^^Z#_!9I)fV `Xh3'g2iC +^k?S)Wy_vV&Vظ&ώF&vF÷OIA! 9+N~_Ƿ8nZzo_'nfZ7WwfVƃ.''2Ȉb ^yggW33f&'_i_9wO( @Ȉ&kg Gfcsϟ[+&gk9 iI 7hFo[>v^rV_Y)WIW&s7?Ϸg XV67gJCw* +NN.G)WwW)R+*{Ǜ^(Ȇhh8XH^j9)g?K>zzKSW IOJHv^?[2ljS!K"oGHhf~FH(rwW9wONW) 7Vvr"s??>rnW9 ')gN3/n_{_2^2^H(H w?goJvRS?'i9Y!)R>(N6gGb6HR(뿿9wrNo7Ig 7f88h>G)Ig7C"3N #Gi +zh Xh._?/'cNh^^3 ׇG9iGrfs&2 )R>hV(Z{vʏs*^f2ZO?+F.wGY!wff(6&n6Vf*79ii)7' ə'h 6(fV薶;O[CG73iGG) iVXX8&ێrR.&F.CkiC?G:2:'i ^(V( +jov&R&"O;; kWY!rV螟K~f6(((F+片7w_/Cia!_68VƖ>(n_7*χGG[~Cי ir`(֞_óCN2r_:^B^?G'&>Nf&>nOO. +NVn{bHh6zOSfr#s/ !A!i/^(ffh6ƶ(VVHk+7'ɉIaɛF(hƖFVV +gwWWWGofigF88hR{w)SoS:''_⎛g_36[G'ʚcK + +2FgN2(22G)!aAhvV>vbΖVxx&7 WIg +g yII9Wg?h>r6VfXO7io_B>&Gkv `8(fIWg'/W&z2>b>&['FKr+7)is&G[xXH7GN2FI91Y9 W)_vHV/3*V8Ȇ"/i)Srw?YgozVHv8X&G)+fYɇw h ?WW_^f&?*/zzZ"(kٹǷs^;NRHH_o?B(F~'Gyə9!. +^VVf* 8HVχ.zRk7?'i7nf&HvVGwKƖVGWgK((6^׷rN3?CO7>:a6xV*v.RshH6ZGɹ [ssbnVv^/{3/(V3[[owG"8()))'k_WgSG7)yGiI9aX8HhV^88o y9iiOhX h[')iin~.zg +H8FcgWkoO'n_)!aIaA!)v&^bVx^O/OOvogOGYW'?&C/*Zs X6vG 9 !!vHȈh.b"jfVȘ({7y)I igoJXFn)'k)?/W i8螏''NfVV(ƶ*ziiy!yi:(Rzx^ +)RnvHnb?7Ii9+ +χS׉GJH6(/svh&f~V&G)I YYٷ*hVj.7>H`V997Iy'8h(VV{W)O>ϿgyYIg+hgVv(֘VI y9y 9VF28 +) Y O_kחI9yw2/)oN6^(nV(&Vf(v)i !yyI)鞖BBvHf[_7ii_Ș`^*o9!Y&n.^w7:N&V~ffֆ(x6WIW)gGy y/BFƶ^v6f `F7W!)_s8VF"!+*kS3Ϸo+N6x>xhC'/)  #s Cf88Hz39i)2H(xȆ67)a{J:B)n'R: +^^Ɔv^G7KWy Gr&2(vX XN'' iS[&F薶(7Iaa W_SW)g>((6(8X?J.wGIa! :Ȇ 8_7SWs.(hHvfOyWWw'O/s3gZ{^&vHV(bS_bN{s׹9?'6F(@ "W{_*fb^8ȶh~9 i)ss7)7ώ^N(V.vHHHVۂ.z +R)9a!y #r6 8cSÇK +& (c wi_')77?o{n8x (BRJF?gC 9ɷOG'&(x` f&n's鿊ȸHV^)IwgsNiy_6frf88(6V{f>^>Cw)Yi/)gۋ` VO'+V(7))Y o:_O(F6(v^(> jrrWg7)ǃcNf~h(`6~~bwgg?3noF8jR3si9ibrF>^.蘸&f^>h(i Gw/g8Nn֘gboRxVN +Ƿi)i !IrF((F26('GR +kgGagg;NxVhVK7z2j7"VȚvOWW ^~:oo +H(FH(γF7)!!iϿ77^7++;ۚjgwwW iə!sw˃(x88VS/23zY!IWg?ϳwcVh6vFr7ǟF +>Sr(x>N" +ooW)I9[)SK2c.hn& 8Ș6.:"+9 SGcWI'F(O')>Fx&fv7 Gw7YGOWg^rf(VO#yi[3>cf>SV;w'rZj?;>H(n)k_i_C+n~fx88(6'g_wI'i2R"[.F"R+CSW涆:VX6rwG_7IGLJg;[ڶhbFƣ'g)iGO26ƻnrrƶF^gə~ZkoF8(Vno)W z_7)c':&fhHH^co_ 9yNꆈFg3*gW&(J*>*8Ï/S7gw ǷRNRvk(6 +_IyyIonbO2hIwς^3/KF>Hv(V*O)o_oZbBF֘HƸ8>r2nYAYJf^/n6f.'j^z>Fk.趞3iI[oWg&koRR^6N2"6VvS +gIWY9Nj{n>f(~R )LJvk?/F&.V6n^_#SgڿG*&fCG?"&^Bz;3[VG>&'H OO838+ؘ8(^cW_ii'C3f8Hfg/k(X#fn.Ȉ +g9);cOF?ʊ^g+NGk//*V~xxH6:wi9)&WWVf')~xh x .63yyi9a!/ *>7'g/;?{f(H^^Vcgbh8 x( +/99!y9)Wg&H&f_I B68HVVh&^R39YaicֶHfkɟjJ2:3;SN^6{W iG)BHv*g)I*(['Gw)'ڸ؈^Z/j#? I?gVF>')IC(h2'C(XH8Fhw)a!!wsB^(f#B._[#ovH`86'y9¾&^B:緷/OJffV6fwi iiW(X(:wsiiϳ_wHF^gW?2vȘ(^ +F2g׷W)I'HI68^bb[cRhxx8OI9 "n&N[O/s_g{&VVȘ`x8F_#繹WOz&g7Ǿ^2vfFN{i9WȀ Xo )_z +g/rrVVWW 7"H Hcoc7'C&VnWI9?hxvr3g7ږ&#y!Io[S_/s_''nNXxHB[iGi2#k2nWI {IG'3x`>)gs_G_2&~iOHȈ((f^37i7gRrvgYW'G^(֎׹J{h @(fWWiFNJo7'wgW V(>RzGo:s&f#I_G6FhŸiI _"VX`xIKw.b^ʚ_?wɷOC[2(&6V(G W£fiIO;*~FN ɹs`@ &'I7 +nbW W'S((h +fF(h:7 ?:G'N(((?)YyYS>vV``X`g7gigj^VF79əiWg[&J[Ǻ~o.r.^8x882?_)W).bCZfKf^i i)?G.8``6?g67ɹyWWObC꾶". >h n_׹9ٹ7sR^';>~g yyɉW7{#R VnC9)Vv&#i9aI[>h^zZrvhH(O !Y+.&n>FS&fO鹙G``XF>bǿnN>#W9ٙILJWgSSVVJX`xGIygβngv{ ) Ww[cw)_s(H ` `hN*)wfcwaɇϖ~?SrN~Cr2fVvVV6rsia)^fVhrN&&JI9W7Vhh(^^o7?O" IwGSV6v>W7˾Ș8^''WϢâoGcF3SwoW9iX` xRSWWbfa ?Vo'fNn&6R2Oi)(~΋ y9 w) (HX 6^SI*戈I y"C_b(^Ï'3nV8ns{'7I);Nf +zrNVWW99ȸ Cg{֖!j{ƒ(6Z +j>&iYaw(xxf# Onv趖+S)wW?w xxwr&VVkiI)FJ'w_jHVj_y!gRwidzVWyى^~6VV)&J'?gv((^;csVVhhv>) aYV( bS3f&z^~~F WW``Hgwv8 x()!YIIiiW7s?OKS?oNh6FVxVvyaIZfW7v8 HWIiɹ+rۋ^Vh/Wb&oOcg7__[R&[W3KFV8h_'wiWr66f~R>;"&6/_Ii)oHX8V[f8ya)i(Fx/Fa)AAKN('rF *G!y8S7893GȹgS biCBH~gO_r!I3&h۸,!ai9w8^f`ظ0`9G˶8bXWaaw`(G) F0V7VZHs1!!o a) V,h !Z!aywHpgan@n!VVؐXyp!9Nff1h;`IA_8wyYiFؘp(iΛV@~)- i7Xÿ/_V&>I2H@@!1-AY78ZG_!' 0lZq׿h aa`{ YaaOwqa*xc1Ai@wO-Wh8~KaI_1ё!RX6鱁@X'w^H+Q9IV )b`@3hr)!16FViZp!1Y9Y ؆19.0(^)i_'x0'቉ `h(a 88x :bp`N^3AA!7 ((ww6@PXa^ HiA93(X8b9W爀*71AVV&9_3~x((f9qaֈxcijX@0P )!!y_^f(y)ǎXȸHW  `&"YyR8hFHk i_H8xZLj>N!!)(xVOAYa` 09Y(89`` 2 9Ɂ6H[!qo>fX8 +nX@j^&6+Vs9 { Iasx`_iaa?/wiyɉ)Vh(#w_ɹ#xHXvYٱ9F)3HHhgN +舲^Si7yV.8H0#I!ohXWW) 9!hXga^֞֘Fi&HH`p&2_3o a¿6Xyvl~  7a!VX@/iY/Ff` _WY1yoN9r((Wn8gii~_!1_ؐiWwHH"ˇ Z^S.~Bxh'i1YHIY f`V>Ç#{)Sf&K[G9a[X`VY9h!oH^'y!#~GWWaa`>3SwϹG/vR!9r@` i9(.)F>79{C.hf&_1;H8H9 _ H xiW!~Y97@piI 9{(V?y Hf>ǹC8HȘSAas 8II9>xX`&X Yw.>^&BaqAY@ . 6Ƹi_[xi'7xƈF9AA>ȸ8G_Vo‡3`f!q!R8Wa)0:iθ&(9Y(hYIOWa11a"H8fky_V ȆKg+ Hayه[&xhIفAavHp6s9hW)'x83I3()Ya1In2G^ֶFv׶8ifV_yinXp`(riOf6>!( 8Y9_`X8( g.hhf6(VH` 6Ɂq!I)^)W[Vw):h(8;I&薗yI!Y3V8n: >rV^F(V6w!W)*^)闇s(HxV7+bgWI)/vh&_)ڸhx`YYA9vgIS膊2ZF(x' Y:V?Y WgJXXؖW?Rv^g iHf_fxX+IaO~8cK2_6SrNRvV(N2ω)9o7W(hH h.N.B>_ _.6rOOV`ۇ!!i(B.Vv^fhVxւw)i[gII9ifV(:k +&.)ii)Gkb#+*fVF'Y)cB(+_?>#6nFvii) {Oi>n(XkFfn_IIIףf~B6 +IY!9_(' Wg^F(^v6vbi7)W3s')9>862֖((rWGy)i.2nF~Vhc9iy 6k_g +#&ȶFfFn?'W) zssgF(FF6(^>W)sjovfVFf +9 I7Wo&FR Zr"Fh6Ȉ(ƲW)2J"Iɉ!+h8r* >O^i'V6.&FgW9ayVwGG3k(nZ*?'hO{oڸ(7)Go_⸈HFo +棻[7w_)!_~(ng?v֖+( 7_~3;'^Fx`R ~o  +^/v6VYIG+Fxvk>)WsK6fVO6`HxhxFրX`p,, lp0p `8 VIy)>H8Kk!)y'Ǜ_>wW hHfsz)W·'6Nj^&hRGrs?OfnfsiWYwfxPpxO!w)7.n)w3GRV(f2H>i_ ?^(XHS_*{jgǖnW ) 'sx0p`^bFF)^()W'y3SN6RWI _Of@`fFF_n&))9i_ 0H&>WG)iiRjOj3?36v388؎g)7o^(B7^(Niy I!YiW):X`Xx(zf2_(R:_Gw'b>&z)_i7?rnß"BxX`BkWzgV(Jo#OOZiy)~ ɉw )zOw&gZBNh6.bw)#'GVvFΞ/)zfhf^f(2c)gII7ֈ8>2wg&f ''gwǗ/f&6^ +)w翇' h H&bB^fJ~WwyiwiW)W9w&FX8`XxH8rBIwcw')w_ +{ `Hh g7iK:68wg i_VxhϏ ?g6x(h>Zj[c_'__OSg7)bȖxƻڷG)&XHƋ';www'V&;ii 77&fvh(8 7OiWGgG)FXX fJnןiIWohHk__ WiRH `^9Wi iI_SRJn(ʛ xhnoi9'?j/ٗiR( _wW788h? G/99) +v +hHF~i?iفY_*jo^C.sgWs_^^ +o`@h !a9)y)'*NhxȸVhJ/9O_C YvnV_kGJ6VhVj.' Jrƈxf.9iWIى))x(k?)VhgyA72_!^FGz7_8Rg R+FbO'Wx@PXY9KX&2Ii2( ,hXV>)I9/)_JI~JH/ho.ifx8N9iw8`06IYY-a?ȶzR&Fh_p0VkaQrvXW!7Iؘ:3S +!V6hgG"gJ[Ș H~g!!x~aIa鞆0p``73I7 +w_//j(XvڲhV 1AH8n8zY!趢hxWYjv,p@hab_!K.f(ϟh WISwg_f+0>!1aqgv&&ȏ'i W" P,V[yAAyI33YI3&XX6CisZh(/Ayvxr 8ZJ)&!W~Hp,?1yI֏K)GK6fOf~H(WfF3ooag^X gakgW(?)Iɉv>V0pxf"Yy"8x(y!!I7>f@X^wc^86戇yia!G*VFR7GYُi(Hh aYl@@vy!yaj7G^I/&㶸xX_(v 9ǹΈ x!9wG>ɷo3'YygH@8ɱqjFIIix *O(JgwgWO?o2؈֘Ii wWx8ƣYa w@@а`Wy/'&;S'yºHPf)jh>Z 37Xh`6kn9 !Âgw7_^hpl`əa 8f2w? wi!n hb)wfV8wW)避`x2)I rf!??xVV6wVrIi9!z0pX*F~2::hY ig&ȰZg[iGGafrRVs8v`.w!Ƹv6fV! 1Q ,0I_!y>*2`8 _'/OVw))?s'-I:^V`f9ag_`8!- mqa6(H` -qWcI(x0`p@,P0l ~_{^X QAsX@ CWyak^A1nVqAAQq1-1ɭͽ !6011I>0`b;{FXHF8HIr")yB(`8ֆH'~ @p9Wq1.8(!Qw{ r9Yg@HH.9)a!WV'OYI 6 +NHI68^y+(sZJ)ɖ6Iga) )W)`OhCBb/S Ϸ6Sa_x&ηagVH"/IgrAqY`(zXGǙhV p^(NAqG^Ɓ7'֘9('wb^xW_&X` y_Hv(yW +ySXrV斁 9F)F&h h'!s_) +_Whwh,`i g60 > ?_ZiI1a*v_G^fX^g W2^@(@ ag xW!Iw`'H((B 8Wwv,pvVډy&`wyio(B . g釙IW领vHЀ in _ᙹw_`>kWSV.^v^ VH`S__G9aY)W'H~6s ׈H8fW֖ Ya/'sZ.hv({S77!k8(Ȁ`vIw{S_ASbVضx8 Wa7/9NHHFK9HKq7(N^ZRF_ϟJYI!yח_(xX3)F>jO.³h^Jn&Wi9wALJ7H 8Hj[ h^6&Nn' Wg(HJ^77vhfW㈸(^or9[ǚ&&>wi!FF!dzoSÖ88*z?떈hVia_V !)y?r'J(`x + )_~)'Ǐ/ȸ#_9!+^o&~NV`KiW!ywhV#N~fH&xXϹy)wFvhs+aygF(hng +S(O9Y)&f@0 F>G!7h `o9oG?7 wHH V^FAaaw X{g)ىIGWCȆ[/!I1qa /8``VH鉉G)+&C> @O iAəG{)fBv~8 IaYa{vrFh809y2VNhfLJOJYI1ya!OsH`xvr #I!)86.3?Ya!Yi@`^c&.fS9!AInXffFjSf3G7ghX` X3gsi?iyig (Rh7 1a7R3~( V v&(fC"ʇ:7g i99G&(  ֆF^wc/VFv&'WG9wG/?7Bf(hh&>x hFii zO_knF6›fV an&xۺ)o&.r)7Wy gR(.Vci_gnH68(Kc)9yVxbN~r&.S;S2f8(F)!yy_Rv HGoF>*jrNn)aA!y!7SV 6aGn'.hh)!aa!I~hVF&H&>S7k6.6rVVv^FWia!)H8"R^..>kH(h8vIWi GI1?v8(8?2VFV2^^"k^V~&YayI*h8x8Ͽ.*n~g +F_)ɇOf hGi)! ɹfF(Vgr_.(Hhh(ngS*ɗiYy_?&hZ'&hf(6ƛ^bJffI_a9)6K&ng^x x6cJ/)_jkiig7_sz^?GW_j&(H6(_[7wW2iGW g׋SKVV~B{BS~VH8cR ^G)yiW9.f.ʿ'Z~r7HhXXFf΢i)6.*giٙ' /ONX`` fwiiwi!WljI'&kV.Z N6^h6ֈZOb7i2~? ) _/sG[C'skZN6hv6ؖ9)V6>sYIg')~c)J?nv~Fx(fZsϗh&b'wIrW:!9ɹ7W)[.Fh88x`x xVv W^"g_'?{"_W/z"&6)C +^vxxzx6v8^W_*N W I)g7)'s?Oں[h_W'"~GN)?ǟ>fN/~>rc7(9 i7w9aa!f_s~&ȶFxH.Fəy_)nS6ȘHhFiɉɗj_GWVo?_) WRc{:x`Hxhh&V".(vWS/׹!7V( &868v^G)ϾGiaYYIi7'[V6&.ƈ8(W.棃VV_2')Gw)w >& ֈHK#BGI6r>3WIwY92f Jƾv((h&i'NB'7zyY!Y fKvvh8`h^")G72B6'i!!yi?OG~(HX`8 H66BzHo9WIaiȞHxH(8Vh(V#'I )_{g'rr/׉i.R6hv8(6VvVsG;i)IwbB^&*ϿWIYi??i HZ{&&7G/W9a!)?'^X`H^[62s?wWI)9I!FvHHH8&gyII'nS/BKʾ: i)g +.rV(8h'g_:g'G9/OGn68 (o[' +;.G))i7c;_Csf3>6hHx(v?3K?3J{wGs' OK76x8Xxx8Wio_#_)+s*ƶF^&fXX V/ ?G iWww_7/66(JZ&vV&(V釳º7Zg')y)yw7ɗrn{V؀`V&R3_iII 9i'2_(HX &[)WW)iw_#Ƿ/sǷ3h(xFnOVHVNϏW b&2 j[O/7yy n_&2b&(X `HK??i)9Gi )W)WGw[gFG`oɉ9IWg^>h(HnZ^HK3+w_#>NSG..Š 799 w[^HhHv2Wi7G6WgWWI)''k.{FK+zV(`gW?Vf3___'iw_ogc&(.6hxNN'WI9)WIgvfvX``xOG_">jjW iiɗw7gN. x`b3iwgWOR2;/"[Go?~k( 8){zxhv^VJGIYI y!aY>C{vh`&KGr.XX&iy iiy!r`@`8g9YYy)?6VbB;.3 _RWǂb^&ƆڶV~iW?6(fV&Ϗ'IWO[oIGsh^o)GHVh6z_G _)ɉy_osF6x 8V^׷G +hf^7RWϿ gK_3JZfHX`hC i7&FHxh9IW;o9>&h(86)Whh_ )GsljW'iv(( x6I9Fhv7j_OOSjCwi)g:xHfWxX8(J_7W9Iwaٹ#.ۇrH``7kfh: I_yy7G'_vhvF`()yiǏ&(Vbחח?nΞ)9Rjzfxxxn7O&8h6)!!W)IWG2ZgNN88h~2rVx(.#Wi9))Y )w'_3S^HHX`h6ByYi_{h'iׇ_w7koBZJ#~VX`f7(fgII7. 'GNZ#B辚 +RϗO&(6gI9 >^n_OFF^((鷷fֈVnF6Z')WwGg7W7H`nS&_3)wwIgN'[O[fX` GO^h>'gYWY!'K)I _>W@x +36i8 fHO@!_?!>.r@ J y211a pHF?/r(@ hf *!^x@6i)7[7Sc/2'*GfǗ!g'i(2iW1aA s i牗h083a!VO0i)ii(X&_wa9#@BWioRH&W9!r`iA)9ljfV^rYB8Z`O*.h.vȖ8)qYW(@X_G)Wy`h(!y!(@.:BH8GS!IA(`vb6 `&>ci )A8`vwYiy_^JƐ`WY&V ^"y)!cH9iy9VF(28X.Nvz&)w hȶ6ض(I?i)Vj{NwaW)^CBh* w @(!)_6 s9)iV8nǞ7WGW* +wo:n68`V֞F`XhaAq1.VO'! Wo;gpX`OOw~ƷgI_{S++(F'Y!)V&7Sc3!)f?^[osGi7Wn&XizVV>'V^XhQ18(8o_3 ` `H/GR^FNSh8k GI)F.9nC/VHHhFfi)vV @`s'i +Iy/'hV wrv+;(Wf(6w-QW?6xRioIdžXv.G66R)6cgy;z_9{FHX@x&h)98_jV ))ck'gK/_8Vf(/s.(`jGy-m1!OwoVx@haV7R2' I緙_xgS7ih(xIgr+n?ɁYJk8snrogW2x`Vi1Aas')SWas_x`xH( ;shhj GGi'Aay hx@:(RyỸVR yǗVhƷɇoOsrx6h6sGz >XFIAa W_/)?kV H?N?w#6V.S'sxHJiI.:rvhJssfV&VFksF&oWWi .fηwWjhhxx vih3^^YYىgn3gǗ VBh Vhs֊vhfGdzOW)!(VH8hH֞Jۊ>7i:&xf#^)1a! +辆NwȈ8H'G Y9yW7ǹiWIc>~(ظh(xH& B^Owa!yg?^^^v&^־fh(^.kjVH9ϛfVf)7fָƣc:^Άf gS'[ +'Gヨ&G3FH6C#Ow_hhN^9WS_ظȞrzNG9g*VR/ ǟ'*^H>?9aY"vX(oCN(־_:3.aYii'NZZ8R.6Rr6fVVBo v(V)aj~_227'I.&#V(Ȗv&/__c3iYɿSڈ辖F^Z(6hh+_2/GWYYyɉ>oR^2..vhR62;z?g':6hG9ay9Iw^gg_v( Vr_Ƿ?O2^V([Cn/Wi i? +?GsVhHH^>G((^wIII7[K iLJv6bf;VV~#zFJj)9W7g~V(&&oG SOw8Hv^woIW )9+F.+zB&(V(h/ ^vjb#?) (JoO?o{K#_jfJ~>^Hhξ/)s_) yy s8ƺ/(zcO_SfvS7ǷWW/'OVV&G7;6hV^ ) 9_*O3W'[>hFvv&&r^fsO6Z?_Or*cW[h6g) W)S^{+jxؘ8^wOw9 _?'WVH(Ώ&VKOywwGgWWo((6 +N^r.Foj*2{C~gɇ''iG[^xhv6S'~H&&k/sW 7.&fz_)2hF3O:oIiS:rnnO)oO(6X8O +w!y)_^N"FVR;fȸRr?s))/kJs_nOi'.66gǗK#f6V&Y!"_OC2J/rNHXCovCS/ +R2Z ssai`2 BNai V' Ff(w':>Vvg Ho7?`hgIiWJX "hC)W)W)i׷OGYGO蘆Gg'>~KfnVrHVgjisA3(6f88ֆ.6yɋgGZs SrFnf^crFckKWyy9Gچ^(6~.O+7? +G >鷿kǺV2& +(F~H(nC!q7F6^6hh2^.g c:s^ _ˏ_ ڻ_i_^(V((rI9C22Rf~*R" +{3{/: ){S[;N&6º;JhCnKga!::6&3fvh(Zrc׃>+Wg&gs'sBf"[o.*.((IfFfR:vFv7ׇ9)6O/&^N(hV>Jbjs.vI9 iFƢ^V66&2iiI)&>~S/)Nr''^b2/Sr~CGζ3_ ƞgovh(>7W +n+ ~^v~v(V(66^R^&rVv !+wZ6hhh(HHחǻ^hVv.! {*GRnf2{^>/2[I^Ro+OJ(踸VvΏ;i'kF2#3II)W;_J&v&HȆKVS I)2)i*S VVHF3yע"(GBSW7 +n +:Nz*../fxֲ~^&7i&>GW)sHȘ()i'.J +7 &f:Kv8(Fk" +rziii *:_g6xHsG鹹'vV`GwCk/_g ++Oo6>niiW'n^+_+vh(3?)? +B[gi i&hv^:OS&X8Vvk:Sϲ_gI)'g.8VryasR8X8fRoI_3>_6R;FN bF&v' !W.V*n6^ذrSss'oOiIi*hvRwhvkGW&j/i9 Gj^vxj>S?.ָؘHn7Iw"zɉ)o(Ξ*2V{فAYjsR6H`_z&&ScɹyWg3~Ffj)v8Xx+wΆhb/7gGIS +ƾFV^6+__x闗 B)i*{fnCs&VVxɉy)?kzBNֈv(O["'gyk2BKK/s.(ظ 9 ?.8Hv3W׷W?Rf2rV#gkNF8(WR2OgiW3&憊oSZ"h x.!y!y WCZcFhHx8F2?i7ljIiB&^R2so^V8vWWiW6_9ׇg33b6^.N:S3R^hfN7wW;?#)W'J*ʲ~F&6H 8{_ a!yw_//V8h8Vhni'/ ɇs"֖Ks+>ָv^6^rS7)g:6HS9Gw)^:"vVNZ2VXHiW)IGGO_'vhVƈXs!i)[_~&&fHXr_'oSWs +־Nk"kK~2>''RV6Vw)gBb_)g_bn(fjz/H g;o)77k~fh8>~ !ywZ(*+k:&(nzW9GCoWgwz~>h+Gjs_~h(r'i?o?rv(({fVV_iiɉ)/K? +[*FȸfhNgٹgK^62K?+6hHȆR׉ iS_wi97?h8>3[b?/Bn)W[K? 7 +xH8frS&2W)3R>&))'OZfؘXV867W)W".F*>(R7GGw)7g>Xx:sgs>fR?O)GGOW9~vF((HhFzgO#&cJ#ii)iRK{vH(RG O6n9)V87!oO rٙ'(NJ`,a9ywf +hX(XqY9h!g(681mBHG) 0؉q#VA!h 1~0H`A& q!  鉙PWqXq-*2g98L,lHaAb>Nѭp`A Z0iMBWCfamx`(AqA@[AMGl6i-0ЬmKȀ }qV`(Y1~0,P!AP_mMa_9-V0m!f _ r @9 0xVmqOw͍0x̐`m?8ImQϘ@^Q qWh,a@hq-Wnx8i@9+ 0--H-Yh gQ7RPlLY88)--!鰐 b_``m1!hH@(A1 R,,n1iH?QX81a 옹Wy_(xp9AafqQɆXаÙ ఐQ@aqI@8!1Xp/IYY;q-nPHWAsQq/', _1!I3Y-Y0?hiAzh0(6X!yX)1A醐 A3F!yk&@19g@O80Hgm !1 RH"lY!)VAI8a93 ,`gI9 hV!6yq`6)v8sI(`X IH^y7 j8XxF H0pxK^h 1m fy`F>,9Yg.ᑁ቎X;kh0!6 W(hc80 Wigxgiyih!h`7a/(g_?BvJ(@N^(hh8qaw(x'!nnx[I_ȶIA9@hR7g&pqai IW786_G ^yGHx(hi7bXHbIY*vs_K608@xZ'OɁ1O/!ag hfHVOIZS1AcN+xΙ!OGɹY~n_Si)frGW)Wy(hgin W(Xho7(FAA8Y)`(>px)y*!ZX 7?GX6!sYY`J + p` i `w^YbHx!ai 8(iy>2w8&b9ii)(nYY@`&V `V!ζAS(rsgɷf6 1hNZ@ ANhWi?W!VWW@ HB*VXFZ_v9Wa`8xvn؛ٹhⷹxX(o{h vi9. +aavf0`(KaH6vIIxXh6_/h^Y1awR:9W `^ 9sg7Y /YyrXΛOrǙ+V yIrH xjg/((6kYa)c_9!nh ^!a7ƈ(Wa[v؀"?8x)Y!7'X@`XJ_8* )OIٹK!׈ (9HX@/F?i bXXȖ)G(S ynI9gvVvH `x^ga3iIxXho"6?iYAAI/V6jVF@0 &ٹ.&;YA)Ig ~g O8V? @@8 i3YfFO'9xF.h. +(۹Yָ`*cR)YAFvn-q `XX6x@" BVV!9'WIw8hiiRxȖ')sk_9i` XfSWɉw':iIN&sx6[g~W)iw& `XO+SyYiʾwyؘ8 `6gW +faWG)VGIWcGk&&:S_"(Xx8RK6r2')7 98x"rnָ×_?S` +^r.IYi_׉Ṛ` V8`` _ɳzy'w^6>~gRF)W[^>^(כ6fH&/g3r>[IA9: (ֆwBV>h^K)n@@ B^^7)W ف9 `8f8`8/g{^/Yṗb;)'*^vo9 fW7?&S2({+^h)Y7'o2(xV3~6(h?j( F&Ɔ*' Y Y!iz8ظx`VϿOw9! kȸ_gSφgI9I7G_iH8 ־vh'ږNgY!)go((WI)gX^3ZiJ(8I1a9WI!( 6r8hb7#2h9 8h2's(Nw I{;__R0@83*ra!i~(ȈVg)w)^(*gc6X(''coׇJ/&Y9QA!Gٗ"F#V&fHS7{^Hh_S^gI3gOw2xN'OFv 9qqqq111A m!၁!W!_YIR aqYA'h Hr^RG3^&_)38XvSGNvF 7)9!N蘀`ξHF)WC!)OW&特RZ{Sf66Ȉ 9;_IY9Y9W(fxh[NhH&'7V:;b !ٙYY !9x`~xH&#&~B7džHhi (6' ?Nv& 9g)wWH(;Hr!?3ȎwςV&;Iɉa16`@Vظh;"NN6"!W"6R)9^(&c Gi6V&γn(gbyAAiG.Rg+8 +H;yٷR37xȈf_b(V(6Z'i!)Y! ^ `X&O~Z7yI9I''~8h~!g oV6+rXcN(Vgais*'N~K2` SIى/R' f{_~&?Wa)y)϶ v.2.(fwSScw)Wi/F/[3h&);;g^8:j_8hZ~^HF'ɁAYW+斛~f^r.(Ȗ w^rZww(88hV7iᗇ׹G/Vx R{hv#wj_*)ֶ F!i3h vG#6zBhYb3k;Z^'682GwFهFȖ^Vwo!iw)'HVrֈV^?_) :(ROjFVR)y_FH(F(v~H(^W(f'Ia +.r&k +#VvkW;ɉ (H^9ɶ >WkAi[hW 'fXX6&g v9YwAS(H> 6Ȉ2>gYw ys//X`H?!YkV )1_Ȱ@V X&iIAqWp,X_f8{?8A!W `I~`p xiy&xs'g&HXny~YabXH2yh`(VY _N(ljY7hkWIY'8VkraGIp ~.WxiS` OY!y00/R)WX!)KH?8Hx_ +_n>iaV&V(Xvnr;y/ cGI'xFo_7&( )oI98'W G_CF 8)aH9Wf~_9II?x^)鞎89RY!aw'v^G' 'v``ָxY)gFKSG^V3ʆF^6vo'G^ocF( rSKV yȆfkiLj/O'WX> ^Z'n`))v~aXbs2`XH(K(hO!a"6bNfX6)W'^?^N[ZGֈhv[_I!ǟnK6ZVH^Gnf.G^x n6λ)HH hV>(Va)>Vo7cvnxzI7OI!>o((frng2&Fji)3c&[VʃJ.(o3[zOj׷S8 Bws7!r +j'W?ָh(r/.VVvف_Z&[)G3knvhhg 7Vg8֏)3_Jv F6j79y) W6(&~ +WojoS? cf(֘؈b_WOiiC7g3:jOr(H(^f3"B +/F/WWgNGg h鏚2^!y9ǚvv6RvW׉o*gSSrfNVvI ىf~vhKo77)gWKFfj g7jHgs.CgwG/Fb3(H +C(N&f+!Yhh6FhYyY/*b rV8h6si0Fg))yVh`wf9`hy gHfG~V!(k/&xVv&f(.[1c){Fx`gZi/NHȰ`h).98vX`鱹RؐAfS9>99xWi px,hWaq'``zW A XIaYڀi1H hF@p HH \<<, g, 6+;v>7! ) M--m =ڹa-6XsljWn+iWyO2y!#H@l@X , F P,аPL ppl(J)H쬘?)X'aƢ)יAyI7s)Ai z!`,Pf~OAhhFf'jxȇ ?NAɶκkZ {Jz `7ׁAgsgG!o;2ھ 0>7GG7&`f IYz x{?xow9a 'Ni)Ir2WYi~8@@3S )7^i6iY1#Z>:R&'h`h^:I3'G([#'Sg>?7#w7o+vxVNBVV!7G^x(HoWg[)WWc)hvByw2vhR>ɷ)ffC"wI!IgVVw9!9gbhVfNS/ٙ_NvxSgS&jwWV>_)N&(fY!? ^&VKW((&Wr.(RWWFX8vzٙ_w*N( +{ڃfRg)&n))Ai;V(!yIׂ(^_`(>[c.#Y WW W* sVf>. G )(H(^;~B G)'_ɉi&`yy'_o3(^6ˎ^7iyY9Iw(`7y7.>_CIR(f.fhH?y!W!wrv 0@xF)_nGs'6XX66G9!I1!Ǣ(pX胗Iw#W IfZ(&BaAa W!9gk> 0P@` 9w)iy {FXh88 v#!aI!y[`xv3 9SwF8HJG9Aqa_2 `XVN'ioO~(HH88 Ȏ a9AqA{V ` `7[I)_7y)s?O&fVH(HGIaWr`B_99!OJVVh6_W!) f`@ 9)Sg7FVv8w)I)))G7:Ö^ I))>>XXH8wi9!hh x_WIiW'/Vh8X#7ə 鏷;v@xOw gWgi o6bV8Hk73G `_WW{OXHZiٙY(HX6^GWWI'Ook^RNhn~HH/y!yI>x~r7?[Kg:^hֶ?'7Gn.)>H /R'ZR~?R^Gi&FH~Ir2h6ws_&NF(/_cgoSCo2z:> ';KR +g_v&VfF2^o77ySw&f^^i 2nv)3+.hF(;W WnVhV^;)sO O?:J6V6.V{)^ֶ:? ~6i'')'c>(Hv8i!IׇB ) HS n—FFxxx33^: +B"!I)rbG?^Z7gj/ +(&(^fFyW#(FH( I7Fi W3vV(&>_ f^iHւ_'Ii*8h^ښ&gR^*W9 k֎g)joWvvhxriyɷJ˻'v((N'3wI7OƸFNzZhHF΃9ú _)>x>WI+&v.o+v8HHFg+_gZvVF6~n'22SwWiy+2ƈ H׉Ǐ')W)zRR3O_):&K.v hFn2o)i9CBWKigh>^8HoY7i7颎RfXhJ)928rс8,rW)Y#sp`7qgZxx6Y!~X`sm9!)F@sAyifHh1mс 踰J7Ȟh8{6_8ր  ay>YC7gXH!qI[F`H{aVjwh `fOwSYX`vYY9Y&_`>yOo@ šW1C~!V@h 92 Ha_bzvßxiIy~֘)a1F`y_H(Wၹ"p)``"a'H9qAJX`f9ى&VhR-oV>wg6` /)ɞaWwH`^w!H 9y)PaIW6vfIah'Bi)xh w7o?i/G!7(@0^gw+6`x(H`'o@ *ᙁƐXn)gX :I997H2+ h _)'f  !hH@X7WwiH>!8bJXЀf79W_y7'n6fi)oVKkK[Jx(/R^xg))w 0XG7sS(yI30vyh &SY_b39WV`` +ogX?>7wn(8j's@aa3G9yW>hc`v2)a8y6/I !S֏ff 'Y7cY9+׹y8 6(hx{)S"&z`'91Ii"7vp`.?jsIYI77 K3&3iVxf(X{)k1szFF)W^(N{فVfry93v (Zh.~w 77?(ɉyf&aIg>~hra_Ɩf+(v'h+W'&3?VVNbVF_GIgNb_׶8iv'/S2S 7WyyKvFx(8HHη'3(r^g{(xhbB Y_ YI :h6xVv `Wy9ah'BN)J3!!i'GGWbboVXx&/WGShVXx)/bbFyq V(hX^(a!)g/sN6(8 Gɳ׷ ` Hv^h!ɉSGs)R#b ƈ&V(F'&.*)IGj[?brw)SV69G:6._~^&2W+G 3 'NIWGW[>rgG[*ZvH^nSO戆Ȗw7!wgw'#×3C>V2z&n?Ȗhhrg3C&Y!)og7/(8Vg)gV~R>ziyYfrVf^VhhV7' 72XBJWY! Wv88'xv )+f2?O^Y Y ǗOg2VȖf((#?9 h^g'Rh+hX@`Ii SRǎV&?j:WI9 v>XhhF(.Iy!i6Ɩgs6g 9I )IƘ S_.FF>w)'?G7[) '2H_i/o:>X o7w/~_!鷲viiGV?Hh8^*(6s'yg*)Gy9G>'V>rwSWh8^b+(xF_wy?Kˉ!_>Vs{ۆ9HkFs_sG?/BFXvKWfcׇz&(K3z+W!1ٙ ?:Rƃ(W!?jB??'ZV~6^7ɹiwɉi*8f8x6)SFVC&(bhh^Iy7^&jJ"'xH?so:z7hH2&W Ocfؘ`Vg)~G fh_W WfVnZWo`xx^ .8ZW!_zFS'ig~K'rGg&H(cW&&3 s&)9n)iw/RHV6WSr666Zn^I I9w3O{ƶhV[/W&6XFnSNvs7)_aaǶHHKBFH88>'V"Vo? hNWWy!WgkBVh膾B&fii8Vb^2!၁s")sJX˟c"3j/F&79IsYgayX(>NX7)0SY'&z-y&:H@Pc)O9 +?nGIvxa!IwVY" +xP,fNg +Pv9AWRf9aipi&À&AYix p9 jHH9aQʚ0,hWi{Bw (F-/N; 1MA/82@.AiPa`lv~Ai9 PNQ,qq)`pNAn 1aAvOaёI(h`,P!9Y)8X 6~^L!O?Șn!1 _fhBG@hڇ^Y-xxFɁNXhlP`&_~@!aa)N~>w-=mI`p0 6g~H@8!qA8@xsqW7r9'qaW  ۋa7gvv88aQY'v0V&19Ff0`_!A!^ iqvX`!!鉷X0XV;?&l)-9_)!Yp؈XOI9Ix`W'xRg H&hΟwgf8x!yNoSv B~/P`kA)v+R6Aن`6xx +Aa".-'/9+6grsYɷfw)Qqy+R ([xf>XPaAQ1y"6pxn& V&@w9SPY!)9HFYaWGi_!Ȉ8 8)!Hz'fYa?"`8V۹w_ ַxH־9yNig`i)/v^'Έfi~,HKi1AAFVIGV// 6i)9Y@lVgaWg3hVN&6swG»G 'BZ WH:!aAya)`ƀ @0HyqI 9`xnRIvf?iI?r(0`I)H^Y!aGȖיgfZ!A _Ѐ~7ay(`Hr_9#r@1a/ WaV`@xV'+K +GP`hyṱ!W_K)Ios&X`Fȋ;pWChKWyAYROw ;`h^!fNjə!wik/YyV@@(97Xעk:"Nf~; y.HHVvSrGwxWY!f00v_w'`XFK)Yyiw92W8V(ضo!j:+3 XHh> WIIX9w_9'Rfxx6``af 2aى)ə^ !I^P0X`h·'xv yY!ɷAYX(@`_Wi/(HsY r r!ywIS‰a!s vw቉/HƘ0ppxw!I9!Y+_h& @pp`{)h)_9GY.&x&'r Y7BhIfȖN/H('!YaYXwRv'Gh@,0H'iG3o"ʙ9S.3WaGf k38hxXH2__a7fX_2h#h֗!Aa7?H8@Hk(HF湁a66hrGo7S7WWY/ƶHذ6`@hVhVI9r+!YA #oVv.f)3Vh֖)! @hFhBIi_Y7?iW:Vg!i!ɖ +؀8p)Yy79WG(V6JHf>h_S!!'׹7NsfF {#*HX&iٙ)o~vO8)I'WH&?[nsi ai*Bk{ظ(>h JvW!YyɏRh^3YW.(x `b.[G7IiO^ hVفac(VV XFRٷ (vֆr2F iwyYW+b8xvxxH h6b㣿oϿV+)YAsGI' +x(fH(6H@WaIIHfrə99g6V2^*ɷ7Yw:2_w'_ VFB&Vn*8;)ɹ.WɇF>)?xa& V6&['V__hcAaw_cWocIoazy "fV)h ֶzinIaib`Pyop,,Yqh0[!A!y'!SYaɉVlx&3o&/hWlx/aY!! Ya.P^(8>)!)!vYY_>1QyqPƸX)q aYx@wS#ъ6>ǹy*ygaPMO!b֞) P(n!/ٞxaWv aZB PbVΏJgs11~!;Ϸaٞ_ 8^Ni_p`@@H!>'8>w/QI980hA FVa1pW;JH`H7): _-qa (6, IxH&AVqCxN6 ȁQG(!V_ƀPP_Y([W-gɞ^8b_1aQ𐖸aiXF(07/Wm 1_xx71ximѷ)(,,؀!a&)q1i8~fq(ɖfa'Hh !Q!8awvggpW((8G!)7@H 8 iYa X@W`[6 I!^yaljq1`膐SHhgꇆxr 6!v3 nVV)QaǶ&O>עh8,`(! &VG8_kQ!-y"&, `6@ni2S71oF,+9Q-!9H/GFaqW'( ^7Ffw)G9--C@ֶf&IjHّ-s0 H66`'y1I'hG[a)AhNL,@ H/aik9{ ?*X083w)ȻHojF&b.YQ7&.^AWZf6r7ٖ7_y'ǸHFf!&7b(σ3{If``nh6qAr7zHP0x(yic9 +FwOfYi'VH@h6G)jg9yh(F9~θV&n9j9.?&SOё!go)6濸`F 67HONx)h22w!6vH@VS`0*(h!Y'R +~@~969 +aa&>V)wQQ)WȾ'F_!iwi#wxpv*_+hCyzg O&"VA9:89iX`WIY)~ N陇ixg'Rx96YyA{p(hV''(('z& s&>!aII!ɹ3(Hp ()*)g/6&.i Zɞz97;W7^`Hh + gV疆 :^)87ifG7hf6"GX>N? .C_׉ΛׇX wRV &`xzVG8))99^"7;əGHh^>RV7 a Wi踖&OywiיXxZciəjX6xVf6iy(WI׿7i&xhH8`hWhWc&'I{vFƾ)I!FObI96 XxfWG Is&{(v+x(q[3Iy 79>h 8wgG6&;S7 ّ2iׇKV+&Nx (g&/6~_9ogC~/9GCkVȲ^8n()o +bR{IٟW){F ۙ9 +>ƶhNN^SN? 'oW)s>wa'(NVظ8vCi +s[{:( WgS)'!aogkH(VNi9 sh `jygW~g^Ȏ>vn( +B!VSںow'_+g!I*vjH(ڶvgB9Kۆ(g:'GAٙX h8B7W)b^G2wgoKJ)ȸhXhsg)/kK~2γ)iOWiG7Kh+6g_&H &/Rvo^)YiWo>ROgONSgH"((nVi[~+W{&IC2 GGJ)Kfh(nF)j>^F(&YN. W_#Wi(`s"W97p sWXPXW1O IyNFS(nAY-7h@giV8r86Y_aˈȇbNga8*I+&!3+yjXi_V^H6b`wI `?k!.7[o~)9 XW y@6+WR h΁qØh`쌰Z 270 7q`h9q-I,)/rhF;`0V/A__ր'7ȐиsFA{p>a>6g*Hvv^w7PHN(9ZK (.F ai&V0Pv_zA")(^VHh+o& !ذx82ww2h79Wx`@'Aj FP vh`RG!WJ^Yzw7* 9f8XV牏yP`(sRϙ +WIgr'i( p x F(G8,bFic978siWA!i*,lPxXX'sɷ hnhh)Vf !#a)G`xR HB7XF) Hgᙿ_A6XRx/(^h`~i79Y٣ks?Yf3Ɛ (Y'7A `^``_)1v;f耶gwf>Wwsh '7>(K^)_8@pXXhHyWgh3G&jG )8h6Yq)[G6Ȁ&h6_7 'J >ai!I{ _f`sH!) FI)!WG+wb/IsGbPV8yYfX? q/F'r_`@ɏ7iY+8`hYG /׿FWY P !'{6bF'kw1-)蘘bGv?6^H k1?SIC7뙇x^VH~>1WV `fى/WI7)!"@ >I)y!_"Ww8@2&&(^vױy!NaH X^Xh/g&FWx~S!'_77^((8!hHFvSwaB((WIWax(._IYh6xvf7W_B11WizHH`v8;^87s"R;S?י IW 0 ~~o)6Zi~[(hFrYa!8 ( w9W+?_VJ"h.Oi9&oowSyWW7(X V{>>`6_9yY /aWBvؘhS hvf~>cGh3w7yq!{86h>Ni)w`GwWW*)iW/93v (VFxhWvC 3n6^' +7)co9fh hi_vR(3i*_rHn('yigWoƎ3'v@Iq1Y28X癙W?FvFhJ^7i`PJw'9Y1 h8 XBG&R!))fxCYigy(``6b_h#;.62o&3*&i G I#zi _xHy)_IHh׹ !W(2g(((8v7!YIj(wWx~ !牉~7Ͽz7ɹ!W/k(Xofhci[hii No9HHXHHrsciz8V___g+?ÂRR~Jg&_i iw'G 9&VHh2azΖx(&VFbh!i_/:&7& ؖ'i H2*3w)I!1A'h on&RFFBcS)^ +Wi [F+o; 66VrZVV^ziI犖cyW3bF(S)'RiWϿSv` əi)i_f~GI_6ؘ&Y!V (V8`8iYZy ((h(^!Nh8.2gGw+KIYNH83bJ F8F.n)?'F^_?g۸Xhj_yn&6(Hv~)I7g{?SXHf^Fris㷇6()IGׇ:V ȖOəv0Vbg'_ [s aǢVh X(Fb'_[h8HH(:㉉) !YBHFV6>~^6[v&9aIiy9/F7Ff6'syshx iyQ9ɖ` n!f(AiWO/ .SyI!o 77aRxo!mmYhHvNF* .[YiY-9HbZ»(Fgz7!{V` `G! iY`hHDZ&jV/11 À FgoKS'Z p XV^ѱ-WF BXI?y9) W708V>711-ȸ``8~^׉yɀFk")@(P)I->:I)z_ VΖ~~ѱ.vXNi))wx!.X&8p(,f3Y!A91ϲR6`:!LJ9(`8gR 3 c)8_7X ~9Q3h(N`# 7W/Ng`Xa ǹH`8Nhj"!g6f@po)G!9ggHG)g[S)i/?f(^H[) W!i HX8v;11/溸h~`^g:_VN2J((` Hx/_9qi!0~/zvV7fI6WvhF k)~!Aa /+'O#vV"fHfsG7+G!IRv;.c``@Hx* +IW-!fiW!W')B^`vvfW-zs6 ;Wa GHɉChh(xh(c(nk9iyƆ(~V_)VFi&8w(WawGi`X,Ci6 [`vagG^W*FZOy_n08 0`(NA7V(ai r6ZǃWGy`x F.;~#H 6V`ZI-If֢h:_hHjG>Hƈ@.G!y )NHȖ6~"^O..fʙ϶I)O8x> VywzSyw !2nyJhhȆHiHyYw:9HWV(ǻWA6ÖH`~H׈`)Mq)H r׻^2sV8 +3)_Ɂyh*&!WW ^z?X`gI_izaGh@'79.c(H7)^f>)'@x`;1!'H(W a)ḈWIC8{w "8V?Rio7.~I.aAW)X_)/wWx&ySr66&>iqAyyOc8F`xhk&s{_)8H x~8Aq!1Io9)V8fh(X@(x(z[!+OƞN)S*/gWCX6&>xc"Y1Ag`( YzcaYyihXxFb9IIθi?wZa ۙ!R?f6YoVJyR?( _)VO/wW9yW@7 n s{xgh ~S)7W)S9)Fhvfcڣ ^Sg_~SgWYx/o.;^'X* 0h~'X hw3fGY!a?W^`!)) 8[ƖN 2 .^!)GFno'V8fbΎ*~v6({(y99iIVHFfHBGH`662'^ιa)Y1BV`(8r{a!9)(fxYYg;2hb bb&aA/KhVx@r"!92FhR V6'*Y׉yy@@:Wٱ!1s8x8~6cyIə*gV V8h8S)9o7r^^g`o9I'!ɣg2HfnsV8?w9aOGGXVvhiIaF~Ȗiv8c)93#.w^ii!3GCVfhn~^^((OG 96)+a9`Ȉ`8†*W& +GK kHH`v:)a!aiion(HhF(7i/aW6fXȀ ɉ9YI#?xN3O6hsn Ybf+x@fY11IgG3ɾhH_OSijFhhh6s!I)awwo)y88Xy'rk&kzhhKa999w^/&vrXhfnc#3zNfii7I۶#'>י7J)&^†r.&xVH{>)7)w)6沷Y!)VȎR(HH +_ǿi C~))HhVSWBfo78RϞv2 Iy yor((^(KhnO )n"hX8 )!i_I! (hHx(f'si~VvvF*f^z#fy))Κn_B)K>^Fh(FS3!!I G)Rk/(PX8g9ah{^(VVXxFȈi 9!!1G/C 6vhX0`&O{O&'N&zN3g)1FfRF.7^VcZV"v?o2VGW8!g6Fgn^.)׶~Bw2VqgIQAOSYقf).)R Affzف؈6Ƕ(;H0^S/!&Hɹ!m-A--с ma---!Aѭ-mmM -׏W OayW fȸX@` HO6N#.K2cVWvK7z) 6胷:VHVoh~&8"7)'WI +V?'7ag)iW.^7[v~iy97VX@h&:6hx?gbf_i_Ș^"&+.WWg/)#NvF(xvBJWW"Ji_W(8H3 )W7ןHSFH&knZV/Z_:rG7 3 +7xFWO.n[ +b+NrczW++_׉Rr3wh^'3F`GIIyɷ&h^Hxi&{뾶 W^Vif2g))gb2~F.'7)鿚>H#F+cKW77 fFJFfH6G)y))ɷ;Bj&k)O7978 HHX)IGG7)#)'†(v(.''w WFf6([+֞ii)W_h(x &G'II!Y)3xxƞ'WG+7iG/&>V(68(v:?AAHHXVFr)I9w i7[&V膚粆j/)gȘXHhFgIY!9ghhRHv*)!i368xfV6'WwI9G'8FVHhga[(x xVfN~wiWVN88*9! '. xF8ظvZ# !!A!Iɇ(V^vJW76x `h+*Rj9A99nr 7!a_^H X~Vn3'i)iw6F8 xFIYIW#^F8HVh'a!IRx(h ؘ(fy)~V(v"nSI!9s gW9aI'2( @ Hhf*'79YiWJ{K` Ȳ_)I^V6(hVGgIaY(hxx``ظnWYY!'s&F 6(>y!a 7X``B?ya3VHhvN+&g99iWǷv ^ڷOV(Xx(ֈvsG Yy׷(Xh' Y_o.VvSϺ((f2W9ٙ!!iGhX x(7aiv(6"*"/>WWI__ Vvp@&O!i.rHV?GWwI)W7f(XXH*YaNH86Fnya9` F'1!zvF&hVKCGWG Nv`6qwF6hfVvVH^^>'WG i7z??_JVX@1g^f&f>(&{S#G7"X82Ia97.fXxvf*_)9! _& (?)a8(F&VnOwgg'GGF0`N_I9!Gwg^^~^((fRrsO*wWÎ'RÎh(XVaaٹNr>~"oGsOZNV8iaa)O:^(vJ^V yw3^(hVRC9 i8F./N~'o&V6vVv6g) 9WZ&&h_srvgKSr/V~rrGsnN>~BN2?Rr^.S*.nnor^&nfW 9WR((.&^6>fk3ww?^~rzIWOsvFB_ɹ)7nF>.r +3ʋ.bWf&rSgGò~&cˣ'O +(6v6'ϷwS3kã 鉗R(((뺳3*VFr !Y7sbB6>+n2.V(f~^3gzs^Vn:;OiWs'Cۺ>s'))3Nsnˇ3.FV~N>sWW rv7i'6C_Wi^vV(62bG)_3 ;.N^bj'ɉiO>FfF+k.Ffh )/SS.KN>vv^oj _~r{_gIi&>&N[ljIIIKR^(.sk^('rVS''+/Z'*"gǷ7gBRgSn8VHHv> o7?oJswiṿJ Zȸ(Vf8vC/i)IW)722w9g~(V("ڳ_Rf(Hv_ _:>h(h>?9y7_O6FfF8HVϏ2>Kr_G'?Gr#kiyiV&Gs7fVhBkZYIiS.6h( VVVfrR*/k/SW9yK6F+o#/68xHhHo7 9vNFƆ iəi?g?Vh(nK/~>jO:G/~2N>n ٙ9)N xxh_i9G_*fV6rWy7kV6(hh(^N:JfB⢛iY9iþfvvvv7i +6H `v{Y9(hf6C aa _j&vhVJ.Z;Rn>sOg*)Wsξ&scGGGwW?.h ` X6f_wi{vFf~K_ ىWw{~v(v6((Fv(+_Sƞ &.K) i/¸ `XV#wYW^V8(vFiaaV8hFF/^&BnrkVV>s9W_S(XGWIyGw^x``hg_hz)iGN^bn3+Z#vVx 8//oNNb^g7^&8V62Ɔ^'w)jZr*Wiy9W:hH6oCj;f&(^fWgFV8 ɉW/ֈ8K _sB8>/g)[6[sO8&_I9i^hx6^ɹiWKVH8Hn.&'+^k__7/^&[)VhhX8vf2aAa{(hظv^)W?' b^F趈(ii~J{&f#W)yW?br3ǿc'w_O6XؖWYHhV6ǗWW /*v8x>&6"/"IiwGO6(yyɉOFwya!Y (V)iy!i6^"3G`8&;?iwGGOn6"OWi!y)I_ƸH(hΗi)ISڞFiIIIfCVV6vH;ɉ9Y/Oz^.?3^nO''GGChh6(R')Iy gKhHh(^)IYw_zF((bKSRhxXȸHWIwrNVhHƚs?aiؘ8V(6>^n_i9i2j!yI OVFKov`x 8a11h(F.ח_ ~^^6~O3s_'JZr/#__WgoGbS'w'JF X`XhF3wi _~n{f~F3y'SC&fƆf(V _w)g.V9!y's +nf^ƞO.kz6VvXX؈wyq '"8h6g 7GWOKΖV((f[k* +BS'7_js*rsg) ;ֈ8s9Iy"Nf^wi9I7ov&&F6S'o/;Zj_iiW"F2s?+;kr8"SwavZwWWSڞָ63n2NBJ^? +/?W7 ~+z?7_7WN `? ɷi)_/b6+r;*{/)SN>.ώfR(~:CG7SoOIi>N{7g&(HH(&׷g{{bCoWWs#ȆV:R~#C/ßobg'Og{^{i?[ƶx8xX?w i)CbbcIigΞ&~v(^F3ggw7GwJRF(^×W_VȈh(RWɉ)Skf>&{.^;Sgi)2ʻj[;n^fVkc+WOcʎ^'iwێFVhH6:sWi_~O[>>fi w'n2[ +^6V^~OGW*N.o'WIi/bn6h^ +s>Ni:O.Ϗ֖GW 'o>&f:(8 hfKs;i_I7ws&?)i7__'F(SsFֈ8fKW__s&fb/oO:ڇ)iVh^~iffVx( 79AOX`>:(&vָ8 Yi wxH^IIWw7Wy nˇinF&`Hv"ɟǹyiWV l,ֳ i&(Hx)a!ىVVX@0^I!ɷ?8h^O韻v`[wy!aA9`Ro_GB*(!AYss& X) IjȀ8H{'iWWi/.ָi_!W+@hr7#oh87IY!a ϶րp08 +wa ) ΖHh^6GN?w_ hV*9!YK V"7';R`@xfGɁ1AYiGVX0&'!'/V8x8V&C?/C_'_.Ȉf9yw3.nHf(6S[;S'θ 6SI!቟s[@`fWAAY)F `?#o[#n`VR^_igsYY_z62>Fccrf:`@~)yIy9 8 +YA! 97hXV(oK)IG>HV#s~7ɉz IR [NR{r2c6xN_) WJh ``Xxf9a!Ah6?Co?2(8&R )7g2'orB :b(`wig!VH؈sWY ؘHֶۿR&n)_H&Zz'WZ'3n8GgGW +C>nJhxֶ·9))?Gh&iyYcHV8v3''WWHxփGs7)~h'GWB/7zȀ F;/Wwya (~>;y!Y(8XxiWV7)W7i7hhfZ WgsShhx VοǗ)YH2rRy!aWF6vξif&ȂG'7G)HxVK)7G'x ''9Y6v沿9{HFrC&Ͼ(VVfGϣy)vxF?WIg)W^XVhRII~&hFSg6Y7f:&N(VBO 79/~6hvwIYIob9h8 vRk'* )ÎVf._i)7Z +^F^(B:c'_w{r^SIWgWv8vN*GZ )://>K/ǞrWJJs3+Ǘ'V&V(hr[['ji'bVhho9iy fx8h&+9 iNr3'v3zz_'G'_~wx(n/ +&&ʿ/ʚF~gi 7W/Hfhƈw9!W&>^r3o [S&^_))Wo'vH{o sN^Vh6^S?oi/*V(&vW7+~[λ cS^>oŽ^')77I +CW?8XJs +w'oƶ2.7iGa)V(h&r^h(.'>3Z.r3j(;WiGK#o7϶h6n늟wjV&΢j"i9wzNN:b.r:J*"'OO&N2^vhhw ٹ7{'?6Vv&z6v*7w)>HF)y9wb";&RF^&_W~:[F6h&Ry) +?WOfHh3Sֆ;S?cg~b&Wiiƒrk#n:J>hFFiǏb6H^I^.O7ϟ"{N&6HxvjO_?ۇRCB#B~^'G Wj{g˻C +hV&SVhGW)WGgO;Ƌ[Izcgk_Sn&26Hƛ+O)w_H)ii9 ' +BKfRHv&6k#)w3rvHVBSw£_gz&S((+:CCN6V?W 闟w32N&hn +.nnfr{o?)iۻNn.n+gJ狇#ƣH8hV2b>b"'WwWN6Fvr+WWVhN&Fr3_)o[nR^Ɔ~fi 'obSgO~hh&n&2r{JRc{?C?iIW 9ږ(HF(k&r&(w)?zz3RvVf/ii׏>s hrKWi'jKS&RiW)kVH&J(WyIr((V(>*3iGoJhXVN9i):78h(FVNJC_ig3Ro:.'iY!:68F/˚^(r겎)o(NGY1JbIHH&WC;vH*yw6^(Vs)i!a ˛(^'Hh*ɉ_w[f.^ʛIsVhVv‹cya9ƶHxXHKׁW(hh82K *s?YY9goH>vn #NVVhΚK#rS!'*J"VHFi9fxH)iFzW)Y9)F:F~#7& O6r6#Gii97J +n6H"279*C#b8HV&{v2.O*GiyKʈFn2:3RbN +&/_~#ncV~rGI) .h6(6~G>fVfk.+WIiiǛoVV^&)3^2FVR?{i_s/(6Fn!sr&Ɩ֞f7{K2h~CJSw)!Y+"C&ƾ&gc*_S#6vkv>?C(F&VF&z^2SO/h֢w'*;(V6Hb3WiO_/rr韋VFVxV7I׹{;"_F~Fwii釟[r6ƶ&/.RF~s&2ⲷ) )iS*&Nj_or&n:>(^~Gcr2FHI7#rGCKO7f28``vI97;o3G_ss&R:'CVh # IO&*~fRr֞7wwgN(8HFɉ W(v":vFf)WWO 7bfS) C"fN;6w))o*2RV 7S7_.zN6Zwfo+VȈX8O7S__k2K/r/rHȺəy)R^>_jh7G_)) +h((R)9bS2( XoGW6&iyy7~ + Sv+)w'BN~^hH6'iiG'Wg^.OGWg'z؆'W[_WG.Ƃ ~66VF(>׉)snSOƖvG_7g{OGRh&SGgG_G''_>86 +R'3_vfINNn>憶?)'f&&ֆ.o+SW)_ >vLJ?_HxX (CfCg7 i*rC9Y! Ǣ&xV(623C"S&r_S_O3_g7C&V(6>ˋ_Gix6rϋz{RnyWO "b>G_'^N(hR[)c_JgWI '[f//s_'GkHFFbg')).Kg)yW'H6>sS*zz_wS?'iW6^fRK[)sf8Vn#?)C&SiWyYb8`X?B+>fHSG?'w79I)Cro.枲{KV6h(Vi+>NW_)IsVxF~ 3 +H{7)lj_O+^v +#n&CGgʶ&(rroo"^2wi!a!9I)'X^C{Nh:')w׹iGS7KzJo)†z6hfkk2Ff&:_w ++3#_'y w{N6 X+sw'g>&v/w7fn[OOO6&~/GN^(&v#^r~:9!a!i +(vh&j;G*6hv2i) _3"FWWiiON&vVVo'ggg'kRfFk.RSoO'/ ׉9W>(6*W?R÷g _ˇg;fRWGJ&ff6v6&IIIHF~N&F_S늊../Gi Yw +fָxV._/3:{NR~.狃zJ'W'/S#;/V(VBWGhh>Z(v +#'&IIy)gWI'(Hh2gsi'h(7IgSrn#*#9 6H(Wjrr^6ƶv's[+vf!!!!hH XvCVW n)W'+"?)W^fBB&>?wiw*++>rJ.ƂV2Rno_wGANf.h VVk 9jH[i'' whvSg#"'/fJNr{)wB_^(s'k{YIΞVh6V{~si)w_G)woؘF&FnBN7/_Z3*(:";'GON&.Ww3_:2(.Rv ^#)97*^Z^(RjG +6#';&v.Vh>F&3_ljɇI!W.2Fhhx2.^rzO2bSR+c yK6((R3#B>S('#g^(xV&b W igOs/zFHH&h(r&W )?ۇ /&hVn"sc?(zwoS+N&Wn+(((WyiKNJ*o{.~Vh6sW"g +Rb'9LJ_3f(N^ +No6o/V~:oB' ǞN37i7>N&(h6vG)SSg.>_W _vxF&NS憺.7*I)Kk(VV8‡S2;G)Gc'C:Fh^:"s2 +~iGC +^SZB[^?c 7bn*6zb^S[/gi g.Vh(xVf_)W)W/')rsk6nvvf>2)W(^OW^n+#F&oSO.w/i_ϳϢ(8(^S>f)'r_?RֈV? kNf>Fw''I_+g_s&6'/7':hvF6V²_w/ƞR6>JNySGg oB^vk;{.c_v6Nzk{i_GI9io(x8>ob^ RBON.nFvr*g +'{[/".:^j'g:v^2ngW7 (S3j wiw'S'#FN2_N₞Z#77)>ohfV)g㞞f~FV3b)Yy)/.vX&3o's'O&2^^wχrV(6fhVzoWW'* >F>Kr'K&hV#r{Gw #+v(8/ );B&^ζRƚ)yWn +v8&^?7g_) +~Z/._#"c>k_[~6f3g{[W# ^6FjzS'3FrR)9鿺kʆ6VHsN~'f./)7'z73Gz6.;SnWWB.sn.#/c'Bh.~nN 7ǟ +.2^f3O OVFS7G#rC3f8HVi)C[nVggʈHS)9IW?*F(vhVFS'gJV(kwIgoC_zB~{ {&Vv>rKG)G[sNhHr[)ɗ[s2VȆjڿKGy)b6f*j_ )O>Nf6RJ~{'z3nó[r>*GW?'*2n23{)I/V>NFz^rj'?k'zFv>6^3&FS))cΟOS)K2^VVFN(6sG'G~^&(siww?fn~H96h `f. iy8X6COG Y(v97#)gVh8FI?c*BJh)wG&FHGc"?'ii&f Yٷ&ֈ&C*&hV#C98giICB(WW?nvb#f^7)xο_?YxB/g'^S7g3ciof֞ y'kֈXh:jKWy)Gn>:OSfJrfcfz ICf;YG(Zh>cnV^>Z_&o3rV^6fs6?^vHh&r_99'S VgiR?Iw(HHcg7>^2_) f("7i)n'f"wx:~n_v2*>") Gg2'wyzhh>^[cZf ڳ'Nx82/9Wi7>((VFc"3w IyW(Ǝko珶vwoZ{> 3GI2.hȆ2N~J"~(G7zO)wkC/7G)_Bf8 v&gh~3ognV)9IIoo>v86gby؎9Y!a!2fHHhss_i7&Z&{n'^^oS; _7o#NVf:"viGn(6(&zۋ'Y9?r h&  9i#;hi2ZOWXxWw!ySZg@ s I!wsRfhy!Aсi跹)/9ˏ7Yy VHfX`VvsJFFxf^w)ˇǎH ȋC7gGWfJ6'~;CW'YIQ1с!aQ1QA- ͽ-!'IaA!yRIyaA + F^V I9 xH`((y!!78`@fLJb;z2x0vWa'I(` IA!93/ixXfA1–kVH`SG)f 2yI297V8hN)xəf`1's@[)H@`VGmmQ'78XH7!Aahv2Xx>7ibfVH(Iaa?g?{V62'oG)sJ6f0FI!(֖x;9qq1暗_;6+siXk`F 9 gϲfhV_ṉ ;΃C26X,,?Y? aI確Vscji9)ςfvb?&^Wi?^ZXF!!G'ƀ`Co 1YrV Xga9Bnss^8v)w᱁wK8 88@>/!'3goIyJHhWYAw+Obs(XlX a Ǻ/ʶ @ `V_wagƞ" A!O&&)2(')'``HضOa7>*G–V(h&1R[x8^y_n#n*!Rv^(`Xȶ!&).v^6&j9?; `fy9/i WN6>f +iVX`>[iaR+Go6H( AHhhƈSaV(BS^XNOفa _':w@0 i9kSo3X !KN? @ x /(I o>f2wIYf+ `X8^S_)~^WA/fOY:>8XH_IfȈwv1&z28ظH֚i9{.X fZ^wᙟ`26Sb2a6fȀ89A^׆xXiY {Bw>fFg7a /ڈFfzbhIA(9G/j(v*H6 _iwsG)VV8 Ȉ.yyoo~V6ozbF_n~nWo +gINf&2!7 (!aIɉ GG{ 0X6VVR;2+2/Wby?>c(x_~[xiǶh_WȾ~VVF8wR'WG6H&>Ήy9Gy> x & Rw*&zx&VyovGWH`V'O"7iɇb'RV_bXh(FiygoWIY?fn>Z:Z6;R(h@^W!y'Yi!7[{(hVfikr2~wa!w V6F&Z?_)I?3_7VF2>2hRbs2&ZJ)>wYIS^f(h(FX؆o(nY1yW))Z[ ^9wxXVHVj) 1) >hhF8 iw^ٙs^cIi6Hb;Jx(g?_)&z? R OXXh^&.SG)7GWW7>#O/XX*[^KIIII鉉CV(v>nfNnS'V#))Ii9Gr@`H#8)Y?VHB iWwis8VH^Hvv2?:W?s)W)_f^f#'jc_ZV?^fK^s) gS7W>ƈW.^b6hvKy9y'n^hi6_^hn ȾCwI)iRi!)f{&xVf X VÉgWW_'i2b~(BNRB'G"; 㢈X&;7 !& FRg.VfCi*(FSi'g(Vf.?iiN^J +F^wGK*~OaYykv(Ɩ((Ychfc[NI 'hx&*vW9:{Zº[''/&x^RK_oJBwII_2o:Fx `h_Y!IW_{ s(hN:'99ihȲʛO>s?Fy!f>oNgOhnf2fS'/'J'ob.8HV&gG 7!!~H8gV?k'XH;r2oV3_))!H Jsi9 8xRG?':V'O{&8xVֈW~HIsnR[s3>WGO#'f2Z3i*+'7GZ_II"־_{3f@`v^ Wj^VȞ))w{`Xȶ*KsF/wnhOschFvNW1i?o{^3gF>c'ZHHH(iR2bJ aa):'X(h j +)v {';SS~f8əi'I*Fvf>>^X`ʟg^R~Wa)hX iacx6.FK~V(ia9_If o~&x` 8H{)j _fV(X``׋{'Io(({._{fVhv!y'.z(x^o_7i_nHrvV+s +F(vwY!iGgrnƸ 8n~'wIJ2&fb&fhFf(VYYyY wO66ζh~ƋB~6ډAqgW68`XFfjGWW_ +J&)c6hxVYaYW w3 )G72f r.&V8('[28FZS;JG'S~66fSqAYa9ii)ϣƸ((hX&&/N2:hh^RyyyGGN"GG_3SZ^h6H ϙ!WiC'ljOCv(6j:^V&ojG'^bjXXXoIaaIg':RvFn*Rrv2(*x&7Iy!IIWyw( Rj.hvvv~NYyG?I>;GgϣS.:xX8fg7?7 +_!ii7(FƖ_WW_8F`67i9Y'7wIzO?Sb8R2(Hx`B )F&_WGg7O)Y99ihh(XȘ`` X~Gy(vHrG!97W+GcrSO*^(x8HVV^I>VVv^S/>zw) wYY/v6f3:fhHxJ f[fri9)o^7y)ro^F( hx&wc;#v(kWg qY7ƞh@Fz &˹y!aygf?Y9ySOr{h6HXrO )^ +_9.6fۆ Hh膃_nYaָh^iY '(V&&((v`.H.! s//2 9Ɂ9{H8xXذP``xȞ/Ə hzi)!aIiGob_K~f&v8h8`Wى^J_遁y9)h`@Xv'YoVVh'!!)W2Nf&~H8h Bqw/((Zi!! ob6ȸ @`@ `Xa1qA)'&VBIY)zrK~ZRN( ` pfa1qy7gjf(VHWyyW)Hh86xX`V^iYqIWf(2yOoLJZ&'zjBVV&^ +xXPyq1AW7(fkفG))J>(x@ 8` 0  AAvv>I_GnS)g3 +n;&6N0 'aAaY ;(' )g&^~6^Rhxx`XxiYA!isB?sNz?O'OzNh('nfVX0` 8V'9!9 S_W gW +6H8VHPpXaaa!3>y)#sgoWiW'^>R@@Ƈ yYWO3fi)9)").;cKF~h^hX8(Ba!ai'6ohKf22K/[x `Vgi)77_y wS&cFC"ర@xV?Yaw7.W)闇3z"~`6W'S'O_yyyyis #s^F&o~&&H`xNK)i)iWsSgb(RjGW)W26&H88 'iZRRSG/WIYg?nʟcK>h @Hh(wg{gI ɹWw3^^'gf^2vf&x `fr)S*^& WW!aI (6FjfB._WwrHXRGG~O[Iyig?N22x' 9B>H8 'G)WG/8C3II)a)ɷcr/zzIIfV 0`VJsi9ybwi#&kayI(>>莖c2~vNʳ71q8` hRS_Ww@8c)!!)oVc.^N XhN6o[wg)_'ֆ^zCOiHֈ(Ri!9V@@0`XVGWG )7~K~.#7)!9? XF*sI V3>Xx6j77Aqɗ)n`x&& +GSW'GWibh`vVci.ȣk?^V'GW[(x8x(I! +((hhχifȘ(s )I )' +`6>~nBωiIg`h'Sa!9{oXHxX8w !1Y!!z~(9_3WwGH (b6)) S#'g2vV8(hn1aYO&H8HgX(^&vv7YLJiɺJSOfV(^{'wi{Gg#)[6h8(;BGYIf(x`ؘh.KY7ZVXC—gs.'WnO&FFhȖhhx)i)3"SfO +&FIyaYG*_shHxֶg'/^#xff'yy)w_'ɹBN^H HH(+s)G3&f_痹IwIƶRkVHxv6ngw?gw)&2&^rdzGZjw˗g&^hv(>FKO_OS>h6V/ChR^rs Yygȸ(Vf^&Vfn^V&g')y)yIWGWY {o(x`f^?Wi2K'>(()iɹ;nVB2G2˳_*snn2OnoFf';GiI)J2>;f~ v(Ff&?o+b*^(""׹yaI)&HSfVx&RRk(vۿ'W9)׉! 7FHHx6&VVhhwR{GnVNI)! w~f6/G#k.KiNWOgVJ?gyiw2Ff2^Nkr3>R23CFfSiٹ!!yGi`xBHȈƎ +#>^33G[7ٹy9 aiwG H 866^抖R62z&Rcg7)wi i)wָ CCfg2sKz&r^RII[n#;hȖ/&.n3n>>>2NֺO*gۇIiIyGh((hBfV{g_(F_r#_w)99yI)s>x xX[W[&BNꂋ2+ZCɷ/[7'hX8(vFz./R:*W.2 6Sg +zVhh(VN7?o ^r憆8n[i)+*s_iWWi9igHX 8V&&OCg78H.Ns_'  gO~8hJ/>N~N3_/Wigi  ȘX(CVhfO&.'iyYI7g?[_NFXxHk.?'/Snֈgkk3WwWiwN_r(xX`x֎ y):xXؖk_ I7)7ǟonVxHhֈZ ?w;Vvh_WW_cwi9)xx`hH(6?GW_{h~/9!WOfoG)W[ xx^*)f '&>f^{_7#Nr_'z68(fxh&i 鉇N6ظhRw7wcs )7)WF(` &'*ƞ~6hi))_?9ٙGOr^FVj(H.**/ Ϣsfii )Cb'/:FvVvVFN^>sg)WjCr(h6wwos'_Ǐ;Rj*ZR"V(v.2W'_vڛ:>vs)G)!YɷJn?'N2&^ʶv֞N(r_WGၹײn+(c":__#;?G/#C?2vh&Vg)c_Br'Sn(V>)Iw_W)2R(³/_GSR>B2^((V^O yYy) Sۏ".~B&+/2r8xH7 gnrR3IYaWCsN( +BN+Zvrfc's):BZK v&F6z Ii)BVxhZJN +~HwIawiYWF`x87wg76^&K^.c'S.NOC^wV^ωٹ: H_XVNיy!a@^#i&N#G)o'ϟCc7&oiWk7v2WSz~6&ZK۶cayIYaixxHfi)N/{&2c'K_:'g/{jGg!yf`h xr၁Aay!x ȸHyGoN^)3R2(6k_X^w'R9aaO(x(2Xh X7qaY !7.(V(iowW)_ +֘v)?ɻ^ v' 9_i9yGhVVh>Xv^(N9qIyY"VxV.s~vh8_Y_I(b _ >fsW )IYANX_(*^ @Q1YyWOc:V+hR_(F +9i7g9).(`8yw+'g/^((o!ay)!bhhhx` `x!Ayy_w.8:V>6hhYI9hxh8(.ˆsiWyY!!w:H~&6H0v199SɟVV(b~ +GjWi Yyφ*G_N(cv!!!iwϖF(v8@0 ? yYAiO(r&z.VSGi82~/RV6 H)9I!1i"(VfƆh? aa!  +R.2C'IW7&88h;VhH2hw9!a!!g2Fv 8^WyYy79Iz :r_oV.^G)9>+^8xVhF.Cf8NV 9!1!j.^R +`0pkG7iy3G{>k_i^vY )y9cShxHȆn`趏 G!!с o +&0 `pVW)iO)o*w+KWWkh軗7 !3k8~fF?HNr^i)g7y9iaq-a)'VFS@``@ppH"G +g997I '2J)Kwiaʊ/( 8SXH ? ) IQQww2*i``0P^crJIzb.?GWgH(' I)3 Nv28xX(I9)Ai3Ƕx@@p(#C 'ۏW.Ks3ˎ^+G WG_;>FhVVV: xȸ8B3R11AyIg X@P hV菟vg7W7 g3krCkW9[KVHB_jxhxHI)9iAY7{28xh8А `hrC wIWcgiWwg&VG)_7i)siFnh(V@` &i!a11aIW~h@8H8"3WW/2Wg* ^ο W7'S_/v'vv@(&F^n*I['28V `fO_O#əiGfcRo)O)#i7?gN(ȸ0@ 8FiyYaA11!WiIƎ xX H#&z_N>gIG9WwgG?w{ngֶ2 `F(nFCiiaaYaa+f6`H^8֎.)"f?IO~_ 7WgK'7S )/)ϻVȀ`Xุx(Ǘ 1qI y Hhؘ /糛"^O"Z 7W)[۷^&:g3'ggf (ȸH8ZSsW!!aaI׉Iwfjx8((X^?'7c'V&gGח __JGNFwi鏂cؘ h[!1Ayi_{h8(H`Xh(x6N'HVf^f799׷32jsFN)狗O (VƸx&fyyoX8VwV>f(>w9YwCObo7/>NWɗ ^ @`H`x.ɉY119hV@xhؖfVGV/ɳs[#k'WgwVxH(KF&>?WA! !ٹ7wV8(f:ڶv"N^nz(6+*[9?gs) )_N"88X @ (f V.IIaY񑑁Y 2& (FF(Vc?&HCZ&>2_ +{6S֖8`S'RLJO֖'9yё!agVHV9 y6VXf(^GIǸf6/WsYIv Ygh~Xw2艿 X vVaA-Yq^x&.'?H&^舘owy_o(6Vh(! !c֛HHg'?/H(66A B^G>ȸX^k' 9 7FrHX6_Iy;NZxi Y!9;& xHx&GNJCWH(((hFjIIWrk F.j[V>g)RhFϾ. XȈ'"W g:v(^?_)yٙOS` `f7W oC;8X (Oi၁3Svh6Ο'Rz2&s"Kwgg6HOWo &Vhf2_3wIg(xؘx^Y)&&RiS.#'"8(HH^#/3?J#yy_^hxb8hS)) AYW7oJ(vV&33k{f&Ȏn63oc~_)C&y9i V(v(+7BFh88؈Yi#r'7)R_JNfNv(x(sO+ Ÿ&2gIWY Oo~x?i>X8&!yW#vR7? ȆFF^f&Kg3cj*.ofF^f&yIə!_2&^v6VIO㸈X ؘiaa!I+^77_?.>vhF'ogvFK>)Wf((K798^#g)!iJ8H ɗ{rvvf{'W.חj^2W9)gn(枋9y_VXXX_'YY9i&fnlj)!I ^VhxXGiG_r~N6J3iiObȸX /)i9( f3/siI97F vaY9Y9/ΆxƸsɉiHff_ɉGg +'N' I?ψ0@`(/' i9WSnNBVn/ڲ8 x`(2 7)3ȘF(FG韏Wg[>ֈ^ GrxX rSW YGnƈ`GAaWHXx(h؈ +G!ǟ&HX8X(~[wwG^2c_zBR3ǿ3iGo^x؀FJ3 iyay>6hIYaI8`@hvW8ȸi:'SSCV^RJkNR{og_F v+wyyaf xX7IYa'r8` X_y7wȀ`HG))oNw?/2s77cf8X 8V·9YI(V !aygs@0 i!Aayc&VXXhW7/{Nf^~r*r>*;[ˎf&gYa&8XhO_aY)r8`)yqa )`` (WwiiKV^#r7'r.v2b#WןrVvz'Ia7FffƂǗIV 00^CiAis8h(n?ihH(fG97 +s Έv +s:[_&(&rY9v&H'9)nv8`@8ȶ)Yyo`xFRyI׷ȸX`(WY_.'*^fsnG7.z^3F3)yi6Ȉ6_7 a2ఐ 8fGaaY9GS?f )I2 f'??_s6^ƺg_ +"~K&i7g׾8(Is8Xs9a9!YRFf((S鹉ICh v×yY7.Ff2_/g>WWɃh8_/I(`0FRYi9!WNj_!9&Hp0g))G(F(&Fo_O)?SƊsO7yFs/?( `ȸ Iyiy_B>/s)yYVx79&N_ˏ'OoZ.rgʂfo*(x(IY99!IC')g Wώ^@0hb?Wg +vR#'i3{K&3)'((ZfF^HHHfiyIOn:_緉))i7^``vcG)c3.rjbncFȎ:6Wzi:! i;HVH809sf7@mW(XLlGIm(@6@.m((g0V9ANɐv?i71ao8Z9hi!ay_g_R 11a!ISpP&!1),GyaWf`FryHȣoa kjYa- xƟfg"yb)/Rf wOY)8)(AI0 XjA.@PIY O@2pF7AOx(b(aY`F02HgaX@vvqaaYpXxX(o9g6s8h j_o`y ^8pА39Y9wg``,VƊ!-mIw)(`~>VȘCVYWW8 v2Wrh&)c^aVRGKw(nHKiahֈ0.AaوHXl࿉Q3)xX~(iJw۷Ȗ!IiIx(׶VaY?GXvW (&2~w^WKi ow (_ G/8(z'YWai@xF^vAYIihxxw7Ii` X GWw![F8[^@!Y鑙vxf@&3fYR).XVyv6w(O8w&saw9sO GfWI~;(RX &(7y7~GK) )yh0H(q7:^ Ȇ)siBsx^g~i)O{8#!WN Ȉ`~~iWjc.' +F)w'WV.(8 /;9P +66i7 H(F))Yi)r^YəX XH` 6oR  (OoAQɹW#`@`HokCk?S)*3~ +icHHV8)Ggֈ.IwCRzhK3^&(f^n 6x(3! IASʈ36jvx^?&)9&#SH)_I_RN~׷(._7)?f)i~a; V#gC7&֘ho6X[i!ywG 8 R_2f7R^Z#'Y9꾚2w (sGwiO&) +f n럣'nr`6(N+)Ni>(ƾ7)&ɞh_O9(ö6(S;V +jjwIٹ3sV( H6g7(K/{9rgLJ>)W3΋.r+BSZfsWs2'zSh(&.8N+:7'igىI^Knwf+y.(8h&7_GF_gI;&fGGg32.N6oovhVVH8VI鷲R+j&G +#G';S2RbY_s3&~8xȈ~wgSRNr)99#R+~/&v28&Nor8 +')y 'F6^)K~(nNi3&.6&_jGk.fWozrFzr/ʇRK)G/W)ϊ2fVhV_:s)+>և!&Cf^_*+F RJIZ'V3>S ?Vh(XhN7g3?7n)Wn"w /(Hx(Si'S^&W)WFH23 W7vV~/w;vhF(; IV&KG7N^bn'>Njw +wW_RV(zv{ +z))/)rn6+ +66ȶZWi9zskfk''b KWrNh~.r'^VhGŸ sB)^J6HBFR/k _&ʋ2r?OVv.V&+ ɇc/gOR+v6n&boG VV~7FNogg!yWN8 6Vz67I)7/z'2vJ_:( vj'isNhnϷ6hֶzj7Wiw(h((VnyGj*Chh~2yWGz۟˚F^vV^v6ֈBy&>>''w#j?Þh6^C)GoVh')3WCgNhx8V>Z?WWssb2)abHhx`8F?G?_S8x_!/R2rh[#rò:Szv*_w7nh:F;~&^g9)S>ˆFFBON68W!a!^hzcK'22FFfHWY~^vV׉V + 3+j?3舚sj OVffʆ62{~(wi9w7bFʎSw*Zָ82V8q˶OGH !VHF)2)H)i@ H!-&@֏M.Hp(a 1h6,XO)qQKX(0̀fIQPP\\PFMe=8"P ,@|$lAAIM%M-N_g1=qwpLssQ-YlX1aݝ|(CG@LlISQ1  Q1= hL\,Y1m1(LgO!Ѷ˜lz͙q`LlaGP<8x‰]iV0@qw1}@|$| 71&@ +cq18pV qy*ʌ,v9= l,)a=yVRL68M-p,gy8@̼V7Qmop,v͍y9p'(a>Ar y6QH,i_qm-Wx@gQ"@l Y9i:,6Fq XX0yq}7,IWwؐh 3_m=w2`L,-m,XY*Ȗl:Y-nH hXm-!O^Vg9 Xp :wqmS!(ppN!!W(6R `{0p9 YY La!?GxH sѭQYXp ͍K x6mY,p@'Aof(ׁ^N, X:9m1a('x9WqMial,Q-Yf&6Gwi9#W)@h06 !h awXI;>wƿ0/#[AA9GppYaආx!Ni?GM 7L, AQYqPPPx فAVj{)ifpȂH'mAA,pl'99ё fxpy"!!`6H)m1!V 1Y&`87fsȷAaXr0H!)m1)y^8g )W(wniOXh -Qi`y_I!hFb8_>)g`@&iAwi?`PИ`xY-AYa0@x_)98SRzA rx@0x0Yyqc`萐ayWi(s(xHa q3ج,`Vaa'`(`C !Ɇ ^f70xA 7vv∰(roY +a6V>)^a-a7yI88Xy!>XJ(X.FHoYa!Y! HΖ(IWa vs_Yh(+rJ!aI# H6!񱹸,o?iW(~6ihX 2Y鰰Hh'I9AQAw"R*v&'YHHvhn>GG^``X' _HxJc'iYB'V(0x'VZa{XxI)!Hx&vV׷A_B^׹Yiёȃ_33V6hvz)aWw!`rF!Yo@`9I!f9sHIaI&s&8NqY_))ָ (.c. +G'6^X`N;IaWw)Hֺf'wg68HO8h@oO  +sr_iי÷)Z&_9nrj/1nXp0_OI!I7RF0fr y 7#97IA x 7o8(00#_kg#&W7 ;?WcY1 ?o@ȸhI(>8ȈX)[7b_HWi' K7/r7IaY9/NfO8HV6b;`NQ i xF6YaqGYHր +(8((/ٹZ8v Gh&Fa)Iכ Iיx`_YI@8gYɁAṣ7rrFw)^G9/of8 wKIg6Wg))۶چ&y!9f`O:cB/2w^Ƈ)yiW6s7&nb& hv8h^f~V"KyA( IGgVhf:gJ~fn_ g&FVx``fy!iHx> YYHvv2gwg&``Xs&o))9!Y~k*~NkoWiOb>VHc)IWgG:Rv.;7&fjsi9 R((2RiYgRf8 vj2V>{V 9'70kqDz@(,WNaa!x` ;mq(`.-hHl(@r!!Y0RIv V0YIPgW!9/(6{9_AhfIAVh0'IYp(hHyAqBPx879'p@ay``xS)(`vSVaAp`['7h8VǙAS&pXV-I/0 0Q!X0`~waI*') gX`@/- Hh2.{vS1g)^rn ^SAv +/o`hgWI0@P0g i11GRccaYNW`!bIQp C6I2h+"A_WixHx_;FV:&~y6` HW 2'(vFa_ &)'a~8^A{8`P@9YgkV!qOn_*99H"x9i63!bsrbb`*X1qzv`Vy91_:hH!aNhH@ch+wJnXa/>(h+8oy Fh6@H F>8o73W醈99'6Yaa9VH@'ϊ&[{o8Www >^') ~ז)aaVv._/ؾ')OH C +kkgo0n.xN7 i_i (~"ywwh&8X'wən)x6ˉaY֘_{I׈ n^^3J)h;)㉘#_hZ`H9!1/9p+266)6wɉWWXo>r)wY~W(>)xwxzwJY9h_6.6)'8W7y!I8'F) r@XV!9F 6GV"Hf.igaƇBH8V_j2hfs2^)icKnkcICi(.^;'Iwv[)2bhV.㉃a.W63" h6Z!3yG8H +BHb~?)FoKB/6kr6 GcȈV:'O>h(iG^϶cYWI3v6q!)aWh& Ny''8HV.y9'[ G?7^H~+!_ٷfxNG?rhhXx ?i?CVJȞNJy#3 ?a'8F`VG> x?3[iK>ViY?/v Gc'^c3>6o&sJ.網؆V _Xƞ癇)GvSih V>gWJKFz kWv/yiasx)i FVsf&o^׉'i '8~F8z[)IasV (Zf s(Z 2'NHvV?G '_/OSS{"6'R'xFHN7g^wF3sKg7x:HOIG7yhHcBGF fXZi&(yvVBaybSsSnXN[ gNHnȏ "x`Si iRRvBi)6HrrW^?i)"2OGi6&(^~fbg+[B&Vh&)wWfxFwIW/vJh(Fg*V*'ii#R[#)V6cWrJf6hxVfs>Bk2~FJ?rיfWYs[jƊf(*vbΞ{)Vr:hv^.9)Zh(^.f S'S׹'o(>R2~&xH[žr.W w F2iS{6/_Kr//G7jZ2zr?7'.VF;3IwOn_'"/n6bhȖ>WW9鿾vs[r((Vrkbb抾7K?rF(.rwW/zC_g'/^hO'yWnVbVv(ZsnS;ǷI!I_?NRso[zS †gJvvciG ڣ2(&~)_&rGRcW[636[3W:xhW)>{[GC6^IJ+>v^jwg:g7WS(VkO2f8vV'w*W_7)s2GW2_f+W/Ζ~:>"(fk'鎉fVvch#gaY_VhXnVF^vhrWg7i_ _W 3&ƸF&xhH~Rw9YWv yA1IF&.V'o(ɳ~VnyhgVvXXK!gKIyWw 76Hח:IsrB8V?w+?7 r8F611QyRkg.g)[v0 V`7I!IF#.Rn+)ni8 ؘH᱑8,@&WǷYIOH)!a96ր^~ +h^H(Ri__f_HhQHX Hwaqs(`(!-qA`XBS*ə;_7i鶘Hh9)g(8XV^h+Gow!!awvY6(Hrx'_ vf Vy 6J6h/:rn_wiƶ0pYGnw'_;iga)!3F0H^yAR0 HKwC WJfjvs/iwrJ '. H6nS(xvwa1IV~.!Aa R2F @89 {_(H(()g7?s^Hv_ 7)^;hjFƖhVW_)wK!):&V.7''I G(hvxh^ y''s)Bi{΃rG'2h@VH_ h NkV*Wi! &;H(i gs?C.Hs'7I''w__(ƈBr`h{7ٙyɉhH^ +_2Gh(f).(3.7 +wyGW^hhob^KHfr#&ka!9cFN^{WiOCZFX '_wkχ2b_I)CG;8 (IsczsKsrh"J(ַ!9a3' W)w3r+/Rsfo.~[nH6_9!y)GSWo/XvFv#SF(xx`X{ IWɛ*h2"aW۷`@Y!Io8f&/oi)WwcbVr99gc8hVz_V_ kX Vo1aY)Ir7_GNVSwbZȀ@p,ٙY9/: #G!!W;ß7iig"xֿw9*Rr戸&hIY!(hAjfn*ڈfr#֟F8X !WcfrGRI?6VR2/ h8@xV^)WhfSOnOgS' Oo9yi)@2yaaWH{.~.7GjxF GAyshr^2nVnֈNCGV`27 J/i)w_h^껿(h VƿwIh(^W_7i9Y! o hN7׉w Vf/VfV*iIHHa!V(f~ǶB^h8VȀX6fWYY9' )i _gn(FiH(hƺ ((h{JƆ?Y)^k'gIIsVN^sHH(LJ_W?J&([/'׹g#CFrOzWRp&I׿/c)I)a(֎RRHX VvvWI KkfsO:Vh(_ghfHF_)I.fF^vhhXf_? +H"_IYǏ^&f#掶ƞ6?7 +h H'i)WIc+G׿/ףXXhvV#O7o;6&3 w;i7O_"g/SW '׃?nȈ8` ظVVBB.xRY!WsC(~&J^sgۖhxRW)_CێriGO~nzǗK^Fh~CSn&>>(2;'O^x&/SIBN.~fr~FFn˞~/ki/)yaIy ffF&&&&NVh_"&6hhظR^?c IWSkVhhwskJnRxHVv_G'jZfz(Vʿi7w__O;){go__3 +&hhh"Sc_7 ))))bFf._i^h HF6V#OrG7 7G'Sʶ>3'&hO:)~ǣ)rΈ&8H~?SgoO(fNgW){ww_>h+h>:3R;:_iy7sCni?òociw?H8hVWyI)gV8xf闟gj(Vh;gYIɷh^^W"_ RgCZָo'YnrV)9W"H@ 6syG_)2xr)s^6V(i9)oN'ɗ)A'^FF:F&Fi1 GyB@``x1a!I: 19iX8gIggIs3^7H6`wYWIghb3J1`P>6i)W9YSIIhWg;F(PWGW i..w&(hFV~(7fCOJϹIi_*ֈxX.gyY +VN_2Q1A6^؀ظ6f9ə&)Nw!)hrc) Gin( xx'/YW#O. v7)2(iI9o8H6 _sVn3a_緎hv(Ff)aA2GBH(&~!63v Y!))W?&. h&oOv6bS8hȾ9ɷv23IgGw 9ɹi)^```Zc+I )osihV 'y!)>؈JhhzJfv[^H6OzV('))IWgW79_g `VhNfi;IyYci'X(2*_IIi3^#X 8(>r;_I#BYgI鉹28H&z&H((h!Y!cF8voNW!W_)WV`@`H^( Wb7a!aSrh2gg"SwH(ƂhHb#.ofh(ǹ(69g?iI!)o&H888_gYw hꗉiAi2y):ŸG^:N`XZ_(B9Cf~OO!9!'k^K? +hX"hhGiNHȆ^(*>WA9Wɹᗆ.vXz;Ggc igGn[>k_^[V^if&6(6^7V?'gAA~hꖸXXf+_Ngsn&ga2y;?Gbb+8` XH`8&舲8h{;7Y!!ivZ>f`@8`8j*!aNJ(hVOso9Yaw)9go.G& H6Nf88 {G iWiiIyy!!7xVx[>~sW/N XXgORW+I9!!SOi9VS{Ȗආ{w)^׿6^'hF"zaiR.wZJ7 hBրFh((V#kFsWfhA Iaa):Ά(VH H +cGWN֢g&OWig+)WWyI i_: '6cOyIiGW9I Σ*ɗ.3BS&8Fr֟.hHVh'V;RiAiyyg;V6xh( xx`vWc^)_CGV'y9_?GiWo*rxI((h(X_v'Ffi!A_yIIIi7*gyjV8(^"9fWJVָswS_ +7!_9ai>sx V^&HV6Vx(3y9/'yi#3CGIs+;I&3_/^hฏb."kc_9!2^S[JF'wV8X F&>sz'k)zioiR[w*ijwrfv(`V`3Ƹh.VHV)))!ayi2:J('rWF68[f*2R8)NjGG"W y99W >'x(h谰H^(sWٙI9)KRG2vW!iWnvڿ/~xv(x8ֿS&?"FiI9aY?))2'7>Hf6>#3׉FfJ:h6*C'Yn`8^BFRhV.'iY o?!I.R*OxFW+&o8'Wgs(F(9 Y7*o(hr:wg*V `vZNKZ aiF_w iSb`hhxvG)(&f&fB^GWa1:oj[')ʖVxf> HV6>6^sVGgGI.(V>ֈ8Hh~^&׉ǹKk +o#^[Ik"BCV(w7r>~(BbfJg'J營7_ֲ^hhVFWǷwƆfKg闲ˆNiwi +^)Ig&֘v& &(((CvKs;ifi!sSs׉V)9ʘ H07AOsFH8W)X0!X'0NJsYs(V{6f x)!Y_yBW)"&Y!y>YII_`6`G)W&)揙iApX`3gqPhؘy) F (`VwAi ChX6!fv*V_ᱢ vWyAi/! + F("aB)'/ 69{`V^ y7vvfYȞɳFvWI2 80Ȳ)A ~v_V9 +6'_afrIR`ٱi^6@(S8۶)aaRv`n~YaK9B68iH)H&j:gp91 6G/)sa^6w`hW)I^(8N.(^/ {ྖx׹)2N J8z_I*xnȘAIY1i.x؈(?N{yarK(>יCFXiSws^^ zaVrXWykywxV^^6^^!Y_HG!y`.&&oi_gW~iȗ)rHXyi9Y^xS.fhV RY W&F&(!GIYy_77V@@V)n!2oV(6ֈ9#7>F(XK 8rFW_ )7gk_jzN9W2sVF~soy9I7.8bx6&&7Kח8h`(6n2OyIO.o&!g!W"H3(V(n(bf9s[J[ +#^WGǙ?vV.ǚ6VF`va!f'f'w_ !?KHhVR(n)Wh(B[( Fr&RA7 r2?gi2+F~Rh`V()woyVOF_7G_)W.^8DzH2HJ!nWc v2F#'~vgH h(^^7acW!c~s3ʢHn J/cgRχ)YiAxx(XVz^:i_#nׇ_!WNR(Ko֚8hxFs/ۻRngG_I*f_fvh8)g&oW!GZ^>*c68x`XNh'G_yi)NwFovR89:/{VGi!zh3N?&Ȉ(z{7gGgoN666+VH8(_b _{sf~n2!);F(Z8h v~oFSf2bA!yvfCo)J&vz_>N˳F׹9#': gR(xvK)_zɁa(~7Hh6f_'g>cK*#>IWvHVևG(HhH8 ?/7hG jGvx. G3V)W)x>X^{V+ FS2wyw!wBn韖7RHz^+S_RCvgW!9 _Sn6hx6^S&vJ)[)) Y9'f +VVVrrw gih^)yn*b&hh.fKgN3bS9Ƿ[F^H~BG[fFs(;gN_7) y?GKvw7&h6SSwSn)iIwOVRRh((Nj6? w _/BRnV;hVrJ 9goGi_ +&Rvf>>*:_y7sFV>w3[Z/VV??:(.Cf>z )_3SRn3+^&~+NiWO׃?G8(Ȉ8~.OwˉI!NV^NFfÞ'O'_ZWC3rrnR_.>SXv&H O+N(_F7)B'{rs(&9/7NCf? +.;FF(xSɗy7)NGC.v.hrVfR)wsf>gsZ7grfNrVh^sG[+*S)['FF3+ʶNJz&'iyϻk.N/O?ȈN^Z)r/'W7?C/' +VhN* &.O)Ɔcj'ffr6^?i w'{^VH^3~R +v( h&ƞBf)ɏwSW?W"rZ#3:gR~rWWIWg6Ƈʗ&.KGVFFxZ"IAg.(hV?w"יgrBF'r9Y!xOZ‡G9x0`Vgٱv6V~)Y9gf,[cɉiO?HI >NbV`Iy99 Іs7iIWWWAָ0Bz(^Ii(^a2,l6O123V! [>x@Oc/Nl`g 9ၹ#n ^iY!6аFIAA'Rf@Fic( Pc +wAiiX(h'7GZqAy癁7Ox`hN'yN&`6JoW2Xhg@9IIjV?'jWYIh0Qṷxv3)x8R/9i_`8  VjA9`v !-gz Hx(r溆 nWbȀ`Ȇ!aaaH(( ~)W"` IF)?j (&*WH6K9K2&Y,w!axR&Y 3`&{aG``h!AV(g!78`xs!w>v(gg&FbI!9gx` Oaaa(VVv(z> (6H:)a鎸8kY_x` nZWWWCV WV8>H3WɏȘH`H)a!#ƖF)Wyz9I HPpV8XHiiYΆF&!Y Fx_ A*fhIYYG^6pxs9wf& Ogg6n x7ɢFvXXb7AY;H(((x+)/&o8f ɗ &82Hr)S'w(H &f^XFiFbHJ)GbiٹiVpnfsظhofiyabFV(WcBȲW9y(H``WI?H肚!_7zfF3cIc6^86)7cfC>^`(>ZGb37G7I)s#v HV)Ɏb.hOg^83sig&V׿! zrHHK'oCv{W AaRXH&o2ظ(!y^v7'(@0ȉVxF细hWi7'>F2^hyg?v.& 06(>'WwV7wy?iVx@xI_cB&&7_hg>'NH?hVYw9&h{S Nv!1a[8(j"Ȗx6Y/YI!S^( XSRi)(h'9 +2"@7+;(S!_ Ya'hVȖI9)w9wR:yW6 @@X^? )Fnr!igᙗf @HVSW/7'WyWGi6 ظC) +H(ןI)cNZ!9 fYI3ȸ 2kx8R~i3~ 'r! Is)F^w.^z(vx)S^(vz6"z~6.W)G~nWy!VhȞy9B`_W (vXHJ)W_ ~)9!rV9a!fH [.ΖZr6 Y!g(H^jS9ֈ*Y7) N6COGIghVVvָ HJ3W)"bG/J IRW7_.SN)XFoY:nk32*^(h ~8H&2a(h#__!an&^NCR((x//Vhvr/_Bn(VFOYhf{Znff'')>FfF^2"GSh8~*G;R#(rƃ)7hN2.[3b&>X wgJ3 wo3)Swb[.fFf;'S.B&&(bHvo .~hbVvGK'Ii/S_əirr~{7.&88(Gk(Vs/>2*wYiFF7r/;wo[xv(V&C6fH y3/3n׉'rXV;9gbn(SG[WW?3o^nn"#~vnVS6VVB{F'kR2ǙI)Gʳ&踈VXhzNֶVk!y'g)'FR)7GSFvS)w盾^((vW3hh(&>CZ^3gGnʞIixW9g7 _Nϟ2ָH~fjHv6"R +92VXykZ9hJx6bGo֢gVh_y!V(g;War)9{8&HPIW3n([I)zN6Fi鉗!nf`V7bG{ف¸h)B GHH(aAAb"(3mmAG!.HxW yyp``kfH0Xpll̐ FA!y)H,0yii^OX:yQm ="&7aqQQсqƿ_b'+/8p@X׉vx0l Ia1q91ه8,F'WzHHH*f +7)ji_oFX8x(7Ia zw"(V __GIyVF@0Fyyy.ֈс w`@@3KK+_Gb2 ڗy? G)72801 Ix@pȊWiW7IɇZhx&_ف)9ₘi;ii i8Gi)igs.cxX>V)Ii"ؐ,,IɗYa_АO)io ` Gw)y['Sr @  1a)By0o7 giH`l0!)!Ჸl,H:׉yiIa~(pxo77GgZ(c@(GkiW(`PFn7 Ia^`,@h/y? aR`XCiiyygXf/IW2&Bfgٙ&Wǻ+؀8flj 陇Yg'V`@~i iWW9 h8 nwW{(89Ia>†6` !A1i )F~.{?GbxfV!ៗo./W'羸Hj +ia)^88@ 8jI111!9g(88&)B?gy ?(H9www _7NC[:oy1'V0`X~ia9H&^~7W9FFbh;77Iz6R2&oCG`V3i9a9q9!hp06jgّA&FzjG(&FVbHY*6i7&io !90@`SOanF~rCj"I( 93hxhRIOR?W7szG 6X XHIa1``@x(/I1 kNrGKRׇ~ff#W_~f6(n#y/(֗)9S"_)v `vvf!r``(fGq973(F&6V&r֖RI ^fGJ8~Ɂ9)!((r6-yG8xX V^&h^g  N3vg^^O?'XhnZnnW_'ɉwھ`x8v(>nVR9G>8H[j^()yA! n(&vh((3_^F 9! 7(GrhhvxV7_XH^2NFa7v68F!AIB&6LJHȈ73^ϷCggϚFvHHxv_ W釙ffH Xh 8hfgaiGCvn.&o!aׇ2GϻֈH("Ƹ־_7)wocR(((9yG!w +  HRfosɉY&V 9ǟogi[hHV^w?IWWG)chظƈ)9G'n88Ⱦ')IaW[sH^g!y+oCvV.6HfIɹIw&H(Ȉ7wR'9!!2&ָhXFGw!YI`ƃWGi fKWn&(֎bCOIG(8FsׇzyY7o +.H & g')RvX Hj鉷I3&`~NRZ癁y)V薆fv&))׃k;f(ZK7s&ʳ[h>63>'O)Iowi#GGC6fV6HZGHX8ry7ɉRg'/2x&2SjϿWwg(zJCŽNȶW.ظN&^^־&r^fYɗ/O7j''z_S8V^fv鷇!Yr8`8Z7+H^I.hΞ3W!gCR' vWVx(B'32g([(~˶YW H*[&G':oh +((;?Ir2Fgsrh H^fWa/fg7^HFg +oiII n&@O1s^Sf(fN/yIy-q O1/{ )ٙgRssVsOG!9)J7((KKF0`@p @ >rX` &' A1!a!y/Ϸفm-1Qq1Qaᱱ1!AaaYc7S6k 3O?/ h8x R/#A79&X&藋w/7(hfv29wW(Z _(X^ v^wW)668(I3;~oiGYI/VRN'ﻏfhRCyI9:.n(82''~f^+(^(~w׉A +cV(8.ZY9ox8`&.׾Yg__IR."vRr[O 9/X 8(扱)yggvV;&fNn'>Ghx3WiaIɲv8 Vwcy3J3hI3&)wi_b_G7bs 6gB6V x8v/~ysnZ:2~O(H((&6#Gwr3.8 !9i2 XOיfk)Gi i Gi)Ii>` ((^^ghXR8W!a9_)fSfRXh6r' 9yIiRCrx3.Hf I 7/_I9i7G)cc8Wi难8cJi7فY 3f "GRgfgB /6H8sJoa!)jSָȖֿ&:Bv(ٹ9^^i2{3 skf'؈x7^N?ǹY*R*ɗ+gOcf&vG#:^rFFj'yaaىϻ h'GǾ^"vƿ'.iy.)9!!n.rvii;^zFF +k/'bG(:O)I/rN(vc?W&fwyBV +W>gR/0v_"f2{":?)~ `B~g2W&)){^R7ο'w~[Fϲ/ڈh6zg[ gG׉R2&'f^f`WI/VHR~˛ZGKf7i^Hx(2')?2z9iWF&F(2v΂ƞN' ifn2NF7Ϗk_r'XXȸW_;&>Zs9;_?w_b?c'ixHBfH26;SI~)G/y_.Û6 {>^8hR(fs_V()?ڇGʾ( i'fgwf&KZ)CF;_Or3C3R#.))JgF&^' ۷)(".'FsWyLJbRbڈ?~K_?Nns2^f_s_7Fh3K+^;'^;sv&7)'+Cfvh^s3w(i꾿Ο>'fsGCȈfN(&fC GnV"& +?k;gǛ'&Ȉ[vkG)(2/WRR/WV~gigjGǗVΆNnngwF^bFO>RIٿ(6f(.'g3Vf3Sb ۂ^NiןF'jC{^.>SֈWoRIƶn{.>ǿG#"&&n&~(#6bbiy[*hFR?wg7_SRf~VHo יv^BN[SfS'W s枾>Z^&+g2^Ko Fˏkw?n糿oRSCVv/wsc'?rvf6Vh>W)Zv(FovO[b7g&FF^'nʆ6hFx6r?b)I Z(FV>oWg/ifh.)bJ^ʇ3+–') _g V6v:r" idz>Z~k>owwGJr6.hfIɗ6(^V;_f&;) 7w~IbvN2+Hf^G鹉i'׻2FhO#N&^9 Zxww)aYi ;ꙙ9{&i(/YIWW/O f8`n7(FRi )'^hhG;ۊS&F _VowwIYq.gHXJvf? gIfHXHV)9aIiWɉh`HVi'77cf.G;>JOOG6f"8^V8&2'_!9ɗ@V?>vSCyi)BvȀso_Waa!aI2F@Hvo"+n:_2kY3"7(r67(Ȏ~zxo+6^>xR)9o^6fv(N6VΙ!G?&``֎ 'i?ϙAG(ZHHvcw6z>Ǚ&fi)_(''(VHvFƘ~a9aiyK388NkFVxx +w7nVb HWɱ)!W>ov X`vO^^v a/>v3[))/)#_3gR(((v;ǟ W!9JN^fv97o^8 X_Wq!QyI"nx. /V +:)V6>Wr/G_CɿII{f"BfsH>( V^&^W9'əWOև2`h~>!g)b&HhxظhF2Ba!9iI (rHH&g^~X7')W1ٷlj7O(&(~8v֊ibiR&Rg7.):i wH(X`>.ɑ1a9Gy_6n(.(6GGWθrf H8vZAsy99 *&iRs +hvx':r2舶2&&λ:{.77)GWg.FH`hX[+9yy Irz{ +S_B+&j7S;xG)A9o7_'#fF[_VfVH(Ξ:(H +s^ !'[O!iS_N((ȘX``F&/!9 g^ggN_CS{S.r3 `@8nO!a9YW)ǗΗFsg3nIVRvNh6X i'w7חii!i2ؘh (^'_G )YI'_hֿ^GI'g*iohrpHXsf7iW7&FG+ 2'&w(V`8 gYy))ai*WךF H`Hf^W_3!i6 _GI'_>fR 8F)) Agy o8zWWrbkg)'OX `^ZNjG9iI'W9cHvf8vb^)I![Oh 3 +~rWɁ_&X XHIYwƞx8xW 'J3)*~FH( 8 3ɗ99cko +H+/[#./&v88nRK +Yyy) +'*FV( 8`.^I I'7HH(?s_ )O7ikȘ`V (IWyi?& H'wGs>!i'ǂnK#&FHxVI)?י9fvO)frxx)Yɗ^hizO+!yמbk +"h^FJF7 is^2.gr&gYi3R&&6N2h7W7 #B +'6fFg).3sc62vCۉ!ygg^;6VnR(J"v gi)))rF(o)Y ibv~fVFioY_z& >:N(R~{g7grns>B +~h8VVF)׏{hZVS?^J–6^73i)w8FHcBn&yi{G"63v(f2hR'js)S"h+&hs'W֎R>gׇZ_^V~2>((_i?:OWhSgz:^owoRO+8hFVLJYYkS7h8R3_7_rvVf3)G!RCs~))7!I^rNoOR(FBxFW'Sۇ~(vNr~^VK7ɷCS6ƈhZ˖9aIiJOr_g~h#s +Vx6J+FbkrBNg)9o^sf +kG ? Y#rV (G77+nIi?i&hfc7W)#sv((N~/'g WGG:(/{o/OC?c'7[s:V63w#.6(nV +gnG _yWHǣ)siGH^viW7O>oz + >vV&F'iwV""B6'2+ F33i.ΘƂig'wF/+~ +/y66肳h>+9xX`vgwb7/ f(6&Vָ/oA#Ono (snfFHCG'hiW/SgON7Ƕ)阸FXG)'9:a!?v`86no(9׉9Kv8f6_/W1!f):VV8 JYA7sC:/iwxf7)f wf3sIX`NJ_v&)/n~N8H8'Hָ~JJ&ٙg^h8ƂKOYaWOGΖ8`R!!!~˿&^WXkii &RG rjz3yrFw闾7r:xH:Vx_.WwIf`x柢k"A99H`FY!!1w"&r7v R[ +)I G"Xj&O^?GWG'w־?~Jz +yIff86G[y9 WX(8X0@f7W9Gb&>J FbǏw shv)fʗIknroWV W7'[o^VhZ盶n2Yy"ZH~ sg_κ&H@^8iGW!!ٹ'Gvw x3Wi!Ojذp^#c7_I/?֏)y3(V)[G6jHXv;gwiCg3_x2):(gw9{Vָ X Ƴ)WaYG!+ ?!O^f0`Xv[Ci gI+)iBfwI +&( F_)ɉWgǗhywRGiyX@ k')y9'7I8Hh(wiwRV3^I'iI?7(b7'rZ˲Za:^j.h`HFz')yGG .h ){G !'( 3))7)x8cθ)aAo/@p ^3_i oiO&8I7~+/2_ٹO^~ 8" _O9x[GwWi)yV(HV8;!) +Ww(H'(S>Yy_'GH0vJ/sWW))(;~>!)'g@X@ƸO!ח^7Gi! FfXXH^J^i_Hk[ +Zoʟ q!7r> +6`0@0(& BZ g'sK*wiiOGo H6a6hVR(G')!7')gf8H&7)sfh>j[R;/RC!I!yf +`@@v" fa((WbOY!a_G?~ذ HV&柷Ho#/FۣgwwrX8hVHX(G'Y^hvO&H>?aig  &ׇ)OBn &!y wf(`FS>2iAao&f"hh A?G'8h``R6)(3nف!iyIGXHG86~jFbnYYig Hp0XNnyn6vKwA!S3Fx8cVYFRZ'(aAYI7w)Xgjff9sH&wnF(9y)!9VXH&`WyهƏ"a#zf'bo֘ fhWRZxgWW 0H2WB9_V(XHf;wS *) i ؈ 61i>zh6v6wI!w[7ɿOgZȀȘ(rI ƆKo)!97 ֈxxFWVWGwhضS'Vn#Iyw(@o!2ohhVHx FW7a!)/'X(7'3g3n_9WwYWhh2NG^ػi+ ) 7cx(V7 iɁ!GX:H``_!J~_^V8(h()yYyWs/y)Z8H9?7_C~x`H9I97!ffzvH8f&*^n)fVvRg''7GI!&f>(XhByi闋//~(ؘ(;i!OWǶV`8(8H7OW);s^Ƙxh6 9!)Fr*+>sh.(h6_a:.v(؈6Vy wis2(8Z'9 W_w9vhxHFHh(B*7ybjhfhָ^7ɹ_7yII_+^^kORznnOwjֈ(Iw sg6hXXhf^) ^V(F/9!IgyXh(R!9ofa1AÀ6A.W(ay `PhN8'(GI)sv  Pxxw1Aay癷hI:+W+6!aAFHc@@8חw?Rw#AryȰx'!O)a!)AF8 `z@JvWq9:'` !WxˆX[Ya" H" FiS(ayF_I)(@hf Y)v@0fgng22 v `2QA-m`N@@zR!iF'"Zi(X`>omAY'0hW6_ )c97A_V Vg +GJYKi7.9>vO!WJ ZbiwYGvbpIq?R^ 縘Cw᙭)r:&@h^7iSih66k ^h Yq >@ Wnhn(aYy^v8 *n'i ^VvVZ'H V7Ɂ_I9n Z!.RVۖ9YvGS86)i#'7gSy9&ֆIyለ hh *j>zGjgh3+[Va s^_/y9Θ(F@&_#F'G7xN^ .9F g?ƞroO^Bb3GH؀V iy_W~6Jh~aWkhز^/'Ɩg.Cj^J(K3)3ry.hVhxOoYHG.7A2R`(H#I2"v'~VVvיy(Ws)oYF 2&ZCI0x&WyIyNz;~#Von&o>_@F79^6g7 Ɂ HWg9!R~I^r>^+&3c 9o@ Ȁ^y7W鳶zs !_rX@`6O)!i)?>Fvvx6WIwa(Vhw;ONx+CGɇ^8R'O9IWwwzig bGXhH_)ʉ_GFVV"?'gnRi7Y)(h8,`X֟ci !N6x^vGII9cOhv_'.r9?)8`fFWaif)f;;Gn8 8Nij^^Vx&3#cG39_H&)))CaYiG(xF_^7WiW96(6~z#C!Ich8 vV_'O~iǹ9w^XH3_) WK "F66hXhH^&*gW aAYw&xHڊ'J'Wiy _*xxHNoyaYNhXHV9!A28 Hv(f[Kn^燙wF B7I9W{kvV("hf:W9S6hhV>踖hhgYaYƈh&h6.7)ZcW>(V&F^?Y!i(ffF8VV iy)hH6ڃ2ۇ.{7 (h&2r^')99:FHF(hsZ&Bvz1AW8HovR^(nzWi)W*R斞?WG{66(j?6xx8ia93kX2H ȳiy ?^x8(f.v;{[)ILJK7_s^V(ֆvsA/Bf8Ff6ȈVsA~f(^fζF6?)IGGn'VG997G?žs&~~9!Yv^~#8ʎ)[J[((^ח c.6g's_j6ȸVR'W9WWJ6nohsS9)Wg>s2V^[Nj22V#_y7Hh&n&F.ǿ) 'N~.^ϚrnoJFV&zz9)W[VFKg2&(6vV~'.2sow3:fvfs?2&3n*c>gGwbRC)_/oj&vfogw^^&2y iG ;nFvF(֖I)y)?;For/~vzC((89gn~r +'_v{F#~n^"S Ǻ(F+7Kb^8hVb7C㶞66J'/wFVf_/^KǷw''Wgh((V^"y!~6*w'*h^(v)W +VhVRw)g:_*~JhVۏ'gfk3sɷ/^6.'iV'RRWy[((zhxHf'7!Kׇ{gβZaI*Bx@HXH_ i w +&֘6f61ׇ9Wj'0x.6JNk^Ffa)>8r뷗/o)W_>)y6vV؀ kiF 6^o'Sokv1)S hFFכ. Gio(^h*:Oiw )cVB(x?Fb/CG;3;O! rVsV8>b&WOSW/fc/fϹY'ISF8;ƈhXfFkwo csK9#ffB踶fhhKW)/ƋRχJF7WW 8hfHH"F[Rg>66zir;w.6H`rZ_'7G)R"WH(9陲vFhH(J2_Gg7oY 7_n^&H('[3^n_.3(WB˿ i)..fC>s.cN7iW)I)VHxS.)i sx((ϋvW9Wr^h( /盿 S:3 c(R'7W&vkzn&bۉ 'gJ8")S&NǗGo#hzNFV(2nw"B6&nOh ^N)iaai 8h `Ξ2_73'))Gw r +8r7! o 8x_k7)W)7/ 2gIi_N*눈FhS^S/6û&NgORoi I/Z:;~^(f>(V{j^Wz 9A^HVv (&'IiFffxhJo(I9?kXHh(Sg +z'#:3yy銶H(^_)I'b(h`臿{?sʺo3HɞvKBIa*>SVfrV)f((((iIh)yo7n')aȆF(&hxv2)yigGwG i!>^Vv{ΎJG9IR`bSF^wg!AʂgFh`XvWW +;Hx(KgÉa/J(HˎVO7ö()so.i_N.:K26v^ >6KW>x(f_g!YGJf'JOn;+(~ r/هnX88hS7˹yX`؈(Hn遱Wy8v6hVWYi#67G6~VNAYןOnbc7Wbvo^R_!G'g[H(S^Rfzv鷎ֈ^3>?7OoiAaIo &>Æj7'_i(N8Hhf/._io.v +vf*2(vf~B&h6v6Z(!_KSX(&RFljg&7IOn.b.(H&F&G9 YIGsnfȞ&ظb^>VhR!Y7>fO7wR&GfVhFh8hr1A!Iv~c#NNvV .Fh82(6W!y9wFhʞ6z+ +WGOHhvx9I!IiihK&HvjvF"os/gf^r~NOǙYWW# +&.N/g6G boR(8FOWIaYٹwR:82#:s[ +^8fnC;shכ VVBrF 68(X8?9! iIiΆ(F^踖"HVN痏NVVh!WI w9WZ6(OrffCFhi Gii9"2R2?>.ڇ۲F(/ȈhSɹYwI7&V8_?I!Ic)h8x8Ny!a6FKf8vzORֆG?s˶&( HiI!yfFHHh&^:Nr^Vh&3'/wkOn^vCg*nG{rVN^~^ƶ2i )))wH&&b JiI)7O.rH7IY7:^^HF^^K'S:r{˲چf~I9!a (8hV*G7g7vƲz*)wi7WN&vF2Zz^b.V(y!jH6V>~'w"wSWwF6>Zƈvח3G)Ww>(8h~o~vbj?7WW3^[V()iW9IwGnVVV6nV #99F8(R^ifz>f((>2RfNJ_)I YB(8'2z>WYNh88(?i7WɹG H8`GIWXhXhW!9 '/__) wOG:n(nן;_~6';OBvF8f(Ȁn>^g9o)gVH2_7aSiI 'hfn{oy)+G![OfRG?[^V^C_Xl 0X@6..xX`h0NNׁa!9Y!-q1--A!ɇN(CǎF2Y FVx((6Vz_7 g77H^ +fRF˗˘ hVfWiC薸 (7ii_{^x@hHvi י!a{8VHFǹyi_IiIG( `8V&nGɗ__3 )(^G_ +3g?_93`h&CZsJFVW9g W>8fhnN.2/jV(vȸS?oi91y)sX0`" #_9Zh0(>)iyׁyW7Xx`8>Gori WIo W)lj )8HVvȈh(Y6χW^V3^NF&#OWwW)^HFg_RnCiYW'Y)H `FN667'&8(ǷŸI9iiwXV'7)ɻvJ!) yigNf X>si)s_H^ƾB/g_w)RHV(vsyii WOfh X _G?'_&xhj6s?giy yW^X6X(J:o) GBc8Xzgi9I!!iw_&8X R7 SV(8 VRWi(8HxF s;ZHCGc?'_G3oXֲ +R )y7oj((J#s_יWR6V;gIaiy9i6VV&(V&bi:f6 XVf? Yw &`趾_6SG)iGwg(F^/O^&>s' B2/SVhfsNo79OO^VO7_W6V(KONa!yv(.gg)wwOcۏxֈ(ZCgiii)iFVH/){Z +O)HX67'&z&7W"J7Ǝz3OfGvXG3w)G&&K_c&;ƎS +F(8^rvǟH)I7R*rWgVh*K۹ohF~ +( +Y977)'6F(g6H[NjF#8H7WIw )9N/玸8?ii`'NYaYr{(f׷^7i)sH&kgHCG9I7VSo/g3hh S B{)VHhi{!& w2ayF#ȈfvhhƟR!FZOYA~+gG&@P _zny~H 8!H.BƣCoHN_N.i_^r8GfHWY_ڈ R#JGi'w#F6_Saafnȸ +~f Wz'n9.f7#V3h9Z* +I((h&ɱg;hǶظviGoF[wO?&s_.WG/k:wOF2*F_V(x&HR_b3w'/FxSH(_H'˟3vRi)sn"hi׾I#6&>hx^&&WG w?o^&h6._h6k)׏fO`8^jWw7viW_hƟ+ωkgj>h ǂ9 W?g[_#??2N(k?WK?orbVx(Co)W'g7BƎhbN(vn׻iNnz&Ξ )V(wRc&(o8B_g~IyBh^J:[c/F8`X'(SIo 9_#I x"^:.{_? KX^)G3?sJF?if~O+&6` _ :jF3Jw;^~RS_Jx(V*.*fGY.&;ډr y7)R@^C#yYf!9Vh/g&x([3[.r&V()ϞSgW )Nh^g?cG闖OGRRFnfGIaw)ǏSC@HVoꛚ'y(3~(9SH#O7*nv7@Vjsk2{Yێ3'g׊'iYWvxhh W)i y aI@H>2WaY(6VV._>ʗaYYw^6R(8ii2v.) h(bWo;ZZS#ɁѭA7"( 8`VF(ǁxnc.Ky[hy!X`fζf[i!'fI!lj!qqqY Y a!YY9;I鉙a[''v s~g:^R>+SKi6nXHR@Xf/+HX`@ x8fj_7yz a9AgwiWyA'ICZGiI7gfK> +G9!?kXh8` ( +GLJF)!fvh(R i KffhOiWv&7vov^_GI?S2R^/(V(;s^bSa 'x^^R_/'9R?_"GW9oFvx^"HV[ Ig8^Vf>3nf;'7+Jc;/o2&V&(J!Wrfo;/7~hV^JFɁyVxX_w?NJ')'wW9w'O^V> s.((F68'9iiwV(b.f:Wo"G ׷{wrK(xȖS7^v^iGgڿ)W[_N(XxhWn^_ij)sv(;;og h~('gy! {6j'Gsjnʏ燗7r&&xFCOwIs~[/[ I I^8H^R斸 +[!s{6FvfF6S(vNOg9yw3B*bVvgo'S^R'w'Vֈh(^'ǚg?'gsvə Rnb#68"3/N^nBc׉!^3bnN^cr(h'OJoonR_'3'7gn(HH((2_C3{k:N )'nJ&FN&"2&(sGO))ۂ~Jx^v&c6s7OoR2H&H^cGb_ygKgW8Hv8ƈ&~gNj)G*)G(.9'6(f'&Cǁ1!X gN8')n aW+hX(/_)WzYa! r^J^J>&h H ~)7o >&f  Ww?rv&w#nH`6+LJS^NiwɁYV&zF^xvco/'?oO78(fWwg!AI)j&^~{Rx6:I/_H; 9vg 6/7ǷNV` ֊gə;r2AaWfXCHo oJ~WahHWii)'V7y!ZjHx_GW3H ^_ y'h& +)g&2FSyrxֿ3/xxv!'ώvvG97(XHF_RVHb ח#8r[hhWWh/r !kvHni_V(i?H +SɟWf73[^H( +8HFIJy"hx#Sr[ggCZ.nF6~_'7*_G˿VG9iGXniO +&jns ;r^'?~crh8({ k)NFvF7f))*&VF{;KVV +'sS:.[IIw/knzsָ(&gVVk.'w _gcJh:SfH.377wW2w &HXx?r֎iGOZ(V/_/?oւ3))_g_7ɟc'Of_ɉ7'&Vv'6^&~Fv#I)#nV6^vFikW ) ?vNrSNʗ/rNHF>3_ci^KKr3WW WhVR:rhh^r{ObKjOWiGiNV^6fo37s;7'hFbjrc2ˇ;3;G >^O_O?k_ +K&FNG'+*7ʟi!(h6&6Bk(VNOs77iiDz>n‹(Ȗz;/#"F+Y 3hƞ{o+[F.y^J2So#>s7ٗ ىIi9yya_>&F>oB&g{r^?SnN9skv?;onjzo'RiKWWag(@[VI7) ^7))_H')i3I'h_Y yA--9)0(vOSG&f)FfYWg V)Y y3vX ya)yɁiphy3x@@9IIIG&wVsX"!NNv!a`pH{ +h H_!^j99i(x舀hI!!2^OY7!V`p@&? ^_ gBH w!w_&NIzb@O!7^3q1y!)` B7H/!YV8`h37I 6  )/.waY0(v _"H7oxXiyi^xZWHCfˆ8`8ZG!y!i p`8/gV)^FIOX6wf_>>VH0@ !aO W)aA&0VVgY'^)VK)GW8I98RNinจ&W)I^C _o)сWK@xrY7S('vhV7awK6SfI97/Yp( NG_hOgHh.hWKn8Zoǿ_*7_9!!9`H .)/G־&. f7j^hK7vX~)!)?iW*w! hx`+! W) _r^ V8ˉ')i[/si2&iONgYi_6ß G o/xH  GJv&kz&^6iG_a) +h @rw'ǹ7RZ3r`;iLJ!Nγ(^F8IjSLJIy'(@'w#YG_GHXySnxVnƣF^3fng* +GYWhV`Iى&&G&H_ə7IfC&(VcOWZ7 /fVXhkWi9 GGWzvVx`Xs'WVVNk2o#I3wiW'^H X)i)R(H6 ))IIo^ێ3&fi7'G7fg ׇ[f8 37)!Y gx8Cϗ Fgr6LJ.K' !rfCo)7N*Vh`67I) hJIY8(lja88Hy92Ɛ0ȇ)VV3YihP0*aqH NI'v.9aInyi6@ GhhfJϾ(8 (vhgIIKV)g)IH^牉)F~j)~FbS/{?(XRryȈ 7K(X~b iv~WaYhXV!@ h_h8A#`F?W)#H(7!9&V&9)^X IAWrbh:Yyx`z)rxviI9+o3ṺhHG 6Ϸ +xh&VxhO6GvVWIWgZGYɟ:ovHC(X v3I&6yv.7iWvxfVF^x !g6forb6/gsCHfI)3)7׷gKN((gyy9S>8H&Ãf*C')))_FzCjVV/G +v.'/FBf'7Ii3fs'6VWwJffKWiZF[^+)WnB'W_rhx8VFIgNN)/>Vwz& +: +F'ׇ7n>G337+.HV^Wof(h_jhVR/9OvvWfHf(fiח7n7?/V>/[O'3VvNg{^v>7io2?'3rWwχs?Gw~"Zo..Wi>6g_gW?xV(jrfR#wW/27IWv&/3'n2vr+"j>Z2^v*?Sw'Oۖ>{׊FV#Gi'[Bfʚ>Fvc?׹2'C~h8hfƶ.NnOi憎O n(x#)_bnv"[&+#3c)2FHv*W>~o/rfں)vhV2OﳛڳÏwWg?Wi;^hVs'Ͽ&j:WII~V^b +[~B^.FN)~V2n3" #GJ.zSvR~~r.;)G/g'*FrS' HfY ChN&rW( &fȞj>澊^ cR; Rj>s6^"^)Ɇ(/8y78'FyׁOn~(xHG)GfƋȆ  +Bh8pHvW)i"')8Py!9iXXW!!"vO/nywI)Z+H8o9ay +X~hXIyY9'@`)əSz9n .9iξ97`@21y3FX VNoٙC؀0 vBYAOW׉xiigȿ_ض aao:G`xV{Y!i.XCIǁFHXggg g>H0ʗCj){``·yYyG`@hY1W f _Y!' +h``h7!s+ g8*ayog 3(xX!Wڿ's^ذx ^RIIF(x (h)Iwi'oXj1a7oG7  `_)a?*3^`yi''7(Ȁ6)9ٙiWW'` @Wi_i_s x(f' !SW).v`ֶ'yjo?oؘV>yyiiwS8HF* )_ ɟ8@HG !i/i@V'I9'Wch(8)gnVN7yW7)'X 86c{BgwRxXVViiYGgxhw)Wg99sh(W9WI_`(byYiGGs)S( H> 7)S( iII)gF )s7)(XiO7w(x8oiG V Xhɷ)9I W+ `FnO S^x`v )yWgnظ&?WW) )[r JljIwwȸ_7_)'gw_FH&+WjFrg)i/GVxxf?7I )83W)SB: 9 XHvW1a1:6HhAq8)Sn{#9 3`fOiWI Wh(v_I &^67S/hFRnbRfn)i (_G+&GWs`X6sIyy)K&((ǙI9)8HVf6."jo9iyWfX& HvyY!rV 7GV?8 IYYi:.>c/nbWW)H~rƆ^gw9g϶~wO(sw N6hYW>{gv)! ǂf;bsf~3iiɉw[(``w))?vB_7 6 F'&V'iW(I/6_NH +GG7#f>G&OWw6f +W^[ig(N/bvfȈbzw.&7F& C^6ZʟWW(&ϣ[_wIָ xrwiRrs3fFk_W?{og?fr sc6(+O' KVvri7O(hVbsG';Cֶ6gw^66fF&"r2n_ 'vRG7&K'sS>/_G^F +#.b_7"'3[Ff^2s_'gnO?R^n/'GnvSFR'b66nw_J~2oOo{&fOG'K^2#oK 2_N((hV^_W##Rc2+:fNj?crF~3'z.cjΎs~^:??j[/rrG'RhF΂sG2";?'V&k(VڿS_s&Ks'c>Rj'Rw3bCWwS ~Vֆ΂_[o:6NJ*KZJJ +BnR./: SC&fn"[66j'G{~^2_GO3N^^&OczN:sC.rfCGG3Û?s"Fffcz22&_'s"rSGOʆF澚 [>k/oSoƶo"6rN_G)_?g'KKJ.r^&R3K:ˋof.?BB''HF^.')W97zBNhHR28i'fVF)aP@v2yWg_Kh8xHiaw.xih Ɨ w'wr"R9.xpȇIq؀(ic`sGkKc9W^H h(F1_I9!?hv6gh WhoirAO,y [XyYg'Ǹ0P N6yyO'!_w:~6^8j3v)si7i7H[!r &NiV )i311Hxx>Wh!s_ay'@V'( f1IYG()I `&Bkȋ!G(JaI"oI2`~6Vyfr`H戶!AYw&(wG^^h(O y_h#^(!!C3Vc_6ֆ{G^ɱ~&蘰Wr/1Y88؀H薂1h6nr^H((ֶnAi?F_`vh)YϏayZb0CO2^&Aoxn#f8@XFZg!ƊvgF>ƟiXXNhHFVkX#.X(J_Cᱹע 8RrX!I:'2vh:8H.ih)oFHH@'ɉ_aYOh6Ȗ7/ f3&H@_i'G:KFRIى3Vs7(NX"w!YSV'aAggƖ//Hbfhi!W>8חȆ.XbV9"hxiwo!6>8oGIIfHJ8!Ii)>8 ri'J&s&f`^?AYG)r^>f^8X iϗRgxF.gOog) a)r(V(? Gy[ghHVfVaiW_^r_cJj(x)?))S B'XvO?OI)K. vFVȶF)_f^8fJf9yW[[Z:; +7{Gi&Hnf:jWfi__VvhRy hJ89/^ǟ_Hv+{/^[3IwV68J~fG֘K˷wG6z)6kHFy9?Hyhh'/~x_iGVhr7J_);( +"_W_Ⱥ;g G?ƾh'+cGS&Ȃrjo&2wg/n^fˉ'8VϗWfK3wsw#FhhWǿֶg^`_I'ⳞGgZs(ghW6(W+'G)Zgy!"V?&H)V.;i'/(3IWVc7_vhXWWϢJV8 (ωaYgFVS +>FHWS; +rG{V8Ȟ 9?/rF^)7WZ8)?7i[r(Xkgˇs7'6N)GKg''_/k.g'&NϟWÛvh)'o?ii7VV2?gSN)G^?G?JWgSf68^㇣NW WJvȖr_g{ /iW +fF֖^sBbcWɉ^(BKoJJ3wɉ'C8Ns2rw)6V&.KO.&2[.hȈ>;R.kOG)i9'FHhhF'o&'IIBȈhF?>gW7ۆBz^w)Ǟ8h(z>nfv;)ijf+'r/G7)8(bO>sw_~6(n۳/N&W)#F(N:Nꎟ'_7(hB#'g)WFh8֊c ^6N>Z'wIsnf~bۃB>GWw^ffb'7)&V2f^W I)'hB&Vf*c'Wv&.*>2g)IO(&BvbK3'WFF.+:C_sN2OB^sW7fN>&(hV~b7 i 9)_f(ʎ_{k2^ i)'cO{F&F?)II))gFV>26S_999 6j61"'FHXh_I; h8Vwi?IwVh 1&F+)76N*^H(j'yW#kOJFF6OǞRϙy 0p()ۏ7 )Zh>^/RJ( Η91)I8և游x _a)RW8^F2I78Frz97IxV~KWȖ/k(h>(Z11a(^& zWOIqQg^hȚxv^Yyi)'Nhf`BYa19(˳('^^I(γz)o'O(( !9woSK(Vhhaa@H8v熾b! FR#&>8Y!A^XVvXV.'1wX~VF 8ǂIS{oygXv A'RHxFny!X>~sS(~g[)ٹKCX_2xHfYAyfV昀X"W7!1S'_XF@V/_[IgiiVi7NXFF9YaIgjxs?yj_:)Vh2ggBz(V_NX&Nwio&VXv))!/N*fV8HZI WO7)`xȘHY)IÈ6iHvvggΘ"fOi~zF_b.)gZx8x9Fُg #戺!nO.hV&x IINh[vW/JO88XXkǙW'w&^~>RG^{n_ v8" n_iW'wrjhZkYorg)V֘'N&yCW8H&FNSG9ɿhR!B/wf8s{;s矇Ȇs?9a #ohkkWf(VOh^73'JB*!)rVhhF6ȶ~o_JvXk'[.VF93?8gvwi؈(hgIWI(h跉GVx鉙IZf_)[3(jɹWi3ng_RhȸȘW!WO&'7CR6R'.wn+Y)2`V/Gg29.>^' y/o/dzK6.*;o:i^HHXX&gcyg~ȘfSWʖVZ))/x3go{_Fw aw( XH>3gGk"wII;ZH.I;Ύv(ϗ9ێhRCn2)>^x`{s'sbۣ?IbVȸ(GgΖ(R7WIY N>f(&Gɹi +6hؘ~[K;W i7&v(·)z>H8w7yg?6"fB^(i 'VHFRS/ONVG))77:^'j"h*!Ww+662v6&(&O9)gBHo[//67GwW'kK/)'nƈ 2')I)'2f&>FVVrzWI9Iǿ66c'RfNw?/??o2.62r>HJoO"RfVhVWWKζVR~2' wCc'*_.vJS3û겶V((w)2"{nfv6>Js/W_>r +/>^>.ɷgzSv&Z:go2^7ORfVK7׷)7sh(&3S's^^R^~&23nnG wiv^OsoSGCH G)Is +vooK+^voG_^(fvr_g (Vhh^kk^B+/Zf>σS_Z6^;GjC+.RNWii2(^7KGϟJ6fƆ&˟. +b'g.&fN3S:WwF SR^f^fKGKfnjfzo:W)Ͼ^&²r&" +_7{^.ng^F&))ښs^ff i/fF6Ƌ#cOgg_?bv>_ 7 kSO~.KζFFf/9w nFv6^f.//^FFG?J[&/s'  +.fFBG)WN.;"3OS'/rr.fnfr. 'ZKOGvs)Rggk'&i'VH'/.g?Ihv^y_OjW?spbW V +&iifh6b>^jg)7#NRWyW&XF 8h#zW>g's2`֗i9NfFWgֶvNj^fR(HHYh6(&ɁO/VN3Gg7G@i iIVֈhY?'hV~Fﷇx.?9Akf(X _/iiGi'RnZj'~vp8O YW(njRi^^ȋCx`XƉ WOF(hXIg)[f(kΞ'~i _GYajHO__CfC7)wsbv.Vrgy!yˣNp 7+h_vj_">ǻ_&O p0(?9 )^'o9?8 &:6{+RNH7)YY)+ZǸ3IIz6(>fg /癙s?( S?Oi/.)I'R&i)r2>R_WK'O3iys)K˟[W'h 6+s/ٻ/6^zY2)'^o؀&^W_foG/z6f׉A6b!~Iw^idzڸ^^fʻ_jrnh +_IW(8K)GRw˻w6FwFX si)yGWo3..sO~_'YfH^6yVNk&#營*:wyg0(HH"gƺg~HB>+6HB{S ysXf6v>_ +J3^z˳W;vw_h6&gyh؈hhO!F~"#>nZGcFV&7OV&.㹿™if (8ng kN׉)r6g>XCi)~'in(Js)f!i^Hnv^).[Of +'s#/&_a8(HGRkI)HrƊ))6&^ob(&VNoZW׎Nθoz H?jNoZFV6)?):SFg)فZJxf9W/6((qy>~HVy!w.(fJn(i/*)g6(Xh6976??Z狶v·i'^^KWi?/Ȟλ{&::.:F&'G(>b~6z+#CoBC'^3 sF6k'g/o^&vN +_w7_W!Y.x((._Ryv(6Ɩ(&'WiW7g{cghXȲ')g{O)bx`YGR&OGIY7JH*gw&^‡g7jxhViSNs? +si9Bf/ +jOgv^;7iV6gX/WWCKoKYiƆz83+Fn? WgF8H~ii_So[c.7j83W7w7~~.[o[.(sO'OʻiXX*ηc7WW7n6>Vv&N./9Y:Bg+rNV27'3& z/>(FSrs;h87sG_Ggb[)g6Z/soC2h[ +?/.R +o[WV[_wg*Xf+2r W''rkJ6NV'is3Kr;2{rff.g۞>gvVvB[Sj~G_Ocn^2*77~f־'BF6^K'g3'RZJG/s'sJshHSSKGc +iwS'2FƖN^>:sgW/_(:^'JW. Z[S'/r:nn&/:R&N~')Wf ?_*s#oϚ'.:{Rf2 +NR;/_GgW3.{N~F" +Nzkg׏3[)f6^VZ)n:"~~{S/ff^)G&h6/燇G#b.r jh~>OwBrg_+6F6>?k?G'.k3 +vƞFs9W?k +&V想)i .6vf*&F"Î +o3?*z>oiW'*^FϷ7sJK/_Oc.3"{SsF֞7W_2~v?7ko. +j.R.3Ngii+6~+'bno_co[{.z2_)7in~fFjgjΆ^.oS?Άk_7Ƿ/fvRj3#z_g_.'3 ^V&&vh>7gFƎzW)>f6HjK::#>^3of(.~kG~>FGb88^w W6hIi(`)w* n +:^V A)6v9 ~pXxh!ቹWb_JH*{(~WW !s+iƸ)g8`99Wfr*S2@83F;9 Nf^W ^3v83y77o_vv HbY!2sw?wYx 'ڞ>f':ziy{Ovi&(C78f)ɖ gaw~.n:  rJ6V>>9978O7!'FNh8 Yab)rzay&38曷)W3woHk'2F FO>x3.i!V&VHyi!I6Hfƹ&i9F~hg~ !Ȣ>3V.>KGO_vO_ YȆWɉh6hJ_ORZ!G '6h&Vh&v()O +ǗaAg2fx KIb[ڣ Y'((7^)!Hc8F gY( FnfiֹOOhH&>[bYzS_h(G&&GY'nG9ISfX>B3(oN^!gsY'O8vi&zh:I?J)WjOj + vj)NiZG. 7Ƿ)i iǘnSSF~v(!y)y>Ffh*x(f~W_#&9W_'_^Ȋ&VnO6oi''7_W(H_23O7z* 3VvV`8~_Wa_fkžV H6F.G!I)~(hf>f&ظ)2WjjiY7>H.{;3v I J'nrcHvn)NV)k'__{h V!#3/CCV(`h_v"GG?&HV ff^!Vv&#win6(g7O> 9iG9_^~Vy{/)?wOxXh6r7O/~;)K;oii!gz&H^X>:g:O?_XV^&!H 2J^N{fn'SiF9Ɔ((κւ79!CvRȆIY1C;gGiy^v `6;yxxR;aqQyƿ(^ h&yGHAHn?^)W3VkwzBFF:dž^NϙOw&hHv&!IWc&^'#F(ذ >gGF"AaJg~jֈVr Hf'7rv)&kZZvWi[jNHNg قR hG+8y"H^yR[8X 2Sbc^Aw^ο(cyvVZiY2vH66GRFH7/rgF' WoHZ 7">2J?G6vN(Yɟ"o"Z~Hv(h+i/(N)YW"vR.626FvVf~I!aY)>Ȳ nnff(#?F)n vCnf +7ch)) yvBObX+2Si9i)i9 ×"&Sc&h6+Fh2IYWaOBHh^b^~?*?n3_VNfj·W Z#rF6?7__ S3rs~V6gFvRi WiKwo'&O^v^xOG_IGSF3&{SO_'?nB+)GgKNjfHGGgkffvָHgƾ~SC_ wwrNk7?&k_>z6ohƚziWI'Cϗ(z.7OF6?onvgw&fZ)) +w'/k(ˎg[ ʷ?_C(vv>OVh_)Ib2nj&s.V6ǃg9&3wZnVKg?;:>)[h¾"GzJR.#N;R2s' 鳻7o'(HR> +hRS7s^gV>ffFkSijS+.*frk>j^*c~k*nNoR6g7g?6(:/{c>_?_'WOgsbBkj.~Rf_SW)>κǏ[r6^6f>/I7k?{(rʛ's8nv 3_s:GWiOǖ;RrF6ׇk&NVNf/3Vf2j)!iZ~ng+R b([nJ+~^vVg_~ F8~_VyGrFaF6Y7F 6h)aWC(`.`w73`)V1H!!a3fxk hV!kXi9a khhxX !##~V!1a(aG֘hH a^H&'#B`Vv 7k!_F(y8F!6AN Hw^H![h8697v00H `y qG;VN(wInY!x g >&wIXa 3xW.x+yzVh)yIxC׿ YaYIH`ygFWIVVH(Wy!ٗh`2Wg@YwKV( Sh`(θI*Fyi7V^ɉgWsXɇzV?7)/Ij/I&@) cw/!I)_f8w!arHVsO_r8)Gh'?`)_SCV(ֆ//&g +VƇWgX'iWnx'O _VWȈ7yGBCVzFSz r)GS8)6#(>)[NVO韃G_(H.{SgRc6"&6FoGiG W'^__~9 _>s)7_WiRcoƖs^Hj暺 wOGS2b*K W'n({R;#sO/OnV'&6h2_BHRiO/.V{?.2營gZ.i'2B_gzG 9onJJS3&rvo"f.RG/ʶiWWFc~Rs?' +r gR()cSN>fF3rn +s"sV;B.Kֆ#)oROoSNVVNsû(^O''{?9'hhbbJ^K/{K'V~S/vnV.^3C>o6b)77;F{{W)GZ SC.xJ{{vx˾.N7 +R79GgF?_۾^B#'OjgRNf^f7w7gG& S[6{^ '~O_(vN&>>BjFnI[29w&V~S>rǗƲS3G&VhGkgZ&nڣ+77WIw2f7gHh:)N&&IGr_2hxw_^8IWWz6IV(Ɵlj(nB&OWɻf^IRVVG_bfFV^fWN'II 7*(r")&ϷI GI! xh7H;W?^׉VB7w2vgIɿ) +Ȳ_''_RBK Wnj^ +H~Wsb37 G+27˲[g_. 3Rc8vβ6(N;vCwoVfW_#ffn7)7bFW.LJ)'薞ƈV.ss7I_" OoO&^sF6)Yyv;׷^F2o#f3G(''&n'ƆJ)CV +O^G'g__I['VF^BN^GwG_~)W)hss'?fhֺ__ FSJ3bV +~fF'H~w99kf?G' GʶWW~nɉ6v~;O(hVF.)Wڇ)o3RV^s#o>rOW7{.fVr_(Vfz7/RR~V''^ +Zz*IBN2G)Rh6/W)'&'o>n:" )gN^wffnoR.bs#_'n>F(bG(F^rW ;S'"fR({:W7WGs'WiHWgn&?i gb+~趚_)" ?F&&.G{wG7bVFrvro/_wgO?&rF^(23g _OoBֻRogw/'GG#.66N&>f#Go'?S[rh ~^r~kBow+f&^/#돏Ǘw*6&nn^^B/sCs_ǟg?>Vvw7S^FVf"7wo+V&h"R>S_O33~G랢r+B ;bSF"{VVbVNW`3v*88&'yFi(ȣ+#z뉉2&(('·HȸhO~i)ٹvx؟7ih(7i渘G?i)V v'GBfF8)s!GSkiA8)IwJx 3N8wG'I92(X(Ǝwɉ v^gI+2I)VWfV^^`hiɹ( h !JH7)ifJ&kj+{ 73C#(.wHHWIWV:wf^RFhٙn7 &2&@8Ͽay(HK +.hW?(3w.9w_(2nn7:f_)HGWh6vhyA~^V 'wv&&fX.o_iigksk()ZSffV?nVc)gF_o(Jky!iωF w; B;NV6GJ&g'VfCia韾h&H6sw.{H GYIa?'S(XV^gwW~^v膂'/RJR~ξ~h9CNƟ'?f6oJfn'(HviYS'i> IH(.G3)W狶HhVfF:IIgC2VRS_!f:&SRs(rGx^wy((H`ry9OBVH(vgi.K_R>7ioXH؈Y9C>+'f +[GIa'{')fH&(ΉYw'_>؎I7vvfw 9 _W cn[I)6HH_vÇ(Vs cvGVG)I&HF#z2IJr&^xxGK.h X>GiJn?hO'hI)Ww{?wKW WK(hfhF)_HFBs +^v2B7)sw7J g_.HH~CH2N_6Rg)aayW&fs:h:C +GB(xfHFV_Iy)cO.'^j;k i7z68ω+Fr_)_B^&XHR)y'h&&'FHO;I)wVbs>RFsS +V((F&)^趞h>8wIa!g +Rz{z6:/o)Wh@`K6GYaZr#g w(gY'@Yy) W7J*YiHHF~nyn8f_k3gH?9!WIn^J*i SB)Ș"&—isxx&&ÞGI7i!A!K(+'#'s6h(8V3CfgI i kxj"{VV{_'"(HX2_W'ׇIaz^HXxn#S's?h8_#/W i'SrW鉷 H +s?&h.fgBX@w_I OAGiBvx008ظS^>)y9Wg)7(V7_8()IGVXXhs'icYa _2FF +_OR' nh(r[^fV'NZYI'W__VH(Z'RHv b`#w)7'" W{'w_Sbz.~&(XFv^'g IaW))99j>H8sS.*V&g'#f.`(;?;o?a9ObC?OnFn>v8Nk~&V&#?wI!W_'wIfhF))r.8F2*j.8xƾkiWrGI )7SNxNx(^V)yiyG/&VhrW'n8V>OF8JCGI;'w{ϟ3IoF澆2.(v3K?2v( +OgI9i7s?+.3Gg?C[^V6>֎r(F(&f7'//' G"7 w 9n6j6Ξx8(_I!yyYIiWG>(v";rg.v(>f'(fKws3gOGf3go^^rr6N+&>ns(h8.g!_{ &&^rwzV6kFRfw3s[[ ʺ7g_W R^F^V;b8(H6[W9yY!I)n>">oN‡GWN/&VFo''n#_O.zJ'JC_#*6&("G~f&ΈfFbK{ɹ gG+6F6&.2WRR +fcÿ &NKk۲G/>gs' s?_&f^23JnvFhb.wG!I!2r&*g'3*c'3^ƶ^Z[[rf73 +";)gΞ7Kf6&6)Wggs(۷ϋNjiY)_w~F'iW~_[?(nZ& ^k>NC>&C'J((N_zR*؈(6FfB&i!)s_/gSJ&n[7^8NsvOG_gfhO_o(‡9'S(BzgwG) /`H>K7c(>ΏGo^ƺ3~^?3gGFhh7GS^:76(V(V&v^/Wɹɉ*HwgS2W?rr.B6v +SYwHV3C?3#+(Z'wWG_h(v>~rf2KwVFCO'zH^#gsi{3G?h>oGɉ'FȈsS?7's&j#gz;gr>kζhZ ?)ƶnc;26h^3SZ"{O˟'rv(wVhswNv+'_"kfVZ_GF6)z(N΃_zfvvswS^n*wBBf2/_IHx?_ N{s3/J'r_G)G>f>./或f6VcOW7s Kr_2ffnjg)yVgV>?Zh)^7)IIjBR[oֆf)B^Wii/j2 +3c?hSgKoNFV2zj&Nz GrRZr3_7 +۲ +6VnVB'wg3Z Gob*'_go{f&zG7b&z>ŽRFʞ +c7I/o)_/_oS3bV&+>֖ں㟋z'G'_''" 63&>rZr6^.~{"J?jG_&KJ{OgCsË.hhv6F(f>Kg[Zχ?W矷gR2#6/;FFƶ3WswN"S_7wWG['g? +kr&(nfhֈ7wW.f_w"zNRsN.K#&iiG77V>g iGko#[C7g*HO*VƸ gwgWgϋ7#WGz;&_Ƹ8VRS_z/+fbo[7lj_fooŸ i*涖'68HV66>#gf +v#wg)C&o7)_orK^.nVfN#gW>W_g_Jf~NroFvHhvow[7j_ϲo;6F8N +6;/o'g wrNi B&:βkrhv(^^VfOc2oJ~ ׇ_nj+wIii_sV舊 FHVֆ?O׹w(bSwS׿7GW_.^(:fv֘x8h'gIfr7)[_ wW?_"/hxHFV2o"*w)C#k.˚ZGW9!GZZ3gJ"^V((>B*{Gyi ORKWJr>(HVV22#g#&s'bWC_i)JO#J6*[Vh6Cg .sg'ח_33;* 'FVxF&nV B.b_"r'j 9ɉgO_ W/Rr>{fvhh(*c7Zjf6s?Iw_S{W'b2n^F(HbFr'kcr׷?)Ok"_g?i7 +^θV(& +.'cS[?/_Wg?hvK?Cvvs[&6#k7_G^^'G燇)~JSR:ƆFHhRK':S^rWGgg_2cg/vB6澛o?C3涶f/[_/*nj'nn"2gg^vfR>rr>*ZZ3Ϛo* _~"^>r 2fnNʣO7k.__/K~fkB3Oc_/f֞S>+.oO/S'/'_Znf/gK..^KsO ?S^^.#"&*Sg7_[kRn##s +#zj:Z;zbs;b:z *j:bC;S/j;ˣFFFrgO[k^:^6ROg/SSHV;g>.F&O/GJwN7O*_rvFK韶hnK(OWiR* )S7O_3~ڃ_s^hsw3?Y7&Ƈ_3'(&csgr^VNȘVnGVΛ6NJwOJyן )>*V`Gb?GfVhg۷v6.;G>*G{_BF&n'ji>o(V7 +92FȸHHn.:w_z&FHOfy!![hƘS鎎rH&>6{g?JV'fIWs_2fɊ'&(gsfVy_cs/k[&ڇ#Zֳ.VG[(xGIiwnb_cW/v&?_>FnwW"rȞJs_?6辎^OjsVI9Ww~*j@XVZO)I )"f3y9Gb7~__(7öfB[7r&#.J('Gg ۺX)iw;KX8GNx(o'OO;w(HxB_i*2{{>fOC>i iחo(vX Hs/7wəǢoY)z2NV;J2VFw.vCvwI:"n8hgv{ 7z{ƊvSrj9y{b˂hvRj6~^?7):f +H0 f H2WY))^*N6NCWW_WgGG[)^cx`'j'r^f[g/&sW)_OOVf~)IFNF``7Z".招hh(>&_'i9W_')F{O^IG'fHX@ X8/Ic>x.7g?'WoG^h6V+ʗǃω^~:3&)WW_C_2Vi!an>#f{Br+n2?W'fBږF3{KCg)'/'3FOR +I!22x Ffg'3k;(Vy N?s)Iv`8VxǗy)yH(S2NZ&8hni'f^6so_sg_IvV2Ii3fV8ƿ'I!1sCz6H x86rwg^jR&iYob[v~)gNx^3o_@ Y/W wؖ7v22~6s. +; +; +gg KֶHj(hg7RH3yٙh(XS)iGW9I?oX `&F/S(V2rw)ǏGR +s)G8V(6N') Ζ&'_Gٗ3OyW>6X.s'V_OBk:{Ξri)W'&8x(V S'8HF^y)!YW_ ɉW F`6`绿/9i)*)O#g鹗n^xn>y~&'gn8H胿oÃiSkg yg~r)VWzVH&sSn_yWv.C)f"ϿVO  )'[)g_88Hfn&I9ii7[V__'G2[_&^Rr + ˛3G?.G)^VNIorh~8h?)_.x ~)7i9'FH(.sg&isBF"NKG7o *NR7Xxx8V(~CiiGzV(V&kg9__Gon(HSG?֖2{{o^*B)igbFj'_)I_K8 V>Si wW[b>(:~7?NZowǟg(RGsoC7 g^HX8B^W_2V"iI˚"33 )7s6Hv)iK&V^n +n2*Oi^2NƖ~Z'cOGSsh(h IZk> .N;g#F9W32Ɔ_i)9"vVHxx8_Fo{K&ΆOCgGO2O rjkJn&^[Wi'ȶB?j#SǷWi.2.^fwi#{3rro3)׷vNN77s;~nzW9 'S/>fn[c7/2/?F(V jڊ[:.GjV~ +Ϸ'WGGg2.fvÇk.Fv.j:#g3 +cO'o^^ƖfNN>IGϳgwhVfkS&._G7w+6/2~2Nf((ƞڎS SKkJ{)igO):(vO^6&Bzs +S2I)ƖNKo7'v2o/iWwN8/gF{#jZhcW).VV.Z[7)Wg/ H(v+s&Hh (O)i3g'&7''so_FhZ_CwXfjSsNfs)N&VViǏHhȶB')i7_~RG?S&N'))26 O((^ +{ËWiGkX v)9fh @ V6~I#K'ggS^w i+~HXOWwSHhnvf&v[w7IkH&giYa!{& 8B3~~>&6Jc9!a9'^ci7v2skz/j&vG 9'(VfnS))_X*#ZWGR2vj?aa)Ǿhhh(WGg6o68h/Wgf(&?9ɹ +rN*NFF./7G~FXx/ybF&Ɔ/ۃSZhFF_32(V9Iɹfvf rfR~vJ&fc+' *H(~YYy2BzOo?j>&¾>v(V?w#NF6R)W izbN{..88>rig?H(JI9)/n6kWgOn>>>8hFK'')c^~^&Gii{dz>hf')68H 'WiWgs_Gn:~RogG'_c6֊gi)gsgSonxjiWX j#cg77w>^&xxؘ.g?bzNoGo#WgIv8 K' cr(f3b^Oח7RjfnWֶ8jʗ'^{^"2_3γ_w I{ΞhƆvV6Vs__ʆ7WGɟ.ʊfII&V3/gSJ>Z~vgW9黢VFr2o'j2jƶ憞B>66z3[&N)a 'c&xh^k~v'sr^&rsW 9W62kg:R#f^~''{>nV>oGI!v6.{"J^>CRhHjG)s[[ +#Hh_ZZ&Zϗ7G In2bnnfKg'3sh./WWWwON^JzSO3N~+C 8HfG?3V(&>?GwGo{~N^Jj? +r(xHV3)'oc3sS^ʊ[C;hh{77:膆ROw3ʃ''OFLJ/zFvVfJ'+n+/W_/ nj+矣*?kfv6NFv6b+/oBoG)iW7ƈ GcHi7/^hO)i[)Rvrs2J&Ff.o)igh^ZGjV(V&?Kȶ)Wi.."+#χNf~Ns&>R.2^&ʟ/_)v(r'g7WRƈGb^&(SϟS"/csG^/g'þF~&o(^R ׉W +>^jwW)~Ɩ886R22NF&#z??_33C7vv&ZVF_)W /7 ?f^v֞Or ~חWS΂>~W)'2vF#.jRF6vFO)_^6&siI +b~Cbjs(VֶSwnBS+_>6*fv6ZWGG^R^7W;. +FB{[_C'_S(((W)'/'O?ofNz__C rF&^'*rJwOv&_LJ7Nv./gi{^~go/^3'/~&&2k;k*ϋ ++ N.3SgFV(&gwGFhƆr_7ςnnZOsO#zSSJ^f"/rr; +^ +#GO>VNw__KV+O/2/cjs+{ + +;3o;b~ʃSsr~ƂGgO+6KK&f~&*z^b;"3s_'#;ZR+{r~fhG[F 7g?sf>.Z{ocn.2 {7GO:^>N.cs +ogs.N*zc +vc__2b3OK +zrRZ.~."nbOwwN.cso +;bCk33(fogCc_Zr^sSOB.~&^2ZOgr."wS&^k#{k2s_+JʚcR +NNronSK3j3ʚ3JrN3#33*Ffʏ3cgOF^>g_'RRZzÿjcOf./~.ß'rr^?r"/:{3R .r3f2Og^v(RgOj>.v־R'3K.JN'GiwG*(ؘ"?_ "s/2f2k?O7goo&F(f +7f'??OV(GW)2rR.xWoowGwI 766:g9'^R'fVȈVJ) +g I9ǂ(V釷>Kn~/&h(V^OGwO)g3z^xؘ6#O7?׉o7 gkV(>kg_W _ˇ>((hhȸȸ27W ?N+JF*LJ{RFrNg_:F(NswiG3h8XfS?kg;'LJWFvZ2;OSow7O/8Vֈ(f& #'G wzGc{ OsfƆG3*[((&^>27cSg׷c_óK&fHX') 鷷)_/ƶ^~s"[j3?w_Wf F>ظH8.oO9ٷ'3B:S3O3H8N_RNfZ"/>{;Ci)SR+'zNh(ƆGwg IW_'ϣz~6f~r_)RBX)iIW*O77/Fhh/cb2kΆrfr ?C3FSg'"_Ks"fVx w[+B:c*/:΋[G)'BzrHx8(f&ir(׉I'7g+h(;n/ck2rR^722C2N껏_)rNH8n *)7ccFZ_gS#kRKcR&8VwgW#RGi i)O?BvvVւ77j~or&N ˿W[/7wn+^Jr^' 7o^涆>"k"{3oZhVhSj2z;)w)i'wOJh(V ?ZR3 +SƆjgK*rFVF>fnf~?7gw22v()&&f^/kgVh{:B{oWw'GGWc;^H8HH2swc;Oc?&_g .nR&kf_>VFvljI ;&ºwWFfi&v6> 6F(xxhz3"o?wቇc&H(f)v^ww;~VV~3wW9 /B_VV.JB/SiWrv/GvƚwG#hhvf(Gw+W IG?ff&F(vko>>O_JK?fƾ*i Bg:Z6FVV? 'R;)iiZNֈS7J2f.7gg_h(v&SGS [o)I WW>(fRf*_rr>^ϳC3.('))6zOg'RSn6hV'GwWW/?7;r&'/br&)7i8^2n)_&f&ZW 999gVVf~Rʎ'_">zh('gKfb#[g6fhn igJ+{/ f?7Oo{G'C"H(F^ 9W&_gGz^Zcr~7OzsfVv.{O_.#ookkS2ֈvCw/O'3#N&C_/3zχ'gKZrhhFnGI7:NbngGN*++B##3;hvr[_3C[K?cN~sۣ_?+v6v Jo)gSw^fVR7 ':kgjRn6fxikJ"J_7ZǗJhF+___2fbr +Jo''/F(&{_^B¶bS3riiw3(??{^Ff2ֈHFǗw׿*3ˣSk"3_K(>Z'?O;ZNN6o)^^SC>fN*[/χGwWn(F~'sǷ/;G{Rf&^NHwiɉ'? Cjzvfˏo# +KZ&n*S'kNVfbBb;2RnbB#sG'_jNVVN.ϗGgww'GgJ^fƖv^ww'G˳krbJ~^"JZ. +>nC_ R/j[SNz{'7"j>N2.[o/KS˿_cb^NrJs__?';Z.r~6ֈV&{s?);gWחW_~ +&N^Vir*G{BOF膶bii3S[ˇ(xƶc;7iW_iV8 j_FW9ɉyY^8`֊CǶFƻKSv87WIO GY7^8x@(Wf +.?nh&f9a7/rV)"giɹ?(hhv)__/) jkS^؈:66s"&N[wWgFKW!9+H6B#W(26r闋jȈ !!~ONֿ(CCW׋)xx趞W_ i6` ^&w6H&s7G'_''r88~ FN׊2_WingyI7jfۿ'V X&f 7;_7)88 ^G_ O9Y9h ( +6VgNW (63GW׷/i I7HFO"CZzw)8(n)Wc"o^h` ')ir׉ksS3r H^?G)ii;))9i7Kh2j8xh#YI9I_WkVzGRgW f~n')SWg_i_c`X  ')?zwHHv +7_'GIy)O>fWj/Z`8VN_Iן'z7IN.V(6^^_R) {6v&R'*OSgwG(6WwS[)i3 +hZ/ڎ'g9B^c^xxh )7WWiIirv ֎NJ399((xjB~gggG^ȘHhʇ7k"JI76HKs^IyIGKhfFr~"_~H^G_GIoG 'FZǺ:'w )*V(KRww;_~HF+'[귟;*O V趣Jn7Ǐ^C97G.&V"Z"{6Fsi'_^fS'WO?gyFVظr +7v)Wcrϛ*g7> + w7W¶F2^&#?2''gi)O(n/i^ww'nohR&(V^F*GY I7I'z8 (.ib[&''~&W~J3ɷs + Gə![8ȶ!yf&6h`8!q! (&#a 9~Ȁ`> wI6`Y!H` !Y1b;7 J>Y26hW#nI)J&F7i.``቗7燇 G:Nz9i'~xcG۞2(6))_Fa!w. +j6x^k9'66?7I(Xv. h3wbH@(W!G*6?OVXIW3SIvgwGO&i)?8.IaaY'N(/' +Xyi&bH7i{ָH(!៷sVs/S3&H 8j !7&ƘXXF)Y67irG۾^>/gKV^79GG۲(:㳗8oIoN6zϏ^8! &(f.ʶ(HF'o'`H&r7'.FH 8h' Jۏ[;h6)y)SNK_g:rx +w/R#br)9W/f >Rvv(2)~CS)z~x(#WO.Oww?rfx8^g{k+[3j9玎^xؖg^>*ROkfiy)inR> ȋWInBs_J` G?*?_S8(ng +/&V."vVRǙw7+:#G"f Ȇ'73&n JO#>hhGNJ.*{>vWiG_￷)gg?s H6gS;gwrSBC +>Fr c_s'hgiW'σo;scKo +X>GG +zr#J/˖LJן3[C2&88[?_G_/G_'hxR''Oh"rZ^6kn?B&W)is' +˛C2NV8HJo3ZZn[nV>c7oKk:vN{wg'cVhƎ{os盛''(h^+'/Onv(~SS_/kvh62JG7'gHX{3gW)/6hV([ !wλH8h()royJ3V^Vn V#&& +g'6C )SBIIa?fs^n6{) Ϗ~vxiYI?FHhO Wi32H8YI)IooW/֖V(8?9^&_x8IWiw׷iFxo !)Z&g(pxSWy!)wW.x _^ (v^XX`_)xy1I_! F,gi S9׷`F)qgY)@`89{IK7^@h^G3GəiygivX0W7) f^ @Xh.Y)H>_v``xYAq!36ȸ`v9Agfx`Wi1Ii!^pi_?0 yW)9W38`ؘzi1w9WVHH^VRHoi_Vh S7Y +w^fCWc&X @8yo."gx(gAN&R^x88'[Y99Wi  ()goISϏx saٙ)IYn0ryǿ)wig Fwk+rGXV ?cf&3i_V` HRky[_ 'if(0h"__F66V8fkY 2^X@(&coGיaIyw8p NGo Y @^ZYWwGIgx`[G)'"n86 ))GIf +fN#RGYKƏ 99'GX`6zay_'.o`x^9i)I&8^7陗w`VfSOgKə`ח_ i`&gW_Iǿ9i C6v(V +')Ƿw VVϷ*Z_~;_92i_VJI&G^'79i7SV VV2i_)/b @XV^' ciYh`Z_)׹! X>/rG7n(Xhn'i IJ9׹v(/R"&Hx[VVJ!1(`0 IaG BA( 0ؖ^!AiΗx n31_v08&F&v'Ay&@@p fw)7KnIR`@i)F>י9;2iiB &F^־hFIW9GSx`؈_ yg(^awƗo/VhY +&Xi)#^zz"kGaYI XF~ΟvVOᑱ)~@8Z7 9ss(kA ^@pxg/F֎_i728oi7?+?iNJVHw7 ) v))nȸW1IXhyXiɎVXX )9a /6N^gvVHƖ׹9Xv&fJ~&y1OK)7G?:68a!&`0_O2(FiɇʖX`Iz^8go'(w9(3Yz i!Y'``Vo9oV؆yzF>3H(6ֺoyi _FR~RN.9!W (W7fƇyaz6ضG_b&hN3w9W'nHfiwR&:[W'n" +F>)igi#8^9{h O~8`Ry瞖(w'f憲iiWָ(&&{N2jnO 9!9 +8(g'nf[Wa!wf h2'薢9WgX RcWOjO2g~V(7fVh^'WRVHy+8 &3&_!IW(j)WJvFn wV(^jaVh8J +^v(VYY6VOKfxx6Bi^_rC?c#+ +/Vv~Fo.>.wWw{&F6RGw7SڶV*Gǹ~:*;[fHƲϹ9 ~&2gc(7gWsnv^rn{ ({#'[o)7)g^xfcsbf.?7v(gSǿF.2fFf&6#/Cork^N>˺og[^+O7iS2shh"7sw7fv&;w/B~vVhb3' OG3ƞ[3c['_&6Z:. +ooV3˺rjo I&b.:r^^Vh(_zϟ3#_ۋnn[ r>(6Sɉ_6C:o7 `')/^Yvh?w3). G>hGG (ǺZYh{)XfG68r>w.׉9)HFpIv+y'&IVW@(^CJvgf(Y1c {F0`^x !NWW1ǖIv0Ra o)ainr8XvH`i!֘gYa8{ ' i{YI!hHbVj ȀHjHY!gF )h,`FayIwXya&;0^ֆiaV 0y'Zbh!/Nw" rzfH@FzNG#VṗGP>I`nAs`7aF0( )Wgفxx6XHW.8Gjr +(x@HVi9!fxy8[#i;`qi.r86/!ؐY)waisX)9.V>w ǗiIY'(8ǂiAW)금si3`& `^f))!^Sg6@0a. F_hVH9(7)o)a)!w˗jNo!CoiVvh)NɈ!ٟH0J?KWȿWS3*OYJrGV 8 h'h?JH^)CR("9w6hv(i`?g i6)9.^~ a'c':kG(h^bgv;əG8F8H^Gb +i.)I.ׇ2 HVc)ohi^6Ifk`.i!b.* IS0^;'rwg{^VV6 ;G& +Z>/ɹ hrf)Ff˟&V S2n7)x؋ N;>jVC>ֆ*ۋ fwo(8 +g &WIhf69ggWi'6۷ohk W_Gg'hX9ψx&(N;^SV )~_j)>`B97r2sV7r:f.'7.g/(foWYJ_BW7{^;&x֞*ahkOWg`)Y_Zhg/g2`pYG)F&jW`'wv&'sxXWfC*Cyٹbhv s!)8>s_2jgw/N[ Z2Wb88BW)&VWWRFFsW .xXəi^&irfJVb7IIZR&η>HBOiyyhhzWG.WIgF 9'vX6) 'rR6h6:SH^I +V[Ii/h88([(Hvji 'ÆhFs(x^i9wfh(&LJ)N^68ȳ_h>ǶXȋ7o +&h^ ?c[Wo2fv6iah~s7fV)g(3^K//v2W_V6_?#fh^_O:/vVb[_o2oH2G>'Gˊ.:;Ϗ.(fr/6&o?[VOfk ۛ_'랖B+_CO&Gn>ʇ_gG'J~h~:rNF.oiwon::s nr.;{Fj"+.6 +_7 "~B?gj&.:>;?Go +6F&__gKJ +SSSC~NCsSSǷgZn3VHFnS +b[R~'7Þ[+KSoSZs;ZJbR*__ZFfZj*'3^^{W(.K.Jo'/* 'Osv⻢^.‚oS#O3Jf^g+>kK*ScnJ o*&s+3N2jJ +C;n o[+KJ2>O'ojb>3C3_KCjo#F6v^O" {{/Wj>"S+kg{JkK3snRf& +bnO2.ʊ'?NJg?bΎk/'c> j+{n>o +>NGϻ#rRc.&Nj/Cn~^럇goB[S'o/rf>_S^zgGs*bN [CsS3[N:z~*z.g?N~^Zr*J?onCr֖:rRs?G:rβ+sS*zRf~*Bc3O#²_CRB#/JCs"JCs??S;o*b^[nfvF2sCWSVƎI)gn^WS7cNnO_fV*){ +')9W{c&.(RG{;~ FəO[>F[Ʋ!OC +>giizHHVx7a')bƶ^ضr2g'Gr^7G2_¾( X8'hs 9W9FoXV_C ?G*(629sn_9fJf^&r{KH66H>I!Y(^Ȣ;HFRB Y*"vH8h^zIǁ!y7K.6`nigwn{si^2VF^.XGiS +{i8VJN3n2x{YW7GfhHw/v.j_ ySx~:f8ⳗ1k~:8@&sǷ.7h8(×?c9)CF_677&.oRx'iG[Z&#VVk+'CB['f'gxX7w۟YI>Fj &woO&W'S's({[fC9N) VhHRBbNG'f^h(noGw'7+gZ32g^BS(?7H_sw9)7yCfVxx(_IsS_*gr(Hc~N3.7i)w9)H ȶr#3gcw2>vv(Hg_GGSj&/N/^Rrz)7h~F>'y_Gn&{nhhff'iNnFvrZBJf9jɹw^hCϊ &WHH(.iOKr_33+.6hRNwV~nkw_Bg >cn~bOG)IGs (Nz:&ƣrc6FCwg)/j~*/g7_J68[3I/ffw[2NZ7i6v{kj??_'3F"6H:IrghSSz[Zr7{H/iSO_rg +(voowrhv&3rw7"/..B[׃~8^n)7H ϗ6&Sixǹ_(_o2FV"wr '^&&NIwS?&x6KR.gCFB(^[G~^.^nϊz+*FIi'&Nwgr㈆&??ZvhsG)))KF&N_'h?"?Vig /^637rBg{f86 )+h2ggsg#'_/F(h?I3ff_'?"k6VϷO~FHfw)I'(֖kWiOvcCg~Vh_iZv?g"o O׉oF_s7_((Vo7ϲ+^R>NRC÷CVh*FGW~fF6NvV) 3Fzk'^j{sgz~VjB37hfc)BJ+C#Jk?V^s/Rr_'C..b2;GO*N'g)&ƞ&R^siik2~z;r;"O3O{^.."*.&6jW_CckBR悚"w[B2**.ϳ[C>j?3k BbsW_32N^67ǿۂZڣ?s~RC'Onc"Ͽ*.~V.o7Wg?S/SNN:bJ'O^BssrZ +_c^RC.ZZW ?"~fz>fƶ~*oǿ" c?{Bkc +f 2_ZRj'..Ά~rWwsk;;R^ں'#_ss:&r:?7Kn: >.ZNf^:&:J'kZsssc3kn"S_/*~bogzn~^VfjO7jcSk&>;O'.>~?SÃn>/g/2{^j#wGO2&.[N.bۇ?sbrsϋۛf."+nnZ#C3^f&B3kj'cjz"&ooK{S_;ZR&Cj.;g_jJr"C?SR˻Z2bcSc2S#_'sr&N{KC +zZS.NRN;s/.k ^.JBoo#CoB3_g:>^r +_GڻGn(rBSizFo+O WvR.v:WN*~g39'ssV:r)7'v:3jW: +n~2g?Z3[.rǷ&n2(kh3G>z>HV>'3^hwI))H("/~ohF66gZgr+g)IW3֚Xg)O:CG&cC3r{~CS*W 6^;W)o(Bf^i(.#[2g _sNJ(r_bRR.ƈv>";^J^fO~(BS'RiCN);~sfV7/K' ++Rh/I+i'_ iK2X((*8' )zv*9)x>+&b' o~ˎ)'3nr((&)97:&n~Fgg'97ZCo'.NxS_)(r6h{^6^FosG'Wc>^x( W K)n&H?F:sRY /sK8(7.~3ϋr +)"Rfw/jW)7jb68/&"y?&bCcfhviS/R#y98>W))>{:_^28H6 )/.ZV6wKkGW_6hvWyw7i.F[o.?n.K_ya)Nhh8H'2nwwə#hzhhV)W +F[6HƈhS#?i)kiIZN6vfn(c__~"FnF:> I!gcS('W'n.Xx.[a!i bNfvhHvfG' INX`6WIII_coNR(^zfƂgwRrB'n _jF^{++O#igGW6?fG9 ZgNx^^CV(^_? 9Ǘ(6nW97/_CfX(9 Whh(^*nfNcI )C66c>g#gR:b.(vhn 'Ə6&_^&RW'ח*S'Xn)y8 HX2J )!Wfx8kSSh(FǛnV/gFF[gw_Nj^rb_3ÊʞfR~JK_7ώb&_Zn6h&/G'z/'_翿FV膞~jo(f +יIWwcFG׹iG'''vHHhh2{SS⟟ifV{*h~_'ljg?&sSwO"SgW?rN(棇/B6 '鷿~Fc +:ڣ&oʇin"?wS#(RN^fWi)Gg(s[/Vh'7i)7zC7w{>6(F#R^OW6f/_sZV>Jzn^'ioc/_gˎֈȆjgW):FjWn&6>{# B^n[iG'CJ^_26fJrRR2CgW)'SZJO/ +fȖ>"Ow'b"O>HhRC/3v67_k^fWֶׇF+Nf~*7g7G/{jVh6oGwZw#CKv(Bk[kZF6Gǟ~)gK2>&6n;s+.N^&_'o/g3gjZ>rjo"rb'iiosR6'g_ +>j)G6.j[>&zsog_'{ZcnN(6/_'C&c'ׇjfN2'rfn__WWgk6(Bˣ*6&sO_g_s3[3^#sR>__nN2sJ"":N{Ww"6Z˳S +f^㏳?O_/cKbzR>.ڻo/;"S_;:Rbs;^RS3.rc/7BkRb +R&n/O?kJ22nK+:ok zۿΞb+J+{n*ۻz:b+O/O[.>&J{rβCw⚺JzJrc{j 2Rjgr[CsfNRßS3 +N^fCK2?g/g'N>:rnb*_¢S{ニ>+3O/nJ2.[[Kc3Ss +*>rnk"Br/g#^2ꊳ_*b;ۏ'B{Ï.2{''ڢj۳Kr:22"#OOorcOϋžn.*Ss.s3.>>z'O3r2C?S~f&f:gsSs#n*.[C.*"SO "/_g^f֞_CR w g +VvNojosSɗvvFr*cKc>[s;wOgR.S6Wj?"a.VHv;fvV +79W(&^.FVױAyw` 0 '9Fr'*?遁nv(HF B{#_^W7i^(7_[9Æ)ɗJIw蟉i[Gsv.iYf`sik)/ Wwi_VX6o#2R^y)ZkRhFZ)nR;iii^HG[F'fZ/;^^2"Rwɏ8hiiGv(Ya)wXf8;"i9g)W)x8(hFGb;h鷉)H w~Sv#h{^"R? +)c[2&i+"Sx8W_IVv>8HIaYfZxfg>(XZ>ikY'Z&(6jxx^GsY>v8!k>O~ G x8G)S7)svi7"67^ ʶn((_IOᗗ떸`6V薶R Yi/y/#>hV`&.2INnWs "?)V>7~z"+w*k{3sGiZ2ȸ#C7YwrgNx&88))gwNNhv.ƘNKWiV؈bR'Ggף~i9SO6V[&Yi_V^ȸn.BJK7 9ɂv'whHx'Gi֖HV&hW)vV> 3iKn)jgIB XfGKVGo)! >;h(R'h:φ.~?w7/9n_>+wiiWkrg W7迷kf8fF2S9g9W^cB8(V +_"&J牙/Vs2h +oR"W_rzhs?Ƿ3cc>nΞZrJ&8;?OJg'?GN[^fV((B⟷+S#{?Cn' +SZk">2C{ +gK_iGR2;~Fw_ [oNG[ώj:ۿRfv&WO+'7 ^6^[N +BB^&)LJ)W6o'i "b9/k?> {hKsS/3?F(:2_.~j3F(X(KGWGk'siRFhf:sRc^&NrhO +cG;b~8;R/;CgiW FVVcWÛnWO#?6/j[{vOR*&( WO"3i7{fh.ZCfNgW׷v&vNJo7c>r{gSn¾֖6;SgcRr~giGJ~H SsR')GwvV"#NRr8gnN¾h#_)g?I'W'(/[~3>^ggwFFKKnhsB^&Sr''/kww+KF8"^nrVki)'__㞶GG[BJnh&6H2N3[b)O+6&R>:6_G)7G?N6Ro3>"g?6.{b/_ +2G7oSF6ڗ O3ggZN~vhC +O'_OsjG7ʣ_;626 sJ_C΢Cˋ~rOcfV(λS?CCWIjbšFƆ_'))w) '>ff&f>Ffv.^:OˏB7[oO(Z:*ŽOw˳cjRV.^nRSG/Rgg'h.~nkOg?)IO?C2rFF/ֈFR*n:s'jfOׇ*>.(־&&Vg7'B;3&rKhvRRf&r{7W_iG*zFVcjbI)'?f&rf/hv?rn/oo#_G +)g3b۶ֶhv^)Ig˿7g3K^NnnzS~FOw3J"3+N&&.oCR[y)oRZ;rhvh^R{_w_w9W(J8(679Yc>:f[6V^ && 7sZJ)GZ&fnFz>#9ag_"&>#(V>SbHr:g'7w gr^6H>j!oJ3fZnn(&g_67//nR WI>Ss~c/hg3/7~R(R((GsWWf&BFr(rxi1arOIi6"KljgS!~xNa9r88ǁW_H ٳh iasv8fG  )ww6) ə'F~xg~vViNW~YvH(G!i~(`_f(? _Nc9V ?( Xfihf+ֈ׎HG&H(gsK*vvG o+wsx)6֘ /vϙ!gɗ^Hi_ &^9*^of!wR8i϶`/W7LJ({Wǎ׏?@Xw_F )7 I~W9x_i`6 +CYIg.iF?_3( hwN8/i'!WV )i X#[nCyWH)GSxßS(w'C8( WgƈS 9ihs+HJf^xYDz)iWx6SJ:(h idzWi)W(__?Xf'h_iwVhHZJ_G狈xGRWiW[&??/rK2hX7iWןFIg(F&XS"8/WW)(Z?iG{> 'FS/g&nCSw~z;Czvzs +h7sw?7B>+('gcV& G׿~xv{Snh7g&( +'owz(Z/s~xoGϟ_ΖF;Ͽr־O.>ic2_I >X·rfViyg#~h:WGZ(^gsgv*O__o涋_vrFh&#'K>_g_2NϚ{n&6ojO'I f^(+/{6))G +o~>6w)&r.[s?R'~6&/F3kNROR#*bfv"6KNnWi7._'2FVF#Ζ>oO+ ch.. {C3ZKcR^ cRg g/SNfBֆojiw:Ks3oZ^:'kV?oF&/#_?/jzv>z^&~~N+W&I?hV6jOFW :>‡2VHZBwj[Â:Ύ&F*riᅴw>&&n3'V8W)6n I)NRoWO斖o_V'Gii(')gVsGV^OZ^Z#cFF2'ir I~nh(Z_)GZrWyGFnW*hG9V>sFzI hV"cGWfȸniW(9)zs)R(VzɗvH#֢sg.KW).fk/"fȆ.*sϿ^Vo7W^OGNgg.zHf3_Fz>v?O^(2.G.VoFh( +33O: +wc:C_'/;^(hvR.#ww?r>_nhˊ^^kw⾎''B((2nrS7W:(6[gB(vr'*)w3FVkHB''r׿N"Oww(^R&׿rO7_>VZ"v/#G3>?__֖#G&Zgf6/ch抃oR>?)iWfH__oNW7ssR&c_:vVn/n~K緗fR Zv˳"n_?JFFncnJGRZ+:OC&Owi)gONf2o3(So/>F)WgKWׇ&K':Vf7ڞŸwgs^^B?gfggCBN>2rFF&rf"o_{KϿVrn 7C_V#?fn7W~Swo^~.ۿ'6vgr^ROG"N^+R^72^2sZff2j.)'bs?[v3oF^)srOG'Jf62CgkK>JOS~^C_f*og'3R ʾ>22Owo/+/*&FK&R__'>^&*&fNJ.Ÿbo &2G_K36/OSbχR2ʣoRCgþ6__77O +/b_O("(#[/wwBfGg+FnSZ3s֖j¿[^ƞ')gsVֶRiƸ(W)6V)F#Cvvhir 3fSGWF8:9C. + i∸x?Io(HgVHωv(HCiGFVWS)w/)8GO)FW)Fsi +[fXYIrWw_`i雾'o3Ȇ3idzk('Sg&ȲWi#oi8.3W&nsnXH3jc7f)iWJg{*R)O7'VVFwg&sGf gw'oN#&67wf&nVFwRh;6&)wI_ROb_);hhfji+(RWw)~/vV'cII)ljS*Ȗhy2{B&H6_ Szh) k&"6.&c7.oG7C6 +(n )/oX23'o(fO);F3(6S?׉shSw'Jsj/3 >Nw_Xh+swkFnK! WW7^K^__WgNKI)ZoZ^jG?2"{Rn?拟B3gF_ +V~Z +o9IGb&>6*s)Wg_z6FN#^ok?{_.;:o'S"WwK7'BnxXv^))W?)WjVFBg7 y7[vR*Rvhzg3{JBg>zRJB~>n"K{Jg?'*_((n )3vhx8VVfj2Gg7)_S&?s'&Jns.VR))'nsg.Srn*gC)iW)c8`~o)_w +h8hSnI_拎[)O">&.nۏ־GiW~?kVf'OoZfGnkw#gs~&x6rg9gww^ؘbN^bigGWGFΈˇi7'>NV +hV'O?7rKnvZwWgW((xhǏS+hRKswS')I J*6Rj(+&((wCkr(V^kJr_[;['? +>ZȸN'9 WOz.6h^RNr)i36([9IJ{Sh(^&^~_/{krv>?iWI[ +hh֎scR#?O&fbggSwCro^niYO^(6nB/__g8HWWc +ozViyy){S2‡ +vFc__+֖6&3ci' VNnKßO?_'(f) )_Gk~6V&jG[6v:N6+c'.& g?W SwƆFfB3g )'r2N*#_i7+C.2zFfnN)ɉIFB3.^>zN/ro2fVHHggG7__gv^F>Kog)G2NFF^. #.WC" Jcs3f 8v(^2bg)s溲6OGI'/n&f>o) 7g^(f&iW+V~NR*&R ZffZSS2Zc&v(K_GOSN". wKƈ8h6~ڏ 9/g?R.?_&8f6*?*KOSzB2^+3OG) zF^>*OOwi鹉V8F>^.2[ i[VhVB*o"s?ssC'SƖvfh2iɷ*~^2S3׉W/ƈX8h((V6bcg7g2nc)i7_3K{ +v(F.'ϋ2 +R''iIIcNvh&g_?WyOR6J(r{+#3_[v(fWw/fS.nr)iGȈV^FΞSG)K&FƆfzG gH^Rr2sGCb+njk3) )g~~6(hog?HVvj'O7w_"N66&gwǗiJKfֆ&R~b?c2&(F.7_h*?kۋ#gii)7oh>Nj;sco[b.rrnf77WwF6^NʲrN"&;G)I7R&^~2ZkC2^FF?S/oNNfR?7g3S&ξ:S^C K3BfNK37gofNW)oSچ(V* ^~:R>R3w7wg3>nJf". 6^.w)))w.rFf~+gj3ZrFf2^f+:'7:3 +&&k6N;KwW_fƞ*3k +o2++;2N2(WGG*ƖFÏg_#7WǷg66(*Ƿ'(Ʋ ~ +WWiw/h&rR־_yiVJrZozxJS)Nc#_'bSScv//oKnhgdz&hzi)'BVH(z.N&3.nW)s(8g zƸhNŠ''hG)WOoŸ'9 _FVsh8?giWF"sS ں"/7R&[IWg(&r;c*V7s')Ww.~F:?/LJvvnn#~6r_Shɹ3(V2OHh&jKONo Y)(;W+v&N___v(N×"Nc_.()9O6(V'S?S8(2gk[NN +I)fVg&V~Ww_F^O~:J6V&jng)_v.) )ONg_kvVsGi)Fi7~S/_*&&>?_[J6n.'~F^i 韾f6V^J/^FxH/cjS gZ(>iN&R'sKFSsrƶ^&n#GOfni)'O.~Zg/:RHH(۟/[KJw/Z&FJWWg*" +Fr{?&&"+2n.~c??>^>_gچ{nRVHnS?g rrW7۳k&Roo_;.NB 2n~F&NkScCR"k?G)'Zk/3.rb{n[sss+.3:RgK~2rN^/&>z C+ + +*bji)ww_>JrVV&2ck##scϛ*rBR +sg'/.&BK?;bz:^F^s".2.Nns7ii7wkkFffr +?sJ.O&BB^#GZ/{nfO[OBncO;FF(h^B+WII7?r[S.{s.fv(&N{;"R{Rn_wo~.ƈcCwWkn'wG.b&KkvR~ +b ggWW76>Bj VBri)Sv:3/'2OJgC_2R&f/v莃fHhW_wG+SOrhh(&ǚC/gzr^Z**憃GWj/FNK['2s +^>fbR.nW)oۂ;^ۺRb.s?g"^>2^.*wks'Oojn2?_3z枞sO:>V(.K;矣o+/χG׉_>H(C_˳G>ˢG_ +o_^^V6&os +3.+s2"^>OGCr~z' + 33&fVhGiׇo'vFz~˟#?R^6Cs[gnn3gCg+^FfRR.3W'w)W.VV^br'c2Nnǟڟ‚6.~/.~cs_".N/SS'[osB##rvhHNK_*)o .rR +nC?3js{OK.^&?'?gSÿڣRχ'O*F^>Rk?ooGwgZ*c;3[J~^r*c['#*{Zrf~"'7&{ocoCξƆ*ocb +C_GǟS[;.^:nS_g?o~^R2:O*nZ_s*?/>Ύ.~f^^: +7_'/#3*R^&&kCK3so?+nn>. ' Nsjo;jj;>f>.*S +Z/kn.bBrb. +_?+~^>3B2bn.2ss+:rB"gw?zR;k&f>rBR^rz[;gOcn.kN~c'?Kzz3nڂkJR"jjkJJc3sc/. +znF6fΚJj3_ggW'sJ#?ocB(F knOS&F;×'Zʿ2^>.ff~O 9.Gx/_/BO'B S#F&F2 +W_':n2f(h^*J7)io>z6.''FHC(6{nJ)WC*n^N +B{^O_붟oR?js_f>f.{#7CZyyzir^n&(^V66~ã +~ +_W[w9!?(v^66s Wiw*&[nG{F>>o[f.n'>^ ._W)9ccÃ׷f~V['>.FGIWWZN."SJ)7kJ +__z'[{'r.CC:hhnN^~rGiLJ'z^V֊3w_&3O' R&F&S? +3JnVȸW7'wwrȖhVZ))ǛCOs''j7 W_~ jR^(IGGw_^FO;W3_)Yz+~:6fnWor>fc_nFW~Z.f&^') #*F;Ri#jIK>FȈV>&^R^~JSNBW+rwW'׉O"ʢGΖvFFhǷs'h^{wWiW^Ζ6FS~γ'W'gZrF~ +K'r>RN:yW'h& +&fSWwG) wf6F֢vh>F^.kLJJǗiwi'&k&v(hV(˟w'2{ןFFv#*'烟sc B2 +2 #CB +~bNf so_:**b)G gh8vf&^SOCgiiwOOkbRnr2^&f2F~B3_gg_3F_7G7&rfbjKjNFv[OZ"*O_zSC'SFR.&Nb_翾&Jc[zI;ƈ((8~*_sKSG7/ _j3g'f +&/s&fn{2On.z.o/9gCֆ(R;s&_R/J>V^;;RsWj"fOn"J>vo6z_yI^'w׉'!IN>VXxH^s3^7Za 3&w/fhR#?K&7W+fr_gSZg3gcV('W'iiszhG/.['㊳VgG_.Vڷ66rvoIIWIW)Ww~8(hh6F&(^rωY97׉&FjSf6x8(6Js+vv' GFG sG'7^(ngg&h(2g(hCɉW)Rσwǻ(oGhBs_.&V+9G)׷_f` ֖"hVzחi)B^r&9W)_2o:38뇇?.vgorFf3_SgG7W'SxO'Jׇȶ?Ww_b";>6?nHCWCJ O燷giW)x 8h&Ɔxs)NjrN[)SVȖc'h[s[2K^V[N kc')˃>x(oc/C&^[iIgFO?[sJ#3S6R OOHLJ2;^6^sSS) Y9W;x(>h Gg2k>(vZWWWGC +χ#Vv/OG cFF^^&&C{Z#o))V(R#ƆG+VH6&;c3ֆNss{ +Fh(_S'.N^K_??ɉ)HH֖F~Ș'g'_r&&wWj[W +VnSKoRh#矊NN^ gOSif 3#v^ۚ*&Zog'z'Nf vֶ'&fBJ'86^(V63_J^fKw/'WiWr(BJcS+F +S^(bzǟ +{_7(FRKrRfB?'"BckJs?ffΞ^^Ff"ˏ +fFnCs'7)WiG#fF^hh.S#ó[ G KFf&nʚ&^ogc'wg^gO''gbZ>g/:&vhz_wkF;K/"ƛW I68^^N(zgG>foiiW'GO2C.(xR薖6f?Cbw鹹iG(F +OC†h(wIN`/7: GI))#VVCw3B>֖h inVSWIr~&f(w ;(V'iS26V)ן?o~FV__ H7ׇZV8r )cs;ff&nwǢ(V(_H^[Yr? _ibH f'9i7FhHG WWFc{/3~`KRgWBzS#/>j?Wi'&g7_؀x6I7#NH&Ow)W'{Vx&g7SG;RCO_V&.GGOv&zgi{Kh8gB6F:z'{9Ghx؈V')#fO /+;>f&WwsB~g'(FvHȾ?..fWS:>*O s vhHVB3o >ƆZ/73>6K&Sknw?_Nb~Ȉ>R{>N^fG*RəIW Ș8/ + o6hk7ZvN26&['o^V6BR[?Bng'FVV IIk +_?B&h" )ע6(&_'w~r +?GGG_k6v^rÎV"+sOG2>kWI~^^68HWI9 g/VZ)S+hH^oG)."fHh'*&H&si?rf(k)WwW#~Kh3N) ǏrfNO/On)i"Nvv~J8؈BG))73fo7)Ww_/Š((^^>cgڏ_.Gn&^.CϣB &sIW*F(&.'K&Vhf2{JS*s7_¶v zROg')麞sOkr^b8x^)WOv22OG:W?.f"+N(fwG)IW_B&zϏ;N +㞶+^(ƚ)_F>Njbs+N>)W7 +V6ShˏIynvFGo)Wb3?7)_nV>ƈr K'jN^"S_['KZ#hF3 +9y9gRk +j_?Z>Gw֖R37WG斾J&~kGog's '{ )(>r.Rgwi HVFN*+z{~fRwCG +'_7bBF~ 'F +`hfRw 7Sfn//+^8^wwgN[j#J2.;2zz._7RKN/!yyW hf'W/'7KSSCS~~Fvg W)ˎ:^(o'gVHo'C~.K+sg2Rfry9ζ(Ɔ_o'G_g_ۢn>7)7ێ22o.NF뇟V;hv6&2?) 9'Fvv(RV[S"'# gfRB?Gw_'o*+KBֶVSOk"?_ VVvs7) +rfFFFVRWOk;Fvksj[ +B /_rbc.62s?VƲ_ Wg73w*svV((_Gf +LJSK:C ˻gj&^(v(>'û['_;(6^2G'*_z/Vfb/"S_&&f +'i )''3'SvV6+CڛZ^^"_o_O3S.NhK>c3#giw&6.2owZ2;ohv^/BnZ^c~&j_'gʋO*F'2 +?'k>2RzBisjOs(^K?g&/*>2)jks^jNo +.N2/Gg*B +jNn#ˋ_*ˆF^g'??sB&ۛC_':F +&NKCJO_ rN/_3WsFf&겎^j*?S?SrfF3sz kJ.#kk^J_?'S*s.Z"F^˛SFo&+kKsKKzn.3Cϟ..cg jr".r&.o.nN&3SN.곣{""jS33o#S~>Rb#?'gOkrN^ +#SoR2.&Ɔ '_S[jrB3#/_RNJ +KSj"RNRj[{;r~r{B{ϻssbR.nJ#'j{sS;ZrJ. +?kff o.&cggWw'k&rJ*"Zr‚nj's'#~^ +'__+.&ß_)WFkkB7Cb#wcZrn2R)kƆVh2'g[+ +*__/"?#^32g_hVG ǂ6(&3_c'?kjr~oG/.?'_wחS +N^k_'&kB&Bf +n.K?rr/9)gnVVfn^ÛGϿws*_k>/g2S~ȈfNgI?w2"GG?ɇs&V"?r>V*KscRnfhx(3'.g_)iYiK^ +"cbfh&^7_^3).R^3.s/ oΚ:(VRW)²nÇg7Z_/Zh((8KoSڊ) w_zSNw_J26o)7Gjw&rr█H6(#gGGrb/y73n> +&gB^n^~k'[WwFh6.JiG3_sFjs:Z2g"N֖~[RǗW) _'fښhs?ϋhG7:NjGW2h(Ks[)Kfbii8f6hhB2 3S;GWiGSK.Rc"vf^ZR+7zF.^nWwϚZrζ.^ro3 +R +'fn~/'K:6?k{"g.Vn^N2[Z2s׉3&2's3^h;C7gi)J{/G7鉷"B>vv^OOK;7ljy9I!K2~f&#6 +.f;iW Wc3'7G6vh^.^ns'{&FNg)G[fBF6 +sIWNƆV:2j?G~{kBgw_H(VVVc'G7*#_)Ic+.^2Z(hVno;bzk^O9IY R3'*(HhFscCswۻ3.fZR+[*j~6'K{"2sgk6fn"2zv>o__*~7b^6hȸ6'W/."/C//Sfv&OW7g/Gi/ ¾hxxfZ۳gK"~c׹! vV(&.S>f2s#Gwiv(&gNFƆΆ6fr{Ws/N.wk+[R;(x"׉)ʷW'3RgK~κb2s*Z{;ֆ6^[G7J^^N'9w)Gs^VVVHH(v~Ff)wsCg7G7i9)Z^&F>v(x8hFC>?)7FBzNv2SSosC_)fv+dzžVf*+j) )S&^Ύ;" +OGB.nR'_bbf(RW!)g.' ^.8HhR&?)r>OW)W9c^6&2jZ^c?o2+W7gob~f.^&>nF +w7GiizFRϷ;& +'OBFV.ڎ~Joo#wG3G*n..r&vFRk#:>F./w)#&v6G)wg'GG?kFhNJ +N^F'I/fƶFrWi)W/"^6f&>ں>K_7 iwO(f bb{φF'ώvV.> ϻNkR^_)gwO>N&vn'_#^VH(O3g+SgGo66.KgGI[O[C'z(HظVfn">&w/gyy>fFboSn>h(&G_?_Gg^Fgo۾((3r6^b&wGr^VVri okB +*J^z^vvz7w>^2:g{s_{ +B))׳(HVr.Fƾ.^f?kbzsg'g7/>ff›j{hF[[SGw_ZF^ʞf.g7:s +fh/o(_s'Ok"3 +:BfV'V((b7_?N>r))'.FFƆ #J6F7))">_?'6'?o{N3'){VVG)))gO*Fb*^hn_G'gr~.G_ +Zn&&R>6^nGOv6f>÷w3z:?gGG'ggo&6(~Zrrb +/S7SKOj +cǗ7/6NOSNnnZO?7>niwȈ("wW?^Gb6V(3?'>&2sws_Gw'3>~c&&~s{B:2~ #o#Kb_)g_Kn~fFֶw&&vn)gG"^rg7Gچ6& /ˣ?RJ玶F6&wi(zWW)g[BO':Bn(v6JSg7g6&F'v&ggg"~~:/SŽ.~ +k"Ns/jzN^B'3 +rn)'G?&&Fh6bF +7g'*r/#?/Jvn ++zC&v(vgW (h2? ?rFv^c3'g_OR[wrF{N2Rc'zB[2^'?c3+&&F&r>GLJ.F;Or *Žn2"'wwwGC:RFhh(v^Z_rkSs:sbjS +JZZ^bC'7'[vbGKʎ^6V.+3/O?WiOvv^bz/_W?RZS2b" +.^N +ß R*N&#jkZCO+*b; +Z/?sC_/'+^&((fR[o3Ϗ'/os^[*n~2''r[3S[/:j^+3;Z3CR~k.2j[G)'f&&&RN +[_OKNsϏk~>[ +_g[Nknz;:RrBzC[* ?w^ffV6.[O*K:"oR[ナ+?#/ #c +c//vf~&S7w/n΢:z~^VG_겢+'3n^^f^~sLJƖSgsssKBr^NN~bO3sc:2>2zZcW C:fNV6ƋjJckZ{Gw72Rb~~zZ7OZ6^'#/#_[.bnZ燷_nNRVv^kswW)6vۂ&6nFjSsK :^Ȉo_wfȸƃYi:bHHr'oC.N*{ +ogo&nk9Iv踸czV8Vr7W!w6fN/ofJn.;> G7kƖV>)9Or&(Hhb')>F^~s'/^?_[RJ;_gO(Z'Iy (8 ׹h(vf~6^?w^ZYa2~V8*Gw.^Vxv~iIGξs/_&.?_gHxO))s(w)7#v&>SrS36vrS'g_/.nO'gWgs*hNOW7G^&vVc?gϏK""Kv/?i.f6[' ٙi/((2s(&rROsbr S;^oG3;&8x; )_[6F^7gSJSrO3+n&''WWZvhHV."nnrJK +N^^J˲GgR> cO'2>'_'o^68FG{B>Zw)W?gJ sbf6VFf˟ˋVV΂ s/''Sk&v&~Gg&R/oBr&Bj/g7?s6(&SG)'fFC.ggOc{r^vvzn6bgcfSSg_S#Nv^f:."R.J'?& +')WÂhVhr O?ێffB''Gw'/7.&VVFf&/oSJ&'_Gs:^f:#7g7+Zz{s_2&BzJζ^3*V6_w)W* +&s3 ++kGSC#n&fJJNnfn3W W3zOgcnRƶ^.rkƖvF +J;{//B s7Ii)ohh6jgGGsr&~3S_&.&K+ksR>sCS'K^6V6NoGWW' ^Jo+nf{sg_/of&fʣgi_"ffnrfVh&oS?W)77WǟbR{{gk2n~vVVBSs.k +F/gIIIGr&H6"ZJG?s)).Vc7'N>Vk'W 7).(v6^ _ nN^Z^6s77;*n")/7oNF+^&bRVVv^6^W) 9i_NjKJ +g#"g'ロ.HCCSB(6^C)yy9 ˲F2f[cf))?7ﶆ& '7K(h^o7I/j۞Vv""K.nʳG3g bn&&ffh(. '_k~~FƊJ3?c'~C Ύ^V6(b{GggWgwo+*';>vr.2F66^9Ic# +'n+Zf^^n'g)zR2nJOC^&F6 +G_G9i[f&&2?oLJ{c))S#R&6Ɩo3)/sR2#bZ>SgWǏ3_OB[(V6+skg3_?CWS".n&k"ro?o?H(2鷿^:B~[['v?/)#/Oj3Oc^fF6B'w6v?/G[^&h6b>C)WGZKR&vn^^SKo7wG/^&*7/kbfn +NjǗ'S^(v^~Fr[/cGWG/s[&Bk^{2/Ύhhb2'Gǟ:22^37gBrFn2jJ[#KwoV((Sr^v~J))G[f憞o'_" +:s/"6f6n7_ʖh6F^>7G[{jf6NFFƎFjۺ'2^^ + ng_bh O7/'7*Nk r+#znr*R +>Z[^._gN^F'R~2J*S'';Oo2nJϿj3fR +#'G>Vƾw?''~fb'Sg'z2Rz_JZ+'j:vVv( +/gJۣ?So?'ϣo.;~nrb^RRRRs#:/矏;{rnCs +Rʞ~.~jO'j3sBNN^NZsSCC#Ks';oC*GC;^&NR/w/NfN6/#K;"r'/{n7__g KG_K~rv~ZC3onr3kG's&#oV&N*r2/c^sVns /7g~{ǷG~Rn66ji~6.KR.^O*wGNf>sowG_ogv(vO )2nbF*.'*?R"7?g;[n~zzNSOVc{vn.ci;oG?{~B3S7v"n6.zg2/R +/G˛OC^.SO~f2S7i;Zkj^.RG_WKr2?ÿf{o#&fW '+jo^(^f{)˻J? s'_ ^2O2CZh&Ww__'ovv*(6N +z3o:f~wcJSz;g?.&K v)gR"rkf"Nw?csח#J +*_.zs&WG *FV(k_z +'ws#3_{3gg22 G2No/j+N(VGח'g3jG#^Fn~RJJj{'OzFFvnwo*Gz#G&(VڛvF;'gS# +:o'..sgO.s'+oOFʛR_.^~Zg3sRzZWG +6'z^fn+˻~sc^G'g#)7?#vhJƎ^r.^6>RGwo +CW)gWG[n/ʶ  +* +^7RJ[J[/?^2:gGO7G3h' S/>6{gBF{NVnr:'7'W'bFrOc+s>2Fr6~z_z_ +WiGGw_RvVZ:+n(>s&^+k*C'~r7gWW[r:?jrR#_Bʊr6o +O7>RNSohF/N^kS. +n_S?2'"gjorF>*>FFz6C9gg)WGwS;B^Ih'{n"IOO#Fiir/V{fo /FxN?*g^f'zgiWg7GHrhif/H^h:V')Gs)^ 3?x6I:9HhK9c`8vgy'[zwډVxV_i;HF8R雊Y'HfsYG?YSN(&I[hV83b66O*_h(gIoVJnvv"NSjFr'>.bn(hV~ +ci (>'' 2ǹ?/FNfR{ƞnF''ֶ(vryw9'J _f6) :>6ֆO&)6V^7_yN+ __)F&h(C3釂Kf>&DzzWFhfvGΆB#?NJ7?W_s"^ fFϟf;hC_9fOWg & vVi_g_f'R(iW&FkֺwO +^f(_.v>Vs7#h6SciYB#2&*_c6>x7oKβ6(3‡vVC'zy)j.fW__.&_ wGOz&/v[vvZvW)C&gRj/SZSSv +kSFh3ڇ /:Z^v'_G;ϿS">&{K_gfr.oGIIk_"g†3GGOJvh^jOS'&#3K'.s9jvFV_nnww/"c?r/+oWBv.GK'G7Z"R~oSZ7~2>Nj#.HV&2wGjOF~'O2_¶>"R_:6F"_g_&ZN.RFs_چfk3ZS2"6IKR.&^'s"KZ{WONF+W#v((_w&*_3.:O?^&NG' +/2jk*_ro&7'׉S^sZgjo+7 +rfR&(&nGk^FF7gNBGWo)~n(FZ#6z6f귇W9VΖ?WarF3i׷HJZ'6B)W/V8h)ׇW:*.W vR Xn 7)rXVR?ijF&G92&fGwwfN;7Yf+VV:InHh_)ay 'C&8.K +i))3(v(w![ƘXG71"&v"a72 K^H`YinN`'i9R^H8Wyif '[_99zHȚ;C7(hFG/gIfȈZ)!_&J_)O2"8F#n#9i~"&(rgSJy3oH&g_I[^` &W SOn?'iaI7Rsb)_Ksg);HOiY:rOəSHhZoWa9WzjϷ'&Hh&ۛ: Nָ +JI?^nnHVgWo^(z:6IB*VF /Jn~vF&_;# ǎr2bF iVxkWRvx* j_vȈ&;BWWs?~V6? )iVhOiyIOfKrhn y +jh8bfIC;"+j^(Ə*g:FHRRs7 9Rv8n9_R&+_)Sk"22w7kvX[o73f/_7_R~~S{&kz_wgnVnS_W)'ZS)//V+j')N(6־3bb'iS*&Vf[oɏFV.2 o#?>86>gs +6V6Ÿii)o~Si g'+gNf(Xf^iSj:):V>r/wK*~^~ w_ښ^ƣs+)G[ov>+Gi/o&n2")i[FZ?R*~^6f.C_~r +7Oi."?^6V.C)J(6?W3>j.K)w)Wr6vRbgo_rHH?))'g6&g_wWbֆfb3g'~(~6V)g_?/v&'wgfn__gf[)OC?kr/G:FNvF^w')_..3))&&^7>&zf/g^f9Y9fF&k GsfV()i^؆VI)b֎)i#3ֆ6S)'hf6fg9Ov;>V؈)7W)f*6O7#Oy'N +fWk(^6/W{s&>^ +?wi7Roggsh&sgGF79*&_x&7Y"9dž^7 yf`(R+ Wh(w GN(Fh?w7GIV8hr_9VV?y_ Gf3gw3&VF^R)'~C_iɟv66Rog~WK(FF'f2(6 is +O?7g6(RS/RC(6+;w7f(hfi').RZ 9OGVhoW#VH&Rgigf8趆W 'iyN/ǃ7fF_7 &V&9W(fׇW7'V62FF"'?KiJ6HR_7{n.i/? ?2~"~Nn&6k?)y3^)S.vv*("7>'I'iS(r)i2V(H"WG_^VƇg.&v !W Ffry7338 +gc )cV('g2~vcRW^(7o(?O?.hnsr.FV3/CW/6+(.gwjfo3W7'c.Z>N"Rfr(fG_y^{Voo7gf( +O&FoϿ3'_2RzVy:xFVGnB' OvFzʏO&(Vw9jV63og7Bj>Rw:O"O3rZbFbF.FRO)wcR'Ʋ:fs/K*^fv(^ZB?wI)n')SCvJ"3o6&h6{7g)_&>V62hV(3?):~rJSgiN/h6SyG/6K?o.ZjI fN"s? +of(>g?;rR~.F*3Gis)'RS^& +N珆h6swG^?Gɷj&r2Wϛ⻊&h6(+IWk(~ +/i.n8{ vv 'Oww _(KYGVVV#W7KwȸV:r&?)g'Sr ! "F&v^C&'ɛh^G f"rvi7*ywWsf()(rb.isybhw['?V^By .Vnk2>nk_R&_I6H_JWW&yK>ƶWo&c&_Iy&hHbG_hFΉW[nr(g^W.9OvViOr)yV6H9'f.~&HH:W:n7C &w^.zs3F&fv.^og& 6hNn&&877{GwN&)j&bsFfΞ>nxgW)Ffv/9 rf֞ƶ~3V/&OəWZr:G) N>6^?>v[VFsC;rbJ:o;'3&f:FWR^G>.O;WkNKh^ogοff +g^&8bR7I'o(r˞26SFƣf(n6&wbG6SV{W)ƈB^>Ɔں vWG>2kc2/ii + &fwk'bOn(kcB~G뿊FRC_)Isr"WO'rhS[VZhV> +fٷfb6C_iV6J{OƖֆF_Y3hΛ)gY> >w _h2H(/&.!_GF>7C^hC/ɷ vֳN.;&(+io+f2RoWWbB_V7"v.趞"R(JIiNV>"w w>'wb(~W&w+v(FW9)C^Ɔ)?W ^z^.{IVOV&ZgiOg&vF>[is _hfO'ɹ?WsS#r^NBOz +W#_66G/{NR / /)NNZvf/6wn6*WBG.n΋B f_oRVfh2 +V*VV)si7h3O*Gohr:CbgKxv(ydz^y 68XəfN7?rVh 7jXh2giNV6V(WɃo +n Fhx6)O^fG'G^ֈV._II7{o6S'wrn(8 _gggIWFv&R7y3^6V.Gvf(x Ig/fHn7 )WBV興&y9w'f{3"8gG/W6Rji.Nf#{ssrȾGhVH糟sws&^rnǗC Wc;(3w#j3HoCw2NN*:G7WfVNzij¾&h~)sB6x7 CƈvjG F&n))wo2Vƛ)G)X7O_N&֞ +.Jwy9&(VV&Wg~.6V7 7~~V^i‡ ^~2cKIB^*.)ׇ.^7f(8hƿ)?ri_#Co9(6+g׏^Ɩ&7'SnbǹCi(F&o*Cf9b>vg׿7sh8>ׇjiov6rIw趶N? SRNB(sW38x?r'w"v^Ʒ)׃f.^Jw/?)S2z(SJ.'3JfhxG"S'/ RrO)i> +'rww"F6^{zLJ[Wg +vjvV2sWv"OCRg7&'GF +;))FKki)jKcWG +8#^R7I)+~:[WI &3⿞HFR;Og_Go#{*OzWb^r^'n+S_gw_zKS.&ZCNhNKghf^n>Z3G)jwh:#^^('C g;*(H[ Y_f־noɏ"h8VBcG3>VF&+)σh3O &~k +SFh&&{Ǜ&B'6^s۲I?^^3g?O)sSWzSzVgw9N^Vh~*g+"2VZW 痿sNh?:wi6(f^ +^GCoH()gs֖ +/_3'Nhh'r)aYFkHrg +G~hhH6No;Zs +)+Kk^2?H/泇/2{gr+y_&(((WɷgW7F8Ngw&v~nSo_ i†fhH !cB^8`g)a!9oȀ^N?y! BhHVi jΈx(JGW )8xIaZhv)i"6V.S) ^ +nsgW9 '.FFIIG8xnjGV^Vf'9;(6wW{{J v7; VJOo:N8H~Y ;N6z/'wG#F(s") G{fG w:z2hhۇG _(xbsyhh6nɹ؈+F((r))ُ3)IYfVxÏS'of(fG [so˳c.f['f&f{g'ʎhf~B+wG^rNCK;oZ2C3sv RO/RF(&Rb/ +v{?i) ) F(+.&)fv~^&HI((cO.6HZ#7kj.x뿷W7BfFR/sW+&~^FvF7wG3"(vR')VF_3:{"ffoOo_*Ng[2r&(Fc^(.{oKB6VGg_ +s__LJFbrO:6ֶV&bgWi)'.V+"vSgn6G?ϳ.v6ow^hgiKN +v3Ǘw?&hV&z'.Κ~& +OOw&'W3((v^K___gR(>^cgG3ڋn&.WO:+OzH*Wiw^3gWI:FrKJOǿ^FVvjg[;*fnr)G#hƆ){~F&~fc7jf{C2rZ۟Oz*vBWo'.b:OwS&~Fz/'sFjBOOw'_zriO*.hVWiǺ^~^N37GJ~^r[_3fv~~S3Ά&~ig'Bvgg6&*'w;b~33 +* ~__/ZV6niW__r.SoK')3F&2J/NOΚ +:&Rk3'__K* +)3>^sRϗNZۊOcbjǣSoo2R#SOZ>2f&sW3>~^ +kB{z"rzZˇ;/'^2#/K "'?s~wǿKNZ?.^_~s/o[ogr.noGZ2v +#W?Nfֶ.;//sSZ&_ggOvF~#~V6?w'6F GW ~2''~~B.n _gk b&N"J22zOJNz[_Os2:r+rNr +S3/닛JJ2K +R:#[Cn"sS?* :/* +N2r sC;~ڊ{O?o#Rf^b/o_S*^&bO>Z_J>cRr*+ξ23_"6FsoRSG+r{3knnf^K;'OB.O'sK2js +JB.r +sZ"Z:#::㏳S{ R>s +K[;bj;kck"k3 /2n[oK"33/;^3 +/_Z*#:rrjO/S;n~~2[>>㣺o'?bKZ ?crR2;[[k"NN+COoO/:N> +⣿OozrbZ[c: J/ockž&C/R> +b//{c{ J +#J +z"kKk#ʊkc#{">jj###{{;Z2kz:k;3[#K"nšʣc#N*##K[;;;{sK BrZ.:/3+{b2 ++[S;j2^;Sckʂ +bJ #ZBz#/3R>>BSo3ھ&~r+{/sS;+s +#nRkKS3+⋋3cSsCsZ2z"*c;+j* +c#˲Z:jrڊ #22zKK;z[#/KKJj2B{/3JK;;c;jRnRkk +ʺ;Û{k+rBJS'bn"{Rnβ +Sj;ۻ#3{z.*CSn.2jkKoc^+//s[jJ+J +;{*ڢOC +2BbZz:/;Ks#c[Jjj+ +".ˋšJ{;+#K +J{kۃ+j;ښ"Zʋ/c Jr. *zJ*+ʢ2Z""{KkKoCsû{zrrR3O3rR Kc/#rnbK#/#+ + KZrb;jn+ ##ZNnZ+CsKk*c3#ZnN[o+bJ+*CKzn" [#3 * + +++ooSKzR2;ۊ +* J:RZ{J;#kڢr˃skr:C3:rn2zcCK +JˋJ+{zšJz"/?[zΚCC3"~Rs/J*k{3+j...#CSs*ڛss+zr~.SoJ*㻚3cn2+k;;*"R2jC Ks[j +;k*"JKj +ʚ22sۋJ"*#"zk +zb:{;{3/z:S/3˺ZnRR3z;#K* +:b33##*2RS/{rB#3Sj"B**{{;jJ+s/knn.j[3#;*B.k3s{ ++* {kKjZ*jۻJr#s{Z:b"+Û+k +j:b":j [#Kbr23C[k22Zz;ۣk +*K{3JJښʊ #[#:.BJ Zr2":+ã*"Bˣc*j +*3ss{B.2bkC#{ .2KcCsû+ +K##K+kJZJ+ +j[{ +"Z;#[[kjj::jJk +*kjJJ;[㻣jbۋ +zbZzjjj˛K:**CC{ Zb; {+brZ{sSCC2bj*{ zzjˣ[**ZsCr.r K{+ +Ⲳ¢+C *k [ˊJ:kK+kJj{3CKjZz* jJ *˻ +:kkbz*K{ bzz+kKk*j+Kۛ*jz +J"*## +JBJjk +: + {+k +;cC++jBRBkKj +rrZk#K ;K#k + +jKʢ*3 +ZJJ˻KˊjzZ +J;j +j+kKKۻj+ Jk;JJZ;kjj*kKۋ ++k*kk Kj +:bJ;K{kjZ +zkKjz˃#ʻ *ˋ +Z +[{ BbZZ:k#z*kʋ#k +jJˋ+jʚk## Jz+{kkk"ڊK;* +*K*[k{jj+KK*"z k ++{jʊ{{K+JzJ;;K* +z ++*z۳[Jz;{ **:Jjk˛;j +2zzj{[{*jcKz +*k Kj +Z:k{ó{jJJ Kڊ{k +j+K;K[[ + + KzZZJkk+ˊ +j +*KK{+ *JK{;ˊJj +J:*kkʊjkk*J*** { *jk;*kK:šJ Cc{;*bښ +KK[Kz:zkc/:z*ۣ;k"Bkk :k{#3ã ++ +j+ڢBzj:: k{;K;k+j*+{k+zzj[#jk +˻ +z+Kk ʊ +: ;;+* {k+ kJzk{#zZZJK;K + +JZj zZ+˻[#jkb""j[:‚z +C3[Kk +{{b"* [j:zZz {: ;K zk*j +˺bJJ** kkK+ +k[k K*J + *zz{+Z*k;"Z +*+ +k* #*j kZBʊ;k*+ + +k[s#* k*{jzZʺ;[;Z*;c[ JZj;{ +ꊺ:*K K*++*{ JJJ*+ k:+;K{˻;+ +Jjk+; +ښJKK+* j +J +j*k+j*jj k + ++;{["BbڊkK;+j+ +::J {; *;Kʚںj* [J":*{c;* {{+Jz +****j +* k;kz: KK+Jjk{{K˻K*jJ:: +j;닋 +:JzJ +k;KˋkJJjj** + :JJ[#{K+zZ"zJ*{zJj*;{{+*; JZZ"ڊ kkbz#C3c+ +z ; :ZJ +;{J:K {K+ +Z:k#{;*ZzJK*+*jJk*k*jj + +JJ*;{K++ + + +j++Jk; +j{{K{K*JzښJ*[Kjz:J+KK jkK[*zZ: +kk +zZ"Z +k[3[{+z*ڢJj;;JJjk KKjzb +"""*+KK ++*kKK+kk+k jj +:Z:*{{k +J +J** *kkk+*+*;; K ˋ*J:jj + +K +j +* +*k;;k*:zjj* :zzʻ{; +zKꊊ +ʺJ:J**k*J +j***zڊ{{k*""k+kk *;{;++j+Kz;[ˊz:jJjkkˋk*k˻++*j* +jJ:ʊj++++:+*J+ ; *++++jj+ʚ"ZJ* ۣ{; * +* +::JJ +j*++*JjkKۣ[j +:+K *+*Zzjk + +j++jkk ;{ˋ **Kkzzj ;{ K jJʊ+j++*+ ; jj*˻ +ʺj++jkk+jjk+ʊ*+ k*k +kkk+jj**+*zzJ{{;kKk+ k +JJJ ++kk++k *jꊊ+KJ +jKKkj +j:J*j*+* ;;{KKj**kjJz* +{ **+*jj**kjJk k*+*ʺj+Kk*j ++++*j*ˋ**k+k+* +jJzk++kKK k*j +:JJJkK+ {J + + +J*kk*j*+k K;*+* +j+K:z*jkk++k:jk [;kk++Jzz +jkkk;*+k+*kzJ+k+kK +***k kj +**j + ++ k+k k +ښ ++ {; k* +z +Jk닋+KK K+*J** *++ ;KKk+++ +jk*jj ; k ** +"J* [KkK+k +:Jzz +* ** k++닻K KKkJʊ+ K *j +k+ k* + +j + + k**k++++Z"z+ ;ˋ+* +Jj*++++ kK ;++ڢ:ʺj**K{Kkkk+*j +*j +Jj*J˛*jjʚ":j*;;{{ *ˋ kJ::J*++* + +k ۣK *J:J* *J+**k +j+ +z +*K+jk {{+kjzj*kKKk* + +++*k**k*k ;{k+zJ::J +j*jKKkk + + +j +* + +j;*+j:Jjkk˛kKKk+j +ʊjJꊊ++ +*J{##KKˊ:JJjjkj**K **j + + +*+*j ;{{ kʚ + +;K +j + + + kk+*+j+j;kkjʺJJJ:*kK ˋk+KK+k+*J + + +j+kK +::*+jjK;˻ +jJ+* + +j+k+ + +J:J ++;k +J +jJj+*++k+KK+*j++k*jjj*+K{K;* +ښ + +Kˋkk**JK *++ + +jjj kKK* +Jʺ +KKKkkʊ k **+ʺ +k ˋ닋*j++j닋K +J**j*kkj +ʚꋛۛ{{;;+* +J*j +j*kkjj*kkkk +:j+Kk k +:Jj +k k***k* ˻ kjjk+ ++j:JJ+ K ; +J* k+kˋjKk: +JJ: +kK*K ++* + +j+kkk;K** +**j**ˋ + +::j;{{ *jʊʊj +J **+*+++;k:::jKK k+k + +JJ*J+kk k k+*+J::*k ; +:z: + *+k˻;k* +Jj:***j*kkK{Kj +J +˻kk +j +* K+JʺzJ;KKk k+jJJ + +j+k+** ;+ + +zJ* k+**j +++*k+J +k KKkj ˋ** +:J* {K*J +k j + +j***KK+kkjjjJJʊk ;; k*j +*+;; j + +*j Jz* k+ ;K K*ʺʺJj +jj*k*kj +jK{[Jk+*++j+j* + +j+;kk*+ ;k +::J˻ +*jjk* jJ +*kK Kj*k ** +JzJ+Kˋ+ +j+ ;Kk+ + +j+k+* +JJ*kk+* { k +jJ: +j + +*j++j++k{{ j*jjjkkj +j+jk***** +J+*+KKj;k + + +:z +jjk+KKjj+*j++++Jjjˋ +* ++k+* +J:ʊj K* +* j +Jjj+**kj +J +kjjj* K{KK+J ++jj + + +*k+;K;*+*k*+Kj* +ʺ +* *jjJ++kKˋk+ j* Kjjʊj +k+*+ j+++k+k +j k+j+j ++ j +jJJjkkj*kkk k +j+ +j++ *k*j +ʊk***j*+***kk +*+j + +kj*j + +++K k*K +* +z +Jjk k* +jJkk *k*Kˋ+ +jj +*+*+jjk*ʊ** Kk*+jjj+ +jj* * * +j+ +j**KK + +*jj+* ++*+*****++++kk; +**kk +jj + +j*jkk++K;ˋ+jj +ʊ + +**+k*ˋ닋ˋ k:Jj++*kjkꊊk;{k +j*+*k +ʊj +k*++*++** +* +jj + ++* +*k**j+ +j*j+++* Kk*jj +kjj +* +z +*++*+**KK닻 k*k*JʊJjK *kkj +++* +K ˋ+jjJJ +**jKKk*j *j**jj +kk+ kj*jk*+*** +JjK j +ʊ* +j*k k ++j**j*+j +kkk+Jˋ˻;ˋ*+ * +*+*;kKKK+k{C;K +¢zK[ jjjb +˻Kj: [{KKb +ʚ +KkJ* "cK +k +ˋr:#:j˻šKcc["ڋ* ã‚Kk z + k R2k +zKۋ3C+{K;jBr+* 3s;z;K{+Z"zJ#+BKjZczss;Zʢ[c+B #{J:JZZBbk :ZkZ+#c2:J{bJ+{:k{3""*;;:jb:"j3ۚj c"3zz*zKZ:s :*bBJcj[3ʲbZcCzJj3Kz+zbJۣ +Zcck +Zz{Ëz sCZ:cZ:Kójzk*+JJjz"{C:ʋ[k +{Zk#s*jk#zz +K#3[z"Z"+; +JjK[J:*û +;3+k* +{";c*J +"c+ +J+Jk{J":C +jzj; +KsCk +2{{ +J*;sJ ++:{K +:볳KJ2zkó+J"꣣jJJ#zZJ;""sjkʂK + C3"r"kۛ*zcK:z*Ꚋ{ ʺ#3ck +j zZCJ +k{kJJ{ +z+*JK;jz;[:+"뛻ښK#jz* +" kJJskZ +K*jڋcjZZ"냃+:kk ++[k +[**+Z + +Z*3ʋkJ*[;J#c"K{{ :k *jK +Sk +Z*Z˺ +jZzzs{*kjzJkK:ڻCj+:+KJZ3jjښ*K;s[+k*j* {jk*k +"b# ;˺*;{kZ: +kjb#K JۣK:b**:jjZJ*;2[+KKjK{KjC kz +ڲ +*zJ +J[kKKjJJ + rZ ;+ +J뻻Jz{kkz +ۣ+;kkkJzzjZ룛kk +zJ+Kڋc#Kˊ:+;[+b+[z"ʋk"꣣;K+jk#" +*jJ:Zzj +"#{kjzʋ["Zz; *J#{b:k::k2b{+K +; j"ZK[; jZZ +;" {;K;+ +kKKK*:ZK*"K;+"b:kb{[{;* +bjK{ k*:Z{#{ jZ:[+{K;+:ZZ{:"J +jʚ:k +#*:"Z +B{{K꺢j +KۻKjJ +";K *ZJ +{;JZ;뚚Kk{j{{+:Z Z"j{;+Jz[zK {ʚZ;+"j{{{Kj #;J*K +zZ*Kkk * +zZ*#[;*JKz˻K*J⊛j +˻+*JZ +;{"k ˻+*" + +z닻{k*:k*+J;{**:z+ ;KˊZ[z {KkJb"+z;{ ˊ [:jKJ"j{ zJ+k KZ{KJ+{ Z"ʻ* ;Kk jZj; +k˻K;:J;KJ:+k;K z"J :+KKk"{{Jk {K K+K:J+k ˋˋJ"zKKjz*kK{K +z˻jzj* ;Kb z*˛;*z;kJ*+ {K K +b+Kʊk;˻Z* kk;{;; +zJ ++ˋ K** +Jjj {;{" +:JJ+K Z +kJ + +k{;{" +; +j; Kkbk j +{:":jJ;Z: jJ:*;K{KzZ * +J*K jz ;jjk+;ʢK*:z +kK jZˋ ++{[[Z +k: +k*;{*Zj k+jJ˛;[#ZkJz k*ۋzJ+* +;Kk ڊ kjk;+{k":*kj::j k;JZ+J+ {Z:j+ +:*;;z+:K k{#*zJ*k+ k* Zz** +:z + k;[*z ++kjJ; *ZZ:* +: ++{*zJ*kjJjK ;##z**+*# ++j: + #˺J+ k+J +k;kzzjkkj:+k+kc;zjkk*ʋ k{; +*+jJk k[KJk +::*k{:jK:j+jjK{*:Jjjz*kk뻣{*: + +K[*Z: : + +{kJ*K J* k;K +:k*zj+ [ +zz + +j [;jJjʊ** +:j +J*jk[: * +j+k*;:+kjkk*{Kj + +j[ ʊ j:j[뺚zj+ +JJ*k*Kk +: jkkj {{+z:+ +: +j +k{j:+ +뻣#jzj+jJz +*j;ˊzꋋ+jk#J+ J +J{+J:j + +jj+{J: + +j++*+;j*˛;kJ ++kJ +*+*ۻjJj:Jj +Kۛ z:+ʊ*j{Kj +jkkj++ +k; **Jj +;;JJjk+k+K[:*jJJj+J*KjJJjj+j +k{[kj +* kJ +* +:jk *+{;jꚢj;{k +JjJ+ +Jz*+kK{:ⲚkK{#cKZrrBjS/k.n2*S#B2rK[sk +s˚²:*{ʚbZksKkbK/sc*r.R +C+"22jSS#{*rr{3s[{:BrrBoo[nn3{JZbr;s3zr.R*c#3*rRr/r:KCc#˺ZBB{s[krZKCS[rrb 3c +¢c Jz"*#KJZ2"j[3#{zۣc# +r2":k[[ z:Z*#{jºs[+rs B[˺z:#c#; +BãۛZjcs3r+ッ+JzZ +##c:r2kc[ +brB" +K#s{ +bZ*;[#ʚZʻ[j"+c3 ڊK{[3[BZ +KJ"zںK[c +Zb*3KZ2 ;jr2bJC:Z[s#;ڲRrzC3#{+Z2r2Z+CCKBbk3c;zK#[{br[JⲲj{cC3[j"*K[Kj:z +[[J"2b*۳3K +b:+ #CۊbKZںk[c#j2"*33c[;jB2ZJ*K²+{#{kjkۃc[{k:brB#;jz2"zC;"jc#; +zJ +"rrjÃc[ˊ"B"k[C[ڂ [;:z:z ۛjZ2r +Ãc[K*ڂ˻+ZbZk#K +Zzz +[cb +3[;b2J ckZB"[[ +zJJ[2r"#;+B+Kc{ZZk{#j:z:"B2k[{kz"Jk;cjZZz*k[Z::J+K[+:Z2b*CC#[ +"" K#{jZ +k{[Kʢz+#{:룳[{k"bz* K;;jZ +{[*:{cc#ʚrzK JZB + K#Jz #czZzʋ[ z22Zkcc#{""˛{Kb"zj˛#K:Z"ZzJk#;j²"ۋbkKK[Kb" Z{[#k""[JZ K*z" ++:zk#c늚bBBzKۣbZ #ˊz K#˺ZZ k꺢B#JZZKK#ꚢ:#[JZ"Z [*bBCc b"Jk;jz":*K[#; +Z" + ckjJڂ*#{zbkk ;K:Z+K[{**[*JBk{kjzₚ*kkK{{ +k[ ""jK[{jJZBzj#{  [[*b:*;[ +"Kۣ*jj[c+ +*+k{KkJZJ + jڢj#ۻkZz +#[ *zb"+k ;Kk:ZJ*[#{ʚں*kKK*꺢b:*; b":kKjz:jkK#뺢Jj+Z"zj;ˊڢ K{{jJ +Kۛ j"ں* [ ښ + #{zZj* ;+:z: +j{+:+ {[{*;Z:j*k K+J + +j { +* { Jzz˛{+ZZ:j+K;{ j +*++˛{Jz뻛+jJzzK{ zJ;;;kJzJ + ++{ Zj*K; +jzۻzZjkkKj:: +* zz +j+ۛ;+jJ:+ZJ kˋʊj+{kJz:j+{; *:z:;;jzZJ K K +*kkk;:Zں +k;J:z:K{ +z: +k;Kˋ*J:J + ;;kJZj뻛{K* +:K{{ +zz +:Jj+K*:jK{{Kk* ;;;jJ+ Jʊ*+ +jj*;{k +:zJKK :zJ+ +jkkk;Jzj+; * +ʺj;;;jJkKK kJʊ*kK +zzj+{Kk*j +*{{{;k + kk*ʺJ+{*J:j+KۛKjJz*K;; Jk jʊ*; + + ++;;+j +J:: + KK +zjk ˋ+***j+k jʊ + +jk jJ +jk{[; +*+*;J +Z +*{ ++ +B2z*3[ RRڊCOC +"2nNRKoJZ2ξrj3/*[SO3.rJSOJBʣ_{+_g*bN&^n''{^fR?gg{Z^NK/__B>f~bo'g_/Bfr/_O.&>s_/ZK3_ +f^.o'_ +rRj?N2*go&Z;/_'S벞f&.*_R^f.{'g.^ +#_^^:K3sN~+'O[Jr~&~B +[_'j^+O'/^^jc'sK&^nz3k2^>rK/'g?~R{_oj.^^º{'o#>*C'3N^R3jrB: Scj2>*c_?sn~.Z +ϟs˂>Nzs#+> +[_nJ;/ۺn~>R +KB*?KB>~n+S?/[jrNN.O[N2:+OOs~Nr +3?#+b: /+rRzj#?{n~RbcKb2sKN"o>;/3{." +csZZ3˲2;/*r>./OS#JRc3[J.>r"O3Kbξ.Bbʳ/C NN.2{oSCk2B/O/#:R2z#osznNnr"SsKNRbk/+NZۏOS.nrʃO[nrŠŽbko3NroJN.ZϏnBc/R2SOo3nn.R o3jRΎR2;oúRn.rc?[n.2 +//;Bnn.R3Ϗ3jrRRR"/Ϗ3 +n.ro/RRR[/"R...k3oOonkúr.RR";Cr.2 +SooZR.zoS ..SoSR.{soOrRR{3/r.nn2 +#sZrRR*/ϿSkrRnb o3n.Z/rR.2ʣsOonnBsokrR.b+[O3jrR:soϏ#JJC/..*3 ZB.;ϳj.n[scBr.n:;C/{:b2R.*[sO/Z2RR"*3Cn."ocjB.JK#So +R.:K/sKR.ʻKz.rsbrR"/[ZR2ksoS +BRRb3sZRRb +CkzRn3#z"2Bkc/ +R.J[3K2.bJCZ2*o:R2z*soS{Rz*[;BRrZCoCK +r.r"˳obrR2Z +soSkR.:/S*zR[/o32.R//;rR2ZJbrR{ss+J..2ZjSos+r"3*2Rr C/s[ˊrR2KsoSJr2#[ʂRRZS/+22bj//{+ro*Zr":K3/s˺rrBS/ b2rBkC/3[22b*/S{Z2rڻ3;j"2r" +/oS{BrB +SSCrR*/SC2b:so/3[+2rr2/3[brrB:s3{Jr2Zk/s#z2rrbs2Bzs{j22J/ocb2r2 +ssCKBrb*3k22Z;s//3+rss{j2rrsSs#˺2r2CSSs;:rr2Cj"B2rrCsCjZBrrcSC{ +rr[sS3[+BrrcssC2rB:sSS3[jB22Cs3;Rꣳs3Jr2kc/Sc 2rZs3kzr2z;Css"²r3SS +ZR*#3s3 ""+[3sb22SSk:brR2:33{ +"r33cKJrrKss#JZB [Cs*rRzcs3cjzbrb[3SSZr*33# BR"#3sC[뺢2;c3s[+rJKc33Kjbrs3;Z2s3cZBrZk3Û+JrRBJK3{+brr"{cjrróCˊZ2R2kۃCۋZBr:cskʢ2b;#CKzr;3[k2zs3KjZ2: C;+brr #3Kb2[Cs3#+:r2*{{+JrzC3c{r2 +{Cs3b¢# +2B#;ڂK#3*‚ +K{kBZj{C#;+JZZJ [C{+"Z +;;*JzZb;+: + C;*:"ʋc+ +:" {;kjښJkc*:z +{ۛ;:*K{;+ +J:J+[;jzzj {; jJz{K+ +:z: +k;{* +:j ;;KkJ::Jk +J +k{{; +j +J +*k;;jJ::j ˋ*j +J:J*;K +jj*kkj +J* k+jjjj +j+k KK k+j +*닋k+jjj +JJj+kkk+**j+kkkKˋk+jjj*++˻jJ++KK+Jj*k #;kjk;K+jJڢz[˚rR. s/C;z2..b+SSûRbj SrRBj3C+2+C{k +"c*"BK33[ zb2*[ rjCkz"r2#c# +ZC33{2R.r:cCCCbJK㳳zBbj#cr +C;z2r+3K22b+cs#BB233#ڲr +Ccc;Jb2K333#*"Bz+[#; +"B[ãZ‚: #kZš+{[#"BZ;{[ˊBB";[c *J"*;{[ۋ:bjK;;jJ:z [* +:zK[[ +" zb +:"[[+¢++bBZ#c+"Zc3#kbj;[#j"‚J3#J"b +#sÛJZbJ ;K +Zb‚+c#KZbb +J{K+k{[kJb⺋{ۻ:ZJ;[Zz#J"":k {[* +KKjzb"+ #;"‚;[#{ڂ ;[ +ZzKc#{J2"kÃk"*c3C*bB*[Kj;#K꺢JjC +Z +*KkZZ:+K;kJZbj* {{K+Z:j {+bJ ;k*zJj [kz +*K[* +: + #ۻ+ʢJK[#kZb+;#c# +"K[Ⲃ + [c"{ã;kB":cc["2bzkcc[;+"+3ãKzj{c "c[b[c#[z ۛ˺" + {;Kj{{jz +k;K Jz*˛Kk*:zk;ۻ*JzzJ{{+z"Zzk{## jb:*#;zbb:k{ J"z*;#c[:;{bڊ;Cc"bZ#c[Kb{[[["bk[ccckJZ;[[zZbj;{{{J:+;[ +zzʋ{{;{;*:+{+ +zJk{{{ڢںۛ +ZZ:+;jzZ #c#{*z+{[[+z+[[{*z"bz+cK +ZbZj;[[#bb {#jb";cÃ{+:""k#;*K{#ʚ"z#[KjzZZ:+;[#+JZzj ʚ"z* [*zJ {{ +zZ:K{K*JzJ K+:J ;[K*J˻K"Z{Kjz ;#kJZ:kK[[*:z* [{Jbzk[ccKjZ"k;[#Kj"*#K*JZ+Kcc jzZJ*˛ۻ*J:*[ jz"Z: +K+J +j+Kkz"Kz +j+ ; +ʚz ++ ;{KJ +*k; +Z*;{ +:: {[[k:ښJK*ʚ"*kK{K+ +ZJ jzJk{zb+::j[# +Z +[{ *:"":{[; +ڢZz #K:z:jk Z: ++{ +ʊ*{;+JJ +j뻛;ˋj:J*+ K ::JjK;K:j+{*:Jj;{ +zz +j+;ˋkjz: ++˛jzj+{; jzZzJK{ +zJk{J: ++KꚢzJ;;kJzjK{ J + Kkzk;;: +K;{{K* +J +k;K +JJ + +jk k +::ʊKk +J*K;;; jJJjkKKK *:: + +:J+ +J +ꋻ;Kʚ:+K;;*Jzj+K{:k{ +ښ* K;{*z:+; +JʊK+JzzzK;{K+J::J;{ * +JJjk K * +J +*kk +JJjK;k +j KKk +k ˋ*JJ ++kk+JJjkK;{{;k +:J K *:::+ KKjJ:Jj{{;JjK;{;kJzz:*k;;kJJ:jK* +J KK:zJ{K+:z: +*k{ +jʺj+ K; + +::+k K +ꊺJj k +j*K +j + +j* K + + +j*+kk*j +*k ;KJ +kkk ˋ +JJ ++k kj +J ++ ;; *j +JJ*k ;*KK * +Jʊ*kK*J +* KK +Jz: +kK{ JzJj+K{K* + + +j+ Kk*J:J ++ˋ* +:j*; * +j+kˋk+ + + +k*j + +j+k*j*k;;kJ +*+ * +ʊj+ j+˻ +Jʊ+k K* +z: ++K k*jJ +j+kK{* +Jʊ*k˻k*zz:jk;*:+ {K*j + ++˻ˋ*ʺJ +j JJ +jK;; +ʊjj+ k*j +jk k + +j+kkk+*jj k +j*kk*jjjj +j+k*jj*k˻ k+j +j* k*::j+kkk* ++K;Kk + +j+KK +:J* kjJ:J*K +jjjjk jJJ* KK + +Jʊ*k;k + +k ˋ+j + +*k K j + +k k*jj ˋ* + +j+닋k+jj + ++kk+jjjKK k+jjjj+kk*J + +j+++ꊊ+*˻kjj ˋ+jJJJj+kjj+ K;;Kk*jjj+k * +JJ K +j + +j Kk*j + +j*kꊊ + + +j*kk* +JJ*kKK * +j*k Kkjʊ+닋k*j + ++k k+*jk KK k+**jj*+닋k*jj +ʊj*+j*+++kk KK +j*k k+ +ʊ*+k+j +*k K*ꊊj*+닋kj +ʺ:Jj k*j +ʊ*k K;;k+ +j* *j ++ +jJʊ*Kk++ꊊj*+k ˋk* +j*k + +j ˋ*ꊊK k+*j + +*+kkk+j +j*kk+****++k Kk+ꊊj* kjj + + +j*+*jj*˻K *j***닋+ʺJj+ +j ++k KKK * + ++k j + +* k+*j + +j+˻K kk+jjj+kkk + +j+ k*jjjj*k kk+jj*kˋkjjjj+kk* + +++***+k kk+ꊊj닋+** + +j*+++**++Kˋ****kk+ +Jʊ*kk*jj*+k KKkꊊj*k*ʊjj*k*j + + +j˻ *j ++kk +kk+jjj k+*jk k+*jjj*+kkk*j + +*kk+**+kkk*jjkk*ꊊ + +*+kk+*** ****+k*j +J+kk**+ *jj+kk+ + ++kkkj +kKK k*jj*++kk+ʊ+kkꊊ+k +j +*k k* +**+kk* +j*kk+*+++++kk+*ꊊj+kk*jjj*kk*+k +*+++++*j +Jʊ*++***k k+jj**j + + +j*++**jj* KK+jj***++* +j*+k*jjj*+ k*jjkk*j + +j*+kkk +j*닋+**++k++j + +*+kk++*j +j++kk++k k+******++**j + + +j*+++* kkkk+****+++*j + +*++**+*j*kKK k*jjj*++***jj+k*ꊊ*+k k+jjj+k +j + +j*++*jj+k +**+kkkkk* + + +kk+j + +j*++닋k++*+kk+****+***+*j +ʊ*++kk+++kkkkk+*******j + +jj++**+++***+k k+*+****jjjjj+++*j**+k * +j+kkk*jjj++++jjk *****kkk*j + +++k*j + +j***닋k+**+kk**jj**++++*jJʊ*kkkkk+++kk+j*+jjjjj*+++++*+kk +*****jj*jj*+++**** k++ꊊ++++*jjjj++**+******+k k+***++k+***j +*+kk+jj***+k*+++k+jj*+++***j + +j*kkkk*+kkk+*++jjjj*++++kk+++kk+k+****jjjj*+*****+kkk +j**+***jj********++**+k++**++****jjj*+kk+***jj***++++++*+kk+**j**+++**ꊊjj+kkkk++k++**j++***j + +j*++++kk++++kkkk***jj*jjj*+**++*+kkk k+*jjj******j****+++ kk+****++**j++*++**+++++++**k+*jj****jjjjj*kk+++++*****++++ +jj++++k++kkkkk+****jjj*+*++++kkk k++*jj*****++kkkkk+****++******j****++*****+k++++**+++++****++*****jj**+kkk+++++++**+****+*jjjjj*++++kkkkk++***jjjjj***+++k닋kk++jjjjj****jj***+kkkkkkkk+++*******+**+++++*+k+++**+***+****+***********+kkk++++++**++********jꊊj*++닋k+kk+*****jj++kkkkkk+++*jjjj****jj****+kkkkkkk+*******+*jj***+++**++*++***+********+***+*****+*+k+++++**++*******jj*++k+++++++******jjj*++kkkkkkk++**jj**j***kkkkkkk+**jj******+kkkk++++++++*********+***++*+++++++++******++******jj++++kk+*++++*****+*jjjj***kkkkkkk++++*jjjjj***++kkkkkk+**jjj******+kkk+++++++****jj***********++++++++++*+***++******+*j++++++**++**+**++*jjjj**+kk++k+++jj**jj***+닋kkk+k+++j****+kkkkk++++****jj******+*++**kk+++++++**++***+**++*********+++k+++*++**++*+**jjjjj****kkkkk++k+k+++***j*jj***+kkkkkjjjj*+jjjj++k kkkk+*+***jj*****j**++*+kk+++***++*j*+**+****++**+++k++**+**+*******jj***+kkkk*++k++++****jj***jj*++kkk++k*jj*+***j+++kk+++**++jj**++*****+**kkkkkk**+**++*******++*++**+**+**++++**+**++**++**++**+*j*****+*+k+++++*++****jjjjjjj*+++kkkkkkkk***jjjj**jjj**+kkkk++k+**j*+*j**j*+kkkkk+++*+*jjjj*+******+++k+*++++****+***+***********++kk+++++**++**++**j*jj**++*+kkkkkk++++**jjjjjj*j*++kkkkkkk+k+**jjjjj**jjj*kkkk+++++*j*jj*+****j++kk+**++k*****+++++********++++++*+k++++**++**++***jj*jj*++++kkkk++++++**jjjjjj***+kkkkkkkkk+++*jjjj*jjjj+kkkkkk++k++*jj***+*jj*++kk+*++k+**jj****++***jj**++++++**+++*+**+++*+*j****++**+k**+++++*****jjjjj****+kkkkkkkk+++*jjj**+kkkkkk++kk+++jjj****jj*++kkkkk+*++++**jj***+++******+k***++++++j***+++++*****+++*+++++*****+++*++*j*+**+kkkk+++++***jjj**j**++kkkkkk+++++++*j******j*+kkkk+*+++++***jj*+++*+*j**kk+***++k+++*j*+++++*jj*+++++++++*++kkkk+****++++++*jjjjj****+++kk+++++*++*jjj*j**++kkkkkkkk++**j**j**+kkkkk+++++*+*jj*+****jj*+kk+***+k+++**+++++*jj*+++++++**+kk++***++++*jjjjj*++*+++++kk+++*++**+++**jjjjj****++kkkkk+++++***jj***kkkkk+++++*****j*********+kkkk+***++++**jjj****++**jj*++ \ No newline at end of file diff --git a/tones_american/password_loop.isdn b/tones_american/password_loop.isdn new file mode 100644 index 0000000..ea81ec7 Binary files /dev/null and b/tones_american/password_loop.isdn differ diff --git a/tones_american/redial.isdn b/tones_american/redial.isdn new file mode 100644 index 0000000..02a00df --- /dev/null +++ b/tones_american/redial.isdn @@ -0,0 +1 @@ +*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%% diff --git a/tones_american/release_loop.isdn b/tones_american/release_loop.isdn new file mode 120000 index 0000000..02ded29 --- /dev/null +++ b/tones_american/release_loop.isdn @@ -0,0 +1 @@ +dialpbx_loop.isdn \ No newline at end of file diff --git a/tones_american/ringing_loop.isdn b/tones_american/ringing_loop.isdn new file mode 100644 index 0000000..3533479 Binary files /dev/null and b/tones_american/ringing_loop.isdn differ diff --git a/tones_american/ringpbx_loop.isdn b/tones_american/ringpbx_loop.isdn new file mode 100644 index 0000000..2c1b7ba Binary files /dev/null and b/tones_american/ringpbx_loop.isdn differ diff --git a/tones_american/test_loop.isdn b/tones_american/test_loop.isdn new file mode 100644 index 0000000..2653a53 --- /dev/null +++ b/tones_american/test_loop.isdn @@ -0,0 +1 @@ +*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$*%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%%*$$+%% \ No newline at end of file diff --git a/tones_efi/die.isdn b/tones_efi/die.isdn new file mode 100644 index 0000000..c354001 --- /dev/null +++ b/tones_efi/die.isdn @@ -0,0 +1,15 @@ +********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************KKKKKK***KKKK*j***+***+********jjj*KKK**+*******+J*JJJJ****+*j K++Z'gF~~!ۈFiJ(aO.GFV69KOg6 V9J8s* V&(O9)a(Fo7'j` Z '9HHa78KZqr*j /!sG غimYF s)/9K`3.')8 .~KsXlȎaq )I*YAoO9iAiN7FW&FG)X`6VZ) ˰ƁY3Yh6&(F;NW9&g@'9 A&&XLjg7~AIghGg!~p/@ƉW7cF`a'X6'gF) aGNF1Oa؈V9 A&NA*&iڸFKZJX9r( Y)!roi~ar./K*).'*yG9&ؘqi0VV'Ƙhy!)憰&aiWN.V/G'&8(a)Yh3h/8N Wƈ&7i)VhVXW!NV8G/V*NG*~~N O~!Y aGVH~WV76'8 cۗ9J r)h7i38n7?^8iVgij`F )X7g(6  Osp9ga)o'8 9VaOOFRrah)ƸXX'هFh/*X7w`v7V&&(6VWA!'*VNy) .Hx)!q*x ~qIFKhGI[jX[Y V yH~kqJ..OV9o'FXioZ(SI'X~FX/6&aW:6A8X7X a.i:NO7h.H9g3F. YXІ)*O* ڈ@V6gVo ٙGosW!~rXo~cqyJȖNNYFK'ؘh~Wi) G'89/W9Hw('!Y&0i s` ZV6ISy*X63sY 8iJJ*Hg/ذy*GY'96Vq'i/O'VyY&`*i&W87WNǗO jV-&6`h)g9 @Z( F)Nh&o/g7釙9VNa)V/o&K9qYX ǹ&G j)Aa@onIVY~؀n!i9~ȸ) V9˙Z8i99'~1!N(V9VF9)ha#+g&H~q*g1N9ǗoXhH a N vFW1!H)cFNO8VNYq/@Vyyธ'ٹπfZFɋ:)!!J~hrVFi!99H)G~g609))H(* HV'ySr,hsFX`n1ODZV3W`AqᆈȈȇgqaF`i~.f  H&i)&hi3X8XA˸8&bW.'a p~)y &)9aAW p`Z^)Zy X) FX)YY H(y)33ˆ&g)1Y0иg6 O'X9726 (鉖GV 0y!rFO&6(i8ȈiYYXH~yѱO*/7?0)h)h0 K1opЖ737I,N9ف& +GCilG 9Wv(/(+!a7ИcGg9C/YI~+Npya3VI.H@.qȸָ~ g.!V@X7AqIn6hamF8FADZwX`(~aq0bshqg 6Whr9X(`o)VVAW!q`(9Wj9H, 9wi/*!'@0Hǁ 7/FpI 998Y&'qh?0q9fX؀9f VpϱmXֆX#fhז&/qNr7 SNa196)9('aƀ@O1ؘNyg99Opl(W OX XyvY&/ ,ƁG!' (yI.G&g90a h23XNXHIف8`VA' *f(7 @HRj yhAW 'aI7SXFg9y)y on(Xqa`عOn)nIـ )9) @gٗi#8c&6O@9ٙ/0؇3R;~s ~R>V?fX!a^X)φ!hfx΁F&&V(y֘66F.GqظK)ayvG'6nFoF6kgsn!g `Fcy~†~wIw9)/N_(`6ɇ`ZONF/h!W'~h/!aiZO)N~ii>N(K6y Y "66XX!y6~f( .VVnHhG'Hf)Y~vh/)OW68rJ&Vؖ7WG .ظ&97:gV)_ NV iW7&i)))9Vo2NYa ivFWWK {nNIa9Wg`39Obv`(9 )i" 6yi&f@h'9G.&. K>I)V V(& y/`wi VFFY)o`{'?ف98Hə&h7Gac&~V8:'7YI/r9)" Z7) HV˺Yy[' +NؘG9YI "N iXVV(hƈr9ɏof +I9F3h.Iy/((~#>ɁRhV8'g)b(Hfy&VO 6V.k&(GOV 9nI9>.>>*&7bƸ!gn8V 9YG& )VV/K![(i g'`FWI7& 'yw'yvFB(nY)@ ) o?s~7Ya36{y n)bKVHٗWpF~87~0g Yqp)NفO) !@Ѐiy)yi)yN9`l'V Y- a@`p~O91G*l7Wi9& X/&hy !!)V@I.VHaa9aHliINnVZcI V@`YVZ,n6˱Y(cYXIFry9FhJ!XWAab`jV gW>KaNc./ya&F!IV`ac*1G*XƁqG6@)XF`W'io@Wv7HX F`W9HV.I1!Ⱥ8ڬ W19Wg~AN()FN / ~O ha9 +'WqSZ'Vi 9FGooi2YWI@y)hiXA7OGrV0 yWy)igǙa' G!V6hi- 78&syW8oN@h*` +'h(j9g.aVp_((!@hpN +iX!F1:li*Z!)VAYhH!v șhl9gI7`92 +9ۙ0VCA(a hiVX) Vo^@a^?٭FNɁVyFVV0>Aج68 )@ 9'hHvyIq1wp,NHmb``G9a l~7yX!V@a)N hy'WlGG!NI `~3I869qh Z/@iYg و; 66Fys(9.!AN:p: F8.iY193J3WFI9/A1Xo!YÂV@VI1 X).iw7y7~9gg .(GI9^ v2W?gV~qwGp?O'X!yiNqygi~Ov qJv0g9V!iCH8mwX*i.hO၉va9S(F>蘈&3N)fgpf~Iq)RV>'Ap yGɁ(GaX9YV/8,.k.f9WُRY9[ V)~;G8`8~((8*!Yn (Hy+Iw膈39qhN^Oih)y_p3aq)hƉF+V')qw y .`ۋA0Wo&YIn9I !OXky9O8 OR& O g+VyaS)+`ñFo)ٞ6hinYR3X~`_:Gy!x@JY9ni.f*1h9W)9 vFa9)h./ +czGq ȉi^Kjc`VGcGXO )3Gon7ؖNygOۿN Y)h yA)v 69&JfwyyvV)ff)(&!2h+y 7VNO_V~hGZ(Hvy&'6yS`n7NXF*)/ 8?/7g(36W**ag NKsI'F?!9ZV*iGJh#ٙFgXa0N&Y)GG&ig&9)V28Vn'a)@o')Vx/Wɸ( && H&ۉwayhN&AoK!I~ko)HX89y(F7i@ȉ!A+(['(IZƙg^W8hAǸH( Os&9s~`cKk Vh2! X8Vg .IVJgNXǙy36X37yiJ!~i/Z6ywFX&!Z K*9+XGYRV" 7.!JXVyA38+:Vs!wH(iy6/c&VoA.X~9 )'H&FY.NFroyy(hS'Y/F())!)Nx.R7'[{o8`FY w&6.V))9ȸ 6)i/V3J a)O. w+g *I n6h8"G.*7G)iZ.ظgIoGV.F.J)'ۖV7)GN6V7 /rȈ.Ǘy(n# 'c.h62*I97&gGɟHVc)&FN&/ 2X6N) )J~.6膻Gy[86.K3Go'Ooɹ6.ZZwO/7gڃFrb6&Grs'i7..&VV g(N/ I7~~7WG3KF&67(Fgin7)c&Ny6&//~~yON6~Y&~.s&VoIF3)~&)/6ۺ' >F&++ 7gsJ7)(Zic Vcc og.XKgw*sho9*G~ ~7Z) F/VW 9')nNOق+*V*G*Gy7+VhHI!g3h*(/Wa36/7*)O&.K)KKF)G'闘*&7)GV"WvG&vVc6.''W(NK9GVO–. 'Yظ.gJjN7gX7/Y3F.W6WHVF9O)g(V&Zh)3O&Z'ii VgOHIZ9*JYi'KZ~Gr''yVVO9Z)&y7WGFk*V(6))&jJ'N!iJ`GJ'Y'V(Z&'IgɇON'6)~済W)*i&Vv7i/.Lj +6V~hsaWG&N36)vh)7O&.I~nh*y97(OY9iFGicy8SGV6NgrV)I7/8.N2IO*V NVfJ7 9HF[/&gW~O (؊/ FV/iO& ')+2+7ov9WV3 .c3 //`{)Y~bNVViW79k2'.VWy*hSgۆh)ar*S gV.G&oƖVJy.Vv&~oo3H K &ǏfFwr86/7Oϟښ'G'FXO ȸ7/>zGXVo iN*h(Oi)g~g)gos*36H9yn(gc))&I OZ*N.99g~V6~3gJgVV6r7y6V:2iy7H s6'F&gƘ3G_3~*7G[wI9GF( O/7)&OWgrr*F)))&HȆ''o/sj(HGg#rvVZ3Z.'i)oƈ~73cʂN&Vy~V~77")gfh&y/~+J)9HVƏI/NZK~~6*9((V/g~(VNʗyV&* +G)gH;G7Nc.6.'&VOoOsOO.7)s3s2~~oW')g +c*~O))fsZ7'6HJ)9W*2/[&g)WږV(G3n23zkNv)gN.g'&Nc **O77Vo'.Oo~F 7*O'G/6H6O)sFKcN.&~7/Vh(gO:/c˖hwWcVOJO'NVF3ig.rc&7˞6Ȇ'_ 3nJ fbwiOcj./+7O+/.JGffVNSg3'Vb*iI*2/OrsggF/W7[r**&coWjVgZ**On~.h&2s'Ks&gG.K~S/V/GO.rF6n'o~&*[OOV'g: jƎ3i)J~hcGo'+F&G7g*v&OO.*/ON6rO g.*rwWNV&&/c:/.f&'G)&Jo/cG/.F*3)gKc.F/c/GosF./s'*Ks~/GZ.rj*~ Sg'V.3ggc3N2JLJ*6~/K3/KZ3ggOJrcj/go.oO.N*ʇoJ~N/'3*NgcN/KGcZNO/Z's&r*K'/~j3wcN3*oO&'***rNZ3cOWg&KO7*J&&:cggg3NcsoOJNJos7/.&JJ.Oos/6/'g{~ڎ.›g3OOK*'.N.&''cssR&.RJZ&~O/oOB~.ZWG.N&./[c*~&)2r.Z*c77/N~37o:"NZZZc)gG*K/.&~JK~.NNs/S6roG/NN'OOZf2*O'3K+6'O~*.N*g7'oGO3oZ~6NK.F~/3O*&)'JN*/*G&67*rJ2.g./oOKN..ˇ'*Z.&~c//'GN.*O N~JsGON~JJKs/'N./gGO.&. .~3.VV./g/*j/K~NGGn./OcJVN/G'/ZZZS33F~/ +rJb&b'GgsJ~cs/ON&JڂNrǗgFNg'sJ/&~rs)Gr&N*S//O~cK3O7G6&O'O.ۃێ./GJƖsKs3sZ6O.Z*N+gOK.Fr//crZ&*G**ZNˋc+oOZrGW.K*O7W/&&'g2~sK.r/r~jjcO.Sg.~JgGsNJ*J+GccsG'ZJ*/rڻ''FZZj3oSN3/ZrKO'چ//K*OcJ/FFN/WF.*ooN'*N.GGK./&*N&*/J3/*.NWo.&Zs**nN&O2*ZJJr˺'OK*.:JrK/*OG/NFO/''*+~*sV~Oo*:g~66GLJr.jcgo(&gǏ**../N&JgZƞ33 cc.FNoGo:&3[+'KJ.&G**.rZ7gK~Nr.o/K: ''~~3sN~Z˂J*gR6KO+/~~rK7ۆ6~/sZڏgSN6ꏇGZ&SJK'F6.sO3ZJcZ/.&*ocj/3K.K'gKnrKcg'/+Og/*c*ZN~g.~Sc'K.&NGOr~b***.''&~/g*c/../77/NNZ*3oJZ/.& OG'N*J+K*/&*ۏO3Z*Z./OOC.*s33cNNsOo*ۂN''/rZKcK~fG'3ZN.Z+N;gGOJڂb*JZ {gZJKˢڂN.go.N/3j/OKNr/rZ**/NN#S*Jc3Z>[s'3N.*KcoO/rJsOO/.*+/K~N3j*cZ&O''/N.JcsssKN/3Kr.K*rO&c##JJ.cc:rc+3O/*r.../[ZKog..c/c/3JJg.r+*K/o.*sr*Z*O'&j3sKs*~rK/O'O*NN;*sۃcsrJ/o/scJN~s3ڎ/O*.zkK3.N.ocjZ_Orr..3sO3:r2**bJK*so...*oOZJ*ZZjs'.rO/*..J/O.*3cۃ3.˛/sJJr+/s3S3*NZ*o/+*JNJۏ/csۂrZ3O3cZ.~OccK:Z*JrOs*r~K3**/**..*/r.Jc/:sOo K:**꺃3*r.rۏs*r*c/J.[/cj*//*c3/s*.2++*sKKs.Kc3Kº*3KNcsJ*c3cڎrJ3c*J*2+s/*:ۃcK.33sۂr*sKK+J..+ ss3/K**:Ko3J/3KKKK*r***[/rJڂc3ZBB*3cjJcK*ssr +*3ooKr**J/Or+*/O˺*KBjKs/3.J:jc*JKJ*K*[/J3KKr**c3cZ*JZ33˃*ںjj/3K**JrJKK*KJJjۏSj*K3cK*JZo/*/**K3J*Jr/OjJK꺃/ZںºsojJ*J*/s*JJ*KꃻJ+*c**ˋ{Z.ZKjۃKZ3c3b**JKK*r.+Ã{**Z:3##*./ **K.s3*.J[K* ˂rڻ/sK*ZjjZcc{jZsKK++K***JJ**K*Z"**3*K*ZsJ˺**+*3/[ʂJK*KK*ccc3ZjK*ZKK3***Kڂccc*rK**K*K* Jj **cK*b**[+***JJ*s3***JJ***cKJZJ3c**:+s3*Z+s*J*[+JJJs/Z*KK3s3ZJ***KÃZJKJ* J*Kۃ*J*** ˺Z*KKK*JJKKK*J**KK*ZJ3cK*JJ**ۃ3*j**J*s**ۃK*** j:33*jJ*J˃****+**ˊ++*KKJ*j˃:jjK*ZZ*K**K**J*KKK+ZK*KKK**K**K*JK********K[K**JJ****cK****J*******˃*+*K*:j *K****K*J*KKK**KK**J*+ۛ **꺺K **KjKK**ʻKK**+*K***Kjjj*K*jj**K**+***K*****+++K*jj**ˋ ****KK*+**J***KK***********K*jj*******K*K***KK***jj*K***k**Kj*+******K****K**jj KK*jK+****K;+****K;+******KK**jj*++*j**Kj****K+kk+*+**+******jKj*++jjjj+j++k++jjjjjjjjjjjj+jkk++jj*jjjj+*+k++jjj*+++j+jjj+j**+++k++jj +jjjj*j+++ ++++k+k+kkjjj+jk+++ +*+j +jj++jj+++닋+kjjjjjjjjj+++**+jjjj++jjj+++++++++*jjjjj+++++jjjjk+k+j+j+j+ \ No newline at end of file diff --git a/tones_efi/number_00.isdn b/tones_efi/number_00.isdn new file mode 100644 index 0000000..6aaf83e Binary files /dev/null and b/tones_efi/number_00.isdn differ diff --git a/tones_efi/number_01.isdn b/tones_efi/number_01.isdn new file mode 100644 index 0000000..1f19b1e Binary files /dev/null and b/tones_efi/number_01.isdn differ diff --git a/tones_efi/number_02.isdn b/tones_efi/number_02.isdn new file mode 100644 index 0000000..9af0ff3 Binary files /dev/null and b/tones_efi/number_02.isdn differ diff --git a/tones_efi/number_03.isdn b/tones_efi/number_03.isdn new file mode 100644 index 0000000..0f76d08 Binary files /dev/null and b/tones_efi/number_03.isdn differ diff --git a/tones_efi/number_04.isdn b/tones_efi/number_04.isdn new file mode 100644 index 0000000..3b482ff Binary files /dev/null and b/tones_efi/number_04.isdn differ diff --git a/tones_efi/number_05.isdn b/tones_efi/number_05.isdn new file mode 100644 index 0000000..f2a3f38 Binary files /dev/null and b/tones_efi/number_05.isdn differ diff --git a/tones_efi/number_06.isdn b/tones_efi/number_06.isdn new file mode 100644 index 0000000..cd98d43 Binary files /dev/null and b/tones_efi/number_06.isdn differ diff --git a/tones_efi/number_07.isdn b/tones_efi/number_07.isdn new file mode 100644 index 0000000..9e3af6a Binary files /dev/null and b/tones_efi/number_07.isdn differ diff --git a/tones_efi/number_08.isdn b/tones_efi/number_08.isdn new file mode 100644 index 0000000..e847741 Binary files /dev/null and b/tones_efi/number_08.isdn differ diff --git a/tones_efi/number_09.isdn b/tones_efi/number_09.isdn new file mode 100644 index 0000000..c5510aa Binary files /dev/null and b/tones_efi/number_09.isdn differ diff --git a/tones_german/activated_loop.isdn b/tones_german/activated_loop.isdn new file mode 100644 index 0000000..795012d Binary files /dev/null and b/tones_german/activated_loop.isdn differ diff --git a/tones_german/busy_loop.isdn b/tones_german/busy_loop.isdn new file mode 100644 index 0000000..79095e0 Binary files /dev/null and b/tones_german/busy_loop.isdn differ diff --git a/tones_german/cause_01_loop.isdn b/tones_german/cause_01_loop.isdn new file mode 100644 index 0000000..8276b87 --- /dev/null +++ b/tones_german/cause_01_loop.isdn @@ -0,0 +1,156 @@ +*d}EьDH$]a>s9H?YBo"> / h&{ +;B&SjR+_C'whWVVG>vg({wwǣ)^F.Sr?>&;n&;B_&^_k +//vf +G ; + +o.cF#3珟. sh +?hFNGco>_So^32W7^6CWo7'&2SZ~nCc#wHFWBR'I(HRkz?#:7z>voIW+f>z&/g7*.&/7(f/nf{i)OF66/?w{_kW>F G/^'R'3oS>coJRJ(Vn/ׇinfD,-B7&zCVcWY!?^J/g_g(fnsN(6_J~^rgos") ^ZCgzr#gSJcC *Zo/NW!<- _с+Ing9y2F^&(h)R֏I Cowr'?+k'goncG\@yF!`,aOy^ ƻ(Ks>f˛2VG263:c>rǟ.'0 g_Pxa 9/XZW7ɇfNBK*/b_[S/jk#ϳ+_/zc؄Lو~0^!ϑ'(;Nj {6zn?6NsbG'.3nʟsR*bJ'oo7pXQXr1mH7ax)^O8khhׇj(Gk +NZ??_û_gd!:pANv Y +q?2?_V8j&&+;_oszg's:kbBs?SO_C׺@FA_w AY8&ǂVNc&b*>_JG33SO?/b{{s?gW*Ь(9fXǃiIyGo7nNŽNB.>"#C'g?3COǟ +Ã'pd(P,HYh:SRw!ɿ!FGBV{6~ffFnc_'{CgOs3nc.ʋ*J"f( +GBWW)Sg_KJJ&6.~^J#{*s?SO/oOO*KCHr(XHJڷs+iwgwgW3R^fVf2JCSGg''/O V +nW)wiǿrJ&6Ff^.r3 3ggLJ__S/ +(V +?c7ww7)wGLJ?3b>&vfrk[_'Gs3 /3nfVFZWG7wGǟzrr~VF6^BR+[CS/''__/sB2.r6Vvc._W__;;N&>f6&Ξ:{??/?sKZkn~~f(VV2f:K2#sK_Gח7GCZ枾~^bZ.#s'k?i97wIF<@X' V" I9h+igZ*W/V6hs7n>+{oGfiW2Bc'R~bgW{7_?^kosn2&&fR;7?k#O_GW)K{^&N&κ6&hWCb+{iW{> rzs;O'Olja?dlO_*, y79q)@Ico!HȂK^2 HFs~JG33 +G)ώs +gS{'n~o/ڊ^f^+R>>˻ '׷'__+cZ‚&nrrXQ PP8!A!9W hV/ wfXx'ws~^Ogh'9)Oo.fWg#ꃟS~Z3znNw韌|0隗Ih08aI'i˜WgK.`Fi{+χ+vsw3__*+/_ 9 Wshi)yX +G;k+8HB^fgf''Krwk? #'~+'log[)ٹY!&'o{G36 "CzS__+k[3>NRjwR|ii7)ia92roK~_"fBR*S'?C#KϏS+O* +++Bbڎh/3(V7^)'WWLJ7[O~~fFf&s[* ?k{O/OS@ุ ?_iWIwW_R.FvvVVvFR.;_;{h 2cGi) IIiW )WW>>^VFRkS{o''3C[{; "Xh(`( +Ɔ)ɹɉwgORv6fF{CCS/SocCSc:fxH8Ro))I )iWG/OR^kKk#cS[[{ +2((vVvfN3GWi)W/* +*2>>ff^>Zj#; ʊr&Ff62JSsSwWwG'g翿o3oڂnn>N>Ξ"R +zB +{*rnbkBZjjj:2* +[3{V6iG9)3N.Jff2Jz^zR .N#þOGb#2.Go^.[_ ?gs:O3RSO>2&S*fS (o .62'ʳbcSf'K~r//o>v/V6֏'(S^[2g_"s(hs/B6X('jZ'{G3 3V^R3?:W[ +ǎH)7VN^sOo~._sGWc y'G&wG/>/x)7h>'ƟGo6k^gڢBvyg'FB hJ7^)gcdžvRr(:VF8)S'#YfciSnkh^(fײ7Ho@yV:3SNo8vbW.kw6g&(j7[oiyV9WVbf__^cCGC'shv[z3)cR7fƇ?h([ +I&_s6Gh)h?'NVf{_&NWH 7Ɗ36ghg 7/jV{GsiΟHRf_'f z_Of~)FhIowh3ZRvfsrG3?h:&ROʇ(7^?::Nw&k:2Bcǘ(SYRf[nI +K(:woC[ +2gJ^?srk 1iʏ~FBnS*f~/_S[bJ>'2N2o/&N_#jnc._.j.'[S&Z:gOJ>rs* ~o~'#N*g^s[Fr[>&oW_?c^s.+^G[C +S2sn?k3&^o{F_۾c_^fRj/>+o_?No +ۇƺo&j'ڿς^33s>J3JZ*R3rS/koc#cSNc)#^~ÊF~r.oz8 `xI))1qIyw^v(FF&.ZB'+j[c2RK/c2/?? 3O3&, x,aiYy/nƶnVH(66RO+oۇJ[ڻ3;kj^r_2`l&`'YIYAq9OKG)'h6R{fg^;ϟc2_GJJ +2R +W)x\ HOYW^ *#OWIS^nn(^77rJ[>3/{kCGP|L CC[7Qχ_XVO7wi~Vfgw'szjN/S+: lvC?q(h^)o+gw~ssZsoK2+o66f'_#2>N3 Bf,X/w9AyWGʆ/s_?^f#óJڻCSòR*/n&{/>rK+`83_iy!!G'j^n2ooS:r"+ZZ:Rr[{;~fRKRnrbKKv @xhJo !yWwS~ƾbS//;.;Z."JK{Vz"rJ{.R.Z*hh^'gw鹙 iw_*R>:[*{CZZ ::k rb zS.^f&RKJR22H(f:*?S?wi)'?o;rZ+^ˣB~2"jzn +S.^ojNZ6N.+ R gGG''OC#;:O> "kZ'sz.[s;# +NROZR#~K^K^[>j?sfb_s3{?Jo +ZCBbnFrFRJk3zn~B_Z33_R&OZ~ ;cZss;Z_o;2sKskŸJgώR2//3cz/C +r/Rj +[2kz+N/ON#3Z/NJ; 2j +orZb"{ KNKJzzbRZo>O ?B: +.[.kbj:O^.ocRrZrNkf_ _JJr22O;>z[_ϣsJ2Or?N z:/. +rjwB3*CϞ2CꎊZ'^>nώb׻ >_b/G"N +JfcSs"_&~onKSc.S; +*:Gr/>g ^)JGN3[RkC c/.++;/ + +sz*kO^&nr.N2CK2j[Vc{ 2KZfk[nNڿCRR:kkrf^~#nzZz; +"Sコ&*3:orj+#krc2{3jrz +j"k2B{ *k +KJڋc3ʂ~F~+?__'{"j#ss/3k:*Z2rnR.r:r~R:{3/Sj +:*sg?/.>^fvhF[?Ƿ_CR2cjcSo/C¢n.R.Ȗ9aI ?ǻj~6hXx(i)ɉwsf^>+ o_G_o&&>R#/oOs~HOGwW7wGk:R"cC`ЬfgW)iI!y~((&2z: 99' ^6v66ۇww3 zFΊR6n iǷi_k.&~R>xVzo[Si!iN2n>^G)7_[*z.H8viiC_+Jϣ*[!hlpА_ɹ1 q(XƸf)aAiFhW'.K֖fr//iwi7/s>f&. +33s8`{' 1Q_&fhIio* +7i ic"j[ SJ_F̂yoW:o()91Gb~>:nvX 8r(w_?/O*'R +/vn.^~ (&vZxx&)o9WGio[zFֈ(fN;g'7w/3*z +Jr +fvf +`X֟oW aa W9I_W&~>V8VK/g׷'j;;^nNf>2(Hf(X8^{ǟ9yY!I wo^^V.z?''?jJjJ2nN&~NBrΆ.r^S'7))))WG__2&f^&RN~nr㳳*"3s/ +j +JNNnr:k*;cssckK#*:;cso//3{#{Kk;{jZbbR>NNNnrk + *K* +KsS:*kjn2Jb +z:3c[oO/#C#Zbb"2r22BB2r2Z:zkcKj;Kzz*J*ʺ J*:;{Kk+ ;#; z0A!6vrfIr2[;HZ&~jKSb/ SÉ2G[+f_(^"_Rfw+CgϺ.#B.h[R2 >c '(of6dz~w#b?^jC_VfS#{+3?;nS?^BJk r{KRO>sRNNZ^[r2R2nsR>J&3J37g''o_K{3{#k; +z~krfo?;^_w,&!)q!Wg'cz# +FCOk{S/#j*{7W,-1!i +g(G)I[7rV(V#sJFzk +;S_jSoOO[ZZ: rr?{)@,怎-iG_jhn))skwW6N؈s_k+)O:O.?3b#s R +k.js gpְaQi91FhiG˟on.^hȖh'/rRJ++S;+S#ZN_'gNLh`/AAyy_Hx.3&ɉc*ֈ((F^F./g'3bnBk +^CoˣNn3z&: +>.o&SNhOy'C1!O'!7& _V{KN_>b+r +~c*2[kj{K3#CS{[ 2:KZrzJ*{;brRrO?_??oû +:jB.RZŽn.2Bz˛C/c*zZKjڊk ʂ*JJZ +jz + +JJ +::** ˛CSo#3 +zrnrB + +Jj{+ +zʊ** +j +jjJ:J +jj**+kkkK*Jz;[k{CSC[K ;K +:2"2b:::+jj +jj +:ˋ +;{*zʊk#k; *; +{K/ ZjJR r +: "cJڛ +B3JjroSN/cNb*jJK/[.3~sr'[n^{ +;zbJ&h/g7iCrg +rfVOb~R^ʣ^bnGFg_"3Onb{/nnB*RR +_~/ +~#3Sr[zsnr 22RCSb[ o* CJÊ*N +~&c +R?&Bo +ˣ.{2"b"Z˾Zj2j..[[O7wGo'SKb2&RJFB^ZrRKsjn;2:j(Έv8f6WY!!aYII' ږVH(FvNZJ'Ozr:^ZS2SBRhHXviyaaaawۖȶhn»ۃ7Sg'OJ2BRk.C** XX F~AyiC.Vh^"/''of~^f+[b"ϏNnhֆXhֈ3C7y!W_3*NfF(6^+_ÿ>;.~[.n*~K2#n ..~vvƆv&:joWIIiw7b(f6"O>ffkN>F/S"O׶+S*F^ž{#^.b)_i9Ww + + 6?S " r[66_^c&/ R[3;b&/FJώ+BR"GW)[_&jBF&gۊ^c6Z3SN6^ W;~w j_ +__f +rRkoB +g7csW/ijË>RfF_62n&hRKRvOGH'_K&3jK3G*/Ϟ~2o^_w뇇_kGgrsFV./7:CfS&*C n.zS_^o2^C>fZ>rjg7W)WW2[+n^g'NsOrƇϊh.JK6jv3w'#^jFxvG7ٹ Ig2{N^.RV+ +&(G +G)>fonSw&F>KS#@pRYaA1AizfcOg/:^f;;oi3_sK>'.jgBcZۄ(~W-с!!.JJJ(IG_Z&ֶ(8)/g7G~ϛ_珳;3{:R"{痰,~(a1!:ɹ8 WwsG)! >~n8(n~VVGO Jk"wg3?Og +{z{ +o7dL Ig!fN/v29i W62&J.Sv6>:_oJS珏[#_++ZJj`lIg_H.i9Wsf&NSbrRsRhr3';{ #'?ϏO+JKBCf$ Y I76OaIi+{>2^s> +(F3sG3*:+ck ;z'0\/r*7+陉Y.NrkRfBnvR_O?O#/{{+; +z +2Z CP_fc_*iG K.>B&V2>'*+szo/"kcz[Bb"Cc +nhֶÎF +wG?7i'WGCg?' +ZFf~^>kCS/3sc##{; *R""vF(VbBzW)WW7ǟ___o#"bv^~. K/?O/[C#{jJ*nn."vvV^vVN"JGWW)W''3Zr.>&>FF6f.sSϿOoK;k + +:2rRn.>V(V^v־/?WWW'_3Ckb2f^>2K3sSo3[[ *j:RBnVֶ6nGW)WW'S3k.^6F^>⋻#///;˻;+zbbR.nF(66Vf?'W)W7_o3zRRFFf^.:;[#so?OSS3K + +rrr.R.^V6vvz/W))חw7SS#.NfF>2j;S/oO??ϏOsSK{*k.nb2Bv(6F>&(vRgw )GG3jϟs*6VFVVR2KC?'os/Ë{^>R"Wϗ˷ '?_i +^^fVx&C*kO_'OS.BNr+ ll :Yi'zg 7'w&Ff&fV2C CCcSG3ˋ#s[ +"ڢ{{[l0H7)7)Wc*{ɉ#"FV(Ff~nO;+gg'Kz.rr22br2.*#S^,Ia9g)Wwiɉw?zR>>hhhVvR//oc#C?_os{{:2.nn2n:/CKhxOG))Gj{_w'#^FV(V^ڋCo/s[#c#c{ZZ22r.2.Jۻ H~njii_'_'R6f>Z??/33: +ZZZ2r*:8hV6(&O'IiWW)G*nn^fF&f^JSOLJ'_?/[ +2.Ύ.2Z2H^n^~W 9Ii)OK +>&fvVvf"+_g''S +:R.N2(VvrVVC)99Ii)ww;+nV^RB;CO_LJ__?/SRξnΎr:((憢b6&G)II )WW7k.n^憶(v^&N{3_g'S3;:brNrnrBRh(nfƞBg7W WW_ˊr&fFv66ffz/_'g'O/c NN>nNڂ6xv&6n?iI7?JKS_V` V6KoSog__>&^~#(l,PS!{fh6zYwGKFJ>(fojZo7gZr*j..BBRb@iё_Na''oJ~n3sbf興N&6_7ozs'g_crrR:nR.Z*+B؀ nY'jsoSF(b6^FBgWo?Grnξ{3jR^>+C2v^Xx)ɹ?RrSIIW_Oc 3F6f6&^O_/CSs3'/R"o^~RCK~&R^XHF)IsZ_W )7_/kKo[J~fFf^>~F&Sc+/ooo jSsb&rc*"2^B2Vhh/G7O/iW)w'SC[+>^&&h6_G~SjjBCSnƆRjN;*斸H^G?S777/c3[jnn(^z'K&6_CkSO+b&f +;n& s*3OR(f׷K?_'c_{.BrRڢRRR.J:zR.RrR#~.{?:"sO:"rnr/szڢS_sK/{c "Bn.Rrb~^nZRZKJn2O{csK *ۋ;ۛj*z3CJZJ{/s2j3*;C*b2"ʺڂb"B2rb +Z+:ZKC+ʋc;K˛sc;j +#nO nnCOO/{JcCK+..";. +[ʣssK{KK{ + +k +zz z +ZZ j*[KZk{3zzkC  KJj+KKkJ:Kc{"Zk +{#kK*ʺ{+j: +J*k j*JjKKJ#3J +ʺ::*{J +k{{; ++jZz;{ zk K*ں3;J"J[ˊZ{{kJں {[J*;#cz‚ +[ +"jjJZ + z:KK+Jzښ+K+K+K닛k +j:z: +{ +"j K**j +ʊ***+K + +k#K +:+ KJJ +++++**+ꊊKk +zJ {{ +K[{+ ++ **k+ +zk˻; +J: *j*k+*:J +k :;*J ++;{K +j + +kˋ +Jj+*k++;;k::*kk+**++*jj*k* +*kkk+k +jk K* +** +*j::{{ +k +JJKK+:Jk K *:k; +++j**+k++jJ: +kˋjkk*jkj++++k+ +*닋k+ +*+* +J+******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_german/cause_02_loop.isdn b/tones_german/cause_02_loop.isdn new file mode 100644 index 0000000..32dbe32 --- /dev/null +++ b/tones_german/cause_02_loop.isdn @@ -0,0 +1,209 @@ +*d}EьDH$]aփwN. NCoJjn +SJRn7f.C3N*?ϊ :Zb{jcCrRkb>&/j2K g9 n[fzz'73nR#چFOZrnGbkbK +n2o#*jº"3JnSOb.RJ[_#Sf"[ +*~2{&' +f֊ZFR(W2+rzn"2'c#ʎ +36&瞎sÞ{"{_{*'/CRb +>Z.+sK2[rRJcoK"NCNnz_ R&[;..?f^"g_JO/jJ32{Ffo^hGR(oiSo^r3*src_.SR*;_c(^/_ >j+G~Z3k/ ^fn_ff>;KGo(ƢG([nZS/oc#g +.: ;+*zB:bgϋnBoGoG_ &JSS~.F^gN_'Ff7o. r'.jb?R7;O/Cs+C+zJ c*^'`7ɺI9hǁѱ{)sv(/W O[>`IWV&n)F'z~_Ok*ۏyYYdMmɸpoaI +x [b')vhVRc#N)O["+rO2;OO"zoOID7f,晹sX`3I/h~O2w;cS+joc.ΊCjOgdRaI XV-A(f Y7_O_v//ΚcgKz* */+\bwxYQ`Xj(IN!W( '7I8SZh(K玀y~f7ho)*N~r_s)w> 2c)-)I0aA?[ٱh6X ɳ^/cv)χ?b>㿃g*z"kb'GiA1Y0His.?.'&;6(țOgW7γk*/32oZ;gf w g^YaYyw'fƾb~&^2&Fzb3/{"+3sʋ*knOZ&&8V23חW)G'?SjrS;~f*..s +''#[+ cRzxfFV(6&oi)gOo.R.^f66~RBZo/sc/{ۋZ +N88;vW׹WGÏj.vF6^F../?_?oso;;xH(V( +v"?O i)9 '7W'?s_Cz2n>fvN>Z+'_?/'/C/J3+ KKZHvHhn&'7iwww{/2N>fvfv c_g__/o;iv(.(y9Ga")G WK_bHhhnCSs/g_G#og0X9)3^ng IWώFv'WW?/ kSOOO_'gc#Λ'L0HXylj!Y7G/)ɗ_7Vn7w{[s{C3B~&R +J ,0(8vW9))I9Y s{ǣ +ۃKVhhf.BoC#o3 +kۋ"j3ʂbzJRnBz.(8>κ)wW'Sjc Z*rz.zbr+j*K{"":rBJ:˛sBۻ{{C#ZCSC;2;ZRJc +kڎJBκ +K oRzn[JJKksz[ {_Z/?z; +B#;ʟ[3{+cZ{2Jz[/rj˃"bsSʿo +;2Kc .J3o;rb rk[{jB["c;K +"b>K +RR +/SRnnKk2[[[+/SrkBZ_[z;j.j*Ƃ???zs/"J:#rn*RC:+:j;KO3./;n '˺N3k/j +NonoK Ssʾz3ZK2rcs* +j.kں/sS Bn;.#/BSKzz+>Oo.3r*b[#o Z[[zJKK{kc sZ*K +z"kn/ +s#.nz.BO Z*#oR{j*;2n?kRZs + +˲k:zʃRン;{ kZ{zs3K+J* +2j"[c+J{z +*RRB**:scC//jRڻ[: + skkk +RnZCCs#/3c:>Z[#+rz +kk:j;rr2^W_g +s3 NR_i9$d,I Aaz/~ɹwnK>_s&0Na9OoOZGW[&o7LJ ,$<Y!-irhFsbRf! ^ +VȆ{wgz*NF(/7_sO{ۿ/"k/WW))y9 amyRhևA!ynVHh'sOS؀j))')W +~gBgG7slG'aQm12hHXVwY77i7rhX >:*?iwR6*"o׷3"kc'L pS^w-Ys Ww Y.V6v(fZs)g+2z{㋲B k2n**h88JiW7C;;*z껃kr2b222Z{3CCs##jzb +**+j"BRR.nN^&^~N2Z sO'G'__# +b>>~^f>:zSoSsoo/s+{;zZ2š"2~~RB3_g_ggOs{jr~^>ΎbjkK {[ン3ó/j + +z"B22rnnnr+#Co_'g'oS3{rR>N...R2"KKK ッs33#k +JⲢr.nr2N.rB:KSo?_g'?o:"RΎnRnr:z*K{3zJjbB‚22r2r.2b*co??sC["Br..2¢Jꋻ{k +Jz2r.n.Rbz3/o_3*2RRRr.bZk ;k;Kk;#j: +JZZJ:ZrnrB2RBjj+ 3of_W7?3o:G:&?rn"*RR {33{b:k^FVv&R_Wi)Wwg[{jFNrK??Ck2" .2* 3/2OSs`0p Fw) Ȉv27'G3+bV&[_''3*RB+* `Pp9!!'hxGJʉ9O(nF27G)go3SfbJ"rϟ:zˊS33S/#KjkbbB²nF[s_w) iwGOkZr^Ɔ^n^3:?'o/{˻b¢Bbf6VVf S)9ii )s +K6^26>v6^N."Z/Ϗ'OO;K{bB +Z2nvֶVhv(VN))I9iii)?K~>FfƾRnBs/s?/+ZZRrV(hvro3'WiWWwg_3rF6fF~NnJ+kss/??/sjj:.BhHf^6iWiyIi iW)w_k^FƶF& +"c3?O'??/o3jbr2VHv8hxh>f/oOWy))?j^^F&~N:j#SO__?//c; ++28(hV~F{SI yIiws+.&^F~BZ3o?ooS +jj2NHvhvsI i99Iig +RFƶƶ"Ks/'?Ss +r.fHVx>o IIwwﺚJ^&vvF>nn˃?'?s zr.xhhn[Oi I)Ƿg"+b^V&.B&> +KSo?_o3Kb2XH8s7oAOr*WIwRH(ֶSggg_3'Z3O__+oϿ<\0 ZHf-siWYy)Ws(Xh"wiOGoBGOwwsB +{BL<@gyǏ!W.IWIa9>.ZvXHƎ.SzKo'/g__S[BRr2S67w9YY)v;yy׷)ɹ):hh2'ϋc_+'so3+[3LXa9_YIr yW_s&cS?/Cc/oC??ZR>{ x,l !'9)'""Y9ZFV&hvOS_'{;s?rn~z pηAW^O y){W_B(xHv&o;"3gg_?c:J3s/cJBNN..h؀v6I?sW) Ww'*jZ +2..~vs?3ˋC_'gg +ʣCf88 xx{˷7)7WGWW)wgOS[R.^FVvVvC_oO'?O'__?[[HHhr>W W)gGgSzrfFF&3s'?_??''/S#CK XȘg7 )W)G7GLJS*f6V(VVFo?OO_Ϗzzb&Hhxoi'9WWW_LJggoJr6F66>#c?OOOS+rfV(Vƞ?7ח7g'_'gg' BvvF>nJSϿO??s#;sx ώ[_g)Gg+ +n&f6Ff~ncCS/OO?Ϗ3{*zr.Rn>N>.:" +kj* [SSoOϿooSsssCCC *:r.BRrNNnFv6fb/)i*J+{[;;{###KJ~3?o[؀vYyI~2z_g_wWi3VHH2k;K:b2Z CSS"~>2ggOrnjkJ.2kc/o3{j:+c+*j:RN.""Z;;ˣoo/3kʺzZ2n..B2ڊzZo'_SkcSooSCKkkzB"zJ*@0` wii7)gfVF9w'ǟW_Nr>&sgS2>: +bn~.*wkK;^fZ333K^K¢r +s{bn2n2o_'''g'ϏSoo +Z.n^^^~frB2B+3bnZ۳/_c /OC/S 2>~nr23/x&jH`nRw>9!Ko NgS^"VVR6"/G'77Ss22"n~~^f&^^rz jk{ں;3Gg:"N>rJk"‹#C{z[[;oSo3VhȘF +{ I9i Gg.B v(^&vF.{ 7g?Sook2ZZ.RRrR²(hFJj[9IIg_g?nZ>fV^^RksOw7_gK[R.n~^N^&6&/_ ii)c +2.~&ffFFƆk__??3SNrn>RnJBB2.r2K?'gGG'OC jr.>>ΎRBZJ;cCsSCk#+"Zr2R."j+ ;{ ;#j+KKc/s;;*z +zb"Z ++:j+j ++ +jˋk +K*kk*k +:a?V˷^&O^fKk"/J~3[N3cR/FRso[&y?3懻ȲK37[Wr.^r~nR龙N'F{x(g')~/3n72ZSn[+c.kor;Okrjr.3c"'on7KZγ{. .sJjۋJ?2[bb{s{>NoCRJOK#^2SsrzRRC3"^: +C?;z/*3kSk +kr"R"r[kr[rKRksrKJnRzRCS2"S*k˻ #s+*: kJRN3jCojʚ*sbz + +ϻJß[ Js/cK;{; [RRro[Z3o^n>^&"O^,ZYyW>'v?Gwfzrn #[n**cKZ>N_|Pp`7mAyG!ُ[ꈶGgW'&vh?G3'7_r;&fNC{2B#_/c2r +S .8 Wi1INoNG7 nr{SF`?7ZIyg~ +?RƆ㷇s3R^Bkg$Hؖ`?'ّIS9)nx>_^IoGvf``s'2 Y>gVv'v^G GGBz+sCV@_!Iʇ)Gav~S^HHoN')GO6H#F7srgs&nKoj" +RrcKcn^frnz*'χ_OO?ϳcr~R~NR2.R +So/SsS3C++rZKk2 +;" +k:Rr"BRZj SϏ/{ccr.RnZj;kc + +::z::Jʚzj+J:2z:"zK#ÏO/3S3KzBZzbrR22kk +*jJ +J: +Jʺ +k*+j +k jz +zJj*KC3sS/SC[;kkjBBBbZ + +*+*J+kښ;*{:z +KjZJ:*;ʚ+*j+k˻{c3/ss3c{kkʚz"::zZں +zzʊJ +kk++kkk+ +j*JJ +jJJzjʊjkj˛##ssc3Ck;[kjjJjZz"ښzz*+ *+zwgNjjckZ.j?/?/ۣo+*BF#' +[O.^: +[s;;kR^>&~NN* 3ggwLJ'+^~>RBBJ{jCsCZs[2Jj#.*s#*Bc3/brκfFF66&ROG)i iiW'/BƆ6ֶ^^2sO#:zRJ/"cv(Bky)#:N6(hf~Z'G7's3J/n~cr;s/{s3vf(X !YYYy)Gf  H /c{"Z>N;^c*oSV^vX08f7WG9AYy oCV8H6fS3 :ZSSCC{VVxxFi9aA1aIOFhV"'O''G_'s?zCRZr~ _z#2.R^#w8VhgyaAaٙRv(v6&^BBS?Ͽۿgoj^3N:n.jnnVv(*/wIY!!w3 +&fƎFzr+37S''occS^GF2J'zg/cZB^rRV&6ƎzO/ Wis_SjR~.&Ʋ^/&~ʚObN2R_brC[Îv*N>{CrRr~>Nj;+ksڇG__gG{?B2n~C:^sR~Z^O_r* N{f2Rn2H~rΟ^cNGJ>kC":?C;*{_Wo^{^'G[^F#.BG+Wr?2Ozf{n_n3.;Cr>s3K{ccrKSO/:JS7O7W2Ǝv"VBVg_N~s'"*br"JC>r+jR#.[_)/Ogn&{VdžRRg&2[2[ο)W.z36^: +?g_/Rr2.FoC"OC:~3>Gfs&Gvj+gNk+z_vXHV6 +'WiYIw)_J&Znf +B".RF&"K돾sOۛZ +gRK +ZbJC?>kOHAY9y!vz;Z3G[*^&VFR_o{{[zo;szkfS{o,(a-1YANr3g CS_S^6"I i6bisG/Cb*~7 ,l,/:xQB7^IS>rcZ2W_gK~R_o~_r_')`䌌w--yzfW)SHh/i.w #FR&O_ZF8)s +&r'cR[Jc'gN#)$ l/W'׶j&sg?vVjjkOSR8ֈJo''C?s~kgZ+{Z//KRZg L @i[YiΖ +cWi*oG : 3>F3*>^^z;fbsw?BbS3*˛ۂ.ϳkbJ+[rP쀾iIJG'7*j6nO''?b.j[+kz2ڎNz*;2Rnr.b{{oSxGS))sG7:j""{n:3: +꺊bR.  +rk ;r^r3Kb:s;j:n뿟o{SCk+j +s Z.+oCZjk&2OJNf*R>:3bBkrkC[#3{#ˣ +:32* +j*/j[k{+ +bRZS2ۃ.:Sʚ: B#B; . ;jJb;R zK [jkk**K+{+{k z3 *r{:+rS2.bC{K;kjkJJJj +; +3b;Sjk +kjcB2*JC#K{2*J{ZJ#*#+b꣢z΂zjZoC+3 O"2"{ۋk{ +*#"*/jBCCKJ"*{# zS2; zJb{ K +zK‹sCsc;Ck+k"k˲+*zj +j[ʲJj;k:Z#zKۊkckj[c"kc j+k*3ڋ#bښJ*Bzkk++KKj*Kꋺ +R +c+ +33Z;2;?j{jzKkk> {+rZ{;KC+C [ϛB{ˋjs"+3K +ۚ.[3*KcC2:bKJ :n J.. +B +2bj ++#b˳"+zK[23Zo + +J+s*"+b{2K^n3/cB[[R#3r"r> JRc*{/O[JCOCノ:2{[R^zoZk;Z3 rb#2{ ʛ+ ;;skBRzK{:z osk:cj+ Jzڲ"k :b*kz:++{ Jzzj + +zJs +*b"zz scK#*Z +ꊺ+;#BZ[#Kk +k;K :"#c"K jZJ #Z:k; +ʺ+++*S/ *##{j:: +:k +"rjjzz"b"::: +j*KKjz2R.rc___oS3 "b2J .nR.R22" ++:n^FxHG9Y! ׇ/;~f.j+C;R2b*c : *ʂڋS?_6p,l,Ry7_fH92FƆR*OSjR2 ++ KOSbn>Rcg۶ly1a7go.8xoyIwNFfV?_.zK# +*#o?/:RnRˏ'':,ll0Qw_Ƿ'j֛!6&(V +W/.n"j3k;jZBgz(@,ll)ѭqaIG'Gb/!a/~6vF&&6B_wg+"Jzj+Kc33 * +š곟'H0,liQa9w燇'H_!)F&vV(~'77_o;3jj[3"BKj +g0,l)1a)&XIYYW/.^^FVhCLJ_Obr"'[3k2.*+k_'gn,0'!qa i x֛׏"n.Bb^ǟrn;_?C #sCckbrRS3#COS3F0P0xr!yIizHHziÚڋ;v((vJ//ˢ2K3/33s# czZrk{ *[ss;fVH XvZiI9IiWG_N~ZS3[ jJ::BNNښ"#[+kC3{c#+*ZJJJ":+K {;K*r~nRRrK?__SC+z +:2.nrb""";#[;;#Kjj +j jjjj +kJ"nrBB2rJS?OOOϿO3#Kk z"Br.b"*{#{ˋ{Jj +ںkJjK"Z"bbbbb2"J csóo/oS jJ +:zZZJJJ:ZJJz:: +JK* +*; +j +:{˻;+j+Jʺ::JBRrb +۳SSSs3SoSS3C +2b:JzZ+jk + *:+j:j+ J++Jz + +++kJb.Bn^ZSg?oj:R>n;"RkK{ZKÛrrc[²ڣ/+ʋ*k:>Vh(6rWI9 w__o[#s/{JrRnVHVwO&^[?''soJ:R[/OK˾Rr;/xPqa +RRsiI'*ff^&&^^."^&b_ yI)^3___z~R_?/rF^f@@A _rjjWgsn^frZzZz2>r+k^ֆi9WF_br#_'&nH`@XVo_'ى_')ws'g&>s r2b2>n:{^69z62'_S'3+f&_f&2{@00 oR9aBr7iG_/oG#~FF2cJB +r^ +[fW_#ڃ'noKʛc3vGN0 @1Q1_wg7W6(nkʢ"o+FF>bzBRh +鉇r{3k37oRFFBsc*Bۛ +k/Z>` .awk>?_kio^Kj~boSn)IW^:O_w_Rfn{So*rrKzz'S2h`p_a1!Gg_C*Jɷc."^/.N&Zj(&+_7O*2Ί_G/R2:S#; +"nJ*R+Hxw!a) +rwI9_*#FZb#*kr>>vƏ纻f*Sk/.rr?zkBNBZ>F&((HF_Y!Y7) ?:3'>R +.Nr.7GoC(6G'&J{Sj*BRR{Z/X8RyaayC&J[gwI3ZnfF +zjJ +^NrBg??oss{NOr + +k[zRORֈ`/G9!!wkzWg>&fbZz:jkznVR' gz{On+rkZrr/kBOYI7{2JCC_g[ + +Jf^nNڋN2cO'[n_cc.zCrsCzZ.Nf(h H&7ggs++*znnnJZ*BJv:s?'s;Z"s{"kC + b; jBJR>ڂ2zZ^&NKo_?gC/?/_ۃk.rڢ>Ύ2br.n2 +** +JB*+;[ + [;Z *kS*Cj /3S3{#s/k +j;jj"Rr.ZbnN +2 ; +*Cz;2ZockoSk[ZsCS/;3C C[ˋ +"brrn2b[ k+k#[*+ +ˣÃ[3C ;+zj* +˛K{뚢z +k jb:K.zڂBK*2 + ++Sc{{c:bB{k s +jˣk;[3[{*{+jkk j;{ +zbj:Z+ʊrzJKK ++ [{K뻻{k +*Kjۋj+;C㺂J{ʊ[+ + +z ++*: +J* kJ +*;K{:::kˋ * + K;+z + * + +*kkj k*jʺj+JK**;; + +*ʊjJK*Jk K::kK ++: : +;:J :;˻+j +*kkKKj +kkjʊ+j +zj*jK[jkj +:*K + {J ; +z +닊 +*+jjkʺ+kjKKjj+jj+**+kk+ jjk+k ++k***j:+ +k k+j+j+**j+*++ +jk **++; +jj*+ Kkj*j+ j+*jk*ʊjj+*K * + +k ;jʊ ++k* +k +kk jj*** kjj*k* +j+*k++************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************* \ No newline at end of file diff --git a/tones_german/cause_03_loop.isdn b/tones_german/cause_03_loop.isdn new file mode 100644 index 0000000..a98c09b --- /dev/null +++ b/tones_german/cause_03_loop.isdn @@ -0,0 +1,263 @@ +*d}EьDH$]ar~ +[{CKs {B[JJ {C: +?2bk>kOʚSZ {;N+ʞ:RRbZRK_G'g+//+/;RfO*vNNx&HH 3iɹ!!aىI):^hָvhƞ& )o_ʃf⿢C+/8( @h^W))aA 7s^&8VVrwWs/b s?2`VP``pxxفᱱYYay.N戈hFRSׇ'CS"^sn~jGCv 6VWفa!I~(VV^N"?OSsKc +B#2nrBB/.ofF^gw{!9əiw矏nB2fnփ"gBZ_j"/>fJf/jf^J2R(:;zf+'{7) )7o2obZO^3kfscV6.f:?&'gJknzJgbOo#J3"g"ۛO.K Zۃ 36/r[K#SO3R O~r/.' +˳*g;gon^ǞJ2"_rr +bc*jG.sFbs_/S>Jc;O^RJn_+2#n/z6g^ws>b{*(g^*r *[wn3g32oo +sn2bڇ* +/﷚3#g(#/b +N/._3?/C2S'F㣎7"_j:g':~ڿ'N_gC&{'f*:ÇJ~'S.nf^k^S&_WOz##gss>C'Vf#g?J_/.s6ۺ)N/G/b[r&[W"# ^jKO>RO>')nCRS2 *+&O3SRnrORGNr*rǻRBB2X ^oI! II i3:/37w)'o_sZJ>/?ssl$02) )wqF8' .S!(ΎV(H(C_nRwK/7_+"OG +{j|и1IwY!aq1Whx"nk&n8_O7_')WgW__do9A1@oGږ'aF[;V8`` G3r>'{NVf {w??b_wP$#Y- W(N1Q/G_nX@r˲>W(hZ2V: i烟 k_GK/)Ff #?'_'s#ss[+j>6FvkcG׷g_O?Os*;[ 2^>fffrZkksû[Cs///o/3;;ˋzzB+ˊ Z>&~^^R oo??_o/o/SKk+kB.>n. ++zk{[#Ss;*/S3 {r"+Jb" + +ڂ"k +K;[c#K kk*:z"zNbrbN2Z+[s3C/S[[s/K*bNڎkkbCOFVF&sco/"Z_3''nN⺊#s +# +ZB +˻s#3{:2BZJ+#[***+ + [;{; {{::Z"bZjK K{ +k+:+K k ++ +z* ++**j*k +J. +C_zjDzϿ3oCjZ:> +2rZ2Z+r +Zn2JˣCo__'σ*K *k +{JHV8+^j[GW_[OJ[;^Nr"2/O[ۣO3*?3?o/:".r.3ƈVVO_W)_._[{Cs2C(ˆFv_W7G7gOJj2r&f^h&(>C?Ii7wGCjz2Rz^&FbrF6{^oog3jŸbBR +[ܾ@v׉WB!j7C~X{֚OW W _ws>r~ C/ج_ h9aaWq9RnZb;gvKfȆN^>'7)Gi'';kjr"/r3:+-pafyىgac#N/R_GHo斷rvb37G* nZ^ .@1)lN_I3IayoIF^+.~6&&RR/S'g_or~ +Rj !(p_8F'7)Yyww n"NJvn&j+_Oog/Oo JK .R&BVohgHr:7!i?sozn2B>N&ff{soSOS3[kCj +k(vHf8x^V*b_I))y)IW'szR&f^nbJSSo'Oo?3/vhV XhkSw9iɇiW*:r澞&^>BZJC3'ooc^&HVX vȂg9WW!Iי9) 7bf^>ff_?O'?_?#S/ +h~ 8h渶g9IyW w7Wgksn>Ff&"Zosg_/K8H.88(~'2ZI9y!Wi)7)o[zKRN^6ƶ6f&ko''_oo3oV`h2hO>iaIWI) 7 +^6^og_'S[/H؞(xbȸ3YGIWYgi?;c&&66Ff+og_'_3/3SXhh/>iYIYIGi_'낣^6^F"3/O'矟#/x8`(hgrIy YigcR^&6&ff.kssS?g矟/#/Xv``VxSF)ior* +vffvfbKsS''_'??S{3 +#xX( VnS)i!i9)o.FVv&zJ/S/_g_go[sJ+b6xV"/:9YIiRnvVvFvr:o/_?[:k((hxVjKK7IiIYIi7'_3RFvff.º#?O__?#;Z^VhVvHVVf Ki) 99))ǿ/2N&fvFvf^Jo??oK"rRVv(/I9ɹ W_#J^^NFffRkS/Oo'?C;:nZ~vhHFS'Wy9!!I)7+"2vF(6fb.S#_''?O#s2[k:ncKK2H((GWI)g+(R&&g'oO*s'+joB++۲oOLp'(!!a&VƖ[_Si?Z?+ +?"rCRc 8W N:aZ^iف1y y玸(X(()')?ozϾ +K^osSsSK;o +NBbl`i8@iaayiYƾx֖f ?7)_S*&NK/OcnN>RZPRV?I 9q9a /FVX.LJ'__O_ZNN>f>kS#B+"z*>vFRIa Wsn&(^ +C3OK*ۊRZn + +"*b˚*+zۣv_W鉉i)gKRBRn겺" + z{"zjJ +k ++K+":{[:*:k&&.Jo'GG_s{ K+nnRR2:ZzJk jjJk*J:":zz*[ Zz.233?_gg/[+ZR.R +jJj+k닢{:;;ڢz: +‹ +zk˂"bnB¢{C/_Osc2*.R:"rrr:J[b[:j*jJʛj*k*z+"jzrrB~~>.rz*s_g'g'o{cK†nnB*.*b+{*jKZkj2zc[s +j˾:{NڲFwGSr. F>n*.{k ';:.;kkz3*BC3jzf(hV~:I9I)_k2>&fVg_꺃 +."C r#FH((.Wy1 )>興VvVVʟG +O? KsCj"#"3Sz2sVF2, Z@g)91q1IKvv8HVFWJ_R +?_oZSGLxǬYaYWyInFx(Ʋ )k:s:s__ooO뚋[KG @*91 9^&o8FV^zg' */^N*j +WϚ"ʣŠsJ 6 ,XiWYY!9!9[8ȸ8no7GW???R+jC''CsSs"CɬWAA__^ xHHnG7חkcn&Rf^>'''[o/*;slO晙qqA˖88 HHFNsogwWG_z RN.S'gg?zSj?G 0Y!AYc.f( hrwI7ORz^>nZ+?/# gVLkHXs†A7IINVX88hVSCIIO9*~sןg[3.Jÿ8Ll`x SRa!qGiظg ~{"{G/B:rnCl``OY1Ay1)K^(H(H&N"'_gcK.BZB˳Os{"2b`8>Oفir(Fv~/Os{j[3{;C[: j/~JrR.:. +sf8xV&~ח9y)7C{N~ξ&.s;j{#[c#{{+" obJ΢;NnFf^n+'))i7#r"B.^zr~RRr/3S{c۲:*rJ2[rNznzzB;+ K+/C??o+: +b2J.Zz:j z +*j Jj"{z +"{2:z+;jb#kC[;+ ϣSZKKZ +KJ+22:j:j +kkZK: ;k*ʊ+j+ +jriw~SB:RZSn.[J*: +;CZj ¢Sn?WB)JOW(jRN*of7ɸ)W2*v&^ȷ)i&&YrR96oǶr(?^s&Sb_b3/f_KO&3 ng67ZR/&Gnrg&{K۳k js#^S+ :sBjBr+ZKK"zKznjBB:"/#kS#zjs*js"CcRJ:r2bb"RbVVf9I WW&r"'_/K.&^^#ۋcr&N l@0(VɁA!YiǞN(vgwG_Cr^kR&_kg7;rBR;*Z*/+f>r/,P. !qIi(H{ Ξbgi7[hF8.>Cz_3g7gkf +kC +S.Bj:0/oɁq9ikH_/O/{((*_3~roGWOf2BZ#*;j"RNN2 8J7iY1qAOJBfVfs?K~&Zs+:*/'3*¢Z*J:+{**`@ 63)IIaaa/ƶrr"SS^Jk/㚢2rk{n*j~.JOs:V(N G7ǷW7zN^^Rb:n>.z+ K" +c33Kbbz +kZBB* +:+jkKkK[j:.+??O?Sscۛ rNRBzk Kk+ʊʊJbbj ۛ{k+**zzJꊊj +k **222Bb:3/o{; kJ:ZJ:"ZzjK*j k+ +j*k ˋ *zJ*{3/kJzZzښ:jjj+ +jj** kjj;k +z"2*;s___KjZzZ"B2"Zz +J:J:J + +ˣ[{ +R>^b_wo 2n.bc+:Z.nNNRJ k+ +; ΆhH6) 9i׷'[J&6{'gO[:22BZ + #3JnFh ``hO)y၁aY W R^v(hhfBSi)? +Nn.[cco?'&@p@Y1A! )GOvHxhR9yGkRf&Rj K[/G`0PаN Y1I'/*.^6j'9yWr&&~nb + +SJpp ف1ayo/{R^v88/əٙI)gbN~.Z +Z꛿gs~h raA1ayo#+8xxH(7 y :B"r⢚ZOczh`@0hYI)_Oofֈxxh'W )?s KۻkZ.f^og_rvX@X^YIW7__KRfȸ~WiiCJs/Jn~(8`xV"9!!'gg2((ֆzcOOo;.2N2"zoC X X8(?)IyyI)G7W'o3^>."+KjR"O/o' +ΊSB.3SZ2o r/.&hV&"3'GwwSSf +C3㲆&&+BÇJ^vzRz3o#kSB;{bN??{f'Ϛ{OS#SZsORBjN2*g?J:Jfnz?C.'snfWO_:' + +oFRnF>˞^6^?rj#G*sKRN/g_c#Bv&r_ZnNR.[^K">fRORnʚ['J[FkR [COK?Oj>: .O'[~{k3/;>^jBs.2B'?o" 'G /fb{b_ǻ>3(KÛ2S[# Z?S7.+^37KV3Ƕg3vVIf?3+‚J&ǣ{Bk ;;cC>so#r&Z*^Nn+z+sSj3oK + +rRjZBz +cjkk*cj +cz +s+zz˚*ۋr.:{" ++kk{ +j뻊k{j::*jkzjJkKƈ_s:R{{SszB⎞&R"b+óKsS ##㻛KBk˺b"Jk*KzJc{zk:J: K +K JZ +j +jkjK+c{˻ˋ K* k*Jjj+jjzz:z+j+ ʺ+zzZ +jj Kc3c33C#{+ښzb2¢"bzJff&FfVnbcc)Wח7Ǘ'_KC;rR^f~nR>:;+:h(h&RB7IIɗ )7'frRNrz B>)Ks FPhf>xig/r9i) IWc'2^&N.h.k g׷z3Z +O^&xW ၉ϹY73OF:g&f>gۣwJnJ// +Ύn2#?X2zZ2@,Ow)əYiw?s7.FfK㏿Ockjs3zZ" +jjjr 0`nniI9 'gg{[^N6fF6^BRc3/k{{kkZBH`hֈ>h>N'iIy Wi)g +۳.FFFf^BrZ{{ϟ__SsCCjkb"hvv^ȘfvCOWIW ic.&6f>bk3/??gO[z.6VVh^V>syIWi W3>^&6^&nr*s??__g_s/SC[*B +2xfFxVf/_i I)sfvFVhF^^rRs''_'gS3 Jb2R`V6vxfٹIIi7rN>vV6(Vrr{/S'g_g/sS[j2 +JJV ธ`–RS1i'j? nF8@X{sw'))w_ow#o_O'8\\,6WGbKGiWna!:V;.h8h^.;>֖f)_*/oo_Z2*'7L|Pa-Q VwfVف!(Vz'GH֚^>j7i).N/G7CG'Og77chѹ3_W۹qS*'g88' CVϋFhh>Gw^.Ow_wbK_G))Lp!+! f ? !`f_xsR{)f{w3/7g&f2CK&>fHssg碾bkoOgWWgKr²^沛zˎškk.JC3Rrg.C'π l )a sSf^?ϛX8Bi_ +_gRhB +ww &c.G_kJs/"Ɩfb+Rj'& +2K'gOs+:kC3 rn..kjZr3B;[/ocs[#[#{k j"Z. +jz2jk+"*;k{3cK;3cKk{+k*JzZ"b*zBښJJjcCc##ۃss//3K ;JB:Jz".nξ>&&fJsw7g'_?zk/oOs{2"*k{3osr.z +((&9i)ɹB&fs)wi{&fv(sS'_rNfZc_3KkRb{kr2BZZ3Cs{"+ +**;/#s3j:k* +z"b"Z΂bbznR>.j?O??_o/## .b2>R"2R"ZBrbr.zʂj +s'_G;boOoSs{+:2ˋ#/Ϸ@hP`(7!-1k`hW)99')7~8(b +Wg_2vVNb3o7_~?;cJ;JZRrBzvpF(& !_)I:{N^F^cO_[3k#;Rr3z3>3~.v"ΞJ;vv~憾 G7_)gOZ{3KB 2/.&?Rf_J"gvR~K(*7J;3➎#*BB?~g"OO7.[ors#z^fOr>_k G/{#>2 >Ng:OnN7^J&23_b?[g^c> ^ch;isghO+k'f#grb3 ++*G')w?zf_o^iifG_O."KwNv7_3džǺ7cWH׶BOF_/f+&RS(/R((^7h?'gK7_{vNGZ'{ +Nsr3 g*wo?jBnS>'>__.Nz +"/'/3Nnz_."z+ +b;kS/jKs+ꚺcۻzj [ZkJ˻Jz**kJ+ +* + +kkK+ K+** *+ +*+ˋ+kkjjj *+++ +j++*j+*++++*j*++*+k+*jjRbϏ2jC{2C;{#[ +*;z +zZ + :jjz{zkʊKKkkk* +ں+ +:ʊj*:+* KKk *k k**kj +* ++J*; +J ;; *; +;j JjKkKz*j KʲjzzBJJ +[{ʻ3[KZ[zbjkj; +#{ ++K&^soSok +{ jKks{:Bʺ.2ZkK* [{Kk[jj Z* ;+; **kJjz +j{+* +k: +jz :j *K + +j++*+z:jk:j:*jk˛#cã#Cs[;;{ jkz**"b::JBzk + +f^>^fF^n~⃣3G׷Gg?SZ..ξΎn.(g7ogSo?`^F^2OW y)Gg'{RB6Ξ.~K/s__ok:sco 8w`FF_YY)ə wB?' +?8(~os_7w7cj;?O3O*s @`h9#aWagYW‰ S6fo(n&_'owJS{¿jz Ns +Aya7Gg +)S[n6`N . ows?z3;*2 lc(S)Y__GB +3 r&V(*gG'w)g? +RZN2CrK&,7Za99'gk?ccs#R戶(~Z_o?Gg?ook#{R3;jR2ڀ&&B>G W779Ǘ_zs[j ++^z. +r2 S ?3Rj~[N?63F +'N~'^O&^)jGo/rB;3ZK3BjK...^cR+n.rk~KJN3 +/o.;Jz沏z +sSʇcN[;bS '~.ZFs^C~[뎟^.#b6/JosnGn +sSri^gR3&)>>)v'N2O։?ˏF^/hb_~O~O.r^#R~#3&;'&W2h +BfGw~o&.gfg{_&Cwr&+_ºs.Nv?rn7gזW.#2'*o__rf7ƿ +~+nڏ(N *~N3râJ[:33z.Kk +2r Kc. +J*: +j Jj:j*Jj*JJ*KjK +Jjjk+JkjkzK ++: +jk+*+kj; + +k*+Jjj+ +JKKj*jJj+***kKk*jj kꚋ* +kK+ + + + +j * +j++jJ*k*++*kk*+j* j*+kkk ++ jj+j+j*j*j + +**kj +*++j k*****jj* +kj+* j* jj+j+kjk+* +j+*j**;J+ ˋ:ˊˋZ+++j +*kj + +*jj+k k +*j +jJ*{*J`JYK^7CR.bb#.j#:K{?N&["GGOg( (sF^FfbXgZ?GGO_n‡NsF*nojN⏋: +ﺻ^r?O:_ r +Ko#"rz ?SS3z +RR C"Kc2J"n.NCgG__gs۳/_g, q9yoƺ.SIGWΖv6::/G237bys/7;wg/I)8\$ GWM A~H!i!Jvv&V(;oSog>*B)/3?noZ_#;_ 9PXMɂ7yNpi7)1Cf` bG/oZ8(6rvKlj>^'Oo''_Ok g9W,0#WqqY  8grIV>6h"GwZ[.;#) |HI9Aa`nBGYqY6I3r#^(k[;'iW?K[._WwO/ۊ;S;O~d0GىaIX( g iG(6^&:f^6[I+s~{gcRkSozc3+ +w|A)I)rHF)!j&f*2Z?F +FZO_OBʣ's"nSj;j*Z.2: o"0xY*Z.Ǘ'ʊJ_s:" R. +&fc_/"rss KJZK+r+* +zj"j*#kjS3?g˛oOڂkjZ‚žZÃ*Zj{ +z*kJ +jjkbJKJ"[: +*[C3szfh.ooss/o3#*Kkzn:*k +ʢJ #z+ ʚ: +k+*z" +ˋ6`x//*{g.3ΞFJrzJ ËzÃ{:+;"" +;[+.r2+ +Bay_Z2G;;O :^Nj?n&N"*^&3">S?SKcc{ + [K+b"b+˃zÇ 01:wB[oJ.S_S6f^7 >")g?zsC3 o^n;BWXPAm-YFSg!_h&wZ6 ǗVVko^6g>_OK;"C3#b~:{)vlYm*fn7 +ƈna(;&F(+rf7 ofRz{?C/o2';>~kz줌8!m-[jVHoa:f6 7Z&nB&v^ Ϻ>^W3>NRCCsckJc3_ 0< q O!w2h7O// +fV^Zb#~hs7w/CrNk +:Bk?sbkssIWљ! `O)'Ia_(H#wiff.ffj_KKϿ#kOSosJr[3J;ãkCOWfܜ )& +!^+1))FG?RvkFFzkK'_s*+"j??3[/S2£z*_\fOf)M:IX z_ٗ6/g'.F8Ϣ/G{_nB_Z+3[+*닢?''0|FV`*^[7HIs?i~ks2[Bfr+n.n*Kk[oJ[2?z/S xWa)7GKcdzSr&^2Vj +_?sK + "/sJo3++JkBc2:j/pC(GN9WWG"bj3_ +r2^KB +ۏ [R*‚ +cz+;Zzz:Jjös//?gO'cz[.R+K[kr kKb:R" +¢2njboR۞o26?+sKsJJK{S2c {"/+3S{sB3Sr?/ڶF&?cf+r3"{;R +/+JRO#Z~JJBSK>??3f'ڿNSN ;_*b?2+:/":zo&?N_">cSR^/{&i{GFZOFCo/B s&f# 6W¿v 877&cf)ncJnη^ko +_~Nj[&>ۂ[Z'~os +.c_oƿfj~C.Jgn_~rF*NO+^C7¾O +Zjb{~o{ʾ"*bc/;##zbKkۛ:cJj + +K{[{*{ *+ + +j +++Jj*j:kj +:+J +* ++*k* ++K***K* **K +* +KkJ+jj + k + +k*{j;***j+ˋk* +++ +*k**Kj **++*++k*j+k++*j+j ++++***+kkj+**kjJ**j*j; +kj jk*j ++*k*+ +j*+ j+kk++*jk*ʺ+kKJ*+ +j +:k;+++˛KjK* jJjk*jJk** + +j++ j +*j+++*j*k+k++k+j +*K+*+j*jkkj*jK**+j*K*jʋ +*k* +**jk +j++ +jꊊ+j +:*jkk*++*j +j +*+j++j+ +*k+**+*j+++j*+ kk**jj*j+++k++k+++kk*+jj*j*j*+* +++jK++k++j_#s +Bz+3Kz +kz + +JjoǷKK;~R +zf//sS;jjZJkJ#Z +:Z#{{{[;: *zrK +{ J +++ +Z jJs*+j+k;s+c B"Bb:*RVچI_[:OJsKzk{J"R.JsËzk2lqyY6Rg׿ wg((b*.#Jnb*zj//sڎ_ٙgK:G:β_"3_:,q))7K8S!_o_S[(Fn/_g>Ύnf.KoZ:j+rZkobǹ&*/#SO~^^w fy1qYWwJ)9W3+;*?f^Nr.;?gOÿ'r'+{?Zz"ks#H0(aAa n'W9W?z; +~B>k*K+K;?+zR"+cC2c3k.{[@@1I&S Y _~__sB[3 n~2^{{˳::'s2*:B [Jn.z330'aYnCO'I9G&'*n> +k2&2ZB>?? +.ro.3+JzK"bڢ:{j *[{60 ()!in&Vb[ggW~boR&^b[ffR;k.NN;[Zrs?Kr+os2;:Z:rkZnfH(Ik^zr'G7G7'kZs'R:j>~zzrk#krrjKk[#j"Z33{˻3["ۛr+)w&Bs_S*2 +_'[rZc +bBbzr.r*K:b + +:+;J:;Jn˳o{:oCbJSJ" j3;z J:ZZ+JjRrBZښj.rJ[˻Jrj{CK{#+#;3s kcKj+jz"²BzbnJ⢺#K*{{j"z+c +jk{{; ;CsC{ #[c[;jjj +z+bZ*k +zJ +zjkjZ"ʛ3 +ˋj{c[ + C#z; :zz:*bBZ* kjJ*++ J ++;*K;Kk KK kK*j*K * + kKj +:+*kjJZ"j** * +j**k* +z* ++ k + +*;k k+kk k+jJ*+jJk+kkJz*kkk*j+jj*+*+kˋ**+k +*jJ +j*+j*k K*k *+*j*늊*+***+k+**+*JJ +*KJ* KK+ +닋 { jzj k+*+j**JJ Kk +J*K+***+k++kk******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_german/cause_05_loop.isdn b/tones_german/cause_05_loop.isdn new file mode 100644 index 0000000..d7d31dc --- /dev/null +++ b/tones_german/cause_05_loop.isdn @@ -0,0 +1,224 @@ +*d}EьDH$]a?6'jO3:Zږ?/Rk^gâ+WrfB^_3no>?/ONZ/3&&S^?^N/gr~C_'>6 RO;~b{N{/32{'s6jf; +z#On//.O223>S_n˟^i*fg9'nv&^^Z'O{ς2RZf'/'kF^&wSBnnoz (/ʳ3?{O{; +rjzrJ~b2oCJ; +R +/z":6//RsrÊ+2j3?O {j"zOJC/Bb + cʢ_ˋ:RSnj>sOb;+*R;Z[/sZ*.zjoC S3**>2"s[겚*2B .N+{2[33K*Kj2jJ{ k3;z+C#B/3+oOo_/sú+Z;#3'_l`@ (?>!Y1qY)z Ff3S'WC+jNF/'w7)6hp76QYAY˶h{')iG2rr:KCsGwgg, 06A1I9R(Hz"Wi'_SBf;/'7wGPl0&y1a!AGg_V {&iw_&fVF2n&SGw)77GGgG^,@lxG?Aa!AW'Bv68f+i)gsꖶfvkWW))GiNJ@P,p_'ya?gh(vkcgi)iwsJVVF^g)i,VPp@zqA1iHhV[_iI) [*>vVf3/W)WiHlx,@haA!O#(6z7W#F&~/#N2rHV(xJ{ )i '#c3SOs[*JRrRR22b +j*{K +J/O2rN^^^.n[/G +""ˏs3; +BRRNN.hh" "wۿNvȸȈƚSo7)IW)7__*ZZ*{;jc+"R"RJ+[;Ko +f涖(fʻ?7wi))c#J:Kkk2RR.RfA"I6H(vH{ _9)Ig[b#z3sSo 2N~NzJ +곏o?HX.CGI!yyIgS뛢.CozbR~r*'ooJsFx`X ^j_wi~CSGjBNJ&RkG _'CМ~a-))i!w3?^j[JRs)[gjO)` o1 + (ygai^(2owZ&Ɔ"bCi 3s2V\|@ )iQ v&yao73Vc'cgwGKNR2^"S鏎> + ',|< IIqI^BN!!)c#S.v''SnN~.gI'2&+3s`_!!YaAF8_3iY)r:jnN>.k3 92fb_6L|,i!!aA!g6f/I Wz>N2J[_g_SJRnR.NR7k~&> +,h)g)Sr^~cCS[3'Z>.2+χ?>2+s0  Yٙ+B_7)3*zBR;{ˋJRR2J{3 :rbrN(H^o_Wwg'__'sc;k+++rR..b²Z++kKK늊kK{+zZZn.rRJۣcCSo?ۻ +R2Rj222J+ { Kۛ z:J"B"zZbbJ[c#[CS?{;[ۣ{kj²rBbZˊ*jkKkjJk;+k** +j: +k#ssC[{{jkKk**zj:"Zb"Z +zJj{{{k[ kj++ +k:+ Kc[K [kK{K++: +J +j ++*:Zj::zjk *+j +*j:* +* kk;[;{{Jzbz:‚Zjz +F~)ɉG^>fk33#KJ2"Z˛+'og_"bZ2;Z/JZ2RrJ +zr2fff>RLJ'?Ϗ/3K k*+k30\LHay9!x6c_go# WOf^^+'ǷOzBjNf?+;S'_+Kc70|l 1YHVO G__ _VVnkZR/~^Zg*/g²O_<\L A!Yٙi8V)y)o)iRv>/&wG»bW2K//SjwWSOz^_'3'G:KOWPYAom 8i66F( 7Kc>(iN/)igw 3'.F "$d{XB`VY-Ys `7R./V 8[*?iGFRGOgGO7o o?8Wٽ_XhI(aov_+S bJ/gShp_hlji6IG^?o)k7ZG_|vnA_!^N6I2yhzzfVLJN&ZRF;g;2'g +ꃏ2 +?g'_/SФH,~!'iQח舶37r';&.(x^"7g/ +R?/K:oocBrRr:p3؈[{Wyg)WSojr2"/jS뢂r2zBJ Ks {C* k +2" +KJ2RrRRcsS?__'_'/s3[ +²ZR~R.~2:J*//CCcÛ kʋj +z": +.B>~⛛s/'__OScZrrN.Rr":*;;CS[c#{K#zcskK".~^~bZ'g?_gCs{r"JzR2B:jr +;kjbs"s"*/#jRZ*/3{zr>(V(nZ))WGZNBZ#R +z. +2Nj +j*cC3soo?SB`S!!WWF[9W׹ +fxHƻSwW)?f> + _WWw;'@`o7aC+& *3RSG)_8xHH&_oi:ZRJ.fc'Gׇo'GzkRKi`\lȐ`q?;i: )oIxV{w_ZףN_r;GSk'  O/)P`60͍c^8i;2W;wohx'nc*'&#^?g2[;3/sGwo,lB_ͽ!!3GNW1'(Xr&)vȾN.oi_bbg32?3ZǷ[)L Wh2R!PGRR19ff_XgKϘh 'gnWiC.Ǐ:jws?';r`|,Oamaz`vgISyygָb26WrvVNVc3k#*'s:cL+-*(釟9wSfvb3& oZfbϏ3:?/2B/bCGhHO"1a_?g_?'/J^r"Nfff223sc/#sz˃z ;jZC2B&VVkz{O7w?7g_c +z[S+rb3Žbr>22++*k;[K{[skks;J‹3"2KZb +2.:B:[3Kj?_ϏϿ/3[*JjB" +2bR +"˃#z3/C:+kk; + +K뚢 +:zZںkJzz:3s{*SC : +jz +ʚJJ+ + +k++; + +[j*k"jK J˻kJjKK{+#3 c+k+kj+Z:* j +z*k+k{+j:j +j{J[:+K;k˻s[ jc+Kk++*KZJj:jJ* JkJBJJ+ʊ+ +K +Kk++: +++[Jjkj bk+K3j**S*kk *kJ:K"kj +2Bڲ jkK"j*zJkZ+"[[Z [3K+{kZ+ +##[ZZBnz"" +"Jz +BrR;cϿ??/Sooc;osKʚZJbb2R + +ZC//Kfp(iAy7g.zsgw fB*.&^Co?/: ;K3#'G_ϳwIIrP$|ɑ- S[G IWNk"2nr*;ָVWGǷKrZo_#C/O7r$a mYfh_S ɹ^(&C_JS#Ά^(s 'ƂGoO3#s/O7@<<9 m`XjgSI W(H6 _gr>k"v>r +Zk):^fggKo?i) L&rgn[_?ʲ3?/{"_LJo? +0\myhАW:6a7Y/Jsr_*?gNRO.R';RrG7'/3 XR@3h21c))SI_ ؖOWsf&[O +kۛj{OCڲ3OggV $ qMh + VKC& v8&snWfgR{3{kCs/'o7x|ܐ-_0ao(;c(9!r.(֞?kk?/g.Sw'/O'$< !-y9p`Aa )Ii`HZigW:V^#OOg.ʳ[/'))/Bk[ܜHI1!)A-w`hAΘbfHVIkc( S緇>rj; +##)iWoVAmhvyAaII62. 9_fFvڏg_/jJ:NNr'7)闷_'(P\l~zI 1>O(` W9YFrSG_*>.~6o/[Ƿ?kj/'w'w0^r'G7WPVЀH"w)9y'vn'{W'B[/"&v~~&Rc/cK+##K3OJrf8fXhR[J׹)əI_?{&2&cBkz :*cJc#;;Kc3"Zjc rΖV{G7Wi W *rΎnnnnnbrkcc:/o333/33{**kZ Krr^Ff&ƆN{_g7ww'?osCSSj.rn^N^FfB&2S s_CKo; +k z.Z>^N.RZ;O?'_'O/CK*B&ZϛC??/_C;+JB⋺ +Jb:vvo)W)GO3+ŽFSnC)_r__N_&_+b.*&SJ3 +ZhXx8S_WyI#BbFRJ*RJS/c rKJj.nn.2K3Ok:j/ʊ2JZz㆖HF[gIYYyɹ_:Jzڞ&2j{rjKj2ZSsg[ËZJ3 +r>+RKCXVH{i w +#jNf +3 rj.>>n3/2sosGr._/~J.?.of^f~&n;_/7Gw_7G7S/kK" +br+2c?c>˞Rzs;JBˣ^CB.~/6n +nn~žk#K//n3Sϳ +n"BF*Nj +b:ƳRR:2kc&úSKB b;*ʟN+o;2+ kR.k/^*o3N)b[ں;rGƆ.*RCjs_ϢRSJ[_.^ +?ojn+fw/j +bn)/;*Zg'# +W&& +ڣR.B{O" b/'Wbj?jC^_{?JZk;+_ +iK"I{./˂[{B: &*iο.r'oRRVs":/'rg{~iO~_^Oo/fCk "_R&{ +?O>3gF_r{7GO6znf r +S{;^"gb23/)[Z/[* ++_?::Z &GS^CFbzcC'+v۲zkjVrb)ofn#S~#;sF׿ )> r{*O~nr3n*R''^R7?ڿ n^ËC^' 2ofv?#WRORJrsb2B^O3+/F:oOΟrO6_ &b26&_[:cf>7r_JB'j+f&{nÏ~/#>2+3g7._ 6"wKNj);f;*2bfKRsZۇ?#S^K>JK3cƞgcr gsF*r ++__/.f;"NSھr_+¾&nG_/^_ۋs +.nr?s+rn?>G&~NJ?j&"/>/2r;_'.CCsz~{f~ⷻfg?&+o&RO;sj^Rc˲.2Jbk{r~J?*/R 3"Kʺ :*kBs#{.[/S;+[bj*knBB{Cbb+J.ZNȈ6.[Giɉ)7_'7wW_['o.dyA1Y-Y˘hX.bv{fFk6hV) 6av_BƆ_y .'i-QXVx!AyKO ^o)IiX·ig[kCO'_ i$  AȈ0RaGw@xFkO)vgn'G*?g_3{#S/)ȜlX''QR^cv3iIlj ?fHVh(WǷ_^&r+Zbs?/soSob,@fn2!A!WwGV8F^bj>"鉉zRFV~32 *Sc˲.2[:;*;j~f^R;3Ogg__燇ScJjjΎ"ڎ^fR2. +3#/Sۋ;k[ * +zrrBRRR+SS/'_?3C/2r~R2;C[*;3C[K+ +jjzZ:rn2". +Kk[3???33+ +z +2R2 +: +*+ ;[;*+ʺ"j::* +r.k+kCSo/3s3;jʊz*bZ" +:kK++:KJ +j++ +kJ"J*j;[[;K{#{#{# +jJZR"rJ +J*j*+"k+K*ں+ +[jz z +J +K#; +;Ã+[Sۋ#{ +B2Zzz2Br"Z +J+J:+ +j+k*J +k;;Kj + +j+ +xZWgk~Go)in:Z~vRbn:ʋ# +B:B::2.*:Jbf6Ξbgw~.3/7SR.~C{k;oCBCJjsl8xKwi yg6Rㆶ(_#{7Gs 26&>r'o''/#B>gX8#y1ɹyy!s^&7zZNz3^h‡gs7**+^ {#w@P`BQyyYv?_h*3iS7n; +fNS7#/Ƿ/Ckk.ʋ[Sʼ[hR 8iy!Y"&O׏2Z~v(>k^g:/*c3r^r";Zzz6pVhW_ 9iwGGGj +rƆⶾ*;"ok*/sZ{ +[Bfxhh'G7Wǟ__ +Zbn~>Nn: [3CCss/3{z"v(^h~3Cwi )))oBr>&~>2 +*[?/S3j*R(f(FCۏwiWWWG_'oS*r:N~~~&>.+{[ooSS{ 6fƈZ#;)i)WWwg_c:b~^^>&&&~>r.Bj +kc?oo3;zNh(h6.W )W)'C.&>^>zKó?S/Sc[{*+zf68vvs3OWW WW7rn^&.+so?OO3S;**jHƈ(Ȟ& +3GWɉWWG_/ozbR>&fF&N*kc/?/KˊZhֈh8Ά) ii)חLJOSn&vF>^~23SO??oS[#jJzHƆ(n)WW 7g7bf(F^fr{F)g9? Zn#:pXxV`)ɷljY'G/c3GOrFFV(^jꣿW/_o ?'oB[^R66wa! IIIW.WɉWOG688(h[O's'wo7oz2+ۊj&, +sg:*og[ +2.B*/Ƭ̌ZGa9{s7ɹ__Giɇ&VV6Fhhfr3O{{KK/_?ogokN: /)!!iNj'i IGWh(f(v*g{O''? c'_σJ"2J +kJPligISiyYy[{/iIIS/Os.xhf.bŠzs3;ʋ_Ϗ'>2⋛`P0@?_9i['WN gGgb'g"S7S:C/'_3jNR +jb~8@Xn3'gy COWGb^6v(hr[s3/O/oKcs?Oo:2R2z 8 x~^F_)Oi?Ii9Og''BR~FVV6fr:coo?SK;sOs:222R.nh8&n''/7 W i_/s_s&f^~~^N>Rj?oC3jc;/;ʂ"".nb*>FFfF ?sog'GGG[*jj k*2.R2rZ; j*rb{; +:** +;[[+;KۻjK;3C33scJ[k:22z."RZ2뻚CCk#+# ++{o~?2{*nb*KÚ+{/Cz*/CRR;[OSB+ +K{ /*os+3[o"sz2˲/kCNNZ;+r/oB{Zj +sKrC*C/:;rC_Jb# +~c? n j+Cr[s3S'r#ooC.K ;r;_Z + z_^3. +./"~^"2/2S2zk + +J_+w":2r6'&sϞzz#z//NnOR'sc6&O>/&+R"Rk7.r +rS&v+3g2z{OZR/":;k_ +Sz;OKKg_~Gs R>'^B&".s?_^k'/jʆngs^RzRFR_BS[^_N^Bg63vGVOvz({&K*3C:RwZ^b{ nrj"SS?Zg;ʚ.nR3;2K_ʺ&s"oZ&+'2+B/J{{·S&2RbsSzr3#R*"s rj/SÚ>.#/n#/2+{[J csb2+#J+ꊊzz ++ +* **j{k +:k:+{j +:k* Kj+kK{*:K+:j**k+*Z*ꢚ*;cK +j[k:Jk ***+Ǟ/r{ {kz*jJj{+j +::;*z*˛**J; +Z :[:bb#kZJ;*:+KJzk[Kj+:닻+*kj+˻Kz*K*jzJ k{ +KۻjsR;C +* :+kJ ˂BZ K^sw6rJj{Z2N +GkOrZ{s oV&[׉i'/.;.C_+ ;.{;Jzk2⏳2nsS./#c^f2'r¾K#sKo#+2{bNRgC~#S2"ofRsZr;3ZJ +"2#cS +z.cZzꊋ/:S{[3+B*bS[B>c+[/&_B >"7g"F&kk2{3 +ʚ:;;""2 +s;ZkڛkCj [⺢osJ:+Skn2{"^:3J# jZ2 +*{sc#sSC+CjnR[SJ+Kb3~>"`9!sJ7yIggG?rȆHh) 8{2sWjr/_S'sFL$pABω6aayI)9Wg)C"r^B_ RFZn)Cs~^s~nO;*n^v\,8!9NxYY99!?oC +&f憶f(Aybv&z^!YN.#KS_O~k"FP<08G9o iƇWIIgSs +j.2>&>~Fv&ǟ +C{rj_kcO +j+ z:"" +:.8NH&&R))G7g_'_/s>f6~Ɔ/JssG'/Kb2NrRbVV.VV>'w7)WW_">fFf&^^*?s3/?sKBN>rjV.(FVGZiggG_'+j.RrfFF^ff&~nf/S/ +?ggooO/cZjrb2RRrZʺkfVb6vF67)GW__g'g/"n&f^^ξf;S?G_g[3o{JڊRBnrnxvz(F'_?)GGG'_nr^^&f&>βsÂC/'o{3+:2Rrn.JJ +j+V^V.OGig7wo_sss.&fF~^>nnfZsʏ'['/۳RRrnrKCx*n^&V_C37)WGCs~&^^f..r.>fG3[>2IWg/Zo^nbK;BKc",8ygWwfai.Ngo2ƶ^>&vkb^&"O#1 vW +&i.FS .SJc?_/(|L Y1 Fƚ'F&_C_G:fvκFf3+>j??*>HAIVh;ggb^[RbNgpL`I-"!A)r&.7Js(>B. NC +X818H7׷+#rzs[>g(, 0*-A7wi:^nV +j&f~[:2Kr>)iSnN'cz:j[˚Rn"o*.v8`0X!fȈ>W)i _GGZR6ƞ.+//3n>{WjrB*#Os*j*zʺ۳"6X, ё `HiY gI s6.g)i. vFN+*>&s3+j3v!a9Rx6)s^&.˟o:Z2[ WyF"i W7Ggo_'[^^N.2rRnRZ ~_ǿ3o3K[CkZJ {bf`,oqmQix@`vW!)9F:Ii&J>Ff&~/3Zs?OC2Vgi6h6J77' +;{ C33 @p0IazGiii盲˟_K.^Ξ~n.Rr22ZvV!9"h.?)g:ZCˊb[3;~^hX|p2 a8h'y_WyhxVF6.62?F[? +nn:j>g+rRj{/+j{3O/>h8x8biɷkF^ +wWBC':B2B~~N.Fo#O/sR;oojzSs/j;?*<\@g-)(~^AqY?7O;3)_vcRs+jO{.gb.cK#?;:jKBo*"#cO WbrrsoG)Scc##{RN>2Zz2VNw7/>GZRk +oχHG I`Fa97WIvvdz3oRvhvjk+[[.Rrjk:foO{s[BsSc+B;/3cC *s/3# + +^ֈhH(.W7_o*Rw77˺J*j + 2.N~~>~?+r3__z3kKs22KSOsOC( |,#GAf6/aWg)fvbB&&RS[{ r^GobN* SC3J+Kk{K;##{3{{[#ۃ[('Ǘ'/ÃSCog/C;:"ZBRRRrBBrrˋjrS2o_ϣ{Ê"j/SS/k&ȎVI!aS ڶRJi_s_oF~nں#*r2:"b+:/s*sK{z*C+j[{ +k+j+j**;; nFVV2g7_3c#3+z2>N.R ;##*+KKKc[ zj j +"n~&^N2>R*k''_?SCK +:b22:ˣj*+ ;j +**+:j*jj{j;k*˛;: + + +* + +j++JZ ++; 㛛b3 ㋂ +b*{k J*j +{*ˋ + +k{K *{;33#jk+ +J:" :**jk + + j*Jz +ʋj*jj: +KJʋ {++*kK[ +Zj ++k*J+k+jJjʺ +ϳKkJj2 + ++ *k;ʊ:ʋj***+k;;K;+Z+ʋk+ +K + +k껛J +B˃{+b ;#Jjc*ƒ"Zr; 2jJ*Z.CZzko#*kBSrkbN2/OS?[#BS/skZ+{&*fzr +r2SOk2BsFξZ6nr>s__SR;>OC?~K?c?s'o3OƒN'Rng?7'/>iGZON)/O*.SN{.zb/+/3{cjKk'>c*^_SK&3b^''ZFRN#^2.g{"Rn'N.;crs?oW{ jJf;C&[#&sR~+2.s_o&>J&^>*;΂^RNRg^B2+2".fڊ.[r _v3OfgG/>[N6*2c{.2RjjNO3{~S3.^O'f:>fǷ b7BW'{Br*Nk_^Bin*orC:'NJj:~3.S.S32sbϛR#*J+ OF_gg +ƚzkξ_#).**rK[.R7{S^Fs'B'_2Rg&Fos". +RW::grS~?ƒ.O_B.nG>rOZ~J#2R'SORR[& &son'&.s?3*s.kB/#>Ssc [S3o;R2K>'::#ƻ"* +^33#/fjn.S{sbSR[:2S~[3n:^j*O;z*kB{N/2+sS>#o~oN;;*ۛ>K2;sÛk_ˣ3CrNCbkKcCz"jË;*zk;sszk:ZRr{"J[sZrscZ+"K+CK{2kKs+2k+zkJ +S+Z:#kZbbB{ ++zZc :{ *JJ*";:kJ3ZK *zJKKꚺ +j#ʊJJK k::kZJʻ*JK +:+ +J* jj ++;*j + +J ** +J+jʋ+*k*Kk+; Jj*+*kkk*j++kk**k+j*k *jjjj*++++*jˋ+jjjj*j* ++k +jjkK*ʺ+*j++kk+j*++j******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_german/cause_06_loop.isdn b/tones_german/cause_06_loop.isdn new file mode 100644 index 0000000..d453b93 --- /dev/null +++ b/tones_german/cause_06_loop.isdn @@ -0,0 +1,222 @@ +*d}EьDH$]aJ3ꏏSS'w'[''W9I0Dܰ1!WC+288_O9sVF_s nCwO_OB+ +zOw'gii$`iqgY~+._?*h8zR&㷟>'Κs. {/'g_3S3_Ig\KlpQ9V+)kIGv?ǣgfHKR_(_'n3Nn?j_gsCC/ ##ol`G,رYy1S&>ivibWo&(R;fF6χ'3gg{C:SzB.RbrRʚ.kVNocO+3/ JKۺZ2Jr"brr22ZBJ +:jKk:**Kˊk +K{z + ++{; +K+;kJ++++j++ +ʛjzk*bk* [jk +j:ꊚz+K + + +* +* ++++J +k*++Jj껻kk:jkkkk{+J++ +ڊ[:*{kJk#;JZ+j*K+ ++kk:+k+k + :+j:jK+*;#J:jk *k+*kk;k*k:J + +**+kˋˋ+k++:j*:j { +[ˊk*K*늊kK*kk ++kkJ + kJj ˊK ++ + + ++**jkK+*kK*z*kj*+k * +jkk +J*껊++K *+J +;K kk[#k;3{Bk + ;*Z:k~*?Obf'wS2:c~nKrR[C{ ...أYO la-A98@ !3>iFOWsζ'λo:rkoRB_ fn*JS +.v'Ϟg{{_RR+gێZ:S.^+wf33.{bC?^3. +S:'2B&^V^_gsƾ_'.g(/)^h&v'F?)horR'g+fConJs'jn'_#~Znj3 {cnBcNNz JR+/3"/B?{rfRS'{^/sJ23SzB:gKr* S?[N#'?2?sNJ_&Hh^2&f#3X0`~obyfiwagw2>bj (:s3$d9'!`!9?iqbnSGJf3G^G26N +n OK3zR?i*Cobf2w9A0Vs11NrgW_v>Zk+Jf6~z"*#+Nn{'_3o:60& s1C )IS1a_O +c#f/.^뿇GSS+B>Cs{/Fpș('g7Ia_WCo.(Rf~ºZ^ +J /3s ck*j[; ^HZ6w'i))iWwWGG?2~h6^.s3o?__OosSsj2Ȇ NsW W )w7O' +2hVFr2*JSS'__OoO?C#bvx`v8fjwi i9iGWOO["FF68n?'//S{+Z"(v`HX/G鉉w) )'ΆF66h(v^fΊKCS__O?s j28@H 8XO^iiI9W)g/s+f6F(h6^C+S/__'_Oc˺J:Z.RȰ8ؘV iiIyW)wsˊ&VhrRcs_Ggc;*zbr.r``(N"s)i i )'?O2NvVf~O'g''_+z"R(``h+ϗ IW)ii '[n&&66&SVkN_CgGwGg*{c_'l$|@aai9x8yW'Nno>~HH*.Nc_{ow' +ZCGOo/BLJ?Ƿ&Fv&.jCS?3ZS ;sOo''dm(^s6 YO6nrJOiGz6V~ F^'S;s[#So# #oc*:o_7(p\ Hf"־G!q)rngO)(Nn/'ZF~o 3[3*Ǐ*kwWs mYHƶ&сזH/;WNH({/.sgg/K:cC/cJr¢{[k;/׷0\ qZX^bF((RaqI~xosW rHH/ +3R/+rkCO +[KR{ׇGLx !h>nfxH71Q7Hz'(&b&2&^k_ +Bj{C+jSS__w“mq_6#{x ^aq19?~^.nw9Vf^O c{zso [3WמS_i'6R!W_R֘H7s(x8 Rr[Krjﻣs/[jZ+S_g7_60)qAa׈@HJ yaWN+#÷ (8rG7sj+CsOSCs*+{___'\,y!ṁ1aJfjia^h W'rswOOG˛sosgk~ <\)qA[hagG֘8S#W?fVFkkG7*#S'gOS熀,WG1 h )iyy^N&FK))^'gB{_32ksoo_OO7\Fo-V f))y_(VHxwg>.Ss.?k+#Sg7Lꊚ_KzJ +Sb0@O!yiiof o_sz~F&~_'?{k3R2j?{Ks3+.hxx(^37 y9)_>N ;k~"R.SSKókC#;+sj c{:r&(V>;_ywozR2B2k N..Bz#{kcC #/{ +{(h&{_)99WwK R^rZ"rZ*ʻKC[+sK[;C k +jJ+r^H(F&*SGiyiWGC +N~N>KK;#S3c3{j* Ã[k{ jr8H^biI9y97o~r:.Nn +ۢB2[cۛK;{kK+k+j#;{{*x `x(~wI9iG[J.>"K;Jb2rj#Kb:{++ 3SO{sS/Jh @x6Y!9)Ov8hFb''#"33#JnrJOSz2nr;+//oo;.h`P(AA!!!YGhX``nח?R +">nogn.B*/o/OcO; H*ia!aISVX^G/O'#6(^{'GG{^^:?'';l v9aaYaA1Y @;w y zV8xvb_oG_KN>k?ss?_g.L`~9!yy!Qq!V(fvF>#)Ya~h8H>" W_3:"fF.'?O쌼 FG1-2(H((VOI!Yiz.vG'ǗGS/_ǷglllVCzOIi1mmv8`@@8YIGh6.vN_yyϟ_SFhfgڻ7))7м08ga1Q!I`x&VfY9ozB;[3_zRnʂb"{#*KCo xvrhi_W9idz{2 .z.brNs s3os"jj.jKK*n~VF˿GW7/bR22^fff^~n"[c/'{J*r +J"jZ>N.>fFFβ"ZS_Ƿw7GOojn&&&fb"ZkOoooϏ3 ++##jZ+JB"brN sOgg'?S2~^~>r(OI_"O[n;.+BJ{Sc#ۻk.+R"r^f^^~77w'Ͽ3 +Zr~R2R222 ++j[{j{s#{sKSrC*Z&VVvo'9 ? +r2~>s+> bNr+S#k/jj[KK+Z jKC+HȸGaayo:&FRzs3sb6.'7Gg_ B.rJS;O +;;sc{P @#w!a1AYYY)/v^F2?__SbvH6ȈFOg'i)g'3&~~RBoC_cbp, 0'ia!&^rvF;'_/KVh_IGg +n>.3o#S2* +&,X@HYa1Ya#>&^R;/Kvh(hh'G)jKZ +ȰxHN?WyaI!g??ʛb^F^bO_O; ""bZbr2ڢ2666(((V^~rGi99)w&f^Vv> +_G_S3K:"2R.nnr.fVV(hhjIɉiW773C;~fF6F'SS...Ύ..bn((wW9 iGc[jrRN&f6VV +''3;jBRr2r2rh&J9yy!Y W77SS2n^6vƆrz'g''s3{Zbr²6Ȉhh88N~CG7iY /KR&6vVVFfƎ +Sg'w'ۋ +J"ZrBFH88֞&7y! IW7sR^6Vvf&j{'G7c# jJ"zB2(HȈ^"G7 yYy w3*rf6((f^k:'_7G7w_/ + +š2r(HVfIyI iW7Sc2^6vV6Fb3o'_gG_3s~"b;*6h((7 I9)7O r.fVƖF.+_G_?[[ {+ +BvhxHh(vRGI9ٹ7;;rʂrFv&>no'w?'3k/_*{k +Z^(X8Z')y9yٹ )_3 ;BbJrJΆ^f&n:oO'oc"2Rnk.RR&ZHh6O3#9Ͽ_{cB'nzNrz ;3232^;^G6&;R>/N3RFFN_2_s?'_S'' +bz~o&>β;^Þ& +>& Ko.o#c{~O^;/ooOSj#'f'ڎ["&#nVn(N'2N7k&+랇wS)^Z"ZgiF?so{'[S_(zF'#3B??g.I:OG(BG/ +(G_v2Fi)ƷbN&bf#SvSVVFg6kzhh)73v  ^f鞋_#{ +ʏ?GRg_Z'K~v?/Kb;oۊ#3 {+S +#kk + +K +* +;b;J2Z#+ڊ*K +k[ ++k˺*j +kkKj; 닻jK+ +jJ***j+++k+*jj+k+ +kj+kKJˊ kk * +k+k*k+ +*+jk +k*** ++*k*+*kj * +*j*k*+kj + ++kj****k* +k**+*+k*k* jk**+k+jJjk j +** +k+ +*+ +k*+*k*j **kk++++jjjj*j*j+k**jk* k*+***k+k*+j+j+j**+++kj* +****+ ++************************************7sSJnz:K +;kSzkzg@'1ڶrIKz?(YW WFh)2V[g i7vZָ㢆s)k'RFZ>kr{'2Z'Rbs?cÊ.8`V y Gi>3gS/'žN>n;{ rr.;;K2*{;#;""* +jJK[kk+j;{jJ"bH ?b*(?Fo'/nf~.s_Go/ +R?ó_g+"?S[ SRc/l8#ih&(˹a!o'GZxH./WkF&^Cn&^O/"N{CO.Bš*@2)1x`3Sshc`iF !X[&_a&zω)n8VW'kg^ oK/kYd a6ym 0NJ&-Hhf( h!&+'HOw.VVN{ZbjZRbn/qiZwg?hNɉO&fSf~6ֆz۲~O2bj;;;3g#o3Ï3J+{2R..:kjr2rJZ#(xisg!O^^onfzOž#R(vz(S)OΞoηGCN ʎΊK2^^b#22bH06W^69)BɟNG#.C'j.C/"FO?*rso."s?/^+s22:r2 +"2: +;#+;C;kj#+k+{; +K##k*kk"Z ++kkjJ+jJ *+ KˊZJk+kJ +* +jj+ kkK{kJk*ˋ +j*Kj +ۋjK{j*+ +j +j *****++ k*jʺjkk*J*Kk*j*jJꋋ*+k*:K * J +; + +*+* ++++k++kkkj +J+J +k + +; * + kJK jzkK +{K*kJJ{ **++*j +k+Jjj+KJj*****J *j* * +kk +jk.bzJ.;[K;j"~Bbzk/Û*:JJj*kz + + +j*JJ ++* +jjj*+kkkk* + *jj +J+* kkjj::+* +j˻ kkK;K+* K **K*Jj+*j+ k*JJ*j++*j +++k*k+*j+k*j +j++++ * +*++++j +*+k+*++*j k**+*+j* +:닋*j++j+*jjkk**++***+kj*kj++**k*+*jj*k+j++j*+*****************************************************************************************k*i^Z wJǷg">NNf Rv^//'O^ hb.f(‡br.:J +vgbgzr;v;i"W2 +* +{[*HhJON6ۺ>W &r*3W.oHG#'(7_G.׉ ? k3f +v~/&zKn//K6Gzi>r++* +gHO?Fokfϲ^>R#g#/kOwB_f^gr//ώ&7ʳھ+"[FJ>:_+3*c' r.ro~Fw"sfB +Kz'3?#ʆۊr?^+g Z.O*+RnsK3gC&nR+J3oj&c +3R_sKf2.C^/뺂r{"nC j**BJJ*c*J~kj: B ;;.K^rB/RSC# +s"sO/?32{2kNC;ko:C&^^/@,6)g!97/: +"fnbCZ*ƺbzrg@LVh)W9A!aYə_{CJc^^c[rZ.JNnn^κ:#s3Ss3c{{"^&&NR2#s_'_ggg__Oo#*2..bz*K#[[۳CCc #kkjzb:""zj+* +jK˛K+K{{{#ۣ#;;+k+ښ:zz:: +:JjJ:JJjj KK++K;k KK*;kˋ{K ***+j:ʺ +j*+jJ +jj*:k++j++*++j +++*kk kkkk*+kk kk*+kk*j+jj+*++*+jj +*j ** ***JjJ*+ +*+ *+*+ *+jk *+k **kkkj+ + +*k+k+***+*j****j**+*+*j*+*****+*kk++**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************(yZ׆ ?{~s2cZjorK jc"Ú+:Z_S{SrS"ogO_O.wK7wSS'ʲ+n_/hy^?w7s:{N) /&#c(/_i^&/z:'&/&szjC;ZoJs(VR r/{&fʿ;G/։ b^ƣ:2. "/sWvwC7׶rG>^_Ϟ[*>3_R&Z_ONhFz_':~gWS +{/#2^WB^B.βio2onsz{N/ H'^gvgn'j ^'f?R~/[ofJ/[:^׺fG"3ns +cNng>_{&?nz"Jsj"/N+.3+#"/k +of;^fjcf+{Ro:OnCb +.3~[_>koBJ*z+[kCZ3rz{ZzºnRo:K +/K:/+Kn*Jc k;no~O2N +";r#k2Szjb;[ó{[z* z* +J; + +3º[k +J; +C2* +zkJ:* [c#Kc#sK˳c#2ú2;+B2*:>b&N&F +7wO 3g'_3ZOS kڋ+K +N 0Vw9A1a)W~vHN'3g?gr[N +~J +/Og__/ RRnz _GOX0H@^CW!"hx88H6ƣG_G_7r^f~rN+/s_O'xp`茬Q1qqI)i(HȘXvfǷ)y'fnvv(fv_gGGGG[RzJzZ_GWVHȋAQ1Ya)j 6ZII99 _*x8~B ) i));Z^ *Sw)鷸@,X*gqqg~V!oHXHWiG[kV^^G'' OÞxpp!YQy ^h YI_sJ giG[*.>c'Ϗj2J{7F.a1?8`8ƞW!iCh(O_W)'kj:[Ggo#+b.z˳?'g7G LyAhƈ xfSW)ywCr^f&)Gr>>+_':"^: +{??O_؀,, x6w1Ya^h(^(FsW Iw6>/_Gc2^^##k_o K:~Z csC3C{#+r֖hxfO9Ywwg~fRz/GG__fF~BK#_'sڞ[*z+"..n>2NJ#k3{sCs3/Osss{ * { jz:zZbBBZZJzJ +***jj*+KK**+jJjk kkKˋ +J [; jJj* +*** +j*K :JzJj KK*jJJj++k +++j*JJj +j;Kk +j**K;k+*j +ʊ+* K늊zJj+**{ j* k +j늊**+*+jk+**k+kzjjj+k*;+ kk +j +j+kk+ k+*+jJj++; kjj**k +* +::j*jʊ+Kk+kˋ*jj*+* + +*kK{;K k+jj*++k**+jjj + + +++k +k**k*+*+j*++*+********`)ǟsjjs:RZ[&')OR'Sf;rbn;"2sB bKbzÞoS +Ck:JS/bo/S2+/.jSJr22c3":Rjc{ "/rcjúS"{ckK/j:ò 3.㳲RjJ +;K"s[S2[{sZ*BnCb"sj{#2kk +J*+ s: +R#*bc/R+*kr;[#cj*z+Z +K#k:":;#[ + ++j*CKˢj; + +z *B*+*{#j+Jrj+k"k + +;zr*#Zjcj.:[K +jBjKۃ3*2*K+JښkK+ +{{k" +j:S{ jڢ"zk{˺b{{+ʊJ +*k"J+K +j+K{;jKJzj;*k{ +::kkjjK{JZj k +*jzz *Jjj +k˻;k +k{{;: +J;K +j +*;+ + *J++K+j뻛+*+jjKkJʋ;*KjJkK +jj +: +k*jJkkˣ*j ++; j +JjJJkj+j+ k +zzK ** kj*+*jjj* K +**{ ++*+*jj*jj +J + +j +J +k +K닻++kk*+ꊊJJJjۻkjʊ+ ;k+*jj+ k*k+ʊ*+jJj + + +* ++**+j ++;j +k + + + k +************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************ \ No newline at end of file diff --git a/tones_german/cause_12_loop.isdn b/tones_german/cause_12_loop.isdn new file mode 100644 index 0000000..e8e8871 --- /dev/null +++ b/tones_german/cause_12_loop.isdn @@ -0,0 +1,288 @@ +*d}EьDH$]abJzk J:n^Vvf3wWWG?3;#{cۊ;k "b2.R2z;;/S7_ @^mmׁ3V@HRS/;aWVH6o'JZ.gǟ?o2ʻ+c Sc?_/[orذPX(i;bFv>cǿ6V(r +'goZZj#c#JBNnr&2{J^>(XV(RbWɉi'SC{+kk :b2"RRr22 +K{c3[{#;K;KjjzbZZJ+kk+*+ +kk* +ꋊzj +[[SC3#+ +:J:bb2b"z +++ ;Kj*j* ++KK;;K*kKj {[K KKj*+ +* ++kK;::z::+ +kJ +kʺ+ + ;+{*j+K*+ +j +*k+kj +kkj+*+ k+*kk**jj** +j**j* +++ +k k++jjj+**+ K**+j*jjj* Kk Kkk*jj +*Jjk+* *+kjJj* +J* *j kj*j+*+jj++jk +jk*+ k+*+k* +*+k +k+++k+*++*************************************************************************** {J* +ʋj+++ +k+k+k**++j*j +99~*N^/"jNrZ)aN_^`FH( F!if!ƻg [RIVZI)g/VW: ?_6³^rrk)RR +6Js#kƊfkNj *s~&ss[j*s3ʟ~KRƛ&zr?>ck>.2nK>KsR_N&^ +G.z{.+Ώ:w׏/GShrkSN*W'ڲj&FB_n/' .b>&{33.2&Zwi)o+V6i;.&k +O+k#~.ˇ?f~kgnF#oO7v.rS2h27w7VH#׷#>+b㛞&.?K{2&>Zn>6֚G'+'))zGǃGhI(o 7'+wFv(f)o^fRo;z'c/GC"^BKKSoB&&.['k"?R6{)L1mm(֟Ia9ayfK7ǿ +7S6V{?B>3_jkd<m!2v(Ǘ!!w'rS7Ng&& ?NR:SZϳsC/? BrN:C+"K/'/*sS?G"\PQV8vW[^֢WG&N3w;.c?[+RjGsBKC?g7JffjW:'^{_c[[fl֟qqSFwWHYωז&/b8/) Sf'ϋO' + +{/K'_˛o<08b1WYX>!!gi(Ȏ~H6_[w?so^O'[sZc+SV8@IYW9yaY~ +'y7v^&RS{og?k3;.cs'gχ' koj pxx__7ᙉv'Ig^(Vk#oOS:"rB_oo_ϋK?{Fpx`wO! Rowg~&V~ ϟ's#˲R/OooSs֘0@`[wY IiWWۋ?:go7B v[C'oocZ3 s3 ;s/j(` HFKG W_/SSBF&J3##ۻ#;;s*#*.&HFVh6^ns_7''_SS[K"n&f"j +SsSoSRVVVhhVVV.K'7))ggg'3B>~&fnZ+[[sSs3SoC+vVVVVRZ_g)W)7'"o &3C#cos?_SVNg))iLJg7'^VvNNϏsˋ{#''__'z~x H>WIi)'?_G)W77o^V(hVƆn*s'Ooj+*ۏ_s+2fpذb"?W W_og W'ֆhV&_ggSo +;#j/O77'kn~0`H>3YYi_oW )'k6hH8hB[gϟscSOO?c[*֘0 @_w9Yi)'w)II i~VhHhS{'s3//_G_s*cZ,` x 9)__9I_:FVȸ(Fƞ~;[ϟ'sss[#CSso3RR2&V80@v  ))WW77/C2rf^Ff^2*S33c3s3S3s#C"V8Hv3/Wi igO +&>&v(Ɔ* +[oOo?/S3~fVX(.cCiɉi 77g?3zf&((V&^CoO_OOOo//SS3V H88s'iI wGgg3#:f&sO_OoϏ3sss[">8SiI9I Ii'_/ .&vvvVVֆN"KC'ggOOoS333c~HVhxx6) y IW?__3;R&6vhV(N{gOO/ۛC[[Jf VVx (i9II )G?o[B&V6((((F+;3?gGg_Ϗ/sKC[{~6H r/)99Y!y GI)7Cg'&`kWiWg'_/C/G7_Nr#83nO'gn@LL@Rm-(X^'9YO(bi >b:8Ο'jZ~3'oJo'+'J2.ʃ2S +ZB6` Q 8 +W Bh9)sfzH(7brs/3s{+ kss[;k:r2b3{b2:J/0`ѹHH*).3)!Is(v9WzvO&hnV&gϻ[" +r+rRRJ/,lpqA'H(hG)lj9(w S(CsR# +&&/C.Zcoj[Rrˣ;.:*;^;?x@遱 v&hg{ɹ' +)) Z˻ƾ s +:{˻:*k[s[ +N3+zzrš80`)A)iI o7w;B&CWV*GR+{[K?{r>>z*Sz;,PhA/BgnCY!ǚBWr[gb^BvSwOkn# g_ + +c>~*/{S/k6zѱ[_8&;yas2'^3.;B6R3ϋ{:[G/J*o?Ok.C#_XPa_Wx[YawB['{k"NbBN2Sλg' _3O*3S#/sSOGj|\p3IIAH69wy r+z#g[rzN^~2C;JSˋSS#oO[#3;'OC +#c'_ ˗I1Y&ÃO iC''C.bjBR;BZB2.rB [/O/{jj + R +J"zz{ *{KK*jjZj˛{3//K[33sz +JJBBB:J:Z J+*k#kj j**jj *jʚZz;+뛣;Kk+k+jj +j +** +j* +k[[ J+j +++*JK+**J + k +*++z K++J* *+J*+ +j + +J +j++k ++KKkj:J+++j*ʊ+Kk + +k*+*j* *jJjj+[+J ++ + +*k k + + +{kjJ +j+k kj +j+ˋ*jk+ +*kjʊ+{kj+*+*jk * + +j +jk k*J +**+kkj*k jjj*k+j +++K +Jjj+++kjjjjj* + kjjjj** K* +j*kk k+***+k*jJ; k*+* k+* ++k*jj+j*J*++jJ k ++*j +; k*KK*jj*jk k ++*++j +jj*++kJ + +k*+***kjj + kj+++ k*jj*kk**+*+*+*++JkK*++jJ+**j+*kj** +++ˊ +j +;*+ +*kj*++k+************************************************************************************** + + +jj*++kkk+ Kk {;K k kk**ʺ +Jzʊ j*+*Nff&Fffj3'w7'__ã3cs[KJb..Rk#so3h(8XX8V+sG I II7׷g#/FVֶf +g'___G__'_rX```X3yiY!OgG'興V(&[_w_g?OWhl ``gaIY!yWW:/WcWSFZHƈ6r+7?g' X`{fn!i!ai /?NgSON^jfF?7'gc*㛛o9 0`H†yYiG)?_>c{c?v'&fnr^*z{oC_S**.R"[NV`P{Hhh/ֳ9WiəWOw+{Kn;ˊR&RZbn#J"ZΛ²Nj8ȞV.^kw闇GOGk'"/ 3/{"{rf>Njz/NB+^zh&GζV3>bN/ggR_#?/nʣSOFO(z:^HO h9&J_CÂ/jG K?S+S3.'2^n&b F^JS۶Rrs'i)vsOVGvJCϲR?'iV+&O6*J)(_(9;h( 'BvI> I2gn_Gbr"s2sWSOW~9{F O&2Kw6W#&HiGfsgrF6oiW7/rG*z^(_FFfh"Ib giVɈ3xY'h)g7"7'V#*jk"Vog/FΗ>V{(i^v)nn7W)f.wnjWWW96N9CBBk#:k*;"ۺjk>g;K3r.R¢s.c[sێrۢ>cbrRNJO~"**fg&'Sosb7R/ +zJs~Z/;{ꛂC+sƿ:jK:zjknC'[J;RJKb +k KR/;[jr3j;.obbc2R/:rzsn3۾cO"c._JCK;N*33+ +>z{OJK>rJ~sfC n.*>s{{rZCoj;:ScN3*S/N[co#* +O&~֖>N;OO_?'kj˂os;3c*#"K:jZ.^6(&Z7gG'C?˻R³jZ㣳[sϏg GH XX )Ayxv(F i i۶VRg?&F6&~:?sKN>˃o/"B.z*ۛ3*j::zz#k:kj"Z+K+ˣ*bZ: +kc++*zC[;#;2K k{33#+J +jk*:j:r˺2B +J+*+j;KK3+k**K{kڊ+*J.r +/*2r +z[kk:[3*z;㻚#3 *KsjJK R: +Z+Rbn>&co/3ssc:[/'__KSoK3''\lA͍I3_Sm(&XHnS``&&Zy?v `(Ÿ ;(V7ǟ3/j2NBJ.z ~FJ;ʲOGG_'_ +jj2 s/' $@m홈hhR6Ȁ'a--QW(p` +/O'ۇ9Oր/ف3^~k +g3j/[RS>L<|Pam-Nv*hAS`XHo_.k32.^ú{/'/.Rr?8 3 +( g9ڎOb _g_cJr^_?z+ #**jjjZBrbnR"s` )/__'*jjCO{>2nRˣS3.." +#sr*3b: Z:nRn[Bs.Ok#o#/#s2O/: +JJN>cc..+2>2kn*rRj33Rss2/+2[rJ?#~S^{CnNrj+ 2"J"s.2ZkR/#S2S#c.+C/JJJor*2s + ;# +kjkk B [j{+Jsb b: ++J"z*[{+k ++r :;zJ;*kKJk*J +j"[z;K{*" ʊ***+*kj+j + +k#"#ꛊJ:k[+*{KZj :Z KK#ck# :" J{{2˺:kZ"c;z+* ++k; j;c:ˢBk+J*;+Rz{ZJ*jJ:# J; {j +ˋz:K{jZJ j** j ++j + *+ +k;*ʋ;ˋ*+*jˋj ++*k++*j****j* *j + +++k+*j+kk*j+**+k kjj+*j*kk* +Jk +*k***++*++++kk+**jj*+k++k+jj**+++**+++**j*+*k k* +j*+kkkjj +j+kkjJH)7G2#V?b+3.'j+Rnjkk3oO{NJWV/_o_O_2g"f2NGFjz"/^Oo~'J3[7n_R3r*W>zRS^/3 ^[7Λ +k{B2ofC3RC>[K>/bsZ Js_/sS J2+&3V6XFfiaaaYiN&(^B2.??_;j*.nr*o?G?/C'gW((zs +g))' ;C[@a L@6{!!a!gNf6j_OiW`(vO g)7C?S#))l GY9/~.WyFHH8 + WwG3;'g7Ǘ|8 l8(F1O/׊~WS3IyWw?&֖6(V*Ss'/;+?G/33lV ,n gSΏ7NJ_9)N.&^V>kKں#SOs_333{3o+v&x(N_7SW77g'_G SK&66^>nβZks/s'/O/Cj + bXxvzG.G3[O'C/2Ffb[zs3+_/osSk:Jj2n>&&&F6.b;g'LJg'Ƿ'OOCZڢbo^ vi`֑HC f!IgVǾV( +Of (vJ'?bn_[2OG2#ZrGOJS_/r/+szJ#[zKb +nR2.2k{ Cs?Ss#Ss[b >2+>>Bn^NCcsS/cS?3/c{#{*J??G7)|@c>AXoI)!1~&J99cf6B)FKrfR7GBjrZ3vCW c/6'in"^K?z.~c:Rzj:..JkjkoSC/S3/S* +zj J&rR2#΂+{#cSϿRh gGn掋7ojr" >S?+ʢ ++BR +ˋZ;sC39ypm ؿi9`!퉟7/ZJ(6'g?>foo33?JJ +[;.~rN..r>N.2JS33{{KksSsS3sSC[[{/sOZȐ `-AY8;?W H !AS?~iW(6f~KK?/_KR{_??oS/c:b*Krk +: +:.0&i GOoWW_O2r.&>2nnNn/;33c/cs; + +k{Fpfkzh6"s7/w77K"r.FVVvnosCC_''_ 3K"ƸVvH~3g7iWwGr>F6(h^&^BC#:g'/_ckF`8NxR7)7)II?"b&Vf.b+sO?'g?_/cJXVSWWIiI׷WLJ?/{"vV8(nBSO''_gg_ÛkK 2V`XV>_7 i IIWw7_^VVhH(VNK_G_'?Sc+ +"f؀`XV(6)ɹiG7g7?o[{2~vV(h(v + +#gZws7_bC?ȌL9yGIY iv(V!a 'zFhXXx&"z +k#gggSz'Gwg?/__S.NZ{71A1Ww)#IYi?>(hV^>h(6~77'S+rKÿ'_o333 +""+b ,vW!/.&66rO)9ygb6(v6ֶ^ۇW ij~΢Cgs{ z:+s/8аxj1Aa9釟OO/BC)ɉWkhHȈhJg3[;KkjJJJKk+{C;x0H^a!)oBFvN*ww_h(&GËB2R.۳3C#sHX(A! ׇk~v6~/_g6F&c'gO +R2rbz {sOoFh@@Xh79aaYc^(VFcggN&ff~K/_gg_zjjzbj +j+sSVH 8o)ygsK"^vV(Vk[b^^Bks_O/[K +JJ" +2 +K3sK>` Yaa!y ׷jRvV6&{o^&+3SÛsˊ:.rj +K3[rR +[벆h8H(f*)I iWwG¾^^~"J2R.~ +osK3sK;"r.+kK[Z.;"z>fgg?_'oOc3#J~ZBz +"jc[B*j;*# r# >"*kkʃۋjj2k>j/;OO/c{g_nrNR R2NJ #oo*RzRbrnR #S.Bg[._fN~λnJrχ6_/b'ڋ{rnڊ Jz3/R'cb +JkzK[ +?.2BO3 n+b^;;^>J3k_˟BBoBJ>¢S*+nb#o/Jbr*S'dz3cso3nZ{c'S>rccCjgCzbNrr+RR~z#RN>>C +{j*;3#+2*ZںzjoK22j{Zr{Z*#Z.{+cs[jk>+Rs;nr*JzNZ*3# +/;Srsr"3B*{+R.z{b?/2b;o[ +B[Zb2Kjj/Jn{3"{K;/JcR2&Nr[;JR>ڂ:{3#::SRK/R"JN{^;[3 ock{" +ZzںCkSk# +Z[C뛺:zSʊ+Zۊcz* +K +kzrB{R++/+ +k3+* +#SjJcJS:*NJSkB##"rۃjcC{k3{ +" +k ʋBzzn2sZ2ʃ3b *^sog?jO"r_sIs3;R3 +J.k _n: + +Rr+>;cnj.rs/c"R:;2o#N#o3:Nzᅴr*z#"3 +b{s rcڎRS/cRz2S3.z3b2r*s +ˢz[+ʚj 3c2//j;?3bo/bK/b{sBJ; +bs{znrΈ x(^&W7:2G?WW#*^#+R*rO/?dXL @8)!)ii77cRrׂ2jkJJK ++_ϳ3S?"BRZ;_f\0` 9.3OwOIWb3F6&Z;:OWgO;/rjK?'O?^ 6vAYaɚo3oW)Wn.8~G;{3[Z {Rss_sJCۣ\r,FqIkᱹ!#y{/ +))?hVGGb'*zS狷_k |P@:wOa1iWKɶ B i)7(6V`3gJzjc_/_go +Rz3 0nq _aq)9I3&iw)GfZ#vvh)gj +oSo?'/{kK*3$x(_yqY! 'vzjO)in; +(vxSVs3I' ?3'kg{?CRkH__wya)OWiJ˻(6((ώ7gRrOÇ3S7jCbn;O +L7Iiq99n_B&(׏ Ws3n(HxJvNfi7[K ښ;OO?3"[{ R`6_ AYفYO+VrCwWW.&V((2'7i__ +J z zJS?S +[{Xxpp&jiyYyiWn>b&^&Rڟo'gSo*> bVhjS'wig_G/ +"2.;K:*.6nϟ II iwo*z‚R222.Nr. [soOOs[ JJj +brb +RRnξNNnBz;O''gOos2.>>~~n>2RSos/S/;*zB2bz:zRnN>ºK㏿g__s3 RNN~~nnr"*;c3/ScjzbbBzz":zz:"B222R2š +KcO?_o*‚B>~NN.Z:;[s3S/33ã +JJz: +z +bZʻ;/OOO/CKB"2R2r2"J +;k+kkJJj *J: + +J +j + +**ʊ +zJ:K#s/oo#s*s"{zrr["zCkrzRkJʺNjRb"*kZ + "**::ښ:z;#3Ϗ/o[c+jZJ+++ + +R2jNB." + +* + + Z;J{j.N.#o_gg'?SC.z +v/C6o":."rzkc2sڢ3 RB~^FfrKgWWWGo#{B~^nF^Z#/#cjzj+ j*"knh^(HvFnS7) 9y9 _3 +bfƆ&)(V'8ɏ)7o{3B2{r2 +ZJv(ưV 8F'9aYaIg.&֖6rBbIj"9::#7W_'/{k"rN:ƖXhHZ'Ia_;Vh((fNnRk3Sʸ9hW6')sg )gw'/?n~z^RBK⏳φ.8~`hii1aIiOhV(V^'cSs8 0WVy9i '[oFB + {(`H@+V[9YA1A!᷿VV8Hֶg_ ".n6`aX #7!c [È;v._O'*@XxXWǹAAA1wO&(f+W)f6hhVV'1Ra'RO:h6SSSCHxP` 3yၱV(x !y[J` (n^v&gRicƷS~# j p (G)AAAAiF((vCi99Ii&xh#iW_K(By9G7 ~Ɩ[S?'G g{kH X(Zi9Yzf66fbcG)7O>f66F6ZSSg_z2NbS3Joo32/Z{??'[ChLv2B1!)X`xaai ;hxhZw)W7_V(((V6^3GG_ fɁbf/6ir'o^f7s{v&+g_?o_''Ss{JBffjsۊ; ~B+ >+S kÿs3{+;CcZFH< a yC_'ϸ@wgg&&6X^i*Ɩ6FvVr_gv^A7FiF?v^?ZFXV(&giWWWsJ +OGGg?s3#JnRr6Ks7jcn&C;{#/ckj[/2|*_aAIV^־IG^&fvzj #" + +J + zj{k:; +J;jz{j + {jKj*:+k::zʊ+ +:+k j ;닻{;k+kJk[ˊkڢj꺚Kk*+*jjkk + +z*jʊk +; +J+jˋ +++j+KKjkK ++ ++;k +kk*J*J* +jz:jjz +jkKkK:*#+k;j+ʊj **K++j++j:**z+ۛj 꺊 ˊz k+kkjk*+jj*j*+(/Gc; +oKB*:{JJ;{k+ +* + jۋ* ++*j:k +k +* +;» +C#z zk#:k*;"ۺjk>g;K3r.R¢s.c[sێrۢ>cbrRNJO~"**fg&'Sosb7R/ +zJs~Z/;{ꛂC+sƿ:jK:zjknC'[J;RJKb +k KR/;[jr3j;.obbc2R/:rzsn3۾cO"c._JCKZ{3#JˢO*.{Kʊ+Cr . +J##o;zroRsSj{O2nsn"* + +ˎ*_jʛ+bSz:{" K22[*;#kjcb*z:KKJZ/3Kr?c#kJr +bjc.3jJJKk +C+S; +3r":k2 ʊ*B>J c+Krz#Ck +rÚ*+2/z3KnKZ +"2SJڃS +;SZ;kꚊ"J#* +/*:z 3{z "sJ+: B{Jz+"{b {* +cojcZ +{;[" +z"+3B["* Kz: +++;zz*+k;K:+;KJ+j *k*Jk +# * +*j;b*J{ kK+ +j+ +**+k +kˋ;K;z + ˋ* +" ++Zzk*jK*k** {Kj:Z:k*K ****kj ˋkkꊊk*jJJ+*Kk +k+:*; +Kk++ +k *jK Kjzk;k+;jj ;+++K: +*+ +ʊ+kkzzj˻k*+*ꋻ{k +Jj+kj*+ + + ++뻛;+ +j+ʚ{K: +kkj+ kj +j+k;+ + +jʺkK+ ++;KjK+ ++ jښz +;K +z +K +z +Kj*+**j+k*k +Jk*k***k*j+;k+ +j뻻k :*j*K* *j k +J*+ J:*+*+kkk++*jj+jk*J +* +++***j**+닋+ˋj*ˋ*jkk*kk + ++ *jJ+K+k +Jk k+ j*+************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************* \ No newline at end of file diff --git a/tones_german/cause_13_loop.isdn b/tones_german/cause_13_loop.isdn new file mode 100644 index 0000000..ad411a2 --- /dev/null +++ b/tones_german/cause_13_loop.isdn @@ -0,0 +1,217 @@ +*d}EьDH$]aKkoWg&,!QyyiSSWG_."&Ɔ.&.{joCSbr_ *Ϛ[n:Rzn;j˺k +z&憞SO_GGLJss; k2Rξξn.R + Ks3S Z2¢2zzz":zBZ**+k{{so/{+:z22bZJJ** + + K*+꺊 +zzJ+ ***j++++* j ˋ++ K?s*jzʺ:z +J:JZzJz:: ++K{{[{{K*ʊjJzj+*J+ ; KjJ+:Jkk +j* + +*k*J +*kkj+k+jK +j +j + +*kk kj*+*kkk+kK+j + ++*+{Kk*J [{K*k*+J*+kj +J*ʺ:ʺJ: +*˻{ۣ[;; ++jjJJJj+k:"*K +* Kkkk*+ +J* k*++jJjjZZj+j*+k + +j+ ;K*j+ +j +ʊ + +j* ^Vs^q([kNFJ+n2 2J?2CS Š.f7N/n h`SIwX h{#Gg> &7~Sk y'SC*fH鎉FvO v Sh9H`^k^_֢f)VWv()'~&ff>(/N*(._2'K^)?K_c_8)['&{(C36_^~+ϟRF;[ڏ'.[nBgZ^ֿ~rnon~ZZZ7'&/rFj sN{ꂆw +SrbNS&/Br+r~"g'/si[vf +bsj +.?K^2C3 +_&{o&g)'7ghv2FG3n/G#"FFJR"_:.kI_n;sF?/:/{g~wǻ˛~&W>;6&.ϲ_V_:~Ο+Rz+66w7F2//Jf *>^fR_ssvhhC3sO*?{;F(n +/˻2.+rssb*/^JCr2gC7zfNs^J[Hh&G׏. +6HX([)I97C?/I))3ʛSG.2rOFRY_t\a`qI'_3rzG>_&>nZGc +s>277*_ ILVoV~Wa 7.7kkbh#z^/_.'":ooK+3/)7|4ls!X[9ǹV_7bgW{ΆFFzgisˏrg/#Co +;GCC3'))dq Y1Ǭж_1WV& >SIYn&FVg +BB{ZOgϊO_̂O a-VgA!~f'8rWg*׏v8o7^??nngG_k_df-my0ji9qW`^~ O^x")g.GW3>_ʆ'ZC_*j|V-a^iP Wlj)(ֳK{i'h^F_KGʎ +;Bz_?_# X 9Y/oPH'!a/ ^ ZH +Bw*z۾s'//g_χ,vjqi)! +`/*H)!)wnx.BgsΞ/Sc;'''oSg'Lظ@yia I i+hf&?OocB[ _GG__O ` 0 7F3 hc_G!ISFh(vr#c3co;.ogo'wg_7o@ЀIIASiF(Z__'&(RC/OK_o3/gG'w)',ИPw:i6#'3OGWio_((h(Z{LJ?g_jsOGGw(Ph@,@h6_IgA Y'vGWiWG[^h~BOG?so/O/'g''''G'@@X'_Yioz_7׷2NFbn&'{O/os'>X8@@ 7c')9igW_w_^f~Nb;{3C/sSssoO hf2*/3i7w)igWOs&^~&&NBRZCC?O?.VV8HFF^CGW7w)wGW'sbBnff^>s#oo_'_(F(HHx&KK)iWW'_OƖ&.k3sϟo???OOFV88F^{G)Wi)g7ϟR&fN +:s/O?_'(88SwwIi_w'.rf"r#_O''?OOO 0xV wɉ_)LJ wwB^(((Rۣ'g/oO''gGΘ0pP(w )y)9))G)w7bfvNVj/Gϳ''ϟ'G P p`ؾI99Y9I w)I)OJv(XH&f>gso7oo;/OGg>`P{y!g ))i 92rF(8h(6֞.oSO''?o//'z0l VWyyy 7')ח)))nv(H(j.j矇_S#c3;hH(63GW ))W777G'c&66f>b:[/SOOO?O'?fXhXx΢) I I)W7gSv(V>R;C/_??oSX8X8v.nkgWII I ))7' RZf(V(^O'_'_?oO X X(R2' I)7G_RVVh>;o緇??'?oV R9I 7G[:>6vhVVkO?'g''?O/oh`(X`?Wy9I99w7'~(f6Vn#zogg___/CC//#`(x bg)99III9i7gs*.&VVvVVk_'g_CN#G)iW)Wl$\laA+2'sC'9qهf fV(&f&^fNR+s37G+ +*?8@1/&Hv2o?Ɂhf^(V">~>Ͽ뢲zwG#"BOOosckJ.Z;o܌Qmq68_RfWO.VVNLJf/)iW>~R*gs.2jORL-Fx OwGa9vhFsFG/b.[oRgw>F +3Z:*~0̌0A1?hx.wG_!Y;W^6soW:FF3O*NRoz^3S+Pl YqfJ'y .Wr^NNR S.s^"c.2[k2~ + +##@Xəa fF_ 'sI Ww3b'rF&~ +Sns3{:Rrr2Z.RjJrnjS xHWI 3&^>iG'3gG'KKZnB2^n* +.RrrB~Nr;BZJB8)7‹g__''?jjCCKR.R2z2rnNzkJRbzJrBKJ+~ h ɗ?''OS3 crNR:Zrn"J.rRjR.R2+kr.&``C99Vbog_?w盂7'2*_>&+BZ;BN"#:&&"s3~#sk/ &i W3f_iCC營2B+rnfboSjN3{ʢRr +K2>2B8I'iBwyW_WO{oO:*hR))6fwB#{;{SSjn2Kkj2P|!iIWv'yG iGγ?_3S *'sRj:sJos/;j/.jC'bR@,jWy9JViCGa og?bz+`f鉺z67 BBg{RsR2_lv'W)Zϗ#"i?/Kb.22.^.B2f&;3J**s +k kj "J"J::"22" +:J +z +{[{##3C3Sˋk##{JJkzb2r" + +z +jZzj*++ jJk+{{jJ ++JJ::*J +**;{ * ;{K ;j+kkjz + ++ʺ +*z:*KjzJj*KK + + * K+* +JkK+k*+˻KkjKKk *z +j+ kJ* +++kJJ[K*jjk+ *Z + +kꋋ kjk k:+*K*+++k +*k + ++ * +ʺ + Kjjk+j ;+*jjj;* + +*+k** +j˻jꊊj k**KK**+jj++*++j+KkJ++ +KJ +K;jʊkkkk* +j*k+**k*+kk*j*j*+**j++jjkkj k+Jkk* +j +*+ +**+*k+ʊj**j**************************+*+k*k +**jkj*jK + j: +J+**j*z +KkJ*k +K++ *+K** +Kj:+*j +: +kꊊj*kJ +;k{++ +"Z+ J;Kj+K :z ; + +kk:jzJ:ڊj +jj {##ۛcC; ++*Jj zK;+†F6VV(6^fS7)iiW)''3kkzBr~NN.bꋻsS?ϿOvhvVh8XxVHvJ.WI9iI)7'_+JR^FV(v:'Gw7LJg_S/Csָ x8hZn I!9 ׷2N&V(V^_GwW))LJ_SCs>``xFJIyٹiɉ7s:&6H( /RgW)__G7)Ǘ))Wh a|p +IY'b_gg7hff(' ן'_'WX6@ +Vi?iiW?gbBz#'gVq z^FA7W aIΉO{''_F^V6(ֆ&rCgGwGOC"*2SG ((IW_9iy'GC[rff2n^[og GjK:/n2 +~rx`vfζOOɗW7Cs:2 >> +kΏN2J +λ[f'~Ϟoz_sN7*s+'.rJg&O'g +~Nf.k*o3+[Krf&sJZΗφrNJB:W^#622O^ꇂ"FKvRN.^Rz( 3')+6H'G7.gR ho{ZJ9{7r;;&&VN +.F'W&WfR'76k?{HrbVsvg*rWjN)snVjWg(II_#.rn s"G'v)igf'6HOw#s/G. rkgf/S⣿k 6W6)f#NOr'ggf + rS +OBo.2#JGgC+O'?# #Cc K s:[:+â+{##j*k+k * +k*+ ++˺++**ꋋj+ + j +j J+kjk+k*+ +*kJ*:K:k**kjkk +j k*k jˊ* + +kk +jjjj+*jjk +kk˺j++* j*j*k+*+*k**+++j*j+*jJ++*k+*kkKj+k+jkjk*+jk+k*jkj+jK*j+jk*+*++k + j+j*+++ +*ꋻkk+*k+*j:Kj.[kkJB*Z +zJRKBkC:+J:Jb  + *+::k;{#z*k +ˋ +j+*k*k+++k*j*++j+jj+k*k*k+*+k*+*k*+**kj+j*+kJ* + ʊ* +jjj ++++k+**+++*kk*+*k+**+jj*++j*j+++j**++*+*+++*++kk**k*+k+*++j+++++*++***k***j+jkk+**++*+***********************************************************j*+J"+z+z[[J{jKzZ +jks +&ヺ??[* +r+kF_;Oó~N3[cb +2/kb+ȳJ'Gbǟ3x7WO~3SF~b>V6Rsr^#2ۏ۞K?sS{;?{&^#Xhvϊ)9W)ib~+2ˋJSO...k뿟o/ ++ʞJ 6?'G)y oG_R^>O*R3'zCk7?)ٙG 3 m͍7XX!9-!k H `VwY9g{8@8&*' YYrVHXigVxFZ_SǗiJ N>oۛP,NVv9Gf( (WhF"OJ_g_g_wWg_!\D) nCjH):^kxoagCW9yǞ(71,̰-ll 1ͭy8~p8qAֈ.F Whh6c`(Aw`^O7?y)6hr'c^[jK P`g!AGo' G'.hS~Rk戞Ii.bS&7jr,d,Q8ggQ!RR`wSfxI:_wfVϞ&{Wbfk:"ɤd@W 29F'g[x`C^7x^)~^?r֘1rvZ?r^"_/wi$$!͙IaSXCY7 aW^ H)Oo)Rhւ"~g  W)*jz?) c#3[{ϿV9S8(hf?o.*'jvff"/.RhJ)!g(g)_O _g&k;Cs^~ʻ o?oJOS';j~bj2R.&^3ksj?#3oûS [sjjB((((+bKOgg'GK;nf&f&ゃ/'3;/'*jÊZ.vC₏7w))'g'SSR^F&N>ۻs_ϏOo/[[+. +jF8ֈ(hoB_))gWiG?g_/S3.&6ff>^&kS?S?/oKj; +Z~֖h'_w)7W g'Ǐ{.666^ +Cs__s3SC#Jb²f֖Ff6&K +[wwW'g'OOs*bN^ff&&r:?Os3ãssC[K"" +J"RRrRR.R>Ύ*?''gggg_So#*zb2bRrNRBBb+s3;j +C#k+JZ""BrzJ +Jj +**3sCS/S/s++*jzz**+zj꺺 +BB +ãZ*j +Z" +*˚**k;Kj {Kk;k +ʊ {;;[{zz:"zjkK*z*Kk+ K + K *j:*k***** zk +j;ۻ +K*ZVoyw[GSfƂszzo;r'3+nBsb*+boCj">Sσ~gjC/33:Vr{ZSs:.jCRKJ2_g;2;r/ۂ"nzˢ&sC#[*{o~C' +;3zZ?ZnkJ2n3ú +:OO.R:g^"Bj c;"k 2/ʲk3{s~Co/nRc[rZ +;*zN[ Z:k뚢+{K2 ;+3.#j*J "ںB*#ZcCzJ+kCڛC:kz"Zkۢۚkr#J+**js;Z;*/ʂʚ+B[js3;s##jz2R:;jKjc[{{ K +;+*;Z˻::cKz + jKk+ KKK k 뻺*: +J*K**{j +ˊ +*;+[Jj K * ++*+J+z +J+;+ **++*k +* + Jk*jjKkz * +{ :jj * +kK+zKJJ ++jꋋz;*ʋ{j++*zJj++*Kjj+kJkk * +*k + + *j kkJ + z: *++*Kk*K k{;jJ* ++;j* ++kKښZk+;zj ;k*k*J{[k*KK +k+ ++ + +j:b"j:Zb"z:BR2ksOOoo/#;k*jʊjjzrn2R2rBRhX`Ȏ9Y o/o Ks_Ƿ'2&F.N.rz#3oSJJ{[Cs3sCC[kˊ #l(i1-^~Ϗo7IY!I76ڢR.k jrƶR/Gg3k*zJj sKb2rZJ{s(0P@aq(vg_Wi)'Zhn{O+r>&hhvZ9W2^fr3'/ jnR.b*{soK^l,Q-i"h7))_G) H(~n^.bz>(vֲ牙 &^'_3 2~nڋ[CSsK#fp ;Y-)Έ3׉ W'_G_^ֈ6;nF"ffr'7 WRRS''>rc3k:*#/OzfP0QqᇆhHW)WwhVj?'R^fR +"2^VfIiG>cg?/+NRcJz0湱ёi(')NVh &Rj/i9g.vf?{rn{SK *Άh Xs)yYɗ?K#owחG ~ +Jʢ.N>Nv6S.Fnj#3O_s.ΚS/Jo8, 灑!_gFfO9zKNvn#?Ob>>Ύ>^osK:J/+S?j{K z[s;R;{"zK/S{f(x  !9)LJsGw_SkR&^Z"²‚~N8&S )o?sRkOg*;kJZJ[ +k#>@pƿi I '+zsOgO[jJ ++b^~r2.N*ʢj + +Jk{k+* +JZ+{JsS[ KK[cˊ*Jj*ʢ"*zZzJ +++[ۛ;{{c#{; {# +z"zJ +:ںj**k***jj+++k;;*k KKK˻;;;K+jJ:zZz*jJzJJJ *jkKK kk ;; +j + ++** Kˋ* k**j+kkk +j + +k++j*J + +*j*j***+*+**jjK 닋+k k**kkk +k*jj * +* +kk+J +J*ꢸg)iR[nrK2kbBsr6?wjrn r{;.Z +zcJ[J;{{;+{Bkj +j+k+j* ++ +*ʊ : +* ++#˃{Kj[#[KKk +{ +zJzJ2rr>FF^/gS3SS/oO3[*:JJJ +kk#SfH@Ѐ (6 y99ٙJrJ&NOgg7g;2N&r"*rnr":{/3 br^J n +k+#so3s +ʚZbښzzz +jj{3 OOOr(ȸNKsOI ׷G_#n2bB+o3CS2NN>^BJ/oo'c+kRb*KkJʋ+zZ"2rbz{KB&f&F~_7GJ"Z;K{˻ +>n2zS[{{ +*"brJj{*;+K;Z{3#憆(.3_wWWww{r+kJ*{kJbbRnRBzr+{{o[ +zKZBښbz:ZJ  +[KK꣋k+j+kjk *k;;K;{{K;K;+k kkj:""z:z + +j+j*k++kk kKK kkk Kˋkkk*kk+k++*j + +J +J + + +j + + +jj*+++ +++*닋 +k+k+++k**kk++****j*jj**+***+***k+**++jjjj*++*+**+*****k+++++*j**+++++***************************************************************************************************************************************************************************************************&x/W~?r:ʞ:2 +Bs3:3S3ۣrN{C:;{R'^rO:3c'>_>'3kF776^'.nORgV)>ֶG.o鈗^[FGf?Joc{KkjONf;{Cۋj>+__SfgN7>.gfj+;2JoJ.S sJncsBzc. +Kc[k.J2n.K2nB;C;sJoڃc3J:j2JS+S/cK:j[ s3r;:Kcjz* +*2cKjJbkڻʛr;snj*kc{Jj* Zc[:JC":+;:;;:;k{BjKkzk{ꛊ ++z*+{{c;BskJJ; J+뚺jk :;J +cZ㣊jJ## ʊz{#Kj::Kr +J:K {;jJj*j + +*Kk;{Jkj+{[# +jj************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************ \ No newline at end of file diff --git a/tones_german/cause_14_loop.isdn b/tones_german/cause_14_loop.isdn new file mode 100644 index 0000000..dfcfe75 --- /dev/null +++ b/tones_german/cause_14_loop.isdn @@ -0,0 +1,252 @@ +*d}EьDH$]afyN!^n_ƷwJF"rgN>.kʻnbׇk^k +cg^sSg>2K>r2?N +:n.nR*&O_CGFr+g'O^3of(3ƿ/RcO2;J>ZR"g +/_.rF>#+^ZOzRW*~2 ZBN32oj&.K+ r";+ʾ[/KO2/JOgsoS"s{C3?&X08 !!AaYI{Fhh(B) ;NKGNl&0 WٿAA9)b3f&*OJzN3*#'':c"#ZCh8VV 9ٙ9IGoo2J>>&ξ~:rrn"S3/hwg^+^h88ȶ&F.s y)g7w3 +[.^FV&r#b{[ +kC[6HHVV& _GGiWח7?SBNF^Nv&&^&>bC/#3/+C/3#jN~&((?ii)w7)wGϏ*R>>>>nn"J*ks{㳳 ;;R&~n +3_Ƿw7gg_ok/ +JbR.rnn*#ccۻk{:RNNZo?'g'?OKjJzB2rRR.R22Zڎ#j;:C jk*"nN>.J;'g''''/[;z:~bR.Z"bJ*j + {{{;k * + +z"b22B#ٟIGG˟'+B?2Zk. +.J#3Jb#NSO3'fs&vjzj_~s{G[_3Sjhg2I/ S[c_nr2 nNsJj>RZ^V2so')7.SC*NZ^i_Zۃ+O>/n>S^r.#[{&hhƞ&OgiىG:3rff^nB;kg/3r.v7vs:VR(hV^#GY!yIov((h^j C_/W:/+&*;΋Û+?iΆ v@ ָhraaAIVx(~2>?O7wϗN>F>r^R +^R3 ++ڀ0'YA!!Wi;hrF/s')on;.Vz?^;k R@`H(&!AAYygz6(F&^Rbj3oOR^zR.f&22F(ȈȈ+W9Iyy9WWwcg+Ί:&&&^&Sr. ;jRKwf_+g.c&(Ff:JG)G73f#F>N>C>ObÏo3k_/Z>sžk‚3c~bZ[c')3'?f3*.*v6*Æ^C/#^{3cz2s22J&S~&/#_>ckÉoj'f GnRgSb&& _o^h'o&.OOBS3n +fS +R+[ _:gbookkn2R;_h +rjsnZBF~ ?N)2_NZ?'J?Z ۇrcSFOog:z._^kSojc~j~n>b^J_B/ǿ_'_So +Kc#2&j*bB2&>b{V~f>CCc))WwG闗_n:n^.*SK+*s2Bn((Vv6(vF&zB7)iW)'c.N~"&*k3_{?VxV`XvV*r>iiyW9i)gg?ZRb>^nn"b3_____Rx(h`Vrf)y )i7G_Srb2FF^nn.KSOg__gǷH6θV> ɗW)w/Obff^N2c/O?'g'whv>@Fֶc)wW)w_R^FVF> +zc7gggG)2VB +wi))gW)GGOO :^ff&v&^J[_7g7o hhxxHcK'WW))7G?s*J.ξ&6hHN6F_ +3?g)W7i8f.V`hRFz'WwLJ>f6vƆ&.Z*##sSsO?S[*J^:3g_"".'/3ψXׇ֟3R~#2n;)y!ioZ{.Bs'+hV^[ʶƏ9ףg's go)S<|YQH:mQyGbȶ)AV@ț_VƇXi'nf 7)^h(:7W.F^'ώvv.G?f_*^Jǿ:>?CNnsxI7:JG3jOC&n  NxF/ii~Cׇw +6חrk~j 7id 6= ְs,=yi`)1ٶXH^xV92&. '^&G2R WbB&'7?'R{kos3_.^?7w0$(ar`7?:IjXfiS6VrSNXxF3>3rRc?Gw7gSS_K_gǖ@' a(`H׷!'ȶ3'S&Ck8osZ['g?g_/skjJp @3Ȉ? Wjrooiwiyiww_' +&ƞ^6 V&: _gg_G7Oóϟ2 ,8>xg?'>׉9WI)WgھnfFXF(WO g7Gϟ'o??3;n2p@X8)NŠWIi)i97o7yi_Nh.6vh~VRS'C/SS3'?;vp``vn/&_ iW)iW7ɷ#WGorr&^RB + +ks[ kbn>nr2JRR"(6fKN_GwWׇ_/jN^^n.NR +bK2n*B*Jj;J:[sK + K{Ϗ[SSssS;Zr *2."n2nRr뻻#۲kKOBK;kNj +:_h׎z?[o>J3N?^FZ.׎&SZs>#Rjz'Rgv'i÷+n&K瞣wfiVaۣ9_wBƏ6G2v_[כH)/^v?)KGi^'~G(.nWz+)Jg6'Bɖ6y.n鈢s)(j~KgBNo.KICG;vhs zJ?+3G7K__~cJ)(_:G/K{3K#C[S&r&h/rJ77(&Gror#{.SO&Z~FW^27s;K>C'VhWvC.VC?fj?GNsn+V+:rK.VO c:&g~¶(gڊ./b_cB2{[f{ +wf'ڣs6;i_Sf/R +?V +V7_hZ(;_B~ƟNINVFGH^6_7;K~iV9/&oRz>'+SFOvif;( (S~鏀H(s_(aHwcFiƏ7hs[F3f_J)S2WH/hr(W )wvanKg F{3~VSF_oVzkS)RO~^/>n~fGSB>nZ^˟:j;n>2?)f~2 /^N* {^cR3nJrzK_gZ'gs?'‡_g{sn2_/Jc6|LC )YqmQY99nX[Gف!I{/SzGo3 w) )fןAa)_aB^@'gIYɗh&:>v g7)_NN2)) L,XcvF7A Q g6@@(g7OiY9gJHVFSWg' +'WGWɹBƾ7 - SGIJ`0:7WyY "((V~&KG .N^JGI،|l6&_-!G @9 j^F&O>>*c)GoFCC3g`, ˆRQQ_iYwƘ`gocg /Èg~['Sn.fR{2Jsc{+pPfv! י[&{33S{.J3/z&rS3Jsκr;r^>+/ښ&+oj(ֶNC7G#:?3n{/_˞ZZ +OڏR{S~">΢;~k>2zo{"_s3r +#S +2'g:BO'?N.grZszb33KZ.k:rk&>+&ʋO[{ +.2K/ +rWCg'۳ +noRnnoG~SK^"fb^n.K'"r2f3cs3Oco :N+{Cjr"'R:BC>N*/+[Nos:^oJ>/nb_~o +?Cok_jr^ncr6fkzo+Nz+2^sz"Ck&z.2*>''j/KbK[:+.b+r;{{: K{K ##+:+Z*k++ +* +K:ۚ; +"* +ZZZJJK+J*[ K*+C Kk[j+ʋJ :**+j k*j**++kJk *jj**K*+ jj +j+*j k+j*+*k+**; JjjkK+jj**++ + +*j**kKK*+*j+*jʊkkK++*j*+jj**kkkjk * +jkkkjjk*j*j* +* k ˋkj+*j *j**k*J +*k++*j* k** k***+*+k+* + +**kk*************************************************************************************************************************************kJ**j+.ۛCcKj#+J* +rk2B j;r3 N+{ +zCj.r/s/o>.3gfg_ΎCo&~G/2kںC?R;NkCf{[2*/*{NoJn "N+#J Kb"bb/B&R> +K22Nr{c2'gg'gGs{s>rsB2.^>3#~~^fIW_;vN2')Oso'2&^o^3>cz("* n#HH&i_)aa9g_?;.zFj#7)c:f{c[F>^hnf>^*NZ&hZ^f wW_ W;NWR +i)sV'!&_;_)N:h#W&H?+Vfϣcv^G&zscgi27)?GwZ'>w6cw6(?f VVB(^WvH{I&7&9׺7 g'V//33v&H#'vGVIX co>s?vۖ*^VhR^i)nYx);Orj!bVǢ7vfIY* &'#( ^i6f{fbkKW(ngVGG/)+iIon3Sh.G?x_H/('9R^>3(^FvIVi&2_&w8B^Ɖ?6Z_({';NS'Gho2OS*F^_7v&f&nGOc> +N{:k~3oښsz: +"[k:bcJ*J*cjz+{j**j{Zj;"; +J +KJ+ JKzK *k* +K:j ++j :+K+j+K + jkkJkkJ;j+; +ˊ [zK***˚j+JjK* +j jjk +k+k + ++**j***j * +kjjkk+ +*Jkjjk k*kjjkk*j*k+J*j+ ++* k +k +k*+ +k+k + + + + ***k* jkj*+* ++*jk+jkjk*+ j+ ++k***+j*+***j+j*+ jj*kjk+j+j+k*++kj+k*kk*j+k+**+++**j+*j+j*kkjj+*+++k* jꋋj+jGh׊R*R+"Jk:rrg3NcrCZBb;3?RR>+N+f_^.: I6jG9H2WGv& 6i'oiRg&hfO{&GO:svn^3f)&[n)f/^i>of3(X^Xjfi၁Y)O/vHHSʏיGiF>fcGi\|P Oi)!qi!_( xvh.G׳Rrk#/?gǗi8hXR_G1- I2hȘ 3 )g׷ +2.Ro'GǷW_w_cȌ̈pv' 1!aG)Hx^?)) ?K3F2.*?LJ7'Ͽ#o3,`lR ɇ)/ȸxxV)W))["&r6(rK/w'_Kk*O6p2v2II11aaׇShhVVz3gg+c>JJ*#/S_Scbj+ +j 8`HhVrii!9'C^Nnr":;k ;B&jJz#Zۣr:jKZrz2B"bbJzZjkcsss[K[{Kcc[K:rbRr""zjk {{c * +J +Jʚ +:*+K*k* + + +JJ +J*[j*k*JJJj +j*+K j + +*+**jj*Jj*;#kjk + +ʊjj+k˛+ * ++J +jjjj**kkk+** *k +J*j ++k+* +J +K *; +J+ʊk ++*jKjj+ +jJ*j*+ kKjj* ++ +j*j+j+;jj **+k*j+ j ++*+j+*+kk+Kkjk + ++J **kkj+ ++* +**JΏZ + +*Jzk +ʛ[_3+kk:κ** ;osϣ3_{B;Js" kSr +j;~ڛ++s"r;S3b: +‹r{"N/?b/o# +sRJo:Bò^bf*Ns>s^_~fG; ~bJ/)^7N{oOkzfw'F2c> +bw&/7^ϟz{.sR(.wN)VۻSorih#o6r/3k..R&Wfh.9Ik_' +wh/_W'sw7混Wv+ i>i(vwVGJSrGFG'()'3+>O'?sSz^^2f[zrz3:K>'rv233SJ3:f3BCo2ok."/nc8WCJc#>'*;R_jk& Zsf_kgk{ +N*RfOn:[:2_"fBBkRJ33O"/c +#[?fnc"js㶻nnKȰ `HhVV&WI!!aٙo"VV6)W)GOR2RC Sw(P X'qa!aqA36R؈Gg''I_r^f&G'?7g7^o?z2sP,88@1Y᱑vrN*)wogi*(^ngw7G'sZ^*CO)0hXض7!ٙ1Yj^HxnCi7nȶnB^7/g''RcN*BS3?kH`H&9A9C#V6BZOs;&fnBRs#"{O+Cr +/b>J/Rj">V(FV~*'GGW)gO_ڎrrzrbR.ʎJ+:+ /Oj;#>czkZ +rkJ2.B*"2z rZccC{SoC:2rRr" +rzjk/[C3KKJb2"ZZ +Zk"*k +jjj :K;{[ {+KJjz+z +jJ:j:Z* jj++k +jʊj J: ++;J +;; *kKj+*J*˛jjJ; K *jK:j+ k++kKJJJʋ+kk* c* +**kj ++*+k++ +jjzk+;J{j + +z z kKj ;; :#J"*K2 jks +Z:BsZbc" +;Zz.*'ORCGo*J'3/;'g"/Nnr;/'BJ;b[B +& .RΆO + s/.SCVHnvo>n~;63/#G7oj/B^[B)_W/ZG'7[6~?OSs3?GFRS+sGvCgg>h/#)_7.7so3S3r*r'(gbnrsz F#.rC(^[RkO&v2:*NH2.v&>3G˞:J& zw3GjZh"v).Rbo~"'ƃ>s.g +o[~:R('"RrSjJrz.;OBۋ>^{[rk{cS[N.)nK6rŸ#.C&_&jrk.3Css#.2+>:..nNJoKºNz/K +oS 2[K~>3>jZ:"KO/?.z*NB;o.3ZJ33;ۚ: +/K"^꣣Z.[js +:nrOCk{{3 +Rz㣊./bjcjJ b&2SOB.R"?N{S#{# + [SNOz_#FC[s*NK +z[&"_W_rf#crfw_ff{*[c2#;#:~N JRJBNK +Kn?g'_˛S#jN:/*2۟$<81 qayfVȊa)iR3^&R >F)ϺZ[_3raD1Aa 78XC! fSf3'_/ .~chH6W!9"7cn珏O7y `!qash!b9FcRfniSR2 ( _7nnb[2S3_W)؄@qYIm6p`(+)a9Ovc69o?6xkc)f;_Ro +cggo; +<$K!m&@.>H^WAy3rNȘ3i8@/i /*n&/[_ggGz^L(I!r`_y_' +ɹWBf@N;GWCB_.3o'G'O~ikqmΈ8pgAhhnvsOwbN_(?k"K'>zN*g'/oǗG7W($,^*``!mm!/@R'f9y_93hxJ舛Ǐr//s Zr +[O_?3K33gklXfA1!16foyYCN(V^:GG gR>2"~K/S{k8F6/ǟii 7_GG{j3J2{K#2BRnr +jz+[cC[; +:j*k*z ++Zkk*z"‚bjjj#s++sosOs{{ K"2BB+ˢ2b2kãˋK *bj*k*z + + +z*j" ++KJzJ#kz#3Jz;ʋ/;{ JjJۺ2"ۋJ:kj: K:j* +Jkkk+*{ +*J +JJ ZK꺺+j ںZ_zJ [n*2;j +;Zڋ [r"3RKz*jZ#Jz;kjkJrJjjC;;JJk+K* +닻k*ʊ+J+k + +** [; ++;˺ J k{{ +jJ* kj**++ kk+* *j+ jJKk+: ;*j +:kk +ꋊJJ {K**j +j+j+*˻k+*+kjk :ˊ ++*J: **;+ + +:;*J +{K+*++++jJ* k k+j+ +Kk*jjjk+j +j++ kkkkj+jkkj+j****kkk+*+*j +j+k*k+ꊊj+*k*jj+**+* +*++ + ++K*++k ++kk* +*kj*k**j**++kk+j**k**++jj* *J+j+**k*z"2!p~1Vx n>hJs>ֿ)Hi3Ro[^h?Vfg,Xɛ_Ƹv/X9V))H(j2?Bc7'zFrH3yCc!3w3Hrv_6w66'3bvRw ˇh'~zGFnc .zf?s[[ϿN^go+^f)wh_ g)Ș^Rwς*WfV*HKƺrgs.gRnrJ#W/vsGR_*V2)i6vJ'òZC/ۂg[Fz~G^R)3(b>_r"?W_ÿۆv·B&&V_Gf.ϣssRrj/Js:;OsNR3RnrsgV))+F#3SG?:R{ >#_?[O;Ks"cK#Jz+c3ˊz.r3'7ff^cj2b*c szo"/*R.S R{^'R"vCoOËOR~;_^RoϊffcCRJ:"/zF[Cr^'b/;2S>nCnr"2#"?'/b.Ob>rڏ.fbw{'o2/Ϻ+{*K*:SsJnRcCK.ZK:ۻrS~#c.nCS +F^G''ח_NooNCk^r_W̺- 1;0WA Q f>y!ǸO)V(g'[:"7sg +RCn +'Sg 4<8aqv؀ _>ir 9'(>^H>6[CC +z_wg?C/LJ<`q-A&icxGQ;A?h~BV+HX?)&*3'/g;SWK$ 3NYKi>`W)Z1s&WzC_ +J(`fWXǷJWcnǿǏwgK3S[_B< `1IJY FW)aV +>^3c~Jֈ'?7׿nG/ڏ'O;_O bڳ(N6SK77i+)Go'Sjz2&v&&zr#//c{oSo/ vHx +ǟ_i iWǷg/3&(hfF~nS⃷_?g/?_3SvX8 F.wg WIwO?j*6ƶH>kG'gg?s nVָ88x^+ IIIw7wG7#NhF^fk2_o_g/Oo?S//ssRF`` H[Ƈgiɉɇ7g[R~(hf^.#)g7g_Ss/^h  (~Ii yǻgW_iw>fhxVv +'';㳏Oˢg/_'gGGk LXϙA?>!OZS KHf GYy#vF>X`>(V{?O>3rOw'G׷ +/d,X6@Hma_s!qZ8)v)!?(H(fX֚ i_;.?O*3'O2nOv̰8HAci)*g {6VHC'[oK#s3bR.RfzwigǗi g[os +r^.nz zB c b&> K*K +2R*ZRbRjb.~^B+ۻo?_;jSk;nr: +">ʎ~>s:.r&R{[+ +2[#3BKK2jJ r22*j:cSOS: {s_ZKZ&BRZz; +*r ròJ"[#2?ZC.oNR>;No":{.'*rRr/Z&#*k_{ "Nc{/ +S#K +kb #OkCRû+jObonn.{~+ ZʚS.{{z#JRz+bSz2jrK3#;/ڳo c*s.N3& +> +J*OK_>bsJ[~sz3jr;ZBOO/rns +^3JK.B?B73C n2sNo+JRw"3oϿ[Fgf&N2'N+ZZ:"#R_OOWn"szo)2O+cSzJfJg{F>R fi"S?_ +'sO^ڲ_s־{N3RZ;[cc.3#'NF2*.*Nnv #cjSr2&."^K'?*;N'ϛj{k*' +:F#'oS+2Ξ/_ +~oozsz[*Ss3;"oZJs;{ck;Kꊚb";r3ZBBn +s?Jk[b+ckJ;ZC *BrkbBkCK2+ +Zb*Csn&fFHȆ[7i I GgGGLJ3s>Kcoj)y$?YmW(VijWVF?.Kh8 w+B2[gW*Rk7w) $\г9Y6Vx(+!__)z>_xv )7 /j*w' 7 \3G(QqBcg`hgI9Fv>^(ZZBk's +sˣ/g'/[S r{_wCl:hFkAA!׉9)6nS/znWiW +"f(v&zc?S j;3{c{:brff&&f6v2 s3/WWGGg?S3˚n&fff~N‚zJ +sO??O/o33[ :ZBRBR>^&^^&f.+/gGwwGGgg's[zN>>~^^~~>r*C3/Soo//s+z++z222R>&&&&~nO_GG_?/+j::.N&^&&βzzz 3Oss#[**[+šڂB2n>~>~ΎRJ*LJg'?s+br^>~.{[cs3cc#K;{ʚrRRRnξn [3O'OûbBRnN~~Nr;[#CCc###ˊz:*+"bbڂ2rR.ξNb{3oOgg''Oo*zb2N~N." +*K;;{K;{[K{{ ++".nNN~>.ʋ[/GLJggg'_?3j2.>>NNn.zj*c3C[ccc{KKkz:"R~&^ +[oG77O;:3Z.nRHF3'I?&3vs7g3S?#68` `x/9!A1 wShF6&w)7_V&&6fgw_7W_?+.~+k3'_OOGcp\x +1Y7!QIIf 9Wi7{(XV?7))y)Ϻf.2oGO[;#N܀ p39qA- wGh*f 9Gi_R6X+c!'r^^s/'_cON2.k|0v` GqiG(3.^* giƖhVf;fWyssfS;./;?__g_ڳrNn< .#)1qyg6BrKww_fF82wǷIS;SΛ? "ˋ~&^J3趈^IWGW)[? +zs +r +.Ύ憖nbb[3OoO/OSS{+ [ +JjzJ.^F^66r2OgWWW 7w7g_'"R&Ff~^&~2zc#O/O'o3ˋ j2:r:&f62Bcgg7WWi7GOsZ">ff>.r:3__O[{ zbZrBR&6^ƖfF*zgg'WWWG[r.&f&>Rj:Ksss3ss#닊*+ڢZr2b^6^fjw7gS3C[J.~&^f&^R.rJK{/S//sc[+**""b2n&k_?7)wi7?3"rN>&^^N":#ccc{{;j+* +JZ"‚:BF&F^f*''wSN^N枾>*3C[k[*jjJz"Zڢ&vf^fJ_חw)?? +bR~^JSCoOs KK+j + +ZZBnn{_wWwWG_g'Okڂr)xHiF{FgJ_ǣۃjCZں*ZZBZ&6&f[#KG)ww)'_oOO*;ˊ2>&f&^^^ χ/_'[/JJ"k*b"bZBzbNf^FfG)i))LJOOc{Zj&FNr^OcwO#ZZZrK +JS?`@@+w !9GK'))wS^FfRR22RZZȾOii_3B/+ +;k2 +Ko/S@,LIAaV^s_YNF^6??[Ά^~zgOK2' šo_+SOo[.3S` (ֆSJ*o i7SZnr2n+ +r~&^&&&.JG/N+O//{j"Z +cZb+`,@iaQ1sn:y!G6F"r# +Ff3#{+jJn.j(>iNv(Kgrr"[3{; j#{jr&(N993ǷG73nb*K RvFNR/cs"㳚@`_>*)i)7ǏgwOƖֶ.s +RkC3jZkss:Z"nsS_#2z /c{sS:Br +3SBh8vg)7jrOǗw'3O'?~ff^brRn.2rJKc[*+*#3c +Jj*JJ +2^Vn2_OO_SO?LJ'g'O/3osk~&&^Nnz +joS{;+:""Z+ kb^&Ɩ6&rcSO_o_''g_Oo/C +BR~~~NN> kSۊ*{{[{k*J"BBk k* +.~^Nk3//S?/3;"rΎnnnnnn2**K[[cs/o/s{K *Jjkj^f(^fƣZscCχ7''ϟ3+R.nN^^~.z*J ++K[cs3#c;Z +.#22#z"Z{ sj;k;Ccc * + + +ʢ"BZzz:: +k{#[#CC333CCc; k++jjJzb"""ZzڢJ²rbZ +;;#3Oo/SSC3#{ 꺚ZZB2rbZzjj+K K;[ +:JzzZ": +J+jʊjzk+{#cۣc###[[{ kjJ: +JJ:zz:::zzJjjJJj +JJ + +jj* + ;K˻KK;; +*K;ˋ+닻k+++*jj ++j::JJJJ +:JJ +*k+j+kkk K k kk++++++kk k++++kK***+ +J + +ʊjjjj ++*+*+++k *jjjj++++*+***+kk+*+k+k k;k + ++k* + ++*ʊj+**++* +j+kk*+++**+k+k+**++**+kkk*k+ +**++*******************z c+jK +j+ Kkjz* ;K +Jk +jk**kk +j*+ k**k k+++kjj**++*jj+++j*kk+*++++++**j**jjj++**++*+++*++****++****k+++*+++**+*j*++*j******j*+++*+*++++**+++++++***+++k**+++*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_german/cause_15_loop.isdn b/tones_german/cause_15_loop.isdn new file mode 100644 index 0000000..3076c58 --- /dev/null +++ b/tones_german/cause_15_loop.isdn @@ -0,0 +1,143 @@ +*d}EьDH$]a{!I^fN6z.s rnvhf>K3 cg'/ʂRR +fnBں"3#sS[[kK{sSss SRNRfN9'g#krOsKB"ksc;3i9Y!9lAq]_`ͽˀR0/Q!*i)wVX86?Wi'NV֞_7ZnrZ[gjRnROzb22s*r²*S[:J2 +{Cۛz2r#c#2jKs +Jj++K+B*{+/maȈ9(&c^2)/V?J& 'Ob&SB*?"Bb/#* + j3+ + +㚂*/S oϳ( 6).fZ7)[[n.ڂ +[[3O7)ilmX )xvqoHGfbiH2_FFo*sR&~koC*2 +:>Bcozj{RzCS: ::ksj":# 2+j +`Wa(z.I9^_*j)$aMW`HhP --"&CV&6Ih6ZR^w7f&kKNr60^O7>Oi?^7:^c3;jyGD-=ъ*I'qCWWJy)^w +8O^Ɩz)ǃKoKc2_wO+ +"2S__3O?_X\PA 1_(i)1i7 g'O3JȈ^.~o?{jkS_Gg'__?sz2[̼p)Ir^S'ɷ׿GIo? +~F~zZ[/?o33?'LJ_?3ϏCx,`#_&o7yI) y Gw'Z~&VxH*&2R&/ǿs?g7g''XPHX~ciYWI gΆ(ZbroSO/g'g'G0 XFX_S!I' 97''rf(6~*cO'g_g_phH/_Oy!y))y7__:^((ֶVֆb3_''oGg6 `Hh8HWٙYWWG)g??[*&((ֶK[S_OsOo+ f8x3gWw9YYWiG +"^F^k{oOO_?CcS3.XX`86xxVOG) 99y9 G_;BNf6v6H ڢNgws'{^7L ' ?WS'YaA)6Rrg)iWo?h(vƂ2R;#_ǟ3*{j*{W p/A9W))inI7/vh(Z?ssNJ: + s"h`h+Yaa'{_'okNj_?/R&&Ϗ?Os+":J+;[o?'ofXVOI9I)o{z +B" +bzkkJ**[{ +Z" + ۳sZR興F> 99IWgn^B+J#OOK:Z+j+CsCcsf6(HVb?7i9yy9#b^^.B22B O/Csڢ22[3/K~6(Hx^g)9!Yy'r^Ɔ&^2 Oo3[br.2CsSoSSS/Ss{"^v8Xfkaa!ywOʞv6f^#gg_OS r>>C33//ϻ2x `` (_anfvvf o7wG_/^&&rkó[[so?>8&iG/F666RGחGCrnN~>R:+k+k:k3Kn^hHh _iɹ9I)G'Jr^Ɔ&Nzg's :"R..2+JBf*' .RJOo/[KZZZ +++ zBbBBr⚢ZzJJJˣ[ J*KkZ"soos#+:ON kjbZ Z*#.2[jR.K#o*[J"c'" +:/s"BrZo3SK~"/S#&?o2s.r?36.c;RKJs^^'3fۇR^~vc~z#[N2s/^:;fRO>Wo~V(7'6W~fZrjΖc^k7 K^ZKb.R^7.Sic' ~&z:J>v?~;r. 'ocRr:&r6?rj#'nb_:*Nz22*v^RcR2/?kSo#?OS˞6? +ZK^7~N#s_nZ:/^f.w:CC?#2:nƶN2^Cڛ+rO++[^zr濊2'zkfGo۞>b+KzSCgC's&J2ffNnK;#3kOOb?**~6f&^˳RsS2[{N3+/J/.f:?c ? Zjbz?kss:+'"c&C.* jbzO.;^K322R{Cj?Z23kn. +o{gKnˏ+s[*Cb۳/rjsS +ZK*zr&3Skng;2ff."bzn~Fo" +Z2ʻ*;B +/K*~K[ ?{C2&k.z".KSzr.f' *N  +B2Ϗ/Cgg#+r{C*rj{zZ;R[ozƚ_n[2+jjs{"#.j+2 +j ZsCJj:zzSzNrk3f.BS{B;oO{sS+j.&~~Z6?W iWWw鹉WWk>.{ +s2 +;..r*ncoS_0llIwYa!Æ(x8^/g)g:nv#3Znr3g_3n +SsϟgW P YYyYAAX V))3S[OgOF(Hr?)wO'?/;k )?cs{oJ22J{ڂ"nR("s?w'7i_&ƶ&>~R:s;Kgg/sO3k¢"Bf^fvfb_WW)7SSscn.&f&^^^BCo__OO/3Cc*"zR~&^&&^K۳/_Ƿ''C{ ++&&~HR';ƒc[˿3^(w9)/~_>Sjbrn^X&) iJ^CCjrgkn*ښk__3'W?ljǼdL(hwiWp/ׇaqiXX(.o3o FZf2w'gWiG| :iCf MMI86(3V1I9`p!z0؈F+Gy!)gjZCnog?yIW|ļ7w[ὍXx^-GgW@P@. Wi!Y(`@`W!~Nn_W7?~F& ["X h+iis^&s3+ jr^S8WW'¾Kgg_/f,XA9q90 YI!!ax0SI `ؖ6>!938/9v^&f"牉G^hxfOR/6g)#3^>#OϺR;J.Nj*2;C*b;z#C#[[[[/C[;jb *2nrjzN^F([*s營"R+2CK*+:"˛0Ia9n/)H~i!*Rʏ;&ωIFb&Zgv掶f /.ksSggǟS2+kBrBJC'SP9[V趏a!)+fw i^&RZbC2F3OCs_'?/s[C[[ + @yS+nƈ()&Vb2?yIv+j[nvVƢ2__#ks*r2 +#sn@loa! f!a r:)WGVB _2s_o2[ Gwyy dp! h>z8yQO?澇ws{>Bj3^FJ')/.'3*sʚ[o3swܜ1M->fjb:!RKBǗR6VC +ScS+ʢbRN^~nK/S{j2JrJ+COOO +k/sjNN2.r"bZ2.2J*[ ;c;ʺkKk*bkjJ"k{; +J **j;+3c +;CjbBb:K*J +kj +*[ :+[ZK*:k{zbk+k{ +""J K +***z:c3# JJ;+*K;JZ뛛k jZ*KkJ +* +J*K jJ{ +k +k +z*; z*+ +*k{#{kz:j{j: +jZJ;: +Kk****+k*JjzzJKk+kj*k;Kʺ + +kkk *ꊺ+ k+j*kk *jj*k ; +j+닋jJ +jk k**J ++˻**+++ +Kk* + +j k**k+j+k;kJ ++ K J +*jjjj*+k*:K+J+KKk +r(Sbbsǻ>sB +J+;j +jJ +j jJzK{ zb +k K+J +;kJzj { +Z;[JKk*kkK+j{{ښJ+{ +jʊj+*jjj***z{Jz" +k[KkjKKK +ʺK+kkjj*k++++kkJj ;+ +jkKkj +j+k++kkk+j+j*+ kjj**+++++ + +jk+j k* +*kK +jK*k* + +j+˻j +J +kkkk+*k*k+*+*j+*j*+jj +kjjj +j*+jjˋ + +*+j*k +k* +jk+++**+k+ +j+k+ +j**+k*j ++**k++***+++**+kjJjkk*j +fwo7C/Rgn"ۣ2ڀ{2 y.IGfj*^nX'oG~.^fn2>+/K+zB"b +[{zj*ʻ*K K+j{Z +"+jk;ʲJn6V6#K)iiyWGs2n.2:#[Jo''L`|˘>!i_)qaAq!/G8v`F(joG'ks__LJ'oG_g h(pΰ A^ψ VN'O7wSgS:kg7c'_'W^`L>()aaɱY;>N8VV{7kg73"Oo"{jZ3?Z3pζ ,((~YY11)7+>&6hNS#JjjjJ#/s/sSS{*ۋ+k/'؆(8hƲ79鉙!IwR+".2rrnNr"#//o3c;+* +j{ vhf(^jGgW)׷wG'?/++ +rN~~NR"J #S/3/S{ +J +JZf^nB +3'gGgg_?o/3skk+ +2>Nnr"+K/S/S#{[:"2rzRRRNN.2Bk3O__'''_o/cKb².n...RzJ +[[;#s[##ۻ***JJ:rZRnB* sϏO_Ͽo?s[++ +z"2RB2j*kkjjJ Kjj +;:bBRRB2r.R:bz#c3?OoSC:bbrrb2k+:ʣ;+ +#Kk;Zrn.fbNJ#sSg_'g_sJ Rn2NZ*JZ3jKc K:NjB#jc oj&..ֶ~6f>J*w))C_"~R^^RB.+Ob'cCۺ+"3z b";#Xf (ΆWyyyٙ_#ZR(&B3_gGOK.r23j/S^Xo` FF@xW!aa9IIrֈf&돣gwggO.2 +NjN#_VX):^(!IyYyyyI7G/2Ff6V^33_7'7B+Zn. +›"{S{{(xf#yY9iǗ+RfhvV6rkg'g_w_g3#*nr[Bj +j++.h&^h8:W)9I )LJoۋz>~6vfh&斣>b+'Ϸo + +j +NڂRZzRڶvf(&6悻O7)i i)Gg?CKrNR&fƆf2C?{k3r*:bv&f(N&r#wחWii)wo[ +RFf^>2n''_o/+/#/N*.b >jbNv^o')W))G'?ssR&Ff&zR.[o3# ssOn;:C~ƛ+z+^Z~R^RoO_W7gw'o3 +rFj~r#cn/˲G>&:J"rNozRZ623[ᄊKog?Ϛ;>zbr>'2 +[k^j[rk~zf.s^z.No&n./.[{>>:S[/;s^kg?3O_ʗ.S:B3*3:*Cv?'NRKs)b)J^w3~Ok3.oc W.n~?c +KcrRΎ*C./nZ^*~z*B';>zʻsj .?^>˞W~>7κGo/zGz'b.R>z~&k^Bg:>.?6vFROr^.2./g6gkj6_~/wFno&'J>2>OO*N3.fףG:FFƾ?f3c'sO:Fs(RN_{c;gʈWR +33林szRRo+*cNk;rzjkʛsrCj{bz3+^#CCBK?J~2Rko2 r[SK3/o.*Sn>g;G^.obJ>*&^2z2"B//KSs/;oK ++3˚ZBJr"jKBZrB:*²:Jj Z:c3sSo/33c+Kk*rrbR:jj~f>R.Jã'_w'3#;jR~NNR.*Ï/3[j +Jʂbbb + ++;K{K{+z""2rrR.rb*KsoOϿoooSK* +z²B"+K{;FVV6f6~3K?GW_G7g_'33JRnnN^fNzK˻Ã3CK* +kZZzb"* +K #;#;;B[B:2[+{2k*K;{k[cK +K ++:*zz‚rr22b +k C3//OooOo//s3 kjbB..r2.rBB2RfFږ.nRSS/''O?_'OO/kK²BBnNn..B"":+j;;#{K;KkjjzJ +* ++j*++kk ;KKK *j+J+jj +jj*j +*+k*kKK*+k***+k*j+Jjj +jj+ ++ +KˋK{KKKk***jj**:ʺ: + +: +: +**kk+k+ k ˋ +*k*jKˋjj+ kj*+* +*+: +j+ +: +jjJ+kk*+ *k KkkK kkKkk+**++j**j + +JJʊ +*k+* *+kKˋ ++kJ*+j*+*++j+++k*+**+j+k+j +jjjjk++**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_german/cause_16_loop.isdn b/tones_german/cause_16_loop.isdn new file mode 100644 index 0000000..c756520 --- /dev/null +++ b/tones_german/cause_16_loop.isdn @@ -0,0 +1,253 @@ +*d}EьDH$]a:Z'g/?gWH,@(69AZFX( {fFKgwok[s.~:" +;.R/88w { +j&sB^~Ύ3SC;;3C J‚::*+k+ c# jZ&f~S''燇K "RbbzRz⢚ʊ k;[;{cj:zz jZJ2Rn>~nrks_g'OSK*jnnkK + +*+;##;k"bk2KcۋkCOScV>SGWi Ɩ(f.Ko'gGgS[bRNn"/oS*;?g:0p@ FaaYyIw/(X 8(&))G +bNnn +ˣ3/S3[/_oVX89AA9iW6Șxv2/WWWW'/nNNNB:/g&h,03y1A!I)7&8VfzcooGwwJR.B*o')Gk~8@P,V;)a!y )G2(8x86;WIIW'&BZB²KOiWsLYA11!I)o.X x I9I_3n2z.b')GF`lphᱱ1iwGwS.X x(SYyI)2ʛ~~7 ZH@,61A!9ig_/H k9!a!IwڃB>&R{wiPа8η1aW'O36 `8aI'NN^&&~2C)S( 0pA!9i)ww_+(88_iy)GO*J.^^R:cO'';vHX```X>i!Y9 i)/&VHh6C7oJrBΞfN #S +h^:7ii))w :^FVvs[?g#2Ύ&Rr&~rO+"so"f"b;+o7oC;o3ZZs־r~z>k'C¢R:kZ+/ScKfO;':&Sn>/#6_RC'JSgƣB7{_nNzf3g{N/KfOGϋg{77/F{://k; +R +zno/CBR3>7)Cr#Gok"{_ .rfΆs2>F+Sg.fro{:.+k~N~'fz^7&&B:jgkoBG*{z/C3zz?OvsOkz#&"/R.2cO +*z*#:#&OKkF ZFN&fV_ +''~Hfo?R+_s^G*˞hrj/7f3oNi27bR~CΆ^J:kC.^No~o_RRsgg'b'dzC.nZ:JrjNR" .(ƎGWG7[kJ+Ko+C+s +>2bbn"BB3Oێ2 j.*k + **J" +z+3ss ::*KKZJz+{Z*JJ":˚K[; + ʊj{c#*jۻkk{KKzںZ+"z2Z: +JzZںC/?_g_?OCj:22.>nX &`H~R a iWI)wo^RCVV^r6&BOc.#o_bV@8^V+S3i aa) Www.zsFVv(י  "L0W>{iKni!ٹi79 #_ yWrvFffv~SWwo__j/v$ 0Ș{Y y! g3'IY)(>?~hV^>j./3g׏{+K3/oos (WyaOI!׏i)8hbVogo'7OS#ۿ?_dL@H6ɏaYs'IIG7 I^XF>S*g_矇g_g'/?_OG8,Y 1 KYiG'{ XX־co''GG?O?O SO/'{l<,0Sy)yOwG )GOS+nv(8Vr˺b+;O'____3'o +h (v(RGWW!99yyyI)7'k_J.v(hȈV(>RSOǗ)?o'3S^PvxX``h_aٙ9Y i_bƈ(ȸ((֖~N/wwG_?SPH H.S/iY!y)go :bfVVh8Hhh(6kgwWwG'?O,`PX?!Y yyyYi)7SR&ƈ hVo)))7G_oO>vxhcoa!I9!))+Z&ָȈ(z/)i)WG_?/OzhV0xH#_!a!Y 7Wifƶ` +3 WiW?_)wd$-q>^9_BGq!fg7hn(6IYI:Vv2 )s'gJ;*_)<בM)Xpy9)2y!fxh?I9 VH?nh)9>'/ʏSBj#9zܤm& fAngV Fc'^_g(7i2g'nO{WLэ͉N'AyN9 (8H(g_Nfn?s&f7{r3_gO:rrs+GilVX`hbgY'H!i(֘X/)K')O^.cr/nONi(|,* Xx)!GvW!a {v7{'^?z/{+k/?jz2o'zLPqxiW_Yow^so{>*Nn? N~s_ +nkkjrZ#g<1 )7iyG~R)wk6vv&k_n[+~JòR ns'P,qqXYOn"חr&O_Z&v?_"#'_*C>jo_o+p܌`!q1)(.Sjf!9JW7or':^N/S +K{s'b[;J'So'h\q +;vrrIʿgrrσ_ +rggO"KksocOK~N:'$1W9Igck[ksK:./s2B#&&GK#;kb/_{;_G`$,qWA .yWiW&Cc3*~ N[Z6'Ǐ?sjcS3ϛ*wwpoYV#?_wiW7OOSs:rf:.>__.rk3/SKښ Jjnr2(HzRgCs_w׷Oo__cc[KBb".r> +BK *+kkc/*3ۣk{k:" +:."k*:jk+j;z +cs3+cS + +;jk*J + +zj +ZZ+** +JBZ+[ 늊+jk+{j J +k z++Zzj*+k** ++*+kk*ZKjJK J: *+*jjjkkkj*K kK z"j[*k+jZzkK * +* + Kj +jz +jjk{; ʋ jJ*+k+:+;k ++ *+ j**+;k +Kk*jJ +**kKjzz*k* +*j** ; +z*+;KjJJkkkJ+jj jJJ+Kjʋ **+*:j++****ꊊ*k k+ +J +K; z:+K++j*kkk +j+KK +zc* +KK*J** KR ʊ +jJjj +Jjjzj:br6#gw3o+ +r>J{fjs#OS.k"^.ncc2rnzjJ^s__jvsbf''fsO jnr*j"3'r~Gr>fGcrn>nNkg^W[~/~:'F[?gg{7hBKOkFn/*^"^2?W'no*fG_f3** (bw ZNF9{>h.6?^3f.of緆ʟRRSCO>z{"Wk"_:'sjGO緾g^nωOC7VW6;SK&yʞJf;W~sGwʳΆ(#KBÇWw'k9hNh7~76?rnb)3~'27GHF8F& +KS(37چv3ƗW Hn^GrR7H''riǗ(fwhONS62V?ƃf o7v))goV/GV ^Hw>JcH>g(iz*R){^ Y(/yBxf(hiF33s^ww6))wW2!GNw_'^&7>FI HG(vwv6xR2x7׊J)cOG.gVjO./6jr3.(gzkB 62n.ˇV{+_[?V'Rj)w7 +O&Gb"'Vzs"S&RSs['Fg3[w(S6g2O;Zj(h&CO'h^ ?hGNj_o_~b&3)+^nFV)no{^&b;:Gƿ"*S7~_&.'KVG+n{"/JS^ +_~S?n ?7.Z.?R2nvO3#+fS_~ [/J#_22ks2n/+{kr˲;bS"k2kkbc# +3{+Z[Z ": zk*ڛKjʊ *+j*[{k +**k *j*kz jk**K:+Jj ;:kK ++K +++ +*K +jj* *kj** +**+*kk*j+ + +*kjJ+j *k++jj*j+J+*k+k**++kjk+jk**kk+j*k*+*jj++*++*jj+ +*j*+jKk +kjJ* +K J+zkkJʢ*+*KJ["뛋j*#s+ J"j kZJ + +zCCR; +3czj["Jozk`72vr/&^KkR[kS "ZsB Kk .S'V.ˢ/"Z +K+Kr +o*O3b" +[ʿ>_3B[Oo? K>Kk3K zrR&^^nZ'__77_7ǟ_[~L,/ ' 1?^XxhRoi ?~>#W)'N&F66 +KGgs.^zg_CnN>nrJ ح6`9A _VV hfaIO28h6WW w3s:V(^"/_7gC~F6Ff^2JG>>[)i)O 0 _1q  ) aGBH8H~'_{BhȖ7WW/N&(v{OGw'S&&f~zso??:NRj#///["R[3/+z2RR ++cs[kzZj*ۃ[;J +zڢz*kK; ;Kk늺kj++kKj k+kkJk+*+j+j+ + ++{*k*jj++* ++*ʋ+j*jj :ZJ !hWYy.f#V6''?.VZV@VF'~o;GW''w.r 2rnos2zNR."{&oRn[7_/_'Oz_S:j{/#Rk>@8.yIK9oւoOjY!w_wjV^s>;>N.~zS'+~C/Cc.ξc[/zrCxjII)o'"Rk''_+.6&NV@6h3۷' w?o_~nn +j.&R>^N:Û.k;bcs?o#O +* +: +z+k2b:r""z* {**ꊺrB##//OSSsC3#SCSû;CS/ϟ''o(0؞ H@v3Ȗ97iY9YwI׉_׉S K&֖v&N+C;緷_7Wwg+{zk*K*`ȶ@ ('!yiGi)鷇W#22((hVH6V(cOg))w))_#2F`,VP6G#a['!)y'O +"~VvV(HvhHNv'OK iw)gG3kzh`x`@X`G Iy9y i)W?^6V8V(fBgWgwg'۳[* +20Xh&yG! aWii_w;r6jSgwgg_Ϗsc* +jvȘXX +VWI'IAɹW 翷osN(hHh.ڋgg_wGGG7S[ZZ~x@(``h9!Y aiWW W۟Gosnf~hVVV~^+)G)냣B~^֘hX8J WYI)鉇W;+&v(v&>N2"#'_g_gG_ǟ.R>>~.r.n&vVv2WW)IW77_BnbR&^&ff&&>r2B:k۳c o/xiG7))_B*&"n/ss{n.V8hSC!2SK.'WWGS†Z^~&(h׹g3GgfwgiwS/wI7^$toOzj>_rȸH!) yYwXWw)9 (HV&N&>[w iΆfV&c[2Ffn3N8W9 Wkc~/i7cB:RRJ3?bh(xhY_Ww#V&'w)^Frz'?bN^f/;VfZ3k?/+OJjSSO{z{*ƶ6v^jgg?.{_G)wO*c?_Sk:r + ;ccv>?{s7K3" /{3zk/k2bNFVVh6 /WW O'/)aY)[;6:'_'/&NNBkC:j*Jbھ3#o[+z++j+;*::ZbJk2Zz ++cs?SS/o/scۛ{+ +ښRr2BB2ZBz +*j +*[K{ۛ;{˻{ K +zJ:jj+kkjj+k**K;{K;Kkj *JJJj*jJ + +jkjk +kk+*+ ** j+ + +j*kjjj++Jkk ++ +J;k + +*+*kKKkj+ kkj*+*j +j+jj*k+ + + +*+K*jꊊ*;K**++**+j**+ ++ +j*+*ʊ*k*jk *+**************************************************************************************************************************************************************************)NK +n .jwo.ʻ{2~[.{{N&Fv7V:.r:cZZz~[kjzj[c?Vgþ/>'N_b(.g^/^s cr+2+;BGK6_/^G;Jʳ:so2kfSZ#.? >?fo?^k +o#~*+*kN?*OzϾ ϺN&BOZ>k2KK/.k#o2ۊ^snon; _rkJ/;"23sJ*rKJʎ:.S;NjB;SJ +/rc{kjc#KZk# +j*2c+J ;bں + +zk*s[[ +Zz*: +; +/ +Jz{ + + ++Z냚{*j:#KʂjۋKr[s#*22Jo r +K +s.2*/KJs:jzZc;zBRr [J[ZʢJjb:*jccCssc; jJJz: +Jj +: + + +JJ + + +jj*j*kk+*++kkK+*+++k*+k+*Jj+ +*jj**k*k**kk*j+*****j +*++*+*+*++***+*+*j+*+***k+*++j*j+++++*+****jk+*+**jjk*k++++*+*+*k+j**kkkk*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************&k>//)/{Jr VI"w 7&/bFRBs3KZrR~>r#JO_3oS[/;{;S/{Z"^&2^^>[GW i)חgooogϏd &!(qAa(OZ(H'9I)r.Ɩ>:g7i;gR"G'|<,q!y)IX(HV)7iJ^"2jg_O£~n&w Ȉ2W))rSZZCzz[+>bN*2>Z +{*[[[3*[{K;kzZN>^&NRr{c/_'___OO/ss#;+z..>.n Ks/SoC3# +"2Zz2r2r"*C3//oo#; +j + +z:J +:ZbJJZ:K{* J뻋JJ+jzzJkj{;ۻ{{kk+ j;K{kkK +zj +*"bj +[ {˺ j+ ++ˋ {;+k+*Jʋ뺊KK k* +*jzʺ jKkj* +:k kJkj +Kk++k*kj + + ++*kk+*+jj*jJ*+kk kj* kjk* ++kj+ j;**jjjJ ++kK+kk+k +k j:kkjKK*Jkk + ++j +k+*+k *+ +J>G)/ +"β/> +bB2r*o;>o&. +[k^K +Gfo斃ؘ) &C_6h^f#;3V&KoF:CrWJ7zggHGrjR+C +;r3?fBrjZ.:bj2 6~k./2Zb2kJ +/rOCn;*> +Z2#c~Rn^VFH_'G)999 Iik3*3cn#'i  pfqya1WW&h88f~Zɷ /.&s_sk:s)PXFxȸQI!YaGָ>_iWwWS2v&^.Nz7+Cj">r_i<FNxjimq!)!yh&zGyiI#vj'_rR;3?PlL8j ' w7)׉g{&^r7O*..Z_PLLx_ٱ-mIr6fVx(ny)sj?ﲆ(fZ_?O'_OzfFNk'wP08)YqG>8V(h9!Y7hfR +Nnr~^ʳON l 11!Xh΂nÇ鹹W(h6N;ϛ ǟ +N&&nR'ǗNp0@f_9YYYaa!aI)*xxHV_g/kbN^^OSs㣻rn2Z kJ{V```>9Y;V6fz/S.>n +s/oC;k +Z:Zڊ*c3SkRVHN7) GjBn^^^rbZJ:Jj sã;j*kj"bbk{#; ;kkzR^&fƆfs_7W7/#ꂲ22bB"Z2R2J +k3Sck:*J*{[{ K kJR>(hVo鉉iW'OC.~&ffff. +#o?o3 j:Zj{[3s& `XH')y iSz(VFNʛ{#3O?os jbZ"Jj+ +*j +KCSo+XhrG !Y9i_zHh:#{*CO'''_kڢ¢: +{[{+_ȀV{)yaa!Yy 'h8x/SJS#2b;C{Jz/Og^v@p6? !a!!yw?HF3O/*bBggzRb+s;* ?g0`j!!!ٙ)Fhxؘ8Vg'cZ'bkC3KBBϟ:&(`!Y9I)VxHV^ڏR~^B +C?/ #OÂRbJ{s?oF8@00iYaaa!y iWGO^hhV^&R*3c33kj jrj:Ͽ{Nƈ ``XFKG y9 iNvNJ#c3Ž~.+S/o3/S#sjN"3sn3.6x8hs)iiWW))w_.>: +2nξo3rSOc*:#kۊ*bZ*Rf'ǗWLJ?#/;*~:k+R^N'/*.&^#'r ++{Ϛ^2RRr.CbsSn*"["3#CB;[KS[ó jNN[.[*O S2+*RKRr/3ϋnR##s+sk>:C:~o'kNnBrS fKjkjn.SϾJ.3Z&_bSbB.'fFfK~G.2G{r.2:[kk>f#*jssoRß3.>ScR{'nSJN2?^^z/BJ{~*7rJ~Bs.R&b{.R; Zjs?o3?sjhW'>fkk2:NˢZRWW^>Ns/k['7;z&nr;C +j+# c#ڣڊ:;*R*c3BJ:;;*{:R++;;j2 K:*{;;k {{{;bۛ3ښ*c[;#j jJjK +*+* ++*Jj*+kJjj+Zk K KKk[ kkKˋ* +*:2+J2Nfr:3?_GwwwG'OorrnN&^&^^>nچXHxVrIy9IIii7??;nNξ>.": {+C/s;ۺ2(Ȗx 6b.w)y9yIIIiS/ +2~&&~fRj +K"xȖ22S)yٙIIOk">n&^f&&~:C//[[kJHV֘ VnZGWIYy9yIW'jB&vƖ^ffRj* #s?O[{*>xh^ +N_iY!9i'_Okfv6vhVV6Fr[So__'gO/3znhֈ 22)!Y!yIi)'&vVhh(V^>BcO77GO[;nN&v(Vh舸(6N{' 9WS+2NF(V(h(NjC7WW'ϳRn&^&f&fFF6VV6^.s_G i)b&F6vvf^"*__G7C~&~&^&>NN.Ogg 7?s6VƞR..Ž&^N&&nb2Z#3O矿33+ʲz.>^{f^C^ Žn&.n_G)Gw)'3J:C2R~N.&K~:[~*z[g&C+Z#Z&covS&noJ66&f6.ZC_WWgo_znFfCn"*;+k>sR>~ {BS"2Ff666^wG Yi) r>NFj&J+G_7jg*sF_:#oo H8IIYaY'[k(VVh6rR_7'O.7'~kZ ?''Vp"i9q11g?>((hh>&S^CJ&7c +'S[/# +Z/[_G'lb(, (a'qA!n88vV62n R3j'S'S 3J[jS_HW,8Hɿjay!1&[N8f6>~o[>SO 3cS+s'c;S3g{.:gH@h0 8O~Gٙ遱Yya9GosvNV^>&zb.B~sÿg[3rò>;N ^f֖(h2'W9iW'BzR~>N^&nr>rJJ o/_rzێ˂.sfNFF666&;oGW))i)ח'ϊJR>>&&.r2:;K#g3g3?3*;rϚ{"RZrfFnO'WW)iw7_s*2>f~f.^>:..?_/_.7++"#r/"vbV(V(v/w)Ii))7g?[n&~fn~^ +ڿo'˟/?k7 +zo#*hxxhV 9!Ii7O>n^6ffffNZ2.O÷_7_S.0`Vx('!9Y7o&>nF6^&s2j?ʎ3LJ'gۏXXx0p(8྇s9aəhh66fRBϳg&O:2sow׷g_ +>R_p&H I၁aW_Vf*h^(#r;o^R6>Rh&#Woo _/ZF&s#Nf&8^ro)iy!'{((`.> )O)7?+'iw`Ri_ C2~~fZ""S*{r.2o*+s*?_+#_ۺ*K"^RB+Z*{۳*/sO_Gww_^ 1ٙW:`FfϹayis2ؘh&Z?ii3fF(8GWyW7)~F6~RGZ22n~6: +{s/Kf&R''?K3o+ 2Nnr __ǹ<$Y7Qhl *9+9`Jf^YA_8 V(/YiZVhFFyyFSC7? +v {3 +ۏK.kz"zZ:+J.N.Z:+cOsSCc3kB22 +3/')kܜ9mA!g&@q-YX 1a؈Jf^) 8_o^(h/w8^ !^VFSw>Z6s'3f.;^nKs +J:?3C__Oskz.BꋛkJ 7) <ؗ ovh68JIq1qɾskGgw7sxX ȻWy). ((yag&Fvrkz[_^>&~.[[SBNR.K[{//3có;z2+˚nZj_G(Plf9-с.Vfv~Adž hN/'#gȰ0ȶ!AA!nV^Sg_#"Z. \춉-/~_[ȈAHxVNCn^i38x2V?׉gfϳ ZjjzjZKC?wPqYgׇHHhljaቇ^F+&VvgsR^s׷/B++c#b2z/S/sv၁og'i9 gV/):{"^6z^N2[oSۣk #os;sKkˣK" +ʂr +?g@@p &G G{i_"[R/_o.>~^.SSC{JJ +J[."r2z;;2&hHRSS'GgǏo?OcbrK n"ښ**.oCZRBj{cJ.bC3Nc# 2ښZZgz2.cb3Z盿ssC;z#c>#2b~^rS2o;RzcϞR~.Cc.OSSkCbj+RCCJSN'[ngScJ>;*N+ZkRNZ2s2*j2[CSz:sS Cs3/nsjo:S:/J KZJc{r+NsOoRszS*Rs"JB+n{R[K ǃBn.R[;#2ko~/[JBZ{#3nc#J Rj3{jR;s+bzZ/ +:* +jK"+j+j+Kkj kk* K { +*{ + +Z{ kJ*kk+Jʚ: Kj+kkjj++;j +jjj+k+*+kkkk***j+ kk*+ **j++k*jj ++*j+j*j***k++* *++kj*jkk +ʊk; +j*+k*jkkkj+kk +Jkk+kk+*j +Jkkk+kkk**j+k*+kkJj*+k+**++***+ kkkk*+*+*k*jj*+j*jj*+*+**jj**+*+**+k++k+ +K;k j +*k;(ww.fRn[s{>Ί33*BssJ2"Bks BbK۳ J2zڛ;zB/;Rwo^ss{>.ZǙ:6hF7W?Ȉ3+^>cf>3{oj"{:+rj{R;G7Ϣn*[^>3'3ۻ:rn3o+~n#s+ff'iwO/v^B*s3zbzZR:s'boR _ǿ+b3*[ +r΋CKc[΂ 2SnB.Z[Sj{/?:zJrB*.*{k K3[b"j;cS+ꂚ+Zj+K +z +":r2+Zb"J +kss?oOϿO/{k /jJBjʺj2nrð0vi!I2/ Iy7i&{kf>RBzڣ3[K'_G7&l':7YI7wgi IiOWI9i)w'&F(ȸV[Cۣo?o?CkC_?lh"Hʶi3Wa9yWW)_OOZjhHhV& +"gWwWwwwcoS/,X&H&,8>;9g9! )99WGscS".VVVV6S3/7WgGC3sS3fАh؈.(yWa鹉7gO?/겲>fƖ(FF^^nJg?W)7'?g';j::ˋ+p>(0ya9yiiOOCR~N^fFV(F.ڣ'_/?痗gO__Rڋk2..րX(`X'wY9G_?zξN^FƆ&ff+C/?gG_oZ:J2n.nRRNFv"oo'Wi)wg_#{ +r>&ff&^^^r"c3ssO3z:* +.rR2.Jb +jʲrJ˛**;{3/O3 :b²:2Z +Zb** +ʺj8_)/[s*Rr ;jJ3S[**z/JsK;j +::K;k:jkJjj*b"z"{JJBzZsozj[K*+*k + #{ ++J{;n2Z { +KKk*"ʻSúkRz22>.Z#j;cJK#S[JSKo ۃzRsB#jK/JB{sb*sJB3[krb;#k[kKzz J+ K**kkkz* +* K +*Kj: +* kꊊ**jj**j+k+*+**kk*J +*kJ*+*++*+j+kkk+*Kk +J**kk*+++**jj+ + + +k+j+k**+k++k+**+*j**j*++kk+j*++k+++*+**+* +*+ˋ+j*kkj*k+++****************************************************************************************************************II('GS I/g `ɉ&ggOF&S?R[r;/s +[~~ 2.ZۢkccjsOCS? KojCs+CZ0@&nWٗ{LJ[Z& +/S?'okRr".;j2bjjbrkZ:{[[iW_o +zC[ڛ{sGo׷kV\P_9q7~~i' N~bS2s{^""b/ + +"3j[ +j;K:ʊvƾ)G 7:JO7' *;O7)Yaq!?!Aሀ`(9BcWyiVk~{gwr^N*#rF/O{cK^ +ϳJzcsR B/6vHg/nb2ZCwgk:k??/gW|q79 !Ak/SJ7Wrʟ;F.{ ^3[RO'nJ32on>VS)OSc:{_G.b*[/s[)  !AYz~fBG9B+;s_*rzj2r~*jrN/nJCzK(wWr kz33SCK/3#*S3(fH@ืyg.R+ +ڟgi w_;sO_3/:Z2bjf> gK*:c/o3;zRn&N +KrnB>z{6Ÿb{SϿ'?3/[sc"ZN~/:RJ+rRbZjc rj;v&{3R#'' {_S/#.~.J2NRZˊZkoocs+:j*k**+k;z*+ *"rrrzRr:k3/oϏo?3c;JJ"r2rRrr".BN~k[S/_Ͽo3;ڢZRNnfrNJB[#c*Sóˋk2bBz"BZ26rˏs[[_'_'__Os3+z.ΞN>NbBb[*kKCS/oso*[+z:jZ~>&f~.Nr"+{s?????O/s3 zZbRRRrr.BzzN +k#3sC{{SK#++kZ: +>>r2 +s'__3k*:B2Rn>n22"2B: ++˃C#[[;*k*+*:+k*ʚJʚ2rnrbZbbJ;[#c//OO/# :.2zRRBr2 +ZKjk;kkjK+r2kF^" +2Z#o;O?Ͽ??/{ڂ.nnR2BB"z::*+{K{c kj*jjjzz + +j+++K ; [[;{{ + *z:z:J + +:ꊊK; ;kk kkj*+kkj +kk*+*+kJjkjJJ*+jj*kJzjk +k* + k +jkk+ˋk k ˋK*kk+k*+ˋ j*++*jzZJzJ +jjk++ K ˛KkK;;; K+K*** +j** +:Jz:J*KK {;K˛ K k+ +j sj:k +jjz+j:+jJK*+k+*k*jj K+ kj+Kj: + +*kk+*ʊ +j K;************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************ \ No newline at end of file diff --git a/tones_german/cause_1b_loop.isdn b/tones_german/cause_1b_loop.isdn new file mode 100644 index 0000000..66d0e3c --- /dev/null +++ b/tones_german/cause_1b_loop.isdn @@ -0,0 +1,241 @@ +*d}EьDH$]a:*JBZn"~vv^&nZS'gi7) )ׇ;oS[ccO+ObRR#Vp0x +viAAayiy{FFv6(v(F&FN {"S'7'C'[O:[&H` ׹IAA!Iɇ/2(h^[&7g7g?ggoc;OkoW l`(7!AA!YaiGSGs&fH^V^3b_?gSsz{@H+@0 vcg!a !'_J^6v6F~&b{/3sgG*B.^22N{3.^NVf(؞V^n +׉ɹI'WG/B{>n>ڣ>ʏF&Sr"&/Ⱥs.s:"7 2bco?S _Sg:zGN./˶r2&^FSr>Zn32sNk7.>?#~ϋ/+"&*vs^^bicrǟZw' rfkfZrN~&^.SR3OS +^/#K{~*";^&"{/jso_ +.#ϿK&{*cJ۾v:NھJon2G/s_R/:osscn^RF Rs>.b/K2k>fOkKB*^j{"^뛃RGbG>;^>KKNk';[jRj˲/oK?{[~_ +&n;*CJ[J/'3S*BNZ2z ^n.*nk# +sS{R>_rcfo3c^3~s~2oCcgb3rk_{j*r~g滣ÿr ++ bo.;oG/zf7'ڋfB_3?:3B[n? *RZZkʳ:n[gSb.RnSN{N&sg/c.ʾ'sr~of&v2rR^/&Bkb +bkwkJn23is[rN#3J37kF玞nkrJ_:~ +Jrr{k"bkc{;+b*K .skj+SKRZrB'sB˞j_ sk"+ڃ3+sK knOk{GO8l< ~W! a2c2X67;7W7#7鉉g"SKN0h!11(`6Wy(Z'?'2fn&3dz6?!7)O|$LPCg(Af7^;QϚ7 8>oo(`rW6)_r{wy采IW'{\,p(y!7ZOOR相?yiIyvh(6+"&ZgOs;O'sc_g/K`ph>vXib~j׹/)wsWGsK372nvʢ7o'ǷGgLJxV6`H2F)[i77?'On Z>FFV~^Nj;g_7w'fv(hHhֶ~./?w)wwG_''/.^^&vk/_gG~Vnrȸ~F?w7Ǘ__gg?__[{22R&^2j:/ /{COۏ_/'rVƞ2"+og7Gw77g/sR.^f +'goHR>Ƙ& fG.w?)*O'WN&FFnJ>+zcj;[kz3kC +SoSK+KbnN2nr +k+CK2Nw跢ObwGO.RR^h~n8N^zg.GSgog//?_? :6n>rbS+XvVxVxfh?G'' +?OS'#z~f&nBZ+#[/{{; ;[vwhsfn*{'{wg_'_OZ6"XhNSgWwG'?S+:>&hhf +GWWwgOSf&0@` XΊsgGi)Wi)W'?3 +>NF66^F^rgFgjGWwGׇ7/ x`xV.^?9yyIWsKʆ:8.V(R2k/)i)wW7G7_IlxƌJl耀gS_ aIai!s3_+?2fF舸vֲ&3Ggi)W)iW:[C86@`0 i a!9iwwk+zx&h(h>_7)WwwWL\Zl³ ٱiWٟIg*r3v~(VhkGWWW)wǷ6@)8̈p@؏Zgi AII!g)SS2zvFVf&B/7w))Gw''s_VN&&NS'?g'H6`pxH`Vf!I />FNfnnb{"/_g'gg/X6@``V ^WY1Y陙_)ʖ"F&6.r^RK_'''7x8(`HO9y!Ayi''׳jv.^3'G`V`pp`&YɉagOZS +&^&n +oG'OG_7''7hI)I YJf^Ff^BR'w_8`3& W!yyiyw)+"o.6^ffN>oS'G'*H8H`;~)!AyىٙOZ((RZ{R7_G7_gxvpH& 9I!Gi7j;f&6v(v:bS7Ƿ'g3>3( 8X08 R7 9YiIى 2f֖VvfGg'Gg'o3/ֈظ8886 )WY!9!ayIW?6(2nOS?G'G__'/ +z>6Ȉ8(77yIi)?oB~^6(((h(VFN[o/''OSkrrfFV(F&>oGWi)9iWs&vVVffZ:?_K +k:&6vVvv&~.3W)))'; +N&Vr^If +'Gio:2?㎢F^((V(VFRGwiiWw7_O[j&v&^fRN2Z ss?sSϏC[KkRF(H8ظHf)I9!YywkB662^OKgoWoo[[sOg8,,xgyw!1AAy W:N(vFBCcgg_''ggWL`<ȐPז!aqA!Yo +&vhH&srΊ{+.'O/Ggg_OS< LhPh'yyс1Io6Bx62/2_/JcR*Sgg?OσcsG )plN~ -qa!WGFxB'Co*brK:'_g#c:k[/gV`ph؎haA q1i)WvƖȖ>Zzg6*j7GOO_Cz:+ »6V 86Wa!wg#&F^2ʛj*Kb*fJj +[o'_o3jKKJ +kZ2J3C&ظVv8HFnrOIyywCC~r*~fB+n^Bj O3KC˛+z +j˻ ::sVvHβ/)I 99;""BBZZrn.n~RZ"J۳C33S "z;kvƖVV(cgwW)WW7's[++:J2ξ>~N^~R+[/SS/O?/O[#+":J:"Fv6~"[o'w7gs2>>~>>B +;;css/S{bjb2&F6F66FgG7Gg'O#ˊZ.n>>^B [sscOo:zC JZ*k^Ff6(^s')gggO33[K:2>22z +{s;SS/scs# {K(ֈhFƆS77WI WWG?SsR"b2f&rf:¾Nʚ3;S_ss//#[3h`xHvJi!ayG/n&F&fF&†FB~n{:/gO翏gk?p`&H0G)aqa1awCƖ(VF~" &C~R3o_7LJ7sg` Hh,vGA1AY) N.Fhr*:?w3wzs LJWGOwSg_ l` lYAAyIsnH8;BrkG&fb_w_go3[ǐ@R6I!9AYN&(FHF7C_Kfs_G7o'sG9  HH承ɁAa__.6HhvvNۚG /:z۳s7'''xnp 8Wg.hh(V>S? ϲƃS/G_)g_PP0o97!a18(&jSgϺn"/GwחLJgw؈,`a1!V(F*32r&N+3?7WwG`@F_aAqv(h8h.//G)SoG&^~3')w7)ׇ_LJX,,2)yq)iOV8F&_wgs&OǷ_'?`8`PP/79AA9WnV((hVr'J>>>.#3''7_Ϗg@P` `~)AA!gV(~rJ[gcIh3'fNSSWG_2K+˃8V ~W) Aaaɹ7_J>v&cBzN +"**''_Úr^"2"FFXx)i99!!iWWBBbBB>2RRR2ʚ?o?ˣjSښ^KNZRr226F^fnz/g7W?KS>Rzr +{3*ZZ +JJz:B: +Jk+z*zk*k[*cSso_g/33C + +;jK:Nn"Z: +*JK +*[K{?+ + +"j*j ++ŠC*[;)/sCzo>J[bRRjf# +R'rO&j[~JOo[3> kkCkk.o.#F^(~ "b:ϾCBJjr>3B +. +: +Fꏋ*?[2jCfO8orck2v'֟w>'g 3^B'f뢆KRs?zk +wNGNB+ʳ":>r{ƒrz.nC3/[kzk;*"*{b*jR_[C3SrOz>Zb{#zn ~ +OR>(VhRvrOW Ii)W:.k_ǿO;^RR +.nCbBN`Ƙ(FoFYىYYaI7ofrsRf{.RKR  +SsK/+~./~r(XS7!a!''^2/B[JnK+3'knB6ΚJ#&Z.Vhx BfO )I!7Gw?j:K3J*>f&f~>nbK'Oooo3RBB2RVh(((ffBSgw)ɉiw_>^fFFF 3'_g'''s3+ZbΖhHȸx(V*W 9yI )Gkn&fF(Vv&n[S7GG_oCK*xx``8hh&J' I!yY IGSfF(VvfC_'7w7Gg//#+kȘ8X hJy9ٙ! 77C^fF((hh(vn2#?'LJǗg'os/s*:zX`(f I!! IwOffVVVFf^ro_gG77gO33;JzBxxxX`8(n{_yyY!9jڎvV(((V6 +_3ۊ~8Xx*kY9!YiiWw_jbB(VVVV^B:_燇O3 +:X&k)Y9Y )JN~((v6^2Jʛo?_'ǷgOcs ZnxXxH H(F?;ə9 Y)wwBNFȈVFF6coo'7g?k;OKư0p ( ygyyiϏ)wG3W炎Nx(>:J/_i_GggC+c_?|/G_j YizF(Hxh___w22)W'33(̜~9IAZ)!'n(F(vW)WK;//O+))z/?@L<<9_!&(IY9iG_3/.hH&"[33g+;w7_3:2+'P ' فwi YYIRV' IJBh(j?7s[3o3o Jj+cP,pf 992‹?g[..^f&BzcC;SSk+*/CxXx8(ȖJ? IwGs+/Z.bNnrr"ں?oso jxhxFVF"3)9IWio?R..RR>>^n2nnzzﳳ?oK֘hh(VsGWIWWg7gsJZR.n>ξR"Z3os3/o/~hHHVvVkWYyWWg/[b.>>n~N.ڢ/sOsۣv8xVv2 +cGWIYyyiWWg/zB2bBnR>>nRZ3CO?s`8Xx6jOi9)WGCkZZzR2n~>NN΂2+o33/OoX ȘH (;{G!!yWWi/gcn2:.~~&BS'OsCxx (hXXFƞ#WIa77#_vvvN*Kc3)#kϟ?6LiQHaIhH6q.8wrF(?/_3sWI)_Zfr)h$\m-8N'y97ȈoqwVG@H7aI"(F/W /Z*g)ʎN ?7`.ii>h6i)WxFnfO)_n6j2' ?&2o) qQ[>{+yy8!1ɛ w6'ii:8_!2FSgW"gk$((O 9)jNow)Wwgo$hAkaఀkay!?hHgg&> +?6 >'i g.goj gi9W,$o!:I'XV)yWwy1awFRNWR(v^Nf7s /gg7W<o(6Br3O2ZOKO +>^kkzNR&>*SO?s3[s3cC#kRNξ. +Socso+ZbjKr2rzB.j+;kSs##3#kc# +JjRR.R:zZ#s3So#[sSs{㛚Zk2R2"R."bkK +zJ *cc S??oO/cj;#CKCSRyaiaI~2B(VBgG)ɹ[nhF&g_S۲R:"*_N>^&&6g7wWwGOS;k:B* ~^f&^>ZJ??o2HH(^IyٹsZ2悊+3_+SrBRjsK*sۋzsO'>@ @7'aOw_(CGW'GBƖ(r +_/# +"J[*J3 c*0X` Ziϗ!! wiڻ'JS/&6.>;s/g_C+ϛ{*2j+z"x8("O iI)iϣ#O'3#r>^^22⊃"*k[ksBJBbzsZ2rN^NRr2rc*;C??g_'OCOr. z3[_K϶ʂ++2sš'nϛ{"cSB:.R3/g3?.JK7[^#RZo&^ +~*~'{ .K&nKCG'3o ['Ə Kg_*ZwR 2^:F g~S3 +^G[gin^3[>:gZ[g'(Z+&J)K^[7g.>_~'(2[?f#NR +wβ_þg*WR:_K>^_3C f6rI^.S vBS:c+_^/^gi's*gZ3KG/k/g:Rr'{" +RN^+.CbsNJboSBCk +sj js33kCKss˺B#b +;bo##RKj Z"K +ZzkJ**+ڛk"{*J+j+k +kKk**+K*k***j+j +k**++*jk+k*j+*k++k + +*j k j ++* *+kk **+jJjjj*jjj**++* k*++ +j *+j**jjj*+++k**+ ++**+j****+*kjj+j+ j+*+j+*k*k*j*** +j++k+ +**+++k**k*+*k++*+jj+k+k++*+jkk+j++ +j*j+**++k+k+j +ʢs"Ss/ʊꣻ/rC[ C[ + +#J:ʻN+z+/oCK + s2:OϳzJz"rjssjcnO_zB{ ++b/ [:&/7R&{ko?/SZ3z; +gvsGghrn.z^G+Z73>Fdz~ zb2"RZhώbk6RRVCZ7"R:Zb;Ik9fi'f/wI+3_2~VVzk3w2iR;w&.SKCΖSGg)ɸz(ۿn6Cf2C7W{w2zkKrg&7c[S#/__V{&&FgS6 wgZ)8^( Vz(r6?׆^_jgGv2[λBv.*Si7g+fKs&/)>;vo&>rN: w_FOFVvg>o/&&3_ˎn2Nkbjf >Z.n3b +3SB~nRo+/'BGʇo+/;3[ +/{c~phVkIaAay(8V6Λ) W__3#g_g 'w'W| `@qahhN(xY)IV H ) I'wo/jk?7Gil,,[9Q!a!aqAixfxȞىWw)cH HVB))7?ϳ:r.RC)PlH8oѱaYi>vV6HH?WwIOV V7)w__oBf.J{s_g!9IYIgk^3JFZS;"+O vF +. SOKoso{c#z*Jkb2j*rfvFns'''ǗWg_c +Kk*JJ22Br.N&N2.bz/?O3Ss;{j+*nRb +*jںjZBbJk{3/??/+J⢢""ZZj++{ k*ˋ{j+ +j**Z:: +j*k {;{K*jK;*kkkjk+ +zz +kK+*k*:* J::+˻kjJk k + ++jJ: + ;KKk++jJ* +j*j +J +*K+++* *j +j***+닻 **+ + +jjk k+j*jj* +k+ k+k**jjj*k;K kjk*jJ: +j*{ *++//;jJzJ; ++ +zjJ jJ; ++kKZ;Kʻjjk{*{Z*Kzj#{{;:b˛ +:Zs+.r+Kjkk +.JZ" ++ +[*k:; +C BZ" +C +n/ +cB3S +jO22r_"BsZS^{?fz?/cn:koBv&. jz'۲Jc&& ^ONB~ f(6'GV&'Nv9N_rW)6GˎyNC3.Rr/g'G7 + +JBzv&j'g 2*oo?R_òC/(.W^^*nKCk+Jf..)h6s2R~϶vR~Nj3'>*CBn/ Wgǟ&)㶺"r67džfò Zgr~?Z'BzO3cj֗RsfoW'f'. wf + s"_^^ /OGRR+?#S/nBSS"^;Sn ?kB?{' +k*/?Fc'.j:BR#SKoR~b^Z*n3CoSNrSKnΚ +roNb{sJ."K#+RS3rŽ΋+*+ښ;+.zJϿcj" +cnB/*B;/zzJS3/rn +⾾;[*벊*+32Js"3oO:ڻ{bZSʚ{*J +zJJ"*ʳk +{zK/Kk+#S2R2kڢ;2.rr:;/?N~>ƖV2gwחG?燇_'ϿSr2jK/?!$a11g`(C{WiW^f27NoSf*g/n72CSWs o׉ laah)I{iiGf3[b翏 >jnvȾIs'/n7)OcJs7I|Aw!QAHz!^~ +#~&'#R^x)RJS'_G_'7'X\l(! )I! +fgb၉3K/fjGSKϺ(fJ_gˋ* +c~2_3ogCg d()Aͱ.XjXva 7NV8CCZ7'.^)'sJ^[scooGw?)$oI&M xXY))9JvrF)fs&FKgOo*; [o_7Sw)Sp䜘 Ǒj6_ nFf&>_+3'bn*OσKk_׎Ф Hh`)M/ ! f8r9a IJV~~h_K[K&c:''g/?_;Wihܰ8y-Q'iqɆ.#ϹY +{fn6bg2G n{R> +SǗO?g8l P9Wq)O/IgHcR[*"vVȈ~Jg)G NSr?zSNj>rX +/w)g7)G?'K3*Rj+:{ +22r.nnR.Rb + +2 + ²*3{3/[+óKjZ2 +kz‚++zzK +"Zz *"šj+k+KCscC[K/{zz+ +Bn zjB*J:: +z*jKk{k ++*+ {{ۣ3K++*k +ZB:ʊjJ+K+++jJjjJ: + kk˻k*JzJ* +K{K:ۛC; + ++ + +*K+**jJf>S./s[K{Kûk˺j+Zr +"Rb +#KSkk+*zrJjj+ #* +kKj+;ˊkk+j:; +J*[{K[[K;KK3:"k +ZrKJ2*jj*J Û: +;jJZZ""2+sS3kJbBrn.RnržFƶ^R2[?')iW_'oj2>~^^2+?_'_Ϗ+(ֈH8x(^IIiIW)C"rRn>&FFhhvC'ǷwwG__Ͽs+>(8xHHR.kGiyy9yi)wO +R^6h(VvǷWWW)wgsƈ 8H.>w) Iyi )wZJhf>njC__7'W)gg'gFXvfv_Giy g7_ǟgs{&fhH(&Ͽ))7wGO3s?8츰ni!II93'_;_2h6vo_gwW77/*[* +s@֖xIiy!yI/[;/^6f6^^3s_O_ n&#r^^(HNhr֣j*) iGǿ_sڂz&Zʾ~۲.S: _Ǟ~n~C^ /ZR ^/'/SS'gb?S.~{3{ƳnK*6Kv +FR hZO2~Og3Iڢg:Sr&gF^^R2FiBO GJ7N jb[ggW_N_ ɶW +Fiix /['Gk8rzWwRj_&gk*{cH)&_'.2RN2_'GF? xvk?nx_2nr6gNf'g(NB>_o臆n菊_kso;;(hW2^6/FG/&)V+3oI'[r'S{wۏ+^6rRr 7[h_B"S#*/ SZ>bVgr ۷VWoJ*fǂʎW7vFg O~nsf&/Fn:rbo{r3Rff/:O&sS:ob rC"ۋ:R_2 *{sN3O:3zCN/Z/ns*[r[kN>+N/nR3 +ڳ*S~;{CR[B kkZ[3+K:JJkJjj +júC2KC{"[*2c +*nKb/KBJË +s*ZSC+;{;˻z*jkZ"" krڛzc/n.CC+#J.w^oϊ2~3.RS[rw&/;2?"g*Z'ggKs*'Bs .R2o&Szn.>Kcb /#+ /oK@hV(/a{~r.KBjc?_3*;g0p@ `V!I)vvb ~VV G g&^F(VSCO_^^&_OOOn.BZC:2s3?_/s C3C# +ZBB.RB>*kzH ZIw*O_w3j"Z¢'__ I pDdggwm``^(AgG8#'h6&fB Inb_/o&x?N&zۊkJ/c +닣r+k뺂‚r>RZJ[[cO/oۣ3/:jrc+ZJ:";gwg$qAhyWa>g&z3G_SG)bR+o"~.:_7'Kg',<1!yKYgy)GNؘ迷'>/'>V ww_kJ'2:O_jrK_J>r[c +CsO* xqAW"xY bzwf(v{wRvb~.~_{g'S. C[ZkCS3KSCl@Xρ9GGff os_C>6fJS&~.~KC /'_{+RS3"*{k{+{;{B@ !9#3'7+:'iJrSS^c*.O/[[C/+:RK3o{b{/,`a9_ ;G>'I:.:r&&o?#/Sk#ۛs#ZO;J +B l,A);w7( Y)^k'&'f&^>_wǟrO_ûSK*s[[S_^ 7qg{wFH9AAg&._f(g)6^ɉ_/G_*??2(L_s7)Xx!yV¿(W(hRv +陉'v'w3b_bCf^ +'{3, ASi~bOaG>({V83S_~bjoϟSK*/_''s$p&q-96Y)V) 8cI)#Wx OVJR^/^W#O_O:R'wG +F@XљI0 iW9a)f ^: yW"(ֶhi{_/s_cJϷGZ"[/_?s? 6|A- `J&hRy19C'S28H_'77S6 6{3W7g*'W7>7{$,hWGW R!wY!ik.&)b ? .9W(~")wgGN +28"2rrŠjR.;*~:jb J'R>oo32+#[* {r3;"3"Zs*R2?n~S>^S/2{S'+˻2K#"2^g>[+b Cn>+2s'&oOO>V7^o/f?^"_&^z⏾#c +ng.ROn2*b^3J +C?n?/r rgN[*b +2[jnrjJS# +/R{"_/3>*[ +ZSb~_RBkk :/3Zr?jozN3BS"˳.r?^*[kZ2_[ۛ:33~B{B˻kKsc{#Kjjj*{jJ +kkjz+ +J:Z kk"*+ +Jʊb:+k ˋ{˻{K#{ k+j*+ +* J:JkKjZj*+:*Kjʋj {+ k +:j*j;{+JK"[+kj *J"jzZJ++ {K˛{K**J:*: + +*k*zK{*K jjjښj* +Kk;{Kj+ ***k+*+ +jj** +[ Ks: ZbZb +Jzj *+{##;[{**k+Z:+:J:⺺ +kKkKKk{ [ [[+j˚zbb2z+k;C#c[[Cc +"J"JzZڢZkK;j+{[;#:#SSrʃ"zBrb2j*{[c#s{[kJzZ2BV)7Kr3CR;{2zoC{k* +""* +k #[; k + Jb + ++jz:Jj +ZJ ;k3so'Snjn#br +R3C+j{  + +K[ z{ *z{k + +**z +*k: j+k*#㻊 +j+[K#;RR" "kR>~nrn>.Z{SϿ_''_sss3c{ +Z+[19WWYW` gi'o (xÚnh(^S#KbgokN{o/꺋2 jjss;2;#;;c3srxZcgnv'3:f6sS.>{?+2B__sJ#JZkSJRrB..Z +*:Rr:{:33˚[+*{Z:+ZZJjkKKK;{kK[*:K3S+Z22rz*jz"ZZjBb* +B: +J:* +k++ _/o?/s33*jk{kN~ZO fyqi^.g.^Wa7>~2??6Vv~jR^^/#b>>~{'#KJK* z~Râ"/S3*{#+ +*꺞vfK>&nG___OoC +F_gv3sK[{#_{oS;r.NVX #))6N'9Wgws*Sk&^n>f^ +."2Š??[S?okkj K *z:z + 2*k.~N^v6/c+'?ooo'o[j:#SZRn.Rz:ZZ2BZ:b:Zڂb:2>N2SbBJÃ[cc/os?o/So/Cc["bڲ.rZB2.NR"b +j;+bRrZsCC3cKJz+K[s 3[CsCk*+**ZR"J +brnn."z +k22[ssCK +"*s*kCCjCs +Jj + ;;J +K +z:j+ʢKnBKc{j*+K +;3ZJ{* +J ++k;{:: + + +k{ JZ+KK; +z +jK+ +++z +{#jb2zCKzZ*#C +˻++[[ + +J ++*k* +KKK+j++j+* +: + {b +++":k * K j + :Z*k+zK; *:j ˻k +j k k*kk* +* ++kk**+k kj:z*kKˊzkjK*J; ++Kk + +K{+j* + +k{ZJ*+j*++++K +j +Jj+++**j*j*j + +j *++*닋ʊ++j +j k**jj+Kk*+k+ {JJ+k+j +* +*** KK +jj*+k* +J*+k**+k++*+kjJ*˻k*kk+++ K j +K * +jj++**j+kk+********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************* \ No newline at end of file diff --git a/tones_german/cause_1c_loop.isdn b/tones_german/cause_1c_loop.isdn new file mode 100644 index 0000000..96e344d --- /dev/null +++ b/tones_german/cause_1c_loop.isdn @@ -0,0 +1,372 @@ +*d}EьDH$]anN>&6Z:S'Wi77s'KJj¾ʊ*SoK˻&32&HR X.ȸ Ia)ϏK +^Z>66&>~"*k3/￟O__?σS3S+3**H&涀8  ja)Wa9G9G)C"?KFNjFVn6Jo +jSo+s/;srVof^ h^XxVg)Y793k;J.f6R.;SojÏ{/K/;3Ž:(6^F;'{'7 giggWj*SBF^F~^."+[os3SsSC#n:6h3WiG7)Gwǿ'Ksj.b&>.bZ;/C2+vh66B&>G)g_G_ok#sr:.r~RNR2RR;s3CRZFh^ggSw//' +sZ 2nrrB>.b.ڋckK/Z[3vjH~H(xnsfKw_yyəg)G*o;:ˎ> +f⺎~:nZ3~j?~OnG3/؋B H>^0W)9iJsv(Vf^nG*:7g_*.rn 7N0alpǀyQ )_'6(V^3jןw_?knRZF +2Z7WqVF xyqyyy!9 ?o(kb/g'7_'+Kr[nZOÇix٬fx΁9o9yaٟRkfH~ +)/7* + +_()F.x9aAYyˢO~Fh(F6C_{7ϳ7?'scKB*{*3Og8`0(n&Hϙa闹O>.vΆv.N "c[;k;/co3*;{jj[c/Vz6 >Fiy!I'?j>ZNRn2jKc3o#ssksKcs_f6済hWW)IW7'_#s {br~n^>zrZ{ꛃ/c/3###K(V6>n>'緇'/J:.>>>^RrꛋCsso3Cs + >~>&^RnÃ#??Og___Os{b.nrN>nR2 ++ {{**[;c ;3BNN^nRR룳OO'''Ss"b22rrRbZ:zzzc#[kSRRN.~N^rnZCs?OSs[3ck;zJ +zڂz"z"+ {{S;~f&>nR3_G7'c{: + +Z*rb +;J +*3/CSoHFVxHvRgWwIIi)?Z.B..2jʋkkc#oˣ[{#+㣷N,2h8yI !a'6ֈ((.gG_S7/Yq<|/6yRIAa!Ay/)FVH6{W׷'GoKgg!Xܱ6| H6QYىX8v6 +.F_7)ח_?[oϳ_Gi`̱ @,/ٹ)yR^x>f';G))w'?/O <`py'aq9k/V( )wG)wOgG7 L 0`'1AyiahV hfOkj wW))'/_?Gi6xx&)Ɓ )S7V6( hhhZ' )w WWWgog3?gwi L<@@9!qၹw7HV(Hh2&i iWgwGC?OϏL |`8vibq9cx&Ɩ7WyW '_*'/\lHGqy!9 yY(g88)w/'_ϟO A,lx` x*)aYA9(~2hxֈ~cWwg9Ƿ_?3Cg)g h!LhذXCwA9qYIn^HȞhV9 w__'SzÏrJkwvyh8``_/Y9I1/I>8((ci)wWoOg rz*S?wP8Vx 7y aag )Z6HnV:?_oO26&~ۋV؏>`vh.Vw:iIW )7Sk2Rf>C?/?gonz*> B+.2&b"&N + +"Oo'_/S{ښK#S#Kb/^c"2*BZrnb#22ڳJ*+ +ZK CJ;;33/+:*: ZrjnzZZ"""+˺ +k;;j**JJ+*[+c{뻣+k뺺>:F "O +2_ZFss^j> jƿSo[#.?*rK +Zn?_)(oOJrnJrOrr'bنysz.;FZ&'.'gJV?s'wN #3j[kVf_wg#SSfi'fR2sZ&BfK*K*BS")(Nj>onwz/&.3rgoO/[gBj_&Rc>sR^n ^*2orgj_ZNz3bJ[Z"ZΛ3rƲ"*FwBJgrۇ>S23Css.S/*C/j#B"/Z&SoS۞_G{>JNSs3oS;#sO'Os^fB*?3r `H+j Wy9)7/j's[jo/?7'KƖf.& rxpkOIa!! SrVfr[&Ȗ9 *s'/N*sK +NS +Zz[  (z) Iyi h&ʚ> 9ǟ;F6sGS'2&Ȑ PvK')ǿφ6&_?K9I&j/Oκwc?__,PL(Y-qqISfFָ8HiWSgg&FzGg +"k)Vpp< آɹYQhF6S y g# +ꢎOW)?R233 l@_iAA9ǎ(^2?G/&n.{/O?/?O/>>ۿ`C) i9 W +fֆbsc#KbrR2jϟOOSJZ*[KK#cn&H8xxH(& +w)i ׷oK2ZkKzBr.rZjk{{[[[#K+;[#6Vh(fr[WiWG'O3ZbBBBR.r:J+K[{K #[#k;c*2Fv((VNjw7G_O3#** +r.r"j K;; C#{ jJ+kK+ {>֖6>B'77OSã{뺢rNc{+kkj*˛#:.V֖Nz3w'S *z>.B:*;#cóc{;Kk ;{K+b(( +/'7W)WGg/C{ʺb2R~~*CSϏ/3[ jJK[C3zfv(^o鉉iWo{k +r~&f^~c_''_Ockj +jj˛s^hx8V^*iI99 )7ckr.&rjCG'O/[+ʚz: +s r^( Xhf 鹙 )7JR^f&>BSc"*c/#r^V8` 29Y!9WN^Fvvrc'7)iWO늊*k#sjNhxX` 8_YY9 )?3nVVVOW)Wwsc{+zzzhX`X8i!Y)/+.fFvvF&N)'O/;cZ+z"BzNfHx ظV)IYy 7/#v6Gw'{;;KsO^&>n:b~2iiWj>&~r#O/zK[2bs .&bB2N>F66>*S'g'ggkZ +2n.jooß S +z.z2RnNJ~R: +J2N~/BBJz.jO3sWg22#OoCo*zczK;B{Rʎ[;3#2_.;N:C J '+۳z.c*R j/R +[n#/FjknOg&BW;*zf3~z ZCk[rRZS)3.OOwfCKb{Cw'9#/o6֛J~~Kg"ngc +Jz2GF_S2:n/7F +Nڂr_FF>+[ +[FN&^ViVVYI^r_2Bjg+^nS+f+fn?n_W 3_'b3{zvˣnG&& ϻfg/r7*coRB3 .;r+& ON.ivfJ*S&vNG'ƈ&fs>^Bo?33^ )^b'gJ&R +JkCB +*3[3'[R_ϋ2~sz# +"rJ{OSNJzʎ6s;'3;&rSO{ /cZr>&BB "*s#;[oS[ .˛#"##++뺋k:B +J:K*j +j+[+k *+K + +K +j +:j +;+*K K **k+ +***j*k+ :" k:JJ+*+kk +K+jj*j* K K;{{ k + +jkjz::JJ*zJ*zJ*J"Z+ʺ* ;[C3CSoooS#sK +"ZBR.NNR2BBr¢^^j&G_w'GOgccc2⢞^^>k hR8>v7Og7 IG) W";b~~"2brs3/`0 ~Jy7W9yi_)y?ƆJ&~RSg{:/_fso 2!y9 o!a'y)[VNssFJ_WgOS_#{P<, fvxos!!YK79G{^68f2N^6V6z#'W/_oJ۟@8J/zA ig')yWGSw)wrVHVf>Fn?wggg:bkcSsO Ll~?ky_WiiI7g/OSF(־;~ +sO#?sOo[k(6fw79)yiWwo/β涶(~NR.*SCgg_g_'_爐ֺH^h(:_G i I)wS/_cV^R"['___p;x0VnV 9iI7)Jf&&#+[O_g'_''?:HxN0Hvi WWii'_zʣ66Ɔ>._'__N0>HV"s )I)鷉7S*2;F>ζf.+33S?_o/`@(Xf(@ &hyy iW9  ^^f6(ZOg_'_og&0X&xN0fFr'ٙi 9WwiobVH6O'G77g'SgO06 (`HY!yigO7WiwnFvX H^w_w)G'gg׉ ט$̈SGykHQhX(rs +{oWw_/_WWdV!X hyqqfhw)N8x(Ri{77b)i)d6Zak`а.!m))w!(x'^hr !swI&特W/?lo k@0>qqw609G^OG (wSj3#ow_Iw\&aII1XP,gI a`>bR_9Y [Xxֆn992N2c"?LJ'WGwih$Y77hS&jQah"&8XI2 +& f)W)R6o7/{O~>/W)Zg~o.R?:Ff`H+bY!W³'hWi)7Ii7.^~ڿ3.F;C*c'sKgCSSgΜX8--W'#*I'ByсN{?g.:iVFvhV_G)GSK3S'S3㊎^n^~>.O:2*rNr{os?O_'#o[[3#ccsJ L86hF? X8Ns!/ (HV2^/2NSco? :zNƈ((n +g'׉/_Rjc2Oû_K_燇)jpxVy1IA h&ؘ_7 !F(8>h'?'6&.&frSwWÏ[.Rʺ*{sJ)V`F IIٗ/h 7~7ɏv6G((R֖S7>W'wSO_Nr#,yIN_)>gR+fFo_'7Ύ.^V+J"'_Z/'C_SR +>ʾ+8(&6fg.?_S''c[RSN:>"{o^O~"f_36vK>3Z2b6#f._3~2{sc>Kz"Fsڂ?R76oKHo +fn^ +R{(2.Sr[z7.k+JfZR;w2(KK? +>Oɷv"SSZ:^w +f_'F ⎇:sf;) ǢS~oWNof_w# 6~WF)hSn;NFg3OfffZrBGfrC7G#(n/^[FۏO_#&s.sRZkRboK'?ZJKr:Cr۳R˿^??jK;ʂk k sjj:j*kKk*;j J+j ++J +k+K*Jk*z* +k+Jk+k+JK**KJjk +*jzkK +jj + +*k z;K :j+k+ʋ +*k*+K+:kkj J+Jj ** +jj*kj + j*+k*kkj +j ** *+j+j+j k*j+k*k*k +kk+++k+j*j kjkK+*+ +j+kjj+j* j{k +++k k+ j ++ *+* +k ++** ˋkjjjj*j*kk*+j+*k+k;+j+++* +*boKk[ +jJK k*+;; +j+JZ**:zJ+ +*k kk +jj +Jׇ^nO n3Sk˚RJn22.rR+**k{s#C3/{**"*ʚ +b: +;J*J+ +k{; +[jj+{k;*{KJ˻;k*Z+ ::jj:*KcSz +*"j:{kJ;{˛ks:S[ *B+JzZ:Z"R:2n&RR"**KnRg_S~W GG r. +2W@wP@S7GY_iח;o7o"g&VH׋+wig?W['r;S,9L0XAv)iy!w !;g_sis #(j3'')_3_c;/sOY0`6?yٿI97gKZ6f0JGsi S'.[?+'"#OS?@@i h(N )y i)ڇ_g?.'R:R''w'; +zJ^?JVGrh6V6iWG))7SskoBf2N~RS +S3.rþ>Fn">r`K6/GiGk_;z>3Cr[2[n/"^._/&{bȷNo_6kS(7nvGK7sgsoo7&J{;+.S:GNO& !X! #X8!6.[2NGkC.7*W+6jSi6GƞIf!X7G;G nH V67c +&[wv fF /G"ix_>& g6ɘ( GvIvsg_^>'vK+'_(i&Wh*VgnLj(>FO':"~+h yHO3*jΟ.B#˖6")vGz^G~c3k^Ljz3^6>'^>'JN~ˏ+F7k2o +s6WV_j2:S^RG'_2w7f'VW7(׆ky#fiwo(8)OhVRW.>:B_Fcgj__'/ j[rVsf#fnZ.ڛj {cJz;jkk ++*KKj*[kJ ++KJjjj++*** * +;z+*j*J+*j;JjkkZK +J+ kꋊk+jjjz + +  ;{ ˋ + ˊjkj +j*kJ +++ +**jˊ *+ +K+*jk +*jj*jk + ++*jJ+* +k*+K+ ++kj K + + ++j:k +k kj***+* * +k++*+2;*:+: +k* z"kJ+ +* *kjC7K_ώ^~[~NSnZ[k2[j:*&13֞vJGs76Fr׉i{oSNF/JO'.[Kn[{c> +?K#c~:+*OfNw[R?k&z*srzoN +O~w3s ?h(9V!XS )&&rzG7R~?W)'K3&Gv>voHwɉH~)iWn(('G2&.o)(&gJhgZhI w +f7W&Cə'VO O>FzsSff&jg/zRR#b'2n2cj.CkOJ +/?{R3o:rk+R.'7?&*g*#brRKskZZsz.N +r2ZKb +B. r33jOϟ?Os3+ jbKf.s_I`L^!m!N9ٹgv6I)ShgF&jgS~f[_Sb27y8Lh-aY((GiIgG67yFj#BKRcsZ.Z/''s>N# SglljavwWB/#Y)^R>׉VN'翢&/b*Kz+,GaargIn3iBr6hσ*ڳ㢲+3{JK:* ;/(0@x_Bwg_wgi9gWK'3;3 :N>nn.2:+ +S[ +*;[ ;::+^(&8VƆ_SIW)Wi'ϋ +BR>NNf&JzkSKso+j*:+fVfNOi׉ 7'cΞ>N."B"j;;;#//S3{{z"2rb&N>^fR:o'_777WGSK..r.>~>.bR;KjK#c*ZR2ZZzN>nBZ.k/S'GGg#+j"2:R.r2zzz2 + ++ +:cz"z*+*R" +k˺K:J: +J +cSoS///ScC+kKK+zJZzzb2:b.rzJb:*;k**K[Kj +bjZJ+c#C3S3K{c[KJڲ"2Rr..2r2r2 kZzˣc[;3#[ +: ++Jz" +k*j {;cÛ;[# *kJ*bZ +JK{ +J #K* j* +*Jz*jj*+ k {[[K:z[*J:ʋJzjjr_cSoS3Zrk2R*Kk +HS g"_fKfB3+/bbc#c +c;":ZCbk*Gg{k+Onrk>23[ [z.:3n32s +g/R?&n'{zsNSR"/3sJ#Rc2COn.hº'S +{3:Nz+:KʋbBc{B+.kc2~b??:rC +r + R+ :۾k?. +"S;2{S.B3n#z#ojCkRZcc:#r?"3nS/Rk*~j"rj# {J3BCs* +R JS +3C3 +/*or3n3r:ꃞ3On^b΋** +"jRK;z3Ͽ/?O_?/o/S{Z"n"Nnbr>.b*{n8^(f&#'') 9iis+nR2n2nv_WG~63wgR?KB3o+3(lXW1Ia?.*oij)zzrV&"Zf2+_S!?Z +W:g^?DlHxgqA^IIB.8YI'Kf8R~&>sp9)yW^_ BjsshVamIX`8n!Aw2 f:ri.2 7Wwg'3nƻ_﷟sOs[j*'\~W-W iyB!>^r ' [w.vf>(S_z +csc??ϻ;;S{7x̤x&b6遍/W`@hɷ6fhHhG+K^V wrfh_+[Oc/b +/S[{Oo> gV`ƙi+oYaNH ?)vh2wώjJCooC/SS_Sv<~iA? WbW! 6kgV&RnG3 +N* Jjsoc#S{#s[/OZHlVWi .x2 f9 ''7dz~V&6[CssZbf.{g/O{b 32۳2[z*{/zR ^&FvfB{K_/S'osoc3 Z + {Jb "Bk*: +B+{:b; ++sKZ+b#;zZ ":"jJjs[Z+{{;ˋjK J* zbzj* kk*j*J +jjJKjjzk+ +{jj˻ +j:K[ˋ{+ + :+j*+;*jj*j {k+;j+ 뺺J +K +* ˋJKˊ:jK +J*ꋛ+J J*:ʋ;*ZJ:kʚjK +K;k + +k*+ ++:J+*J +++jJJ+ k++ * +kj +++ +ˋjj ˋ*Jz*+k{늊v'  2.".¢vFw+OZ"s2;+˚.broˣ#Sz/+:~3JkFgR/:??G_&^cc^o_&oBoNOZ+^ƿΟ^Z˲Z +2[~JS[2[&{&w^Z~K/&f[>GViƇNcCsfG +"^jO/2r~/Sr{cN#JJ.S;On/+ʺK +s.~.bώN~GvRo_/ڳRjk#o_>2'*3R?6'rzS[z::oO2S^O :J +cڊjKRr32Jb +~>o[Sn Jo;γ2/rbs +"C*ZC Rc[ o:#2k2++S S;Bz +.k +*:Srk˻ʋb:z ss*2jcZ [jC+* k;k2ں#[C2KJk:{+ {;+;:Z #"JˋKK +*J**K +:{zcZKzKʂJ {kzj#+  +*ڋKz⊋;zzۣ +ۂJc Jj[jʛ+{: cjjj;J +Jk*J+c:;ú3""J[j j*K; +{jˣ *+ +*+*kJK:ꛋkk:: +*++Kk+J+**[;Jjjj:j +***+z jj KK**kK+: +:*{+ jʺK:K zkkkK+j**kk*jJ + +*+k+ + +j *j***+++++ j*+ *jj*JjK :j*k+*kjk+ +* :jKJk: +kk +k*JJ* *+ +j+** + +kkkj+kk** + +k*j +*+j+k+j+k*j*jkk** k* J*kkk +jj+*+*jj*k* +++j+kk++**+*+ ++kjk +j+jk j +j+++* ****kk *+*+++++j+****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** kk+ +"Z+.66b3'7G:{[#CsoSCnN>RKkJ"..rz;{{ʚZ" +k3o_'_Os# +j +JbR>>N + +J"R^6zigϣnΎB: +K[3Û *Z" 3G77G'O{ƀ Pr遱QQay'r&oyyiv8XHvcoS?Gח7#rf~£'/.Rb;s__(X0,Ѐ?yq9{+CZ^VZ?9 *ƈN'燷n"Kg0, &yA!IGwSfhxH !Y9wf6^ξI W>fbsGgoc +h,,(yiIy vxXx(9Ižfֈ(iIi2rB:3SC{ '';,,^#!!yaVXhW?#o(8>SsK*"";/{?o3:x,XNwA(xH6?+'Y9wr(8^^B)I)_*/3CF^K'w) zJ3_gH L,_Ggq푱9nznHXI)OJHp6/R_9'VF:?/NV(vg( Ƹ +Ik~ROGo&S>6[f^S's/Rjo#"R:[.&^B[s#;7w'7G[3/#&N^N~n[{+/#[C/o/ +Z^/Zrf'&k6[rO?3Oo_ RN_c**n{~jo#j[k›jZsNJ?".2 CCHpv2(Na W9^23(hO7+:J[Z¢۳Z ++.sk{#_P f-mY +9.W{37'~>"33†bRRNۃ/{j :2>No</Iy-!('GR2 )>i^>3gzn>nJr2r".{n/#.^&~s+P9JyN(_ɉI'#g6 'g ^zO>&r.r'kN#~SCR^2,I93(9[3ii_Gچf~j'/[.n#j".Coz.~>&Bʷ +r6?PHia;GɻKyYGZ'J76(ɹ9hfkϟFfskB>f>bo3fRSgS̐@iS)&69y_Gw*.o:Zz_CFoںZ?~@W2&^>ywc's'_BK_Ii6C.^f2ǷFnc*3ʺ&o |!a#㉹ Gs/۳.:IG{C.R˞/;s&f_r?osऌ/ً(7r +'n/+r?B&F; "Z?"_&JSCG8JK2CJ~C +s3"2{?K;":;CgGL!ywAi`Oy鉳r&2nZÊk^c*N^C#kSo2 S"sR'oow|$l7w xVh 7G r&rBK#+:[z3OK* z&*>& +‚B*jb +{:*Co??ϿO3K*j+*z"2NrJ+:z:b C/+J;KÃ{{J +k JrJjjjb:*jʊz+k#/Ëz +3;:k;ʺ*+* +kJ +;#r*Zc[ ++;JZ+ +j+ *j+ +z[##:;*J+jj ʢ;K+:zz+ + Kjڊ;z*kK++kjJJK zj + +ۃ˚JJZ +#[*jzj**+{;J +j vc;{3.:;_Kg/F +/>k Cr~#/O +ZZkB" R/##kc/ +;[ +b:kk{jk#{+k +ڂ; *kjz* ""z˃ssó˛3S;KK^6oJzsۢh2yYw{[??frR".r?o; .*Cs_3"G*)xo- 3(Oa3/'Oۈh[_b·/ ^jv6{?'S{& { _;j+ZnrRrhzcOjvS"fBk +S?o?Oo'OOS +s7WÌ(W>.mAv`7V.aiSfxGK2C))FR6sJr/c.[ o{3+ +:+f(r?_2?*J 7,n/-نXx 2r&>oS /w۞(VK{ooSC+Z+frKrg2*w wχLQs/q@VIX{Ș&I'JB.^R2{gO2[˛w[#˳w))Q6w (0SJ`1a^V)y!7~חsxORǏfvj'.?'[_K'S?r+GG($(Ia  J@NKс'!G [w.)ɻ^zؖ7rzg#wg/;7G__?3 ` qh7A OayfwoiW^(Hc&s C2_7~g)#_f_z\h>&yȈoAY_)GW#ho h_fxb77kZ~';'2^~c_OR@p~gFf{ hIs)i?oGG?²ˣ.>&NZ>h8z^*OG;OjhVx&2~o'W! )?? +{N&ffvV~^n;;gׇ_׿zOSjK ..z`8(`3FVgG OaWGI)_3>>~vZ^/_GWos Ï[r.r"R>6Hvv6Ns?K)yIWϷOϟ+ZNrF^NzOogO3zzzNRRNB~nb +‚*kk3sO/N'i~&Z&/"s +fr_SK.*o#:. +ښSco^_/J/'rc{nSOjkf>{onKzj";곳z/j;KzN:sSo/.b?S/CRz{ښ.Bo[_S*ZO?rrsrB +{ +>Z*b2[3; :k#CRc#cnos??{+SNO^g2>:G?fo*"JnN BvG +&sR.2K>_ ++;[{;R[[B*jgs*z>n.cR +3.gS/3 +BΎ[2c/k[&N +sO*3RjKR*O:scnK_22?:nJS#'''[./Sj(^"f[sC/£;C.?NbS^Bc{*3f Rc/ r+.KO"zڢ[s2RSJ;ڃOSCjsJZ+.;zC3n.S&ssR{kb +{J;*RZ +:k:ZJ +/n +C;;k{b+;N>>:zkJs~zNk k /Jk?3.obZoSk2Bj/#~ OOO+r*rR:K3S rnnb/*z:k"J{:k 2;c{//c*CoOB"N"rj3[K΂"*3[{+R.Zˊcso/*ڢ.z{/.n +CSsrOK2Z3k;S{jbc#Sk +3Jj/3[*S_g:2R+?x ~)-! 9xg)CSCVh* i +  sZ/?RO#3O'׉y,$lǹIYa Vg ss(CZ.GSr>ZRVxy97S36i_[/_?Gw|| oIqm[_^A'^Nϗ_VVVja9&wV(οW)#_''7|d8ymIv 胈ᱱ[Vx`Ϻ_g(h~I׷+ʻ^R 'o_c33c)g$Ph7ˇsvF^`)Yy))aaF86yw +:kS_7W ꋋ cs'S O9) Yh6Vx'9Igf&"Fv:gsK3ϋOoK*/\vGmGYx@ GG)â68:Gyiw3/gwGSOOư ` ѷgQv/V@:W{h/GSWw7rcF>:2gsSGg/{xlnVj! ǹAg7g7HC?'G_+f(Vv[zS'{"n>N:r"Kk/S/*Zz{{ZN(.)W 9G?WORRj*^RO2JbrBjkbNBrj*{ڣR"ꛎZ*r^fB2Kg_7O3Rs~rKrn2SCnJRKZ3^F3n +Fozr.:grRk#;rkZ.C#g3s.Rﲋ3bCzKSR+Zf'&RfRo3?.ZRO/#sBf&O*sˊ+g2R__jNs^:GoV7KrۚgnF{S#"ǏS~o~:Oc/>Ž7F{vgF6'_6*gibCn^N3/Rb?"nJ.&ɖwKfr3__(SJi/Rj~NgK_s&*_b#כFcO 7n?^~;w'fSng~~Ǟ/Rb[R2?~{[SS*/3J r'v)V_(7/6s ο3&C:ZSϣ+gr*B/v'NO'F:& +^Rj3>Ÿr/:**koFb[3k {R?r*+ʳN +2~7o^. +: +k.K&΋Fck*Roz+˳ ++JB:'3o?So#CO?zj2Ns22VB^{?rs[ZkR.n>6&[nK*?g7g_C[ +*Bn2C{Z()^*>n[J NkZ + N3^rc*/ +/Cn2[:JJO_/3'[/rO2 + CJ[* +n+ڟN2#b3*R+n[kjZO/JoosrZ{*sCr2s&JNj+.>JBRgZC~3Jk. +K+ZOzo#O{j: +/{Z2 + #oR3Js2ZZ;j[~sj: +.'s+*Ns&2ZG[Bo/B"j#BoZ;gZzZR; ?*r2.O2~3NBbsJ{Cf2cSR3Kk2r2sJSzSz ~SÛcWcRC"N2nc2rzR{hn&s.: zZ._>K*"#_^//F_k:r/3b/B +oC'G ?'C s"*.ro.^J.Ro Os.O.LJ2N~g?nORf/jC_ ssRS +KOjrʆjB[/sfj7 C~~g~Z>"NNOCSZ#RC.jK˞S*# [rS*{Nʏz;"'OC C+BJf +Sn[~*+Srڋn+b#{3O +r3:oJ/ 늢.ZJj*;3j+" k +zJ"k:jN*2: O/KC[N.s"zJ;#.jBBڢ:s[KZK;cJ2ڛ?ۛ*J:RZzcz>{cZ{cOs +B2 +۳+jKJ"BZKZ2B"Ί KkNRc2z##OBZrz O*S.*2j;jk2+Ï +>;kr+:bRʚ+C +k;rK:*j2 K +3"J +"ۏc˚;;"*ZKnKks22.‚BZ;rsOs/cK:Br2.kj+J s*c{oos{ +c{J+ +B +jk:.BZ[*;Ã+ k"##c*+:r+ KsS3 +*;{ +3#bZڊ{3 +"[ +J++KKˊ"r:k;k+"ZCc ʊk#J*kK*kˋkJZŽBʣSszB:* + +z*J:: +:BC_g'#cs?Okn +[{RnJSV 0"-1^H2K)w7v~C +>."3o/o Z{oWG|(Qm x"7+6.sOJ.6vZ3ZZ{cOﳳ33??3/PLLmXV>ɉW_oiyWj?+ֶR+{{SSSSC + /_g'Sool F--¸ (K ?ə 7?.V(Fr/S+j#s?o/+csOO_Os[ll,qqqir(׉)W (#>^rjCOo;Cso/s##{[# ppi aWw zR'_s?w)g&&&f^N3/oszJ+;#[cs### c[SV` ÎBKoχ7g[/g''[˛Jnf^RKkkKk￿O3c# ;+cã{2澞HȖۃG7))GGww#Bff&^fRB⣣''_SSc/KkZzz:J:68h&&Hf +Sw )))Gǿs>6F&&ffNg_?OCJڢ: ++"&h&^vf*)I i7'/cK+*BN~fƆFR;?O'_?SSs[zz +:z:(8>~(F^Sw)ɉWWG7gûJR6V^nr."C'_O/;[K +ښ:Jbr(8Vfh6;7) Ww'Sr&~fff~j{s'''?Ϗsc{*ZZ""J::&H>~vV /׉ )))7g{ʋr>F&&>Z;SSϏO_'O/sc +j +zZ +v8N~nvfoWW)GwWw'o[{*: +.R~Ɔf&&2#/'___?/; *2B +j + +:"nƈΎB)9 gO//;?'ok^hֆR3ǷJ7;Z":*k+jj.H@S!m!.`V!Y7O?ss^&2_SvhJc+.SS "*s'_n>2:#+ K;_@l3-maCpANw"v^G7[Fȸ~'f2^r~7{/'Gn.{{c**+SjЌpmQO0Hga zz^vnwIȘȆgϺ^._f&s3GC3jr{sJ"[SKZb+{j^(x XظwwVFIyigSs''Kc?'Kv>Z+.~Bkzbr'w?R+/_JrkJj{;khXٱaIx* 7o>^7GSnvֶk:f&Jc[K22: V*ə9(ɇ*S*º33 +:~VI碖(~c goJ*O_oNfβJ^.jzB2zHfK_v ·y(>g7~JSC*hx8V^9 ׉w'OO'_sZf&2br"BK;~~&') iニg'ʞ»#; *hxVcSgRzw׷__3/S#3K.>..Rn" +n.n +cOGGn+:s#;s3SJF0HѱWh_9ɷ))'Ζ6چ6:f&˃.^&SBrJc F#if([7wcjNs3[2sB(x8K/B^r3wח7_/b#ϏC22.nn.RR^_;;&sN sO'?#k[0LaqH"~Y!vvN"7^2^΋/{z+"[/KJ:*cۣcn:c+[3jZʻK*""ZZ":"+K#; * +c{ +kK꺚:z:Zz:***k k K;˛ k;k+*+ʊ + +jZr"j:Zzz"z+ss[#C3C/Û*J +j +BZr2bZbb+kꊺ* KK K#KK3Kk ;* ++KKj:+:bJ +:z+ j*+k+j++k *j*k*jJ*k kk +k˻ KK + +kk +Jjz ++jz:*kj +j +kkJJ:K k **+k k*j* ;jK+ +:kJʊjjj**+++ ++*kjj*++*+* +*k*j+*+kkjJ ++++k++*+*k +:: +k˻")K^ozSc+;*k::ˋSjj*i'c~kڋK#/J''/^sK3n~S2r;S~372~' +;z[3/2okoj*+j#3nZ#2 {ʚR#njk +Ror{r +*;ˇ +2K#rrS{*RbCj+*3Z +KzknK+CR[2j#ۛ+RNS."//2{›zzz3{JKr"z;b/+BJ3cZ{"; +ʚCj +j˛jK{kJJ#K#" + +j[*RK KkkB*{[{+2*j.RS#"Ss"n"jc#BC{*zʣ{*ڊkZ{[zck* +ʊ[[{ +"" J{{bJ j+*+ *+*Zb ++{k*:{+k{k +Jkjk;**{K +z +j+k +*+kk+j +K{* [ zJ+*+k::z + +J*+J[;:k{j k k[kk+K ++:J{k* + +:;k+j: +KJ:K; +J ++K* +J**k* +*kK˻ +jk*++ +jjj*kk*+k;;j:: +* +k +K+j*+Kˋ +zJ kj ++KJj j +:+ +Jkˊ:k: *J +*+*뻻ˊ:z +Kk + + +jkʚJ:+KKJ* +kkjJ*+Kk+ + +j*;+JKj + +Kk + + +jkK+j*+* +Jk *zJ*Kk+* + jjj+kk++*j+k+jjkkk+*j***jj* kj +*+jk; *jk+*+j*++ +*kK++++*+kk+ +J+k +* *ʺj+kk+ˋ*k k +*++********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_german/cause_1d_loop.isdn b/tones_german/cause_1d_loop.isdn new file mode 100644 index 0000000..02ca604 --- /dev/null +++ b/tones_german/cause_1d_loop.isdn @@ -0,0 +1,162 @@ +*d}EьDH$]aZ>c{ /_vb7"26Z(gnifkO&J*s&cf/WR.F)roFۚƛk'OFs/^Ά&rrc&ƉkVKkGr?OjG.3o{rS[*_j[ok3[;+_?Bf+B'>j*V{3z3;sFOZnCN2;#{n/s{nnK{"KJJsbJnk3 jRcNb3>j:R*JBrz** ++srrkZ;z#o++;b{+kR/oZ_C:C>zJo +c2B:CSKsj**k//‚ Cjnjo/ ~OsBRzcN."jf2zG)i)iwgs/kF^#澲JN@ 8wI911A)gRv H S)iG?kZ*BnO_p00R!!aAYI_zfh8h66&KjggO‹#kRJzjGH@؀^wy!!y9G jfhV>;C*Kb3'gix`Hv9Aa:ʎv8V^co#o'š ;')o@X@`G9yaa9)ʆ6HV(__W? +{Zn)7R @0xƋ YA9I7#v(hV/o_Gg{J._GwW'`@Vi a119"vf(ȈZco'GWw;[s;.*g翏'Gr0 0VK#7Yq1YiƖ^vHG' K_/O#sK_Os +&x``Xf)y9 +rZ6v>r2~^NSRs3Sr.z?kk_jn(x(hh {3k/'i!y I ig[3F&"&^BNkz2R/Ss3[?#B~Fv^*s'WiWWwg?o;*kbzZ.B~nk+2*R#{²*ںb +J ?Û?kcZ:6V^NcO_7W)wG_+:C +2*J23_.:{>"3nڃJr{"oGS +ƞBJo'_C#'O./?. ֈ>&6B/ ˻C#hhz^) ׹iSb[ +v. ?7O?BnnF(B[?G7)'z^0`i1YaIKN(hXX +)Yן*S+vhxh6&G_wiW[_B@WQ Q11AHXFV`(W Nji3xs6VK'_n_Gg*#W|dp({  17Ȁ0vh )H @VJv Rh63IiR,d?h!M-Qsቈ P0o~~)aQ7/cVX0 2'i _s#cVN +i)w)w$O`^ -2OZ@@wz 1V8pFs w'ZjNV/)Goh\,06 M1Bh,0wiA^8x`F.' i'?G"RZgɉ_{X,j J0аڇgoG11n8(g_i^f+f[g闟/_7Ll+-Xzr! +ʊF6b+C*ksb.RN^ z*c?gS60~(99)iSvn&fR[?os{2RJZ+Nۻ"r* +BBNj{{k2./'s3Kj[2J +2Jb +jK;K; {Bz ;"z:K[ j[kKKjBR.BZ: kK{k:Jk:z+˛K+jj+z ۋ"jKBK+*j#s+:Bb ;K#c:*Z +++ *j* +J +:*K{Kk [;bz+[#;kJzʺ+[˻[zzj*jj*kkkKk*:Jj ;{:ZZ+:k* +3OC zR:*3{ښ ++[J2kk2;C k{ZK+ +ZC3j +[JK/ZZk "k* [.+ZJR;>..[ j+2+joo:2*z_o.3 ϊj2jSR#zczj/2JjNZ& N2z +ZB+cn;/~cJ~3SC3Sƿ[>&B^Os/(C:n^{r{^rR +Sok_.RK&C#&n&/&·R&2+ OvWSR+b"j{noˣ ofK+"k{2;fK˲k._zsc +z +/2/"sbn/r ˊzVNr3_3#fSsJ/v[ʾ/#^S[_NBj>jSsn;#s[nkrkk#Rb;zbk +sOJ2 Z"C[#c rkO/*J{+JJλ >bšc k:K3 +S뻲{3#:o2:KoK"rr""zk:S{ۊrk[{&*jR {z~J&":Nrb{[ˏkcó +{##JNN[+# +rn[Bۋ #s#c{K[sB*"22[#"n[B;[CK#^/3*szcj RsB^B3'ZRo'Sbk:2C_ ^SjRNNoJ:nc{Nk{ +{*z_o{2+*n_rJsJۋ&r;Bn.C*?s{j˛Zj{:#ښښjS2"oKjRZS +.2R*c 2sb*jcC + *+S;3;㚂/; zJc##[N@0XvbI y9W&f(wɹn+B2z CGgHL< !Q)y 9B8v"NaYI&&6(6hhRwi o{*gGG*)W?,PЌv!o7KaIY!9IiyR~V>:?K3zO'_g_o@xH0`^_?Y7g Wg'K#3Ff&h((~jo?'ggO_'_*x08ڶOI_ə) Wj +6(֖(V^^b3_g__gOH@h2 ׷9a9iɇ_[SzRV&^s'_'O's;N` @V aaY!W_Ǘj.^>F趆vrs3'LJ's33HH &6W) ?j>&6V6V6Rϟ''/ckZZbB8hh>O))Yyyg'_+Z>&&v6bzs3S/;;zJRnNnBB22>f&^.{ _wwg_gS2&&&~rb"jk{[{cc +Kk +JZ::*jk*ˊ:* + + kJ*;cã[+ˊj::J::z+z +JkKK k+kK;{ +jj*+*j+ +j*jjj +++kK; +j+** +⚊JjkK{ *kkk+j +j++ ++K* jKk*˻ * j +*J*j +jj ++KK**j+ k k++++*+j +jj*j+ ++kk * + +*++*jJ+zk+jjkk +{ +K*+kJ +kKjKz +jz +B. :o[ho? +z;jzkRJjzCR//Nˏk*/#[szs3n#{Sc⢺Bcz"n" b*B~b+B*ʺB*3n{nCz;Snf"^:&Cf"Cf J##c^k2FGrf..N"SbKkSCΞ'o"~_VJ?v;B_Rn637Js>GV7Z.Wo)GS?/f_vCfv3G*VBG^#R_J#ΟRo276 s.σ)WR/fW^ +J3FFFk'r^ggg~gjo){^)I6^2O{cnFƞ3&r)(ٛ +rZ(S +gN&r~gFOrBSi8rhiv'iKK#?'g:SF)6>JR):{WK&2Sr_s:*_R3_ +F^ +&ʿΆwX({Bni)NzFK7iob.~?N:z?;&OS~VhN8v**KWr_{)#2_ +;;*>zc϶?/KR_( gn+7{js?'/v+n[_?{n +R/?k.oKƟ~jKCÎG~~OR_{/FbGk ^#nK{N:J ?rkS+>['r.+*J.ZKB.&ck[ o2#S ?j*z2s*{NJjnj{"R.:j.Z+rz{sS?'g'gs2BOc:J#[3.hx@@FrYqaYiVhhV)i)o3&;js'w_3/?S~(l^y!i/Nx`xh; I_3h;'_Gw?j+zRr +Wggz6 P6SW!AA (~+#yIvhxhw)W'onR:/gwחLJ'>,< 9y᱁!W^Vxڗ) v(r#SOGG_fb/'Ww3^@ Pr!y9!!gVhv*׹9W7> XxfZsS?GǏn>SgG'c, lFg99ى3&ȖRI9iWGghxvzs3g>GLJ_n,iy9YZ9 Wwhxhfˏ_7_BrK37Gg'&, ,S)Ya!Y)v Wwi).((v&N/gRz3/7''?/36l PpIa~BW'W) >xhffV(V 緷{Kk.J/7'os/FX, `(hg)aio +)S)Ii7sƾhVN[c:_s[J;[[KKv ָX(&g iYIW'鷿.zbV&6^>3*o??33o/C3*&`X舀noI)3aii Wz/hNʾFxVڋž^w/"ʏ?ꃟ_8x`J׷OaYy) W'J^6fhƞF&> +[[__S?o3o?*s2V`H(37Gفy W'_S^ºFVf&V.ccS'oOosC#[JB^XhH6*#w!9IyI _ǿ3zfFf&rnkkS#SOo//S;kk2&8(HHxx)Y99yW)g #^Rƞf6V6R&2B[_?S//33;c[뻺fXx3z'i!!9__{B"&&f.zkʿ3's/c3;c k j.fHn +i) !Yy))7_{.B.&&F>&6&NJ Z:oSOoo{ 'kJvXpx0&ljYyG GC/n?^.GjF"hF;'3/_ +jsS#[ +*>F`+Wa ! G b/ꢇoJ^rrfhV^k__o;kz#;[SckkB.rZrpX(^yy9)y/ sNN>wƏ#.v.>r#3jnZ.rr+B&rx~S )I9 9iΛFOZW#C s>s&"憎 +B/* &B"sBzS{^(_F?zwGGGO?Og/'#o?ss#Bf~&f^Ύn~b./Z"S;3B:2#[K./"C2/?k3{z"‚bN*R~>r2.S3j+_j?;z{3b~O7br^sR;>>C#+{wz&f^ǶS'Fgr N2gJOB7^_ +RsJ_~jOgsZN';wCz+{_k>^#G +nKrC&n :[Nzr#>rJzK:2kckn Kzjۋ2ۋ +;Zc 닻*JjbJ [z J k::z{zJk {z{K+J *jK++kk +Kjk j*kk +k +*j+ kk* +*** +++++kkjk* +j *j +k **+*j**kj k*kk+kk* ++**+k+jkj+j**+*k++ kkjk*jk+*+*+ k+j+**k* +**j+jjk +*j*+*j+jk*+kj+kj*kjk*k++++**+j*****+*j+j***+Z33Szj[+Kzj: +*+Kk+*+*kk + +; + +Kkz jK + +jJ{**j {b"K{; jjjj K+ +kKJ{*KKZ +z{ +{{+˺;BK#;/2:kzKZ#Z3jrs2#zcCC:JocJ3:ZBo"J3[#rO"#c j>jn/b[gsn +~'ozV_Z_^wgn'^v6#z>_vdž.3vzj Fr~뺊c'.b/)..B/[*i7SnG7'rsgnoFv_;7;oxo)h^~./7FzG( Hgg&3IOi +i??[ n>xo8/W&gwsRWw& RJ(w._RrN.&j_?KwZH/nhK/fʲh)'9Fn'~o)bGs767xi♎*vC_Jb2irj7x(W>_:6#&~HCrS67V>vSRSgrSsz.&sk.f~/ +gۊ7_nrn6bnbR"j['2o.R"+~k&{b>f'C+NJ/b*fc^N_G&~J/..c'&O3b~ +G6SWGZv(?#hW˶& g &33 +ڃ*[#>JKK{kB;K+NJ:Ob"#~S'r~:.b3ZsCKS/s[JzJ;z~ 3#nbJz:* +R``xrk!AAa[(vVrc/''g*~>2‹*#_gp` WaA!I)w'C;>6(V6^ZSSOJ#Ks?σK'_''`p@`v&'陁AAAYI?2.hvRZ*{J"Z*C3Ggg''hXp ^gY9Ii^ֈV>^"[sO3/_LJggg'?3f8` 8V# !aaٹחg3cRfv6~^^#SS33S_g_''S`(f#Gaa9i)g:>6VvvF6ƆR[+cÏO__?gG_j@0`H6iaaa!9iG&&((V&Zr"3#c;Gg''O`@Xvi !a!9IwB>RffFVVv6&nNNj#3K3s_'o3BrB2xxȈNr7W 99 )/ +R&ƖVV(FF>.Ks/o_o_ocs3;[ +:"BNF((Vȸh6&'W I9IWW7'?kFF((^^>2 K껃so/O?Ss3"b2.&V8F^~Bo7)I9yyɉiWwg{F(ff^B.2j;#s3c3?3S?Ͽ/3j2">vVhFW ɹy9/ۋ:ΆFvf~nSosSS/#C/s#Cn?./ +Z~"fhh()y IiWON2R>nN2N"Z*+K3ۋs/C#s +Jc[Kc[#Csj2F827!aw~^^&FNocΖnVfz_77kN6vR/CzBrrnfV,H(G9qss:((#Oi'?`:g' CF^F~#'Ǐz* +BN»/oVPHHS!A91FHVX[9W Yc&H`h˳ a'/nvږ_'ƎJ>./ǿc')fv@8v~AIY;VFf׹ )x`(Hڃ'YIBF>&K?'JOs&grnffvHXx6fC !9k~J+)7&8v~ ʖ^&F~ZJ/ z^[OS ''[r+r&FV6&>2S'g~^+w_g2 *nC*kkzN>n&2K + +oSǷWFx06I9aAaIf(f^') G(x&~◷ _NJFOc[fR#{'oC/?F(8fZ_wi ;{Jr:_K*B~n2z+;ZBrr2b: +kKJbz +{;/O?SK +fv&b'___o:#o{;?.J:+k jK2RCjnnJ*Rz3ÎȘVv~SwgSw))7G3JCos +_C[[kJ>>f&*. + {ۂ/ +^c'/ςÂS^CK{o* +#k[3?.'ssg΃C#k"K^2"> +/F6R3ZRZjγ3j[r'B +ۏo'GNsno*{/oVRsvf*RRS'fsR_;kN;Z^*ʇo^oK:ˣSB^.o fGbc{r#*>^R^ۊr&'*zο_N.37.cc +^Og^'/Ss*?;+?2ϲ* +.vsBfzK~.n[;Jok+Sc:Ê ŽO"o/".¾{:[^f>##OZ+_C3ZO&[>sBsj#kCGCZnR)*?J*Z:2/>js#'[J.ۋsNJjv__ֆ6ώڋ{o^ +‚g{/'^;3_?n/s^'On.s{scs2NoNso.oK3?rO>':_NJ*~23 + K3oz "kʚ#+2ZckbOs#*.jb3*zKێrˊ{zcbJc Bk2;*S.s/{*;.۲Z/ +: s⾋JkzczC+r:K˛jj* JzJ:c:B[{BZ"k{22{:R:J +:z +[;c/S//CÃc:z#zN&F0VXV7'wai9Ww.kfF^kog ~JN^^&>cKo;:*z: + +ʋ"B.nRB:co/sSccs;++:J+zڊ +**[*;K+[/_8hh>* ) ǃnf‚gskR2&~~Z⛳_//b"j +Jj:rBr"2b".{[/?O/#;**j: J +Jjj +: +K[nΖhF)i Nf6^fNRZ*3:[&J?;KsS;Jzj"22"Zbzڢ:zK {ۛ3Cs[s{[KJ j+J*kk*;S3z3:.{NV62j gg'Wg'"rjJۃZcڢNbr:Zj+;/+ N~oc~{NZ3r{CO3{++Z +r?B>{rkRCR~*²B/B b +sns{~gR.g /./k.j/&oϻ/3gNc#2 + 3r'R"R>vj?>GR VGs &?r/#.s;J{O'/^G^S?^>#.OczJoofJgFgs"k&~>g3*NsBg2Z//_r?sBg&K*n?^BRj *;b'32g_"3j2+ n/Z>wc; 3j.7frz*k;^[w2wʷr'NrSnsS^'/js>_ZVo3*{_RC.wNZKSN3nRs+R'Zk{zFjSfG&B/sb+^Ozr {;KJZn"N/ÊCcRS:j/"jbZo.JZ&o~j'ڲN.NNk{'ʺkngffSO[[jfb:jong? r+BR.[rOn +2or?W3o_&_g nS^&;3J_[[sr:2*Zn.R?J/J?"^ꊛ;S#G+Snor'B2#B_K^_k>nSb2"3~ϳ?{+N#./ڃ>/3^o^33CCcS^nSjJj2c+[:;rO2j'~rORnJjb +k{or/*j*KC+::*{K+#KZk;3z ++{ ;* +ʊkj b#;*#;KZk*껻K:k:+ +;K*;KkjZj:kKz+ ;*J k +*j +K***j;{ :j{;*;kjjʺkJJk + + * +j**+*+KKj*k +z +:*J+*:J늊k+ +jk*kk **+ + + +K +Jʊ+; +**K*+ +jkj+ *j kk + ++jK+k +*** +k +j**+*J+**++j ++ + +k +*j kk***j*k*j+ + +k*+kkjjJk+j jjk;k+j +j+++jjk k+jk* + +************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_german/cause_1f_loop.isdn b/tones_german/cause_1f_loop.isdn new file mode 100644 index 0000000..c9e885c --- /dev/null +++ b/tones_german/cause_1f_loop.isdn @@ -0,0 +1,200 @@ +*d}EьDH$]aB{s bcoz.C# +ZjC3˲Z ZZ"+B^9_7Ǘc?O'H(6'_rsgW)b,@!>8hY1a~6(FYq 7ZhWXiY)!gVIigGTd^M =!v͹{" Zھ 0 /Y'XZyV_iW).O)>KǎS[IFD48mAlpiy(!Y:nX)aIpBir&W韣/o.ˏ>jVLI_3cVy)9GC'3Z2[OGO*_;oS_2.jsn96A('s2 A!9WwfB77h*)zO[o?SG3c'[c"z &܌HIoBjYWɗzN^O0K)Sw^wsO7g +k_GN^+&켈)W3)yI I9)OGgJ"&JHH.;^v'*^οkS +/(xi79Y I7G)..ƈ(sggO7g?g7WhFph`x3Sy'ٹ)yI W_3vHH(R{)WWW?@`*ZbI)'II9G7W_:Ǝ{.vh>22j>G_gWׇǷ7'hxxp@F(.7iljG77_o痺v6HhV{O7ggONr&8HV>wiח?R22(Vv+b*j_w''g?_Osj +^(H(Vfk/ÇW )7GW7*N(vƆ^FfkOʿ'g7_GGǟSSckrVHH(vv(&:So_GW7G_w)gc+SZ>.. +rR*W) ,XHhK_fFsSs+/)yaYI +rN~6(v^:Sκ㿣2־BjJ;_i/2j3ڊs/Scr>rr`z/*[Sw)ws7?_*^nc"B2K[o7Wc(lL ,Wi!AF)yij(h dzh(gs'7iiG'Ggھ:SS' +̌H^WWAaG OI!hhV"w7Gw緷W7iiܼ<@غx1_Sw"" Ya^z(80&og;gWIWg#W W |x*I1!9"J)!aIGhx(^BgIio'S77ix||0y7?ɉ aiNO'F8Ȟ(g'cg'CsGor8`F~)ٙ)i !Wz_&66^(F>B3'O_gO_'gg3HX@,x)J!9AAɁIף cn&fVF&⢂?3O_/OSO_H@XV8ky9I)__/Bs ^&f6Ffkbk;g?__'O3?X@, 82WˏY!iY)SJF&v&f枊Kr+Co?Ͽ{cx`X`6G+/!)1!iYiwBR斖&^..zjZg?//3Sx`XvV3yyi1YyY>NV6(Ff^22+{sO'c3cc/`X@H&_9aayYY>6hh(V^2/?_cs[#x8`H8> iaYaiW'kj~h(((Ɔ>:k3?Oo *hH hh².)WaYYy)iW((Fb?'?'_[c+bζhh8hh.r{)999)7_{R^hh(((6>۳_g_/#{{j"rnN6VV((FN IIɉW7'#J^FV(VvVWh9o)rCViɖ9~~2w爊(88XXXȖFNiy!!I_"nƞƶ(ssJGgGW)Ssg 찗@X~G1YсIYi^>&Nz2"kz_O_bggc'/<H@syyQGYyOSvv` ' 2.?+;/'gC:g'i |H&y179ׂ(fHb"?/ێC__szrOx,,hpVI )A_HF6k7 +*S?JK+3COj ZB.+:c>vx)!ןrN6B:/+&꿿 +RSsホB2RrBs+bjJNFjC_gWgrJzNknzRj/~r Rn^/{z S'Nf_&k?'6j_^SoO~2~N&; +㾾?kkGf2 Vn +rvbGSN[ 2b:3Oc{CzBC#:gJ~*Ú#JZBf6/_"j2osJ. "ncCO +kk[JZSrc^"/N{&?B:k:3zj +OϷ2wb>CRZC +.>**R /f.(cSC/^J3n/ZB'.2R +":> *o +*k^r~+'[R_>fgnKzo'c~#3B*>n'r?N:*;?;JbRsOCFN 鲲rSC_jcnJr.j;js_O2/S3.s/6&O'wFV'^/*23SOSrvf>voVgb>./oO;;2sbo6^rJ 3.rOb.&^?G'n3C&J'Z"o^#C[23r_rVg_bVƖfKK nRžWCC{g233ro&_O"KBo^Gr+Ξzr[o#gC.ˏnNn_zn/oN//kO˞o# +sknSkC +;j{"3+ +RR.j"bkSZ;/"ۻS*[oOS{‹nkz +.j3n K;KKJ Sj+V@z(FƸ{)giaIwWgׇ ?_NV^BRz/7 _^W_9iAǗ2/3nsSkHvV^B GWg;co'g`,V`CB IY _7K+FHFv(.k'gGwg''_O_ +@F8(.+ !yayiWWVhh^fS77w7G_x xX(rsyaYɗ))&NhVHh(&>Cow7Ww7? ؈;yYiw)k~&hh6.R/7i7׷''ϿO[8 Hb)Yaaɹy)W[^f&hh(v&Ow)w'?oC{X8`XH_yaa 9 77w66hh(^n_w))w?S;{ z(x `؀xhhf[SaY!I 3zzζ6hh(vnsGG7g_/;zBf8XxS9!!II׷^vVhh6fZ?SgGy W7'/b[vX0 XX&I!aaa)gskcKNF&(H&8(V#KGG_N/SS'o?/*Hx,pl/iaaaAa9!i[[2^N?{~(`fX[797)>"3K'7glFs 91AaW)7fF~ω72&FpxhȞ Iyi'/?o))__'Ll@_qQaaa!7Sh(g9I Whh@Hֺ?WWIiOf'go| gaI)oȈr6gɉw JVVX`6VB'9w7Ww3BZ3?Úk@@agAww9Ɇ&[&B);G'FFNnHHKz3_[sRnۊ2B#:BJ{#b[>&>2;#S'_''?s3ۛ{2.~BJ:+cS/S3;j2RRRR22" + +J*zJzzz +kۃCSoSS3c +*+""2:ښz +k+kۻ +j +jJk K;;;+ +kk*+kk;ۣK* +*JJKj{k:j:Z+jjʊ˻;k+jjJzJ kkKKKK* + +jJj+K **# ˋk*ʺ K* [JjJ:+j +ˊ+{ J:*j*j +*+JJJ* k*+닋; j: jK;;JJ**꺂k+K*k˻;* +* +:jjJjjK *k :HIw(/&: +.kR[S2^r ^ZF:f/~zNKoBsB{(&)rgw(RHgY6?cj>^fn:~ J"kjNoʃ; zCrSBsooúKzSSk2*RkjJbZ+c #:S{:/kJ{2[*ZrK"k:ڻ: +jrR"b[S??oOSc#; Cc{j +ck#)~㭽-A VZ&iyyIg[&6gWwBZs/Js*WwW!i<,hH-1wxH8*36Ys'rFHnkNj;R_O_ +zo#L$ &>! -_j!I6ȖH_G I9#rC:^hf6^#s7'[BrCggχKZ{+W9 l(hhAI~"뇳"i Zrfb>֘?'K^2g^#Glh֎Ii g*n ;kB;f&vi矟C˾bZskb>J.6&^~7w_S/CCrvv?[Bbz.K"BkNn^. +JC^ +2Oc?___SJc/*2{?o C+ +΋{#jrF"z +Kr +Z"2*"Ob[ #S/K/z{{£OoZ 3RC3o{j玞7 +>S6kƿ +?f*Z[R +sSFzSڋ{S?coR2.r'"NcC^oJ^#b2 +.^.k{c'znOzbk. +/ +rs&Cr rZ2^jSo/.of z{"CZo;~'**{zK3 zCnϚb+۲>:On:*zC>j{JK{b ;Js˚JKJ"ZkCBs +2~SJB/& +'N2?n ?:sBk #bzZo{ k[sC2ڊBr#Rj^2N"b"RZzrj/sÚ +{jk3N[/#j>ˎzˋ3*sc*+o2'ʳ/ꋺZj3#/JbB2*.#*[n;;BZrj/n"+.**/*2s2cb?..[*oo;#k[k[+k[J {/r.cB.ھ[kr _*r;S{2~rz; s>*s#>jO?zo:~C.F+ bz>SSRsK۞^{_^ﺞz??j32JSr.>Zs3>Sb'{/R'oƆOWKv62gVi +(FG'?I׳cWgS>^O~ oSB "s&R'{NO'SnòBbCj[㚲RgN*ڟ[rn+›/ +{ *Z2R{2{[?ꂺJ+j K*s/:#**sjN۳ +s3K&NR[^:#"& + +Z [bÏwG7׷LJGoSoK K;co/|01ܬ8сAy9 +~(hXxf>Go)'Wn..sϿ7iiP I̐)WA!9)*(8(r֏?)Wwy(_o^VOWo2ϗ)al֞׉ Ay1WVvZhh(ƛZGGsj3;#_'gWir I6L8H'9Wq')iFH(&fGɟ/RS33_#o/ǷX!@0H(//G)AqW۞hֈH#2sꗚgg2?{#K3/gg/'GwW7<``pV9OIAqI_^xxHbwOn"VZV??S)_G3sKk +#'_H|0Oىy1W*hV^6cg_7&fnjo'o'_OoS{K;J3zʲFxX8Hzo))9! 9iGJ>nffƖVN^fB+7GggS?3뛂KS[{fx`VG9!yyaIWǏF&F6Vor'oWSOSkB/;68`X^ )Ɂ!1!Ww.~nn^Z +f( +_#_)o'iwoR;S @`&9 Ɂ1)os622>&c+rfvnƊO{'sGi?G:s? +{s`@ xnϹ9a9SƆK~SoJ&vV(.볿GwW)7G#k;rSXp`~ra1Y!a!y /'kf?FV6/GiWG ۣg7sPl vaѱZ&HoG'遁Yx6F/y)G7Gv^2:7iiid@V8A !O!(i>v!-S7/0f>Y(r6GSsG_[32OwGW`$$va==aG8Wo"'a- x?37yW.K(HC?GiW/> 梟WOW) $6W-)7p3)q66@g)*FVV W7Kn:'))GWP<`hMM韀Ь('')-a>xZ_Ixh^FƇ _Wz"zn&>#g)7)W\ Y )OOgّ˚n2 F v6o sRjj3J#g<VXo-M I `.fqɏ8@rSyy^o7O' +^Ǝ*+BǷ)9˰|,(!m! @B&)A1Y'_Gi.X66fWIj^Wj^n#W_~^Wo2gC9n\ (x6-9y>`^A9_7 *H 6Vh6Oi7JN~gz_Ǐ:N;[ +jcO/h @v -W!IXJV~9!)SwGFHg')S Sn.?3sZB:&N&h6))ɉ.G:gc_:&.R^NZ{'?C/?k3Sc3s;zk^>~.؆n9ɇgWǏJ{S{>* .fNj;R»O[z?jC~N.r.k.&nKBSÛ/?3_'?zZ[s~~ 3~>+~ƛn놏jں^*~rZnb&.no7_"_{_OGnC[.{盏_cKNrN* +#۲#7FRcZ 'oR.+˛*~r^bJC":2kRF&ZBr*ksb22nsJ*r/?.fr^nJN&f.#f?>Ss2 +S[CZgC˳.";Rb΋oK6jkG/j3RB+KZJ."κ"# nBBc+rs2kS#"cKk +[ [k;:*R*úKkZz{K{j+k+kjJkczjk*+ + K +*+ +*j;*Kjk ++K*+; +j*{kKjj +zz *: + + +J뻛 Kˊkk*  +z j++ +j;jJ{ * +jjj*zJjk*kjj*kjj {*z +j+jkJk+jkkkꋚ*kj[;k+*K3kZ{O;Rck +k#;ڢʊbZ z˂z3r  +[HR~~#ˆ3 w*'67/{RnB:b"n^&n~ngCRΟ^R.obC.^ :/?{Zs/[.b.Ko*n:Rr^2Zۊo ;겢oG)g?O` P(NY1qI/8^ 'III&ff((fs_C?jvJ+/b:"R^SsCbnJ+z:z{nJ/SoskB2Rˣ CGc22ʂRNr.^Hx8Zkkʻ'9 o'g7O +f^.Rj)Wiysؤ`!maa1 lPG!Ai)iI2Wy oGz~8`h7?Kr&('I)3rf.FN'y/j{k? B.cۏOx,,F1A9VoyAaw(fR 7 IO8(K_s >og7orgã3'czz20 @s1-Y[6V&AO`xr_z8h^6~? AYv FI7[;ϟ?0LsWWS+*~rGw Y m NOvky{V6NǗOSOXy!f/oCsK+*o?gwG@ll|H ih3.3I!a9כ8Ȇ[;r/O^IOnʢR.:+;33'׶p l-7>6NiIIv~rV(rI )O>nj3#[? R.; Ssv0ƇI!a9IGGWg_rFr/gg2.^+os#/SS +r~+RrBNF6r# ''?*s3{s nZ +Jβn.rzˢ+2:k*22JR>NZZoJ[ ;r2r[+[Ž[Z# JNcJ_j* +ZJ/2" +zNj2#{#{:J:~bNNs3*/"{*S _k{+{/cRNZۿscJZ:[2zCrb"JjJrK.ûZ3ZbZk+{3Jnj[sC2ROo2**R3+CSZcor.*k.rkR**# zKKCK+bj?zS +C#*k*jk{[+JsrBb{K;.*2{3o*‚k:jڏ˛"˚jzj:b;JJ:Kzjʛj#*kZ{bk; +:c+ZCjbJ*kjK*k:bsj*jkK;jJ* *K;c"Jz*#;*jkʊ jJJ" ;K Kk:JJk{{jr˛:::; +z ;+;K+ jk*+j;j +{z +k#3c:o"CC~NkgOrnK?z/+r2[; /o;n* r +s;+ j/;B.Bnr/S3zSscz2jsb. /ξOBCj .KrRZ3R zJcr. oj;C*jkJb[r:sj +zSs ";j3j.kJrSN+/2 +cR._ +nj[R{jgO^;r/>#Nγ~*R[^fr*_S#3jˢ. +*[{3_Sósk+JJ2Rnn2Rrr2ں*jjj +zj+ cCS/oo/S#k+ ;*bB"²kB2B:"ZbJjj :kk**+jkkK+**k+ +j k+J; +; *;K; K+*+z:j*+ +ڊ+*+; +*[*J;ˋ+k kʋ*Jj +;k*k +*[cK*Z+ꊻ#o+R΂ cnnKj +ZKJ"ۻjj*ʊ ˊ*j+j:j+*j+k*+kk"kkJ+K z{Z +" zj + +*[+:*jzkk Kk;*j+z* ++ +* *k jJkkZj + +:* K*;{.K*.Z j.:zˋj: jj**:+* [ +j* +::*+J:jjk+*+++ + +*z +K*:kKkhxA 'f)>CS~NsnVyj?(sZ3ۆƷFo [c#YsVJ{iF7'_([#R׸ƛYS6kfWf^.?K +S/^og2ors:j^RGZ"3B&{?fj3B[#c{ZοB.2kSJfS*Rk#B^ +c[{Jn*.KOFJG 6fO.c;Sfz'^S#{ßC[#j:k3n +gb;j{32NZ+z +:s +";s[j2nc.{_b^g_^F.Vf'z+"K[jS^^z#rNKۋRRkkkJ3c.[Z/SBC/ +KksZB +"zj *ck+ +RrsB : +S{3"Z?{[ ;Zjj +*2k#ks ++kz2j? ?".o*r"/Z>s' +.r2.j+K +cJ*3>+JS[RkbBK>RO;N{ +#:zSCRZkrr3CNϻN&3/B~B?RB/r{Z?b.SO#rS'/"R3RN2 +'n>Z#2*So* 3c +B##"j +z+Jzjj nSbK#*+ڢZ{Z:J + 3jJ* # +K:N*oz[j K2/c +J*3*J{ZK: +zcj{ˊ*{"zJ#cKj";˺;;* +:"*{JKk +KkJz*+˻ *+zJ ۋJ*[:Jj+jKˋJۻʊ; ++jk"˛*K+kk*+*k:J +J* +*JkkkjkkK;kk;"˻K+JZ*:Z +kڊ Kˋ +k[k#;Kj*k +*; + +:* + +ʋ +j*+jJ +z* + + +:+ +kkj:J K;#˛#ˋ;KKkKkj *:+j +*J*j +:zj + *kZjjj ++"*+jj*j { û;c[K* [˻+kkJ* +z*+jz+ZZ"b"2jJk +k+ +;+kkã[S[Sss###[{jk**zJ:Z2rB2B.b2z +r2 +{##/?''_OOϳc ʊJbB22.n~R>.r~rNZb.2 CGLJg'?3O[+jR..NBJnγꂆ6 7z)9!YyBRsۣo/k">&fF~n2#scz/OOOC/3j b2 +rKKjZ{BXx8NgW 9 i+Zbj{ssCs^f>nR:S?/s{ :{# +:{+ +N(f8s'iwI7S++Bkc#{Zc{j.>^&R2b + k# [[;[K;+ *j +zzKC#KCs[##[{k+kںbbZZZzz +kk {[[ccc#[; k+*jzZJ +JJj*++*+*+j +***K* k* Kkj k k j*K{;ۛK+*k +jk:+JꊚJj **j**j* *K;JJ+ kkJj* + + +j*k^SC?#{ BK[*+Kz"rr"Z⢺kJ[{;{*# + jZZKJk{J kk K*Jz+*k+j+ʊ늊 +++j:kKKj+k*kj**J+ˋ++JjJJ+*jjk+ ;; +:kjj+k + +JZ*K+ +:jkj*k*;:J +K*++ʋ*++ +;; *jj*+k +* +*Kk*{j늋*jj+j+ + ++Kkj +j *j+jj+kj+*k+ +*k+jk++kk+* ;j*KK+** K +Jj*kkjJ+jj**j*k***jjj++k**kkk++jk+j++*jjk+j***+*************************************************************************************************************************************************************************************************************************************************************************************************************** +{Kk** : *jz*jJK"J*:z:* +j" +zz:*+ 3SoooooC{;+:jz22rr2Nf6vn'g7G?o[j>&ff&^R2B + CSoOsSo#[{*jZrn:Z*zʚkkc3cCkjzZBB.^&.2":[/o?_??OOcKjZrrrbBZzzjzzz:.&22NrB.B*CCϿOϟOϏ/û; JJb"²BB: + +; j +zjzBzJ+*kk ;JK*k; [[c;{Kj +z"‚"""Z:Zzjj* Kˋ{{ ;{K˛+KK; k K*k k* +j:z:z::zJ:J +: +kjjj K + {kk+kk*k K* k *j*j +J +z +*ʺJ:jjkk+kKKkK*++kk++*j++*k+ +* kk k**+j*++*+**jj*j**k**jk***j+j + *+*++j+*jkKk+kk +J+j************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************* \ No newline at end of file diff --git a/tones_german/cause_22_loop.isdn b/tones_german/cause_22_loop.isdn new file mode 100644 index 0000000..f269409 --- /dev/null +++ b/tones_german/cause_22_loop.isdn @@ -0,0 +1,193 @@ +*d}EьDH$]a/[2""z CkCsk">"32{[s~7H3G(72O*3J'{6ǢWhbgFVC) NSsw^y'H 7YGFyGH889(rWV vg97Ϲ?r'2BN'ozcr~燣66;3?Bsc[+~O׷.{3{>&&or./*:s3:*k[/oRnR;>fN;o{ _~&[G?'/.ƲgGo*&n;RrJr +B?GϞ& +oSR:+^rR'_+.^js_~h(I Ns;ocS#kNV' 7.F7R ONNgb2?#"+rr?w/'!sy2=AOƹiZIVV .RW{?)'3-qqRǙ@Y zGw.:h22:z_/sksg3*'ϣ#Sg)dm!I 6y9iG'*f88YfhC#J>'r'zsWI^ a'hl@Ib!H.r_is6F(!o27rG3 4mf! aHHA92khyrO(&WyKC2B'ミ[[7D#Q_@PvȑmIRfi`/9Fc(W fRKnG7:fKwW +_\$V_G`yhl1-2 1f(gHHGv6;xhg)FfrO_skWWꤤX-;9'p,iq1GGxX9FɶhG(7ϛ_ok|qyyW[^)G)(g`G~Kgg3~ r'' *_{'K?GG8@WhYicya~ Og_IFf~+2nr +.>[Z/ j'o /'3#CxF?rg)G)?ח7w73s#jΞ>6& +&. Sko'n8&(gj)W)_o'o[O +bn&RZ:#cKKC_?.8膈V8؆&G;s)yG)7j*[z>RrF&rRzjoOSC_?燿&(xhXVHZsYiigǗw_"Cf&~.~zg_'g??2x8Vr yy7gi7?[sn>&ΞfB_'gWw_WG?@ h0h(39'y* WrR/i_K.c&((Cg?OO?wG`̀x6WQپ!ai6Y!Y  O(f) g鷢_WKH< xi!Fvqmq3!i^H&yǞ>h&_Fh^kg WK7_gGsGVZmq[a1)a3wn& 'n)I~rWs_i +,|H@0+V)1A^hc a7a28&vGC )NzGڌ<`@I>aFk7xY'g ^(vζVS))?g/22_7/ HL, iaSvV&VIg~&&GZ2W)zGnRgO./iw?>0@`0 1y!+f^NZ#^V^^k/ *oKj_S[S'#3{@X@FYa၁i/J .6f&>NjRb3 BK[kgϿgGs_[jf`x0 (~!aaNF~Jfƶnf"ZKzcj{/ OooS/SS;"x@``p`'IA၁9GoJ22((Fn&c;*N2z2c3KoËk;JSS +~0x` qa!ىFF(Ǝ{"sbNrRf^z/__g_SK**뛻kCSck6@@@H`H2W 1A9iG^FoSϏ3J^&&&>rzc___?cn.rBf/?__?? +H|pVQA99!I(BIYw[2xxFú{'Ǘc.ۊ/s_gg?oS_g'p4|^ayǁW>r !Iɷ`χ I^`6::WW^On/Zjw?:g\KAQm7hS&)љH6HiYSXN))">jk_S{'OJRzw (aWyvP`iYa؈h{R7y vxhV#wg/oB + k3o?'_/S +jSVPd!-A֘v9a9H`H菗 7xvs3 +.KK*sZ#cOo?Ks'P-99 09!9i8h&Wi8_sNr3 +*ۻ;{3s+// +Vw?aIa?h +77WHȸ7/ZzJ o/K:'W?O/_h 1I `00g籱!_ xfF2vhΖFi)bz.b33KzSc?r:| k9908ʇaQa6h8 +2HSLJR; +G'_o.j6XlW)QhH9-+WG+G9r33?Z>R_g)jB" +^X0CWAQBp8Wh(x6yy'BG33&Nj_7GLJslƊ2mツ>)iA1A2(3)9[~.63jS{;'*86HV1-ə9(2^ˁ1iI7 `hhF_iׇ3b3#Cw7G_?sk*|ж1yAn2` Io(HS)?/r.rGW)w/?'줐@hqFGO8i!IgS)oVJ(/ +w_;j~bo;+(lh,g.1)K9HN +V/_ >Wi3''o.f>R*sJjڲ~+KkZjR>.Rnb{Sc/O?_o/#{kJ2""JzrZ"JJJ+*::{*:Z+;Jr2zJc*C33SC[ã +ڢZ"BRzj +:jk+k k++;;;##Kjk{Kz[kKzʋۣK JJ +;Kz:j++ꊋ{j + +j k*ˋjj; k+*:Zjڊ;#j;Kz J +*K +jZ +C;[K"ʻR;JrKbcj{+Z**{*2;2 + K +{./RN~ . 3b2#Js?kR +.~gr{K&yO2r/F{b^"3?#蟺2fr:o>^V_kVHJoJ/r'VG^[sf?jJ+.z[(FOz3_c^_2dž))~+sVif:fhfhS2n&3(?#66_ς[G'(˻n:r:2or^"_Ϟ{2Z{c?N.{Cڞ#[ +>O2_[ʋoj.rO.~o"k + zS+#SoZ>2;3CC/"Bj*3S/2J>s'3#s?;fr+jzO{BfC'j+ʂ'b~{rrS;s_zj#/s2[Kr"SK;*[:zNoJ*:r ۏ:&3B ++Js#*/szn*K2ZSc+sok£Ϗ+&_^fcZ;jjj:rZ;nj[ +*oOo/Ss+c[S^.[?j0Y Ya^cK{'wii*j^rsS:r>r 7 ,Xy!WW9Yö(&rח_/SgsN(fCk C'C[3s[sGLl6IaI_lj vSwfKVk'ښ__ogW)Hp쌌P({W1yiiNIna!bv.nn&FJ/)糂.:CgWi)f,X(aYIIr+'ÿ){SG'fHR"/s[/_o{*kC?`08nYˇ>3g_W?wg?_/FhHh(f?_G7?oۺZ*'go/oo8x &/w gg3wWGgOÛ"F֖v:?Oo;o_'S&hX8hN3__/_/_gGGJ&fFFf2 o_?oss3s+zFvhh((NB_'__ggg'C z"R"k[s_` 6gyiI3s_iG F6FFfB +soO/+"ZjsorΎBz[c۳#c3cK"z2..r.N.b*S?os#[3sSSC#;k*J*{sS& x8^ ٹi'K2~&"3חwGg+b.^f^>S's;:RZ Oos.ξr;[oOoo/Kkz"ZZBb2n6vR{?7w7Gg#K *:ʊ có[{ :3wvp8ۉ!qWzfv(f:/WG'OO3{ .hH8HSG) )~FR" 3'''g_#2n>N; *:n^^&^>nro'燇g'_OOoc +z"2rb[oG,,0`fiaAQ1ɗ22Rj&FgW2 `VBw) i7_N~J_?s&`0x&WAAW/ZN6&7iɉgJ&ָ8k9iwGK+ +;**cg7ww)V0LCAY9xXfG79 /;8` 7y!9׏SgG^n#Ƿwo#hL yYaaOX`F/W'{_w (r i7/2‚{77GЌsAhVFzgi!YRfXx.ǹwWw(2:JOi o֬ .3z'9m1I[&(Gw_g7;8h&Zˋ*')7BjNFZoSCS(x^{~kIiI9I"f>S~>3>66[fJ3[z[S/BR##:BZ;s*.ָ8r)9g_IIO:o)G+&^?2FjV.Br;O'O3::C#kZr^8(h.Ya'ROvF^ o3OO+.G'bBr2c6 +sC)7gJܬg1Ay!v`f3ifg x&o_OiR&z^w))'o/Hl?oM qni+ /Giǹ!H`xHi igf(VVWIwZ +0(!=M8pa1W !!00ֶ!AW"6osCng7/L )= 16XaQ!Ȱ9ZWָfS'z"*G32Sy|!9Ǿm A `@Q!wI. 0xn~!y[rFgojSOۊn"7g{7ɹNaw +>YM=-0HQLJ)@`>7!v(g: '_SR_gO:_)9i0ܐN&ͱf۲@(A'9Y30o&hIWRWJV(32Ç +_sR*?W L8HIɎ`f97fa_Fv +&8f J/ifrO.V6rgoKϟfƞ.Z2f8I/Vaa~S^_67'"n/svo.^.㟿B;ž{S2 k*J +jzc;Z +cj:  +CsSsC㛛*.nB:* jz2bbJ+ k*j*˛**ZjZ:;{ +jKkk**+jkz:KK{JKˊkzk˃*2b: k;K*bzKJ"33jzڊ{ +Jkk*K#Kz*{+ :J* +kKKkj"z{Kj {ۻj +jjK* #3 +z+bK+J+ +J kk* ++jꋋ+j kjz;j[J ++K늺ʊjJ* **k;:;+::닊jKˋ ;k k{;++kj ; ++k +ʊ+ k** *k*k k + + *jˋ +J +jˋJJ* +z Z+kKkJ*j* +&8W8.WH9VXgƈ_.Ɗ'J~{"2[3zZ#zcڢ[Cʂc"c[ +b +ۊʋsRb ښ3S: +/gn2Bbw'F~swGVk_^F.Z÷NWVW3fV~G~2'R2k /;n_&K' .'+{So>"ksK2J?orjg/r>ZnFw>hv~*f B.nR /RZOb› 2[N?zB#?*bK+ +CK[N+or.;O;2:/ *2s n.:kJj;3"n/bʏ?k^b#gSKΎ:oOb*3s +b#3&2sg_zr;{kb+:n{c."^r/.'.N/2b/'"/r[N*>r[[f&K*'*f3o#kkZ+:BJk"z{;{K3ڂb:/zrRc +ZÿwGC\$)A&S'`cAvXG_>oNWZKR8)i6.F/&Qa aGGaSb6h3o>N~.?O3[㣿gr2n[?O X~raWpw9) fS66:(BN&.NOiC'cOJo{'׋drh-xy[rw#"Nk8{F8获Gng+;Ϸo;/_3*BkkZ LLR.WrOן wwI_>fƶFV^+[S3S/sooc{"Ȁ88xB iW)))g/s^V&>2#Os?/{?Sc㟇?{/# +~8`8X* .Oǟ i)WW)G_+F&f&zjSoOßsS3scrh`8h8n/jG7 ) i)w)׷G?s^f6v(Ffn[skoC?C/O3C3 Hhhx2w)i )WW))w7_.~fVVvvR*S/s//O3/3{&xhro) iiiW)?>^vFRjKCooSOo/3CfXhH8hx2:? iW)))w' .FVV(fBr#oSϏ//oOo#s##pf8/KWW)ɹi~v6BG +G&Z'OkgG's_p$$/ѱy?!oH(Yiw?&F/o6V(FnWg{//oo{oN^WoX<VmsxV;3>frw*vv#_R_s+#+[+{*"'s..^`\sm^RH(B +zʇw?Vh(ƞRScJ#'skoo#/+ßj +z&)mqhcr&VKjzWr(h>b_fsGǟjjc/C#"k?KH$-h/;xCQihV2c^NIw +VB:.Ss:JJcSC3Kr3O#Kh $Fэ-VC2Xֶ*f 9)*(V&>:[? +bSOoRB? j⚿'nܜm肇3(o&RZəy^Ffoo2rS_S/Zk_*ZZ$l1J g6x#A' 8wO_//o"/{JCo?3k*+SwvP\XYi!(8a!I9)x?__?H(^7 +JKr+Sc/gRk3 ld;{n;;"3cn +OkS +;.* C;Rb#c#"#+ÂRJJ 3/Sn[~r*³GۏBJ"C&sNۺKnz*cj'+sj +//.ƒ;ˏbS Jo3K#2Z*ÆR#bSR{ bz:?Jj˺nBoj;" +ϚrC?[K +3z[~j.sj'zc{K/Nb# >j.2zZs;R;+RR Bb{Oo3*ʞJ;3"[+ʳO"+KcojS"nk +JC[O˲z +?BKok[ zBJk/3BJZ 2cKnszKZj +j[: JK##k"3;ꛛ.2/2JbC3ZcRoK[s2{r*+sO *Z{["2Jkƒ :Bz*z: +[:j:2s?O3kco3O2/' j/S`<3'! :gBf^OGʂ2/#g? +o3kO;__')9h$cYmYg)*iGcG)ɏNV6^6(J_gO:N/'ScO/OI|0V&H91-qɆW fvg7/Vf6BFV_>&'sۃ?CSﳃ @|L6H(~AgWɉjzN3_C+G~&f&Hiio/3>sbbR3 3 zs0.3gIi?WC'S# >nR"oK2*Z +˺+B:sân3.r.zR2"Z;k&" ãs#'O__3 +*3OSrjSºj:*Bk+Z* " rZ +rr*/2:' *bJ&+j +?{ڛ3 +oKڃ;ûj*Nk r +"{zjK +"j>;;s+s *{ۣ2J2O KCbSRNG: +[~."J r*㊎>nJj +*;;/kZC3+nRcJR/ۋK3+K:;"S*/jZb. GN{.;fogK+:"s#o[k +ڛێc +;Nbro3bSR2OsF&:JzOcC/s{+b +Jzjj3S? Jb{ZSr{O/2"[B +>ss_nRjZj&r~*"2[*#n&sNB+SJz*/ C3JjJ?R +{Ss۲.3϶Gv7"'rŸbgn O+O?zrK3 C"k/_2"Z_J &Z*~#ʢ:*:srN?Kk*{Oj"J2kO˂s>cZ2#ۻj{;3n +C +^?;. K+ + .b{B +r[ +{SszbR +2Z#k{J*;::+SJ/j:2K+?3z[.sc j*{#zs#~;.>R*oCj+/S +*{{s+s[3{S;2oK+ +[bCkj#/&0X`ˉiAaYII[V{ǗIi7_?Sk^fΛ<6P`is!qqKHXX6'g7WiWZ>~b +G7) H`02&;AAqA){þ6؈(V gw_'>k/_iIV8 0+Fh:aAAaAA'_(Hxh((fRcO)Wǟʊ.c78ุ@@y!a!wΎVVVF& +{Oww77gO.BRξr[cVh(hȸX(&&~əٹɉ_sCB:C?/oC˛bRB*++ s[[#k.F6bcwWWחg_?oS[{ rRnn>2BZk+K#CCKjj:bbb⢢ZzZJ*j;CSSoO/ssK+JzZZZ"Z:bZZzzz +j ++k K +j+*J*jJʊkK {{[J+ʺj +;k# J +⢢Zz ++ꋛj・{#{Kk+::j +j닋 +j+jj +j ***˻K +*Kj +J+Jjjjkj jj;k+*++jj +j +:*+*k**Jkkj K+j***k*Z+* j+k* ʊ **j*K*+*j* +**+ +*j +k +j+*kkk* +*:* +*jK j++ ++ +jJj+JJ j++j+ + +껋k*k+ +: +kkjjj * +*;j+ k+j j*j+*j +k+** +* Kj*kj**++z +**k +KK:ʊ{jjk*;ʊ* + + ;jj; +*;{j+j+ +:j*;*:J**J +kjK +닋+j++닛: +:Kj+ J+ +K Jjk+ +K +J;{;k{+J+k + +k;; z" +{:; + kjK;::+;+z+k#*ڊKjz;*jjK**k;ˊ*K*++ꋋ ++k Jk j *+*; +Kk;:J :*Kj +j + +K*;*+[*#ۂJ+*k*j+{kj +Kj{+k*Z{*+{j*{+**Ꚋ + Kj+*j k: +k;k:+k +  :*k{K+*z +{ *j;k J+k*Jkk+ꊊzk *k +*k*zK++ jj+j ; + +*K+ ;**: fh9bOV>:Zg'†nz* .ۏs:jc Kj{;++ {[*Jj:crss#JrZJ*B;*z" +j#3s3oσkj{ʋ{;Jˋk bV0l,yWAA舖㎆gIW +F^&ƈ_W_˾r?GGW ) lAa9a1!F`XN7{aAAyC6(VvHHVblj炆>R(FjGSǷ?>[sJ7gs/on.z'_ss#ϻ:BR.n>rZJJj +r&si7^O?;co/#ھ>kórVX@xvi{kFBZ'/OW)W3?Ïz;&n +z>Ύk:KSsb^.{'wc +~b+;'SO ˺Jz [[ۚ8`^o7^zg'''g3j S'Sj +ںr.~nb+ Z.2*JRr +//ˊ*K{ * {JZ*K +J +Zbr^sJ"zKSS/s//Cck*jjʢ"bb"z:Kۊ"ZʋZ"Zrb:2B*[c#*N>B3[C{ s/S ; k*ʊ; + +J +z:r2.z: { {{;; k Kj+[kJ+Co3ۋK{#;K+ +:Z:zrrrB""J*+*{JJkj kkj+J++;cKk **;:: +*:ZBRZ +"ZJz:K kK#CK j˻+*Zz+ *zJk#;j ++ KK +*kk* +zJj+KjJ뻋+jjkj*+jʊ jJz +***+k****; k닋k+* +J*kkz +*+j+ ;;*+jj*+kk++kjzJ+kk++k+ +j**+ +k +jJj +kk++k* +k *Jjk+*jj*+k*k* +++**j*Jjk+j + +jkk+jj*k K* +k +ꊊjj+*+*k++*+k*++k++*j*k+++******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_german/cause_26_loop.isdn b/tones_german/cause_26_loop.isdn new file mode 100644 index 0000000..90572b2 --- /dev/null +++ b/tones_german/cause_26_loop.isdn @@ -0,0 +1,228 @@ +*d}EьDH$]aN6.7;cj"{C[o*"2R2rF8x#3_W9W_?3z2n'?SsjC/O/gw')i$H7Xƍ!'8yx`)ǹf2h+'wg;(r>'#'[+j{ + + + +2sC:rr."*jbzkC*J{coS/Sã[jkg3SiR$< X X6?Hi'o#6&N +bz:Fcr^''O#'/scsO3'Wod$>!f myVriag¸Ir.)^Ί۳Rs_y'z(F;OJS+7ǗJ L<RfWayH.Gϲk))G/OsZ{RbzΈhxIWO{o&[7Or+zoCo b(Vig_[gWwO;#rۺ:6.o?;S ONj^;^R^2 ؘH^F_/g//Oc +jrr +z*>/j&r3rGsRSCz +BgjF^;{ƻns_~B?_Ks;O"s';Gr#^:{sJfhn~3BSJ +7nB[o3fOB??:Gbs3S[o>[ofR3O>jgcJ^rb.>Z÷?_w^;2'S>z7{~2R's /Crrn[ʋKR{g*Fk* FC2^&#?R?sZ/j.K&_s~ˎ_3ZJZ*Ccb[{;3*bb#_g.S^rrR_N;fs.&/>fOS_6gR^_F?#~fj"C2R2'ZJ~N+_KC+Ǐ6r/wSw^67~OS3c;sOj2(WFG^.S>_k +j*kBR + Cr.[K+3kjk;z+ꊚ{Z* j{[**** * +++ + +j k++kjJ +k*j +j * ;+**:ʋ +j+jkk*Jjˋ k+kjkj ++˺j* +: +ˋk*ʊ *+kk +k ʊkj+ * +ʊj*J ++ kjj k+jk** +J+++kk*+***j+**k+*j+*++k++ *K*j +k;jJ**j +j+ +K+**˛ k+*+++ +k +kˋ+*K* +*jjJ Jc;+{z{:JK2[; /K[cz7 s8^(_F>g;^N.;Zf'^>b^Fsr&r3ofhs)YICh v6ZZ{ +f2#n(VgBSofI66f6k)3ș&ڹ V'F [xFnȚ/j2~V 3n/sN?'kixF""g +'~FGKVS^bV'/sfO^v?FOz"_J^/[s^S/.> [+b+nZrۛR&bNRN^&VhhVSgw9y7#/zcj;j#+, i'!aYw BVhv"Wk^R.r_/{jcOL< 8a j!!1!ZV(R*7Z7׷o>>sOú+#3LllXHٗaa!Ώ8Ȉ'g7W?_{~&bNʟ#oGܣ0`0_a!1y7h_.f8HN{HGGW!7koFv&.nr>'j_6fxFb~/W)!I)wW +FFbJ;_s;ZzrRb. +C'&XVH`Ȇ6R.iYyi"rR>hVFZ2?GWog2n&+3*/XF@ZaAY w>86vv*sgGGWS~ +›#3'__?xضhp V86BٷI99?&{x(FFSZG'G)'oJkNrJ:b/'?_xxhx~>Y9Wa /{fV(Vvv+r?WW_wg?#.ZjkC/H8(@ ΢ yaay)I_N>Jhh(f + + c))r../iii"p@Ь3i{AQYA(xryG"vf'gC3sKb+SFL,`X`Y1iq [(^wWWB~j#oss?c+ڂ2.ʃ, ZyiIa)g?~&^*N2'ǿoZ.kBrZ{c;rZrRJbN"j `xȆ6^?׉)I'/S 3ʾN3K/#22.j;{r.Kzrb*zC B"zj*R>bb* #o_Oo?'//KK*j r";2*[?k:nnz: +."B~{*[ z3:skzszkCkʏb +; Zscon 23N*s3S+2"~Z{:{R;sKzSz+k;"K2#;j;j +++zCR[{{3.JsB#:+kn3 +SSjb.s'{.{z²K + K+..z[K3sO꛿3+oBJScKRo* {J +z +>Jr RZrJ/jKj;Rr"[/+.jK+ +S*Úʏz.: ڂCk+z..KJkS:;{r*:*C+;˲{?O.o"z+ +nZ+:^ 2.ZZ{2Bcoʳ /{/r[j;*n?*kJZ_J +ŸCCʻ2.+Rs{J2+?۾o;nRCbJ'b/K[{ZJ2#".?zj2/3rC{j#bR3jjRnb~3*Jn*cʢR+/+Cʺb +;{bok2k3"*r:ORn:jrR /N/o;Js/cjk*2+'jK+Bj+Ë*ڢ~.k +N;SzRjR*/kʢC*r:3/bojR2z;*::r +#:JR33"j:[⎋+3Rz +3O~*C3cR[ +:B3rJ:ʊ {f2g_O2zR:#ˊ ʋ +""J* +zJ::jz+srrK3*";+*#;s3srj +{.s[ۺ"rRRX `hIa!I'Sb&&^'Gi)7/b.>2z"k/'O Ќ|<oi119I nV ysz:Zƶ>Ws~c/_G6,,IA!9i'&8 8&))"nRN&&&_w2bO) 61qɉwgWi'˶XXhy!.Bk7Wr +GW)`,?a11)i7粖 `!i/*rrK +r(ֆγGW)7Obbʣs_2,,pN9AA)9I IgFhX@`h^_Y9 ׳Bc +[kf(h>/ )gۣoO'{బ lAi9yi_ f')YgSOShfSIWz#sOOB@ LGq9 W! g  )RWw_)OgR&_7)  0VaGaa11Ɇ8g)wG I X 2sSw))~.2kG)9#l I;Y?aсaW(rioRw9y_H866^r w;_ +G76o! g);V^F.Z +J3K#S_Co_gcoR`h NƛO i9II)wii3CN6Vff/sS?O_??^Xȸ  &&f'g ɉ9Iiw)Wǟ/ ƶfF((6&f‹?__'Ϗ?'g/` riyiYI)wW )[7?V~H(vk[g_S_'H` G'97g{! 6CNJkS37_jZ_?_wi3)P$8gqY&XX'Wi &ȸh[^bC'Z/_Jsןg $L88(-a'0g9aqYO{&ظ(j?g+{+['oO'3j3Gg7gg'7 8(I ?9!!ّn( H".wC6fOR_)_/'b{GG)w֌d Mqb;ɟx,ہaGqr +`ȋ/fK/WS_rBLJ'GWWWd< F^F9 1;xa 1H[v`@)kgixOR&3)~zcRj gw )؜d (yٖ9I,yOm* ^‰IH.n#g/Cgc_WwH<\,8xQay @Ii/BW?gؘ(b"R_*[Co:*o/Ê*Ϸc'/0 Vֈ?A)Cy׆F 7#WI#_dz&vR&Zn뿿;[?3:zs#":vv&&fb.3g_gOO3{;Zn~&&&nn>/os*Zb^nZK b 냛 +"C[so/3ZRrZB":JJ.rZBzZ{ z //[J"BK3ZB;+;j{;:"kBB +ں;*KC+ꋊBJ{;;zZ +:*[ ":jzjKj ˋ + +"zJ +;;+JKkjJ +j +J{Kz*JʛJ: B;ZcËJ*{˺J* +z +{*J*KK +Jj +z:j*ˋ+ +*+ +jk+K;k: ++{:j ++ kkK* +:j + ;; *j*j* +JJ +* Kk+KJJk * +k*j*k*k*jkkk NwCsR:2b +3?·7Grz[ºΊRn["z˻#+ kz*#Zۇ۟/b#{f>R +r;;_3>Ï+&ƺ^C;RZ +˲&7k_bSfW.Z+Y/b:;On&ro_N'Cf;w)zkFRg/b3bΣ.~JNJ&+^C()b"~C?z7 +(iCs^ ɾR^^F2:fjv;YR;^ink?(n+G62brc~vk"{JB+)"N2' f^g2nf ?sH^ W.rƛF&c~F :/2sc"?sOR?g ^g^.+S.Rbr^Rorfrz&+gz:?SjB2[Oss?R^n2 &rZ3 o;SO; + s_SoK.j/~:ΆzkFvnn7//{r2RZ3?'cc`hH菊i!)Rf_#bOk>^n + +/ csjkK +R*n^_OGS#kB2bzJ ȸVF8__w99I7^rnfrs3 +#r NV~O#J7)G'go7w؀HsC G!y)gIþ(FH6VG."R6f>"#'nN ___So.^ +#(xxky!yIw_r&.fr/#6F.;SsggCJBJB;(88HvH9y i'"r [~¾rR2R;: +[/J2C'3cJBof*v^ڃCW W)i'o +2+ +B.n. +kr/kn OOnSOObo6_n&'o^V6~ +{Z[s3_G?_R~&/cBC7z +67OsRRSfH(^^:;?)O.o?bSsǢ77w/B? O>'SfV{SG[SkBSgFVW*ɶi'Z˶.7Ov*ڷI?(g9O6&2_cȶ)bv+kW֖ۇC:jG_Rdžg7;rJۈHvG2`N_W7'>~C6&?"ǿ?zi{z.*>6_.jsC& (sHᶈi VO(x?_ +)KFs^BK/Z'sW(h.>JJ*VkN[rBW.&?v6>Zn*R/.:OY9K3+v/_v.~/_n'_.&^ +'FNs('o(?Ns_f ;s{ۇ>RjRRjJ7Bj^oO~o:2R *;Rw/B/~w?o[FZ>>.^oϿ_g_' +zJ +k;; +zZ*;kJ+2"+ +kk˚{*r"#ʂk3*Z* Z +K{COsC+ +bJ;K:hvBh6(ɟ_#7wN"oO2K +O>vOi)g_CB/wwLַg8)h('x1!)Fo/v(oWB_("#B_BK.:/+:b +ok* *2;Έ&27gs+[##s`0 ʹY8fg'G(;s +2Gn(&Zf7[gGgwYdA'*Hl0 awnX2nN^(&!RFn6~Iib:k_2F/*+cXO>VVzgsW ^(@1i昸 2 2H_)[N)>H 8v*Nn_IV 9IW_)aĄ ]s`H~`0i 0O?oYI`!if*IY9CWW{KRSC+og.lg-Mm1 ^; a!+ @X Y2{*&x YNV'G#N::/'WOL<  A3f0HywS +f^H`ف9F8bggSz*['gG l6WG_zʣs#CKۺ /'P lHa-Q)'s'2f3YbvV6óNfvn3'c{2S+ +boSSۣo?ppl >'N(9Z^S({'/;2. #3ۛ3+{:z:SXPP9i&Wi;sj[/Rf{+nN{[S+ Rn~//.Z2z JRZRz;?o@HGgG{_#>3?^{7s^/nj"NK.z2R ;(ZS +377?r3/{;+?b{zr^N.rzs.2R":{S"/Z2/3#3rz[3J; +2R K?*2CJo{Z c2^: .o32jzRN +>s{;#K +kjSz;?S[NCS2/;^/cr +ORk"fs:2.r[bN{gn'/2j+ +cJR~jZ*n'2Fc;*_^Gjv2>"/~k^3GJ.'OcʂK;2z2ckϢzRKo#[r+:JCBR33 K:O.o3Sk*J[뿂'2oBn>zJk[2S;rk[>Jb[jzRO3JzKn³j"b?2/2gO. +kN3ZOs2sNS^{s#rjzC>;ck{;? +s&J{/3c&sCZk{b*rSBJ:2oKKKZ.J +k.ccK[#b 3b#O2 ++b{[ +; +[G6 ,'>Yy9GiRRZ׿ɗ_OfjR;cc?+Kʣ3""oI9Ps[8aQ_)J "G?_W^ X3 w/OK2'sO"Ͽ)\,̖'(1٭k[ OWW/ 9i:F^XxfWY7O?SΞROKws̌ڟIa!WsrJ 8X(Si )9ىξv(6JǷi)חR*+joǿ/_l,lHvv!qa9wjo?hX(g  ɗ_Bv(Hh(W)w?/N. //OOJJxp@^2Fٹ׷w[¶(VFK?Gg'^fFFFo_3Sc[;jJZKsã[/+8H^fc)9IiW)>bBB KKBNnR2"2r[##C#K{ckj;*ۣKbh((F:WWw_o:*[*bRR2Rrr~.zzr:Cs3#{ *;; JV(6&2Wi)wwwwG+ Zrr>N.2bz:kKcCsc[ +K{{;*j6h(Ff) i׷g{z+ZBBRnB+zڋK+#Û+ +B"jj++co3Ks#cKk.x xx֖6[ Y99iןrf&fΞRzjj;㢊c +K/KjB*[3C?086!AaI'hhhjgǗiǏ*kf6v~'_/ʢ2;SCSSfLp H`(_AqAAG{VHh fgwY7{v>k77׉3rG__)OМPV0OA!qٱ'`sO)ɉg?r؀V8f(Gi_I7R~Rֆ곷'Cn`@ )!)!QJkȈ&Rw''g?jR&N&;z +sSJ3#JzZjz +Jj+kkzN^&^nCg''_OSs/oSKΎ~~>ΎR*33S/so/3KkjJڲZZڊ:JJZڂbZʚ;{{[sS3#{c[{ K{ +J +:z:ZJjʊJ:z"ʺ +j**K;*jj* +J:j*;{{+++kk* +j*KKkKK k +j*k*J닻K K*J +b:k*k* +J +j ;{; +ʊ*: + *{K*++k +J +kkk*J:ښj+ { jz* +*+j+ ;*+ + +jJ + kk*++jjj +j++* ++j + + +** ++k*j*j*+**+ +j*+ +J+ +* +ꋋj +*kk +j+* +J:OW +&F[ Nj{.CBZ[C3*c.{;3c[+N/zjBc:z[sjV'OvI6O +s#hh FgxWbx NzfC[i{9b:'jOV +C:fVWJHW8GXy& ^ɸ!xN~nwW&cS.bS/'/rFr{.b: ?o3 +{bN>ZC'SR2sF.sk*Fr:^G+Ks>/2zjoZco3nbn*Z:ʺ2rsn:rOZ^Z뷛SofN_?_~k#{.O{2K.S>[Z>**#sKZKrz +s2//c"jzûzJ/.s3;Kk+;+K + {z#*b# s +2{:. ++"j{r +3Cj[*K +ڃKJkzJJN+ϳzr#Zj.s +[zj3K"ƒ/Z. n"o[RSZrz2B*+jzko;2ko#JnڣK[{jj;#B#;CkjjzK +/z2J[[BCڂSCro/{cJ3" *+ +b;kKCBc[z*ۂ;cʋBjs j3+;. +.Zn*2+3CJr3z + r#ZBkJj: + jJj*+jkKK:z[K[K+k˛{j +z+ +*jjbzkZʻʚJ"z{kCCssSSs[CÛ룊k Z ++J +Kâ^(:{G) !#jSvh +h[n/_gOo{ rZR~:K?sC/ooI`^WwY!IIi&J&(&^r#gb#[sK;*K[j#:s[[:v0x .o)!YWiS2^^Ff&^cvƏsV'R_?k :{K[ *c6hh X8ֲ3'7iyyYYw'澢zb*jsosC'OoS##[k +J+JJb^VV֘VHHhv'iy9i)G*.&fFf&(+^'rK['3o3c*k* ++zk~Fx(HH(r_ y WW +~&F^>3v K +>_Oo_S_3 K* +Kʋ&X^'əYI)W'32涶ֶF^.J'?OsS3C; z+#*:S&nV x؈8fo9Yadz +NVVvF&r sO{*: K{3//S/S{k:zkJnhhHF'I)ׇOnNnRRr2bb"" ;cCS//o/s#k +2rrr2B:jJ:ZB‚⢚ +* 㳳SϿOϏ;k:B22bJ:J:++*jj +j +j*** kkK;ˋK++* +JJ + +j+˻;;{{{K; k**j*J +Jz:JJ +Jjj*j*****k kKKK**k*+j++++k+++*kk+**j**++*+**jj*+*k+k*j*+j***j**+*++*+*+******k***kk+k**++**jjj*j+++kkkk*jj+j**++*+kk+++jꊊj*********************************************************************;*:K ++*k + ++k{ j+ +k b:k*{k* {{**j*kk +J + +j +jʊ +j++k**+{k++*zZVWi'.^nn9NSFf"3/z.?bK3[rrZ˛KcK +J;J: ""Bk{k[ˋk*zJZJ +j*z:S_'JbrN;#?ۺk+rZsKK{b6r'"_'; +#o2r{Snoc +2º۳c2b +ˣ:B S + +C{b3"##*"+s#bۚ.£s‹Sk2.;B2+C/ *+kK+:Z#2+3s2Kb ˻ b:K"JR3 2k rK3;;ڂ+s*;{ [ꋋK:K{ + ++*j:zKz+*+; +Jkˊ+ {kz;#2 +33 2[;B:;; +3bb3s+sښC#jb C:#cjr2+;S*+K +J {# + +K ڲJ;[ˊJj+++ KˋJ*{j{;kJJkJJ c{"b jj k*+*kK"K +K㛊ں*Z *j{ +zj +j+K; +ZڊK{ J:jkꋻkK ;k;j:zjkkjJ+ *j * + +K+ʺ + + +*k :jk**+**kk*JJj+ +ʊ˻:Jk; +KJ+************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_german/cause_29_loop.isdn b/tones_german/cause_29_loop.isdn new file mode 100644 index 0000000..5ed3a8c --- /dev/null +++ b/tones_german/cause_29_loop.isdn @@ -0,0 +1,198 @@ +*d}EьDH$]aC?;{NCg^jZ +j{RS +& ?'3:N{ //.Sb&oNڂۣRǃrK&˛ +obgO&"n:S#;sB⏟/ZZK[s>'>~2j27?2n"jScn?*_ro +CRJ +rrB +cb[gbrK'.2Ϸ2_fn[O;ڎ&cO?32~CS Z3obkC &K;CNRRoR2j{gg3:' ˛+N&ckڲ{c3C[J/3*S: +.΢Rj :*&z &F*Oo+;goC*bo;NΣgr2'Sb +rsC*n@,, >I!A!W>x8froa! [6v~G)w3gG_[$d!aQ Fx(^Bw!vFF)w_oCJ>2GLJ_'SXL `bYaIY1yVsWVf>~.+wW7{:Rj b + <~Ya A /[Y~hFnZbb /CR>.2gflpX>WY9yyYAAiH8*j"rS 9S(v&2kJ +3n>zzBßX` xh'yٙ9)gvvfšc/'/.2 jBz+SRB{/.hHVΚoYW';.r#zRNNNKS2> +#SsN2jcSskZ +?ƈxHvJ II w+b.&&2/3k +*ۣKJ2zkjs3C3_/8 ظ&raI?;zڲ~V& +'g;/3Z.ºKk+JK/;S_i8`Ь`^:ڲaqqw3szV``؈^)wח'{2~^^''/o9X|pF-mi'@@fCW9!!I>fn.N)gs3Ǘ) ,,ֶb3maiW)c&[ljY:ngW_gw ̌l08fV1m--1ai9@Vƚjο!Yay;z+rV'7'_'Ǘ))_ l@Fhw-AI9Hضn23)!YY92>v'S')W'/_ , 0 VnI--1!g8``(6F&9C?jv.*C㿇G/3χ , h!19I9i_V(Ff&6O7i)___On^^B*o?/cSNX(yiigcN^.2^&>2KS3+c/3KZBJʚ +*K;[3/#h6&&FF&"SggGǷG__sΞ^^^>NJ+K[[#㣃CC[ãkb~fF6>r sOǷ7Gg'3rN&^~Z: +k;; ;C33bR^&f^ +[_LJ/;jb2..Rr²rrr2B" +[c//3ʢrR^^Z*{SO'_??o k+:"::b2rR.rRRrz*[CsC +zBnnn.RZ +sSS/O3ss3ck +B2rRRR.R2bZz ++[[ *BrrB::K[VV)_㏷[()w'*Zξ^Ξ>n+ +;K{[:.Nn~KCS/_'OSSsC #>&_)_C36hvO#f')sRiWN08(H _yg X !Gw VCS~FN/)'OWinB/ $L@(Jy-mYf@ &&H'')iV{ WΆS <,(8H!qYaO hV(WsV +^OI wOrv֞o 9Il@`' 9AA x6Y97yIK`x6V^?wO)?(";^O) WiP`@@Oy1_86X0(i9ˈ8Jno!GoO(B +'iIIi0<`АxAq*3_h&ƞoIO [H'oIoF~[?"6VGGs7,8FX,!im!)! 6 VOG+É N3珆{RKg7_rzS#.fog@X@ &&)a!W)Yaٷof(.R6v[rJK//Os*r"j+b{+j#ۺF>>*OO3ww'S?s[3c;R2>>^~.2ڢjSsC/kcZz #*JJ~&.bO??_____C;*b&&^ff&~N.R";3C333##KccۻZBrn&&^~.*;c/O'gg/k>~nrn.z*#Ks/scc kk &f.Ro?Ϗ'_Ͽ/CKJ"2NNn.2Z"Z;++{{ +C3#cK*jʂnnN>.b+KsoO?O;+*Zr..22..šZZ+{{;k;k +zZ.nn.22J{3SS/Ͽ2s"7[SB+ʎr.nN.Br.2Z +oC S{zjRN~^^f^Zk?_gG7/[jrNn~~nʊS/C:bRn>Kۃ3/K.hvV~B_giIWwGO.V&~ [_7G'_ok +ξ~Br{;oG'.Xx( +'9YY+>6Vh(6fjOW7ןs2.."Z.;?_')vgV` v(w!iyBhh(FOi7w/bBZCzsS'wxX< i1aG inV8(v掋6/i.)_K.O*z/?o;O_W),ـ,(h!a၁iF8h8cc77Ǐr:N2 O_)X!<8(gYy1aWgVHf/si7?+NO">jJOK_χ__ PV@& iqY+g6(ȸȈNf'K':O"3?Ϗg_os_Lhh2+aiQaWBhng_SsgHH6xwIWi GヺNKk{Oh(`8x׷aYOn[?_#{nH2hΞR#_W?KK[c: s*[[rVV8hV)iWI)9iWgS{^&vv6Fj{['Og__SSoSs3S(Ș8 ##)iyI W)G7C&^hv(^:&/w7ogO'oC//h8` (hC_I!y '#hvVN/_'矿o/sS X`hF9!IiWgG3k~^6(&no'_//SS&HXXv#gWI9!9W))Zf((((Vf__'__?3o33{rFx vf'y y!Ii ggK2('RG_'?' /cKKrXXXH^F^GGyIY9 )Wg/+N&VvvvN:SgGg?oOSC;[ˋBhX8Ά[wWyىI)S +J ~ֆ^v(h^b _ow__gos3">V X{/wY9i wi.&F8^f[WI)wj7gggg*XlpF)i VhO/AYWg?Bh`H{㗗+//*GW'3/Ph>i =_fVYa陱sV8hv Hz:(FR7?;gGOs'g'3'gS''W +pD$pfY)MYH bP1A![8`^hy :8@xoWkW;o's4فHhRiXjqAi HRO36kɗ2w)'nwi^o׿rZo_GSCSc'W8-_8_26:O;V^3۾^x:g~'B^C;OJr;[' +K²r_ؼPP'aY./_GwSo[Sr2RRvB#'?k#rr;3//B*rn[:.Zr~BCH Ț'_wo_#sϿk*3CZ3Z~.ZNR:ΊʂCJR2b#rʃ/2rb*ϊ/ 2>s[/j*C 3˛SBcj:+^2 +ZZC:c;~2zc.R2c3 N{z* +zC:2* + R;R"K/Sj +K>?r.3foJ?[>kB_"z[ +[K»C2gR*/jNnrz{?/BSbr 3R RbNJJkBOSRcr ^*΃2sr ++O*bR[3csR'{?3zo3o2 Js~*f/jkJs+/jzrbzC_N;B+ _kJ"oSʋJks*b/32;C 2sN+rJgR S3& .3{Jr~r#z/sN_z?R3kz"S +g*N/JS. +;bfo3*^3KN{SB>o.;b[^3_oN>;zjo_zBSR^z*SrS:o?;SN"þßƏ2_OR^2#2^:o"2oSj^n&)fo/*.ǃR^j[B+rs'[ꢋ/~f++"N[Snfǟ^KCj/.cK{Κc;rB dz{Bs/?FcON^f_ڞ7s{nN{Jb6g': +z#2^jz[/_S憊#s2::so +"*b3o +OS*^or +r&ZRS&~*kK_Oj+ËjbkC:.ZK2:2/*R/k++:Z^3R{b ZRSk +s:_r#:R.nkRZjR:"~^.^^B'w)i)777gS{_Rk*^# @̆3&!!aav 8(?wi;Sž>.R?'w/м&Y''Z(>>Z _'/3f*N +3'G7 ~|FجL0@yI1qy!Ȇr^_7KG ; +r#GG7)Lᰌ v@VFaYy/6R&fw+gϲs^F&.NSiOωi'WG|~ PVi9aQIAYyi>NfF?3nk.>jboǏ痗GGg'?'g0p naiq! BHvSZc(r^OVSf/wwg)7__/Ǐs'g,lx0VyIyY{2(n:oss +[ffZ{_#gg7__CO'SSB`x@x^YI.;fVr~ ++s'^^rO?7_So_3CPhaAaaa n6^.JO?^fn*?'7'S/CSJfX&Xr'9AAyi&f6KSk g6:{g'__s +Kj2b:z &6x(^gW))/+j^f>f3só)gnCGG?{`@hF7'YIYy?jfVF6&^bBz +B; s?Oo3û;";B~v`(8X0(~iiYA! 9ׇf>&RR.n&C?G)gۢkkz+f`0 06iA!a 9GfFFb* +6&>Zk;KZ".k;b*&H@hZKYA)b[o^Nf;nnVF.K7Go ;.ZB"*jS.H`VX{iɷWkNfb{_"^FNv(.N/)W_O{~ +S3cNo(lX +91 qibBRX(R{W Of~(X`VvZ9W緗W?/BSg"N"V <\X&jyMGyyF "Wq2&jZX@ VS~I'f+vւW)Gw粎Jڎrj7s'/ +F8\xkO ّ /f8X'a1y(Ɩ.h )WgK.zJ?s3?o3/sOʋJHL'IyA-1xH&_A3kb H_'f8h^R) 7snr2"J#'?s[K ^|6q ``6gCAAyZhh 'ʆVH77KsS ˏ3>X|lXAٱYK8 g!aawX^.GW8V('W9wZB [*^^_/; S"Ύ2/O_gC2X@,XgIY h8yy(&#gW)+(8Vf 'Wi˚j+[BSj +[3_r؀P !A WX y9׉^h&'*FJK7 ZKںC?_3 k "b{K#n֘`,rI >h)Iɉ7ijFzSrh>R:K3N2k3oo;# ?o3C 9YiYiKf(G7׉WIr&f.2s;fRn_/O; +[jCoS[c3C*#KON8p  W7!or_ϳ W'Z[KJfb^^kSn+CsoJ[C"+#*zz[ " +;6`FR{*7ggLJkoc3JR..~>RzⲂ:kzz*[s3ۃs3s3{K+kJ"r₲rR>NrK[o''SC J"RRRrRn.rBz+;;;cCC3s3ۻkˋ""Ⲳ2bz:j*;ۛ#CK#K;+kzz:Z+ +b*ZZk+* +ʚz +J:Jjk {[#C3s[{ k*JJZzJzzzJJj+k*++*J* *+{k j *+ ++**K;kkkkkjjjʊj+ʺ +*j +Jʺ: +kkkk*k++k*++ˋ + +++j *j +꺚Jkj +z +: + ++++ * k ;;j*+Kk+kkk* +j++jjjjj**kkkj + +j*+kk*+kk+jj +j*kk KK+k+j +j+* +*+k j + + +k+*k*jjKj* + *+ + + +j+* *j++* K+** ʊ+++ +*k +* +j+*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************68WN w!!i6_vcs*r[cNcO'C#oNk">>2z~ +:.R O )i73N>hp)I1YYy^v`_;I׉r&nF+g )pd0 r&1Q f(;VS WVK(>i7)?Z# { +*s@,I0y-aqW)k(8_ϟ)'ho?G.'g7~ss/V[^N3b[r~S ? S/g+SSCJJ:>n&~"Rˣ{oÛ3sC{{C*kr..~~^&b+3'_____/s#c;z..>>ΎNʋ;#Cۣ ++"bBb2rBB2B + +k;SSoOOOo/cK bz22rbJJ +ʋ*::j;j**jzk;j +jZz:*JKk+{ۣ[{;;Kk **++ +:2ZzZ"**k{;[ k +k J; +++K+j*+ + +**j*+**+jꊊ{**++Kjz+Kk* +jK*j k+*ˋ;kk++ + +*:+ +ʋ+{K+;+j:K닋 *kj +*+*k**j*k +++K * *k +jK+z*jK +{++*6ٞ>s:b˛Bsۣb#S*33{2:*g>3*srZcRJC +{KzFWf?>vi/)g2R2'n&b R&zik3_[o>./W/NZo#Ǝnw(cƇ2 +^)^?(nB__ο6/k22r J(.;&?2Gg^_kO.+23^Rgr>^+b cvC.sjzOr +z:b&{>_ +{n+r&G_>>3{*Bڢ:+#"CKB +3#O +{{sJsNk+o{r_SN*/*/*FX^/raYI'ڃs.RBÏWgG~fS L[@x1A7'(v(xVH. 'jR;bOOOOGiv @0Pxg1qY2VxO_)'~GSo& o&#ϳ_CP8A!1gS(VxS/+iGSc{kO#s{C?ss/_`p8 `` +3!aIY!WO2K6Nnr2+z[NBnzckC{C#csۛ/3/goVxFV6s7)ɉiw_ **2>Zb.rKj [c;{c33oOk&f6(ȸvƾ['iiWW'/[C3{r2^&>r"z+cS/O/3sCsor>V(n*gggLJg'gg?O/{ۋ +ZR>n.>..2zj3SSSSc3## 2&fn2 +__''_/+2n~N>Nrښ:k{ K [{{{cC#ZR^^Nf&~*oO?g_O/{.nR.2.rZBZZj{;j*SC{ #K:br^>ZSO_'_O3s :BZ..2r2ZBZjJ +k{;C K;" +&^>^^Nr"KoO?'_'_'3?jcj.:r:JRbK2:kZB**" ;kC B~>>~:*'Ƿggg;KK2JzzŠC+2;r:{c +os+{ n趆FZʻwwiii)_~&rBs/; {{2 bZ[;VVf؈H^RS9!y9)'3n&~(f(^o?'og[k[{CO3` Hxh 'y 1a12N&VH(>.#fO7OJ[so_@ ʐ`X C!)ه3&Hh&6.`7go3)g)Ƿ?/P` ډٱq)YGvxFV(Nw_/gWcO{א @`xFA9A1/;֟vX^R' +)O7o3s?'[SO[/30! H&iaىywC__rFNCr[So_#/oSg?/Kb3z>ƾh(V6vn2)iwWǷ7_+N&f&>N."++3/3?Ͽ'Sj:*2.R&F&2;;/'_Gg_?/sZ2>^^^n.b{3c/o//ooS[+..>^>NbK3oOOoS3{{{;ꢺZ΂rN +zGH)&ξGOʇRo2k[z#RZڊZ{˳c* ? Osbz"Z^*R+k^> +3k[~{R3B*; gh)z) Ozknz fbF+&>~_?Sfrb"fZwS'>v(2')ח)9I GwRRN^^{KsskBBRk" ?&i--iyI`v(a{Iמ8h&oY7__'s&VrK냏)O>d ؐqA[ jϙ"z;v(3ûWa OϊHooi7S#KF|@ N@r-q)9qa(h(8/Y!9w)I &X3!9Wg.(6N>&:G)WWGG?;$L,fna 77 o aAy'66 iYg.VVrSF~/ioS@| ,KAVGg fىo)gׇ3{w sZ~sfRi?SoBF^kG (i_W!1i6GW(fIY6zZʟ# +J*OÎ6z33'S;R~2so@,p*9lj)wa)&#+cf&G&NR{^nZnR +rn2rK3rRB¢{o 0غiWYyk^^ +_Wf&>*NNrZ*zbj+RNj z2Bƈ؀8Ii77i KnF~f"Kc/?^^"bB.J{ Jbrr"rrr2㏟fx(^×iWwgG)i)&F +c[b~.bR>^Ύ.s[{:RNn ʂR"k//o+ζFbw77wwwC2^&&'_SzRRnrs#CzRn"rk3soj6(hVfBogW)wGGgbF>og?3.n.RnN.2+ +JڢbJJjʻs2^(hhVG)ii׷g''+nFvf/'okzrRrn‚R. + c::ZBZJ;[##~ֈc׉I )wGg_#*fFFF:gg'{"nNbz+"n 33SCK2nc2&6x(oIyI)7gϏSJ.~ff^NR +oS*z⚚KS/3k:2 S*ʺkھx`Vw9OC:"rFvJ/Ob~&>2+S_'_Ck+cSCs;C~h0p a11AaWǏ#CZr^6(n;7?FV&zWW's;33s#*/oH ,P8baA!7GOۺf(VF?)iK&Vfb/SSo?'_Oo3;z0ЬHiYAqaYI7gG'&(iichHγ?O?'Gg S'Ȁ,@x" ၱWwwh8h:9yWȈvֶr~+_w7iIWgsnc:'O?(`,@8Y!Y! 9!Y! Fx2#W [ffh(iGs?Ƿg?.Nr{i Pllh 9!Q9xV~kB{?ə`6b*'!9)k"_2.g)ɷ̼W-QQ1^6o/v>ǁ)3VhfV ض'!ii )#f^+''? LLL,RWA큹CiH8WW3y` >V&'!iJWbZ_g'WPL`6o  ?(gcr!^HV*&xx) Wk'3c2_s xXy)ɂڞbwW__)h6h8&hG 7n ۲*3/gGg_X`  !AןBן#s7O(^(8K*Cw)))wGzSo:koGg@,@ x'ya)7KN2'SwG~(H8ƾ7))WWǟScczZ#_'o,Xo)Y !z_Sc/r" ;rNh8(6.3s'i[?n3oˣ_fhr:6O !YBG){*:&n&6^(fZ +)Gg77OOO[{3CCssస@XF[yI)9)WW/o[RR^FV6hnn.s'gGo_S[Co#ƘXxNBgG79a9Ig)b~Rv6βbJ?g'__S/Sr>(HXVV +Z'iwYyyiIyGGOoh((V(掾2{s_g_o3c;k +2hVhH8ȖhVB+Gח99IW'OSb&(((h(VRz;/_gg?o3# +Bb"(V(hH(v> +I9 Iiח3.^(V(h(VF&[GG'?s#2Rr2vV(((v6^Kw)IIIiiG3Nv((VFf +/_''g_'s :b2².nFFvv^Ro_GwWw_Kz.F6vFf^zC/''_?/;:Z"br..f6ff.:oOGwWWwGwC3 R>>ffF&~:+:/CgO㺊nJR22f&憆>.2z7wGG_gϏ#2j~fffN[?JO jKSjjR.>NNnzB;_LJW'w?۳"rBξbkb +_;/oBb.Z;/3K2ffF6f~rK_)wwWG/*~zsJ + χ/3>_N_:S3g~ S3Kr6&vFFCSG))wWW7ϋszN.>Ά.~^JꛋoNgsK*OoZϳNFV88Hh6r_)y wʊ.N&ƾ~~"+ s3_?S'rˇ/rh^x`( VVV* )iI!)w)C{~66>Fr^b Z#oo'3ojoggJvhs 8 OəyI!YIgsǏ2.6Fvr>Jj{Js?SgsC kCJshJHHFh 6ȶcG)Ii )GG;r~F6&ƎN_'O7;_7ǿ'Ϗ?RVnȖ(6fwI)WWS[kbfvr.#7 ^`V*'WiW/NrfF.SO?;oKBzJbR"3.).CgGcwgosfk6~ˢg'wi7ig73BZrN&N&^N + C/'g7gg_g_O3 H Zf^'cgWO 7)W/o 6~*bKz[OckOOjK2JZ;#{{k⺻z Z{+J{hGr&InDz ojN +fnRn^r+rBڏj___?oS "r +zV˞VJ(^S)))wwZcNNff/óO+csnCJˏSoC#fFhKsiwWOj6&F6>R^ S?/CB. JNRsJS_O_oJkN.>.r;^:ξR*z[//?__g?s: +jbBξnRšs?_/S/cX֞XN6ۗI aiGSV&rS')g3kO>΢ʚ{o'/g_/oj[o;{80 F aa I/.VhxvF*?*WiO+~nbR{חgg_{jBJ(Ȁ H^/13v((牉I+3hF8zVO?I))'g.NN[2 '?w#\p^Ѐn)m(Xh.O!aiBsZRVRf39׷W闇rJN^_or| Xϱ יm)ɿ8Vfnə'ֈv3Gw)W_orFnB3ÿg_ + pX(@Xa !!Invs>(h~syW +6~^~VH7;)^S;N^ *{;Z[NRkfX^"F +iwwۿ*RNRkڋkzڲr"2*Cs3 +kkJk ۣ+N^&.?# jb+3ckBj;[:2J { j + *K +Z++**:*** +Z: CcJ;*J:ˊ* +~"g'/G>^x Ȇiyiw'>6FF>BK_gcKZBKk sbR*j @(F7!Wi9*>~bV>i_R~舖VnW 7_{nCbs:?/sWlPVfa-! !ٟVvs9 '0vW))YsG'C_gixwY 7gG_S.+ "Bb&K +ossS#;: ZZKk+kv(VR";sw''gJj+k:.n.RR2Z +j{#ۛ[{ +Kkk + +:"Z2>2":+3??Ϗ#{jjJڂRbڂ"Zz"ZJ+{[Cck *jZJ* +J+K+ +22BR2+ oooS3sCC{{jښR.Z+ +{ j+j+jzJ*+k;j+jb"b"*k;33/Sss[++Jj:ښ::+j ++ˋk:+j*jj* +*+jk++kJ"Zbں*;#CSSs3[#KKK2 +*jJ +*K + +:J::+ +;j zzrr.J;{#soOo//s/Sj +‚z.:Jj2 + ʺ" +*Kb +j  ++;K;K 2NfF^{s?_'??o[k: +*zzbr>v_k>rr+O'kZ"k/.>:;#k sCck[3&h`SG)yW/B''" + +&^6FR)w_RRSs: + ヺbc_'cBʻGb?S~ˏsc#kN_?/{?Ǘ1aihzOCxi.c)ɹ6CnBgw_V9Fw_S^./71ё gF(~n2v&aYzHs{_n(K*sc/w׏&^__/s+;rn.J'_*R+OSS HXGaI^vs_WR.cOs3bfz/KZb^Wڞ{{Nj۟czBZK&( xxYa:oos_7Ov&KC&NKs[*2";.Hf7fBOG?+#{_.SgSVX F[i!ykv'w)W NZs?OSz +[#kJzZ ¿gg'/>N#_gxh--&K'sw*_NV6r_rrffOc+k*jb*__/bN:3oS ++[3{[??h`W&FgiIo~2C'G?z^JvJc +# .R3#{rK*ko/[+SBp$lamMA B 0I1FR6()NV^J~^#gβ>F(.k7 ++Bkg+:;K㛻 +[sso +(HF;'wwGG^&nGG^>s/ooC.β+*+:f￟KR*S3ۛ b+/3SB^n"8 HA``WiaٷF(ȆG9_Sjv{LJϲ6&)so&.+#'3"B2[;kO:B"((&.;_Ƿgc2N.O_ggJ.n.r +{[ˋkr&>[s/SO'2ʢ*Kۏ3SoS|(^3- _·!aɳG2(H&nrGWGcSf(6>n2Go:8fb)'Zw_~kJB33S3*2rξ~B;º돃#K{Z":K;#Css#*+K+2: c+z"k"jr2[K+{:+K*;{;;{kJ+ZzZʺ"N.ʃs#SOs;cKj{#j{:J+j2j.b"nnBB"&^/w)gS[z3+.rR.B:*+kC[[j +z+k {0h~>9iYS'wC~ZK_k__Rr&RZj +o3[""n>Rr"J;# +jKK;s{JJ *k+:;+ +ۛkBBr"Z:kCs3ssSSssۛ*jk +JJZBBnZB2:Zrkz;k:#KC3#cS/C[3;{+zZ + +2bښRB +J2 +K+*+**:{[sk[#[[c[+K; +Kk+K*BJZkkzJ + +j +*jK ˣ;k { j{[ J +;{jK;+Jk+ ++*: +Z:jʺ+kj++Jʋk{;jk* +j+{k++*k k*j*KJ+;+kkʊ++***J:*j++ +Jk k*+jkkk**kkk**jj*+*++jjj**kk+++*++*kk+jʊ+k+*k+***+jj*++*kkkkk+*++************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_german/cause_2a_loop.isdn b/tones_german/cause_2a_loop.isdn new file mode 100644 index 0000000..83f3908 --- /dev/null +++ b/tones_german/cause_2a_loop.isdn @@ -0,0 +1,141 @@ +*d}EьDH$]a^SˇGi )Iii WObb.F.FV6XJV))9A19Iwb^h^^R":J c?'7k//J2 +fΖiI9AYAI f2&达:Bk3*2~Z/k/3_r;;;~*0` 6gYiAa!9 G?rf.ok2CsbRfFFBSK?/s>>"rxhh(f({_)y׉'sR +or?Jo.6{NnF^:;&rns*^*{*Nr/_z^fv#['w)G__gcbgoR&3+fr_^Ȟ[KN&f*7 Fs+Z_NBzv2^[.KoSK_77S*R/~>nhr[^^N&Ÿ6k jZ".g#/s;2 c +{2oKSg^~G23jwg;nssn^rZ&^bOFw2/{.G j:zrO[wk"g돋o/&J&jw2^cjz:N.~^ +?:RJ_{^w;'~>g6.KR'G&S7R+ /Z?^ +6rKǿV +oR:)G>fgK+"zrcFS[2 fǢ~3Jr:6?o/+k{gsg&c~GFs3 +>:2gf+R[2sCS +{^322Nzn&C[gR[G*{;k>.#?Ͼk:.^F'J:oCZB//{o?;{R'7:~k#wwGk$\XAAA7)G Xr AsW)>VNs{.^g)w^.*bR g70dXI dž*gIZΖZrs/j'oJr_+_#/G_+S\'YAah2Fa[fȘhS kz'_kr7G'?G7_S7i_$da!>>[N;8F2)K~+OK3W ig_7g.$.1iH2)cAAA.fF gS(SW)2S_C)gS_G7Lp^!11`׿.aJ&f"SGWZK#_7wgg77G_Fl< G^W!AF22W!?C2H2j?i˻k3'7)wwC` h֞x6gw i))Ws7w_.VvvvFS/;o7wG'_SHXF/_ )W'>VV&"oOOGG?S&XXh H ɹ))'_?#R^vVVh֖ +_gGGG7Gg 0x!!!!y yIig3>F(6(R.Jo緷_'7wGw/3`xXHƣw/c!!iy9Iןg(FV(Rbzo_'7wǷ)7H@&Iaa 7iiW7)'z^.&f(^^.r[gϏOw7Ǘ) i<<Ѐ`0`aGy!s^{_s/>!9G7sS'SvHVV''rGg'7 l0,0A7.>o֘NwI))i!Zh^8 h+:鹉ן"cgg) )`$0,Fa1_CO(x?iWف>ƘX^ljiWLJR⊟g_痉 W$l7i&7~YG~XhF)iig3 r??) Vihq-yxvs(!g&(:2.O/..j+^.z:z3_ИF(@H'SH 93WyI_W_{+z^2^..^~>κ+:/C/+2.f^^&rB+og77gS/"2>>>NN>>bbz {3c kkjj* +ₚz"2ZBj{?OS/?SsKk*"rrZb:; J"jjJ: +k +[ Jk*[;J+[z :C#CsS# {Kz +Zzz +j"b:::j":skjKk*k{* KKk*J*Kj:k{K#;#ꋛkK#Ûz* +ڢ*;Jk*:":JkK{++{WF"[!'_+.cfr&2:C{Cjbj.j&#`)r.w:g>73Rff3o3_.Rcs."_^KRCj[*.ZKBj+rBsro+n;B#Rn[CcJ2KBbsⲣ +Ks +{:./:zjsjrKsc#CKr+jzo".3[bKZzN"ZB ;{B{bKro23+"/r{Z{K++Csj +z2kj+*;cZzj+zˢ ++zʋ{*:[jC[;Zx_g7BZɟ# s&O*^γ~2SZ2:r"z.k*" RSO'/csS?s**βb:j+ +z2n>n&V``иVG;Xf'ws&fzgW )o*¢dIV~1!KؖsKVA1Ygv^266?W^' +GWW7ח_b||LV ;gq!(8HG'7 1(8 (wS OLJzN _77GiI)<,x{Ƀ YaV/W9y YYy_8H_{SSS+IGx ׊WYa'hns9 Wiw{xXX6.2.oLJ{kj3g'7i[PphW'9 #ϏIwg+V 8(bBo?W'oOkח7gG7oHP(fOwWIw9IG_ZƸxxf^⣚j_gwgGc``8^Sɷawg i׷wgϛ8Hxֶ>r_w_3g_Ƿ_gp 0hx'v69Ayiy'yWiW'/RN8F^JGG73O?{ks`xV ^9))!iy)WGO'Nv(v66n;o''/?? #{r2&8 xظvh(+2)9Iy Wig:OC2fFFf>N~>rzjo/"*+:>>2B.^>:&"k/*{ ))Ƿ? _7w7_g'_;N^f>.&f^.N^.K:{OR*3/:"nڛ_oSS7'#{cs>~/~b>B~R32~^[ZB3_wkSBgg&6 fiSS''(&wSWVv ?;_r'hx_Ff/&r*z/bVJO*_2NG{or(oIVwnB~ F2#wwG fH&VI!fFI?vk") hi9W'W/sWn V٘JW:ggZFK^x^[vWƞg+?FnßF2fR/nJ~wB^OfG&ZR"':{Ɵ/oS7rsjO":Cjo_Z"[[z/jsςc ++3[c柊s2g32onksJBs:2o:o"22GN[6ok>j⛊KBJz{K{*+kKBObrzs*[:KJCJ3z[J;JK+K:+ z;;K+{ +:j*KjZ[j:*Z+**kJ; + **kJj*JK:J+jۺjkJ; KzjK*KJ*z +:ʋ + +kkjK:k + KKJk Z:2K{J;j + +zjK +{3bK"{z*Kc .*k{Rr/ڻcR2cbBh'ۖ^^7G6wY;is (gN b8s7oYZ?Ɨ)6)hNS".9w*9zRcgn2^O66/gRg6r/ GkoH^>/"fGcF_ZϾϷss緞w[ZW CGo, YAWV 6b/a !^NfG!Y_r(pļl0`BMaa!mqHz @0!qoBCnXFY)W[f(NI9 x\<0H?m-X @ַWYY/IWcffγ9 )08 _9aa-)Fp_oo_[(VVf3 Yי)/^^:wy)<@@p,FqImfkg`aa7 (H()Www ;.&*O'7g'@X YiYY6jF/wG*_'φ6+j/_'cjo[ksO_rHVV i Yɏo&^>:kzoG_og+O/+?' + X(HHhv6 WᙉYiW3(^Nf^hfVhr绞WiG_z_؀`Xrr1W9Wjy8&((hÆ6bk)g7gi'OGo_pl &A9Yq)h–>F(z{[W_SggG''?3h0,Xz/aY!q!)~.>H^&& + gJgw_)GOooְ@,vB#YYI''(~vv8&fv( #_iK?gGkS7Onx0`p g.i1a1Y9?G_FFVHȊNC)s'.3WWiwW_:XlX8,3!Ii-I!W38F)y&[:7?Ow G{'k'OX Ia{'ǢsjY!dzv : ח׷#z:'_lL``!aYshX^Rc׹:;#x86^n?)iN*zB3S/g XYy)YA~hR?[ ~&B_?o *BRJZRJ +k@Vx`swIy1yF늞FB_gچS/ڞoBC +O3S3j +f~Rbn&Xvh?gIww WwO*cR^3oc[J +2S# +3sbr~n>2N [^*{3/'__{*"J2bcSfR ^&2R~2"#.j뚳"S[{o#kc"j'n'Zbj[3: C_.jB&+:Z{>{z"[/j*c[r;#S;J;&S +SRBgʃ{*Jb[/b:#k>R{*&3c"K;3 ."jk~'n*JB;c3s*#&B2SS2z+bC +O[?zrKS&[:#b{33C[*J[ CJ3^S3b{¿2o2 +#Ro;c.BjZJ:r3" +~#>c2"cJ3ns/nN{f3O' + +o2o3㢻znK.N"K+r3js3Bk&Jr +3z{_^sCO{gCjB +BkCj/:2_z# ++??J3.R +b{> +>cZ.{:; +;+jkj{j: ++k#:;J[ o_'S[/rn>hh>[JbiiW)) oO#rnNr& +* + +Szzjjz[3J[o3C{#k2nBn~6(VFfJwǷ3"zJOg77_?OG,`X@0syAgiF6((vVo2oGgW'_>Vf6z'??7G2n{J'wחחO2^FF8(VVk?GwW99i)7S2&F6*/'Oϋzÿg``` `x +Iyyaى?.F(v&ZZRk33K .6VV*3gi _jRξR{XXH(F^S'WW 9iw7':R&f((^&NB/'G_g'_jVh8xȈ +oGiIٙyiiW36(HHhh(njoGWWOSb(xxxHh 9!Y9)?cb(hH((&nʛC/'G7GGGLJgO˶Xx88h'IY99!YIi7O2Fh(V6J2JOo_'??S7 ,ll,(hA!iə^x"FVw)&~~rFr*/')# *oii&J1 I>7& ىG6H>s:/iW/bsZ^Ow),dLaYg! ѹRV?kx ?1iW_w@pȎ i ~.V"Gj?pdxayb-maf8vV.Xa1_9G0Bg7aZFf2)gO&~^(`IaQQ 6nHA9?7Yw8{H299;jgg3SWI'&3o2Ni9NI 11;^6 XYyI!H ~HWgIjKR#G)Go'#~~??^$аM񱷈?h`hi1 W!Yw`踸Xx&)Wr(7ʎ>R c 'Ojjk"SSsLX/_Q__(v S'j~g!ϊnv>'7/ozkKr{S +NZ +HXXc i179ay9W6ȾFFGW'/ ^FhFHF?3c)ׇ BkN^Ύڟ'/''oSsƀ@ɹAy6>vV7Gw )>xxHjggi9ig_#^'SSzv,`h)A9aVn68wIH6 ?g)I9W翻ZN{Ͽg'O[fX,@ 819aYKh&hVWi7?WW?XVXȞ iG  +~CRfnbgw'GsZvLLpfK-Q'X G _a7r8؀h3S)WiyRv~.N/)o{S#+Zo'6,dLaIz ->x1!WOЀoW9X蛷ٹG_n;g."Sf0<rAw !^pvrѹ#hֆ`@~!G ?zn87GW;Fv?3*{Kg'_O_{ )>dL[/A,vb 1m Zx82ag&>X !_'S +f"'Obo'/:βƒǏH1Iq-IXаS1AXȈv!Fxp9K.~./' j'OOS;"bZ{g $`)1A@g)AiȈhf斖# w2fV8+)sw/rCscz#Sg" +Og7f 7wAX8&ʷ7G9ٹkVbfCǟOZ>hGW#/cc +bJgg;*Zbz?G PSWSfw/_7G_Kf&"nK""; +:+[{;#*B{+;jbb*nb:2+h(^Kgo_[3 +bk+J"rn +c~rsZrj+JZB"R;ʎ +R?R2?.?Bzb[+Oso[c33K:sC~oNNkRb+zNJOfz^..: +~Zzoz#bڛ'"[ncC {;^r&s^r#_O&^;3Ov~rc +#Kn[r_njfǏ3"#:;C[bRs#??rz+^bCꗇ/&JjN#F&o^c+ڲozJnj +.RKs+:>ON'*r*J*On +r*JK3/R_ ^Ί:{[J⚊Zjc+rR~S;~_{So꿿N+Cj&: {/ϋb{k"o>ۿR +"j sC{j+jj ;*jj::*k* jz*j+*k+*k+ +jK k*kjj zJ++ +j+Kj++j k+++k* +*KKk +K+:j { jJjk ++ ˋk+kk+j* +J:*{ +:z* kjJkk:J++jj + +  j*k*jJ+; ʊj: +*+j+ +:z**j*k*j +kK* +:j+JKJjjJ +k{+;j;+JkjJ3[+K{*: kBBj:":Z KbKK;nz";" +z +ۻksskb{[" + +J.jRo{C +;CJrbrb{>Z/b?2jZrS#SkgS{3kbzO3#rS^SK:o"k +*[z[Rnòrjz#sz{s + + ;Jk +:+úrb#+ +j*+ +zr;*:rrb+b*[;SSs3##{#;;zK:;k+{;+>H0`V^aaaY!ifVh&ϏOzfXh(ob?'WGKGO;ˏI)  11ia{KhWG3NSr&x6^fr7k2nrr?SooOoz~bO#:>f80`V~_9aYI gB^fFVn'G7ffF6f. /O_'#r.R+Cs/S3cc;;@ &! y!_r˲FVVjC_7kJ2f.2B;3#KZBB"Zz +ʊJ{ +jkk +j;*K+ +ZZbbJjKc3SSSsC#{ +ʺzBrZZ2.BJkJ:*KK*+{ + {K+ 꺚ںJ::Jjz:Jj*+ k;{[[[c kkJZ"bbb‚Z:Jj +J +*ʊ*j*ˋ K; +*kjj*+ꊺj+kkk kj+ kK{K ++Z*KBjj::jJ****j + +jk** k k+kk+ kKjjj +Jjj+k+kK{;K˻Kj k;kK jj"b:"*J+*K+{ˋk K +jjʊzJ++ +:k kjk *zˋ+jk k+j +K{ꊊk{kkjJ;{z Jr9G))/.˛fB+{3*Zk:^.:Λ#C>O>K;sK#R?R3+{ZZr:{>/zn##KZ2 Z:Z2o+o3/2*ˋ 뾊/~CK{r*~BCr:K/K{k/^"S{+[Rb*KR*C +R ΊZ{SSo.SSz** 3;s #.*+sbsz: *3o*2rSJ[ SKr.[R2*coZK{jj:zbBZ +;{Cc2ZjjcKsz{Kz+ K+J#kRjj{*K"z{[j:S*ZjCJϣ.c*2{s +KJ{J*z;KK::;3+cZb + +++{;+kJ+ ;#*+z jjscz"*zJJZ k*s3:z*{ +"++j"KJ" *K[{k#{jj +*J +KzB +"*; #j+k*K+KKj*; K + +k j+ kz ++K*+*jkk++ +*㻊bz + * k+ +J +**+j+jJjKk +;K꺺 + j+KKjJ*+j+j*+ jk+j +kzJ*JJjK +k;K*jjjk k +*ˋ* * +J ++k** +jjJk+** k+k+j*jkk;kj*+ +k++*kjk+ *j* +*+k* +: ++*j + + +* +*+ k+j* *j******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_german/cause_2f_loop.isdn b/tones_german/cause_2f_loop.isdn new file mode 100644 index 0000000..0134dad --- /dev/null +++ b/tones_german/cause_2f_loop.isdn @@ -0,0 +1,220 @@ +*d}EьDH$]aSZ[S{.n?'oZbSCb~#Cjj +"s;Cj +#‹3+B *zr ++*z+kcC/{;+#k+늊: z Co#C*0~ZQ1A)'V(7WIחZ>2?s/)7[ZK3ggwLW>a W96x3jriWٙ/;#^Xh:)_s/CbOϿOg/s{Solȸ yWa'^(S(/WI _?ohn{_w?#?S>#;#ss*cPh^>Aa!iAc~c6foS3s(^'Co+'RRkZ +* ;cJ?8v? i_oS:cnnns:#/bڋ+ξ3NZ*2+Zk;23Rr:RkZ2 +z;{sSk/s?sã:^Z:fγrK?SZs{^ڿZgKN +s:ogCƋ/ +o{F"g_7^JBJZf{RKss²bN;ssS' +O+ +s;{NrJFζ3jZ3J&(RÊ&S.'.7n >FGZR)&+:c[{'G7 Iv.Sz/rkNoGoRf7Fw(9&/~'SWi~?^o6#o'JWS/C +2'&(vf~SFjFsgÂK?6^ǻ^ +nJwK*?&26G2&⢣&G[^?C׳fV/'znʺ2'FR6' (S& .Kr+76r&~?#hrG&S/LJg։SbcGfhhcwfn.R :RgxGG?'.sN{מCgBs&f~)frWkCfn&fwBO(g6Z'3O&[N7*^K''>'z'/>_o ?#/C.'.k>.~gs)&s;J"_+2Nw#rf+j^SrΏ:{?K˟K2gNSO3# jZBNo OS;o 3n2z +{ڛ2+ +o"Kﻛbb>3?[{J˛;2 + *[ + +[*+ oo2k_&PllGaaϹy*F+'WWS3' 2bc +3/{^>R?W$g A)8O)G'')7f(Fc'GGSZ/?ϟ_S_7i,ёw'G'HxzיiC+ [nVk'GS['gg'?_)wh L71--q皆/φh8Xg7(R"f(hVcWǷS +.zOgǟ/C_gGp^y-m';H:bv8!1HxvB"^FǷ?C2.2JZ:SC_'gg Y1θ 8K?3>K3_ rzJs''''7g Xl?qy_hF貋6iAA! RoLJ3:z3'sr"S3Ï??g_7Gw,l 8 *_G3>»__'LJgǂ0lFym皘6.?᱁!x(bNz'Ǘ +B +'__7w3`l W_s."#OjS'WlI97g_Rzgs+2;cRSScjK?22.RZ3Vn7'C2sw7gC_'3;"?Nsˢnc^ +CN"^#&"n[[{/O;*r˺ˏ*zr[rb;&ʾnBcBRk.B2Sc BzGˊ. +S'Zo?;O2c3sʚʢﺳ{.oBZK2/J;S*~'S3C>3ڻ'r"onCk2 +jz"fz{KCoSS.KSgrJNS +;2+S;R[Z{*?ZJfJ *zsSKzr3+;[JjCcjCs"3O z*o{S*3?KzK/ۚR2R /k^cO +~'΋o/O#k"R3¾J kR# :Z3K32{Kj/*? +n*zRNښr2J2#sk;:32RRN.J2{3+#.K2CjK{+jZRzRJ"jkbÿG/k{O[j'o3:>>fff&BBZOC3/SoS3/SkzJzzZz +Kʊ* *z:**kڢ*jKzjj ˋ[#c#kk +zZrVvVvZRcc_777777G##Kj2~~>b6h8(( +k#)Iyy Wi?b;KRN^&&RrCs''G_?؈H3iIiWGO{s +^&Ύ:/#o3_'g' H XhN.SwIy9 i)IGCۚb^&>FFsÏ''LJ6ȈHxhj7yy9 7w7s?_N~VVF2777`@pȀ8Nr'iYYI9) /?{6ֆvFf"j_GG__hx` 0x`h&+_99 w:F6(興Vv^חwg'_goH xvg 99 is^66Vhh(f>Ƿ77'S#^(Hȸhc79II iW7'K2~F(6FBCO_'G7g#KZ&6VVHVrj'Wi i)7gc憶6vVv6Z#Og_??3k&F66FƆ&N2*7wLJ?sKb.n^^ffNNnk /S?s/j¢r.Bn.nRRrRn2bJ;c3o?Sk*Jzr2RnRrRZrRr: + *J{ + +*kj +jۻ{/S+;*oJ{:ZڣrβÚ늋:;늺;B+sR:cz"{JCnNszBz+: +3>C.J2"b;3[:{ϿBS: ss[#/2?znz3Rˣg'O{"o?rC +'33+K2Sb˾R.RO/? FSZV{>?B?2S'_O_'G[;K7{{{.2&BR3bg2~&Vh^~rC)W) i_o&* +r+O +"rSkš. +/SsCϿ_&0XxฆgǹyY9 iǷF^&s2"ڶ2+_s_cC?##'?G7fl00`Y9 HF^F*s;^h6^N_g'gG;z_׉ `i9qI9!yb^&vvW777W_ +&F8F'?g )3SJ7)鶌,@P_W QIw{h&fs/w)'Fv rgI?Gw__0`@@VI 1 9 +z{/gg?v6Vv(_og_onXH O鹹9_3oo .~^6Fvf +c_7wg_ggC8H8x Nz)9 )i__/J^&ƶ֖V6RSGǷחwgLJ&h8x`H6~nw)i9y9y9 wgkrffVhVf~s'7wחww'?O#&88`HF>Nciy9 g_rVVVV66fNgGGwoO;N(hx >'wWI9yɉiG 6vVv6jSLJgg_Ϗ3c:RFVV(rbG7 Ii)G"ΆFF6vFrs/_Os㻢nRFƆF^+C7wg˚nN>N.>.J+/o#jS*z*ZJrB"rBn.n+s?oo/)Ww.N^frk{bj+[// +J#Z揂NJz {bCϚs +[C:cKNk^^  r;j~cJN + rO["6FBVGn>SgB_/?J z?k&۶~_[[?RiBzjS&bC{_;R__&3* +"r2Z +{o:[2*rb.B2+sz[ + +c*+ + +.#;3k.{z; zz˾rKb S.z/Ckz3Rr;b#o2bknbk³* 2";bK:; +: b{sJ3z"k 3[J# +Z3+Z+N[RsJJJSŽj{kR:::C;ccs'Z.rbCJ +ڲojR;K>o2K;{.J+ bos/ +;/R[ z{ R:[K/[3 +.nZ#_Z"[b>3__nR"fO[N.jfϋ3R2rǎRJR^>/Z;;rZ +"{zrc/ +ϣ&ǛOrns +*2_2WR;n?Ƴ>_~kk"KGzOrcj;c"?{Z#Zo>b_;[ORFkSF3.R +#/BS[cn~JO&jJ*OnS~ +O&rʊ;z^kB;jk"oSc+&*".*"+ +O2s.KR__2sOr#C~;.j ZnN"/NS#Nor{2#o"nkBK22[OKrBR*[[cb#js?; +S '[ .zz3bNK&fVVfC_GGi9I9yII)ΊSZ2B>^K,.h0^7a1aa!rCF& fn"~NR?c?_'SOCCsZjj&f&ƖVV֖f~?G7wW))WW'o; +ŽfFv6fNr:k?_燇GG'?o nf6V(V6sgwW))W)WwG_?3JrNFF6v66F^~.*S?'gg'Oo"nN^6VV((vF._gGwWWWW7G_Û~ff&n2kCsoO//S:Bn~&vv&NjO'G77GLJ'SC;ʢ.N>^>.J+K[[3/srڞ^&ƆnR")wׇ''7?ok6:r{kK +.RN^.b[//_.6ֶVF^;/)wG;z{^Kv.RNRS;{" +2Rb:j s#?dz(H(Syy቉Ir^fV(6V^2B/__/oog/`6 x0 v~I1aa1YiWGOR&Vhv((^3n?wwGw'_3o3 +?,@8VIAY!Wo*&v^VfVȾh&OgcWWgwW燇Ks3KBZ"j:~SVPFY!AAy9s+66Fv>zFKC/27G__Srv[f~+ +xʈXFw79IyW;w_+F.f~r.ss"_ +"Cs~N:{&jZS^oo_//''S>b'*r^3zRRcZF&{Άs +{+'j/ k/3gJ**j' ._ocK/  +#J+^>_Nfn/fRfcJgrb;ZcCOonnϻv&KrcbJoJj*K::z+~*^j_K;w&&*'N;*bwO#˾¿vc[rk2_:2_*+>#3SC:3BK&..2nc'K/+&22jjr2r_+[s#~/j&#BO‹O3fj+3;~[k/_JϛWZ_[RsJSKK㎞#cz:?c +RJZs#j#{z3***r'R[ +:3rjrnonrOsSksZ"r#zcrB#jB+NROnz +3ڢgf&'^g_2/g7^#'?^.2&.ϲ>"JO"[.nO?ʆK;jc^*>N: +. RR3g/zn{3&B'KN/R;/*Z+o/ +B + +ZCSscOO3 c?3s +;***SBsgi\|jGW1QF.gW@VYaA9G) 6HVgggsk;iдd (g^XhygIz(8gI&so&fio+G)_ +iY<Ĥ_AOQy&^wa!ϳIS'i{./'26&r'g#i8$L GɆI-G8VW)Nh`~*&) SOj^f2g7)Wǣ2ڏwS `))AQyR2.X` !əisV XHV8& )_GFFN??#rb{/xl,63ٱqy''_xHNg?Csgwii>fN(_crJ{[ZJ[k{C/S~h(6~Ɩ6 O7Gggg矏o?3{kK:&^ffoO__/s[k:b^^&&fFƆ&.ZggGw77G_3 +Z^fF6f&^>2S?OoCۻ*"Zrff^^&F66fJK[7wwwGLJJZ2ffFf~.Z +Og__o뛛 rB&ffFFKcso7G'/Z&NRbJS/o??oo;j +ZRnN~&^ffzKS'7GGG矿S#R.&f^^r +[۳os[ N>ΎN~^&^jSϟgGGLJg_/c z>^^&&&&&^rZJj /o///S/o33 :bbb2>N^~>b Cg燇'/3Ꚃnn>>.r#3?W3o?/ +:K(F6ßgGW)sN2z*B +S3 +b" +c{ +2v.R:g/N7)VP w)1A 7)CvhȈ^~nw/VVV&^&+wGGG7SOS{*+_' ܼ`ЬVnyi1qylj8Vf/ə iyy׳ 0xFWaW/fr[>i) y(P0(y(Qq!!IXֆ&a)yG( Xx>R'IW)*2n +swF,_aq_hrRni7W )F (?_G GwgFZ+^7[OcC(XV^6S_ 7''g[+Z^掾:2s/3ss/3s˲&FfV(h(~rZC'WW)szn>FV&Ffnb#;_?'cfvvVhhV"*C_)ii))G'skR&v6^~2Z{CoO_?SO3FvVh&.3i iiii)LJ'{&FFn:#soo__'g'/3ꞖV(nII))LJ&6f~kO_LJ__?ShVHh`zn7W9i ig326vƖv&&____oHHHx r.iIyyiiWGwj2v66&b/g?8hH 23.W?))s闳rN"(^f +zS'?ϟgg??_'v8886&zJ_ 9 )9)77ǏNRB6vfff{{[?g'o_''/3ϿZ 88hH`Nٙ yIig?W NzV6bfF#?&;iIGw*x,lphذys s"gII)g7׿kNVv(hS'??'7Gsoos_g@|,p_^1Q?oi'!a#'x(fi)w3?o?n>Gi'g__\̬Vgr>I1-gzƢiwi!aφF&8x R#Sw)#rbooSwwGSSLL,hG)w +)A9)WW!Y 8ضBW ןSן[7W7'OB<| P(#9 !1_ΖFw)Wy_ h^Vvr'Oz +/_73K 3< , Wciaa _W9 W7w Wφ H6nOWiW3b[O[חkKnLLl_iaYi)B6[iyy77iw`hns'i_?g?"3)3{{.@  yoYy2[_G6F6rGGK[?Ͽs''_{ʺ"f` f ?!GW )׷'âV(f˷g'{sOS?J;# @؀x"g ) 9)wwWWG'O*^VhF6Nڲ_Og?s//Oo/S/C3k^Hx )ṉi7wGS26>g'?'/sS3j6 `8x~o + YIII)i)SsNVv((6b#/_Ooo/c{;knF@ `ȸzsɉYaəWiwwOcZfVhH(_'''/Ss##KڶX@`X 6ÉYyiio3zn^vhhhƾ[cgG_gO__/SC3os33cJ`x 8zIayWi)7_SsN((R*gWǗW'?'os?3s/c*(Xf "Oi!9i ǿfh((F2'__I''?G׿sgV0p` h) w!!I! gwwigjbxX(6(Cg/iǗ7o/3?_'?''?VP,Ɖ Wa!YigSf(x6Roi )) +B3sg__?o/pȌ,x(Yaa!yOG7nc g'/"H8H^sWGg{b;ۺo3ãû6hl`fzyY/sK_o[r^(>B++/_7GGOs + jZrn.^. 7Ȗ:HOׇGIɟOo ;NCk3CjrzN~2.b~[J*2+>Nj/j{#CkK/ۇ*C'Cg_O7cO+S3 +ϋb2>"F;(z_fώbS CrSۣ#/RgZck[Ͽ3+B:2Z&?bB>'2N.K^/V{8ogk/FFw{7GGOh'ZHiN3 +sO&J?~r.r_&(/V&'3__J[ZGo÷?[{_CC>"{G6ivVk9hs/{2ÞRO(֗7~') ^xiH;6wB^BK:Bw.S.3jOrss)fg2^?_f/s:o&ϞSkkˣnN+jn2sZ¿>cn2zZ#+[rJJ *:[۳2K#N2CbC2s#R{ZC +jkbs +KJ+k+;"Kr{jʺۺj+K* * +*k +j; ++늚 *ʋ J*;k*jk+ˋ: K **KK***kk +: j{ k++J{J; ++*k*jkʋk +K***j +k* k +j*{+ʋ*+*;z;bj[ +++ +c::JkjJ +:oJ**joSKrj/ BJ{+ [R3k>O?.+s"/RβC"n2~BRs{f>~ +bj>.*jko6r^3&"oWv7s_3ς'^w6n&R/N.c( +h^[Noƛ:7v' +6*[wb_f#Sfn(n'3~ rgN^kf3b^j/o7.jVb憻'>.&RjΗ &+3&obO&"/gR~7~&r~?'V{fg3JNJS_oFzOۻ> +#K/sr +Z뻎 +/'2ώ"Nnk +F +/nZ2v>?rSO +ˋCc:nBKn˚.{b kc 㲳CzKbjSڎZz"rcjkZjZS"zcj{Z#;cszR#{ROZ"[K+j[*+*:ʂ"+n."."RNR2~" ogwW)WWWw_?#[ss[OskIDLP8!1 )YVfHo6V7y)xXHW7GWO.os/>_7` -- 9HbkC7G'~(xٹOsz?;cGSI0\,FH(ё1igi^>Viɹǎ/sN66:rWIjkSjΣjjCS7,z +a )Wٗk67ʞsjrx)__ +R.r*KzZ C32r +hZr)G'gi7g#S;O3{r.>2bC[r2b"b2ʋbR2r zR2+Cf螞b'Os[?o;k# +{+{/z.sr:n;BZ: zbZ.j +*b"k3bZ/*Bzs3;J +KC;+*[s{ Sosʚ +bsB낲";bB:*j". +#j{C"zkKj Z bj:RK[zzkb[+;K +bz+kz+;"j{;;kKCz +**+["R3""#kʚKb{JS{kjrb2jkZ#SRS:""z/.zkkb{BBj2jkێBS/{J/b.CZS{cR[+Z[+b"+ +JZR.RcC2#2j+bk+*+J2'"2*:k:.rBKoB^Ck"/j'.ncjkG.jsk[{#[:S"n{*:N[."#JZnjbo: +/j{{#Zs*[R;J#kJ*J3"RZ/3J2C^:KB:K{ξKoOsΚCrZbBKrz;323*[KNfjcBR/kBkjRsnN3?BZz.# +ZbS2C#/*"k2jcc+Zn#".; +/ z2Bj{KR C":n[ +sb2R^*Cscs{"sCcZz"/ϳ:~3";ZccZzN^Vr+o7i9WB:sJ^Z~Bc[lX p>xh)Y-A!j&8HH'*Z_gr>['?#/_' &P,( V'i9A1yyRohVVH 7_?G)'g?bs"?s0j0&Wi!iqJ'Fh6H:^6O')GO/'23'׋`6@,(8'a!Yo hƈ^^;'))G'g;j +.[/'F`FXHvcGaAy w/3NvFVv^& +#3Ϸ?_oznz#+k .vv6(hh6~)I9 W7#jn~&f^^r2B*K+ z+kcC33s#*2n>>&~>nk[O_?__oSs3+ +z2RRnRr2ZJ*K+ ; ;Kj*+JjK + + ** + +:*k+* [c{{*j +jjJ + + + +zʺ"z*k;;#KKۣ[ **kʺJ* K;KKKK * + ++::Jk*Kk+:J:ʊZ +JJ{K*k{k ++ + +++* kj +k[[* +jkJk*K+K+;*+ + + +:z ++ *k;*;Kk*K:Zz*zʊ k +*ۻ* ˋ K* +*kJ +:j* + { ;;k++*+*++j+jJjꋊ:+* k + + k{k J 뻢k*: +*Jj*+j+*+ kkJ* *Jk+ +j J: +Kk + j*+ ++*j+jk + +k+k***++*kk kj kjk**j*k+jk+*kk +**+ KjjjKjjk+ +j+K * + kk+Kk +jk+j+j +++ʊ +j +j j ++***++kˋ*++k * j*+*j*+k+*++jjkkk*j++*jjkjjj++*+k*+kkjk*+k + K**k++ +: +jk j +jk+ +k+*+K+j*kkjj+jj +ʊjjJ:zj +j*k +j +:jk: +Jj* +* *+kk; kk* +; +z + + +*˺zK* k: k*##jzjjk{ZK*˛**;Jz c;+ jJK +K+j++kJ;z*c+ں+jzjK+ +Jj+ Kkj*+Kj ra"_.(H(~&r_3b+ + +ksoi+&'R{ &j?b"##J."B2z:ʂ"sS3#??z[_S: +O2kKrZ,8:aAa7>fiY'F8 +'G3 k+g2..JsWɉ)w?$$ !I)AA_?g*7AqaֶH H')c&Fn:&6Ww)^&;__NVww&'i bl|lWA1 ؈Si#OiYa8X8h^&vfwɉ6r2[C'G'{:.r7Ww|XGQى0@XGiyy8`fJ[WhhsRG)nJ/r#k~6rW7Cưp)A999I +8!w)_68x#'/KZ?6N _? + 3#+:.RBrB"?w)׊P!AW )gvXF_YǿϟgH('&n>'W)jR[{rNCS"2jBNjWWI!Y)'B(v y)3J:O?v^_&[/kn&;‹#scns?ϣbrz/?а/y!'zOSR.ˇy s[22c rF~Kn^oóScZ[ +b:(`8!vsky G2>wo*N"/*6vRk^~+oc +z{srz BBz" @`( g~G''wi盻jjrrj"&F*c2*{ϏJ*oSZJrn^nRz(^/srR.Ǘ/S'g?sS3SoOS ZRSc:nN3#*ڂʻjRBZzrr.; k +S +Zs 3oo3Sˊj+cjZrJzrZb2..bJ+j:bBںzںk{ck +[;K;[C{K;cC{*k +**JzzJJ* +bzzzz[+ ++k{#;+{:*[z zZj[; +j+; j +j+:"" + *ʋKˊZJ* *jjKk++k k* KJJˋ*jʊkۣ J*[cۋJZ*K ꊊ*j+k++*j*j ++k + + j +Jzj{ k *JjK+jj*j+k**j:;{k+ *J +kKzzJ*k + +*k+k*j j+++* +kJ +*kkK++*+k; *ʺ*+k*j***jjjkk kjʊk +***k+jJ*k j + ++˻+닋k* +j**kkjʊ*+***k * +j** *j*k + +: ;k*jʊ*+ KK+ + +*+**+*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_german/cause_31_loop.isdn b/tones_german/cause_31_loop.isdn new file mode 100644 index 0000000..6b6502b --- /dev/null +++ b/tones_german/cause_31_loop.isdn @@ -0,0 +1,338 @@ +*d}EьDH$]an+k?g''__?/㛻zr&VhH(VfCWWɹi_oj2^F(((h֖^/G77goSR&v(ȸ(V6b{gw)i ɉiWwGgSf6VV((V(.J{#_'7'O3+Nf6VV((vF^. +#_Wiiii){R^ƶf&~[__'SZn^f6v^ +sW))WwG'kfƶ&>Nz +Ͽ//s;j>^6vvvf~z#g7WWWחw7'σrN^f^^>Jk3SooOOo33+J"n&fƶ6FR{SgGw7Ggϳ2..2^RN +{o'_VH( GɉW:/ϳ*ʻK3:"r2bJ_/WW l0`0,@VIyWw(ؘHhhF)iw3nNn6g_gG)3)̤P,paA9mׇ7@ f(fO wgi6fzf^#ǟG)is'?Sw l6gIiig FNH9I^bcֈh?sʗ χG/3w'\h8lw9rɑmQ)O!hhfxJgiiHS.hVj{siIgo:'RL@w);!iBX~&H!f(#fHx&;G )s cz+P +0l_QAWA/ϋnWwOz('O6hRf)"7WfsO'O~W 6#7w7)'i_7s+>fN&.*;;#/[/#{ShhVI9)ɹ7Sf66&vN&~Z"+#//_*FVH(֢>&χiI)iIW Gkk&f&~fB>NBJ+z3so3x (2ni)Ig"^N66N2z.{C#'n6& X(H&WYwIg{sr~>Nff~2j{Ͽ_'''_F8xhRii!9WyW''*N.n&>".Z;__'F86vx vh8N[)!iy)){.N6&f>ºR2CSO_'_XX ^ +Saى7o7.vfnFf~.B[/'_'gg)W?@l0@`Ss(aIyɂw ig'OSB~6V6b?Gww7W))G)׿$Hx,iyA)hHoiG׏ .HHG73iwW)'#",xp0P W>a7YhJR* 'bHVFgGG )G_?g<`_9iq9h"&/IsO7hȶ'ǷI7)7gOSx Іy!'Sh>32v I  +V8Fo?9)) ǟ?0_q1'!v؈j.~VFWIiy'hVZsgi)ii7'?*|p0,HiOѭA 7Yo֎F6h^W9fhJ7)I7_< @7sq-qyFhH6g_7Ig3f^GwLJOSpp )i-A Aڏh.)Wco?ֆRFc'7)7χwG3/?0L0,(7^rYic^×h>VoIb*W#BֆCJf +SSz.?&Ȉ>?;7闟G[CB.>f^~.n +#//o ++ʚZRnN^~>RBJ sS?_''_'_Ϗ:kR2.nzJZnrr";J[K:* +:ZJ Jb +˺ʻ#ã33[{s#ks + BJz2r..b:JJ# ++kꛛ;+{*KK:J{[;jJsc + 3 +k*k + +*k +bbz*bj**+;kk+ ++ jjK[{jZ k[{K+k;zK*Z+"{ꊊ s:j; +8.Sȷ?7&j C2* +rH_׶jff6[#žS +j_k{3) ^ǎ^/Cn"r'"?kzvI@YKW/)'"~gk;)&NV'^n")_SϖWVNs#F26Nw"^*'kWVn~z^BSS+NjZ'Z>R7& N2jk22* g'zRn*_c^or^3NrJ?"2n;32_?Ww oRcN3Jf_n :Z@F'o{7y ~wH2hF>.R'/oG?7Sn.n~^.znGF(`2`/'OIaYiin6(6SwS)_ʆNfo3翖sO/.G.880X( a9!9Vf +o'N'FB://" +'JhX x(>; y!!9IiwʋfRV'Sj_)_nnN^~*Z.[&2Hh8VOwwI 7JSo3;N('ǃ'?/_/z;rJ^g>>S^/*.^&BZ)7iwz^jΆ^'':G&I_FVZfbfs➃J&&b +^ .W7WJWNW>#>niIֿCk&fs^瞏:nVo6g _;6? χwnihh) bg{_VgH`JVb +Wh/k~~#g~KW׆N/n[_76?^Zjz)'zB>/2S>?G[&^C.SbkZ#[{3^Sb_>jcz./z{#J#Z +kzK +j +/K.S{KSj"K k+;" j*+*c; + +k + ;bJ"k[j+[j *+*kJK{+#jj*j{ +Kj*Kz+K ++kkj +kk*ꊊ*kj k + +KK+k*k:ˊ + jJk +** + k;k +*jK{+* +* :kkj+**{+*+: K +[KjJ+{; +;kK +{*;#J +Kzc{Z˛b ڛjc+[k*Kʣ*:S2J";bOb.cb{k艎_Br/#R;*>/~2'&&GG.{3#bC'6'&&Z:.+{WWi+.hGZGG!{&vrS [6R7cswnjG(6/Nˏs sBG&rr"+job?{6?s 'R#Ov{c rsfZ{^/CC#^{R~^o^n"oJZJJGs#7r/:ns*Kk/ +2&VX0gF&*7)wnS^^ʳk[giIIb`AH!a_fv8(2sO>(h~2Z'ww'SNJNƒ;_fX0'! iZzN#C{nOssoG/onj. 2H(8wgYI97/Kn3n.ʋzJ6"nj3."S;cr^:3nNΣ3FR8ȆB&F2_'_)w_ϳjC;2:K3.r*n{[S +jRZBr+RR.zʢ""NRS2r:;r +"[[**Scr3SO[:s~nR#Nr2F#brr*O.b#_c?r3S3~3ڇNSj^f +j' +R_Zr/oo#^KoS"2j{RJֲ3Nϊ^'* +C_G_?{.rck#3."nZkw.^[{[[ ?>.r(rg2J{fBڲjg{Jkr ;>OΚ&N3'3Jۢ~Nþb/:*KnSNO*JZ/n"R +{+Nj +3SJBJ&._g.Ξ2#Z"ʺ'g^3&j{_2 Zf[/ ;~ #^+#o:s.#osZrnK{_i/?vV:OJ^&^*Wnn³_;^gJJJJ./3N'Sj"j{2ãjS_+ + +c;OZ.#z.Nk3/3*+o?"/0|l^!q!og'(1)'ɉW:(fcWVi)s $|HGb6aQ'n'7`)iyK 9雸h^vsy!Ir'7kRoC?iIdpwih9--'fVp 9:IȘF&hI)s_B6fcWO'i7I|@ihmQmBf/`(G9 G 3vF(N97_WI +' +)__ W|g:ʍ-i&^/ H p^YI)IAAڈFxH(ii_'')i +f[*IWgWiiZ<,RHNmaw).H`7AA.F&X`NO79! zbZ&NGGSWlPpV( 6YAa WiV'i)BJK;Rfvs;ڊjËzjkjsC3{ cJff^&&&^fN.BJ{SG7G矏*.^^.nΞ^&~:/_'/;.Ύ>FFf^‹3?'G7wGg'Os* +:b"Z~>N~^^*;kkSSۛ:~~fFZ {oG''g'osS3;JZr.~~~~>NB{{#[#ÏSs/s{2n~f&N.B +oOO__O/# +z2r..n....z +*SS3ۻ*BRNNnRR+[SO__?OOck JZZr²r.:z:[{[#s3ۋ* JZRb2RrjjSooo#jʺzzbB2BBZZZ: +k[{{{{{K* +Bz:#[/sC `iSK+G)_6R/;Z&{:ΎrJ_Sb2Rr"J{oS_S33 [&o7 +kg㞆:c;>S7GsoWpHWGqIy^H.?"ZzBN+/O緷cog_9\(,lHc Q 9ay vgGgaCvk>c)){c:7 >Vp_i8 -IS8@h'7Cay"fh( +_iiGs siglVMy!xg6??BaRgrk7Wg'bsSG;l!xI&퇉Gw^?&G Zʞ((:>&3_z7O#'k# VfnHHx7/'wiy)G_#k +NF^N2*OooO//3ooRV6>vhhFB/')iwW )gGǏjRb^v~vn //'g_?Okv(hXH(VNn_LJ9iiW ig7oSNfF^f>RJ +{/o?'__? +vV8(r) 9 ii'''2>Nf^^Z+*Cs'_hV(` r. )9 y ) 7gs3^vffF"zs/___'??fh~_ W9y99ww__s:N&6"Sg_g___'XXH0`v貋N i y7C:fV(K3ggg__'^8H0Rى gw7 +crfVH^r[G7_gw_?_g',x8( Y_Z'1~*a"^>xXƈhJWkiWsW?WWח,< PϹy r?_ y_>^ x&o 3oW))W pPp; a?YV"ٷ 8(8(GOs>C/wi'Gp>sF(gONY!Y *W> x^66&S)Ww3[_/*"[7W׷g' `6I1AhKO/G2^Ga)o8 hrni ?zkog))7'_w<@GXC1a1af7 #` FCWO[_7w7Ͽ'wg|0_Ws) + GYwW`0 wwg_Go*o_g_ L8*IqIS9)/sɹ'7&&(.SgwG{/#k3 +;Vp0XƾF~Gg ቉i '_?^N^BoS3;{ZzZR.> +Rhh6n"*sgW)W7?/Kk{Kzc3 Cbr2 +Bkf":#:R:BΚ.rn;ڛ:S'JOszgO{/ +jKOʎ +j ËJK{".OS".?bzccϛ+?~jCÛCr{?g.RkOj' Rk>KJB[*B/>fkCcJg>*_R&;s +CC:+z;C2BC/ckBSf.s*?nb bCFSRNS3ss^s.cs?~~z+C/22.Ƃ'nB +[oR3?>rzFr>c{ +G;:sSR+JnK(&)>jRj; _~'Z;v^S?f_'7{2KoB*'?^3/3sǾWo3~Z[JF"6K?S/+rO;rs +Cs"k>2 +掇/gv^;Jj +R No?'>'& _f +?o+/GK& +?2Nrc*2ZROKʣ"KΛϟos^Z/o{b.S.jJ3"2z{ojB;{knROj"2Z +*K{+z+{{2/bR 3kJ;j +{: + +[K* +{J +;+ +jj* +j**+j:j{KkkK +j:ˊJKk* :jk**jk jk+* +kk*++j***ʊJ k +jkk jK jK;+; ++ +k+: +; ** +k{+j*K*ˋkˊKz*:+;[kk++*+{KbC:Zs""*{:+*K{:+[kjJk {k j ++*Jjj ;kj+J: j + *jjks*;k* *{{rkzc;":kkkjʛ# ʺ ڋs Kz; +b2kz[zKj3ۋkj:;sCz[JkZK3JR3c +J; ;jZ+*{ +[k;c"zJ "3jz{#: +scssjR#3.*Bj *N*ZO/*Z+k#s*j; +z2zJbjz+z{ʊ3z +KC o#J.r;rkK#;{j:"j"++oj +: +rˋ 2;"J; 2Z+* +j;˲#;;#jj+kˋk3낋 +˚c +J**J;"B*j*+ Jb +; :R:kb{/o3s#OZ.Zok/ ַa919>(F &NO )(hF#g_7S{'7CGi!$1gyAVvFHWh2w&ȃWJ&h>9/~Zǻ.gi9׊.oG7d|VG!6mkx螾Y3"7(V*B憃 o*nkGǟsC?׹c'1 iV( y!g (HhV"GFsۻzGGswg/_&PG`hKIa)(А9vqO#` _(JiNf'wSo'_ww_Wi'3g,,`V`=p HAG/9!Rx2H 'bZG7)_RCRK#7WW?oo_<(qwIF9&h_~y3_Vv^h~B3GϏ'/#s3O/g`8J_Yw)ySswZ:/^3n^2&n +:[g'?Oo*#R؆(H`(6^wÉ9ɇys*/2Kr6Ά&CO o׷7_[sgrJ&~x(s7)iiON*6&&֖^^2Sg'?_' JΖ(6(V6Vh*cw 鹉7G{;ffV(^F^rzg'7g''o[{ JrV'(V H8nz_9!I7Gk66F&^^nRb:n3O+㳿?G'gg7?/s__phP0XXvr&ٙYaaywIn^JȖF^2SsCn n~gG'G?c0PpXHzny19>~Rfhv(n.COz.N3gggs(pV, `f:ya1[(f^nJ?Coz +^2~ +[?gww緇o +3skVHxP`XXB!yy7nF(vfNok[Zۋb2β:Js?'_7Gg/*[*.@`А 8x.fIYa1!ΈvV6bsc +"/__Ooo +O`Xx FF 99)&(vfJ + +BV^gc'+ROfnN.2hzvHVv'gy9yWnN>^>N>N.RBk{#3ooﳳs Brr2rnB..Bb*JS/ooSss3C*B.r.RrZ+kKkKkۻ*kzZZBZ"Z;K{c ˻j + ;{cs3sc#*JZrZbJkK* Jj + k +˻ +j k*+;jjJ* ;K;ˋ*K +*{ :jK +* +ʋz* Kk˚+{:Kj[[+k[j[Zz"kK+Jck[ +k [J++˺R.S + +[ + j"jzK+Kꛋ;3kʻR+ 33^~_  n/Or{nsj +z &S::~:N:^'&_r#ﲿo./Ƈ*"++RNc[?RzCRrNs3f^7nG?ڊ6o/ +s?i(2.2JFgSr&k)Bkz^?R7nnN *Rs3oo&n^ۆ~[wjZ2{c K) +s O _O&Ÿ3nrg^.czZs^ _SF+ǃ>K{B'*^ Zf +[>B #ZRg +z[*+B{bb~Br +*"ORsS/:"'~'j[Z+sZ"r2zSjjz{;/Ύ_*+:ڞ/s"oko2Z3No3rJ +K3n/#2z+rb ;kKk*";OJʃb/j/" ++rʋcbc:"BK;zj۳+Jnkc{J + Kz*CkKr*rZ:j b +: c*3 sO{s#[{J{*+zbCJk:Z#x'rG ٹa!YKV+&. /'i7;O6v^/7LA ibJ7!Yao!Ǹ8H^Vf_Wb'LJ wSs_'7')K((nN;77i gO3o7X ,H~!!aaAch(HffR'')7)G33&H(&(8^r7gW)))3C'`pl'Ɂ!_&V^^3'闷v^^#J/'חggg?8pX,H`gaaA!!O(V8>*_)W)o3(R~Zg_7))w7W_v8pxl`GaA!hHV^77iWO~FF(vF ow))i׷O(pl`x a1AA_(88Vv3gw iWg?#VfFsW)ii)WWG(``lp`(/IaAAIg^ֈ8(6F';bNvJCG7)i)Xl` Zy1A9׺6hVVOǗwWg?On~F^^/w׷?Xx'iaYaW766"/ +2B+/oObcN?Fږ^(nn +k'''g_'?/c{*n.ξnBZz+*j+kKK [C:bRnΎZcso?OOoss#K +J:Z"BBB""2rRRrn.b +[3////3C{{[;JJrR2zzJ+˻˛{{{ +"bZzJ + ;{[{{[[c ++::2zB2Bb2:J ʛk ++" +k{3ksË+#:z*:jC{Kr: +.z;2:ʺjKʛ"jc+*[ۋ+c:C*["ڏ*:jNcB[nzn#;j[ +  2/?)r/33j_/3NS#n.f*b^^Rz[o3'K{snˎ. :jۃK2r"Sg'7zVBv^CGKi W)wzƞ~&>RZss OOo.^.>rj#osSsKBzzjK;[#ã *;Z +": + +ۻۻ * jzz +:"z +j j*k;+ +2*:2ʺ; Ks3SÛ+::rr"B"J+k**z +z +++{#ssSC* +*"Z₢zz +:ڢb2ZJ Kc3''?/C2J +bbzێhNVֳχ)WW)oƎ&v;[S'㚺^^&6V^sww +zBΞJ{8Fc +9 )ɷsg^.fs3w?{*KFhVƾBG闗;oڎJss&8؀8֎*IYa:sZhv&7gϺ.2^XR"NiiW S*O+NbJ#C*6n x?vs91IHf)N~J&Wkr2?Nj:S* 22:NnβN0 KAٖ&CNiaWsI3~)/:W_3G62G ( +OR֞_~R&('C* +g^2/Bc"6rK?OnR)'3Fo'C_3hZg/N+9N>6[Vw2v?G_.WoZ~3)#' +)FB{s['^oS~.F·S27_'g7_?/ۆ.nbN~F +W[/rk'~ZK&^*S>rR_o7o.On([?N^>RJC6__kf**S"΢>[KG/'_RZ +#FF"sR:+~ڎ{7Z2w_w/zcBj[)Ƃ. +r~~~s2+K{'F"n +GO +&J2~.:&zSr.*3S#{+^2:ror2bۣ3*C.&;[>jr:N3n3s2#~o;s3;sK+ ": + {kk* *j+jʊ +jj+kK +++jj+ +kk+*˻+*kJ++ *kk* +k+jkjkjz +++*jk**++j k+kk*k++*j++j +jk+* +*kjꋋ**jj++++ j**k++k+*k+*j++j*++*+++*j+k*+j*+k++*+*+j&2c+ [#F~3_'gF.;Cb^.ZKRrr*s*3K [Jʺ +JJ +z +Jz++JKK+k*{kKkK +* jk*jʊj ڂz +zZ+Kۋk[#s+#cÛj ++++bZ +j˚ +Bb + k#j+K{ k++[;jCk#*kkʋk+Jk +*n>^&F& +?g7GGLJ''ϿOoOK..rz*KhV`xfhhgyi9a!7ZSJVhvBwi7'CS{# +X8` 8H{'Y9Iaa9! 7kS&hhh(VrcWWw))7G7'_So*HH£^!a9əi[/&hHhh2.s_gG:Wi_חgG7gor0`ۉ!Ya!I3'/&>X/ǟ iWi營/k+s7/,iZSA!IYn'oDzs(8(6j׏ ))wg?gnss/O?7l`Ȱ ;AfWAəy!Iy2nW +gjzRnh(6(r3c_)7gbjkjJ" rSr,:hlBGY7_On_cێFf"nNg?W'g*Bc>+2jR.n + vVg'9WwyI 7wB7 3^>RNR{rrZ Cok_ [fRK~3N2&7sigiw7;g?2& +;s2//K?~; ?{>c6n;O.J7 sf2ZK>.+ZGV;noS.N?b~O +n#n(hrz>"SKϖWj*>Gj{ N;ط(h'>zg{>7G2z;Gk)'rƇ^+w*rjo;k.*(>Sz)Hs7~*[)NVGh7R_>_ + Sۗ?G_/fZWIS&g:rG&3r3c/fû{;3Z>'.gszR_*RZf +^S#ocBsk+ ++;J+* +KjkJ+{ ++ۚkCJ:K JJ ++Kk˚:*K*"c"*kJ***:Kj +j+;ʻj +++ˊjjJk **+j+J++k* jjK kkj*k* ** +kʊ:kjj*j*j j *++j;j+닊 jj+ +jk +jkk + +jk+j***j*j++****jkk*k++**+*Kj+++*+j +jkj +* +*k**+**ˊ+k++***++++++kk +* ++kjj+**++k++*k***jj+ ++j+ +j*++*****************************************oYv7*O2jk +6?'bþXG;vIǂ9WG(~(c&vw +?Sz"b/6_{wr&Z'Rj/C?+S*SNr_zG/6zgroZ~bkz'#>3wRcf sj73R32*/J—j22ϊ '{o#7ns>j{Nzˆnw[V"bc*SS+" 'rNzB:#NK?"BORrR*g^r~KJ;O~b>g/>kϷn~gkoF; +z2^_~R""SfB'oR2G&GgN2S/.7r^JsNnb' + +j+C +kS^˳SJkKz* +r#o{zk""s*n"n z{b+3&3"cK;Jr'S/r32~3z3c.CCs/*JCKj[JbK:srsr:r^j.+Ksc:n{ +b*»Cڢc{CK[Kcssj+;> +ΞC;.ZʂZ" +jK+Rr*Jr kJ"_'''''gO{k3CBzkJBbnrr/0X6Yy鉹I'oϏc:"nšzCڳ oʛk#2.{RCj2ڋc +S` ^!99y7˿G;oOFf.6H>wo +s{jۊ3+[S,Pn2a鹹Yn.?'s?OV^hv6g '3S2'Z +{jk7ǎl w9cBOo6:*7'_'OrFROGg?˛*RZK2o2 +[0h6Xya׹!iOKSRs^ʂg? +^^8r#GsΆo *CR*:+nrj:K 0HV2i')) )3COJ#+3SncNjsKr.Bc2RoN~J֎j2w)'''S3;:ʳ#*¿{^s.Zϛ&n>bʂ~+jʾnc/^κ.br#?o__s[*Co"++J2B*J[s^JBR_B: R.^**^{&#_kO + +3_ۊZo/r3 *K+~S& Ÿrڎ[˛JK"/>*3h +["K.b3:Coj:#:Bnjf:;.Z[n>RN[+^b_b+rBK{f*??J6snS n{2zz3Sr2zcB+fB#bb{K3+ڛ+r"/zSB/ k{o#R?ۊjR3rr[_++;Fjo'N rnz[{:.c2k{^J23z{fgZ>?nOjB"o_۞rCKZr2'zB/Nj/KZc:23 {/z#z*KK +_*/RsB//*nJoRfr#>:+gJ‚NK n+/ B/3R3Zos+;Sz~jC K/33 +3#Z KzJk +s {.+J;2#c>:Cc3j{::KR+S +#ƒێꛃ3jZ.r#rk[²BKOcKoZSKnrz/rR[+{k:Oj 32N#{3J:k2Z΋" ʢZ++2.JZ2r;+"{'g'__g3{R˺bX@(Xv&[9a!iFHֶgG_{Sj";[#'G{0v(@hkG a!q!aVh8H((&2J+'_WLJ_3KcC/_ ` ?)y!Y1!i_S~(Hf&^o?G/S'( x6Z9aAAaai&(hh(vvbJ3_w'o* k*+coOKVظV h&" !!)W_ +nhV&>s_'?S#jJK3C NHH(6&NK7)I9I i׷σz>~^FvF&&.*㳳SSscÃC[{ kj:Z::rnff&>2+_gGGs#jzrRN~>>nRBbZz+k*jۣK;#{{{{ˊzZ2.nBbjK{#cCs3C3C3C3; *Z"B2r2rrB"Z ++;{K{kzJz +j**jjjk;;;ۃ ;㣣#{K++JzzzZ""ZڢZJ*Jk* KK*kk +J +kbZjk + + +  K{{Kk* +z +z:**k+*k++c{K j +Jz + +ʺj+k*+++*+jjjj*Jj j +; ++z{; k +*KˊKk: +k*** +k jkjk* jj +j + + ++++* ˋKkkk +Jk*j껊jKJ*k**zj + + ++k*+Jʊ +* ++ k*k+k*+ +++ +jj*+j*kkK kkkK**+ *Jj +++k+ ++ KKjj*j+Kꋋj + +J +**JJjkKk*k +++ ++ +ꋋkj;ˋK+*++늊* +Jj*kj+ꋋk*JjK +{j+J*Jj +++*+jjj**j + +*kK ;K++*K j +*j** +j +**jjj+* Kjj *j:+k k + + K +ʊ+*+k+ +*+kˋk***: ++*kkJ +* +*+ + *j{;jj**ʀg.b2Bz*r*jzrNiw_&~>nnRnZ +{3* +:KKJ*ʻk[۳zCBR +{#{BBrKkoSBnJnrڃ +cϿC*kCo3c#;{*;û>BΆƆv؀X(9 YY9)f6f>C7i/*+cRj/__w '$Ia--ZX&8Vg1qZjzV@HNGi hNNbgiySjZ?Sn7wv'y :&6( >Gj[GoFwGWc~"w +rjsb,L~i!))!AA_j'yAǖh(x6wCb'&h)ɗsg^rwK_(0L,yWV(o Kǹ!!9VnhN"Ʋ'&3g' ;_Z>ZgGr_gNH wY I)'h·IGWעVh6ofn>fn^s?G'Kksϟ{ +jں{#謼l1I?W *h!3w fR?#Fk3*vf6LJIG3&×ח{/_nBncǟVlɿ +gW.ViI[);Vk_F>kVVzlj'32'*GoRR:ڏ++^p6Gb2wGos9 +)/n/#.vcs &V&SG)o"K;{?b^^n 3szNR2x&{W)'{2csw)WO/ks+.CξBzR.#'RCk rNr>rKNr.#;?sϳ3o'g'#{s;::K+&n[o+:*SCn +::BB2. +BrNRB&[ +jO?ss/33*:Z:J + + N[.b{J +Bb*j22Rz2":;j{[ +CosSsC* cCc뺂"Z*+ +J +** +*ˊbښ2ښ +jR‚Z* ˊ c +C[cSC CCC#+jj{:z:JJz"Brr + +Jzbr +jJZ +J + ۻ*j˻3[ [ccK;[;K  +ʊZrrrzzZBںj++K*k*k[s3+[C;+K# K;kk +z:J"rr: +ʚb²Zʊjj+* +*;{ۣ3#[#ۛÃ[ J +*k*jJz"zzB‚bZZZj+ {{{[C33C[˻kJj++jJz:**J:zzJ + + +J:z +j*+j +J+kKK[[#[{[[{{+jJ:::jʺzbb":2.:J**: {3C33[ ;+Jbz +J**+k*k++kK ++k + +jkk ˋk***+ K +j*j**j*jjj +j* +j*+k*k**++k***+*ꊊ* * +k+kk**kk +kjj+***+k +j++k **kkjjkk +jj+kk++++*j+kk+* + +j*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_german/cause_32_loop.isdn b/tones_german/cause_32_loop.isdn new file mode 100644 index 0000000..0d0a77f --- /dev/null +++ b/tones_german/cause_32_loop.isdn @@ -0,0 +1,329 @@ +*d}EьDH$]a>n.S/w3OZNOGΛ2(+f:^nnNΆ.3s_7gOo'_3+CS_'GG_xD\L/-_~ ؇33)NH8hGG)i Nr/' wWI I)׃$DQq2WFIiiJic^'#rZ8>Gk/fn3W)2:SGg9으'.a1Yf'f3W'w/_ +~#Jj#vy ;BSK^B)Nnns7cF ,X^g/!Wo'g:??_3j(#G/:[/33f~' ~r^2s7 )?))?g'#ksGk#"nR3&"6[&R:kVßφV2zf˺_w&)#~3ƿ^GsO3s^&JF^g_sRFH>~CFF&V)./f>R7[gkcCjNZ2&vR.wO)i*^Co.JZfRJGO^w_K(6_K#6~'n2+' gVij^{rWGWVV? ׏j +v(V'H?iv6R֟CW_2iW r2zWH3WxƶC~h?oV>/FNΞ? [sY_^coKi_(cRsWʿ^_&Ə^S./?kZ +s;Rښ3*sScKo3srk/sˣr;[ czKKkkK˛ڢ;3[Š;*{*+J*K[ +ZZ:jK;k JKk +k+ +j#j+ *jʋk*k+ +Jjk+jJ{ +jkj:+ +**k;* +jjk kJ닋k +J +k* +j*:Jj*k* +J +jjK*k*k +j +*k +j+j*+ ++ꋋ j*ˊ+k k+jj * +* K + +jk j닋 kj +**k:++*jj+* +*k+ jj*:K[;{+k*J***+ ++ ; + + +*n?'Ο/~r? .Ë +ۛ*Cڃ;[krzc."{^IA96vyB7~g7fg>:>~:x^)9{HgVCGGRLJ.Fg F/g>Gv_KWofV'&NgR_JRo3&SfS.~) S((r'^'3/'>Jf/:vF2*^FGKGn>7' +Rwr'6柉oV"wr֎HH `I o9q1a׊xจ`HfWIyI7G"n /~")8 `VϙaYAYúx&&g'W׷ObOŠ#_3^gˆ^ r&ay)i^nC /&~ss[sO; +/Bskc>*;jNbJ*R~V&kN~3OWg?_?Os*#;Nr &..R3^fZj2j"brrsK .:Brz3 n C/sS32ncZG?&"V۟^_?;&nJf'VO2v^wB6z'o"z.*gOfvFf^3sS6V;# +O{R6֖S'/:[Ϛ&j*J322 w/"n&nk/o^&ZϷ)I)_32+?_{:(R>R3S)ꎶB[_S?Nf6(f23'G_?nOFs#ocoZ2#SCK^^Zsoks/ww;"r~{&"&/~zo +j;"#sc*zRf?j.o*k~&"oNs.k{?sB k^z:3ZrN_''&;K*W7GÇg>~'n[.~BNK[ϟO##&:k*9i)3Z+nS 7(;gs~rr{玶_ ZF^sz^Ss?Ξ"KoKfS +J6rχjSR[nKC>Nkj{_J^BF g#nkr[>'* : +^c^/ꃟj;:oF?G.?[  +J;S''K2>Vò[22.o3r_ZfN2;?j3#oSۏ_+K2'C/SCnS 3r.#>;+R"j#3ꂳo?oC_/˂ r O', pW!AYWy!I88(6W7'zrbǟ3{s/iI <$aA1S'' ^S IW.f[" __g's zkKc/7ijlsG//{zg7) g@lL8w)N +`hB1yGȈii"R22 )i YQmm?^j/v q8 (&~WI"ZBr + RL|-ma'3FnsVx@Oq19kxV(V YIGz~Z?)iy90f!---3wg#x@0ia6fXw vC~7)Wɏ||Q1!bgihHAѱg~Fx RɁAB.bz7wǗ99&L 6aѭ!yp0YG9)c 'ɗwW)cn.7 II<,a17ya9axP08'w9aaai H^^& !!&:sZFfGw7!ٗ$laa9 `^HᱱBZ3~X*) )~{ +&./[ fs&(ɹ7//'7gbFǏ2[/b:bn2J*j+rs/3j*s3"F(F3rֈS_CRg_Zs'Kknzoc#³SS +33:6fZR((^?'g'W)7R΢*Z2ʛ3#?okR2jۋJ/s* +* 3'G"XXVfVx^Ii7֞:')w~wkFkó?bR +s' fl 2 -1Of97n1AxhV_II7ii(vwa<|/i (*-Q^6Op9SYaq'`fa!Gg֖'ə!|p_ziMM9HW.@V7G)!aAw> `8w _c2ƶFcwIiIl 9f# W_>+ HGWA_A8N886a92nR&'wG9\kAipi )IA'ox 7WG9Zz:fCϻoWGOOI[z~[zr[/{"^žhN*g'wGg?g#{_[R?ʾj*F.N"Ƣ +n+`h28wGC3GaY !ɗ'3ΖCK:"^RkR.Ko3^c^x('2!a a9j~F&ƶOc +˲+&RK:J XhX`+gIa!91a JV6֢r:[.OOo + +? 2jJ2^SrC2{B/ox whəIy_nF&&>vNj.#r +rJ{rۿ33S{»+ +"r`(>N279!ىWWKzZ~rZ2nnjrn/2/k'//jc3J~^hΟwWɉ)GGw[zJ.R^~枞2>:k*o#_*_j3*?:J2ξ&6vf.K3O''7Ggg'//ck:2BN~2>^nnn.:::j˃;#sS3C#{ [{zB.^^^^NBZ+oO_''_?sSc;ꋺ222.R.rBrrz:zj++ k{##;"Rnn.rJ [SϿOOOOo/3S;;; +ZZ2Zbz"jj{j㻻s3 ;:brB.R2:j*ˣsS3o/so3cË・j:+Z +B. +22*;#3z2n"N.z{sS?s[+C{Jb#zJCB+2.k˚2BkrK +C"zjJ.Nj[C.'#3Ss#rBzjb{s{κ.fNr2b*bSCk[2k+RN.^.Sk?og/cZ jC.J23/JBNsCc2/[:{SJ2ffN&rOO'7)w_g*bgNΛnzn +Jrj.+c3bN.o'r?S*2F>v(((VgW)i)Ww7go3+ +N.R.{kK?r'3/bΆ&x(hVF+gi9)iG[fvNFRr*ssoC3[/7Vxhx 8xWɹwgO3Rrƈƈ&Fv{NJ/'_3OFV fg)IIyٙIW)'?hFnR.k'__gGSG'LJ'(n~`(`@ xΆ2'׉I!9Y9)/NfvV2^+sS__g'_gW +X 0``׹!9yyoC6f^v&N{3OS?_?gGw7NHnvx`0``8.{y!!y!y I '3n^f.ZZK㣛wwOVֆ XxxI!!9Wi'nfB&frrr:r S?g''w26X8J_i)i9 7_g+s2>f2r^n⃣{'n6XVr7G9)iy I?rB^RrNZrJkKc/O;^v hH^.GgW9 W)iigws3Zzn‚BBbKSS((hh&Bow iiiW)g'sꋺB&kb:rR33ss3~^((xH(h(^nLJi)iWG'_#sjskk{zz +":Jk+cV(x zC)Ww 9G +;2* ++ZrbBZJK jZ6f(Vbbs7ww_?Oo/S#Br.R>RRNΞff&&B"k3sLJ7g'_OZRn>^F^&3^>*jh"'GG)gcjOoJ +"ںnj>J2N~j[.[zS.{SsK{/3?Sg[/ϻ*κsNb~ϗ:? +#:./2+sNB*/{&B+/Άf Nϲsˢ.Os~RóOnhrRRf6?z+/z'2^^ +f"o^("Rb^;/*/^JSJ7'Z{R3r/;K~o"#g"2+kbR +r?/2s#~.Z_Ƃ^~OFK#ZJ7'jG'&&6'7n ~.rˢ>fsfF#"VnF~&>bfrG +6R?2.*.N.Ώ/O)/N#oJjV(&"nB:cjg.;_bZO7bz.Kk[?S&{:/"i oi)_&F~.C)Nƚ'nBr~Z_w.~oo?F*f.&&~'n?[/;r/&Z.ro3nf2nC^_rKBo>&JrJnC> :+n/#"C.2;r2*nk#+oRZ.z2B#OSz2["n;?j2j.3{3Z[js*:kʋ#;+kcKz+K[zb{kb + +{b K[ +j+B KjCZ* +jJ jjZ#c#"*zk+j +{#k [Zjʻ3+* B +JJj ˋ*+*+ kJ+jJ{ +ꋺ K{Zs2jJKK; +{jB*c*K* kK +jrn[  ۃjkjʻ [b3+KZ jz{""K2k b cZˊJ ++#{:3kK +ښ+k+jKۃ +ں ++K:j:jKkjZkkj*+k*#{:#ˊJkJ+ +zjz"BzJz2bz::J cCSo??OOS#[+Zz"R&HhȈh^.?W9 9iiwg33jrV6F&^>'_wGwGGkh XHh&#Ki!I yW wGoorR~6VhV&Z +WGiiwiGgwGOKvx ``v(6'iyYI9 WǷg[K"~^^(h(^?/'WGIW)'O@ x fv~''9YYyY))g+hh8V(^gg)I)WGoS36~'a!!9y))gbf6V舸x(fh?IGZ +w ׷w)?X$g#-!2Q sw``X/j>CKv`(wI3)c.cksgG7)_Cs^Xh9)'Q1^0?YA!^N +(W Vxh'g3N6J_7O_?{_+KbPVqAi J7Aq3(;2ff /~K;F(V/siG2&.s'{*;ss/x$OQ9`haA9ZW87'".sgF8VN^ZGώWh +7Rw;2&g)S+O\~ -8ibXzRg)7Vn(f'/hKroso> K_/B'3KKo/[(@L@i)cy36V2I3;9i['{6N;v_so⚇.2grS^/br&3 +&V +c'O_'Ͽoosˋ +ZZ²rZZʺ{[kK#3z" K*j +k jJ +:ZJjkz{ +ˋ[+ 뢂j{[j + :*ʺ {KJ+zJ Kkk뺊+k*JZj*J +;*j* +ʚ + +[*k + + ++jk+k*jjKjJ*zj *+kjJ +*{ +j*;Kz ++;KKk +j + +kjk[{ +j *+; j* +* +j K+ +;ʢz+;kkj+{*k +z J#뢚jrΣ +krK{ۛ+;*+ʊK* +krꋊ+j+;*닻bK + +#*z""K +{k{ +c+CjzKCs[㛚.rJZ +{+"jJz:Z:Kkk [[Kk+ +z{ +: +"++ +KKKKj +*kꚺjj+ +k*;k +z˛KJ:kkk+*kjK+*j j++* + ++*K*j + kJ +**+j**j +j{ *ʺ{* + K{jˋ+ K*:*k:jkj+***+jJ*k+ ** +:jk*kk+* *+k*+* ;K++ {k*+jk++jj*j + ++ +j*jJʊj*ʊ +j*; ******************K[{K{{KK * JZjz +zZJZ:: +jZzZ.Rb"z;[s?'g'K"Rnn>~~r222:6nswiɉ Os#["&Ff&. +S_OOkB*v` ~oWIi)W_/s#2NvhfF +S'7G7G/s[C#;*jjKFhv V֚_I9yIiig3 +r^~66ȸR^&GGWww7G?3c[Sj+#x(VF (Z9yYɉiiwg_#O"2~fvvv(Hr.[_Gg7GSgGsh,, yɉrBIɹ7w痉ɉG;nN^HhhvǷSno)7o: gG7G?:N:wⰤz'2gGZ"3Zo_ˋfHl QyKAxhٷVvb犖r[/nJ/'S3Jnb_7G[SH,`YmMw7AǸx{wkh377~^_*~ooûS_C gggFXܬv ah XR-ixNW.6xx'7?~./gj>J?'277JϿ7x줌A 1&(6 H9-AhFfIa9X6Â.2'C.~R+#WN9_f ``AZ*Y2&^(oww*z_gϛj#OsZswzlPVAI!(@@ 3y) I7vVso''ΖhVʋ3_C²b22 +K[_'G >.^F^B3oo'&R +;*?'_gQ)x3vow K^r3'#~[CJ۳3;jCo'7(f8C!3OG 3&.#&fj7W__';&N&N#C3[ bʳc3S?8~RrGw;J:G_K +g?cf&^s/[S[cC#:rF(&3Ow'_?c3{¢K*z .R.r K3sKjj>fƶvNNNo?'_'__*{{BRZJ2"K +zk{;scs&f6F^Nnrj'G/#sC2..R.>N.bZ"KC{CsS3+R>f&&ffn2:3_Gg矏Ccۋ:brn./R(v8V'O'Yi))_ζ&:zNzrOSFnogo?_)P؈v(89IwsG& {.!+3'H .vF_oO7& +^J?O/NhV>"sw)W/Ss#ˣ#k#SʲB.NB>0 VHƹ9Wy!!o&2j~(gS7nRr 3Sg? j2"Z{hhHkGiIWgsn.ZS?3{ +R2?O')쬶ָPX19qqn/8 cwy &rsV(OsS3;n{/KKS?o/ +ph IWG7yg?Vj*."g_O3 +o:b.R Zo/+*r[Cs˺`vHg 9g'[NZ +zϢS;s#ˣ+Cjv.JZ&bN&N^&^~^[GWwo7#s3/۳{2B#b"#J+2[r".rORs/R j"?zZ[/ ڏ.r2O{{3K3'S_:*/2 +'/.Nrj~oZo[{jsb;K/Ssj˻+'.ONBΊ2.on#jOcsRO*KbB2o +.S:ˢZ3g r3/+ ۾oK2jRZJ nk +Rz.O+Ssۻbs ++ΞKrR/2sR㚏S..sOkJ#oSj*.b.Sr2r*{"[jrz#k*kk".rsbj+zZ[R3Zz J{nK΃ +/*BCZb3.R*ZZ7r_RcώRs{ Jj+#K:z {zjnjjoOB[{3j*JzZBʢ +:bk3:/cr* +3jjj:sB#* +[:K:{ c:뺃sz: +zZ{J+:#bkKz[ c2C: +s;Sz: "ojs.*KkN+Jz{.{zj/:/r{J[NnZ*??SJ3J*&_^bKbn)6/Fg{2Ώs'n&_gR;O3>/"6)(G3ng&&"˟g^O"s[rn*rSBR3{ێ:3K3[Rj{+S.rc~.k泇C+>{ncO +3/";/fo7*{_J~B +r^g.NC.'S'z[#/f'2˿&Z?32G;"OON."2["6KB.:nk*Jr"zkZ'o&{SORRSn:o^>^>3S&z{_s/KzCrrJ'~^cfRz +R*gBZs'B?>sS{Zo3O*f^fzNr"O* B*g&k&7gK3#r?O&J&2 Zo.;* +oCSrz.R"2"3C r; + [Λc;r #˻*:ڢrR{3Zz2S;J.*O + +* +;N_zK.2N^*;O.RgRw?R +{þO^* +nfSkN*kk2+:k?{b2JrC"+r~?"Z^Kk?s'oscBcB~s;ZCK.b7f2[Ë>c~.[s+?OʋRZZ:"b+ʣRS˲"s r;J: ++j_Zz+/[2zCJjSKr#O;23nRN;J +S;º"J* KξZ:R##czo2K?S{?n:3F(88(&S')92F&"?'Gg___//F H@ Ƌ/!wׇ +~&:"z*S2..K''_/N hx hi7!Yy!Y Gc +F&&v^_ wG7GG)0/Sp ",0 Gsa)'#RV^vBJ'o3RJ.r~. gr' +W_OO3 +[* "ZH6( Sx6V7c9IW))Wgk&^V6"2.~OWwG)'xR_`H&~ )9ii )+g~V.fjsB?/Jk*C.2 +KoÊ3S#:Z*+ZZ.RZRKʊ3>S_.6io{i#g/+6Άx.6(bׇi7io/.;~fFK:''gH((~SwWyW )G~F^F6^Fr"3;z{/scS +Z{*";zJ*#Z*:ʎ6Ss:?S?oGgOGg?cb .rNfNff6v>^r +OGW)W/kf>f~>Nk___S{JO Vv:3)yY牷.ff~(Z23KjrJNn"*sO*[S?Ϗ/k#jj.N +.rRJR"N&FFc'w))WiJ7BF6SΚnZN^h ƈ X(>37!!!a vhc+'goNJNƒ?Gw~_lplZOaAA!{>h((Hh?Ǘ &ffƆ*[7)gg?K>@ (f)iّii!_V^W&SWcYj{3n{&oOgbknF^+rCk,FHh>a'1Y#2Hf~ ۷y^Fƾ.&>ƺgRlBSq!vw*.x.awv3~"j))vNs#F>rgl,` h1Ws!)(V)!.~/(S'➖RR& r) nWa99:I)j7sg: +i)ւˎ>~k(n_~~^K."C_gh /)Iڳ)7.*Z>Bs7s*&r;ڢ +?" +kJ3l!R*wwO?jWGC66Ȁ!!V.{O +ûNS;3rll12AF 7IIis)Zv2(@(!#vKgWo'Ooo|1Cᙁ(_gR)if' &&{i +/cgwG_/7 <, ? WgFf) K7SWw/J&2n^架nZsnjoo?__?'(XȈXF^'7WiO/(&N_'Og(^8^7'_OWi_gO''_o2~F~66fk:#o[_S[**r斈hvvƖC_OGgO?S3SSKj +Br:J3ϟn ^F ^&ׇb/Gi_;'*nrŽ^B:;[s[:o+Ck*nB"J[{{kk k k;[SsۋS[{*j** +22bR.22BZ+jC/OOSSSSS/cj"2R.ξ>N&^rb:K ??_O'óS3 oSBz3s3GiМ PAgyCV-a)/y0`YI(g`Bw oiwoizW'R(gNZ.h/G/²3 +~n[#cjz/Sn^^fF&&^~Z#ssgo[k#/_:*3''_'7'?i |Mm-?Hl-aG㉗> `cɱh^IgkNVFwiW*cξ?fs3.&Gj~j[+S_{2 Z n:2N^Z?32GwOSZ.f+O__jZۿ'oiٙd Mfw3^W/I&/3~H8jw_k^K:(VkRjs333s[+:K" +ڋ+ZZ"jZN2*['g&Yn֗Wggw&>O/#Kbrk'wIrdd  aɸhaq,,1)-fXc*oX(B3''gZsC;KϏ#j Kkk?ؚhfW#oS>2WGo3_g_SǷ#&^vF&2"3# +*sw)'>&HXvR{Kf)GkWGWWKk>^v(ֶ־rB.:SoO/gwWwc &vS2^7g))){>&(>Nϟ{{Oogg7WW7.KgZWi'w)['7)7WgsK&2F~NZgo'緷חv~"gFۙW9WC)gi3Nj&^.:ogOCsOϟg&@FX@Nkɻ I'I/kzcrNn^&2.+_: r2hV6(2>"7W)G)ǟ'o_c*.2R>NgB븇w[rSb?[RrCCCo__Ͽ‡S; ÇR~*.bo6#^+RnBO"boSJϾj'3:Rc~K~;kw뢿g'+S>n3x*y/;bg&v*Vb'j&iNf^g('w wZvZg&cWFhG(ho:R黸v#'GryX!.g +.6^ho(WViJRVgf rWoy'h'7G7v~a؇ +Ƌhr:VOS>9h)@ᾈ++YiGaz6_xyVG*vBS6"W/zw('WaH^&nwsRfNyhHnwrvo&aXn6ǖ*kZ&ISfiH 6Ȇ))h N!3wkFi&cIhY J WG)_*/iJX2Ai(~!gș2 Yh׎ &ϟHiGGGȗˇ&n'G7Vro'&BOr''g(fgKrif7ƚ/Ûbsr~.oƳ2_f΢^v+nN'v2&zNS nsB׃ RËRi:ˇk&2&"nR2 +SkJ{N**K*> rB2"g.~z +NwB&>{&o"/λb +kZN +j+ 6?Gj7ZN v +gOrhh SFRڢR#s3f +鎖'c(w:nFNn )(*Jw^'(rk~_jo~f/[KN[ oRgʺrO&J2'?r3S&~c?&2:r~"&o': ?s~[ +g2Z/'NzO;SSnOr: +_>b [).v_#{&sJ>&/_r2kr΃/ +~vs7 vH/_[kɻ.kO2NR:2?+;2BS/";s _KCk2n*:.k[CzN;rso/__o/+R oCRzrJ + ,CS_ QqAWBO `hR)9oBFNNR>ƎWWG'_)iG8L|Xn#I m'NxVg GI9f+>Ko:" +oO3Rr_l hk*.AQQGS?XFG'/ iW/>Fzrr3/*K# b +Z{ClP8v+oyAى)Gf舶˳Cﻃ_WGZ"Rr*??cs_/b&r. +;x@P3cr9ya_)N"S nSzz*o3[S*RrR>BR2H .˿[ii׷'_)sj2F3SR+CS?*nRRNB&{2fNj/c2sVFBZK'gWG_'?*F>Ksg+Sj_.N(* :>R^#vbc>K낃b.rR#kcc[3Kggobk'?*RO.n(sh~J.J[n+#Rk +c##S_r_"_o#Rg2z& oN o"f?o/>wfj6' cgr."CO^_{r +J C/{j*{;KZvW>o?J7?ڋ/&G_V_F?6_kgfv/vgs>~#ws_O oko73^.?)s*2c΂s&ڿ?V_W#SoFN3.J~b>oF;cso#B'6S?N#{oOǺ^kCk>SZr.;3j[R*{[2kBkjzB;+;z{"b;Zkk+kj*j* + *kk kk+**zjK+ j*++ +* ++ + + r{[j: #;K[C+zjz+">"2b#ۋ{#ۃ3C{c{ k** +:bbRJKKJ K;c+3{{33jZJ;:22bBnR +J #3/[3 ˻ rz+B:2+k;[{c[K{;# +*ˋjJzzbkz"#:K*{+kc{"jjzjj*j:Jkjj:kzjj + +[ۋJK*K:z*+:;+;Jk++j*:jj*J+jkj+* k* K*k+jJ + + +:;Kk k J+kj::J*+++* ++k+;K[###{{{k˻;jz:+kJZ>Fvv.k翇W7G_gggg'''o3k>Rn~nR"cx8^'WY!I ׷o/? _fh66fK+K_?_wwGWlF0(Vxyفi9IKGgSwS^HhƆ/7WiW7oGGؼ7,H!FIy!/yێwI)('F(.'w)7gsgGiG,Px@X8y.1aWgWio ihf((V_ i7?37'w .@ q/!i!WGRR9n)W_//>{vvVzjGw'SCSlZxvb)wA)y7gzwrG;.cƆ..3g#3*{2jr0;f ڢ.97g!YO!w磇.:KZR[. +o;ϋ ?&'NrvrF(F#)S77w)i gC/f.^g^#O^^C7s^sbfǸCF&Fdž7>_j^GBv7{oKiGZ(FOFZBw(&# i'yX! +W(vy h(f_>Ch)S HgSoxF(~Ɉ6_{)_GH)֏SWR)&?gn)Yxi{rIV8wGS&)W h)_RxYV_V 8))`_i'>9'I)2^[B.*rnr(w?W G(;oɆn{ f^:[.3>:~z ^fBoڢOW(W?CO?nrk2[R)8xgCFiF&f{.B*r+sNrs~£+jz.'g^'b#2{ >nJ;SbSK;Bk3cb3+[KZzJ{;**k#;JjJCK ++* ++ ++Kj +KK +k˺j+*+*+** + +* +KK*K*k+++*/:kJ{ "k + +*:+*k+;ʻj***kj +j+++J J+KJ ;j**ʋkjj++kk +;j; ***kkkjkjJ k +k***k+j;j kk+kj+k+j kjjk+*k+j*j**kjk*k +*+j*ʋ* j*+*kjk+ ++k +j**jj*j+****j*k*+j J++*k****bv6Avr/S/O`iIw&[ H{R!Iwxw7+i68 VV>s_F j)3N_sSROozwWo w^(xVֈ.Wi'G""^S?';jN:r[ϳK#{jR +ScCۃ nRjˊz&Z +NRS?g#R^.6OW7w'/o#"zR2[3 FƶiGgi7)>&.__c nNv.cr.kRV()WgINj)W9G\ ~,GɃ1 VCvY'r3_F h"Wf(x~?Wi7/V6n>Ffbϗ'OF~{Sg_cjZ.&+bBr2:;scCrRBz +c[ + +jkZR [K +3j +J:* ;kjJzJ +[oiI!/fƞg[[/@WhVAVW~ssg؈׉''yWfoǃri)Ia$<ױ=͍l~ɖ ViqmH~h ^gX(GdžxoS"3W^V(^o*s>&2_ BNkz_gsj{Ú"k sjB&&Vf.7/s?'oS# K+k +oOoz. 9|l=[lG)iY19xi !X(+ؘ~gi{{f;jN_ogg"\\`́hA, _W!ẸXi?oi9/&H^fH&ivfOzbg2C'LJ;BJ[X<ȁgjFhpi׸ib6fVHOi /viۢiwkr {n[)I,zo7h?1F)~Y)(z[6^HfI[nWig"#GwW^Yq^_K@p971_VviWj gǖ6^7)&(~S>#wO##?L\.yQy{!^iivh(~)3v:@ +)h9nBwwz?# Ⱥ)y 8g!?sfgƞ/>V {?W.S7Js??wl^` +^{OfVwjWɉǷG +[*~憞&x.o&7_7O_oo/HX0c;)3i)Ri_iSG~ֆ>F薆^*#[:{_{o'/Cχ'fxV#{WgG_ig*((66^rϿ{g'c''?3vVX`hn7+y7i7Oi'w'K{fVv~/O?ooO'?Ï'gHHHXx..'O97''g3kr^^FV6v^£S;s_/?3oS??h8&bG)gwG_O;+&6FVV +jJo'/?O//OSH8hHHX8Rg)y I)wWǷOKZFVV^nk o'gg33/CC{;JH((xHH6&g I)'_rƆ&6f_'_f{S3"{R2.VVhhhf7G)Ii gg?cbR rff2n_soo{ۊ"ʢrz.>f(8Vfۏwi׹yWGwSJ +.kb2R^^n^N/?o'?jkc* 3Z+n^hvָ82k7yIg_o.N2+K n[R +*2[scOS/s{3k{;jj&b?kcRH ^~W!!I7jn~f>Nb/;Jk32._Ϗ/o+{#k*Sss33SSs3 l``(9ai;8VȈNW _ꃞƖf.O'g_.?'gO_f|l(P+aAi -QAWiLJoxȆh ) n(8h.gGWi?"&2 +sskC@p``f)WiqA棷H`x6SjYw' 6涆_7Bfk"f㇇O:kC@Lh `8q1 AN38FG9ISxfn?Wiw?*wj^k +'Sb"*S3pV9aIYI*[{#WGÊ.nvHv.b/_O#/+ b{kz*+^ ((FOi)I+ڛ.F{KkOK:rR~f>* +[OOSCCj*Z +;k { + +Jn(^gGw7O#:R2"Z*Jz"R"jc K+K+++k k+k*kJj+z+#{{+v&n.[_''ǷGsb.rr +k+2 ++"*j;ۃ;#;J*zzJ ۛ .n憆^~j[''ϏCkZ"BJJ"&No r:BJ/["SsC[sbZjz +k z* k+*^&沚*S?gLJGO3 2JnO;r3jg +3cn J"3Bk2>z" +~)iwiw_S Z bZjRzJ*+"˺ʂ+Z*R+*j;k.rRr+.C_O7ǿ/C{k *ۋ[K r:KCkJ;r+++ +BB*r* + +2oJ; KJk3˳3S˿{ +k + ++*;z.r"2sJ[k:Kn*+ ++#+s Z; Jsr/j r#*R3#jc[>scr*oڂ[Jrjs>RKORN +S*sb{+2ZCkS:SKr;J[*ZKSC ++Z:*nC +b/n[+BoOR.j/3*n6ckBZS:#Krʣn3_^C;s+r:K'NB;2*BSb?fzR>bss+r{ n¾NFGN*:C_&KR_N +B":/&{f;r/N#?~>N7 3~2 +s/J +_^>&s#BǶnƟZfg8ɖ_{#>rז/S>+{:~z;kFNsO2'6o&#SZ*";~&BJ+"/n{z?obRkro3Rrsrj* +Krzzk;"+ Bc:K{;Kj {n2KzzCB* +sB;k +{K+*Z#+kj{"{Jk +++"#;+ ++* {;2 "* + +JK+jzj *j゛: +;JkkJʋJ*#J[jj{ #J";*Jjj*k*J*Z:;ZK ڛk**+ +k jkj:+CJj#z"#zk* +kz*k"++ +k; **z +*;Z;j›jz K:[+*3 ++; s +"KjRkb;c{Jc.3S[_bz:B +>; +k+2ʚZ;.Ozr/_&_?C?rS+?N?⳺{r+Sb+'.32¢+bjR.bC+Non_&r3zsRz~& n{;RCnbZSK*kczj^NrCZ2Oj33 +k +"S3"/^J ;3R/;r++"**"k#kã3S/_3SSOs:K3~'. z@  8Kgiy'wC2F2(^Ks#'3 +²f&&nKkS[c +;;b'?SWj/"ξ[n{ +>2Zb^&F:kGwחw_sJ{ k:2zBjr:;S"pfhf>YoO7s9)Ghs6V~ gB/'s*~.b J.B;[jBnzkJ?SKs#jcJ;*Z*:zJ"zjKK#C3sCó#+J +zZZZzZzb"zzں ++kk{#[#K;{; Kk +J +**K+K*KKk;+*jK+ j +j* +*j* +j+j+ kk˻ Kˋk+**jjj+****k+jk*+j*j*+ ++k*+**+*j+kkj *j*++ k +++jj + +kk**kj**j+*+++K* +K +k*+jJ+jj++kkj+kkj kk ++ **+*j+ +*j+kjJ*kbVNWC_(g KjR +.ns3"'Jn.b""3BbS /B>j~2{+/r>Jf?>*j_IGnSz'柏#_S"Rr/2h>G'>z/6N>Ss6_O& j#NNgJBO^N3O'.SO[ZnJz2;C{ZnBSKRkʺ~s +ڣcJ ; 2B+: +3N:CO~OK ;o2"o+3zrz~/ +:[SrZSKzo"Š2˳*Bj 2:/bZ +KbJ+ K+ZorS +R *K[ cK + JJkJ+:jjz*b.Jsjj*z#.rjJcZ* *J+ + +c:: *k{+K"B3:kczʚ[*:z"z/3n 3z{ j; ++C*z3ڊ;k; kj:[#Jb"c*+b3j"k{>2*CrksKk3 +Z +2 +j*ۛk +K[3"K*ʚ+ +***;k*;**;Zʊ z ;zJ* j {j+ **+;++ +j+jjz + { J:jjk**:j+jjjk* ++; +j*K{jJ+k+* +J*+++jk; j + +jJJ +*k+*k* +j**k+k*+j++*j**j**+k +k*****j + +Jjjk Kkˋkk+++k*jj +*+++*j*kkk+*j +j*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_german/cause_39_loop.isdn b/tones_german/cause_39_loop.isdn new file mode 100644 index 0000000..2601e63 --- /dev/null +++ b/tones_german/cause_39_loop.isdn @@ -0,0 +1,294 @@ +*d}EьDH$]a/~SZzr^Nn>c77w_s'SC[&^JnkА@&V_1!YAy_6ڷ)9.&¶HXhx;iIi7WO:N3s"f6&V."掞ƆN _wW׉iWG3 +ڂ2n>& +":_GWI\P* LYىAYQHH@Ysaa/8 G![((֛WWIY鉎0܄ Y!ma&@V؈91o h8))9Z>6oI׳_2"?"2 | NlyaQ:9Ra AvfV`H(V+)W?B[J6g 7)iooS/'P!aA!Q'Hxο)IirVV ""isg/B&gG''w{o_h YၹqQ(sφOiY ^.x8hkwH'g7V7G_7?sK \`6@9!ayrN?/gI8hh(YWg"wϊ#2jk `xPWIgI1IwI)F"f[7KW_?[2 ˢZkcK˛KʂZ.fhV.r+׉ W7O/# *Cz.~&^^^~RbrZ*CsϟoSS;#zZR2Z +*ZBn>&F^&&jc?G7wg_cjRN~~^N^ sO/{Kz:":*j:ZZbBR^ffF2j#Ƿw_s3#Jr.>f^Rks//ss;C;K"b..&&^&^~N[_Gww7'//.>ff&NBz+*33S3C33s#C#;+:"2Rn~F6vvfNB2kGwחWiWLJ'o{2>V:f3+[O;o/Kos/OO>(X>'Ya)G[.NFvF>~ k[/ +bKCsssoSSg, lo !11aqa7H^h8*W*bNƶ6^r/?_7###ϟ_wRbbzG77鉀X (GI!1vh#WIg;+"&2) ɷi3ƞ>Z{s__G`x`HǙ1!))[f~NfZOs/+Z.&F>>/o/c[{ kkJ +x(hxxH.gG 9G_Sn:BBB n.RrRb:"k*J۳s//SCC K :k c"&HhVhחwI)7gG_/C{jZn&^^^njK/3/OSs3[3#k+ +:Rfk?_G7gg33C;z.~N^rB#33#3#ss۳scK{ k:ʋ +&&66F~:3/gggg__'CKrRn.nN.nRbbzJ[{[CSkKk jKjBFfNKgggLJ'S { +ZZrrrBz" +2"#c/3C+S33J^FVֶ&nZs77Gg+ڂ*rZ⊚k{kzrr[kC'Vȸ8XXH( YYi~F^rڃS?kË +Zr.kOogWlH8y!QYa [.(6Vh>+SjRrbrKcwGWW)@\n9)9aA1IXHvxfs77 w[BZRn. s緷!W2)Y|W\,0ja11qIykH&ȸ~r*Ƿ s_*n+Kn +S_G) ֌YH̬f0 `y遱A1w.ηHV n&B#_)wg)?_JK3o'79ll08I 1_oh86Șȶ~o?f/Wg?J/Kzi9?N`0pN9yx:F3^iS)wwZSB:W'ǹ)l쐰_ȸq2-Y_oV(`(xV_sy'+Wnf.O3 7WyPpxpXṱW'>X8fXƸiO +I'9:2[N_g yPxI9 qqAY6{hHh6&' LJ9gw[Bk#j +3wiـ!PF` vWY!1)&8JF`XH+R#7y /OOo_W`)lp8>׉aA!!ɟiw8(F&G W'B{R[gH&,H@;iIg7.6FV(V^zgg_O'_sN&*.?c/?xXXc)Y1aI_'v(V(^ +*WgWW/o[v^n:7KkkbkƘ>H6Σח99)icŽ.JRϚϏCz2nnk3+N.>rr2:S>r.k#;/?OS/_KJ{bJ/ +z;"r+RR>n^nrr.bcj{c3{S + ;s{{*s OoSk3J ZBZ:B{b* j+*C; +***:j z;" + /{kj 2B ;bS#*Zb:**k K{KjKK++{+j k{k+ˊʊ+jzkkj;z"g :+.Rc ")3rvF'vnS*r7^淀2?(x!6h(19ȷ9/8f6NG + (C'9#6O70W_(*)8w+bVG'ihGGxw)'' vx)3>7r6V3~>Zh^ +f':&zww^_ijn3dž'6g7wfZOZNJFNƣN+"ofSۇ2'_&+GfkB;cz oZK^>3J.22;Cg*_/_O +Z +.+"2nnFR +~?^NV@`x`h9aqI9>(foǣW))'OF&& ++Y$lX y7W8Sh28go뗙)?rJ?g/cJ3i0<0,y7a큈>fb?(_iI^R'.hnþ_?B/{&2'p07H)a GqC GV/&R +Z+rʳ ;c֟ _C_#66.f&GG7W?_gos/Oc{ʢ^^~~~zCO/?s?{+jšN^N~fRB2"3'GOSCK +.>>n+sc/oCJ:B.N.".jjۛ +#K +sc3C;;Z"Znnr.jbJ+ +./ [K;k#. b:{# ʊꋋ**{c۳S2{z2bk2jjkj +ʲjkr+jJ+;+뛻3{k;{c*:*:j"z"**ZJJ˻#*33/;jK+ ++J*ZJJz:[#+kk{3/ Zk ˊ*+b +z +2BJ+;* ++Ss{; +z**z + +b +z+"r2#; + +C3KsC[s. +ZK kB:bZB3k#O[?rsnC./;C.:r[r#Z /~>#.S3K&Ǻ(S2iGׇ?bRH7'&Y&&N(9/.3/s'oƸbSxNn&.h(Lj {'jRB^FZVw۾)cr vj'ʇ[R?ƃێN/Zk#DzN2ʾ'f'Jsn[* &'K뾛Z.'.B_rz Kʛg'f)rֆ>_*&G'&BF.S*R2o+΂rS^#_F*R +O~z>C/2{f2*K;r{;/3.ʎ+ +{S+O3n'NBSzZ2'/'R>f_r+3R+b~c'Znc&ϟ[o2WO;*s+ORF>#J^SN.鿲vR[+cogR33Z~og+[?BBʢ.2:N^>ocksSrboS~RJB&sJC#/SCrg"k"B{ork[.#2:RB3nzk~'^6~z_+2rs"^N*_'CZB3s2o3*ngcR溳s{j"n.RBښ#o+ζ^o's{gggOgsSgC3:2N~R>W4i{ "fa၉_n>KsWW/γSV^#/S_&'^/ogdI1RG&ɁaGO_&> '"R>2?O{2:_7)./ xAѭWwF&!aiGkbs'&'GfFwk&:*s_n;/i&,w> gFH?aGgCo26^bWB*;?zk*_g{[_2?gd ^qgZ`!aig;&6*W? ['o?#[cOSSG*CO$qc1w `Vg!9ٟ2O"OǷ_zN6&j'_33?3KC3c/_W[/o_H\,1yّ `f&ZNvWrbH7o377&ɗ3_'\,'a-px(fgGv X 3 7HxwWS>BbRwwGg7'g^VI_ HVsH@ _Q99vXf)a^&rVRWg;g3OGwg?$XKVHq&V7iaY'aRhN&` ׉kR/hN3f&GZW)_wG<H@ёZoiQ`k+vI&Ocg')9)/F\pvHYg@w醘.!Ayo A> r(vj g7wG"?jIg)G|p0, i Aw X{YOك6ךHf8s_n/)KGSWW7Vl ؈PG_R'ya.wY)_Y!wV>HH+z_w? ?LJKZ')GsX,0cƖYهiY_RWSr7! ɃƺVN^./_sg Ogk#矋`X((FZWYIgIiC9WOR.jN6ff&^fn[zSS'gX6x`(_iI9 Wח/'+>NNfF&c'G׷xֈ  VV3iI7 _g _S.f^fvF.;:g_)z `8h)I9''i 7iGbVFs燗gg?LJ'~X0HV3ٗ׉_Gw S6hVSks)Ƿ'S#ǗW))W,0 Hfoa!))'zr'G!IIIJ xh[3WG)sWg i l !yO7ia!6؀6_cwGGWoO)Ww))iט̌pv.y1I )'s2NOIay)hؘVh+ GGGS ))))V og_G )|,0,ȟiy +?†syIYo&xx>Rg?gg_skJsח'B@x8ظh_W))S3GI)WG^6(V&ZrKCg_g_gCϟs/"(``H ` ٙ9)w~&h^./?_Gg__gg?X@xXVr'I99iWWZK~f>~NBO_gOso/`V 0^&G yyWWW:;Fv舶~NbC____oSSp`&( ~_'IIWWWW^v^ +3'g'_'O'/O8^hXp.NZ'7)9YkZ&(fFV&R.k3_g7ggOooOv0Fn^Ww!Y9ٙIIi7Nf(FV(k7Gg'O3V8f'WY WWI )gwWHXhvKg/Gg?gǷggw׉7-mFy:Aqo X h.sVxbIi 'R.cwg?oG[d? نf>mKXVwIVCHؖWsR3ǿZ*'7Sβ?igk{;d\O =-`8IX0qb`~w()aYp0&7肉9~SW?N&JIף&sGgSz,MyȾwX@-m8.hhفI`Hbj^W)/Ά;?go37 7b^_?\$ . w_`0W-gv//(!WFHHvN6:G;sϊ#_3jw +&n_&@ܘi/F ^Ȱhq97#(F㉉7^XFR7Oۊ_O_+2χG?z/cb"0$<! I !!)fF^sO/G7*3;z3 +˳GW7{#KR*j 9 Oria^GG +~+R.bWzC +w'kn'gp,o(-!Iwb yyo')g>F ^VNg[Z2cC;2>&"+3k2R*RbkZj{ +zJZr +3_Sb*~z:r~RzrZK+K[jJ +*{*Kbz{zz*jBkk*{s[JK*ʊs:k3J뛊2z⋣˚*jz +;*J +#jk{ ZkJz +K:"j#{+JkJºnJ'NOsR?Co&_~#Kn&go_?rn..Rks+2{* +r.Z"Kc +2.. 3s"{Z²{{jk˚ +#:* +* K*+j* +**K J:JjkK Z"Zk +J*Z뛛j+K+j +jk jj+*kj + + +K[ +ZZ:[* +j+j˛ ++:Kۋ +++*: {ˊzjjjʋ *jJ*+ +k *+*+;#+[*kkJj++*j*+KjZ*k +j+j:{*Jj**Jk+jj*+k +ʺJ+{jk +zkkkkKJ* j;k +;ˋj +j+ **k: ;KJ* :**k**+*j: +j+K k:k jjK*j +:JF/wsnSCO&&[[^nsz^+266f__i?f.__;[Z/SN3jnJc*Z .rsB +JÏjbRRKSϊ.*:k#"?^S'~r?Rz&&SgN{;zNSB+"[//gS&R'z#Kr[3/R2&{^>^+kjs~'zƟS+/6n?ۣ&.{oKڳúkʳJf^sGw/R33"':6OWc6(V"S27NjCFGڎ3^^*#nBzRn'6g^ 'KGn^.f[R?R +_FfZ?ZBZsR:Jz*SJ.{ R:¢/sn/rB;*n.roJz3^*[OßCK;ʣc{^g +λ32N2*.J" +/R>OZs +oBn.*/"bJ"{N+SSojR"cZۊ +.NZ*[;>OsS33sc#[3#+zS/ {*z[sZ/'g) 8чiY-q찹q6!af)r&鹿6"'OiG9TMgG-PLh qɘ8'BG!9 f)`SsR 'W'~3s+3_/j )o_#$@{1p@K S-*7.`j[ɷv V2cO:LJ7 7xXym!7S)!H@)hWAR&0I^6׷^i')'*8Pf2:hp ёi&VXhiOi`VY"jk'+77G){XvGw)!AyS&08^&j&({GG7yw'o(0@&9q1៶V>8 ɉyY(HxX(g GZn>swg'g'#x0p@`x~!y99W?nR.z7s"Ƹh +Og'S#{*KokKfFVVf&N:O7WWG7G_oKn>^‚zsOgsKjzbB2&F66Fڣ7w_?O{K+2n>f& + cooO?oC//[ۣ+J2R~^>&r2Z￟'ggg'_Sc+B.RR2zZccۻK jʋK+::˻jZr2b"J+:C33sOO333c*bbR..BBJzbjjk{KCCkjښj+**KC C;c{{k*+kJ2r2Z:ھ ^i7N?2Kkn:Kz +3/Ϗ?__33{kKJz" +b2RBNڻjrrrbz"Bk+bB +3S?'G7_O3KJZzr2rR2bBN^^~^^RrrJ3 +ڊZfh6ii))iI_rfIɷ.Giigr:S.(2w".N(|ˉ9- ^{/zV7W'ya H!!9Vv~."?y7j @cgA W3:аϹ))9A18Ȉ` iYWW z."[Wy+s3`<^϶ Np qAivV@@S闹yIFFnW77npG'/W၁Wr&~8`xVsG)y'n~R;N"'_sS_7~Kؐ&a.xh+#Y׃r:Ƙ *&^Wy'Ss3Bꏟ2ڊ{R6(86۾yY iWb6Ǝ2n3gGcCkRf6V>3"BJ#czz +kKZ:;K">vF__wiw/o3*" +ʚZJZZZ:*"JKK +* +;3{z;{*zJJzzrZK +*k{+nNf&^r SOGGsb.ξj{ {#?C:*:2βz{J +J*+*{K*&+iIig_''.B +Z"{2n>^VB^S;?co3:kʳjJ":{33/SF6VxVW7iyW_sێF£ b ?OggR3겎sﺎ OK>.j3#.RKW{XP$p^V--m1avR!Iw^h^V+vs i/_Gwo+Giwkn/Wi)\V)`@ Ax7pH. f!8F?( gK6II_' bV>w7~w.cZLD8ЀO`!)*(GzW[R?#GoC*n/VYh$0FA(fwaxz6B io2Wv#林G +?j/GSrsSLpIyyGC'"FNGbS&3F#//SO:##2jROOp0HXgW_)g?OÚr/KoSK_*R.SK #[r>O~:Kk.r;*8HnK)wg_3Oc_sS;'/{[" +"+3Z2^>B{bF>f&n_7wgGg?j*_+W"GKâs?bb.z +>v^R /~f&&:RJo'nZsCS +oc2BNR"bnNr&k"Z +*cÎ* +^f +SS_CS?_:Oz: +.B&ZRnΞC.^bNonjj.#J R{ 2k"¿kKr)>f +7^'3.NR?^Gx(rG[vS(˳R_ &*/'FBƿΟCCjcj::rj{+*R*#*+:: ++:J +;k:j***k++*+ +* +j +j;kj*kꊺ ++k +jˊj+++jjK+ J*j+k +*k j***jjK*kjkj+k*k ++j+ + + + k* +Jk++k+*닋+jʋ* +*kk˺ +++* ;* +k jj +kj* +j++ jj+k+*j+**Jj +*kk j껋* +kʊ ʊkj +k+ +k +k jj+Jj +k+++ +jj+*+*k+늋;j*++ +k+kj**+***************************************************************************************************************************************************************H{:s ?n+K&'#3gsNCR;b*s2˶_G~{o"OG)V3?KοR~_&SG.::oNˏK~_7/Ks*"BSRB&:jGSiVW"9#_VLjw'W&2r2Ss b˞S+rr+ &^&.z_'Ww)Ϸ"s N#k?S@ x0SviAYq37^nncGS'OZ zo iVx8^W!A1 i.&BVv6RggW__o kʊ;ssO))A,Ȟ,oh@Wϙ1Iq')IhN_VfXJ"'3 goZ?{g@@,c,RVyfI!1 釲.Z&2Vv.*7O'7_szj{벊/G)`ǘpXpv(iYa 9Ǐ_NƖFFOOoOOfRV)W^^bxXƾsOI9 Iٙii__F6&S/S_*.j[Rrzk[c:3/ ^&6('WwWGK r*R^N"" J:Bk[+;[[k +B2N~~.b +3O_Ssc;{k+zJZ222bjKzj;KK k+j***+ jkK;*KK+ K[;{*bJ:²rrJzZ {:##{;KC[ k +*;{ ںJjjzJk +2r[#*ZjkkK;**[ + K+k k:csS[k[+nB+J++".j +b*[ +K;[33#+kj::Zڢ +Z + +**b22JBZ:ꛛ[ jjoK Rrz{ 2*r*k+* +j#[; + +kn"{S'o* +ˋ:BOCC#[{jjK#3;O3^`,,XsYaaya׉蘸8hw)ׇi W8"_'GW) 2 |hiAyaaYi YYW' `@@@X)W)'f&WyII7`iIjBGO'9y9ɗH l,.Η SGWG!_(F_) ai*&Ɩx8fWii#G7gg7) Ii0,VZy_w[Wr9y gf(hV.gׇ/SS[s'gGgw))rp؈8 G?gf9II S_)GN&V(v6VVƖko[?s:g'GiWG7 `hv&s)yGW?WI >hVv.;'?sO_Og77nH &6y ɉ_WwI{.^vFV(F>?/Ƿ77w7n ~GZIIgG  w).6Vhv>JO_O?_Sg_GX`HxX2ζkyy W_wwG)/zvFh(F..'LJOLJ''__fH@ K.fIgɹ_WgWIG闻hV˺/7O_ϏoOV@0i# YIKC7C)7i&(h6(r)'SoO?CBrC @x薞'iYI9ÇWS/¾^N&C/*3#C{.Nn RfHx^S3II))_'srz{>r~NB2n뚋NJBbBKk3 ;r&~{ _Ͽ_sCsz{N2.Rr{^N#C[[2BO?:c.3kZۢRon{[ S_o +_{oSC;~k.~ +f"n;2: +Jb_?2O^n_>J&Oc'#&"*KrB3nJ +N>?./o2"g.R"R"[r23s + +SF2CBO{rr +r>s"*crCnڢB_^fo{3>^jχ+Fۿj^R?./o;z+3bg? cobfo +nC +;[2&Zr.jz> _ +#[;oc"2_*GoƎs7_Jjj wf^sf6sΞS>ʏ7{V2>. +_{bocCf./&ro +B3~ +Z+r2RŸ~_^~so2"^vFNF'~ +_:^/7oJ23Ronoʏ+&>bzkgo>~nnb.N?϶V7{RZG.{_zNF/;Zs^N +g"RnJ*^Rs';vC;".c +_R#^3zrۺ['[kS3jn&R;2S; J>o^΋[n~_R*ZOJ2.^n_^2_#RSn3΋sJ.ʃ/c"3#__Bg/fk;2{'.&b/2ok&'.sC: +J2{ ^J/ {no?K΢ڋ*⢋*:.3/K +os*SC~jjR#zs#c+;Kj[K; Jo +[Zrkkb#zRR;jbK/R>o/jSښKkZ*":S ++ c2:3ⲛKZZK/:ZJ"*+Zk{bRb:c"+{Z + c#sjJ"zrr**. +RRffRrg7) i)WW/s# +R.JzB +;Z"KphАHV+91AaIi'(8Fhxf&.G/LJC3j?b3Cۏ/`@@f6^vy'iaaY)Gc3RSff Jf~k۾k;//O/#/jj2^6v"jC?w))חG;F֖6FFR"sO_''__o3#Kn&憶vVv&B 3O7))))WW7_ϳ*^f66vvFZS?_'g'_/{+bRfƶ֖6^N;SGwWWg?3k:"n>^F6f>.z;ccgg?oc{jrN~fF66Sg7חGg_bn>^fFFƆ^~R+/O??oSs*j2>&6^{sIi )B(Z6hF^^V_sOiGWG' +;6(xXh g!!I B^fFV(('O?S3g'?'g_ǸЌB0,`ϛYq 7S^VRvhnf_hnzk3;W?ww)G/C'@f 0fO 1Y:(&((N#R&:>j2~s'GW)3?z +[+CpYPpbhO!)!g~6v_f_ +./f^bnzgw׉W/ +~ffF~8N~&i3_N(_8h'H7gKB~C/Xl(yΙ)!Y~_ R(# 7yWf7VN Foɟ'c^Ɔ>s;cgSb.>~ッ__s[."#/szrRŠ*X6yJGR)NROh^n"3;bv;?S??ooR›j:JʋzB2.>.n.b"+;/os/scZ:JbR.2R":b ++*jC#3/ϏC[ˊ*ںrvȈ(nsi'^R)7&H;) W nB{g?/[b&/Ja{V`Hy) &Oy)&f&8V77GhZJo)N^`!iə ^S[ Ƀh#VfVh8x iWR&RGw)irsr.Nnbs_g[*;{S3 ʁ!A@Y-G(Hnkha(h ('9k.!/h87i7/v;kbKR(F[@AQAr(!1Aaf hoYGcf,Oq-h FW!W'"v.)I"44 G9,)Q aphshnQcHV~)7: 9;c/v2)_RWs2z3> /ꎎR2NR2RZʋKso3occ3/SS3szz/ 2S&z2nS +n { +&ƶ8!ɉNHG'鹹6 !-agf`!W3_7sFfg9W?oilTa Al(yHpy퉘aY9RA!&x& )2(i ##)zvo+rgOKw_/ +qq`i@a^)9aw.6xBW9g +[8V+&nWW?Bf3s'gz[*@wbQf Wf`WohI!xn/W6SB^xBnχ_;+OZo'_Goo+^8wX AWV6vS!&~({cg~N6_2sG/ +*+_sS[6J8AiS(.s )g7{JRʖFzsC/ss_''ǟc֬,p ?gYg&(^BCGi۲*ʆV&'_/jzz#_'OVPx>^gIYIw)K2R&~oooSV>_S/7Z#'o/?oj>xv(hNs.'))9W/'z3*J#;{BN&f>.2{??_s[[**;cCr~vvvV&[?_g)WgoSJ^&^&f^&.:+S_'_?S//Z2&((V_))iiw7gÏ ".N&~F^^rr*K#o'_O_?//3˚ֈ(HHh&_'))ig'So"fFfB۳CSO_?kↈ(ȸ(>g i)G&fF#OOsBh8H8g__)WWgG___ +^66&&+OOO_N(x8NۇgI)iwח'Go +zJ&&FƶfNK3?_???sS&hh8H&&gɉiIIwwWGg77_+JfvF>33'?OCS[#8(VHHH(Rw_wW IG)G3fFVf.n.I s[)W/{o/ZN  HHxx27?i !G' +'?z^oB^&憆Js/?_O'kRN&[/VV&w'_W 'G_+K+cz.^˾N fNon/2~CFz/Ž.+'{*gn2 +B2n{k _i[z?W:ZCJ&?r^N*2^>FfoF /F2ڣ.S&&_z)F2ig)6FncfKGv6gFw r{W^ 6ISir3/W8o"Z&?RjW2.ih^Jϖgv^WS3Ji(y8aX/w&ΗHS hryH!;~犛2ֹh)6{86 8icgj87f.6No{7NHog _nfr +ys3GzC3z&6ˉ.2‚7vǶ_k(aHcFssZ6i.w N(/6)&w{3f6 W s)VO3"6sV_./hW([j)(#Z8Wc(Ixr~h){i/G(gR(2n(kBf9FZ CiHi(9hϿvW _CVW +(^KG7&ƖiH)SH3 wwGHٚq 1axF1 Hij'f[I Ǟ+nzW(O*vo+r.WV(i(iGbHogO[h_ h{v'fNcƟG~2#3f~ +Gb'(j'okj{&_?.ogf/J:R#_3{sJ +"C".ocZk/C;^Sc_/ںn{_k.2b"KJ +JR3*n  K +cJ r"{#k2["2Kjã"kK ;{B[*k{ʋ[+[.:K[KsڣcSO*ʚnjJ2 +B"?KJ> |0IIy!_b7Gf9!R go?特IԤ 9MaVV & 6Yi)O>{ΎO&f (hgg/2boGKOO?G7GIIlĜP9A(H +C!yi_W¸h֚_jG_^V89!k~wJO)IyL9ah6)YWW/W?#K'; 9!k~?oZ?o)iIl,y7ƸHFxGg3JW8v~?W[&F*ioR'OO+?CGiW dLɑ1 i^(fH6a/.WȖCw2sz.fgW/:['~:gi)_w<<Wy~ w*nw_'>2n "sCnƖk/[[ b_7sC?(,8Ɖٹ? {nRwWiRZ'' + +K"r:2+r +2jÛ3/*.2Cb"Fx8z_'/g_/j 37'O*Cs#j.rSjrRnj +;:r*CꞎbS:N۳˲ƞsk#s+*K˚º+Jo:[ JϞCo¾BZ3jλjZ/;n2/KKozCZk?sr:n;r.GzZ".{S*2#^[ûjNC[.J#"{:K.Z>K;:ϻ*ozR./2 jJ#[b  +n2ZJ""+j j+[ +k b: +KZ {b[j"Z{ +bjz&;z/3kK + S;j3jjj.jk[Zbʊrrz +jr*cˋ[zB;û br:: Jz*ꚺJbZʻ+*:j;j*;C.JkZ:cˊKJSnjj +* +KK3b":jj;jKkk J+*J ++***+k K :jK;; +J*j*k*J +[3 +nnz*+zz+k;*k jk: +J +j+K**k+J+K *j*jk+k k+Jjˋ+* K+:j +k+kz +Kk +ꋋ+* ++k j+:ˋ *j*+ꊊk*++kꊊ*+jjkk+j++ +*+Kk+j**k+*ꊊ+*>K{{k3;bB:{3 +s;ˋk˺Br.**r*"Z +Jj*[c{s3 k {{:*++j:JjZJ +*++꺊++*ʊ:zj+ KK;KKk;{{;{;{{ KK +*+++*jʚzJ +Jj*k*rN&^^ff&f~/o_7wwG'?//3;Kk22Rnn...2bJcCf^Fh(( 7G )iiw':^fFf2 +[S_'gg'Sss{~V(H^wiI IiWG'3Nfvv6F>bo'gg'/#(HH8ȈwII Iɉ)g?/c^(vFf.J_GLJg'?OooS;FVȸ8xxH>gɹIIɉ)O:ƶVvVff"zS?gGoS3;RVhHx8hV;7鉹9I)'S#J2ƶv^.kgg_SC{r~hHH8("9 )ח'_{kRƶ662k[s'_gci_S.N(8nWIwIyw3gSs_^(v&_'?'*O/2//j{_s?WwvvPlP`!Ygw)8ϗ!)Ș8 f;n_W?jb+ggwWW)s{3ʈ,?ѹ6[H)G)ay +)h8(VxngSk*)+'no/7'/W_j[/S준P(Abs&!I Yhx(^xv'r_gƏ/"*'_'oOg_ sO@n :1O7A1(:׎Xh8g6HS&37{_ +?Ww[o'(l$|6- A^:ɹpow-';Nh7+Ǝs׿ogW''Wǀ$,Y m~!80Xi!w#AoGg~~6S_bBs_G??gOWWO3ϟSs8HKэ?w!Y8 w3siiGw_6~2o +oJ'7sχG?oZJj 8gIbC)W z?i7k>hV>.SO/;s_{Z:znRR.ΎnR"C/?_'_O// j+j r.~" +2*+zj +[## +kz2. "ʢZj# + + +c{3[*:J** +"ZJkK#*;*[z : +kJJjJ{K:{+ K* +Jkj+[J**z;+; j + +:jk; k ʺj + ++*+K+*K; J:JJ*: +kj +:ʊ +; ++j ++*z +*닺jk2FG::J{K#NJk[z.*2b2Kb +ZO 2k* +K"r++sSBrs"#ÛkR {JRkS^6;CrN[ +f~zOnS^;f#N2Nco.KRwhJ8gbr>sFR3&F/sϸIIz9_{>OfWW^8G38G>_ro[9c^wVw'N긟_'Ws(WGJ#^K:"r?#zn&[{+S&&rr/[[2[ocs:C.rZbR33zf.:3C;C{J3ócKc~ZSr+* J~2+O3.[/*k *+ {;23b#c'KsSkSn΢;3k;zr{K{[BrNNzKrb.NK++.J +/+kr +/#SKk.b+'+s/+j~곲s3o#kJ{k/[*#3'>JZSbKbkrZ*J[C*o[j3* +jonZZSrZO;;b.BK;;oJsn#S/znskRS#sB#[NkjZ#::zCBgZ/k + ;:z{n + C3Nb:;*KZ;jڊ{;s#/j:bjs;+2 +z{CS +B{/Ckj.jj*3{ +.k{kk[˛*k #; Cc3C+{j*os33?WƜ$p_فaIsV^#h8vn Yg^Ff?SG/_gc_GY|!Aiq-s +.hh)a7GZiWvONnyInn7/'Zbkk7,$V9G1iK2V>YWH6jfjc3jO_'.2 oOo333#ϬlhO-vN XniW&Hκ/) I bO7__Gr:kOGo";ljwKIY-)F8FIi i O(8Vh^+'Wioz>^NBO/oOo3zr.ZO[pp0 JKoyI'3K(F>#7ׇ"66f>Z/o3333s[ * Kk>*#s* +#˃; +Z&~^^^~ +s'GGG'?3+zJz.N>>N^nKS/3O/{3ss+::²ZZBrB2.nnR2bj[Og'gGC{KJڂr22Rn~>n~2;{+{3CSC* +kj"Z""2Z2n>jS'ggGg/s#+rξ^^^Nnr¢ osS##kJzBrBb:RnRR2jo''gGgO/# zZ.>>n.n:{C3SSS#;r2B:"ZJZbRJ;gg'/sc:2nNnn.rbz+sCC## zZ: +"¢zb +:Rr.22Nrbkc3gg_?o zRNNn2bBrBK{[s#[[ccK +B + +"jr.nnr2^/GWWσJ&RbN2NJ+6(~G_w)+"ˣz.βZz*z kpvFI9yIzZ'sj7 +N>6Oj +_sjJ;J;CO;r.R" +@̰V)AIwAyʻ.vV'igWW6FKW3O[Rrڂg'o Zn.:/3n [ϖ̼FV>!qɿqa'2_OW)'2&6ֈv26(io'Ïg"BS?/b+&.jL KVH&I3G!o׷'WO_'7[.B6vVVf^f^{gO/SO/cJBb2b:2N&vvFF66^c_W i)7GC3S; +jZB~~憆FfRC_gg'goS/s#+z"rr"2.rJ(vFv;7i)_/{BB^ƶ&FNb;oc3'_'o;k;K;2n.rBz~(Hf֖(j')Ii)'S;;3 zN&6Ff6~ +3?__o[/sz3*JZRr..JN6&(vVzOwi'/[[#Ξ6v6&fn{ko?/Gs* [ kB"rR.:R^(zOW) 7_'[+&f6~c{'g/_3SoCsK +Kʢr²n.22 jn&h&F&'C7 7'_S3[jN&f6FOh HRS f.g+Jkozj3NRrR.zbbv>fO3_W7 w'''o3sjBF6&Z[?O3#c{;JZr.2Zjڎ(hR梷gOW)g7gc/3:bn>fƶFZ.sCO?/3o;#c f?B/۞~b6Hh_G+9IGO7G7_g'" {ʾƆ憆fFgW_c/oC{{O'Sz; B""zr⢛ÊRR OI)gk2z7i '_z^n&&~>JK&i#sSoO{Rn>2 {{"Z;{.R IY)'''gC/'IW'{3;r>B.R^ƶFr~:j3g⚛sS/c.."뻻*K+2.ƈX@n!)/r* +2^~&~.jR"okCS2rbBz++*+B":@ >y) +>gWW7ggGR{ΆF6&ƞ:ʊ:o_:Ï rz""z +֘ ?yaYi762SiG_#Oggs^Zn&fjK2"J S_s#/OO*Zb* +zj +K`@Xf.ٙgff^99W{Bcg?.>F>^^2[s.rr?s +/CS[ JK2;6vhfR)LJ~.WiiW*c;JnfrrR&΂." +ϋ3?'?SK;;K;kkj*r2Jj+&h(r?'"{/ww7gϳ3o*.~^>ξN{;[;soϿK +BB:::jk:^n۾Úzo;'g''_oϿsK⎾~NΎ>.2" cÃ3O#; *jj:ڢZB2"+JB6r[:jS+[C_gg_'o?//CKRnnRnNNnnnR"ZZzj 3CsSsccۃ[;jz*ڢ":z::zb"ZbZ:k˛3S/SSSϏo/SsssC{ʚz2R.Rn2bzzzJj + +++j + +z+jK{#ós//SooC[[#ˋ*"₂²rZZ +++kK +JJzʊ +J*+ kjj*k;#3c{ۣ{{{k* +ZZbbZZzJ + + +Jj+ k++jj**k ;K*jjkk˻K *+ ;{;ˋk ; k k +J** + +J + +jj +* +jjj + ++*j +*j*+k++k+*k K;k k+kk*k+****++ +j+*+*j*j+k+*++*j +jk + +j*+* +++jj+* +*k* +k**kkkkk * ++*k Kk + +j+++*jjj*j*jj++********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_german/cause_3a_loop.isdn b/tones_german/cause_3a_loop.isdn new file mode 100644 index 0000000..6698863 --- /dev/null +++ b/tones_german/cause_3a_loop.isdn @@ -0,0 +1,354 @@ +*d}EьDH$]aW!91q3hbVs)O׷/?>2_g)) )` ̜/Y-a77θHHVR6i )G/ x>29 Wwi_+cN2"oiWWgH,쀐hY1AA1k66sgWWs{>(hV(^ +?wwWG_jb3 *sc*&8H0H(2GY!!9ˏnf2R2K:fFBr_OS3* zk ((HVV(kw)II i''C3;J +Rn~f^.rn2 +K[soO??osK+J:NFV(V&S_')W)W7''/3*2^fF6Ff~n*c3O/Ckz"NF֖vvƞ2;/?wחwg_?j2.&FFf~n. +{S?O??3{ j"r.&fƶ6Ff.b ?_GwwwG_osZRff&>.Z:k#[#3ss3CkJrn>^^&fƆg7GG_/[ZR~>>RBZb: k{[3sCJb2N&^Ff^&~"J燷''_?/W2b xOio~h2G:rjC??*.F(H(V[yIIW_Zb666^^KϏ7g'ϳ;r^.^k:?oLJGH,xؐn3aQ1ၱgGhH88VVnϷ))w?_BJrjGglLbL@Kg1ѱa盞NVHVVV7?Wg'7#/NBbOGg7'_7L L woY1Yy?+(^ʋsg_w'CJj*Og'__7R,p87÷AqAYIo2^/{_^Z7gsJ/sBzsۿ_oO'(x +SaqAaI'?RvV&>ro3sOK[;B"o[ {/#3o/88xoO!aAYyW;.^FZ*RkK{##*kC#Jc;ksCFh(HVNÿəGGgJ+cr>N^2k[ +[* +c[J{{kK3">V(6F.{3gGחGLJ'3K"B2.nRR.ʊ +:JʊkKk*#có[{:ff^Rkgg{J:rrbz2ZZb:jʻ[[c{ۻ jڂr~~~.ko__'oS[k"Z +"BBZ.rZZ"ڊjJk K{ۛKjʊ"2nRrrBÃo?/ss 뺺ڢB2ZrR.2"zk " ;# { +jn.22b*;O/SÃ/{{;*; ʋ:JbR.Z:z2b* +ZKjKR..~bSgLJ_K*: +2# +: jjZrb *KK36hvhVFogiɹɉ)?~^>F~ +"*o?s'[;rRz;WG)ꘀpr3W1AayI68XxHr_7W) )o;bnr+3w hHPX,0RwaY11a>Nh8Hxƶ'') ))7?Rbz  /lȣ !Aq 2HhxxV(*O׉W))7g_:š.oG)?8P@`P(gaqq1!Y3hFBgO _?zrrn7g9& +f`l@wayAqAIa9/ ȘxƆ)97ioSk>bWy7 Wl (1qq9!!O"8^oWIWOk&j*g)Gי,) 08,9IyYHH8H^*S g"+B +S{g)י ~LX@AQ9舞`xR3#I)9igG?.^K/g7IypLPրVsǁAAQ!WWvxh8苿I)W g ;OOi_pRPZSgAW)H88F:)i IiW_g_r2f&COoɺLl`,0zWAq ))FhxXhvȢw 9ɉi_/sZr^#<8.>q 7~8(F6F'Ǘ)7'3zNr.R[p`xf8VISa!)i_K +z~ +oSgK&Cr~~>.B:~ NFf>w)wG_ B{R#+Sb :2;2zrڲR"j;.:Z+kZK:Cjcos/S OZ3K[2.3rRn.Z>r + +bjKz[ +{Z*3++ˋK*;+ {ۋ + +jB‹ZJ+ۋZK kk+jKz+ K; k+;j Jk*k*{ +Kk.."bw +/+."n#bj"; r;[^ +;3 +J +3?N28'WSkro~š?Ϗ_{iifWh/bX/*{(9`iahA08K9O@I7f!6 ٖ^giNgrvW>2V ? `{oG +iF96kV9rGև^WʻsKFG6Nw&r_oBS_2' +JK7?CNwroV'sVZ&c#_OOVJgbNJg[2~Wr {2/+'[kb Îo++nzJ3 .j22S2o>; +?Z2z3_Zꇲ'K B +/&?gff+C6[.^r[:RgN7?O{_'N?BjoskrR;Rr΋2ʾK6(Ƹ梟_iY!!)o//&3+'(IWohf08;/i AqAAA1Icֈ6h&'Ͽi WC wV';&hS7f[^PnƘ!9!+*':^NK2 +J3s:kc3rKn&f6fN:SLJG'''S///r^&&^^Ns /oo/+kzbRnξNNkKsϿ?'ggOoS{2nN>>nnRRbzJ*;[{;ۻK;+ ˋJb2zB:K [333s/SsCK **Z"rrRr₢j+{{;[ +k*:jjG?2?[[b[sc[ +[K K +zbZBr2z:ڊ ;c;k#;[ˣKRBko{"rZ+Zjj#S[jkk3cK{+*z +JJ2*2ZJ*C#[{SCKzc.++2+ʋ/ +?2Z{+[ +3j +;""^nS&ojsێJjzG^'&conb)>>^B^k>/և3~6#φ+OO/67I8 K">IkaafYi OSJ7O' [&W{f&2>{oF6_> *f/N {cKy^72Vsn/gz.'_.+no~O[S&G" +2Kz&>KsZ' +. z^. fOK.JG> +/ʺƒ +Sko[On62O? +^~2 gC^">gOS^Sc>S3JRKOz?o.o[ƎWgCr/_Ffo"c~ʂ#bfJ'3:N2Cs~^R grJ[#gGg"[^3j n.>s'f.r +*[g;os&&JڊSg +oj^Gf&'#[;snF(?۳~&k2__wKZ[c>jGkoN/'bFokr^O#k:3ˢ_ ~n#//R._23_ :jS2fkKjb/~Z?Kngʂ;kJ3zjoʿ#JJ3j~'_sNB;Sw/Bv(S&^&2c'>*_?*GWSiۏO_gCR;r/2Fh([tx-1 'ϹvVn77YY׶^>W)v>kϷGgww>vlj@$!m![gsv^ ၹwBoW3RnSN^*O'3sG+K'WCi&{gv!G3 +b*j?wOfW9 ?~'Gi+Sz7)I$L6Qm^ vHHAAi"(/)7ǃ.FVV8WY..s{FGiG)igO_RLQ)'.`@hiY)cF 9i +~V"WGBv'/s+)|L17 +0hyi#h )iWW8~__'?KFgs JOSWi 2Xp 71!9IaY_8(3iinF&F_) .o/"S3?wiI7 ̼!ၱ@HNOWa1qwNVh8.)s&3wW_JZZ +CWys̘'w9aqqYk&I1Yi` NB3W)Gr&f&h^G7__3b2/gI3 VWSh^3ZG)ʶ2_gsgg GG &` ؀YG(y 8xֶ(7crgo#oi p80YyY)V2 sYaIIJ>hb^j/Rn[So)7w(̌؀ ! g)aYrJN(n~2k#_oooo?_)G,`hP Ͽ_63Ig?I!zoS +ƶnƖF&>'_Sʚh/)'G IWO)Wgg)i)sFbNv6fB~:oC{gs?g7xp 8vWWowii7W7b6VF.r&+{?''?_'/.8H& @2ri)WWiiwwo?~n.~&r^›kkSOgG_o8 XX IIW)W'_?SZ^&.Fֶ~.ˋC/#3?'gG_JHH`rWI) 9 ) )7>.&JKs￿ggLJ)`@XoiggiiIW)IɗO#_^^N(ffR;SkO kOGG7ǟoX`80 xCr׏)Yɷ ) 9)'/''rVh&;sk{s/j7' 0 ~VFioaig '7!W6(6 Bs뢛/GGWo#hPYaYw)ya³9IzI!G陗fo8~G+Z'W)w3P0 Y'W)yI9)^OF((hhFg_gG// K7wG)G?3VH3x'1B!A'?/W7Y*hƘ(6z>'sscǗ)W??o{hL|Lpwɾ!SBk__afR֖FN #[Oo{o?׷gs"<|`oa'W6GZI!W3_3Hhh{">nZS7)W'OOSL|XxgW7aW;gW) Yى_sf(Hv^.Ύ_'CCc__O/#hpxֶg)) W)Wg7)G?o۲*.^&.: soO3;Oo3SooocVؘ NWiɹIIIwW7_'z~~66&rˣSo?OOO_C( 6XXWI II7W__b^&^NNvn* soOϿ?ϳ.8@xH VRg) II_o{^FN>vF.2;jsoϿ'2@F `HnW )w)'*vVB"{s[/???__{@HxX`+r;7鉹I9yWׇG vv6Fvf;{sSSS?'?/*f86x ``2ji 9i y))wGG#f֖FvZ+sOO'_'g_*f0x X(.jwi 9yIiWׇgs+6(vZ +o?og'''g'?^x؀Z)9yyW^vhF//ËS[WW)7׷xĜ0O30aGiI'hnS"r + :og_9)o(4pO-Iy8Q-qYV_ɚ?(h(II^Nn)ykn\0W-Q!0[q9+'9ၟxXjgfX/>biirF{)iWgGgw~L9A!;/ ٭qi7j96^h))_"KZkGgO"HP op0p if) i>v:RKrJ G'wSB3|pAa!Ww0qS9h8#?6O6v"c.+G/? r +/ L̎IG!2F 7NKG'{Sf& jRB/SC_{~N +{:RB*k3op 6Cgw^'WWWOSo+Kn:ڢ&&b3:n2 >Z;r#b"2Kkw_7ogw/S.Nn^bFBj>:(f[bGϋRF?zOgOs[?˟.nrZ&v3(2gV~ʋ6s>盎#n>gBr"+*:Ckz"kZjJ&?.iB&ʟ:v/O 72v9Fw'/i{G/VswvǿGCk &vΉR^'kR/ ;J'."g־c#rZNSw&wV)'f)B2gwc[7H?C"BWn +7Vj?s(og/GVF&ע~_Z/gsO~3VBvy(K[_gNngi'־3 fw^GFG^O~S) *bOHh&#_6kFxh);N_(Έ)h gV?hFv ^ NrG2>YfR:c^&2.ky>?I3F_v7OF3{^^iS7VB'/ƛ_fB)_{Z_NgŸzRs^/SB[c⊢* {RnSz jz +*"#[ +ZZ{k*K+ +;+J ;j* "+껊 K+ +*j +k+: ;*+kJK*jk +j{* +; +{ +jkkjk*Jk + kkK +k "ʋ*++{J +*zK k *;K +* + +Kjʋjj{++*jk*jK+kj;+ +j;:** K ++j jk*jj; j++K +*:* K**kj * +k+k +jjj+J++*ꊊj +k+JkK ++k + +;++*j+ +k* ++k; +j*:[k+ +Jk ++ʳ+K*c jj#{ +{jʊ:zJk kb*[K*+kKZj 닺{2Sz ;zkʊڣ/b:jJnϾo3 22?ȳG)wr +jBhzƇf@2{˺ h/_Oǎ/kkk6gvgF '/f CfBGN_F/'Jo>[2" +n +{2.ˎ^~^&Ro7Wwg'[c3s_g?flS11mm!陱HrX89kY~h؀6>.iiIWsSWG0l@ +mmI_0∘`Iy.'ai۟& ؈`^ w>Zz yyPxP,X_1Q! )aWpؖ8ȃgYo0X8h8&YI C bVgi! wLr, `Nm)yI`88B gay'˂hxvGI)ٗ2rB6g) W90 wHIYhphxX !a!{Z3x6  !oBn:h{7i)yIW\Naȁ1I90h8W a8`h h沗 IiG.+&V^"Owyٹl~7HA-ѱ!I&H8 SY!K(xz'y鉹 Rs.f+G_wy l11988/99Yyw?kXh(~W IɗSoS">*_'3W ɷ GV !AAAyyfxH*)9 WȂh(VG)iiwso_C"p o@lHy1y!IhH.__)wgf2FZwG?go_ꬌOf yG7~V~" g +iF*BNgCg_SlP pvna Aၹyi66rv:?JsSS3Sj3/CoJs;?2G ȈIoÁ!IiWw&cZ>>rnNjRk^SJ s3z ?zK/N[{"3FvfF(6f6"3Gg7".Zr^"r"2r:"o {s3k*kڲ;r..Ύ>nz*SCO?oSo/skGkkJrbR22.R.b:#;+SB3b:J:jzjK*kKkk +J++ 3S3# + +"ښZ"bZz"ZzzJ:+kjk+ *; +[ck+ +kKk **[c8!B2z3K^O'?~ +"o>~w&(?[Nڗ #c(S('h97ۘYV˹o x8!9s7i'Bch@WC7@7f)fC2iȉJIgjf磶3_SG j*b:6Zfs>Nc2r{ +b3~Kg'kC+~F^O^^Zgor#R/&J2nj+2.Z +.k[*/{/˗J׿+S&[&B[;^JjJ?.xnFj iɉ./r&ƾB3coOϏs~RkNo^piH0xX i'9AWKn֞΂^ {s?'G^p7,06( IWaq!yY7if&vF.^[_?.j[n>^jOG_W)'WWPY,@6lnIyaA>S_Ig~FVH&;) w) W#ZRBNR[6> v×ٹ!yw;.{oLJ'/+6V(:WiGw{>2r>2~R^NξΞ^Bj3_g#cs#o/?_'Ƿwl L>W 3px & aw`Vn"י'8(f* i鷣^6(V_wGcnƶZ/7g3''?;OvjVr2f&?Vro^^'֖(V(Gwwr"_GG'b2&fr ??C3J +;S7`f1^bvxYI)jv (J:lj9wh֖(h2 Iǃhhf77&(&RZo^&&g/>"?o zn~΂*/SKR"k#CSZ+[C3*ZZ +C#;:Z:z*[;**"+*;; J+*k+*#[kJzz +ZZ[ +KjZJ k**r -ᾖf 8IG&sRV^O;>X@`I7fh79)/((w#cS*3# R^f/Ogw"z"/3/c +RZ[ b#S~F>wh`!ai2ac(Hɷc"Vh׷H8w)wƢ_'gS[^~:B^o{ok/o^lLy1AY@z!99G2[ p9Aai8Hyi7C6CaYTmY90 , 9 HIY9W / O  SW)7_{_?_s2bZ";K#SKS@ Vq31s,,!IWA1iXgaG`8x ɉ'Zh'Gkr*gG_bjIy-7^q=y06C1VH^v`yAaC:;Ch W&&Ww^#'b6f_wwr*w) dIah!m=pH^y!C'HHGW~*b+c_'{&dW#ͭ aI-xK#)n!! &SJ۶vSڇ)&W!i )+bhX(&_W9_.f6>/SGw)W*l0_xwq'x N[_iyǛ~bHHV(&SwWgOJ>jsZ'ږ,02iI9iy^fH(FHV;o)Nrf6Ξ~n o/O3CۻO3`x0X OgIIy'zv~f~NJK+3sJڊj;:sK/C*kK:#+.ƶfh(6_7W)'2NRzJR;J +C3[ۋ+*+ K[{ :NΆ6N.oo7_'3ssjB.rNN2JOSO3S{ 3S{+j^fvV~^sgg'7G[.>~.R"Rj[o#?OooϏcC &6V(vֆN>bSG7Wwgg__Cs+2R^f~&>RKKSϿ_?ΖHHh^R_W7W)g7gg?o*~>F>RCOO''/+hV8(&R?  w_w'w_g#oF~v2##SgO'Ϗ_'xhhXXX>FGoOIɷiG?7W7_;S^vV6."3o__O_ϟ''Oo6HX ؀(vNw?c yWii)O7g{3^6fv6^nn/S_?:SgG_ ȀX( 8kfϹ/9Iw )c/JffFºs/Ock + @h(6牉gWg)G*Sk^r>^k:k +k/C#;jz22z.2[C`hSWgw'7) 97J"cgO>NK^B>㲺2ף3RrF.N +os^&ÛS?ggGϳgoO__'Sf/RnrZ^*2(s67GHG^f +zoz"B "zzG#:"JS:3 +Nj6jfo>VKVS?fsz/7&.B?&on³2 ַ + hOV+[nkrz&z>g.)ˏ>rSROjR##''&Rs7)h*N~W29zIs')s62ۆRj^'>ƃ9ri~owFggSJ _șBn'FOΆ.V_iǛBCع'[G膙ؗrHY֣YIg)! ~ ^VfIH۸WSaf7xAZWH#6> 7▟(RYHx'aX33(Y^8!`!R/6")cjh +&i0VInWxFW7H73'oFjoC/_N wn(b[ )Ksƿfg+y_xvVy7(7V(hS&Ɉi2ڿ')(VohGO6HN9niyvS(Z//(IֆiN(!8)hxIR(Jssho[ ++?JVk2S?WgW[VOW &B[βrg'^bgrbRcbz&Jr/^ZڻKs2ϛ3nO Š jg{rno~[r^*c;.?S#K^C.2rZR3#*;Cþ3SBK*s"j¢.zCKڳSR+;sZrZb 2Ž./ BS;:"# +r"z[?s3**oσK c{;J3_.2_9,\aaY׭aKV!Ori7gNv3?o +_$nrz:g''*S矃O7$<>a᱁y {'yg(V&33R_'xkoWgRSG3zsW9!XYaG `Row?hvO?/s'vx(oc/Goˏ;b3g'Ii \|1IV(B :w>sb*v`9ƖJ#sc;jK_w/I<)Ǘi~![>WjBf;s'#&[N.?3nRڏ/cCCRobc',Pgy9s_? +37Oj^*׏ S/f'oJbRjjoO/ C*BbzB"j^ XۇSO/'o_/{";O/c.b;+++"*Z ZN~+..^Rzk>~3S//Sk/{KS +/c {KS"{ˊ>~[r".:joR;{S:/RoJ2/3 ++jO?cB3Bck~B3r*2 zob2{"K[2?c+N~~s*j** K_zB2z +b{orۏ +;N;:žs{:##r{r+RbCニoz[s*kꋊk;jb2*b3 +K:[kzZ.2ZK;ksj[: +R +B{;Czz+3SK{KJ{JnrZ {3Z; ++k Z* ;JjjjKj* +{j2bk +kk#*j +KS* + +kB";{jz +kcz{KjjjKJڢ*zbJ*KZZKjۣ;+ * +kc"b[+jˊkJ +jK +Z *2zj +k{ +j*ڢ ++ ;KkʊK{{ʋk+ ++**k j** j +K +j++ *jj*****+k**** + zJK + +***+Jk+k* +J +***+*kjj+ʊ+kk*j+kʊ++kk+jjjj*+*j*+++ + +jkkj*f>so#ojz +k˛;;K*:jzz..r2bB:k*##osKS KK[.z # J"J{k* +*{+k+":::"Bb + + K*jcc3s3 C+*j;;+ +Jj +ڢ:jJ +R^&^^2z/_g'?O/r.nnR2 VVH "WW99 iW'SjNrz/O'gGLJ'_OSSsSxH`WyI i)w~f6vBjOgg'__o 8VG)9 W7'/;FFV(V6f^›S_gGg?Ϗo:Ȉظ֞NCw׉y9I Wj.N涶vV(V(6nB#_Ƿ77LJ/s;–xXH螂;iyٙy9Ii)7gs:.fV(VV(6F^zKo_7wGg_O{ +:ڎȸ8x8hVۿwyIɉ)wsfFVv6>B;_G77Gg_? jZR.n~fVV(h薆 +/)ɹ Ww'ojZ.^Fvvvvf?iz7ioWCSkjnK"ؘXxH6^i I)oKzz[#B.>?'ok S/?_o@|0?W!m11I9_f6VVgaNf@ H8f')9ׇ3N&J*/7 ׷Ͽ؄$L)QYhmQ;G0`O[!᷎(Ζ&79Wirr2[FSwiiG7wjK/dlJp)Fqj +*/27YVVN梊 'rn2z'gGGgs3j?,$h`Q6f&׈/S'Vn'w7?:&J;w_g_'ZS(̜pAhA ()0R'gss 8^H ֆF*'W){_Bn'__'7kBHR0 HaA(yvjOH@7{raG))'FHhΈbBW[ggJn'c77_;z[`W>Y+WɎ+{wiǷ&n((^&sC3s3Cc/3[#C*RVh(趆W׉i);RF^^Ɔ&&^. +#_G_'_oC/#{HHxooG)W9 i'' BN&666f^R" 3gwGg__sss#{j戈(xXhv~s_)iWWWg* +BF&66Z''''oCo/J(8hx8X66_/ yIWii'_'C#*n^^FhF6&6 +3'?'Ggg''SCs(xxXv2' i)O3;b^6FF(f&ZSSggg'?Ϗ3FxhH x hfGIwi)W7?_Gs:6VV(Vo__g7'_9~F80Oy!WY?^gIyyC3?O XHJ_i3?Z/_)_'v@`k9(0'q!AY XHg^hNG&~2_ O_Gi '?C>rיWbb'W $xHWy8p>y{.qi`XhWgR+Gh>O)C''_׉˿7Hl$l؀Hэ!@k*aA!O ~_'S"B3NOgO7i )'CS?$ظ`-m ;^ֹ1a!aɞh# ^VW s׿&jsjS7?''?kl`Y៛).Is)*#iWO +2Hh^>{ +s "[Bn:^NR.&v^r.{oOG'OO?oS3 z~RrNZ2:23:[ " +zcJZck:KKSs;;{k{;k[b:JZbJjJ{[JB +jj*Bc +#; j + + + +J**;Zkj: + {;;{++;KjJ*+JkZJ +++k;{++; * *kj+ +J+ +j;K++ۻ ;+jj *k; +:* kz**k;kJ +* ;[ + +*zʋ*+ˋJ ++;kzzkKZ +J +k# jK+KJz+++;K++*zJ*;;K jkj*k +K * +JkKʢ*JJ;;#+/c*Z;k +b +[++j +{ʲk +Kzz2{o?˻#{[ +bS;+:nz"RZO2zc^jb2;{BR r2+ c+˳ +["+kCJ_~ ?c2_rjR[.['s +#>ں/sc/c2R~s3#Z2ÏSbNϣ3'˲+kn{^n/Nv*'bb7&CS&vK.R_ww"32>Z&[>מIO^Ss(3:Ggۈk3/fIc7[nf3(ƻ#Fȇh_vc_bc~{o?&G)2*3WV;^n3*JS7֢g ?RW&/n>Sfr;ςZkS'#↶ KNr)?S.hOB;6Z c +[?VF"NgWhz{N.^?j'>_7Wfc^r"GRg;^[炗VO/RnKrk>sZ_.Rfr3RF^*3&"GS2+K~ㆋ6Wr&ZC67OGV'f _'s3"?3>b3_#^_nfZ'o/jJSFg;>'NjZ.Kvi&(7c +SF~/[gwFvWsBO^)R:?Bh[cj+'rκS:f:g3krBǻf/kK'_^k_碾>.csr[>sZ_^K>sRC"s^f/"_O*zb{Cc;rRs[b#jΚbR3r^*.ncKrS⋂*S[{*/ʢ{*2JRNBZRKrr2V&'7W ggGWs;'?s oww$'3amo`wy)>'h*F_ GR ?i)䤌w#y19^6( (yyiIɣ 6g7 7 JR>~~R3?Wii7ܜ,wmA)ovVaI )9 hHFc ?ϣ6 ?)I7o?)|<SY w/VF6p8YY !!H88Hx2!Ig7'r(V^n ) i'|̬FZ^yqi7O`XG7aaYh"'W7i)F.Wolx( +yaay +H&9I)_F(h(6&[/G_#[.nRzjʊ +J{+bf6f~ O_O?oCKꚂnRR"JcsS3sCS/ +jzzzBn>^&f^β +[sϟgLJ'_#[;***bn>~>~~~>2k+O/CCc{{kz"R^fff&nB*{O_???ϏSCZRN>~n +k˛3S3s33C#; ++*Rn~KO_'?3#늢rRNnRB"z{ k;#Ã[ ˋbnN>n2:+ooS?gg_33/*B.2 +Jzz"bJ;{;Cs3#K+Z""r22j˻{[o/SS++ kj:JzZZz2"zzzj+{[;kJ:.nRrBC3SϏooo3[+Z‚bZ"z:J:z+Kk{[[{{뚂2rR.nNN.:ʋ/__sCCÛjZZr"ZZ +**K;[{{bNN.r +#s__^_;#S[bC' +/';6 k>NSs ??^6hhhVֆj' i)w_.NVf_wG/onrK{g'??o#,lviiс gg7f>^nC!GggֈGח Gcjbf>K'gGw GǶ<,@)!A-Q7 V*7a9i)H 8VS77i97Z6jGWWi Wj@lp!aǁQ)wn)!aW_NGwG{r_7iWiiWgpP+ YG-Ay? 'Ǝ._!w W8HH2C37y)wfz*_w'WOKPP8p`)?)A))^ʣFW'GSv(&(V2'SC n"/ __/ 8"B)))iIWgg_Gs矟/+ k>F^Sc?ooS/_??SoVVHHHv>S'׉iWW)))7_#Jr~fFvF&>2CsO_?oSSh88h+cOGWiiii)WwGjR~F666F^NR/__''??OsVhhHxVo)ɹ i)Ww_o2^FƶvNRsO''_??/3hhؘh6~k3'iIIii)g'?[Z^ֶ6>NJS__'___?O/SV8XVv/7iɹ iwG?/^f֖6F>2;O_'''_O/HHhHxX(F.olj II ח7goSffFVf^Bϟ'__'OOO/SS/S^(8Hh8xv^ Iɉw?3f&v(6fRK3/___OOoS3crxH88xHfn')ɉ i)7LJ +fF6vv&>C_''OOϏ/33蘘8.Ϸ i)i GGs:BR~֖&n /_''_?Oo//o{.FX88ظJ_WyɉW G'G3>Nƶ舖f~>&/O'/_O3Sj x xHjɉoiYٹ^B9G#׹FhfF8'Oc)k>)?gS{/2x̀nhWaGfS K~AB*N R+6>O¾37)ǃBz^ y)^X8gi!W1(h `[׿Nf/ׇ"Gg +j)_?/ϟМ|X'Iy'_!!AWVB WaɏHhV(Z{B';'?GG»|LP' ya V7y9 )X x^''*Zk_C ?OoKZr ,ȏ)oW9!i'W)9Wr6hH^&r^Noc[oS/3//>2;0#.3cWiG7痉חK~66JNrs*_#/{;S[#+"2rظ8FvcW9iiwgwGG7 [NN&6^ۋkS"bz z2.rv&r*gGwW)Wwg'sb..N^~>+kks3{; Zbrz2R.jZr~nSOog77g'Oo/[z":RnB2r+k { +: +kJ +**[{3KK rRz*;{3s/S#C[#;{+J +ZB"bBb +Jk*z+ +: +j +j[[Kjj{;Kk;KKK+jk[ +*{꺣*++ +jz" +:: +*:kjJʊj+k ˻k+*k +k+j +**+j+*J + kKJzJ +*; +j+k*+++ꊊj+ K*+k+kkk*+* +++** + +j*+*+* k++ Kk+j + +* j*++* + +*j **+k+*+k**jj**j*++*++++++++kjj++kk+jj* +j *jj* *+j*k +k++j +j+*jjjj*jj******: :KZ+:2Kcʳk jh_O3ZkZrsJ/;.SS3bj[{s/o S>s*ֿ>[/.j_6OCnnKg+z濢~.'(zKg>Cb~"_c~OJ:gcz#^+>6K//n~:*ng#srBoJbOnoR&&^k{jz*gK*./CN:~Kf>΃[O +/:3*'o.?? +' JNrƋ+cN+zOr/"^so"B?&C&'n3#ZC +7[RrC?2;>{S*.{_/^&rBjGgof;'32.ORso+n:z C2N["__FOz^S;&Z'jC^3Z.?gR^ns[B/?K"{K;"CBC +*[:zR#2 +O>B?2++Z;K*/  Λss*Z˂KK{3n^*" +*2C;["z"Z;kR +3j +3 ++{ KS?+Z{J[szB;2CꚲjKzj:v@@";y1a!97/X`x#Ii99i)[3."JW9@(Ȇ-aI!FH&rٙ!7*^f( VGW)JKk>7_w)g pȘHaQYy!rh (Ff sK@XDz?)g3k>~ڏ#{OfH!Y!y&b?Sc3SS3nrr2[S/o/_/ϳC :3{"Nvv^BS7))iW7gO;cjzK*rrRNξRRZbK/S//+sSS *z"k:RrrrkC?O___S3Zz".Rnn..n22:JʊjK[C##K[j*K;C*J +:+:bšz++:+;[{*{ۛ#KcC{kK{:jzʚ k:ʺJJ:"j*Kj*:*J:j +j+ KK +jj +*k ;*j+;k +z+[k Jk  K [K*j㚢:"j++{*J닋Zk  ++:;K**jj"+jj{㛢 +Zr*"ZRJs +{b;.bZ zjz;[:CnRbK+JB +/+R+JS3 +R.sC3R>&oZbr"nRZ~:b.{#n2?~jC;2 +3*kS~.NsSr^6o&^N#[ _gnzB*_':b)3S&Irf)g_'w?7W{ gֺ:RJ)/[k/_zG ZZ/R.2F+S2~f_~_3'rb*BNv2nB _R223[~O>RGO"rO6›FR~b +?z?'Sk+_SΖSNS{;2b3*[Jkʋs2sb{3s;33ΊK:s+/BZ.*sb.2[?{Rrr.JKR+;K;JZʢk3#J*j# ⛣‹BB #CJ**Jc{#3 +c*:R# +j[JJZ+{ +J*+jsz*+jZKbRj +;*Kk{K껋z{+;3; K:Jc#K*b:JS +c*Z* [(,XW9W(n(K>RWˣ3/s燃W)j)yt1AIQ`9.B +2)Ɗ;_&oGgCC#`X[9WZ^ib>rsG2{s_׷_g?W9.@qG9x3kVbrFoNrN9YI'#7 +rC_ i7_'7 8amg?) FVf6w)iK~Z 8gO +>;S3?7i)g' d,.@p +O YzVhVfyɷS&NH9 SF7)oWoW)'2d$p&qI F 8 1W(V`؞W7 ֻ_g) 62S'S'/7Bd Ww!ؖ811)o؀`Vi39GFHZyiiWRB+'C'7C ,oIh88p A!I9V^^7w F(~oww_n2NSwB8\g!M=j!øv c ?jgGf(:>K_c[:K{/wG)_0 }*9i`@kH؟!!93ɆFFf7w~&o?RS>3KOJ"2/G'/3''|րVqY~x Ivh'g*y7K^h(*2h3rWri)?ێ_cOc˳o~ph.97yG_y+ sjC?k +jR>› {K[:k*ZBz ~^n"R^:+c/?S33Ss;j +2NR. ʂ2J[o3[#*kk +z"ZZ2Rb"" SooO?/c;bZ2:"rBJ#cC ʺkʚjK*bڊ*:"2Bb;;C/CcS#K*z+zrj;jJ{j +zj +JB2BNNN>N. _'g_O?ok*R.rrb‚:+{{scC[KKk +&RsGWW7'3##KbRn&&f^^~. + C_os3//{s/#NHxv[CGi ))Gww'?_S[bb>^(vFfG7gg'Ϗ?/S&xXHx`x(f/kj)9iI iG)igO.Rff(hfrz;ow77LJ_?oo/&H`XHh_99əyɉWWOg'o[n&ƶ86H2GW)g_经3/__'ۀ0Z,`8 ƈ_WY) ywOw_7BfvV hh~C/)))w_3C?˃n,LX87!9Y3g'co[wZNfv؈h(Nח)׷7SsK*3KBH0ЀH^'iI 7SsKb.scRV6h ngG'Z3ZRj"^.nnnz( Ȟ_w ii7o +2 f&NR&>Nnk3SC{oj3;sbn2Ržr Jb[fFs_ScgχsO;B*JJ?2#[+NN^^~ +#^/On +N棊oz>'z*NO_[gS+ s/K>OVn'&~fF˾?22K?.^Ϻ~o.2SC"?nzFϢ6R['*NSSCs/:k*oo""*bg.z/Bn2;:&'Nn2+o^: +&s#K^;ko3cK +"s.{곻z3s"kˋkC; +kj3 +bk{J +ƒ"*"k++ +ۚ+**#;{**z*k +;k+j :k* *Jj jkk:; *jk + j +J +**k*++*k**j*k +3J+* J +kk*j**+jj+k**jj**+*+j**jk**k**++k*+j++**jk*kj*j**kk*kk*+++*k+k*++j+*j+*j+j+*j+jj*+*k*+++j**+++k+*k**++***++*k*++jj++j+*+*j++*k*+**k*++*+++***************************************************************************s_/˳+ ++ZZrJZ *#R2#JKc;c+c+Zj +ZrR++j† + c2z3*;3JÞ·jJ{ +džs>r +ڢf&.ò?Rw k__rG+Ϗ"Z{fOCcڻ?/OR)Fvn_+ "VFS^{GhS'Zc"_SW_ΊN ~fW?_3)6i&V'hr.7:^[o?^V_?g6._.>?b*j2N^NS"z~KrƳs~/"ƷOCKB/R32N&" '^cs2Z.{Rk"f +B.'CssZ[/jNC⊣+_NK#Oc.2*K抏B2Bkzn&/n^/r">j>.Sξk⢺ck+zk3J*K3#k+{r{RC[*k껂;.>s33+K*J:zʚ3s33sC"/NB#"b*JZ*2."+K"Sn&fvf*wiiwg;R⾋c+ {S Z +~^̬Fh(y-aaa&8(ֶG'ׇ::{BJ.s[sã2jZ*zlPl,( *)1ay[BN^V?)_2˖>[oB_oB*K*Bj" +[+gW06V9Ay9i>((^./G_2rjr2>>"?Ojc+*>"r{zz[/ZNsv@X^g!y)w& c[jnz2C{kS꣢R*B +.Rz "zkZھF6SSc?Gww[>2rNRr*":ZRbC{Rj;o^Skb.Z˿b2Sbr +s +..jsrKo:#C#So;;KkJCrk¾rfkcKNZ/b +Ͽbj[jgCNr2K^+zZr2oOK늊{&#ںK.3>b_ oNn;j:Nz>B?ϳbN&2_[SzBKKNbb^NsS/&w~/n~cob&F?~>s' /77WJG_h(ƃSh~{Z2g/f^bǃ&f~sg#N3JR*Or*S;z;&SbϾso[Bnz [^N_w¢KjjgO.c:2&ゞs( j/[?rr37Or^[vJ>/C6 2 BS3K&ֿCRN_~‚S3Z_fϊ&.C:C2W3r3#.s'2R.jnf&#~f{R&Ss{r^{gJ.;O'f./K[zrZr32._Or^b{ B"j{3o.*Jb*ϿCj3Z+ J bSG/. +{˳˲c??z'_2f&nKσj+Z"S3{{#Nb+/*Zr +2os2ZJc//K "s r;o{zSO3 +RSs +~";ZBڣ3z +[zbjkcr2bz/ 2BZkkS#{SO+" +kb2RBﳋbBZ j{2Nr* +:J* +&kb.BCC燗?C{Kʛ+RKK~ng' lFIOyAq9?Wi(6oWN^+7/N>"#*C;/"rzCx<<,i)9-Qy_Sg'i9W)Oxf[׷7' jb{/_g'3[O,&iQ!_w'8F37W_'_nxȆNzw7jf΂SS?ϳg쌬BRoɁ1 wW)?HvS///))?2FֶN*R΢CÏS +N.;k;/&X(R!!iGRj;zsR.ʚ+KC/K2.CZ3Sr+c{On(H&^n.7 W+s :22f +3ZcRckBB>{[R2S.kj {Rz"R>fNZ.kjS_GwOg_Z3s3"zs?*B*J +3rrBN^nJzr:R+zrkZKB.rZ:B㋺C#O/c/3zc'3O +^#s& N:n.~C^ r/; +22S#*scRS[zÏR+ +KosBJJs_j*_3Ks{r;szo[nnS:R/ +[cCnSk[[?cK. &o &2s +[Ξ?b뿋/#  +3/RﻃS;S/[˿Z#Cjjzn+.j: Zz;Sbc3z+Kc +KOB^Zr"s*coj_RssOjjZ{j +닂:3s[oSB/j;/krr;j/32Z3*r[>z*OC/Bn"B"zk2 bcR>rbbR;[Skj33>.fr6/O"z_?2r:[& +Z&. +.zj[:S*^+* Zr;+nz.CKo*BSONjZrJ*2;j3zN[ "z;>rJ+ +~‚s[s[O3j'/o"+NJ?"_šR;>3r/;ss3 ++K[NK{+2JCRZ2:OKK;3.2RK+* +N;Ob2*:J"/ONKo3?3~;n~obrSn3KK. "O#;[S"nb.S{>S;+BھbSzc/Ok +;kCS.&'Rc&{:˚j +3?"bj^*/+*b32;K+jzZ:ںc+J/[ j. +C+Z+K˺{R2;2jKr[Js2˳[R [+ +**.BZ.RK# rJo>2RCcʎ{*:*[˃//ۋ[O; +{jJsrjb" +rNZKnBRBR~^&v~^^N3_'gw ))_: + +2*kCڊ[s+bp`pP`(&O)Yaa!7"(HVֆr{7g?/CnrnB*s/_Gf ؘJ)yYaqy_[r&hgww)G/kN>^O'gw)w`HR9!YAAa!wF(.:'7GW[;> +SgGGǗ* ````hz)Aq1a/JNx8h(FΊGwWϳ jZ~Nr+'gG(X` !!A1Aa9z^(x8hF.'7Gǿ"Zn#?CsoX``HhY!a!W.~(V&^^J3Gg' +.2Bj#S/Sۣ{J~h8Hh֖g)yyi_~&fffFFbJ;soϏSkꊻ#* + s[ :+F^Z?鉉iW7go#KjJb22rRnξnrBZzcs/SCC3C#+JzJzz"²rR~&^~R[gG7Gg_sK*ZRRk {c#{ kJj +J::J ++ +*kJڂNnr +so_'''_3ۋZBbzʊ Kk +Z"bʊ+jj+kKKꋋ ; +z.n>."3ϟ____'{n2Z + ksˋR...22rZ;;k {Jn6Jo7W))'/knΎNNNb+K+*+/CJJzZzJ + +jCsc[ +[#+ zfX(no׉ )2vFR;Kos^Vf~{g'oΎzs[[[sscH0'i9!!yyɹ3ָ.W7o/#R(H{ONΟI)gVvfc);f7or^K(Pа)!Aq1YɉIg^ r'ay)NFָVZG IoHZ)zBCGWW&vg/3ۋ S(@,@)᱑቗{OhVzGiOƈV'WisXHy GbS_j.rn;gb~hpPp1Av/C.O)!9WȘx8V&"s?â^x(ٹ_^>2g n +g(H0!A1A77sֈVCos#r~n.+k:VʟG )7BS'/ +22nZ볿''hذ`(!!Y/bBi9iiWOScc:(fnˣ3*&k[/Kr ʞ?>Nsg +^~"^&f +/'_/K{sO''[;:J"nƆ~nbj[s:bZˣsoo3{ +k+ /3fƖhHr2+OS{;?'w7'3;jC[rf^>bbBB.B*#C3;+co_Czۺ+{[cz{ã{2r2.2.n~b+c3s//'/ +n&~ +* {[3s + Kۻ{.&f&h2n^J"nCSo_g'LJ_S/cKk"R>^R"ʻ+SS33Sk *:k*ʺ +;;;˛*{ +* +~jJ{//oosSS3sC[k +*z""zBr2: ++j +zb[ ;K+Zn.^B#+/oOO/oS/CKJ2.n2R2:zz:kj{[[c#; k**jjj* *j*ZKkk**k cJJ +JzKKJjk +jj+ +zJ* +Jj + ++ ++kj+*++ kkKk++ {kk*+jkj+J +J:ʊjJ*J*k*j* ++ +* ˋkk;k+k+++*+j***k**kj*+k* ++**k+ +j + +*+kj*+k k*k+**jjʊ+k +* + +**jk ** +jjk*j*j+*kkJjj*j*+jj*jk j+k kK***k*+++++***************************************************************************************************************************************************************************************************************************************************+Zzk۳ۋ+{[kJ +k;z* K:J +* ; + +jK****+j ++ +j+k jjj닋k* ++ *j+j**jkk+*+ K+k**k*j+*+jj*+* ++k+++ +j *+*kkk*j+***+kk*++*+j +*++++++**kꊊ****j+jkˋk++*j*+++***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_german/cause_3f_loop.isdn b/tones_german/cause_3f_loop.isdn new file mode 100644 index 0000000..811267c --- /dev/null +++ b/tones_german/cause_3f_loop.isdn @@ -0,0 +1,193 @@ +*d}EьDH$]a~>~~&&ff+owWWW矏+>^FFFƆNRڊ OSsã;k*JnN^f6F&2{s?'G7G'/hg +"&^*kOGfV(6s#7WWwsσnZ&^&~f^wV?_S)_7'KǾ^`xxKo!Yٙy )>F6((F&JSg_GLJ7'_'?gg_G[8p0``xw!a!!aY)?rfHHv6bGW7G7___/, ఀ`Xֻ2y)၁9iWJfV(8vf:_7w7Ggg'?SOHh(X@VR w9aaٙiW/#^V(H8VVƾ/GG77g'O(shp ^鷹9aaaYiiW'/#&v(HȈVN*g77'G?gJ@@ Zw!YaaaY9i)fVhhֆk_'GgGg_'_'_JH@i !ir.hh(^˛''gggGG38~(hp(^y!!aYaaɹIK^Vvvֆ^^~z+s'__g_G7gG80X `6nIa!a W;^&&RNJ_GG7G_XX 6 y!ٙY9)__Cb^^>&^>O'7G薸X H.~7w!)Iw_C.^^>>2ں/s_'_@ hHbr^7wYɉ!W)g/ZN&>&:g'燺h^8`h[ +)7!) iWIW's_# +r">NN:KOFv8`VH23Iwi)y''/kjrr>n2jBr 3sHH(H:ng ׉Yi_# k:bZn.22:Zvh6(HHvhVW y 9)iggs+;J +".>^nN~>F6f~./Gח)7?So3[ b22.^~~&^2z2RzˋÏo?____//[+22^#[^&f_F.so7;2+kC+Ks_2Oj2SJ^..+^>?RO{bOϣk2NZ>. 3 +sCk#/{; ~BS*/?+*/o_'ϲ{oZR˟r?.rj+K2"N;'N_JGWzi'rzk"Vb6(Rwro2*'_"3[N2*bs:G>'^ֶv&V+v[v~) +Rc.v'Rf&6+V_&/2㉾gʟn?w"ʊ2N~f:^*+Sh;)^Ngc{&~Vw)^WfO^>i>r6ig#N'O_Ǐ ^.*'OO&>/.&o.'s>2'{;&W ׳;f[jFvo"g6*JZs[+/^>Zb/R2r*k3b +**{CcK+:³ZZzCc*KKccZڣ+*j;KK:kJBK +{[:rbC Jz k{Z[Kj+[Js*3{뺺ʊZˣ+" +J+j*:r["z zj;+K*k 3+ZJ ;*z +kK:* +BKZk:O³{~?R_SnoRszjcO2R?J:"fn.j+gNjRs;'*f/#n^ʏSs;jr+FbF"*JB'7~js ~O:g£ C^3/&oNS;*J>zbJnr~ +jz +Jz"ۊ3?GWwX  I ɉIGKVCj/'G'/O*bFf^&~~ /C/K*N2r:JZk*+ښ;c ?3''g?r>n~nָHz'W)i))ǟ[r~FV7W)))7g//+. +s v8ƈ^)AIiXƆ掎)yI_jj(HHh6NB:_wW{ +z {g)iWw'?:^>Ύ~>NF^&ii)V>Rri7?r") LX6-QYW``@6V.!ᙗsBVX8vrwy9GwG*^Nnz{;zkX@hvf!yiF(vfffNrC?_coC.b+__g'L0 v')Q*X vHhV9Y /h88frbGIiob&;s#n`6fHj9!Y gY)cngǏ.&.>:>{B+￿sCOS[*K:kRv^VhVZ3{G)_))S+'f2>^Bb^r#ۊ+''kS˳C^&f(:zGW7W'soO>~nf>R.NNn* #/S#s/ SScj:Jk +&&fF6~jSGw7GLJg_?s#.^^>Ύ2+k{#3sóÃ#{JjzRRR&^>NNNnko'g_/[.f/&GoǸWiWZ/cSf'_'"#36(((FF.wWWW_''7r / +>n +c?B/og3*3c[Z.c)sw7醬@h᭑-1hV3X``^sIa9b_c6hϏ"/g_o[ + O#/9dHY83mqqmx_`)G)[6VVfR?7nrRZ~?gwW.Oh-a.H&SN x y*Z^~8&SkCI_/so¶닣 7G'gNN>""s/Cs/?OSCs{* *":""R..>zCCC_o/S/j">..2*Z2KC3#;#ckJJJZ22JjZrz2.RRrrKÏ_Sσ[#C+*Z"r"RR..rj #[KK{K +j{*J JbJZ"bz + +;3so/o/o/;kjZZBB2b""zZj:kK*j *+* + * + +J"bZʺj+cc3o3sSS*J J2J:Z"jڢzJ:++jK˛K*J"ZZJ* gO3_k__^ϣ+»[." +J";:g{kJ;コnn6F&^.z_)'gO/z2^n~"kjC;n'/&ㆣ; +JO>Fx^;y wWvvvvrR+Sggg'g +SSrCۂ{OFHK V(+2痉yY97wwcNVH(hf^*_7G7/K>.RK"3ö8F( .ji!9iW_&vhHhhv:c[G7WGOZ*R+B˺/8_(v(`(H ʆS))iy9!y9 )ighhȸVf2ڳ_ǗW׷G/:ZbsSx 68xX  YW)i'S +&vhHȈvFr/S?Gw'JZrbfH&vXx` h._əYYyɉw薖(v6ƞꋂO?G׷g_?gh @x HaفY7IN2Vf6ֶVfn{{''_7ח'_/X8hX `HV)a9!)W.6h~hFVFR+j7Gg'^V`x`X H;I)aaɹiiJs6(vffsOG7GGGg_S(V`0 &fIW)ayىgiij(6>sg__gsHx@`(r/NgIW Y) Iy)wj+#N^f^6Nr[s#/k68hHXv +{WIi )7c +"¾&>&&.ξN.:+{cCkj:F6v6(6fGG)ɉ))W''_[:Z~nR~fN~N.2{c; [ "¾n&&&kS'g_g_'?/3 Z"BN>N>~N.2nRzz:Bڋ ++c [c3O/CCk#2rB*z"+zzZjks/so_3;3cnJKrRr~k*F:2o+ 3[sBkJ[b JJk:;J>[^>'*wsۏ^^&"ro2#c2rKc.&NC6nzz3sw&cC'.j + +K/r.{/#3"Nvg3bO^'iN6'2Rv2r?K2NN)//Z>h8)W'gF(&9VnFkZ[siw_vB: + vGnBNv~R?"kf斈'~?n. +{*/s og_ Sj*^Wv?(gFzgw/VGb"Jk:^{Fno^'''>.S73Ow'/Fڗ+&kg)3>_f;>?G(vz^B.6Zkgg'(G_kϾ/KnCK2B[NORwngn:NoZOFcgJ3jk; +:>~"32J +jg:Oz. +sR#:;K{3*:›kz;:#jۂKZ{[Z++j*+z+z*; +k* ++Kjj*kj +kJ;+ںzzr2zk;##kk+*JJ*ʺ +J* +*K kKj*j+k +* +Jjꊋ +* + +**+ j*+*jkk*+j* **+*j+RR +cZjz ++ʋK**:" + + +b +j+ Kk+{{[[˻ *:Z2BbbZ*k kK{[#ۛ{ۛK *J:ZZ"zJ:+++{K {{{ k++JzJZZ": + [;_sˎJ;*2**rj +r ++B: ڻ:{C;kc3RZ>:[2BjKJ2nB* +Z"*KJ+:Jj:bz+{3C[C3{j;*rZZ +nRjRjjkjb*+K ۳c#c3S#Kjj +"jbz"ZZZr&&NξRZK/'ggg__'O/[* +j"r22BnRk2&(VvVH8H.SgwIy w'/:&^v֖vvvF&sgG777'*j;HX(``gayw7wW_)'/RvhVvfR+/Gw'wɉww)iW&&_Swi) {3"{& &LjR!= '>@F9ay1qa(X68^__O^&Rgs{goWwg{JND,yQ=1801y_AF 8fHkC*__Ǘ);8$R!/-x6@!9XN&~w (Nc/'/#iBf/Xd\yWQ ^0qi +H7#kb*.GG'ʎoSC7)Z;&>?Pٍy,y'iA1hK g3bǹFV#o(N?#cc3S +C?_j@d y`!MGׁHPș8i_iW`8;O"i6W +7_~w?gK[:Zb[3K`pkw09mAA89)hቆ2yVSΈvRWs.r[NS>3j" +K +2Rr2RRںB^F_OOg?c3s bZJ2J2j +.rKZÏ 2Z;CcrcCRzb:.2"ڣC[ j+Kkꋣ# sK;* + B{rʃz2J k:J{{K*:B+# ڋ[ +K[j:{Kk*cZbKsRC㢲*C"n[{*jc#z;+;**K* +K{zk*[Kj +k.*jKJ+ʳ/뢚k*JjKJb ++kj˛#Kc#ʊ+J ˊ;#:bں:bzz:jj;ks Kzzr"jʺ:*J[JJ+#*C#*K*z*+Z"*J*+ +jz+[ ʺ{*[+ +{[{j; KCs +#*Jzz:: +ꊊJJz +::*z*Zb"rN~NRB+SϟSKj"2..NNnBxvv&ks99iWo[Nf&fR. +cs___OS/3s(66XfFwayI )W_矛K:(6&zs7Gg3S3"(~X@Fh7WɹW iWgg珺2R~(fhvRG7w7g/s/SC[r( H0^;iw ɹ i Kkoj~nvVfN&'g?Wwwח?os[SPHژ8ph f)W! 9I IɉSN~hVvvhƎ^N_w)g/C3;/P.8vphZVW! iI )s+##&VH(F>N#O_k?wii)Gg'3O'p< V!aI9 +Ȏ /Ynv/'B8">3_O'_[ &&o)R9ѽ7h&ɺ^G (ʖF g+f8X{ǎVFsw&+_r_ _>v~o<`Q QS^GW VQHHJig`h?W3h&'iWr>KS_Wsn&B<작m)8wS(9qHHOw踞ii~ {g.F*Sj"?go2fnCgSgkoLhbGWh+i"fΉȈNGy :xr??"ZϷw" osW'~v*/{o@ɭQa&I_` 6! /_VVSwZ&h*7^_G: nλ'w7S>.j3|\19*a!oXH:9W HgC^BLJN(nC;zr_oozz_'W*&nh<\@'AoiqY :Oo~f~^(Vi;F6Fwg^gJn?GrG_WF\3WrVxh"YqR7G8OƖ+oFBj6zw/7IWN;+B@ KVahw8ڙ''wVC62>6:S.>3ǷJKOczw>ƎFn1yy/98h9&y!?{Ic(^ʖH"B{[#ko'oosS/;;3C̰sx`YrgYIIW#')IWzcvf(RJ'o?Ko/ +SojNKnVVV3 IG)W_O3Crffƶ6~Z +˻/_OOOo/c[ok+f(88hH滺Cyw'g'j>6Vf²k__'SoO?C{c *(H(xȈF"׹ɉ W7WW_#o2r>Ff^NS_'oϟϏSc[ ++2Nvv((vcC) II 7So +f&6fvrZ_g_o'3KOjʚ +ffxH耈v^_)YiI g/obzkrNnR&&6fξ +o'GGg_g/S# z*.˲*.v &f>._wi99ǷGj2z沾R6ZF>2cZo?o[[3Zrr.nZb>bۺ3Gw7'J&rRBRJz{n .2r:j. +*n+zrk+. oNJn"{*K'3_/ZzNSKVR +n"of &Nocb#gFZ2׆f&[^+B:zo.sc?_r&7K{.nZON7&//j +z_^['2^z:BfGs3V F/GvoN(3fZ +*k3;o6wF^7/rg.{G#n^[#K.(3'[r^3_c2^7w(^· *Zsn/_^.oG +foXn>k[fۣwk +n( #SV'Fr#kN^wRi‰R_ +.NhWf^w>JV7+__OoS/'& KZ_63FgS^f^sf)&_&&KR"#*nz23J2nC#+*Z"R3CK J*;J[szˊj+ +K:KK**:+ ʊ ++:k +**:jk* +kk** jkJ +kk+K ++k +ˊk+ +*++ KJkj+kkj++*+k* ++ +j*+ *jk+ *j + +* +kj*k* +**k*k*+**jK**j++++j+j*jkjj**jj++*j*jk+ *+k*kj+++**k*+**j+*B3"; * +*+jk* +*k+*j****++*j j* +j*jr;jKj +j +K+;;{ +*Z: J ++2+2 + +b#Kjsc *;#;z+k +Jkj zz+::j*{+ ;{*jkJ +Zk*J +;*; k+k ++j:j;K+ʺkk++j+k*K+jJ*kJz** +:z+++Jkk +*+[[  kkk jKk ++Zj+j +::j**jk*++jj++ k {;{;{[{ +ϛJrr".:+Bk*Z>R2z{7Gg'3 +2R.N~^&&^&f&h8FHV_əY99Iׇ_ckB~v66VVVzSO'g_?S* +XȈ8 f>jljY!!Y9)GgfƖ(hhV6Fv6f:sC3ggLJ'/3 +.X``^!!!ٹ׷'&vVVF+[C'GGGo//2~v88` hr3ə!!!Y!9iWG's6(hȈV(V~C_7GG_?sKrHx8x F"#i9Y!YY! )g&6VVHȈ(OwחG_C +2V8 xhf.7 YYYYyiWG_S^(Vhh(ֶf"O?_'GWWǷGGǟ f`xH&F&!!Ya)kf(V +"R+S'g?/;S3zPP@@Ya1Y)/&(RR?'NhH(&nR gW))Wg3B..:G?3`lhOiYAAqa)cxC[I wfRvHX(.)iw[>nN^{w,@ f9Aq۞6Vxxv/s9 gXfrs7 IW'ff>~>zogwwgO_o6x`8xG9A â(COoljI*6XȖZJ/9ח7g2fƞ~Zw?Nh l X Vga1AqONȘXZk9Ws2fRx8v~i)WwzN&N~f^['G_SV,xXh a1AAq19( .z3IW/ʞHvn:WwǿR~^^b/'g_/S#P0H9Aagk>ƖhBcW)oN +V6Z_G'oJN~R"B'S##6hp`8h_a!A9?fָx6&;c_S**rn.{Ï?3SjZs㊚J6 ظ(h6bIy!aa!i_:B^((n+c3j3;Z;*[+jJJjꊢb + +2r>NN~&&^r+gw7wǿozRR"rr""2n.*bjc;jK{kjk+;{[*+jj +:jjjkkk+J +j: +*kk˻#{{;K***: +++j*kK ++j +::J*jk*j + +zJj+**+ *+j + +j +++jK; +* +jjj****k++***++j + +j*jj*+ +kk* +J +ʊkkk kk * +*jj**k*****++*+kk***+jj+*+ Kkkkk**jJ +:JsKj˺ +ncs'7SS/[z.: +zz" +B +Jr.²:*[:+2[s{ +"ss#"sʣc[b c:+jbK'JfOSڏnR~*[o_C/kjzNkZj;Zro SZ +J>kf^_&JOnzjc#n ++ +2vWG F)r"jrnr+: +rKjCkJË2 C+jZ *k": +K3>RC>3+.{KJ"rSJ2{Cjb[j kk;{ +CKs+*Z{c:zrc{zZ:j:*B++bcr32Kc*[##3SKScj +:zJzⲢJRZZr {Rz{"rr~Nš*;[_GGG'';B+2Nr2bN* nN^vV^K_/IiWiCkn>n.nzbB..rf"2j#[{co.?Sڣ+BRcJ S#zNhV֖&RgG׉)WgZJr"z2zOcsOC*J2^b+z*K[sc?>FP WI799ֈvhƂ_GWI_>hhV:oG3>R~(zOoǟ+j2.n2J [S6v(+SGw)wGg_o3 +:kJj{C3s {KʻBz^"RK* ++J:*kk{sooS+ P8[wI!aYɇj^hFrwg3J^F(go''?# +**r3 +k2j: +Fv(XxXw&!77Kv~^6"Bj?sJ6FFf_''o?KJZ.Z3Cs;.JrJ"hsHXS.wgwy9I'Ί^^& s?JO ;2^Nr:/?S/ccZ2ʢrj: +K[k+₢2.‚zb^¾Ocs'''GO_3;sJ˺kZ[.2rzb2*jzCz:K:;* +:kz3;Kj+/#R/>:NsbBcB{~~[;.oS~_rsr*sc2ScJKK"'b[O[s:{#Zsnj_>3n:Bo겣zCnjOn/ nOb3۲sr*RJ +orzBS.:#rS.;^s.R c3&+K+s^?CRO/J +O[ +*JڛZ&"c"sZˣ';Bj꣟fÊ2*2R+n/ >** 'f>?B_jC +"rΊzzs;J2/R3RÊ.+ +R3Jc;{sNk3rϢK>.Ú +3K.j{/ϻbs{ K rnJ. +/.cf B j3zSJsnڣ2cK/zSrs +;bŸKjO;2;Z3+3SS.Z2#;2O.'JJ{Nkz~nB;c~ʋo3sr^#+_f.j CRO.+R3*#2.:++{:zO*Z2OsOb: rCRbss * B.2z#2{ +s"csjs{{ښCo cnjk"âsn?zOz32bs*.J+ZB B#s:23 +3:/*Sz +ڏB{.sbⳋ + +jz k+c;۲bSr + Z;nK>zKrbKK + J#J/#zJڻ +;:;Z# ; ;Z*"+ڃ C; ++*C+:{.zj: s3#⊻"{Kj{BJk*{kz +j*;k kk +Z*Kjzkk +jkJ+ ˊK +* +j;zJk+ + ;*+J + *zjk: k+kkkKk++jkj+K +j*kk+*k +k+j*kj* +ʋK + +kK**+ k*Jj+*+kk +*++*++k* +jk * +j+* ++jkj*** *j늊*** j+k*k**k++kj*+j++ +jjjkj+*k +++kj**++k*J ++닋+k * +*+k+**j************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************* \ No newline at end of file diff --git a/tones_german/cause_41_loop.isdn b/tones_german/cause_41_loop.isdn new file mode 100644 index 0000000..addaad6 --- /dev/null +++ b/tones_german/cause_41_loop.isdn @@ -0,0 +1,244 @@ +*d}EьDH$]a^~N~nKg7wggO3* +*rnv`0ZGI!YyaIy ^F^>3j˟sj* +r&RgCGGS{kJ"cS33Sk:rRNBrNʺJc;ZK +.&n [)))oOz;2bzZZn8V`px8+!!aw66 FYihnhx;/n2oi7)7),̉wp.! A*Ka)a! WgXx8H& )o(V&O7_)vFjۏ_g3b~~&"ⲃ??g'3NR;OS/c:JrzJJnV6OZ7GFrZk7?/KG[Rrx И{H6!qw&/ic#w9vF^Hx)IW'h.ΛWj>>hh67wO.>)ijL9A`(~FFWqqGF~`7yIO_HxO7OwW{)v~Zc'f&r_GgςN~rSO۲N>:_'C#gw'k/_ \MWlj aI9' aw9 gw `SWi_kHi#F薲'G; +66/_'Wgc&6?/wwO&R'1 +_!0`Z)ǟ786yi:/Hf'iOFֆ~(Yi3 + /> m,oݍW(YVl ; ?X{aq2j3 ָ`hY ">vw(fwwCF+oWGWv&O7ODZypP8qa9y)@Éח/ fG +(GI7_+Ji)'^r i t1mmY؁Ɍ,RAѿ_A'V@֙_i+f*/Gf_iiGs*V/_'^s/1A6RL0WA6/6s֘v'c(Fiy_sbVvw׏w'NR_{CD IQ!-i p (qVVX  ((y)hVi~ǷG?K +RjwdCqy8m(l*hWY:z6!6S+ȸ^wǹgrr:ʿJRS__r +G\!YmahA0 +BIyˈ^&G/zcHS'_oOgZb +;CW<@ IyW7y wHx/)!.'{V)sS;KO3_OsC JkC6S|W`l29) Wy/fsO_)i/#gr6KǏgojJ2/JoSo)쌿?aAc iNhFJBg 'iK3Jn2_'_珿[C[GX,PPOoa׉GG2B*VOb#/?_'{β+?+SjbϸX?RX3.iy/fC6~2N+N~c_[Zs3JC# +/?*J{s2 +Zf&&Z'/_?S_sZz~2Z: j +{3#k[/?c[;+;[BΎ2.^F&>^ +ホoS_g'_3S ~ΚN.š"jCs[3{;۳KKr"6B>Bk*'O3_S*br>R¢B.R.z# +{K+br>^>{;O/'o/;kjKBZR.rB"bk2Z {?3 "&ffŠ'o[k J[k+*+z":Zk{[/OooNvVBj/G7ww'_3sK +b~&nN*{۳O?o >v(Hv2sWW)Ww7Gg'o*kRn.>~&^2:;____SSVvH&SG))IׇW_7?/S ;²>^&zz[Oo??Sc;vָV8fB_iG iW)g{o#cn2&^N>.jK*{3S//cۻ;26(c'OwWWgg_CS[KnNn..2***KÏ{{o*K.2>V6&&v& /'WWW7oS +//snNof^/fb^[ +?Bf fsR'"JH3;gO''COF[wc(GH3f^ ȿf2 ")7(Hw)n(8ֻi6Yiv.yNZY־?b7.Z;[:*+(fWWV9sHJ +BiGh3fVKWgzVi_8)FoƹCʞ/KfV(WhOȉF^>vsoo#VG_wii8OH~XiNx8i@&og)F"f6i8`'y@)ى@IЁWp + ApWa,Q^0(WhN/#f)i !i(Fsg&{W 9b((9r1vYHi` Nzf*wHwGHHfNfiɸoȁ)X9& )sYji6GVFyWH67F_ֶa8 GX臟g'/涗{avځINa0yV9gjV~ ֙ JRN7淹@v1PX'P{ yz aA@27kΗV6Iw)8׈F:v7f'(!?xh`ց'`{"x+iAɀyYG'`VwVvaO!SF8ivnVf#.Kknfic&+R2)F^WF_2'&fj'+R3ʶ?Rϲ?/["/CcSkfNn{[[2rn#R&^NO#3J.r7sKkr+.NS3*+o_SZ **Ksz [rzB+ N 3s.bjc{:^SS/rrS?*&nj"c˻.;*:zz*2JK[2S>2*j^3;{/?b.*2BR" zڎ:{;:*^f&>ggǷO_ח'g''*kjz* Ytܼ_I񎈀jy9Gyھ*BZn.o 'sKr+SWGϿ YXD aA)^Y*`oB/v_[.wk/R_;KOÇ'G)9|AAq!a({9sisrof2w_SGJN;_77R +Ϗ7XlaYi>r7gs +b"':òz +&~joOs/W|`1i)fcIÿk*V׉[ +Z:S[zk2ǀ @ٷ*G K.^{zc{~{[r_WNb:{[j[f~fr`h_K7Cjww's/+.sCRzsSZnJ*+jjb + +rnJR2"kZkJ>>+C o[ۏ;S +/[[_;;joS~J rn +šRz+Ck [+rKK +r;s +/cjs/*r/J#k#*oo*jsrJC+jJc+B2cC"nCS:Câ [ +;cN⊊R*Ob*jKkz{2J Rr*+kJjڋ + ; j:b: +rJ[zʲ Kj z {*Jb{j*k:[*;*cj2 +cKK:JKJ*J +cB 2#ۢCR*z +#2rS{"JCz*33S{b{Jko*Szkۣj Skj:jj[˳ +zKˋr+[£J.";k[ók[+cj +KR: +jʢjR +;jꊊڳc3JRK"k23:r* kJc˻*{ k +rCB{b:zʊ*k;J+ +jc::Jk>ϋ*:k#bJڊzkzsZ;oB +s+**: K" ++{j:j;*k*K+K+ + +K*K+kk*{k++* *jk**jJ+ +Z +K{jˋ+**+j +*k+ˋk +++ *+* +* ++ +j kj+kk+jj*kˋk**++j++* +*k*+j*****+jjk + +*k*jjkk***kj *z3_S&o?~z3cZ;*:{;j J +*2jβsKK +/Z:CjK *# j*K*ڲ:+K+J{ + +Jj kKK*j+{#{ kJ[K++jJ kjj* + +:ʊʊ:Zz:zZ"ZZ: +j+KCs/oOϏS/sÃ[j +ZBB.RbbNF666(F^s_w)i)Ww?S[*Zr>NNN~NnRbo?/N(HhV.:N/ iW#r>~FFf~. +KC'gg''o[#(hH(gW iiWwojR~~^FvFFf>bK{sg''/3(xHX`H~^/)W yI9iw7_Ocr~~^F6VVf"+G7Go3cV8Ș`HVn΂GWI9yI )wwǟKJ憶6V(V['gG7os+2h(h8(>.g)y9 wGOZrVVVFr:+S_w7Gg_S+jJrh(nڣ)iI99ii闷?Ê^F6v^N;S'gGG_SK2rnV(h(v7WiI i)726666f^RRW:ǿo;++ +6HVVfW99i7G.Rښ#?[K>z#?'C/S'3_'?_l,pIQfkWi7!!'3BF xhXb _g^JJ +w)i iǏ'd̰o2iR&8g&wY7!!&vH8Xi Nzz~joOg7GR;0&,x_a )O*fBxoYWǹKhh(J文?Jo&#ksO/w_7Wz/:'dH/á>y踟kWA!?&ڈ FZ (~7翆C2fgS/+[?'?k_^|`(퍞 AVH'8 !)& FS/&۞okws/G_[k'//#? $^ƀ;MƁaai( a!!6֘Ho*n^&2?_'sϟ3 +cO_^<8!mV !YxhVaJVo>ؘN&^BK?NC'C/3So#_sBc"Cl&rO*_oKO?Cc+SJ;KhȈV^?) GW'sO_s+R>&6v6vƞ#?_ggSSSc/c**8vh8Z_WI׷)_oCK..r>fvf6V~:KwSǗ_'OSorf8VxȾ&_Ii Gw)g'G#{;bBN(vN'''wGOo?sÏ3/CC["VȞs)G7 i9g7_S_'r~Bb_7?OOOSs3Sû68hvXvR~&iWw)yOs7WW7s;GW6ȶsssjkg?g_W,``> /FvF)a!W?WyIRXG 7 nKg鉷[g@|`y- + )py/G-/)N@H2x8)VRgFC/os;'_w)ן3_OX|$Ȇim9Bcw-qrn8@ h~g?r^RSo_G'GLJi)S_\|h8imᙆp@* b9w~ VH hg2˃O_/g7gJJ,,`(x 釹aSHχs懙Ɔhno?;22[:.n:xȖVg'7gGg_s{*[^N.n.B22Rb#so/[zbr.z: +rR: :ooS#+{*CS2nJb"Z;j"{kzc#"cJ#3kJ*2*;; +*cC;j*K"K{kۣ˺Zz+*kBZ;:z*: +{jK[+k{jz*c#z K JZZ{{;jJ;KK*[Jb +jJJ;{kJJ *+#  ڊ; ++:ڊKj˛z:K{ + +뛋:*;:ڋˊ +jj"kKb*ڣ#z;JJ{jj:{J;:; *;j C +kjZ"*[ +BZKڋ{ڊ{gg/*#2rjkbbڻ3+Jr:'zR* k#zNonr2jrSKʏk"3*nb""+bs~{#BzSKsog'/oSKR*r&o3zj#z~ZˣcJ_{[:~jj7c+OsN&2/2˶&Ob:&C/>7O?/GW?iCss'&NR3'R.bi6^_7v'WZ'^{rVs.r wR)c^s7oVw:i;?oVn2#[_ +R>nS_R()χBZ2.V^ڿwSr[Z'gi'[f.^/jb6b(ξwH_^R:OB^.&S[ז.g[꿾NGO2K^Sn +wr w/rSSzó:._r.+Z/Sڣʆr*2㞎*>rc2g>_G/.c¾Obj{6__?o.sr'r_ +B*7[rsw^~>3;.rk>_j&_j+ssZ2^3/^/?n'KrJs+Fz_'#NO'/2K&gsk:sBN.b&r +rn3;3JRjo +CB::K::+s~j3nS>{{+zZs +Kb;{;/"*b3닊kSs+JJ+zZJ+{"JrjJcϛ3{Kk : +ʻˊJ{[ Z{+C;;;BjC"J r*Kjj +*":znn&&&&NRGחg'?Ϗ?';"RJ9DYYV wJO^{ٹwSi 87''I BgK.{?7wW)ZY9W6!_R &~yiǷf(26hgiY'⇇R?g_GCi$ Ii>#AmWR&'J: WW9yV(F~8V ?.'bS?G l028sQ1I7WX8/;sw9Yg[[;XhkGi)sC R&.ojKsH (6I)鹹I*.~Z2so:{ +RKr2š+K33C3ۻK *j*z2ΞΎN^^nr [LJgg'?S3{Z".2^nZ:;sSSsOÃCʊJ*BNn>&Ɔ&._gg'_??s#k"bRr~^&&N.Rr +[Ss3#SScc[+ + +J>.^&^.Z#oO'_O/sjrNNN.nR"BZ +kcckKc;Jj +N>>R:+{?ϏooS/s;ڢr.rr2zJj:#[c[+ZbBRnRrb* [SooS[+Z2r2bJ":JzZz +j +j*{{ KK* + +br22BJCSSo/SSsck +Z"bZ22"Zb +:j ;K [Kj* +b + +jzjk;CC3SCc;*::zZ2rn"bBr+jjjKKK;* 늺zz +Jzjk {CC/szk;"ZZrr2RZkK jbZ"J {s3os{; HrOw)h{"sgh&2" z:K/kF6vFS7w))wCk+:r2b:/3cJJrz*{*;3#OOg_@0HYy)Gh 6.G)) k(Hȸ8H I ׷/fZ_gi)7)7|Ьha93a )SXƆ iy96ظ` .χ)wb.i LhpVWa-Y`F&_iSvx`8F_I*&[Ogiiw,0@&y6-)xț6fwi3VVఈ8& wWywW*f2/j#7f`ʟayY^JccƆgwsGFR('?3/*Sk[oH(8hz3/gIi7w_g's/{&6vv(F2O'?'gO_ScHȈؘhh23G7Wi)iiW)G'bƖVvF&rSO_g'OrVVvhHHXH(I))W)_+Z^v6r(?./G_7gV(Hhh(^GWI 鉉7g_3z^^66VF_gGGgg_SovVhh`VVbG)W iwii7'_3R&fV6"cϟgLJg''OS[h(H(V^N?WW I WiW7_'?kF(V6F.o_gGg?_?s"vVhh(n2)ɉW)oK&f6(v62;3/?GgO?cRvh . +ii I w7?/FFvV(Ff&njoO_7'okVHXxF^"37i ɉ777r6V^2*_gG'g_3/^Vhhxx(&rGI ii W7_: +&vvhֆB +rOOGg/[#Ê` hC7#!2wIWS*6HF6v6"O/'G_c' ( I!9ǿWYI~_Ww;G WR&6(8jbns7i?c_WiG/7HlLpWyji#(!) _ @ƃ 7'gBBC'wi W7Z.`<\,l>Iaw7)y>!y +^fX*'ﻋRz7ǟ{g.~0p`biYiGsWW*ogii7{~H&.g#SS__SSS[8X`V8o)i Wwgg/RVhv^2?__g??ooS/&`H `h8h{>w ى iW7WGLJOV(6(J2K?_O__OoS33CcC`h`C^2I))w_G_or>(Fv(vr./?sg'_OOooS{` Xy9yigg6vVv(RN/'O_'S/os{*(x`V /yy&FF((>:3so'__''os/s; `Xh (`?y鹙) WgwFhVnBS_'''''__'oos/#j +`h rfWOY 9y)i7ח'ֈVֶR{__'_?oSs˂8`RW!9y)7׷gK6((h6&Z*o_ggg'_''''//à +JV ؈ 'G 9y) )_'R(h(vfNrSg'_/3#*jNX8 Xx&WyəyWW '7?g:*f(VhFF_g'g_O3sCkZ¾ Xxxro)Yy)7?_z2hV6N>RS/Gׇw'3'Z+ BZX 8h3iW9ywW7o[Oj2vh(Vf"oGww7gsoS[K +:b2. `XHhO7 !i_kRnV(vFRrs'G)w{>ƈ 8(6 /gi9!Y9鷇GãJ~RN2VV&R +gg7G__?o/32>b.nn>&Hh2Siٙ iW'oK2RZΎn~>&>^R"3Co'?o#[jZ{*R>:"2~Vh(v6f*)ɉiiiwG_3;zr.ZR>枾~>N*OCJ'GSO;?j#[ʛZ +z22^6vfzjs'G)ww''g3/cRr^^.N2:.rzzK/;s+C>k"3r .~>N.&Nb[ 3_'G_Os'o>Bˢ2+j_bG~z;b.rNC/c:N[3 .2Zbڋ*/oCLJOR{ +sS':[3jj[zoW/˿gSz'燇GO_g +ZkZ/+Z&rSg) i_g?*.R**n.jS+ZSJoJ2s+:rsr z{K/_"RRB__'s/￳zBocKn^2#ÇGGGGGs[~Fn2;/j"fs_SO/cKۣ3*K&Hvvw7W99)7+>JF&..NC *;JK#gʿ?^s:on3sx f)Zi1aaY&~F(HfkRڿ?_8&'>{7GJ_G_&Zk org2ϟGh 0)VWqAaYR#vHHsFCcHr66o>''JjbR;*'gw0p8!Q၁qSvȖ +(/gwrh66Vj_{.ZR~* ipV0IAyW(+8CvȢ[SWvvfo.G7_**Nb/;rocX`8Ɖaa9!Wr __ROnZ~F6hF socg'_c?[:3[:#v 8xR^ III9)[?/rrf^CK'7LJ?O/o/{ +ˋFVh8H f&i !)wSv(VfF.?7Ggs3;jzVX f( +Yy)/Kr^vF(N/gg''3[;"2FvȈH>z'jI99ɗw)ǿ_+2r2&ff^FnrbZ/?Os; +J:2.2.nv&Fn֞k_ϗ)ׇ''?/[jjb2R~.2:k jJz.b2"jkk*kbڎ +NZs*OsO'ooãss[K r2.N>RRrBZ"bZbZJ*kC3K[z +ZzZ2++;[SϏoϿ333{+JB.n~n...bbz* ++K;;cs{++:zBRrz +껛ss/o3[; +ڂBRR2RRnRBZZ:k;KkK+{{;K ˋ+*k+zJzj+*+;c33csC[[ j +:"b"zB2bj+jJJ; {;k*jz*JjjK*+[[c#[cKkj:"bZښz + + +*+;j+kj ++j+*j* J+kk*{;[[{#cc{[#; k*::z"ښ"zJJ* **+K+kjj+++ + +k +JJ+kk+K[##{ jjʚzz"""bښZ +jj* k*j+ k++ k+z+ʺJkkʊK[#óÃc[;+*Zb"ZbB22"b₂: +j+k* ;kk*ʚbZ??Os2Rnn..RrZK;[[*rr".BR+ +/_?/oSss;; "R.RξnnrBbZ: +* J~nN.&^J#o/7GG'_[{Z"r2Rhk> C/c#/k[" +J:r"š*N^h>ɉɉwG''CnF&~..;_g'_OosC; +ZjkB,VXx&躙W!! _&³zb((h膆g)WW7C"3[fl@[WiA!!I7'K>[OSSfV6f?Wwg_Os [ +SS`@ؘ_ !Wg "J /{{nRV2J_)7G_sC+[;{( ` x(>w9Ya!!W'k**";. N*>ƶFf.:c?7G77G'O**;ŠjXv xHf'y!a)Ws?z2&B2&..Rs;g'g_Z*~:&V(xV[ 9ɹIG_sCfrf^R>o3sO7KZ2nr&~&"VR;3/WgW'3^C&jrb^+r +O^./3~3o>gK>RzK.ǎꏛCc'c;Osrbz[2b>*+S2o3rn懞_h+Njrv_~3_)‡.RcBڿ:vO6R_b:z'b3)&R._C>7#_OC'~vfwfO>bWvzR(Z_*"3_&G.Zin(/SoVV6?g8/jghnjn.__(_)gzhi^w^6(NR:w()_~3n2S()[/x'(IVnkiHWψ7C6J'(G.?ojhw[~fjvRWGc2[ +S^ +NnNK/>G?#oc^FB+jok.&n7JZR;.O^KO~ + +~+C";&s;.kコZsK#kj +j +Jkc Kjk; kJkj +K"; *;kz{: * +jkjʋk +z +jKj jk +**ˊKjkjjj*k*뺋kjK + +j K + ++ k ʊ +kk + zK*+*++ +j;j+ +*jj * jK* *jk+++kjK* *j 뺊 ˊ+**k*Kj *ˊKkj+J *j+*jj+*kj*jk*+*k ++*******+++k+k+*k* *++j***j+kjj*++*+++++k++k**++*++j******kk*jkjkj++jjkjk+J*j + j+j**++* k*k k*ꊋ+*++j***+*j***j+*************************************************************************************xBg_7 +2JJsr*S+bzh':jsʇ ck"Kn+;?rC?ڋ/_bOR;&C2*.[C{S; *c*k +jK:k*zJJkkJ"jk"zj 3O3*:^fF^"*s___o*ڲ>Nʊsos{ֲG(3?))y'ƣHH6&^) W +[FvF66V.Rϟ7O2Bf>ZoO_Soښ:BRnJ*c[3^22GiOKjr8`x3Ț Y)/O&^h6Ç??;J&s3_wOW_KLJ?zn2+Z@XF&o9g9^)'Z>&((FhfG9W/_s#;/"3#2FpVH v'Wi Rb?/fv88(OW w;+Kkg)?XL`@O)9YY )w?*'RG;6FfV(V(#/_O???/3CJ"^xHxX`H>SgI!!YY9I;Rv(vhhVvRLJg'?o#V8ȸxX8V>gyYY!Yyy9 w.(hV.S/??gg'3;>>&ֈhV(h(nO_i9y9ɉ)'Cbr6(VFjjsooj ++rn>VF^V&/GW IiwwgO{&&f~Nnr: {sc3s[##j j".2"ڂn~ξ>>.:{Swo3;z"r.rRRnB2r** + {{j+JJbRrJ++{SSoO/C +j:bb‚22nrZbr.Jk +Jz; +cj*zk 뺚K+k3[3#ZZZznnrB{ RK{{#K[kZz+ +j:zZkK{k;;;**jj*kjJ{K^X1a~'6sgփok^.o^>v)#gN^^sn~/+ϢzsSB**":o{c~"'RN["33f2/:jN{o&2s2CFo +#~:R>#/zbozr3&c'jj+c#{nr"C#R#[3n:"r'kS2{3CC"{g&";/g~OO"3oNs"*/k"s +3OrozG&Jo3*3r+S2zCZ C.þC +CBbb?N^JC΢S._{n.GFw~?Kڋ/_Z'rcSz*r2'&rJ3hN)g +{jRb;zs+[Nr#CzSZJ&jjbvwg/#JK. +cb+2n> +3KcB~z;js㿣#ϣ/#k ;"Bzz"*.." J:3h 8v(iYwiaW7&R>ow?6 +* BsCcj&Z$jHpqJQa:_y(V)c~'g&hv~_RiwS.23ˊ/SR"csLPx(!!OّG?_jiZ>(x^3O_'[?ˊ{oSO/*jHvFH8v~>IIYi)7GS +; Kff6(hh(F&K?iWwϻ{Snjb(ظh H&b) !ig**+2Fhh^JjoLJG#{j +:2Nf VHXV2/i!ə!y)7w[+jK.&Fֈ(6&Z_׷G)WW'g'o + +ZCzN x (fIy !)'7GC+2Bv(VVh6&2jgww7w_oO[K +z~FHv`xx.I Ya9ɉ_ "n>fvH((f3oO Ww7G7G'sS/ ++*zZ2F((` 'cI9Y7/'Onr^(hV((jssWoc3 :Z.h``6؀Oniə!i_7?3~H(F&rW)w7'S3Co'?Sc"fH0|8Ɔ`!~j9y7?88x8x^[sGo/oG_/3S__G:2.>R@ܼƾ1(HosI'/HHn^ G^?_/wK'O'_jN&f8@lh!A9ga^8iZ!aYhh6[.SOc_;_ks#''*ꎆjX HaWy19BwnW)f.ȘV2Os??*#oo??K J.8<(8!7 /^WI99' g(8^>O//O;CO;o3zξf^n>耸v/siG9G_' ;3Kں~&FFffN2O??O/;#bۣښ2hV(..牙))'rʂ^6V(F6F&R+G??ooۊ +J2NNN^&V6ֆ..G7 I 9iW)7G_3#2^fFv6j/___Oo/Sj.>>n.ξn#o_wwg_?sZξ^>~.2Z::+˛[ {[c[ +JJ"BRrrrRRJ +[kz*+:+*{oo/o??S/3;*:z""::‚Zr²br⚂ *+;k+k+{ jkkJj +JJKK #sK+#*j+rZzZZ*j+z k*jjk;Jk+jJk z + + *j ;+ k;**K+*JJkkZj*jjzzk늊:{kKk˻kj* +:JKJ: +J껊K[kjk+z;Kjk+:j#kbʣ* J*j *++kj +**j++;Jk+ +:+J +*jjkJJjKʊj k***+kKꋈFWr~nz +2zkjroJZ+zFf#3"joB;>/rsSˊs~32/CJ[Nr3"~+[?^O#)8(Wv&;~_B B3/nZ/VC_gn'>bS{Cs>_*736S?7gs[ڿOgnZςNgCfz #KrKW2/swW>k/..c?k3n2Rrں{n#Z^"c; ꟳ *?>{j/Kg#&i'+Ozn_N'w^ n+SN_ +:F K{?R.nC*.?s?S"#.ꎟ*_kS*[~#?SNK23c;BZzS#C3;ZZZڻ +z[[#KcʣsKzf2# +r3B>nS.bK+[K[*s_n."2o?ZSoKO/b*Sk +;r'.NoboR+z +ro>Kr*BC/r*2 {S sc? k?k[.#NB."b&#nz k[R#/jch.3fRo)'i))s.Z2K#BΚ;k:j3Rc'~x0rh(cr)y! i_'Jnz~~~^.r.fz^B{#?'ggO_oo3/k[ohkv`Zsg!IAၙC^(^N +""vHR+ gg{ +."kP)P0V)iaAy1 ٛ/vV^?rg# kB&8 HGgI)9 wB^.:z"s+fL8xpOW!AaYjIvH(&C_Wnh(h"ȉaK'F k.gkKh l?iy-Iai{h2I)wiS&6xH'J!'OfƻrjGgGsSV bP@^j-Y1AW&WfȈx2#Iiɉ'&(X8Hh6f/ OjrB2>:?C_oSjjNf`vhv CW__j[r>WocS +Ns3ﳏjL f `XJQ!-1iSh&X j/9i'8h hs)_[.#:sgG_:ΎZCo/g_CJx,Vvmؾ&XGy!!陉&HWO#VV&NbG7_BJzb{C/3 + ~&688@>[W !!7kV OsWii'{KR6V.j/_O*&8nO_gY/룲泟 +{oknkj&VHHf^ w;fš))7g?f6FƞOoo&{ÂnRRc3{S:rB"{j*rsSj FXVZwWIa)˟C#:Z;BF&&[3jBjs{*c#; +˻+ZzrKKۋ+Zz"J +{ Kzz2bb/o/c3#;[{;*z2br:K{ۛ[[;{ ˋ {++{ +J J*JJ: +:Jk*;;K**jKkjKKj:* +Zںj*j*j*k{++;+j: + ;k *+ ++K +; + +;kj+J* ++ j* +* +KJ*jk+J *Jk kjkK+꺊:(WwsR;Z*Bkwr7{KRnkZrSS2 J _jczJjsc2.*jj3"2 b+Z[.sʳ.sjrkZjz*;zk[";r"k*{*KzCj +;[{JK + + b *jjz*:Z ++k:+zk; +{*jkzJ+KjJ k*k*+K **kjJ++ [jK +j: :B [㋊:+; kڢJ{[ +bz+Kk Jkkk+*: +kK+kkJ;*JjkjJJkj; +kk; *jkjʊ +k*jJj**+ *k+**+J*+*jK++j*+*j*k+* +j+*j*+ +k +::j ˻k:kKJJj + +k{ j +jKK k*kJj {;**늺k +j +*kkK*jkk+kJ ++**jj+ ***kk*:+ *j*kkk*+ +j+ʊ*j+ k*j**jj**j*Kjʊ+kk*j*+ KkJ +*+j kk*jj++****jj+ k jk+**+*j*jjJ +*+*kk+ +JJ++********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_german/cause_42_loop.isdn b/tones_german/cause_42_loop.isdn new file mode 100644 index 0000000..2ef5a1e --- /dev/null +++ b/tones_german/cause_42_loop.isdn @@ -0,0 +1,234 @@ +*d}EьDH$]acb3;N.kc.sSSڢ?*N/ks*>Jj s z/R +ZS{*SkBcKzBks+b{.:Zz{:zKJj닻˻cSoSSS3#CC#{ + +BzJ[j*8h `AY-q GH`x r'!gR.f†F[GC'w'oo+?W\$Npl?mi=YwpfII{S(_glj9)oCFhR 7W'Gw_o/n3xױ-MYY'vh&yG9&hVwgOII2zK6¿rW)3\jPI1o*QVWk(VcX~99O 9iz vX_'WYgr&S 2#SgO.3o)W)Ϸg2k+# 3o'Gp$. HaQA_)!'[V ^F/W9ooW6HjRi_b +^n*[s2*"# (`GK陙GW~_v^Nßo +o".r~;k"Kc{ + +: +* j+**"+r2jZ+k{K# :[+ + +#;*Cos#c; +*z:jZꊊڊ*ʚzKj{;*z: +k[ {Kk jJ +:ʚ[û 3+: +:k zk: J +K*ʺj[ˊ+z{ڋ{ +kK:J+kJ+*˻ +zˊ+ʊKk+K +" +ۻ* +;ۋj++ZZ{k++JkJں{K ++kkK :{j;kˊkk +k: ++{+k+k*j +J:**jk *kJJjjkK+k*:**kk jk JK+jkkk++*H_Ú[3^y(VۉnV'kfgNSs+nK.Zϳz{ &sg/^gon&R?3>J +CKk;C7NR_G~>z[..C. +'ƞ?g3_3~Js^bo/枟;[/n?KjC_jz.>g3v32;oS"zo/ +ڲZJBb +j:.Rs/?3R_ +rzo2^nsj#SR2n2[ +k>":rCS +"/:_nbG~R'orۇ?r'{~o_'J&&o7Z~ +ǣvgWs&//2Bj'.o0 )w!1)@o)1B1Wi;g g^&*_y(Dh308AGN&&!ǖ n2Wr.kS2'[.[:s7Idd0S-!(ph9yˆ1QiV&/V^o~'/vC&v_~3W_2nc_g_D̞1Rfiq-@0wQn)Chn/Jnn¢g7sg_bGg3Ki|'ٍW ?9h(11gfR9Jx7>& +ngo7:r)2)'7,(1/^!`7?K(i!Ù9 +Dzc?V('3__{K"c#+ ?_n,Vrx"{ow7'Gw7OG{" +>Z>^~f2b + S_'_og_hJxࢾ' )iggǗ3GnF6vV(~N +R3#cOSgSSOog ^NVh^oii7'37_nVv^/+?o/_gSCG'ϟ緟BֿvW _i_G)Gg鷟?J^^Ɔ6v>NO/og_??g?32 `&o^/i)G'iOgwg'O +bZ6FvhF6vβbjoo???'__'_oGwSH0`x^fڇ OiW)7'sJnVVV6v6NJs?'_OOog0hh~s)) G7w_rvVf6f:;soO?'7WgG)XعF.p`)9vhhwy aa9[?^R86/Og_7G''G9)4|#AA07WYsÏ/N{(h(h6g:*S*'s_g_/3O'7)$l maG>O)ywZVfBϿ?ǿNȈ(zoǟϲJC/so?gGw7S" ׉$AhIư(!g_+F?'*^ȸV{ +BZ s/oOgwgc)Glv-mqGgH f3OCJZF—W)/ֈVzwbʣϏ:'g7ǟ 7)`d`ͭvG'Sz(Ww?*BhO7G?.^N_oo3KJg7wS? - !1cSsNvi  V:/:.Rgg3K_c;/G_,LQ h/iXpNYqA9g'H( G_VXvGۛξb:S7g($)mYRH0ٹ v>#OC#2Z;s;;OW'o_'_|8QzPGYI!zHJ_3'r2/gKoJz?WWoO"d,aO9-xphs !I&N>Ȟ  +r +Fh#;s?#[k*_GG'W@$׹--8wqNhS>R7i.f6(s?3S3o3)0l(~Jm>G X@ oYWbay?N^[rxؖ3+{K_~N:k++ooo{Lf h뱭iv7q8nzH)aI_^F澢_R O;Rr3ss'G'Fs/~3ZwWVF6WI_rf.Cւ_.Ώ'?2o.k*"*6@S:Jﹹǿc#?'R> >_*rzn?jR&rBn[*~K">KsoSG'/[3{+Z+ϊr{B+bR"B""kB"{:ZJc +{/:kb# + S3zz S#SjzڻK+z{ JZr +.zjbzʻj* JK+k*J{+ s + +j #{:*닊::+Zk*k;s""*rjkC;z +[K+JJ*"*"ZKB.*JZ + z[B{+{{{+J2JK{;3 +ZJ[rj+*K +k;jڛ;"k +K*Jz +j[#*j[C2**Z*{: +kj +[+Z+Kڢkkk +:;j: +KK*:{c ʻ *jkKJZ+k*Jz+KJj;:jƶ^WnNRRg.g#2:/koRR* J:*ڲ#j+# +K"[; +Ko[^oZs/S:sZ )'^/ξs_R''ooCzb~?o¿[rs/B2&_3ˎ2#^gSc/2r8K3~^w;*?n.BF/"6+ǎZJg[nbN&7λg_/. kN{#.k?~n(w +Fc_ڈ7(_'Öj3&6 +'c΋_sb(gn'Jn.^_(>?vZ_r~g>~3#{?n>J&7 +Fs{~s#>r7"g+:*{ʛs*3jZjJjjbZ;{cRBCJR/B{j{ ŠZ#[{/3r.3Sn2"3z[CZ# KbCKzz3 . CzJJRSSRRn;/cJ#:c+"3SJ#{Jb3:rzcR +zC2{z +#[:#*ۣSc +k ++˻k Kzj;Zk BbzzjRbZF&rZK7)iɹ9 i)rΞr +:Kp Np׉鉙-ASÉ8Hxv)鹹Ii_:k.RۀVlVi -aa+wȸ V&))i9ٙ9)3[nJ,BlX^9I!yIA n8 X6FF*Wi9Yi_Z2B[@PHhPx h y9AYW'BfH 6(hLJiIY9) KZ 08p x!ف1aaǷf(HH8(G) yi)_o"ڶ8 hY!!!a!7'~hhhzgWiIׇS"n v(Vxxxc'w Y9IɉZr^F^>k;{ssSs/3kj룃n&f&Vfn"[?_'__'''gg'??O++.~^^^~z s3SoooSCJBrRn^^&^^^~n2 ''__g'CjJ"B.nnnBbbZKKξ>NnZ{SSo/[j:*jb.nNNN.2BbK;Cs333kk +"Bb"ₚ*kk#C[;+*+jzzZZBb"zz:;{{#3soSS3#[ꊺZBBRnn.RR222ZkOSSs#k+jb²RrRR..Rrr2bzJ+K[33S/S/Ss3#[ k* +J2rrrrRb"Zz*K[soSS3s:ʻKZJbbzB22zZB:J + +z/wZ >^bv+ #w[O6(&#?W )g&&.r^Fn_c +son~B~B s{*3/S[;kR +JB# +kSC :.+*"[{Rۊ33O'''H8Ș@`h 遱awY?rV6/Sy _?vh(ƖFrS/'sj&^&^J/o#33o?//{zBxHvV ֖'')YiG Wf(n:i'i?kO_)\PV `h!_x0x gf!SA79i_f 8xf_w)iy(x&soG')ʿF;n_Ǜ_&~&Nfxfv7'Gi''72^2?O_i^o(n(z7Yٿ;S |,Q1I1m'8H` hH G19`H8.W^YO2^f?"7oF{8(iyѱay8)(xh/v coC?V²V'&wذfxx7i YɛnNN_cc3s[3b{B2B""^kf +^O>62 z>~+VKƷ/Slj_kc&Σj? GKn.Kn.2r+^sr//2'o~3'N_+[JB_N'Cb+[?Ï +#'J +._go?~ k?>3^f_&FۂcC[ r +BFs_. zs./ G#2W +k~'koRoWoK6R.sNj3n.*+{r~>FZ{o?;k_R&&#&f c. + +j +: 3s+so~[#.J+"R"&Sn{zrJ3o/{Êk3"ʳ kb3 ;Z"rks+Z;Z*2jr~3NS* [Cj+ +Z JO>CJBjzSBKKCk;+;Zkj+*; +;J:ˊjj{ +jKJ+ + +J+jzꋋ + + Kkjk;:kkk+jʚ*kk +j +k** ++k +jKKk+ +k +J**K ;+jj+j* kkjk* +:+k +j +Jj J*kjk**ꊻ+jK+kk+**j +jk+Άz/S;+SZbr *zZ*3RrZR&>n?K{oCcj;3jj"J{;"* +;; +k{ʊ{*늊 + bkk* +jzK + +k + 3KBˋ+ +*:ˋʲ #o+3K;{*{{K{k*+j:bZ²zJ:z +j+[#kC{ {j:j*+ J+" ++ +++ **jkBrR>~~~2*?wחLJ'?os#zr2r>>~~>>r(x8VXxF3+!ii_gkR~~v>jKo_'7g'_/c[∸(X xָ*.wiW9YIIɉG7OΞv6v6(F:[χg׷WwGXH`hHHGO!i I)i &v(^nR'O7gOg_0X HS)G!yI7WSכSjƶhf8ȶ^ gg)WGg'';oǐ,_px i3၉!Yγ 7?g)z8&V(~nwG7'g"SKB*S/_Hw0`(){awᗃǾo.gON(vFvVf&GWW7/{nzj3,6PF . yw)w[O~'^2fFNnf+_C__GgǟsJK"R2@0FVHz׉IyaI7gSS+6KrKN㢎;*_+Oo^^ƘFXVFiI g?㛾C^[:" z3"{2b^:+N: +kzrR^k&s~:W/3/2/kZcOK[>&n2h;# +/J>'jN#΋"r#2O:f#J/;gkO2[gR_ r:_ +{:B[.""^?6Z +/j&CזW'^S3)rrgzSÎ +BþC#~^>/{^ڏnB_~~ ""j{Jjz ks+kKkk3rs;{:k b:z +;# Jk;j + +kJjjzjjK+k *k+:kjj++ jk ++Jj*j* k;K++ +j +*k + +jkj*+k{jk+jj+J*k+kJ +*:;* 닋* +++jjj +Jk+*+ +* ++k + ;*** *j*****j*++**** jk*** +*ʊj+**:k +Kk+k*+k kkk+kj+kj+++*+*ʊ k+j+Kk** **+ j +***jjk++**k+*k**+***+**J +*+k*kkk++k**j*J*********************************************************************************************************************************************************************W#_nb*JZ^n7jSoSrCn+ +B.Bk:+k[#+3# +Z>r:BKSs_O3OKjs[[3/gg_s6>X_I{!!9yk_FV6fw_N^vV(FfF"7g#z +rf&>^~f2{C__O_gsoCbJR*R&FHhVG )ׇgۂ~~fr?7_s[; o'wI^@hWIaىW`ff_wy)gWZ(hFfwO*{JO."s?7g_wC*ZrCpˀx,(k;7K!!! i2k&J'ZhHVVG7)חO ¾>RR"co//OVH?I ɉW)'ScjF(.?ggGLJG_ϏoZ8 Vx```8Vz/lj99 iGgoCVh^r37ggg_//Kz+ƘXHh `؈: 9Y99I ɗ?S^Fff..rz*S[3KzVHhV8(N 39yI 9W7s*>^^&^^f&>nrcS3*j*h(hhֆ3/WI99 ǿ +Nn^~&NBJ[C/Sjjڂbbž^N&F&"Cg)iWWg/+ZRrR2>&&&>BbZ{ +"² + ++.2">2:#G'??3C+;:"RN^BZz*" +kk ;+ʊۣ+z"ZrR2"ʊ/?_gosrN>^nnbR: + +kK Cc[k**J: +ڢj#[o/ssCKjjKbr:zRb:Jbj*;+ ;c[+ k +kkJ + +ˋ*;k[˻ۣK"Fw32.΢2:sVv ^sN>[nZOB./Sn3o/r2ZsKBo2ooNc;^sf.gc^˛: +N[zbo"s##rCZ;sRR{J?J2/or7*f_";k_Rk+2 +&kZz_nObrZs/^b~;? JOC#3{jK. { +n/7Sn3~~/_#6gJK .KKBJc/^cC[^scz.3Orj +/S/ó3.[22cc>R"R Rrrr3grrBRjsr*R+3SzcV`)W W3&G*N~^^s.#f^nR>۳3KFv hrI!aiwo_.oiiCiWfR.ֈk/RN/Rrc:|񑗇1'IK2&FwyW)GV6#Og7g?j>:"o_SS~L ` 0Y1 _ёigx؆ZN~9iW'(XXVh7)Êb^~bJ*''?/_(l,8X0aǙWǾ~bB.׹_ϳF8vVgs *z.r˻:J +{;*j{V~^(ֶrngwW))WwgoZ&^fFF&^BS___gOϿo#KZ2>V(V88&"G׉ɹ '#z"NvvF6Rrk__GG'_O;j&hxxhfN_iIIWg3ʂ66R +3o?g'o KR(Ȉ(h8(&n*'iI9 iɹ )Ggskn>VV6F:+_gggg'/3 x(8XxOI9 IIiW7ggJr>vV֖vk#?G'_'g'OSoۛ;z8(X( IɉIg'rhhV(ڻC)׷LJ'ss{`(^iWYIO ss'Wǂ:(`f?sGi7SoszZ[')G3j"n.^l$ NhAQI3 W8X&Og?.HؖniGGb>ۇ7 #3''r.l\~YQ!gWvh iA19S)F`.h(Sf_Z#'zŸwz g[⊟3?_2.22&`Qa)Ɂ^ط2F7 'RH8&oh'wz?WZbS7ςcWs;zOSgG#{k:f| "Xhy)A/&C׷IVZXfV?c{3Ë/[OOs/s.Nrz(B2hNiy_yzs6xhhHsS_3o_O{ ++{+oSSOsk.&>R6HHF7giIOkgz_sCJ^6n.2:/3K/sssSo33[zZbJb2RNV(Ȗ:B׷yi7)W_'Sۃ"^&^&2 S?ϏCCڢr.&VvV6Bi iIW)G3^f~&&^^~N".z *[SϿSsOO/{K[K2B2N..^fFF>3'Wiww'?S.R.RN.R.2R.B+{c/Sc{[[ +Z2.;:BRNNnBOOo'LJgg/k* RNr.Ύξr2" *;k* ; {+**:Z"kccSOoo3Kˋ2RNNbB2jK*KcC;CC㛛{  jk j*jJjK#s[kKK+kJ#k b" +zZ +:"Zʺ: + +;;;KK Kˊ zjJjkzz***jJ*j* +kk* + :껋+jJkk ++Kkjʊ+:kJJ  + J**KK **jj*+k* +or +Kr"[#;Z*+ ˂z/[{ +cr2?O?k7?Ɔ/ڛOZW".&'~.(k/N+_O{*B [_ +CG^f?3_ +;2~OgS +_n^sNJ"j~{SnCfO2ckڛ"NC[^O."2bOb'~O2FsR⺺Rz{>"kBn2Rg.懂ηb{6w+^onZr*˳b#/K/N:.kλk3?cRO +R:o3c +Îr"R.#*z:*#cKro2g33ncsf/{:~[/JS.j?~ +SR;[orNc.{Bb:CsNsjZ3 23n>#{.{kkz*#K + JCb [J ʣ2Z{ +;;sR+3 sbCB*K;k/2:;{ +J+ +[;j{k K2S.㻲;+ZºrKronCZC;rc{ 늣;Sk+j{:*{[Kkk;z +J +˺{"k{JjK+[ꊣ:*;##C#s˛KC*z +;zRJ+N2.:{Jj;›nF +~zB S'7Ǘ'O&KBڊ."ZJ+[چZx8x(^WI)NF6vz3 &~o&b_?77CC rRRn +j{ 3S`0XjǙW fV(R#G3xN`zx#R_9WIח:"6ZK^~ +z`~`7!aAAAaO'>ȈB/?WiwG3.R2.S9y׹?oֶR'7ǷCnL)IqAi (X8gI)oh x_F9rNFR~j/?G_GK:z^nPiYwa9a)ζ8xx'G79!!_ÃxH(._wɇrSR&/7w_{c^kOg_'zF<`@1ym-_.@&Ya!) :/3i9^r;39sLJ_*vFB[/'os&Ƹ<hiQ-qHV`@Biw +NVX(f^i)'3(fS)i.+6 jgCZz"#.V0P(J1iII9ɗ nV6krn`~ v6' *_fKsv +aAWaY)Ȃxh'9i)F&ȸhZK7Cz +:& +z{s3cJz{{#J;;jk**{;*zbڲZjKC{##cCC3c## +kjBR"BBڂZkKJ+* ʋ[s;[[z+ + +;:{K¢J2 K#K kbJkkKK + +:J +j:z :k# J ڊ *kkk;; +:k kk+k+k*+ꋋ +++ +kkj:k + +++ ++ +j*kK{KkjJjz+k*K++kk +k +* jk*+Jj+* + +*kkj + +++ʊ+ j +KkJ닋kjkkJ +k + + ;j**j* +*k+k+*K+ʊ +ZJ n>'"þb>:s{[b7ϣc{OZj:.z2:*.ZS{+B.oZz3>bjcb;So*3R2kZSKCÿzێZ:Sbzb#R+۳s[+:z#jz*ʃr+{k +2[. "s*J[2kjC*B2z{+*R:kZCj.**ۛr[ +r+*Ê3kJˢ{"jkJz*c:B+k:ڋ#cˋJ: +C"j2Zˋs;k*kJ 늻 +k::BC*;C z+c;Z+j + +ꢊc[[J" : j;: +k:+**ۛczj;+ ++ JbJK + *JۊKkkJK[[jK3 J +Zr{+jBj+r+#zj; C:b;k ZK[;: +;+ + +j +:ZZ:*K;;+ +K{ KZ:; +J: + ++K["k;;*jJ*{k++J;" +k{k; +*Jk;jjj ;+ +++kkK + +j +jjjZJK*jK*+KKKkjj +J+*J*kk*k + { +* +k+ +j kk +*+ + +*j+Kˋj +*;K jJ +j ++*k; ˊ* ++++:kjkjJj K ++k+ j*Kk +:J**j* + k+j+*K;K+***jj*+*j*jj +**j*+kkk* +K ++++ +j+++kj++ +*++kKk+jj*+++kkjj +j*k k+ + +jk;***+kkkjjjj++++***+j++**+J* *+*+ *++*++++*+**j+****+********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_german/cause_45_loop.isdn b/tones_german/cause_45_loop.isdn new file mode 100644 index 0000000..966c92b --- /dev/null +++ b/tones_german/cause_45_loop.isdn @@ -0,0 +1,359 @@ +*d}EьDH$]aF(V(RJC3;oo7wi7~0P0@` + )!i7i)II))'SrVh(VVN{o6bcR'oy^ !iwa7F>7O9A)`XV?G3 G_k2ʿg_wYii90>@fy-)(NXxR#g-iOXJfi)?.''!!O9IƜY-69H`HIqK9?6h`f&G (hRG7>~))'oIYy_P$@(c=o`oQwaqYv H y?V^w 7Z7i9yGnsy$/-(&-) iFf;Iv'C^'Kio[W?Kgd:i{y i`x6>q)V Vf۾"I.:z3/'_/Gg[2_鋤,7Gg-)舆yiǙ^^BHIWF/&^~sN2g3"zP,6kG wGiG_/B^Ǘۻ.ڃjZJ2"&RZrk[;rn[(V&;oZ2 +O?gO_'_?j/'kS+j3+*~?RknC>jjrjkC'/3 +b*j;cBz#O_.[S oZsRb{2#2[>s""+"; {bz"37?C"~sjz; +z/JC3?RK:c>k[#BSsrΛϊb rK.K/2/ssZR;s/'r .zJBc[N[{[;+rsj{:jz:r˃{nsjr>+b*;+[bSz*[3knj s2J2o"O +2{+ +;k{+[K{;#Rڲ "Z skb#r;J:: +##+j+{j{+:;{㺣b.s:B3zj[ZOb_zkj[[k#:*K* {jz#{ڛ2 ++JK2" +Z +R#*:; +{rz +ZB+j*{#Z #{Z +Z{Zc;kss/. + [ #K;[B/j3o+3'Nz+ SZbJ +oRzs;2z;JZS»b+ + NB# +;KzB/#CsJjC +ڂ/b[jKsN"B+:Z#/*{#2CSnR[{*N>#Nz +obf_j#BoK:nBSsJ{>z2Jjzj?skO";:j_Brr +z"r[Cr Zj_Jb^s/ˎrn +. +/Sjgc?R22"O*b +gsˎr{C3#S + .:{Jz?/ξn'#3:&"*?Z +: j2"Zr"K +2z"B +kKSk+Zn/b +o; +[KR{ZjJBo#:3;J +:;* +J#s˺;; Z:zz"C{;:22+C*;j{:jښK:*k+ڲZ ++*jˋ[Cs3sc*; ++ˋzjS/s[rf(l8QQ;CFHiAa9ws{σ&bWGWע $/mm'j7o>`(™v&.v8v9'"»kϟ?gg<-m2^珎hzIqv(6VȈ nC{2NrK_WIpL|p٭mo~ 7o@ 91QA(>n&VxX(*i9K//{z3o_g7)?0L;a-Qy)`0@Hi!6&XR agF^ /O?_WG'7lL< ?oG?ȰpVi/f曛VXG9':Nb^n;'S7WWdzh<ѱyg'phQA;C_7bXNYI7cn*f(W7KgC+'I Sq-1ISX,aii!3Hp+ɗʎ_ JxvoW_zWC)I` I19Ax!Wi :6O !&B&wS)[W7Y31P'bw!1X6&^vxW^zoS^ +s"#ח;g)#wyQ_`o[X^ǁqf&oFfgcSwbN:__'G))°L̀Wx8q1+~j_Xvy rW&ȸfK'7Ǐ/__Sz+{~kOGGs{g'NHzHH!WOg &( sFi{fcVc_O"ϷG.2kZ_O[` B.x(aOiYjv(r(F#iNƒ +f.R'wGoJJs3>rooos(l@( (yg!a!8xz&g!i_2JhXFKoiZ^~WIilXMmARY^p sV(_?Z.g7!9.O"(B7))I&$L3K`XnQͱGyYp,8_S扁W*"X@c/I!W{κO^V(&Sg7))ii',$نV) 7 h``6:&+׹9gO~>~& OW_'__g,_fزqmy*wA)X?[(x 7hf:o^v73Gk>&..#RSg8p@nə1197F(HiGS?hr#fRS'O˟O^*nSfzcⳞ /:j{Z^HJS7WgGWW+'bkϟSr b^n^KsjjJj*2[obBK#Z2zBjrz# +β+"z#sSO;Z .zzós +bJ+j+:Zkz:jbkKjkkb+òc{K +rۊCkK˛ :jj k:+J J +Jz+{*Kۋ"++{+zz +JkKj {k+ +kkjʺJk KK+:Zj+J +k { Kk +*+J + K*k+*Jz*++j ; +*:* + +kjJ+Jj++k+k ;K :: +; kjkʋʚJK##ں k + {: +jK+* +jk*jJ*;jJ*k+ +KK kjJ k +{kz*["{; + +Jk++++j*+:;{# +Kj + ++{ + k+k++*z+ +C#+*j**+z;:# +: +*cr#2ۊj#2/"2J#J:2+ +{O_'^R2*ۣr2r??(VGf:7._Fh^b.> N[Or?/wnG_v_r7v{>_n +JJOz+g΃f;ns.cfsbONC'2bsJK[ ˟n3/O~'N#Kr_b3{js#>/*nrro[R.s>NCBkJ'ښ{ #B{B:3o:*.3 +jʞ?΂jrO.SR>[.3Z s S;ZSRoc" +ˊʋ +zbNfv^z[ǗWw)WG/j +3j*K 2 +lhX`v9Y!9iBȈfV)so&&C'g_SK +*/Ï7g`@8hi yAyiF67OS_wjrn2n+so{kC/# +??@HH`(_wWiYifR^^*CϿs#z:ZgZ6>KR>Cr +&XXXx(hV7)yY97nn'gO"bKNk&jor>2:f/Z(hFFnRoǿ7'?k~NoC[go#:n&^f>SڲF&22.kbcfkKrR#+sk+Zz"BRj;#[3 _?oC3?Z"^>J.&# &>R˻N' +;"b3[/?ʚkBC{Zo'[rj nRCr >[j{O ^23K~/zrosr:~~;{"ڳ+#nB[oR+o:n s* +Âbcj#JoZ?NRjsz +nj+3n & +"o3SbJRfrrNON +ssnn*.f^nCJZo+:ڛS'j/zw&S/BsJ +£Rc~FNS.sN+ZKkbK bs2g [R[v'˲'R?Ooۃ" O >>"obF^;B.2"ʳ*>''['Zr3ržf_C?).6NJ(ږr_Gfi&..Z6SR_vs^[~*sCFo +&* +f7"׶?#Vw +3nʆ?*^&#)wf)>fW( ^sfc R7j ڎ#B&;r2^&robr_'sJ.3Rg3^/go?"N''f('G^>?bK_&oo( WOSr6.r'~BS*{':OJbsboOgR{b;λ)Fn^_JrJ +BSF[k_r[N>nR'(^~+"^ONOBf"ZGfn#^z fRvšJ[_z6&j¿wj'JsV2z~O&?>ↂb_.㆏'VfJsgZ#v)/rNG(s7&S +gCnS/G>#>s_BINf7O>wJ3C~fw[v^J +Z#'^r&Vf)֢Wj>_*b6_R6/n +BszJ{"[6'okJo{jbf6S'n~N'Fo>&Î6o㚚3_ۖ.nK~k;zn{3>?zk+n/+sSkfj_cz&3cZr2r;/2+O;*R+_Kr΋[zCJ2: +2"cr+.bKR +rR"SS'''g'ˣs#cRS:2^X `Hh6&c)yaa!yfVJ#gC.~sx@@XH(FA!Ik(hB 7wwg'srn3'X@ xaaYY9W'ζ(Ȉh(Vƞ'g_3J {'N0 XȆC9a!!gS^HHH_)WGg3j*o's(Xȸi!!y)_[fȸ8(^?'))o +{ +*'7o(00`Xxr!aBn(HH(F&»))+z+z'{`XȸفA!W'fH8ֶ^jWwg?:k +zss?羈 ظ^giaaa!YIg*NhhF&bB +C'w_oKjzZ::"/SOjV8H8x6RY!9 ׇ?ËJ:>^^~B3OO +ϣS 3{vV(ƎjgWwGgGG;bN~&^&R2.b++C3;S/S[s3c^f6Ff:3/__7_g_33Rn2² k[J;#o{k[B.n&~&N~2{s{gS'S/g +JۢZ[Fzsr^rzNNo&/+JSs{nZRBڲ2Z/Z';O.JbK +kn'&*jF +.'kr[.*{K^2/n#3'cgKs[ +JrJn2nrrn~+2>&"OrNn{zSkB G'N'W7'&C;z+NrzOzF.Nb^ON^#>N2Vƶ/_Os+rf ??G'GO J~R#O__, hqQIyg8(ȸZ9yiigW&`hfry Wig.憆ˣ'i!z\L@@xgA-ѹA &`0fhVwٹ )gvh3W9yi)_oVVvz !,L@Vi!_`h&ّɗ3`@HiYIggjR&[ Y9 j|L hVv!퍑aOH@PPzq-)b^08~CYaY(&#)!9 OlLX) WIȰ,'nI1Wn@W9 '2kv&/) yW_6|LhV AoW{@ 7gy1۶6NnII +f Gg6||,&HhYmmgpvNska7K/fsC')yWcrrnGiWGw_<VXaqQiYh`&f¹Y7GN(΋#?)iG_.&^^kOOosZȀ`N#W9W׉)G:bb~'ssZ~^bJkKSc[/sbzzcˊ+ۻj +2bRN.Bš"+ + +:/?/*r22.r+K{*"bR.ښJ;{SS# + +:"2 +;jc{{jZ +".ZbBZ +s33K:: +bں˃skzJBbkkBzk"k:b++[k +:"J # +J[K*;:+sC* {[z;J+3;[#KZbj2BK;; kjÊ z3k{* Jzz.J*{ ["++:K;#Û[Cz;b Sj2+.C/;BN&2:CJj +;KckN+..cs"RZ3kKJ*χC3?sog'K:/ʞCr~.[¢B'o2##[nnV"7翋s_&r7626R'+'nv_^[n{N~2/G";sz3*g^J+"J7rS{r ; +sbBoO"_+z2KR_>2S'zZrJK*Z nz .sNkS._'R*cںrN[*kR [Kz.: ڃRz;/ z :jkJ +jZn.2Zj+CSscs+j:ڢښ +jjkK kj +* +jk*+J[K{** + ++kJz*kkk +;[ +ꊊ + ++Z:cˣsK +Jjj*jۛK{+ +Zb+; {K+ C{ K*b2kz*J+;K+:*K{;+KKˋJ+kzkkjʊk;kK;kJ+k k + ;˻Kjjj+j: + +j +*kjj*j**j +*j+k*kk k j*+k+ ; k +jk*kjꊊ+:j+*jj +JJj ++*Kk + [{KKK j + +JzZZzZ:Jښʺj +zrNN¢jo?'Gg_/{rN~^^n.(H G) ɉ/rN(V6&ϟ_g7LJ_?os33sx h8f.{Ǚ y ggsN(֖vNzsgG7g_OhX(Xhv2_ iIi )GGLJǷ_ۊ"RF((V8&i7G7'Og7GI9xVh8/n?h_YA)I!x(row?/_￷w igwpdČ92A=m `^X.QI i0v?*f)hZ3k2ןokK'7) iS hD\8AG/m 00(.A_Ssv' '`7g7I'Ζ_' _Sϗ)s._I(< {AQro^hQ-ֲXYw:cWw_w)voϟo'729֜iqYg1p~Vh6(``Aɛs_#i/gn(wrc)g$dYWRq a0`"ms Hغa^X`VWG;OǗKkg [#?Ǘ_)dP Wm 8kQnWG`HzyC2>v7Ng)."S3S/GWwp<Lj:9րAi 8J)7Zfr8hs~bGzRigr3珂RO_*j黌|xIYYGINWbVo+(H)'FfJwgR_o"R{nR88^>NN3'oǟO/cso[늢rB *jJB۳jZKBrK32 CKz.⋋Z"k[*J*j;[#Kcs*z# ++;rR";*+: + +"zC#+J Jc;k[Zʻ #jj* Z:K*J# Z {"j;2zk#j+ +JjjkK*j+z#j2b;Jb:zz +{*{zZ +j3[:bZ닊 +K++*J +닊 :Zj;*[: +:+ *kK jz*jKʢ*: {KjJ :JJj;Kj++ˋ#+::kKKj˛;k{;jK{z"b2j*[[{k +J+KK+*+;Jk*k ++*jJ*:K*:ooˊk[#.Rz: kK*z J*ZZ*# *{;kz{3 ++;룋+*ZBJʚJkjk+ * +: +[{K+J+J +: j +z:z kJk{ * K k* ˋ****k:Jj +K +k+++jjkJ ++JKkʺ*{*JK[;k+k{**;K*J***J +:* +JJzjkjj˻* +jK J+; j+;;* *kK; K; ;jzJz +JzںzJ::j +ˋ{C3/S//sC[#ꊺz":rb:*(R>RFhrRgWGo?3kZj:"2.NR"2z[ϏoO?@6H(RC3 iIIW)g[*..f6f>;/''''g_??cs3/S2hN vV(s +I i)iGOs:26^f(Vj+sϟggg'OO???(XvN8VFkJ3)IIi))wgOOJ*RN.HffֆfZ.ZǗ7Go_cրx^6ȶV&Z)GWi)BK>v HO/{{Sᅦ7_7wg''{$|@{ Qh0Yi''!F8+)ɿ6(K)ƞ_CJ:CWןz>>+_@፽p`/YYh_ya9ւK{nB So; +7Gg?{kO~\qMMq^ ^iq( !O(WxC! H7W37_zN2I)VN'F@) `O)R8am0(9Nhv!G8008i~_^7i7j")j{jn,\l8͍6X'`'3(h9A8J3kV )ORGc)Wcs)N| ͍~_mmAS8J281yxx8w!GFh6o':'~)s2ri)<$Pэw(`QQwV@!*FX~I'6G)'~goSO.w\<8q! 607ϳI! ^_i^6z*S_o[?g._)n̤nBQ-)x,WWCXiY s(XS7))ofSJrǿL(x'-> ((W!I7v+(莇7RϣO O3 +;os SgplhsXɁGjIhfFh +WI)f)GhVcoZSogs/_+#/?oo'g@`~&(Xnvg[g:h.z7W?C__??3SFNV8ؖFF>JiWC+g;+Nb/SjjRK[roSg7'{Sj +3C踶&h7v)y9"RW9F/RǶgwv(b&2w_Ǘǃr2Jc_(`N Gbn~Wa)W(b)):vxNc6rw OOWz^Rz{HV?gwGs6JR>G/{?NƆ6~G#[ +k[O@x8gW)J"hh'W 7Grh6rKOg__w; +/3zOC/s"r2..&NN~r"2nZrC//?'''_ss3cJ"B..BssóCָHfsW)) ok ~.F(JwWgk'?+3J" 8x`gwWYq g)iGo8fOi/__h(~+?gOSOSBjB*KrZNHwwG)w_Ƿ'C3?KJ +Nn.~rnrbR +{rS +SS +B>b:zZ^ +ZB._{^OrCzsks'#++O3bϻ/'F"ƚ7z?:&{G{_2+R3#Fs +k23'';'z_6f; S"Rn:~f#ς^f+z.z꿊z/ff7_RG2nCrךn^C.zo#ONFO>S.{;RS7'*o6GGzOfK'"fB[f6kJ?.>g[c*Sr^KJ fzBj"_OzKjjn:Zbo'.KJ_nsZB+ƾS**[.jr/SZj{>3> 33/C*ۣ"[b2bڢ*[ + jJ*j:*k[zj K*::z*K +j+jZʊ *j˛ k k + k + KK*+;K j*Jʊj++jk j+** k** +j++++kjk* *++j +*+ʊj**+***oJc:J :k+k *j* *j+k++**j**S_'nns+j{b:NRRr~R:3[3c/osc/Cs#; +jʊ*JK+#C z :R{K+*K"++j +;{+ J:zJ +jk{;*KcKz; j:jKJ+j +:z + +kjk*j++ +j +*k +{j**K ++* j +kkK Kk**+k+j+ +*jJjJJJZ:Z:: +jSo?o//{*+:b +`8x8Hr3WgiyI)goC z&~fv(>N +Joo_'g?'g pv@8`Xgz)Ga 9goW?3ǷGg_GZ&fvhhH66Z2G7?_?W8/`IW'a!i_ '7W7SWG7CN2NH886b_ח7W_sS__אƐp6X.J9񹗱Woo벉+/W/^֖(FϿGGWGgS/3cO3g'x,ȈX)oy A_a/>G_N3gF6^N +Ss'g_Ǐ#C2ۛ+;BppH/YY7a׹/ G{S2^2.>J''Oornʚn +bfxfkW))G?zc~nƣn2>#N{ { +o/[+"2nRj2N*^RF 6J[_gww_woϟ;R^"r2: sz?;jBr[fb"6^ :bB:. Sg[Rg?3_K:N#Ƌ"3S>J~fZ #^.>2>jO^gf?ۚc ʏ^G&G.Oo+b{"3㲺B>Sr.j/j>k3[BS~.N~3Nz__k6'Nn'3ig^?o~2nrc_O;{R>S2 +n2J{zs*JJ[2{ +" K["Jz# b3n{2bZc:K*JK;j + + +*Z;;"[ J:J:*j j k +jZ*+Kjk ;"C# +k +k*k+***K+k*kj*+jkJkj ++j***kkk++**kjj[; ++*j+kk++J +::{ +k +*k + * +{ kk +++zjK +j+kk*{j:Jj닚 J K:k+:+ڊJ;[;J*:ʛJ;K>;+Ks+;b2:Kb{ʺs*[+2ۊ.#Rs"C 3o +"㺣+ +*["Bc:k{33:;:  +; + +3/ +/" +:3.{ˋksڂs+ +;:c jZcZzck"Cz +"K""F&"r"[/gC?㊲RKnJJz+s;so[{+;ˢZZ2n>f6V(&.~C)W7cZ&f΢{gg_oo#ʿc'Wp@``@ 8 !!I)I7:(F{;Gwiwg7nfVVBS燇w?SŽ~^ZzSOCo;:.Zr+{/o;*ڂ2R.RrR2n>^Njc7חG'?: + +JʚRzcs`fy61Y 78hj_g7YgfhhظgW)?ZrZ K_oc2NfN +p.a ?On'C_W'wFVΎZ*ogggg/C[*B3S?/#KK00 8ָ/ww9yiwOO/# N>.6f^Z*___oos[[ H(Șf>Oy9I ws?sBf&6v6^RZ3/_'''__S3#Jz 8hxX6^[79iIWo3 +R266Ff^ +{cO?ϟϳ˺Jb2R68H(HxF>³'9yI IG?o:z^f^fF&~>Jk/ﳣ :B22"ZBF2? I)W'jJ"*R~2~>R:CK*˛c#+b2rJj:>J'7חGg__s{* z2b".Rn~BBb +;# jʢ +K;j +[3kJz*c3so??S:j ++.Bb^nRnn +j ;[C3sKz:j:+ +k{۳{so##k +;*b +:B"B.2zZZ +zzK+{˻k; kjjJKjJ +{ jj k*{+[Cc:j.s**jڋk:+jJ*뺚 ;+*+*j*+*j + +* +*kjj+K+{;kHw77R7i.֟R_C.oںj'2h bB_"NN#N.szJ3zJn[{_.?j+ۋOnS_^>'KK[n//c./N:;z#"z +J{ + >N/rr +o2?"_ 6N?Z>Sn s3 +:jJ.{{:{{C:[;3~?.K[nF/ zS?K K..c:+3z23 j"?:[.[ڲ/kʃ2O2"* o+ORb#NCRۚ +B#k{rSzj{ +;2#:r ^;ˊ +2 +s#"k룛K2Kk j+2 +:*Jz;Z+jC3j~Br+ks3/{#Sc*3k;K "ڢ.B..rr΂:2R" +bn"Zn>n"j#_Gg's//sr.NN&~(h@vzWvO3ۿ*{JN&~o?*B*z+SOS3cc[FL؈AAA!g. +V9fHx.iiWWGC#"nBz[{_OBnnR8`@H((HaIaɗ'^C'_/OJ^FFF(vfNRs'_?/{ {[{K3[ +^fVVFVH( )ii)iO3JnNfvƆFF^.J:OO'_?'_O3˺+Z~FH(&+ri yI)9 7G__# +bN~(ֶ666&/ϟ_'3{Jk Bv8hh(kɉ9 W i7G矟'*2"~VhhV6WgoKz"zxVH`vSR99ٙ 9iw7' +.>ffֈ66F*[[sGg_'gsc;j"ZJ:6( (F_ 99ٙii i7'_?O{22~f8XfZ6F&:gGS?S/C;"2R.fh(h;oi9YىɉiW_?s +f^6h֖6^&r#S?'OgGg'o/s#{ JZ)0P`VV ^ZI!!yI{'OI ^HHv֞sS_'w7Oso/c#ϟ''3N~vhPLn72(7io r!i9YwV^r(`rcF~')';jGgڂS_szoJS'nfvvhH oWVg)F('I_gak6g.ֶ?Nꃟ +ng/_ss[&Lv:f^1Go^h )#gi8vv6sZ_g#ÊS3cJ~ֶ(8l^RhAy_wk6gK K9z +"o?3?{c*c3[s3cr6vP^Ȼy y k wgRV^&Z2[cs3s;;CJ:˚2RR&6v^^[))y)Iׇ)wo''Czz2ƆƆB;CooCャZ:.fhVh(( +w)_/n>f~&&ZjScO/s3;brR&(6FV6FBgGg)ɉi'_kRⲾN.n>^Nr:zJ c/S:rR.2.&^.n^~&R_''WWGGsOK ++r.B.Nn.Nnbz3s#* ++ +:B2:ZjjjJr2B2b[?_'_?Ϗs3C{; k +JJRnn>>NNnnR2Z**ۛ#3;{#k +J {[{㣛KKkJ*+"bbz +z K ;[{;*+*++*ʊ +* *++ k*** jk+K+ +: + + +j*+kjkk+**k* ++kj*kkkk** +j*kkj***kkkk ++*+j*+++**+*+ ++j +*k* +j*++z;⊻K: k + +j+j*jk*j+ +*kk +** k j+ +j +*jj +*jɾ~ +*SJ[ʲ7 g۲g[&."bƏ_svzzroo".oJw2wo^.&:'?/vCkfRRgi"~;+;:/..'bCRJ"o.CG;>~ +o6o;2;2N/+"3.;*N 2**s +/k&"jn..cc{[J +SBc+{"foG2c'2o>BBSn_^;"&gnjRgr.R.[ +bNgRS^/R?¢"*2KRc. ZS:οb/ KKz"Zn ʊ:#o2*ZO[{rOR2sJ.: +ڋbsrJoz{NO.32n/ JRR'n2.ʏrZz ++˳ +bc#:kZ#JRs+.*ۻbB:B>nzk + ++KR{KJk +c{+{:SK no*šsZrk rzj 2vi+nG3ƲbrJ ;Êʏ/ZsJ cB +zʂ:;:*N +:Z.z.jBJ??/o{3sbj.z.R.>Xxf(?I!yaySGf((B#OgG'SnΞbj?'GW7_0 P` AA1!yos.hֈ&sCg) iW7 Hx([iII)Go^&^rC73XP>9qA9G(ȸVIyg +Hx~Owɹi#nff澎0LPPYqG&W!Yi2`H(F_WWg.^.S_'wG_>n x)1ṑ1R^f o)Y {fxH#)_;;~nNNOO{[C {[ssx(W11YֈvH&'鹉IY frSwi>fZ?OO +r +3?^La)aX8> )ayi (H b/gigs3vbso7/k3J2K+[??''(xP8HFAma (bhNaii W(VHظVrwo)G'~z&~&_?'OgNJ[kO/ xXQyHvV9 v&nV(8(^ g7Oz2;zoO˳CNnrN~+ +nbk*GOg_3jb""nR2.NRn2z +ssS# +JJ+j:JJZz:BBJ k +jj:Z* Cc{C#sK;; +zj2b::2**:Z*ʚbzz"j;K*JۻjK*J +j*J +kK K;:;K{k* + k k+j+zj +" +J* +j ++* +kj*kK*jKkk + j::# J+{K +Jj**k K +K + +j* j*jj +j++ +*kkj)KSo^rk:{ +kJKKb +jJ:K +K +ˊ*K:jzHCwǎ: +_: "k{rc Bc*R.>_>K;S#o?JrKB *kjKNrrJ?#sRZk *s:R#J. jʻ"K 3ro+z/CB.skBj:sbC"k{k#kʃkr {*KÎ+2KJjKZ +k:+{ʺ+{*Z2K{ :{*;Kbkj+:JC K+[++*k +{K**zۋ +:*k {K;+K + *k # k{ ;jڢKk+j+ZK{J +*ˋ + +[j ++jJ +kkj jJjk*k+:+k j *j +Zz;++kj* :j{+k : +k *j*Kk** +j ;kz:++ Kkj*j:jK+ + +k + ++k++K++jjjʊ +*j+k*+kkK jj*jJ + +*ʋ+J ;+:jk+**kkk kj++*j+ k +**J**jk+K * + + +**+ +j+kkJ*kk+j*++j*++**j+*+* +j +* k+* k++k++**+**+*+k+jj++ +++j*+++++**jjjjjj*k* kj*kk+*++*Kk*j*k**j*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_german/cause_46_loop.isdn b/tones_german/cause_46_loop.isdn new file mode 100644 index 0000000..9f8c800 --- /dev/null +++ b/tones_german/cause_46_loop.isdn @@ -0,0 +1,229 @@ +*d}EьDH$]a^& +s//.hHHxH+7iii iWw77__[".^FƆf>.:*{//S//S#c#;+K{۞(螘Jv k'9 I)_w_Ssb^f^&f^";[??ox(HX~&OI 99i7?&FF&nróS_''__/#.88x` h +79II WwG'kKJ>>NfF&^R2#_'gg'''?6H zoGa!Yٹ 9׷'G7n~V(f*/gG_Og_O `6?gIa ya!I */J_s*/__7)bn6v_g_+ +OP8Jay O:.'_SFv^>緗/:rogpl,R66/qY_7FgIW# 6hH8O'7)WK;;s?`l @^N!9:CiYIO>&6VHxh^{WǷwׇʻ?XLw'!^HG'?׹a(hV&IiOwW \@ᙙWaAH^9aY`xf3 9 S:Wiywؼ\LAYGgfYAa Y)Si)hw鉹2))2SgkJ_kRNZr*+n>Rro˂/OCKCs3c {K + J.r*JJB#fz'gkn^^swgo:O_Gw))3(<,vMQ`22806n#.IW&2>W{vv/J*:#So..2+3Kb2R^"rBrRK3/s/_Os3SS{C7wwG$ !asni IF'I)J(h6BNOKKjjs#3S:+cC +^O2^"_s"r C33kSks~j2_'cCOg'wɿ$wAVg8H7irij`۲/7X2237':΃SGGwW.$\IW1)xi-&!bo nn6ʇvȶiGRI[i9<^'HV'WyVq(sWRiLJRV&G/'g_Ww_wX֘!*y/!gyI&?拇2*oFF2g7cw#slji@ hP1^qyȸ&*WG!!Z/v&Z&K;f{')v|pFPa~(gA6)>>i)ى)i_n^(nB"Rzcoz3__wחؼ ,ky!g~)?IiwGR~2s[S/OOLJ7ZHp2xs +)'I)Wi_o&>fr^3/gS''@ x +O)Wi/)_+^^f&oo/ooO_?'X hHNoo/))?חwW#ZNR&&:?''O?g^8 x8ظ^^OW?9W G)'W[OKb2F so_''g'_ +ظ x8WoIWiW'_c? R&fN2zs'___'o8 X8` i GOj{^f~~2rCCOgg_'gȸ x`hf2Iyɹi)'/szKfN^fNnnS_gg_H8xXFcw9yWiwSJ2rNfR3S'_'_ghh 8h*'IIi)'Ob +fF&Ff22 Ï_Og'hhHX xXxF?G)yIi7S3"R&^^fnR[o'g_g?3'oH f79IgS# +Sk{.nf&Ff&"C_'g''gc_ ǙA!W&&v3z?j>ھVF^&k['_G_oSzS,V`l~mAa97cȚ:v'7痊Z+&?G_Cc.. + LPNjgցqQW##ϻf'3C +fV_[f?(ۋs^~B"zB#_v2V&VWb37I;*/f~χSھw/~b;3)Ʋ?&cLJos./:6rS2_oso 6n (36:.Ff"&'VV)) +ȗWh9x(WR׎&>)+Z~Nhwif7 +cBZv7#.owr ΊH/X&ڏ'w{f&o3N'Ǟ~£((";N#F϶ iFSCSF'')6I2>!R87s?7x/_f.(GV7x9(yH aXaHxɀiVy;vWHRO.Ƕg^HiS9hֳ>RW~^)F('>W3X7wF['zk7hIk _(gF؆jfi()6!()hfaW)XO?&wO^ZHWoCGF87V)HIFv)2_6 v_si G/9fVi!~`B7Y8a_r(!Hh &0و-Y2l & P!X:0W1 -gYW'I`qq)ÀA(ɷ('gSV_)``~FAh ."*^ +bn&ο?'?WVk>z6O_ȏ'G/6VOFRSrf'f:/Cbb2?/N'S: +nˏ~c&N3"COronÃCk3K3jk*B:zr[ro#r[njꢊgC+NFnJj;Z*k>7csj#^s?Ο[Z"J +;/CNk&*:[j/So.?ﻻFOO#Kbۏ2z2s#+"&{{.sώ#k˳O.S ""C>[2>SJ[ ;2"?O*j"3 / +BJoK:/Sʋ:z+âb/jr^>nKnJC:;o ONc{z+bjZjRkj2c:r#jr*:ښK #;j3*ss{ Bڊ"뚂 ++bb +ZKR&F&fjo?￷oOssc?{r/ +[ǀpX f)Y);wI!G))^_fVk>hhzCnfo2/sc'g?['iKOW)x<HXFqA_ INXׁgkiA!b7i>.(6&Zj_7#GggI GljYDxxKWAAwȐXA AQ IJvh&8+(^׿FBi"w W)wB$P` qwFA 1WahgC^ &OG[7iWFd|l,-&ky&P)ٷa^'^6FgBR?*g_W IWIywlAB!/ +hFj sI)CN^j6nh*Ʋ:[J +*;gg G)@;YV0A +?(s'y9 YS f(&VJ;#/C3_Sw7GiW  3V) 6wGGwI77'n(VhVFN>2SS'/COCog鷗W`06@8'?O~iWii776(6V6n;kc?'3s__'GGW)xVf"wg)Si)GiGZ.Fv^ CS/g??GOXh V`V{GI7' _W)wo{nv2"+co''_?ϟoh X&.^_IIWIwwW7w'RFFvf^J/'?/#ssc{K踈V88B'?wiWiח7{2~^Ɔffn.2k;SoS/óJʻKrr.v(VV3GWWWwG__s"".>>rR₺ { ++ZZJBB"N.j+;SO''3{ k2Jrn.2zJB+jJzJ++kJzK{*Bʺ+ :j#soC3C3sCos{[J2RnR.2nR {KssKs3# ۛz+:"2 + +K*{3{[[* +k  +k +BK*zz+*:jkk +*KKkKcK+{+cS "zJkKjʋk 2:꺊+JK;ˋ+ +*/뻛{:: + +ʊJK{kK+j +j+/c+j˛ ʂKJZ +:* jJ +jk+2"ssC ++[jz:*+*kk +j;;kjz +{ +rwhg_;6{ k+~#&a:Ɵ.*^^;[s{^ks +V.#v?*SW2oKSKr33oZ"N:B:ΣwfB&^'jo{^gkJS[_2ϣ'~_^g223;nn2.srbNŸZ[ +:O"3#rSSjr//G2bSRB/J +oooxPhgyiW kzn"ɹWo C&ngi)7w{dp6lh-a鱑`hVRO#)G2zHXhOWWs~J'_o燏z*Jr~"Kh(h6_9w&kzC7)/S&hfnWg;ûzZW فRdh7(=(0!9zaa8^ga!i2 r?W([. ) rڳ ^sS*;s& +B.Z +R.ºj//S/S;kss#C"J..j".Bbn.RΎg?/>*7OcJbJs7w)Gd -癱axlJ9Y@h7iiቊHSoə7 +wi)B( 3g.&R>:/: +;#3kJjrb"";zs*CsSCsO#C3*J{ +Kk/SrNۻ@wY!#gwv.!yWkCFF+Gi׿8Vwcok Oss_WW)wIYgl&M-O ବyZ'x@.!Azv83a)"&RbF8^w9&Ss˲_Rn +;Bnj2:rbã+KcOS#c*CCKc{s'w7vldlm1Y[9l aI0 +Gw^؀ 6i)'KH?#k + +zk+2nB:;(voOGg*: S'/ʢ+sϟW)GSSo0my!&3g!A@6VaA ƆHfiK'8Rgg7'Kc+{KKzzR>R[??B(9II(^kcII.&FhWfgn'/o7br/_J7Ww$$Vyx;a H;_, -W7170~!Ybo2S~Y9.jgv(+B_7Z+cO_sK|ܟ.@_iBCq2{W(@XWjVy/cg "ϣ'#7g3'gj$LH 0aѹn1wX6WظAaWRVc X2#B懢6&#~7_;ggSJo?'O?|L 0p9w)Q13F{!Waoh&6hbOng7':f3/nZO?')_KO6P2qQIggƆZ(IY7[3"8vz[G'_G_# +cK2C3_GWwGoll,0/H39Wqy"h~/WW'IRhH^hS#2KGGpЀրrO '7Y'>_o_'^~&^^SO3w3O's[ sS'r2 vx`Fx7)IiS{rr/s[KKrf^>K;{?oSoC k33 vVh6Fn'gW7gGOO?/k{R^^>>B +ϏO/oSSOs[>Fvh&.i)wGG'O?#C{>ff6>^B:s??s/S#VhHhHfK )闇G?3sS"z&&F&^N.2 c?__?_ﳻVH8'_gi)ׇ7? j&Fn.rs3g'O__σB6h8xȸx'gW9WgOGSo_/zZ&^6F~rJs/_?_?__?C2(8ؘ6^ '_iIWW7'_K +F^Ɩ^_?__?CﳳkFHh8 gOW)I7w)G_7g/ +&Vv>n3?'''_OOoSk*˚nVHFWg9 _S2 NFr[S/S*jzB"2r>V(6.~>Ϸ)wW7'O3;Zr"3 rN>nrR.nˊSSkr2zbK +oz.F2Zr +_SbO_.S2_7OR2NG.2R>>^#f:~b'>> +~3+GK{_(:RS2g?{g2n)^f&sh3oOhWX&玆& +"K"÷("/v:._&oCVןBKG6?W/HW?'wgkψOW)6w~)(W>7Wn ^ ^w'V'fi((Ohڣ~/~JG#HhXNɈF~'ٶIR !戙@x0 Iˀyv 9&/w_>/.s6O&Or7_λ9HW&.)&6gg_(6f[fr2+G^'&_"IGY2_H[WFR9 Y)nhWvKrVG_Ƴ6/viGBo. 6'_FIBz)N&~(!'~Ʒ(_)fC2׋Kh I>!shB`Wh_jy[JGHW؆ w( (syk 3.FxWnSfwH)`hhp^~)x& c8iVVfx˙8S^?y 8CgVc nXX.aV +^bwSyVGYwb RRdzƙ(hw8o_^7 +H'J&hJ.g&+S{~3NFcs_G22? #Rz_CJ.VO{ϚBoFn+N['~&j~j"gB~C3 ~3C?s/#B#kBk# + +k# bSn +"nʛS Br +{kc.~sSb"c?˂2;[ +b:J*:K;jj +.ʊ.jkbkOj;3:[S +CO+"+ +K kjJ"{CoKsw !AY_F{7/oy_LJ>w_ڏ))j[Gwi,t$̉!Y21Ab63b'CY)/Fb6G>ngK2+_/C[_'ۻ) b/W7,$|Pa!1J&YV+z>&z;LJ_WY)$|1)A72`Zn)7BI 7F6fS{ZVNs‚(^_#OsBSwGo3+[O?g) ܼL ٛ'Y9r~9nGg Sr&^2jB^&ɉ6_'O'/r2'gLJB _ 77~c)i #7w#Z&;[_vN>wg +^N>[3#kN +/O#r[f0BǷ++wG/׷j"sbnj3o+~R"O'oKz"z"2b."2+bbB[ZN>>hvc?//;33oϛ"s_ok"oc+RzKsZJJ[Znk.&&3/f&gb~J#K3RcB>#3o?oSo"S*zJN?BCrzÏ#K3jk>z'CR? +.*O[;SNrs +Zc3On+N +zjgsJJK2C*Cr +'?~Sk2r+r^ {[k/_j {r^_ sNs:ZKr':ھ[ 3>>>RC{2Z2BO#JR:&#{ +{^/3 R"{sb_Zb*/+jj + +['KkZ22?3.:n2[ΎkO3*S;'C/n#Z&.ZR sB;zB :ڎK2"/KzrJBsRCOj^SR'z*"/;^_*s&/>/~jڂ +on. +Bkb3;RfzRbz b +b2n +ϊ[no2z{no3+SgK.c; B +zk +Cb+";K*㋺zZ+닚J[ 3bzJcb{/[r[:"++Jjk* +{ +> +s3b +ʢkkj+;*{:kj +:JJjJj;J{ˋ #{;ˣKj +z:zʺ" +bJjj+kK{K3㣣[*+++Jz"bں:j{{k##[BNOoڂRKں‚zbzrRZ {K3o33k{:"BrBB2B*zJ+;K + + k*KKK{ +K+jJj+j*+K*k+:j*z:Jz"z*kk{{KK[;K K{k*k++kK +j+j +Jz: + +:*JzJzz::j kCKCC[{#Kkj*jZ:z +J:brR2Bjs?O3[+kj +ڢRJ + + 2^6f#/G77'?[+Z2.N>~&^>.2+K#s///oSSsSۃ#{ k&6VvnsWww7'c Br>~>>22Jc/Ϗ/SooRvVV/WW7Goc *Z^^&&^.2+ #//o?/SS*rFV(hh(f:wWiiW7LJ_OSzr&fF&>/oo?''oϿo{;Z~F(HVvf. gw) iWwg_O[ +^fƶ6f^Nrk#3o_____?/33[K +BVhHHVv&2O) WG_s[J&F6vv6F&*CO_'''gg'OoS{kJ.V(HHH. II i)WGg_?Ë^֖6F^ 3'g_?o;BvhhH(vfWi I )W矏k^V(Vv6fgGǷGg_?o k+rhȸ8VWi )W'+N^F((Fv.zSog77GGg__jʢhHxhVFR7II )'/j>^FV(V~2Sg7w'__o3c ^6xV~Oi yyɉi'KR~^hhVVvVFz:SOgW)__//ʊZ>HH8xX 8(lj !Ii )_r^^vV(((((֖.'G7g矏{+.fVHHHXHVɹI!II)W f~vXXV{:377i'wHP`0,@H) wYy7)_999&xXXX `_+YW;'J'ןWI)g)O̐@i-aaqzh׶F9)ii)+`(#_Wgn.o I)g7_ۣ_DА8HIaa xNA &VF`^.Wgf')'k'. 7Cigg{K/D@Hxx#qY'Iiv 9!IaHh293{+hg Grg/o_W)O78$@` mw׹w7 Fy1ٹIxx(Hr~Noh(s7iOW'㛿'g'[/|d+xV m w8`9yq!i7^ظ/J~3hg.)?jg'o/dgA͑o7g:xIY1AgO88f>^#g?*3' '* Ok)g''_[RX@hiG7h29aɏ?NxFg/f~Z6bsS_/Jc'/{:ְܼhh-GW(7)!aOVHV6>sZ.*r>#o?_Oc'w:ck<`FȾIWƸN?iIYY)_zHƎ~RO3cCS_[;_Og{k+F,p hh8V)YIWII)7boJI_#_gSVFh(6+'O# _SogϋK?J6((hֶ7)i۟Sr^V(F.jC_'3?Sk3?/?/3S:&ȀXv^oۏW iGS/??/˞(V~R;s's/oO//~HVָhhb +;闉w7)g''/gOo32^VVVfN^N;CK3ooo_Oo/3Cz XH(h(F{C)i)7i)??/7J_SڞF^V(vB{/oOOos_?[C2f`xHh֢w9ɉGwJ3{'SsR^F(:kCO+oOSKC__ϳs?`Xx 8(iIa ?R#&)_wgC(hVhxfiG'/ +kk_'S/o3̌0XXhyH z&?iIWig^88H֞GWWwO3.[ gwLJGח/k˻@XHэy٣`i!W7rW3z^2o#_wsSKj3\,GQͱWaYSHO3i)^HȈ(BOr?Ǐ WWOWs3/\ИȸGMɁSx@hg+& +!AaWi綸xhhHȚ''cn_Wgs^gJsw)?׉_Kbsrs7c7?Kz3j@|L08ȸȢ1mYI:ظ nFꇙ!ɇ7HHV8('Gן +"{sJj'3[~xxHȆ)A9ii+f?&fn3GwS'[f&(NZZ3?'3S3zk ZZ "JJNfvfƆ~;7''3KJ +Jz+ +k늢R..j*K/oSkZ; ʊ+b2RZ¢j*+*k;{Kg/oS3#K +:JnrZjj:J*z Kjjk[k + *ʚZK+:*K ++ +**j + +[;;{{{⺋j*{{jJ:Jںkk*j{kj zz +z** KK + +:kjJ ++kK{;k+Zz++J +ˣKjj+jz*j +;K+k[;jz: +kk{K+jjj +++*jkk+ ++z[**+kj+**j* k {;j +* +j + +뻋+jkk jkjjjj ++K +j++ +jj+k +;+***+ K +*j j +jkk*Jk:+kkkKjjj +k + ++j: +;KZr2&B?3c?/ +bbj^fƳ'OS"RNb; O?*c:>rknrO2kBs;"r.;Fk^7NÞK7ON'~gr2jc"w3>NsJ__jgsnn>^N[~GNf3> +6*'F._&>b/۞#__Zc#^NڟN+k'o_&bo_'zrb[ +'N*Nr+/oj~S+>+kKCbNj"c#s&?+*nSSOs?b:N &z.;.g7bb +_^JۏOj6zBkN2's7f2w[s&2>rBk_r;s";.of#K_*{o_3{dz.jϊ^)j>;* .>^_+3SNR*b*/J"32 v; +'ʻ[RK>OB'{gO'hγ[#:S~B'S?wV>&#'JKZg2~[oZ^2 +ۛ.Cg+J_J'"6gSJgڇ/SR_ˊzz#3S[jr*32K{#b~Z>/3[#k+k;b{* +O/ +^[[;zC#+[#Ck+ +낋΋;*r.[{++JR2 +j[*+ꋊ;3 so33S#[㛚{3Ss_o +ko w,$ h[A y)WHhn^~ƖOi9W/ sJ?Cs/DvYW' NO& J.xOi)o*Rk_G)wPn6XqQ9R0Ȟs;!!i.^HXX6gG7)9i #S..g'Wi笜hn(`Va-iyGr(^3nRYYik_2V8`֖;_yi'So_Ξ^No__Ǘ7Fl0VHIaq1 aYɿxhGiw?_whHVvfog'cN2JZz s3SN f(VϗiiwwIi #rʺz2.bzJJR2zb"z;{s3sS3[{ j +.^&^FƆ&kso7wLJ_/3C *"n>>~b2.ROO?_OCCC{Jښz2N&f&^2::j[o_GggG'_? +n~&ff^>BZ+s/o3c#Zj^&f2k__OosrnN>&^>.Bb{##SoSsCK*jj*:rr>^^&&^BJ?gGLJgg'O/CjZBrR...Rr" #CC{;K KK kj".NNR{o_''__??Ss3[{K"r..Rr..r2Bb: +Jʊ* KK{C rnNNnnnr+[sS/?ϏO/K;kʢbZz"Br2222ZZz+++ۛ{j +**zBR.RrB‚+C3So//Sbbb"R2BZ*++ [K;K+j2""rVnCWyW?ZhVfR._Gs>rF zKcOOOsKO[&(x()iYGVv6VG_G)?Ύ"^{s so/S?SsVpP@FYY YA!iWW_vv6>' )7.6hHhBg)i 2^~NKog'';l@ n)yyAyii瞸8Vv6>_i)iW7hG׉i)S2~n⻿Gggְ@hgɉqWH666&_W) W;8x8)iGwgknR_'GKhP@ȿ))a9)66GwO:^(V((Vf_GwoK ‹ +*ScrָV8H(h^_W)iG_3s*"2.^fN..2r+/o?_??o3#ۛ{b&F(ֈhh>ZSWi )G'Oۊ>^fƆ&2o_OSCc#jR&(hH^zO Ii7[z.N6f6F~Zs__g'g_C*VHz[i I iWWw/;>~&v66~Jc/?_gg'___[hHH8(fog鉉I )G_?K^Fvv^.z/?'g'_'?oS3c[f(hH86>o I9I wׇO/ +k&^&Fvv^NRZ{CS?'''CcC#˲舸H8hf&#?_)ɉ ii_cJ +r&&fFv&ڻ3/''_?OScKzN^H^^ i9Wǿ>^ƶv6FFf>"J#/?__''__Ϗo/;Kkj&FhHh8(b?_iII )G7GK^&^f66g_OsO3ss{ j +*2(hhH~) 9WisO.&^^vv6Ff&N"[sg?'SSS[**N2g`@(Yyw"w_2&)w/~"{涾gO'gsr3?/g)kj0L p' q-18(! W I V `hȈI9'_?{fnsOSg)WG< ֗WiqaVhaiʆ`Ooog)G+ +7;^FbnhH(X8hhwiyyS77_?cSânnf66"J:C?osoSS3sS3s[## + +žvXָؖgC 7 Y g:Fv^:j +cSs3Ss/SsCˊJ2&H8I Y igW_;K2^6&::ós/S3S/S{ +n&f Vh''I)י)חkzNf6Ɩ&^~ºZ/sS/s3S3sC+"ƸXhV3'[I)y IwG)7'+ +&ffN>nZz[3cO3sC#;*H؈x6V 'WWyɹiw7?Cjڲ&~J:JS?OO/Ss#ˋ{&HXhh;)! wG3J.&(6FVr2.s_S?Ossok +*.x xH^k?) !y9 Wonff.#S?_'O/cC;; :z>FX8xhHk)ə!yii_/ +z">vv&^:;/_ggg__oS3c + +2FVxظH8#GIY!ٹ W'3*bvVv(VfNR ?'gS3 +zr2NF8ȈfzgəY i)G'_;2Fvv(VV6ƞRk'GGg_OSCcC#Rn.RN&F(8(XVsIAY!a鋶CVnS'2ƶRV^jS/_i'Sھo*3jЬ0`Ȗ11Y!Y 3H6Ɔg Z.^H ȶ.* W'' NF{K'wS hX`xi!9h86N2_y)O. x[9GKw)'N(`@V>Qq!9wnȘb!YyiSrH X8vN G7?fvro)W7zbhPlPVA1!Y9g88h6Z!9g֘ W7?bfF&NOǗ).@,`hf9ay_68xVrwyyIi)?fx V)iiI)'&f^Cgg7WWRF80Hֳ9qa8x^)ibhX8ȶiɉ_J~>fƆ.c__WWGBN,PhhډA!aWrhhv{I)wWi/()WW鉉?zΎfn?_#X0xvϹa!9WfFƖvg?o3bFff&{ +BbRk[ :2^ƶHHVf΢;I9I w+Nf>nnRJzk{[cc{;;* +zB²2ZzzBNN."j*_ggg_Sã j:2rrR...r2:*KK[s33{kjzZ"⢢ʊ + + + + +:ZZ:j++K;{{;{KK[{{KK+:Z":j***jj + +J:zJJ:jkK KK*+ * ++k**+Kkj+˻KkJ++kk+k+jkjzʊjjJj닋* +K+*j*j +J**+jkJ+k +j+kk*kk *kj**KkJ*ˋj+ *+* ++jk+ʊ++k + +Kk+z*:+:j+;k + +*k"**`y6 6r?B6梳&J33b +3nsNˎ~o>n.>+Bʎ/3;3r{Jk*z[ȳ!Z?'_B3ʆ.{>:z:"*Nc+kJZcr: ++#3 +B;r3[Bc;znRJrso~.ۣbK*zjC +; +[Z + kJ +k.cscz[{{sN⛺c3Zk+k{ˊ K+*ʆzR+C;{:nò*K;Z*b *KKbSڲ˺3+ J:jS*KZ +/#Rs r/*rK;:{2:S#SK~*"*>K2s2[;+++kc*2ˣJ2+2/Zۻ[* sK2J+z6/3#Bbk"+GϳOc[Vs[2/ +c{C +zBs + {Zb 3+ #z+;KBj+"kjJ;bbbzJڂz +ZZ +K/o?/Ooo33㳃; [k+*bb*8`0 8`wyiI gj>Fnk/?sC~(VNs?sJRZ+{CsBn^~rBzBn&nS7wWWLJ;jj;;;ۛ#Kk{+z*k>v(,x`ﹹ9ٱ9 I_?R&(&3)7?.^(Ǝz?Ƿg?3;#3ssʚ2N>&^..R¢c'gLJ_O3[* +:":Zr>.R2:zJ*k{K{{c; +{{Z&NS#'7W7w/Ϣ3; /S_oggR*&RJ j[+bbBnn XVVv3[gI IW{Z sCZ>fFfF{??cJ" z{{[ +JrR&&~2+kj~2&c_'Gg'+kJzKroK222RB2n* {rzʲr"2.. jR+B{z3C{czC:3O +ÊckBRrr"ʾ:rcBZ*>r//*;j2 ++"O{"/Z2Sj_{.*[KR +#΢Z*NKO&SKO2z+ssRz["ZSZBo+ +2[:?//2j?Rr27SSS[BKnO2rB#.3cʊ&[B~/K^grۻR " + /BJ3[:>Ϻ +ZO& o++n;Gnn22r'Əsrk*r&S2:+bc[o{ +/_Z3'Jz{R3 ++/"s+#/sKBZz3SjR&?j*Jc; +".SB[RZr;Jk;j czob+CR3Z/ۋcC2ʳ.K;3RC2/ڲۃR#R?.Fs.g&[^jSrBNRZN3co3zʃRjN ?3rck " :CzoSn +RK2~ kk3B*: +{N3 #ʊJ+ںò{2[~K{C #{3+ +*2;/{kcjj +bJc*jJ;";"kJCk +jj#kz Kkj#J#z;kJBKKz +";+b{:C {Jz +:z3*3J{+ +J*z++:+k* +Zk kKJzzk +KKK{Kj + +K*+ J*;:kKKJj +#j jJ;j ++k + *KJ j+** + ++*++***j*j*++jk+*j**k *k*k +j** *j+j* +*jj +j+k+*****++*++*++* j*+k++*****+**j +*j+++jjj*** k+*kk+k***j++j*j**k+*k ****++********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_german/cause_55_loop.isdn b/tones_german/cause_55_loop.isdn new file mode 100644 index 0000000..b263a86 --- /dev/null +++ b/tones_german/cause_55_loop.isdn @@ -0,0 +1,199 @@ +*d}EьDH$]aOsƿB*2:R.˿O3Ww>#RS3[ /Z7o3nj/Rb>/V[O3[Ɨ("Sb +g_GGN3βZ_o*#{kr7f3ڃSz&.~{S㲂oGڎS>?'~NG^KJ7S/Bs{>f +'vrjòNjoVxBV6~w)!I;j6B&R" J"{f{~)sz^`x#7!Y!Igo{(hf^7Wo۶8`0 f7i!aY9GrF(hhV˳S燇77ǷGx(x`0`._iIA!aY!yyrv6(h66b?gGG77ww?xN,p.giIA!!ٹy"bFFVhhFhZ"sGWWw׷80vp 0&w9!!Y቉9_bNv6v^f2{+WW)WWWP806NW 9!Iyח)_Z:^f6V(Fvbnc_g)WW)WWw_H@@08`_[?9!Yii_c{nΆFFRz[gGw7wwWo(`0889aቹY)wOj^^vf^Fb[OO_Gw6vh`Xx@ fv )Yٗ GR^^.FF(nB*SS7חw^h0HXrωWay)!!W _o^R6^n2"kSOLJwwG~ xH`N_!9቉Yi>"涞Z +3/'/V&؈ఘ Ȃf)y!I! i'3S2~.&>:++SoS?ϳȶHhvȎR·)yWI gǿSzRBBZkjZ* k;3{26((V8(vG II _33 +2Rr22Jr.B2JJZb+jz"Ύ憞ffnj+s_燗Ww__sۣ+"*.nrRnnn~^Rj˺::j2z J +{cs3??/?o/3 +BnrN~RJ +:*K{Kw/2*JjB>SjJ/Oo.2ZN~JZ///SjJ +{2&{?R.n*/ sSZS*[G3{Cr:B&';β#K>nJZ.κ? +(»sKn*2bös>3ֳ::)(C~FvnF27(&fF6ւf^~nV~#r>W?.S_6F+2i +(6_FZ#.>BfRC~/ 6 k>>2f_h2nR&i2W+2O'kKz^_gNSj/V~gnNcSG.k7ib磞O).J"jG_?F2n{fbJz'B +v3[+^?Z"SN>.?N:G2" +z_O:2Jr{/"ú2S"/BK +>brB*CN{CJksC Kbjs*;:K*nKCJkZ;;JJcj ++3++n.RZ+[B*Z33+z3J#czk *Z[*S2Z.˳B:o"#JZ.#:K˛kjBK* +cr/+s‹rr R~~2>*{/j>? +/#NZS'ckKrk{f2[>kjNz"2BCC_&7_C>2#/r)( Bo +w3~b>cCSs32'^sRK{r"^ [ +b+3j;[{3㻳j +O''";6(8VVjwW)WWϟ^^ +2Rb#o겿#J*o?S3;Kzn +^hv؈~27ɹW))_{^&Ff66j"_w))G7__x`p`xHH3IY!YayG(vh./WiigZ~F2G_ 2^^?3+Jڂ.n.2Z+{3ZnbrrZw7GgN&ff^(x HVR7 y W_{&h6 +_)ii)iwG''o:z3ǿ@,Hh)ƎVXx86G) )iwgNhh&N'w&FN~>o)iii_ff~3Og0HhN*Gas68(^*ogg;h(B#g iw'2{?'w)I`,|ֆOo_1--Qk&B8`֏w)W)I`XXf^KIY.Nz'i, p((IQ-ёIGʖ `X'))v(v2 +G7?/+ZSG)bl zimqaWonVo*))yGCvhSG7'kz>b?'7lhv~)Qay)>x^nb io"N&&F&gg'CCK[ +_ph&69a!9Yyi^&{OOB>&>[[oSC;sosۣ_{h@p@XV(XXhNaaYYawcFFV2g^Ff>R:[/Gg3ogg_7F V`Xv9qQ!a938`x(F6bSrV 8vk/'W)iWǿB".j IiX̖ 21my(p;s'Sa?F(vIIɉ C>F6:?W!f<~fxx[iiwGWWGfv???gO2>2 kk7i9IWh||$,7Yq 쐘~WyWya1N` +S_sw9 h ^ˣgIyɷ>(HvfZ:b3Si#&Ho3SO)Îf{krrjsξz2r"/3ZHG77n. +óskjj3#C'7II )ܜ$6-yHplaqYfp)!OKh` V !! &vvGI[vV&ڏWi韢f&OSzSbrr2.C#*ڢJ¾6~GGg*b2J+kO'o;f֖&:wg#ʺbJs_Y\LYAkWGVXP,IqGg.Jh xYY_NfhI{NB3's*3#kKJ;CC/SOP RyaWO鉹go ?W/gw{vFNjo_7GO*b++RZ*s/cKf ֺG3gWGz.z[/Š/*˚:bj:2Bbzk +Kk[;;[{#{ +Br2Jz" K jrb j;k;33sSsC[k:**jںZz:zZJk꺚ں + j*kkK;* ; KjjJJ* {{; jjj ;{{꺚jk +Zz+k**J* ++ *+*kKkkK+Zj+ +Jj{ + +ʋ+*kK : +kzzj K{+j** +jʚJ*K K kj +J ++k*k + +j++*jk ;+KKk *J*;k:z* k*jKk ++ +ʺ*+* ;JJj +j*+*; +J +ʊj*;{kj +: +*kJJ+k * +*++*+닋+* + +*k++++*J +j+ +j* +** +* ++* + +J +++˻+jJ + + jJJ** +kK{ˋj+j +j k;** +*r3"J +K*+++*j+k+*j +++S/jskʋzjJK*j+++kkk++j+ * kk+*++Jk*kK +*JJk+j +*j**+*ʊ*j;* ʊKkjK* ++ +jkj * +J+k: KJ+k kjjk++kˋ+ʻ :*j{ + +k:k;ںKjj*zN ;;ZZ*2z[Kk[zz{"jZ"{KjJ {;/{[zZ3SڣsCK* 3"J[ck2JKJk{KZz+&:#.[#ZkjrK;BoNkC: +sZ;r[[{#B#[jR2/: sNK*Cc[/JZ;nZC{2OfS/#  n2Nkb{'o7NJnOf3KosoRN{ +./nk63&O?2v'W&c +RΊ/2SW6K&Bf#(N[f26.kZVv:V +GG;r&^6&^{6 +>^&{Fb׆3_Ʒ3&_2˿׊?'Or**z#:惟x"~.~I^#:(bVrv_z(.hW?87CdžBsog9þ6W'2x+W^i_w7K~Z2 JfR+_[_3 WOfi('^isfin8/"!)yRV/VZ[>6bj67G+&I '^(H+gF6 WI^ (׆V^*)H&GoGZh> +){v#7s C'SK^fOfo&vh"ʷ^S&{JbC' +2w^S+.˻~Z ZkCg?'V'Z/^~zˎg[; +_6?s +#'2.Z_Ö_r_^NF?vηFR&ksO7')G?NSoʟFL`P Zw2--!AAf^ 0V^!Yiiy932R~֞(c_SI_|L @ @_9)?q1-arr@ȖZoɹ G&fRgLJgG찐0Aѹ{F hV.*W9I?fRSWo?_`찬 `A!AȈb'))fvnΞnsgwwGG/CsPp((H(WaQ78H֖.z9iwS.&F*SϿ7wC;Ks_ 0Zk+)񭭭IgZ. XXVjW׷))G^FbOw7G?/ cRlpXF +sg)aQ-1/n&Vx H&W77WWz~337'3{G,L?COQm-A&F( 获9//ggS.v:_sgG[ gPl,`Ɨ791_(x(^R6~Y!I_N6F6(VF )G_O{ʚ_7V,̌(WWAy(~BrjW!SV((Vvb_i'__';w lr)n/o1&H+Ay(H&x>w)'?G/NC'G'L F玢qv^_~'I!'HXXxhkWiwWi?n_ǷS>켌8gv'!1O;?9Y9_z3R(s>W_ SgC:g'x@X~f/'ﹱWb9WCF(F#BjOo_G_OOZ fHJ"wWAg_Wi_Ȉ^{Ƹ(oSiGcZϗiJwW`ؘx֏)^ ! wW7f*j戸hfʂ^G_+O7)wo;/Oco_VxxhV)i9W+;nRsw+ʟ? Kg_؈ p^_6ρy) zrV6(SO"_c/''3?_'sh`@@֞G_Y9IY)_7i; +zVvN + c_'?__OO_S/f`02g;y9iiIǷwo~fvF S_____6 HXX`HgS?I!IWgϛFvHvfv>"Z_?ggggg/33ۆXธ @^F?9ai9IGwiGχJ#f^FVvvFc??___/3#c;* 8X ^&_yaIIsz:jVhV&n2o_ggg_/3c{K9@X@6()i)9YWIO_)>VVv(h&#?)j7_'g#[K,l`hSq1yiwf's/fnhwwGg{//ks: +s:j3,lȀhvrK! YY'^k('/Fv(.z?/7gB3oN~B+'l>fi/Yq!yYlj[J6'vg/(sF&Kb+g_{/b^6f~~^@8O~CI_Govg>;332;^Nf&.^J S*j2ŽZ^&n n爈 kVs>>g ǹ_sGsJjoꟺ>&^FOf'6bSGF';7O;^kK';G/ǷG+NgO?3.#/:Nr^>>B^{R/^#j23Z#O:So·fj揞2n?s_/?B/n&r;ZK.V;f'f3R_^gg(h;V_7?>+n~SG3. +Bo#{HǶfsn/cOHhVF +'+{N2N/.__yF&6i/Ɖ)Fvi (Çf'S"^"{f&r糚 /3^ +7nvW'(BvGR^ g#BZO~'hhOh{NΛ jgh6.vZGv[_b~ixWS^^F h foz/SOvgj7Rã/.sbKJ?bso&'&³{:j{[: [ZKBʚ+["3R3Z#Bʻ;*+kk+k*k*zjj**kj J* +*+* ++* +jJ++J j+ *K* +J+k ++j+++ +**j++ **j+kk+kkk *j****+ +k*ꊋj*+*ꋋ*k+*k +: jJ+* + kjkk+k++*++**k +jj** +k + *kj j+ + *+ʻj +*kJ++j+* ++j k*K+ +* +k +jk+ +**j +**j**jj*jKjKK Kˋ;kKˋ +h fgbO;zjNskn_R2 hs*'g/FzNSc>s'>.cnzSR;oJ{.z[srJ*#^&f2C_so_c3/_'O6`8^G_WIi)n^f ?_b"&f>˛?OScj* +rnRbr{{C3{r^~HN+gIG'7;*ZR#vx` 8oHOWy)is7nr&'gG&FV~>NjS/oi g{:z08Xf!W)~nR)Wii)WG&h8HhhfGo8Jk)wׇCN&N+:{/'،`8ha!Ww7o&G7_(؀XHȈWɉ w'OO#wG'/ |pl 9YGaI?n{/'G)_&6VHf^nZ'G7gg?o/3b(`H ؖ7!yy9IW_s;Bf6hh&R?777oSSۊr~؈ (^C_YyyI9ygsV2J3OgGgsf(h8V^'II99I9)?O3b&6f&6vFR2[sss#Oook +:.nxhȸxv^>{_gǹ!Yɹ9iW7;k.^6^&N*ʚK3C3//3*B.>^>nF((&RbgǷ)Iyyɉ)Gg +R.&>NNnr2rRBJK;K[ۋ:BRRR..2nn.rnrj{_gחO/ Z2.rnr2Rnn"zz*** { +: +:zZb+j[ZzZ"šsoO_?/oskk˺⺂2bR‚rr2Žn::j +k ã[{J: + +j*Kc3S/CcBBr.rrrR2J ;;[*;[K*+Zںj+jkK;[##:j˻# jj^) +OkK[# rsJR;RRJGVniǞfob.OZ:/3'#ng'z'b'Jj:{r_Jjz +ϋ+'sBjK&[f3. O?+gz[B/f"/R.O^?.J/6k +{_3Zۃ_ jJ'sro^k +"[> ckJZN?Rk#JZÊJ+/zR3  +SC:zgz2γkcjJjj"B"3r*ξˏR?Nk/b3?+o.S#Cs{KC^O.."{3.*g+cΣ+ZB{"#2K.KJ+:_Oo/g7&6zZ&zZR[ 2R[2n..BΞ.ZǷg _G'jzڂ.Nbfn~>^+>6(HȀ7A!nK9:oG;^+^__o'G gR'@q͹zAy(yf`9WA'hVv +G9)7n:S&*_''g)ik[[J2>z^0<ȸiWAyWYYI)IhVV8kSI׿kOǏOsg'_nR΀LVVVk!Wjf·&.)9?G'(FSCWg + _{2rK/[#R.`P(>wYY) gjz_s7WׇOs6hFVֆ3Sg_S#{Jbjc3ϟs/S6X Vh^+Gg_wi ǟGϟo[[Vs3_o/o3sϟʆ`X((8(SW i7'7/J¾6R"Oo?;S??/Ooh؀(H珟ɉ7'_g +N>fv(VFn/COs3k&hX 8xhgowI7)7GGo2&((f +/?oOO__/?s x@xhWgI 7G)GG7gn&(>__3/#Cs'/?/k(Xpp hJWwwW9 _gW)wǗ'^vvVV.rÇoϏ+/'gSOc +N8,8hF!iII/_GW){hhV^n.kow/s/c/o_C3ϊ~ x&F)wI_zG7I gB&h &hN#{Giw_':"/7'C/*F,$L Y)Zia!9F: &W&CcwkR'gO3G'jfL(SaqqoɹW8*SaASrvX(+:W/bgG o_?_7ZzX ֶHaAIYهx_iW:;!aiVxh֘8RSRJ'&'o7jbo#jO'#[;~fR|HFفa)a^(ii/Ƣ!g khxnS3 +C/'SK''#{B2nf 0~ xI9!I鹟*'ic'&(ȶ 6bfg +S_G_// ÿk*s~@h⿂ljiW iwWsOOJjk&&^6vR 3S/ j:Rn^VhVhȖ(hsǹ9 )) 7'sC.>FƆ&~2 3/ϏSϿsK bZ2NF(6v6^F^rg7iII) n>f^NrJJj{3Sk +..Rnڂ22rRzO?ww7gos +bZnB2rn2".r j;kkk**"2b;KˋJʚ2B:j+S?OSC j#;J +Zn.RbZjZ:3[k;;{; +;Kk k+j"jj"JKkjV73C Z" +2BZ2RJ +{C{{ckz;k:b**"S Bz[Z;kZ[ZZ2sSk +#[sz?:rOJc.s_~s?^?C^_rSf; O^oF2o*ۏ~sʣ v*:OoNvo[j׆/&g/Z2n*SλR/{/2/ORFofK +s&3ZJ#^C{ +&COGfFžv ngzz:2S֗3.?^bCjʃNooRn +Gj'2J_ڎ_*_rJ+s^J&{z^g*z *?jSrC:z3>NB??k'Rr_o;3>;3.J۲o2~?fbR2 +3"R#kj +2s3S{: ++B bj c*sB"ʂj.j*>ZkkJ3 +; SJR'.SB;;_Nr.J/rc3k"RORK3c3RϣjS&zb/2s{ +{3Sn"BO"BkB۳Ck.JCR2oZr*Jc+*{jrcJn/K{b{"+[ڻ;" ++s[j{Bˢoc #ZZ:¢BB +JzZr +jR +:J+:jjb: **#SϏooSsk +Z2rrB.22b +b +*;Z~V (&k Y99)W>F6־~/ +/+B2"J['?/#cbv @ 8?wIa!aIKb^frnBsCr&f6F&f_7*:ڋ+#{^( x Ȉ6Sa!Y)OFF^NZKooFKH^ng'WGOgOJCC+ʣ3#Vx00VhWaAy jVVg'7wg(hv&#o)i2r΢zg/oCVH@0&R7Y1A!wvVRwiiGO+(88hswi)b>r +[sKzl@ y!A񁙹 .~(KWI ׇ;^HX8HRCWi /j~^"gggk8X H) AYW_vF{cIII ȸ`XHVfɉ)_c➆^S''C{*BBʲ2{Nf,0XH#Ya19_kNh&yFH8(i) _[~~.''_/#>>~r*/S>fv6~Z' Y!yyR~&SgGG77&v(BGGg翻kzJj ;#k +2NR2r2KJ^F66>2cowwwGos3[ J +#BBrrBJZ"k z₢j*z#{K *"J~F6nwo.# ~J/nBN^rZ + +?G/g/RN.R.>~&nRʣs/O_g?o3:.~NnRrBz ##So/o/S3[*j +Z2²Bb"Zzjk#3s33ss3C㣣k+ +:zbBB"Zb"zz:: +jK {;{k k +ʊʺjj K k*+*+jkkk++kkj + +:z + +j +Jk* +j+ +**뻻K k*j +jʊ* + k* Kjk ˋ+++ * +KjjjJJ +jj FW겋*k2*+»c3._/'rS~R>_f'CsNێ.#'Z3j/2'B_#3ʂKR3rΟ2c +R:njs;+˳;*cb#:2JC/R;BJKoBs: +{BˣjZ"K㺋[J "JSKڳ""r;/zB/{R{kJ{k*KZZB㳻z2Cj +ڢ;nJo{;{Z*[ +"+j+:J*b{ +cKK +K 3KBz:kJ+*j⢣SZ* k:{k+z+{jJʺkJ[*+[zR*sC S+ +KcJ +jZkzjkKZjk[㋊jj**j +zK+ :ZJKczbc#"J +J+jK{kڂJ*kz [+ +J Kk {; + +*b"*;+jkJj;ۻ+j+ +:* +[+ +kKJ*kkzښ{Kzk +z[ J:j{k:jkjJkzz*{K+K *: +KJ*Kkk j+* +*+ +j**+*k ˋ++jjkˋJ*::kKJ**kK j*k +* kj*++*Jjk + ++J +j + + +kKK +j ++k j +j+jj+ +*++j* k*: + kJJj++j+k+*+ +j* KJ +kKk*+j+k + +*+********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_german/cause_80_loop.isdn b/tones_german/cause_80_loop.isdn new file mode 100644 index 0000000..a6b2bd6 --- /dev/null +++ b/tones_german/cause_80_loop.isdn @@ -0,0 +1,265 @@ +*d}EьDH$]arO//?+.^^^r{z/Skbc/"z +*>'O""?j.  j{rN+Z#{~3KBʺB+#.r;{ +s*^J"/#RSJj{;sJKJb+{sc"rKʎ^vVHHrGWIi)i7wiWcKoSVL@0 @؞aAQсaa3vhVz'77)WWW)i ii ؞p\,0X0g9aq{V6踈^RZw7W))9 9Y!A)0p\P<0g)!1-!!As.oCH6V(GWwwGWiחIi9|0< aq!AI:/Hh(6+#Cwo'w?_?Gw7IɉIyɹR Vά|̀l@GaY1ёq)6h(^fk?ǟ_7g7)i)W I iii l`Ll@HGiyq11Y{zN&+‚ÿ*o3_'gg_'_SϳFVFVhVH8Ȉ +ÿi 9yy7SڞVVv +#o_Gw)G_?Jξ^V(hH8HHV6fRSG)WiI99I i)G'/{jB6V((~77Ww/[jr憆FV(Vhh(vfRkSg7)) i)7G#+J^v6Ɔ&^N.Z+{3?ggg'''o# ++RR.^~&F&n2z/'GG7go3[jJ2nN^^&jC3/SS3ã*;*:2.Rn~&NN~N.B7WgRbnnR"Zrb{{;nJf~F^&&&n2bSO'G?o?o{oJc;+[oo oc{;??7.VH` X(zəY9IWGǟV(((R7W)))WWWw7'w8ɀp@Аxh!1a)J2.HxHhhhZw)IIɉWח))ȈIH`,PX8x WYaAqAAAI g +fHh8XHHF^ g 9I )77W_xP0,@6ayI)O;(HH8hfR?'iI9IIIWGGw`WV P08`_#!Y1AA!II7*{+((8H(&O 9IiWGg_?cp0P@C_aa11i [.vVHhF^S_) ) iiWwg_Ϗ/#ʛcHp@7GWy!aaYyg>~6v66~N/S#O''r'czZc +^NfF(hVV~2g)iy韇o#cr. nJ +;ZcsΞ/+b.˿O[rڂ.^^S'ZnFRn;>&?c&g_>o^#k^Kv +b~s7.rKsnCs//ss3zKo'{o/~(f^FG7# #ofJvbf_KoSK3_.g&k'#&>jcZzG?ʇBs3#Nfúsכ&2[_/G3S_[sz[S2&Br? +kk.ڋzo__OK["f&&Bf*;++SsC_s'K^jFfKNh*7'>ƖbN^JKOs?coIOʿR&~F+ZN^J2kS'?R.fk/ + +o>r_cz3[3LJs/g+s3BR?>#~†SCGgLJ랣SN? 3^o7FWǟR+Of&_ocrۃfjb3/'*ff2'NRc37s +F"2w# +~.F."6SO33^v~c~>#+ +s'2.ROrrs[s.nNzSbC +: +;BzS;JJscBcC>+#srRB;*"c +z/S[ +[r2J"2rB#S22z:"BN.C/sjbJCSoc3CójoOcJc+b22o_s>6@@`8(nR.ziII ii y9ii)gg7gs_׉ @ rڋC3 +Ks/O_g'o/SۏOO'7`Xx`&⣛W7))wG7G'o3{ʲnnRnβCs_ooSCo/S/OSc[{SOHHh(hv^^nBϟg7GwחGǷg'oÛ{.Rr.ΎnnrZ" +33c3O//?ss +N&fff&bKS_gggg_Ϗ/[;ZrrnrR2k[[3oK{ +zڢz*ZZzZBRRn..NNR K{csoO_'O3J":bZrrb²RbB*+kk*:j*z2RnbZJj+#C3s3SSS/So/oocKK; +jjrBBRr"R.nbB*J + +ZZJ +{C/3csS3sC[3#{J: ⎂ʚJj2"R:*K; ;*Z22nN>n..bڊjS3S?'?g''gg?o/3K3˛#kk +k{+:#{##33/oO_7?Hx x8(f梣s'ggg__ﺲ2r>2j +{/?Owi9Y!Pp@< R9ayi7'ǟ&RbG7iy99ioZֈȈFn2c')W׷7 I9yaQmLdP `[[gwRh Ya!iÎXX NW)[g7aam <$̐hGniAY/zf&HJS Y*h8h膚COgwO[_G y9!ФЀ |@)(w^X8!ay) *&(n2s_cg)IIy9!̜L<,XN&v~)yYA9 NfhB"&sC'[sw)9!y99@` <ƎHb 7 i9 B.(H~fo77 OG_[s))y9y9I lW~_/wIaYɹ9w3VFff*S۳3/C_g7Wii iFX@8('׉ yyy!!9 *.~6fV&/GwiɹIy!^ZX@pp0p@^ZWII!Y! iW_S{.^&ffnzۿgWWiIɹyٷ.R@ppfϗIYY!!Y9'#*^&27)IIyygR.p@ȆI!Y!!IiW_ RNξrBJ#Og7W)iɹy.X`p0p@`xJ !!!YyiScNN2;_) y9fH 0Pp@`_WI!Y!a!YIiWO{ +.n;wW) in^ږX@p00Ь0`W YYa!I IwGO&NNn '_G)i9!1&X l@0 hG7wWWy 7˲rڳoW9ɹII9فah@ L @pxžSI')iII)[s +.>~nB>_WٙI9IIIy!i0Ѐ0Ll0p,@hNB)YGwoII )Zn..N:S_iYy9 IyaVP0 <аX:kNYiWo?))))OO[jR*g鉹yiIaop`plL0@Jra 9)777?'?/jZjNOǗwI9ɉ))Wi9ُ@, ,0xYyi)w營s?/sb?'W)鉉iW)7)i( 0l@&9!YY!!i igj:33Oϛ#sG'W7g'?gg2X0@ >' 99Yٹ9I )w CãkڎNr.j#C?_gg'Sˋr^6VhhVvF>G I999y9I WS*R&fFF&^R:#/O_gg_??/zZBn>~^ffff&^^." + C?w'O3ˋrNΎn +˻#cCcsCˋjBBB2rBںzBr"*:"[Kk;3oOooSCCC ʊ +bzz:zZz:z:j+k* *j +j::z: +kCۃ#c3Cc;ˋk+:*J::z +jJZZz:JzJkKKK{{K {K;ˋ;kj+ ˚**k::*Z: +*+{{K { j*j::JJzz + +*kk{;Kc#KzbJjZz:zںzj*; *{KK;;* +zZZbJZ{h._'#O' +rb.NvK3_rjfڿ3rSNSNK3r_~RgvGf)bډ(iG)nsʎ.Rh';g'CO;^ f/./Z*fSk& + +:/''. _f#*k +czj3R/ +S'Rkb‚+:RK:c.# +:۲Jrj+Jkjb/j*zj3 J+Kkk;+#ˊʊ+cz["* +z22+bkb:ʚ*BR2N~&N~KO'gGgGGwG7G7w_Ƿ)I,p 0n))A'kʇG37_'wS[SJWI9 i!aᰬp0L|p( Iɷ!.s3ffHCr IY 9GrhX8(I 99ىIiiفq@`L<|lVxٙ!.H&&Ȉ _ W!I9O^6HJW7_yI-l쬬 +1iKx88_!A!V>c WG{Vv6vf)WiI)goS2s# fbWGGO&nr79iWkG)IYYa8L,l,@هqg8@p_Y9 xVFi9!y .H(׉)GCNV~'w_o&F&&2'Sn~fc_G?/+g#k.:j2j&(V +7W7OsogWi'SO{#'W)W__'S8 ``zkow7SVvV/鉹IW/b&{G7GF^'_3Z.>[o?r>~NΖ3 Jn;OG??Orr*/ .^v(hv6f:K s/#?ooϿOO?_gwWiI9)c,l 1o0Ѐ~YA!)V("WyW)G~(h([ +CRR>:燇)W_Sg_ K giaP@Ь0R_ƀOAbvv?w) +&'?n/777iII,Lȱq@PzqYgf'i78`Z)OW yY! I)!a\,h_ɁiW9wof(J?Ƿ_xWIsGW7[R))׉Yٹ  9Y`Pv/"Hȏ)iaiW)NoSr>룾V(V6>G7gW)W'0,`0Vh(VR R7)i )iWK.&V6&2'W)) iiiIIɂHHPЬph(wWaaaa!W?&vhHH8Vv۟GIyy9ɹ9iiɉNvP,,,pVfAI9RH VnS鉹ɹ9Ii ii`xl,P,,ֶCW91A闟"vHH VfKϷ 9 ɉ g@H8pl ll0x(IAAq11AayIi'^Hx` Xv6oiyٙI iI@ ,l ,,ll,`־g 1qqyIiWh8X Xx(6^i9II i 9h@@l ,l(7YA11qqA973N F&{giI9!ayyI Iy_L,l,ֶ)9a1qq1qAa ^vh k) a!ٙyY!aq1< 쌼|fV^j#ǟ7_[/owyI )) 9YL L,ZJf2c[yyY!aaWWϣR.Κ>v#ogGccS7W)iWwW)i7B, hFbKb/LJ'WI yyW?sn&{O{s*S_Gwo[g;Û8H8F.JO7WWW)IwW㣋.r>#rk/s_'z^jG~ZKkRn&Nk^^BjK?:/b{:#3Jg"BZV;f fNR./&f&22cˋJOZ3RJgV(?ǎ/c2';:''BvosHhRJ>&.Kn7Cf6^{*s{N:";On{k[Ǘ3OwgNr_jBg>>r;3s_(&~7??3惃C6 +f"f&3_矛Ozk.~S .˳~{ +>ROj/g_Cr^6ʲsf6&/j&JrS^j~K_?K([?N{sk7g'^f&Sgʋ&&*Hs+vnow;62[.Cb oo(/).z3*NcW~z;F?C#>~^f2Z's/ +?ϳ⎇Z_&sJ2&[*^^#bj.~"bn3>[brR>2O*z{./'_sǷOoo?/ "66V.2Zj[k{3#S#s/[+s{+ +jJ:kBz +jJ ;j{+*kJ +j:b*v;I)Gg[Z{ .rN +hHfV&V[/; s*?S3R.>F&^>£W)WW'*WIhXXVrr'W)z3rkrZ_S_'"J*+/;SO;jbRR껋#/S[jJBBb::Jz ˻('ח_#Ccn66f >swg3&{s/wZ2(F{'WǷ)GW yp _7i)V(F(hfW 9W.bBvrw7g&N~6JK."zn +o'G__gsc8XX#rJʺkWW))WS +SNf^fJ3giiiiI1alP o9gpVho!aA!fh&g Szh`hnigIy9!aYll,YW7WGn@xֈVJɑQaAy'kV6:rZ(([3z_WGWyAal̼' g)6V((#YQYAq1a&h;N_zg)GaaaY!\ |VH +)v~cJ2Fc!qYYAq)k^6Vx237_CG W9!yɹY ̐ /c3)W')ayaaI)H(^F&Z' Iy!YٙY!!a l l,`泷Y!qA11!y O~F8F2COiY!!!Y!YYa)VPľl`!!a111AaaY9i k(xC9YYYY!!Y!ayRx0p l lvY1AA!y 3NvHHhƞ 7)Y!!!all,X>/ !AA11aY9o +&Hh(6+GəYY!aay쌌l,0(&oə!A111AaY9b&Vhh6~GɹyYaaaA(`llll~၁Aq1AyɷhVHȸvr+' 9!aaAiv`0 llllPa111Aaa gVHh((FnGIYYaNX@ll,0vfiI!aaAA1aaY7*RVȈhvv I!a?fn(pl,l,,,p@FaaA1A!ٙ*f(h6f>+w 9aA~H`p,l,P@8Z9aaaAY*nff((^N_IyY!aX,쬬0R7Waaaaa!9'c^v666:o' yY!!aN^ `,,PP𰀈&k9aa! G^6F&^rK9I Ia၁ЬlLLl؀X"g{ ၁a!!:^fVvzg7iaYyA1L,l쐀h(fOG7YaY9Gؘ(&{KkWɹ၁aY1̜L,((6>?7)iy1aS62?OO/9Yaa!yaـ,А^v#7IIY11Y(6rzJjS'G 9Y!yIɹYH,L| ,p0`n?3.+YYٙAy8>{gY!aYyy!qH|< 0_2r?yaa!YY!J(( ?/G!Y99yYa1HLi 9!a&fH`llll,pXwiYaa!9חG'kR^F^WiyYaaA^Plll0FWiayIWwǟcξ^&R#') !ayX0,llllp@x&CwI!a9ɉ)w'S.^~.⛿w) Ya1AnxXllv_WiaAṉ)W7?n>NZ_)I!aAAg>VXlllh6_WiaaA! WWWGO#B^~.;wiə!A1~6X`,llll0h)ia7w/f&F^sYAa:RNh @,l,pf !AA!Gw'JFfo 9!ai8 `,llа)aAIww+jFvf~oy!aAqR6llKi)IyaY)/F^NnK?A1YAэxld$,2[xXQq!i) H@@`hy7[iaY--f d$^&gizIIɹIɹi9A8\<g^^r `ȇ!ywi rrN^ig;^*) IIIA^R_*O?__)9Yaaq-q \lX rajn(&gi_/&+/Oz'i)W)q,h`H`YWɗn'ow_Ɩ>csSW)wwOgj(xVns>~*)W)) ,x@@Na!Dz'&`X(S3aI#ZNvg?Fv/'S['"ˣ:s3:.r2Z/cZ*{ꋣ3[ { +:"Bj33[j*ꣃK˛c#[3cj*jʊ*kh(泛/i{ºrN2n&f^n/3SgGG'hFF?oC:nBRNڏS'C+ +.&^ +KJ3/?GǷ?N&Hv~&B Soc +R^&~zjC_Ƿg"b2{cc[KrBnrzk#C{c +>^jB;J[SC''?_O_.^&(hƆko3/scJRbb{Og_{+bn +Kbf>7wg__F6VV.joS;zjJ2:*'G_?SۺbRrfZN:{o_wwW)(ȘX x(^O'J.‚GG7wLJ/*N~fN.2B2:C˿_?7wW)׷7&ȸX``8^{_'Z3G'㊎^^&6f*_Owg_GG77Gww)i^@ ,`X7iɹI7.NJ) W?KvH8((SGG_goOS/;Kfv8` Xxv +)i i7_^[ {'O/ggoo_SOG?'/s2*"SJVh8X8Hrr._7 G/jgs?'R+_#oS&6^bFbS?~n(#Κ..rfnoOr?g:{WG'w*[F'Z6{2)ocg2F'j/>.!o>ONwW38?.jf* +OkgBRsS~)n{ +Jj)~F!nv+/Ɗ_I??'f~FǾ;rhǟ_6No/*[{χ?zs{>67_FG;or +.[KO_2#*C +C+;[2B2*+ +c;j[ Bs3#c#RR{/;3C2" ˊj*[+ˋK ++{*+*K#+kj"{jj: +2.jJjʋJ*+CK J* ++z Kkښ*j[*:+k:kb*{˻+ ʊK *K{˛**k* +{K껺;ˊ{kzJʊJj;JJJ#*b+zZ**{ #z*j3z2K;:jrz'/ +kk/ssn+z3/o. +˳_#Êr +sRcb* +*j[ jrNj2o{:.ZZZz˻+zzzB+K;k{+ +K + +; K kjj**kk+k*k jj* +*+k+*kjk +j+Kj+jjkk***** +*+jjjj*+jj +jj+*+* k*뻋+ +kk*j +jjjj****j**j++++*+++k**k+kkk+***+j*+* +***k*++**j+k*j++*+***k++k +**j**++*+*+*++*++**j*+k++***+*+k*+*k++k+++*+**++**+**j+**+***++++++kk+kk++++k*+++***jj*jj*j*j*j**++*+++*+kk+*+k***+***+kh~ozf&nr +So;rKK+ [x()_SWW{N +'3CCnzz Z2NrbcZRzj[c+O22*ZzZ[R* nBs +j +JBK*/~_Sۊ snBbKj"cJ+#*'O S˖"sK^bO&&2)"*3jrO.;C6?2K7&_.ǏKCSk/_RsnNz N.r+Kk.*> &fRs+gwKRg/>2^z~^Znnzrf)jjJZ^ +'G/B?CK:ZB.:bB/[ָX ȾnZΎ((Wyiiy yiw7i)))w/jsO/nΞ:Zz6llVhS/9i i?g7_:^3{RV7@`XhF'w7W)W wh&aW GIyi_.7Wgo:j^Rfj_м|L8>RF(xV))iIiWWW&^Y)/3?WI' +b; Ϸw y+\lxhS?n`HJw)i)I)GWi i7WW7CVw!ik/c.c7!I3fgחw_7aLhjz H/W [ ɉGg/3O/*`Xw!aɁ WiWi9!J \(ßj 0hgGyKn''WGO3Jz_'Zr*ywKGWww)!ab$<VWy@@H2 'ف9CZ/g.+)g3_#HR i7gOi闉!!@|pX(3`fH!C))c'Swo~: +Fh6 +o?__GǏ2siW_wWiy<|x0И'a#8o`(GIYzs7_:WovV[gc3_g'i)Ww)II9@`lPVIWJg(_ﳉ!Wiף>{7b2rS7BK_I'lj')i!LlHWgF3 F +_YaIw) z_)dzbVFzJ>'/?OWii))iw i ln~8n"fGY! YIGGC_&RF#SZ'WWW )) I9yIpLx'xV.R&vYW9iG?>(&39 iiiɹ9Y,pl@`(/8b2WwaaW9)?_ (~vZB' 9 ) i)I9``l``XV/{) ))yI __vfFJK sO/O)iiW)I >x `` X8h.:7 9y9II)7sBn.^nGGii 9V 0@@@ Ȇ.'9!!!!yIW_/c"F6NRs'www) 9B + @p@ xV7)yY!!ٙ {6F666& +)) I9YYG.k `@@000XrWy!aYy)gC*FF66F^R:g)I99^& @P0Xv*iYYa!a!yy)7'#Z^v6f.[O_)ɹyYZK P` XhrWiYYaWg.r6V((Fv>27 I9!aa3FRXP@,p N׉ !!aaayw~VVV6+o) yyYa&3`@,`0xXko7ia!;&NR(VNr.3' ?WW)IYY!qHrbY!WW)HH( r7 ig['陙 !9&ܼppc(xRhoiW!1AgG&[W*J'OyII!|ll|pZh7((OƈFYW 1i_wHVhf_wwk'ǷwiIIyIyᱶLJiRH&h2 9)YhX^8#3#7y!yIaq<pL _V2ʸsHfW!y91aWw3^Hg?[)O+7 yy9y!YYiLL@`OS*aCHn(iI1GhζCJBGC'w9yaa!QP<ТaVxVXxy1!wg'Fhn*~NJZGi!!ya1lLL)Y&&i1AGo. GkZrnOI!AZl@,(GY&(``IiW!!)7H6//bz?go+w )YY0 PlsyhX7!鷗h.&;"3 FK3kW))iwgCsv 8h//?s ZjO_W)WW׷_ +rvs/Ͽ'gwwg ^VȈ x(/Sk_go*[C ÏO'G99 9!,@,PR2i +2Hv7_)ىO2ۊ7gC&&6^K?營KOssˊknn.n>~&&^~r2"k*{/O_'g_'GWw)I0xАVi^V.(^'wWw)gg>n:J://" +.F6Kg'_O?o/ϣsS +z*Ύ.Xظosg "['w7W)'w)i9yW0hf)־6&Sgg'I_'O*ˣ?S+K.Nn2R +3sj늎Ύ^{*o/OS{ K{+zbVhVrCZNʛ?g'7GG)9p/)^FhȲ?_W ?_K2r O/{^N..C#o/** ;z +ۣ#c[+ZbR:+Kj**j*k{{;[;+;jJ>+n2Zsj3#;_S k*rnb22"&6f> CogǷGLJSC/O xH`;3*{i_brBfF~_giigOh(S_S#/OG׷7`6bKKRbK )w7.'?.rFNn2sgO_g7ww&X8X^GrRVV;/iiWח'bښB?N(Fn''_scSC777y9HlK6!qc)`(.;^ZF#sz7Wgz68hF_W'c???gCcsBR>>~&&F^^&Ɔf&.kϟG77w7777w7Wiiwl<.)Of_3Ǝw?w/GOF~ZV6N**_7w'G?_oCO?@`Nig w)G{gO'so??s3ۛ#*{ {c#k[ *J +2.BN>>~nr2 +z s?_'_'__ϏOs+ :[KnʢR²nr**;K{{ۣKk;KkK{{sK*3kkkkK* +: j + +Z"J+ Kc+{#{[{;k+; jʺ J*jjJjZ* +*+kk*kj;*;kjkk:*j j+jjj+KjkKK+ *kk *k*jj*kjkk + +jkJjjkj*ˋKk+kK+* +kJ j:Bbr2&NcR2[ZkJ;+jZ"++J +***j*{+B ';jcKSZkCC.^~2*?{zJs::;+#kc۾&#B.cj2JcknSJ_ڞOCf3rsr6"3k~G.3^+rG&_rÚOW2('[׊vO)^g?fjRfKg/fr *O?FVG^hK^wFRsKfFNJ&'Vf  +{ +o+;g>'﻾7SK7&oZzh>:/'wf#['n~w7#{bBK&_R^;2J_>*{_#K +('jgRoBjrO_2{fƚ{^O" +.Gʋ>j.2㏣/~KScSBKn3SZ*s32"jNNjΣ"kR+"z+{*{:SRjJZbsjrC BCzsjo{kû{jknrj+ʊRJ*Zꋃ +J+;z + zbZz +kjjJJ +ʋ* +*Jʺ *jk +k *+jkjk;* K*KK *Kk ++k++J+ ** +j+++ +k *k+ +j + +k+ˊj +ꊋJ+***J+[ +j[ kK+jsJJ kj[ʂ#bsƞjF"W2c{KN"so~? ʾR~b"os{3'/+rcg7 +2/'_SHVa` 8)Ȁ^  2W~S&wW+o6i_n)WRwFjR#_碶k)736~悿) ++2HI2[vȣV?(Ÿn?Z^gJ'n)b*[{&"KG&&g;k +;r/.B.+sOf#_ R;{Br#?CfN_>ʇS# +N 2b*2+OjS3no*þs*N:"["*ʊ"{b +^O"r~k[o[3kC#?Bc C[s/?+/zKSS'''~vX`@H"+Z{[Gi9 99 w7go/Sko# <̐Ph+7)wW)GivWW i3_'׉ Wg_S"G_7'ynpL \, XȂ2v99!AaY!YGx7?wN#?;O׉W9I9|L(W#f(YaAAayy G7'KHNGZ{{)YɹIWI 9y'< ܜx'&79HȎȞ!YAAyiiGo':Snvcg3_!y 9!W)I Iaq\||Hiz8a艁YY1i.Bs*'~88(VG7y WyyX$L@ | @)!(' ぁ9qGoKs&'fh&F__)?W9ٙ ! iY1!|,0Llxj8IwHr;xWyaWSf:zrh8h[~bC7)7WI!Y!I!|xpoX( K~H(7y !)WKff+zVVv>V6CCwwgiWi)׉!)`HH@XHFvfGɉiyy9I_;R^VV^Bz'׉ yyya?NC`@HH3 iYٙ!!Y!9WG3&(hh(VvRJSWiy9!a!Y{> `P@P0pؘ8o7 !!aa!Y!9Iigg{F(hVr׉!a (X0Ppp(!Y!!99׿r^((&.zo' 9yYy&x аppnS')y!a!!Y9I).f((6RK;iɹ yyYY f( 0P0XxhS'9a၁!9 w[&&V(VV~;)iI I9)hH0ppXF[_Giy!a!aa!! i^66F6Fn+)W))))hV `p@x(J_w)!YyI)3:fF^o'GwGLJGw `@0`XVFk yy wGob&^^bz#sg_'/#SCÛ hxXHH~K)ii IIIiGr.r&&&N2 ;3OϏg_*crˊNHVHx(hVj{wWW WWWLJ3#k*J>zfBR_*O;[ۏs;ʚJ.n.Z."VvFVV )7))WwO{+ +.>*Rrnâ;J+n/nξn +J &FVfn&f2C#c_)__gOoKOJ*;bk#JNrS>rnN".2B;V^^R.+*OO7GǷgS_#/gOOc/r +kNj*~2/& ++{¾2k>jC.Jz:(V.>&NSJ_W7GGg''K:B +s :. +b2R.RR;(V(F6>bcW)W)iW'/OCzr.+JBr +Jj Kjc[KzcZ:JzZk+##hhH8(֖GWIII WWOzRRJZj{3sk +"2"B*j8 `X8H(+O9ٙWwOj:.&&NN.Z*#S/O?O ZrRNr~Vx` r yY!!!Y)'r~f6vV&nz?_GǷ7LJ/kZ2N>^x@@ XظV7)IY!!YٙI )gھ6(hh(v6KS'GwWGg''os{:bR^^~N22X؀`Xg׉!!!!yɉGjfV(hvNnJOwWwLJ_3rN~&^>NVX x֞"wiI!!!!!Yٙ9Ig?[fV(hVvFno'_s:rN&^rb~x xv>z!!!iW{&6(h~. /gwחG_aigw/S_.6^"nƶx8x X`H +'!Y!Y)~VV((h薶NC7wg''S# R&fF&>6hhH~{O)9y9 W7'/#fvvv&~nr +''_''_o3˂.nN^&fƆff&^Rrnr>2Nrb{?'wwGg'_ jz2.^&^^^&n.{cS/OO[{ +j +JzZZ +zRr.B..Rb* +*{#C3SSS3os/ss{닋 z.ںn* +z{{˛; ;C3cC{KZ"zzbb"b"" +K*jˋK Kkˋk+ +z+J + +++kkk K;{*kGr3~ZϿ~ +KC*2ۢ2sskK*+*zj"fOKr{3c+#bNkSrc* *{#fKKbJo3*oKbJ: ++o.skrjJ"Bj2jsZjs{JjB +2s[K.+o#.꿾S» {Z3oS.s/Z# ++k/3ZrCNN.zzOOr.jOVN;_ハONk[Rʳoc3 +/*nrc3B~OZK#n[":CKcR3 + +c{{K3z+jzZCb rc*K* +; *[*;ۊZjz#[k~3‹.r# +*zjK["*oRS⊛;B ۋ+ Zk"k{" sjc#ZsNjjz+ +늛Z*{*zCKRjs*SKSBZ+ z+jK j["KkKZ[Z[C [#r#N+Bcz{+:⢳*;+r:jk:+BZ;RO jbckJBSs.rrC#K#K΂{JsRocr2 R[rCB;z;JڻK rrJz J; +rZC: +k:K{JKk +;jʛ[KJ# +[K"K +: zz++jrRVFf.{'g7Ww7G營o/S*{k +;V@p xh(>'G)9ɉ 's/skN2&.*?'W翟/OGW? ,pP0X8~o3_ٹy!i[?'LJ?_CV"R?s'gi)W i'gwwCPx^ ꇙ9!aٹ 3s2{#_''翏/fRxFVONo)iiyIiW ))H00` VKy999_2N₾R#ks_?O33krB^z6&2ns3)iWwiGsf&xhf{))ii)G3BⲲʊ#3㣛JJ^*>.;b 7WiiWWx8`X XvVz_'ɹI9)?[~.BrR+[:K{C K2bʢb:*j;[[rRnRRZ/ǷחwGG+nFȸ(V~S_WWWWWwg3 +ZrRnRnRRBrb::Znڎr2"[Og7WWW)WWWKfxXvni iiW'_S*:N^NNBrzJz ++K +{ ;k2rZ.*[/ggG?S6vhȈhV+'G7WWW7's;"2.nN...BBښJkkb>""sog__'_;NFhFƾnχ)WWWWG7_Oo3*Zb.N~>^~~Nnn.Zb2kk+ +SO__gG_??ϢF6F((HȸHhFƎ2'W) iiWSB^&^ff&^^[nnK*zK*K/so'g'/ϳC;zV6(hH8x8hf27wII99 iW7'o[b^f~ZJs +"k +ۚ/sO__C#z JJ΂(֖fR +WiɹIII WOZrR>~~~Nn>nN22ʚ[[Ogg'_?s#;S;C/ +F6x` ^wiYYIiׇ{:n^&^^>R+s2_vڶ:f*S_7Ggso ;+/o_'gxp0p 6WAaٹ)':N6&n;o_7wG'S+Bfx(x8K' i/3gWw+؀8l,ph&YY119[~h^*iIIi7Chh~2;/R7zʷןS) g))J_''W IGpL^w a&9a!YI&6h8VN777?&FȰ V(>i9!iI s;cg7_WI9y9ih, || H;1qAa)28W!!Iw(HH&)i_Nh(&;~*?OkC/G)Wo__'7'Ќ,pHaɟ2FHI)gZvwvVVfB(^&32si77gg?g?GLJ ^ ,0yaYh((.' YY!Y9Sn&F(~77_kf֖R*/cۿ_?J_7ggg?os_G72`,,piYY!a!9GFVIr6r+O's bƆFSSW3cC_G_?#/j"BBn2.&h8H(~3o'G7w7g'?OSCCc[zZ2ZZzJJ + +j*˛ã{{;kJJZZ"Zz +j 3sSS3CÃkK;K;jʺb""b²bZb"z::JJ**{[ssS/SSs3cKK k+ k +J:J:ʺʊJj +*jk kk*j+*k ;;;Kk*+j+*jj***+kk++++**j++*+*+*+*+++ ++jꊊ +++*++*j**+j*+k k;K ;**j+jJ**k+jk*jj* +** +++kj*k* +jk +++*K* +* ***+j*kkKj; ++**[#{j+j.jK*#*b{+ڋ +:2螿"j#ʛ&R[zcK"r;KھNkSc[ۊfKO[:Rk*j'Bs#ς_˞C[ZC j+B'#/?[2";sbn2K K»kr: Rkj{;zJ "*;R3s *JCB Jr*JR/jۂڂ+KK[zJsJ b +ڊ[#bK*#k +;+J"J +* +*rkKJk ʢ#jꚃkꚻ +CcKʻ j:kKkK +{zJ*jBsKS"{JzK +kkj:k{z Kj3k*zKkkJ k +[BۚK J:Kj+jzK.[;bc[Z*[joo;{ ;jJ2NN.BJjs: +K{[CK[3o3{{{Z.n˚*;˻j{ +3#c/3 K *JB.2";JKÛ*/;K:z J+ +zJk K ;k[; K;jk+Zzˊ+z +zj*KZkK; Jj{;:j *;*+*k;k+{zzK;{{j+*ˢ +k*JZ JZZ*ʚZrZjj+*k;j#[Ssc#cÛ[[k***:"b":zb6^n2j [__?/sOϏSCCCc#ãzk ss/__cX@`Xvf~2S))g_O?_Gg'gGG+.NΎNN.2b.>&&~ʣSS//oOOOo/SoO?O'gwfxPp8;[SW IRZC_WWwww7oFvF&>.2RƆ^;S'g'/'G)G^ pl p'ii{~*')I9 Wח7g/f(Rc+2V2?7_O//__w̌`iWwi)sn)YYI_"~6V(f.o?JrȈ(ϗII c/'g''gGwÖPĽw7__wח';^~7IYg# +&F*_;r>&^^Vh(r)7/_'__gg/33ogǷG_ ,iIGgorRˇ IWSZ2f&nsJn&fNVv^W9 i3[gg'?CKʋß'쌌,+99)ǏS?_O*!i{j*.~~.;bf~n2F63)W7o+ + o''C +Z*'_SsK8liS'[i99i7o/cjr2:&Nr2rrfNk?G'{[gg'?Ck{SO??o/OSxPH7_Sc[{si9 )wG_*zzkz2~~~r"zΆF.{7#3sO_'g'/cS/{C/oO[ +pp hg3 ++s_IiW'oCCc.>.JJfF'Ƿ#LJ//S/S3C/OOojf@pp@Xg'O..ʏ iG_?os*R>^Nrz* +Fv{_g +#o'g??Oo/3S?_CR`0𰀘VcLJKjZ SWi i)Ww?/C㛋:2rnNnRkc[{kj*:Jzz:: +ksssS/ooooSsÃ[ۻ+zrfvF&NGww7LJ_?s뺂r.>~~~n..rBJ*{3SooOSSS{K+*j +*jJJjJ*kjJJzr~&fƶFFFf~.Bzsg777__Os R~~~&fRrj/o￟____S3s3{*jj +Z2BvfNr:;/gGww77LJ'_OKrn~~>Nnr2"Zj+3s/ooo/3C[;;;; K KK+jZBR~V((V(2_燷77G'oJ2^^&&&Ύ^~.Z2j˻s?o?_'/CscKKk +j*jj:b^6(hh(&b3?'wWWWWwGg3K2>^&&&&^NRRr>J3oCoo/s33c3óCC[cc#*.V(vf./g7)))))wCzN~^^~>N.2:[*s#S/o/oϏoSSs333{{{;kk +R(((((FFRbj{gGGLJ/kZ⎞2BnnN^>>nNZJ/OO?Oo3 **:ZbbB222BZ"2RN~>~~ξn2 +KoO__'g'_/*Zr2rRr2B"ZJ*K{ۃc#[[ۋj +JZ"Z‚zR2ξ>>nΎrRrzJ#[oO?_Ss3k +z""b"j**++jj +z2BRnΎnnNNNn"" ++;C3SoOO??Oos3C{{*JJJz + +K{K{jj:Jڢ""brrRNrr.bZz +[#3//oooo/SC#[{;*j*jk+kk*j*ꊊ+: +zZB22r.RΎ..2"ꋻcsSoOS3c ++*JJ + ++*+ˋ k ++ + +J:z"rRn>NNΎrB:j+;{cSoO?OOoSSs3K+ +ڂrr2.BBbbbZ [c#c[;;ˋ*J2nn>^&^~^>.RZ+;#Co__'_'_/sꚲ..ξNnnR2"ʊ[3S/******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_german/cause_81_loop.isdn b/tones_german/cause_81_loop.isdn new file mode 100644 index 0000000..1911bce --- /dev/null +++ b/tones_german/cause_81_loop.isdn @@ -0,0 +1,226 @@ +*d}EьDH$]aJr2r[jckb:R. S: +>Zz[gS?OJr^~˻K j +:;3::S .z3OS/JCzb[*"+3#[Jb +;[/;J:+"B:ó +jc:*:Jk/+J˚k*ꊊZZ +## k**+ +k3 +kۻ*K*:z ++ b""jzbJrbښښzzB"**3SSsoS3C3so??_??_7iɇ`|Lg/wiJF)I)_* sZj;O/Ϗg燗)g)IYH|$|@(f: W H.!!W{vbs2f6H8(2'i)Ko7YYW) 9y!P$lxB)97 鹁A!iS +~6^+On(`G3'iy! ))iiWWi!$\fW &Jnc YI9y)CrNnS'7wi!9I ))i) |wW)iW7'OcN&(V(h8x8HW9YYYٙ)w+r6(((Vv΢3'g7G_ rn6Vh88H(fn[? I9yy9I GS NvVVVRz;s'77G_C.^(hHHHHhV6+/Ǘ)i III W_Bf2&&^^&>"#G_GG_O_#:>^hVȸH6~ +*O)I ii)g_[N^>nr²&J# /'Sg?Wj_~6X H7wi9II9W'O*> +wo7+jHx` X`` ^/)7)! I)/j"rN₻CJgw_w)7)WsG7'W^Xp 0`X(F^iYI7B^^R;2O'wwi'iɉ(R00``F*y!Y!wZ{{o'_')ח _G)Ȉc&` @`X` gyyyw'j So7)7w GWǷi^x0@Hh'gWIaYI?ROOSo)'iG?wgiXX pȖ7_ 9W''3;''w_.O)o)yr;)/+ח9k'28`8'_))9)wW)__g3G+FY7)i +8hxHF>Z_W)g9i_iSWIbC)RWُ)&N~Hhhhr~.g_LJwg'g?oG3OO/fgf;w׷99~3G_^VVv8h8֞2n>KSGGW_I?{Sg s?VȈVxh^.kKO_W7W )g~Rg#w'?' _N:GBH 8*'7w)7o3»w'#[i'/7yiW 8`@@(vrJg ss^g)GW ))I91P hph_فw)W6B(7G WWWG9ɉYLl|\PXy!'RZRH.+:?GY )kYAaA-- $<>'iljgvvHֶJw)I IIO:㟻sjGY1- ||, +2syKF>h(׹:^C;s777iyaaI IYYY9| lg'N)a8FviYɷJ&V77WSg7iIYy 9!YэL<./g YṊx @pp`X(G !!!aaa99)ǿcB~ƶƶ?Wi9yY!G&p0PP@HwiY!!၁9Iigs;rvvF~2j#'wI9yY!IbV pp` VΛ ၁aYI)oz66F&bs'iyyٙY!"f؀P^jaaa!yiG?R~2Js_i yyiRxЬp@`(N#'iYaaaYi7CƖ(hV澲[Gi I999y7B( p02 Ya! [&F(hV>"?iIyyyy99io{&8`0pp00@H6"7YaayK6( 8VfnWWIIiI99Y!(+0P_ i 9!yI)W'J.B&Vv2k?iIٙY,L,@0f! )i)_&h(.2?i9YYYYy!!0Vg,̐L Ь1Iyy3WN:~BVFƖֆR~row7Y!!!YY7L0< ,0C(W )9!_ΟG~ ^>^^j_9!a!!!YaZp l̜,p&+~!Q! aorK7o +&(&&>^zyٙa!!PIhLLl܌,>!)W)a)2WC>n22v&2oi9!!!a`L ,P΋AqagafiRI/?i_shV:i)Iaa!1 x\̸P0.A 'Y)6' +iw[w.6^VϿ99Y!yY!YAv\` p#r'YG[ۖ'g_YI ^Ȉv'_W9Y9y!!9ᱳlV xv8VgII_oIy7_G )WsN&^N2gwW7ɹf@@` 8.OW)YYYyiw7?{.NfFRo_g7W 99Iy7"rv8 @000@h>i9!aaY9iW&v>R_ II*2FHX@0pp@X~/Y!a!!9 )JF6f3_w)I9ٙɏB&X00`x) a!yIWgz.66#7)i I999[&08j'W !a! )+66掲+sW)i IsRX0@` (^ow9yY!9Iiwg/FF^nZ7w)iiiii)S(H`@@`ظ?IyY!!YIiGrN^ff^2777חwhX ` >;W9Ii7ھn& +Jʢ. +o_?2_g)iBH8(` 8xc _W)) )wg +j_'{C7z +".# +NVV(8xȈHHjgii iwǷ'?S3/gg*jG_._OB~'W_*"^f3n(F66VbcS3Gw?o#__o +JOk& k'[ +2S?Z/v*zOv;r:VB6:g&2.R^Ξ'??nIwsZɿ+ +?GW +?fK₣~ HCN6ۆ_S(ۊ~Oiv?'3oOh/iBΟ3>R6GwN)VhW6:3J2'*(?_;fWVV'^)N2kvFW(G ++Wfz^ ƊIhDzwJO/coºcn*#"JɖɎƇR&s*Z_s2#;"J*.+[.S{?۞gfgkR.˛On?/ڻz/>OJZbo Z[Crs2; JBcor#+Kj{Kj;JK JjjKK+* *+;JK*+k{{ KkJ *J* +J z" +*:k * #K{{jˣ +jKjj*:;: +:+**;kkK *[{;ˋ +[j3#*:cJ[ڲ* + :"Jk*Jk* k.BzSڢ?KRJj{/>"gjBnz :{RCB&.b//r:Rb{*b2_{GgfR&~sk> +Z*jjb3[cr~s&+(?R_7gf;s3懺N&3#[#j.R?n;r. +"/6sns2ÛOrs"_'k럿ˎ3J2+o?.;c >R^>.>.~&^^sG'GwG7Ǘ_''3P0@lP0H/i79i'Wwۊ~skǗLJoϟ_O) G 'Gח),P̌GK'_3+n'77Gizk+sgiI)i)Wa?쬐P YWGzN.R_)I );.Ξ27׉I)鉉W !@|l@ȸǿ7Y/>˖V>? YW:↖((hfW)I iWi) 9yAqOlLhxi1/VFIaw~OI iWWIə!aQLܼLhX_11*(jjiYayW>xX(NiiggwiI!!a(lLL3Y'YAFsfH(OW aashxHֆOG))Ww7Gw)WIy!(  Lx~!9I):b ))IIWGF~> ?__ww77W Iy``,X H/gG IWWW7'__Ƿ/:ff^^*cO7)W)iiWWii !!xబll@V)IWosK_7'c憆fr/{?Wi I iiiyaXذP̌`" iiAi)Gs>F.oz??iw'?V(6Cw鉉I9ii Ia, n3)I 9y iWWiyaA X@ ^&fF66Ff&~J3'GG7w7O3;zrrr2Zzz +j+kk;;;k +z"Br.n>^&&rZJ3/_'g_/3c[{ ꊺ:brrRR2b":jJ** k k+zb2nN~NNN.2cs/''gg'S/ﳣ;:zZr.FVS~n"˚{" ++ZZzz22R.2*Bf3_?OcOskr Ⲿ;J2VF3S_#_O"Z&N^ff;ۿ_gw/?G +C'//s:czsf^3*C?h@XZR wYY9ay77o6fVhKˇ7g'GSckco7 Iy, Pp,yAQ1!A!2Vx8V^^Gg7Wׇ#Oks'))) i9Y l<<,@?!!!Q-ɉ/x(W׉ W'[ZnNRK#S7)W)9yWi !lpPl LHvA1A3h(hh )yɹ(6(Vv[WiI)iW AG,,lLv>ױ--q)w>`Vk7AA!)G;xXVnsGi9YY9 )wGg!RrSzێr".2NN.'{kjz +ǟwC"[rfn~>~._s3o/r z./J/_sڣZʞOC'?2.zkJ{#ÛNS*ˎ[JbRs3:›+BZ*#k:"BBk*K/;+/O[3; +:;ks [jR".Bˋ3*R7cOo +j/Ï+;K[c˲k.ZcˢK[njkBb*zkۋ*#;KffbJjnr+#3CC/3Sosj*.^>~&f>>bz{cs3SS##C*zzbJ ++Jz:J*K:jKJz+ +: + +Jz* +zJ***#C3C3//S33#ã;#*z + ++JzZR^v(VV(V.{/'w)iɹyyyy9 )w';j2>n2BfhHHx `XHFi ɹ99yɉ7gﳋR";/'g_{&X`0X8FRWIYYYY9i/r.*۳'_Ƿ77GLJ'?B@000`XH~g)Y!aa!9 i?/zB>rbC/G_?o;v `@8(^!aa!ٙIiW_okbR^&>B:[sO_g'_J2^fffVhhHHhVF^no7Wɹ999 iWw_+"2>>&&NBzK//sSoSs#{꺢2RR~>>n2"zJjCs/sscCcÃ[#ۃ{[#{K;K {k; kk*j:Jz:z:Jʊ*jj *jjj+***k+k ;KckkK*j + +Jz +Jj +jJ*3s ++J3sRbS˲ +Kr3vo?>NO"Z*JsBZk"RJz+; +ZKz*Z"rڻ;"+ +C[+# +˛z+J::kj[+z*[*JB"K3nC +"ʳk* +{++[[cO/k*rsfZBffs_?^N2ÚR# 2bc +s +Kr;/ۿO_&?F.+NjKrzk"roZ2OsN +C:ʃSRS +R/ ~nKnn{SJnr[Nn +o/"/b{kS.KcbrR"z~Jkڂ +[+cj*?[#cꚚ{ۺr:k+:" +z:[ kB^&^FhHHN_'O)iiiWWח7//3/o/B #'wVмؘvJH`~GW'O7yaW)I[iIs_w7KNZ*gO;W'~'G_ +sok:6|l({W')y'G7_ۛ/OBJ/S_O3/?gG2G'sog7w0\8F^z'{x0@xii)!'77s^FfSJ^2s"+wK7)׉IwCg7Gg79\8^?`Ɋg Gg&~RFS>2OocOGI'WW)9Y!`$ 889SRo&_ ggWi?Br(V&BbZ{*SOG7)iIi')7GWIYl@6W r&6AǹGNɉ7/'G/^&F#Sj+;B +WGI)g_w)wg')! $lhΙ'(8FXYY IWnOi +#ΚH2JJwGK:iI77_WWy0$ ОI>fX/I)Ig)'~3"H>ǗZ+sWw)闷Gw׉ | @_78Sc&Hsnف +z''/njKR6v{'_ۊ_iWWGgGGW9pl,OjƉ NVvKS'9IWY)'w +c(v2.V3jz/O_g'W)wGLJ3/O3'G? @(v`֖88V~&~r/'?g׉)))W3J^f^>R2o3Ƿ7)WחW'8``` 8) 9yIyI iin6(ֶ^2Zc_W)WWW))) 68@` X(.77W99Yi#BhhVvfw)WWi)WiiX00XF>kg7WIɉ ).>VNOgG7W)W)w))W)i xPL@N2&I?׉)'gGIiwY 9iS¶FxHȈ(3?GG7GGWWW))iL0Vö&9  w 9G' XhV~;'ǗGGG7Wi)W))))'p0@ p~))9 )7׷IW)_ +8h>?WWWw7777wwW lllo'YYay )wG*~v(V2 +OwWW )))W7g''gx((pX0`V~6W aaYI9w/+B~FFFf2:_7w7''SoSR(XXx``X (7y!!!Y )*.V(v6. g7WWWWwG^(88X8(+O)I9Y!!!!Y9i_2&V(hhh(~Rc_g7wWwGSc;2r興H8Hvj Iyyyɉ)w3~v(VfNBK/gGww?C2.&v(hhhhhVF&+/'7i i)'σJNfF66&n:˳gg___?ﳛZ2>興hhhV6{o'Gw))WGgo*z>~~^&&>Rr2S_'_?S[Kj::bNfVHx8xhFK?iI9Iɉ)'+R.>^rZ+[C3/oO?/ss3+ +K`(JWIyY!9IggKrnrB:+[cs/O'_'矿O3{*jZzB(`xH 0X`oi!aWgjB".":kJ*k*k[ssoO_g_/j2r.rBkXHذ@ Ȗ&g9y9YIiGckKo/s[;33sÏOO3#:zrN>nžhxXHh6 鉉II W'_S'__/2bKs +j2~΂2^^^ΎN.R2{rFFNJ.ggw'LJogׇ'S_'ʎB +f˞nb+Z6f(n*B{FKsj+[.&ZJ>SZ+s?OOOGS)v'.gK2^ro +_B^3ONgk^R 6_NÃc^2&~:2ƺj>;'F).O>Z绾&6z{?RO?f>WCOovkz>f#(^+OSn^+_>~z˗^{)o&NCWwF&Cײroچ *WGGN^?osnf;{ꊆ n* +3CZSG*v_j~v_j[n?ZO:&jkB/ +^/B#3~f~s"2?>2Os^J?oNgoC[oSgJ OrkoK^2 +OR#rNCkR:+GώkK+NBJSχ^& +z[B*/j~&oڎ>zKz"3G&Nrsb +o3kj+c˛rckZo*"z #*b /j.n +Csbúsz j˺K#*k*+*+#jK +K ;zj +::J{;zJ; +* +k ++kj ++jKK *Kjk jjjjK*jK**+k+kj+*kJJ k**k +kj+ +*+ 껋 KKkK +J*j:z +j++;jzJk;닋{ *ˋk+K+ +z: +** +j++k+ +:jJ +**k+ˊ*+: +JʺJj*++ 닻;k+kKk* ++ +J + +* +j++*+ k+kkk kk+ kk+*j*j +*j +:j*j+kꊋj +jk + *kkk+kj+*+ j:kk;+kk; +*:k* + :k *+k#j*[[ Jjjj;*jjk{[""+B#[# j*#[ *J*{ +k +zʺ:jZbz +JJj + +j* + k*+ *Kk*K kk*;K*j+ ;:zzK +:J +:jZ"zzJkK+J + #c# Ks{ssC #C jJ#{*jۻ;ZhXX8&W)ii)Sr+w_3k+j+ [?'7)i(аgWy!!a! w/; &f+'fVv^~"cs))Gg_oS__I!,0, L0X肞7!!f.*/W WWon&vc'W)ii)G__WY@p lLl8h8!iA9n ?2Ii6VF(CW ɉ)GGg''7Wفhܰ<, 9aaGGCO9ij 68hV^&;WWi9iiw燇g )|l0#a1y YVN'W 'iyϚ(H`8~BW iIYIiW'?)ə<0p,0FOyAyY/gwjhBgb)ihVʏ#W) 9i)wg_O_G&膌< ^!9Yyɹ >3Gz^k3oo&F 7 i W7GSsO+[o'`.@,P@h8i)Y!YYy7wGoj/N#oꚎS37'7w)w'_o ++b2Bj;V` ` &?W9yy9W)G__S +JKSZ/z3S3/ooo/[j+.ZnR>>r(6V.rSg7Wws?sC//;?C{oʻ⺚ Kk2.{nzR~^.R~2k" +znBڂ:3o3S_/oos'/S'O?o//jjNR:.J^B2R.>+2R rRo. +rbRczss's__gO'__CS3kzJN ⎲b2ێ{nꎚRKJRBoRB>2 +2RnKr/3ksSOo_O/'?3OS3:ڻo s +zs2϶>nf +z. +;.ۻ⚃J +::.bZr>j2KRn+;c3s?_'Ss3ccss"kR꺎znKJnR{k +: 2ڛk+J +NN>>RJS/_g'_gg''/?+Û +:*r2r2&ºnR+ۊ.czSrn6FkOg'OϏ'?Oc[j +B r+R2brR22hFv; ;W)wgo3C33s[ zk +c+{ +:J*"ZJ*hh3 8HHF(Z_W)iWii_;S+B:Jbb*B; +3s3/S/#k[S``X`Xh IyYIwggs3bZfnzf^>NrKG7GGOO3C/'cXp``H?G!9I _ZSo:*s.~F&v"WWWWg'/oO__ohΰ,@P,VSJ"!9aAyY '3Bbk2"Z*rFFVfƆ~Kw)77_Ϗs[O' PH`fSaGW_*bCnr"Ž~^&>~z+3))g'oj"b" &(H؀86㊊G9IyyW)WOO{JzB>~^fƆ^f&NBz'GGg +:rRn.~&&66V66fR3gii)o:.Ξ&憆ff&^bz S?g_'skZR.nn.2.>^fF6f^:gG7WwLJ_?[~^ff&r so?__OoSC{k:b2r.R.r2r""bbrfff&^>*'7ww7G_O/;ʢ.ff&s?_/SK:².R.nRrB2r2R^^fff^N;G77ǣsc?cR.^ +Kc/OSsc[Kj:ZBZrV(V((6fn;g׉ 9 W'Osck"f&^&^>.{C3ggggg_/cKK +r"2.BBʋrh(VX88H(:s?7 9yy99)wG3+JJZZ"N^f~N."* O____ssoS[k*>znBr..z;ۛzfvFVHh((6SWii W7g/Ë+*z.n.>r[CcS?/coscc+rk2r~RB2Rk~6f&^&~ۃO77'_//˲ʺRbBZjZJ[s{c2j# +[{[NZN:r +" +"{ꣳR" +r2b.JK*OgooۃSSۋk{RK*b*{."R. #3KOr"~.jnK‚bO+S&[?˺[3SZKbZzzRڻ*3c{{OJs *O"+:ZBR#;~+Ro +2[ۻs.ڊˊZ2Kc*/[3sr3n΢2*Jz2RBC;sC{/3bJj3r"/32"^"*jBjj[2sS:R:>2[;NJk +:[N+3+b[S#C//sj*R~&fN.JzjΛ3C[s/_S SnS~B:N^>Z[^^Jc22C_?OϿk*nN2Jb2~bB.F^k3 _SSR/+2^b;f[>KKOS"_Ks&b^[ osk[ϣooscO3r"2"b2z[>k2Oj2_O+[##B2#s +:+K3j[[/KkC[ +k6&*zfK?{r3z_{ZkJ{znRNnc.NS'{RO_; +#?C;JK;kڢ + Nkr>B/>"bOSs.K*Z:ksZB3Bzc/knRN[Z[[jK{{+*{Rj.n#r3:2s㚚[:[k+S3{{ۻ;c3ksC*z*rR*3kBSkKrBʢRv6F+'7ww7LJg''33ʲʋr>2ZnB{sH x0`X XgaY!!9g_^nroS3?K>^~F薆^^'g)WGg3/3K;'gjXx,аxNG׷1Aa!YSrb&6^R:;cw7_?#2(HH?g)i ii)7g?o[ #sϟWذ pl0@89iAq)_>fBsgwi GS*(踸FnK#)iW7sss?燇ggGG7Pl@ 8VoyaY (r Og ))g{n&VVf'G_7ososO'g7go7G`,lx(69a9YٙiS fcWW) I2&VVBkO_'_OOSsS?_gOooSso_k0pPfW!!9ɹ9 '.Bz +7i iiiWgvvfN3.z2JS'_777sS_g7P@0P&SIYىWIS.~2oʻgIWG^^rRKJJ{S'gOSSoSs/V0@0`Gi w) )O/gW7G*r^>>&2+kK;3ssoSsSScC33[c{z"2nr""΂Zr2rzJK3CO_'_'gg''_?Oo/C[K+J²2R.2r2"J+ [#{{s{˺zzJ:zʺʺʊ*K kKk ;{Kk닋kk+JJzJjz:+*k* +K{ˊJKKkkkKk* +:ꊊJ+*+k#cK k j** + +zb"z"zzJʊ *j+[ {#ˣKK j+ +zjk*ʊ++kj+* *+**k* + ++k++ +jj:jkk kjj:j *j ˻{##[[[2.o/OssKK3;Zrbrn2.rBn"zJ+;k[# Cʺkkz Jzʚkʛ[ /k3[sk{>Bo_/Sj*B>.nj + ;S#bB#;ˊjCc+ZKZ +*bjk{kz ++; Z+{* +*kkkz +J +;[Kc+r:kzR2 +J zJ+:+;kKc cK;K{++++ + +:J +*J+*⢢zJ: +:j+ +z: +kkzj +K;;c뻻[{[# ;[#;;+*kzJjjz +:zJ + +*zj*kj+ + + +JJښbښ:Jʊ;{csS33s/Ss333ۻˋ*j +"zbb22ZZ:: +Jz +b2rrnn": s_'gg''_?o3K*zRnnnNnRRBz* + ++k++"^&>>R S__'''_??/kk{KZbBB2"2:KKKc3s33C;*JZBb:2hHHhV_gGggg_g_'_?O{JnN6~&rK+/CsSooS/33 +jj:z +/2HX` V^rnb_חG_?_gg_g77Gg32&^NcS ?3??KJ+ +sC[[8@@@@@sg7W_gg?_GwW7S:rnF~&n3+#C3O_''Oj +j +{ˢ{[k&(0@`hrG)3') w nrRBbbVo s2/W?BO +k2k#CsX,@@`h.wG__O*KgGiI iWJKJKB2>NVOkoS7osK[ ;+J++ ++;CCVXx&w'CJSw)9 WW'3Kzr(F^2{3Koc3?'O?__o*zk3*.Rc2;/8pа` ؆ ˷iiG7g__o{۲r.~.2N(8F#7;Ǘo/:#c*#3kb#ãsoxP`&/_NN9ɉ׷gg'/kK nRRRbzRGo_wGsڃo;:{3oO{& `6÷ni9 '__ϿSR.nnn".b.nBhc#_/R#oχgOo;j3cso{k sc{`@p`6?&? ɉWgϟ'''?/B.RrR2rn6jK ogS*S?_oS3sckZ +;#ۛsosC؀0cC.7i i7g__?s +"2.n.nrrbZb[/Os:*oOOOsCsÃ;K* #; :X`xo?z#?_WWO/*ZbBRRnnRr2BZzj[*:{#[ۻ; k +*j***k {{k {JBrR^^rKso''___S;JZ"2rR.Rr22":+k;{có33c{; + + +Jz:J:Jʊjj**k;;K{k"R&f&^>.o?_'gg'_?oC jZ.nnn.2bZz:* ;;{KK + + +:::2R~>>nr+;cSoO_''_/C#;꺚b2R.Rr2Z* 3s3ss3CÃۻkj:zZBrr2"BrfF6vvvf2˳'Ƿ7wwG矿kBRff~~ + [3/Ͽ?OS3cۛ{;*::""Zz:Jj+ ;[RV((VfbꃏG7WWWW7Gg3KBn^^^^~NN>kS_//_g_c/jrBB22k R^V((h(&N.GWW)WWWח7Go rnN^^&^~Ύn.kooSo_S_O/Ss K [ +zbK[VVNZGw)))))WW3jB.^&^^^~N.^JBcO/sϟ/?os3{ ;K: +*{~V(֖6F6~Nr˳7WWW7g3;.N>^^~>RR2ڢ +j{c33SSoS//SS3###ۛ{{kk***+*;*>ƶ6^*O'g7wwGgo +2R~>NnRB+[CCss3;ZbbbZZʲB+KZ{3#3s3###c#;K*kj:Z"b"‚bBBBbbZZ:jK;;CCsSSSSss3c;kj +J:z"""""bZZ"ZZZzzzz::::J +j+KۃcCs33sss3CCc[;j +:ڢbbb""ZZښJ +j++kkˋKKKK;;{;{;K K kkkk닋 kK ˋkk*j + + +ʺJJʺ:::J: + + +j +**++*+kkk KK K +*++jjj**+**k*+++*++****+jjjjjj*+kkkk kkk++++*+jjjjjjjjj***j*++*****j*++*++++++*++**+*****++++*++****+++k*++++++++kk+++*+******jjjjjjjj**++j***+kkkkkk++*j+****jjjj*****+++++++++kkkk+++**+jjj + +j***+*+kk++++*+*+**++++**+***+*++*++***+**+*****+*********j*++**+++**jjjjjj****+******kkk+*++***jjjj****++++++**+kkkkkk+++kk+++********jjjj***++*++*++k+**k++***++++**+jj**+*j**+++++++k+++k+***+***++****jꊊjjj*++++***++++++kkk+k+k++++**+**jjjjjjj*jjj**+**+*+kkk++kk+*+k+**jj****j**++******+kk+kkkk+++*+********jjjjjj***jjj***++++*++*++******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_german/cause_82_loop.isdn b/tones_german/cause_82_loop.isdn new file mode 100644 index 0000000..7dba6df --- /dev/null +++ b/tones_german/cause_82_loop.isdn @@ -0,0 +1,257 @@ +*d}EьDH$]aB/v88J#K+[Sk9ɉ Wg7W) I&ƶ h(R"/Cww_+Z +Ȟ8 86~3'9I999G6ffƎ.?#_W7g??3o'8`V0`@hh與7! 9Wg'f^6&2 +77w_'73__XS@ @xvG3YفAa!9jZh(v&Rϟ7)W ) 7gw@ ,p0 VJaY1AAy W[FHHFʛ7i999ɉW)W)WH)pxl`H;JCYA1 BRx(h8f66g)99 ))i/ wЬ@ll,@AQ1I9gFRh h6N)9ٹ9 i98L@VgAa1Q1i68vVN;c)!yy 7) /?X,̐p,l@_)7y1q!!Y(VvB'w9y))W7_b8zXxPp@hV> iY! )zJ.2b2{zR32JjiOW_SO__^8Xh^'w7))i )i)_gs*c rRnR*k_'o'/*Nrf(6V((Hh((:_)wiwWo/rR2~^Nֶs.z/COgw/_;ʣ +&^VvnRs _w7G +gcKO'SVr?r[BﳃCÞBsgSjv&f>z^FKFN223n~ +OjO3>3WZn>3KSC_f6zs.f~&fR3b)"SS3 +s^N3)Z#K׿'?ofr>>NVvvh6hR[Cj[r+_'GG)'*{Os['?_g W,0SZ3?))iןJf"#*J&_˃)'')9'7WG7 Y,L<`;I W sObF6J77Ws#G׉Iyii9 iq[<|Hg n&(6N+ I鉗/S_/kR+3 9y)i Wax̼̜|*/cɾ6^+f'əY)F.z_g7 W 9)) Iy1Q||#)g!IfXXK'71!əR(㢏/w'77 9 )yy9᱑(||llLL0iy{OiK`יѱ鉿 +o_iwS/) iI!Wiyyq<ܜ L,Yxv'{`i1r8HrW)KϷ'i9y 9 W!!LyW'xxi)YWiH[ +Wj^O) ɹy99I i,ll(SX(3IGi!ifVf.bC/g''7WW iɉ)IY lp VxǷ.V*w '!a9Yi_Jz~n" +o;'g_GWi''w)wWI)h8 0؀`8"S7)9yIIWsZ+n^* 7Wii 9I VF(`p xHvSWiəaaa!ɉgJ2&^n.o7W ɹ99)FXp HF׉Yaa!yII)s R>>>~.b*3GwwWi iIiv`@p0@`XR/GIaa!I"~>{?wW iiI9)Fv8@pp@`8a!9i7'?s*.^^Nr+7GWiI FfF8p0pPXrog)9!a!y7'sZ&ff&r377)iɹ9ff pP@`ƣ_I!aaa!ygcJ.f>nJ#'WiIII99o^F8ppPP0@`xh^/G)9!a!)3&FF^NjgW I999i#~60pPPp0@8iy!a9)gSfFV67)99y!h@p,,p𐀘) !YY99)'K~Nvv#ə99y999!W>P 0`vVVoy7W!Yɉzb&^FK7)9YyYyy@l, ,Ph.!yy!iǗ +.FffS'))Y!!@^ll,` +yG9Y I_ik~f^>;_)YY@*h0L,P H^9w!AY9YiG ' .RVvZ"i9!Y!yyYa)8 L쬬P8jHYYyYyW iOg_NbF&*yYYY!)L0̬V'yW9iG)gs' >f +.nJ3 !!!!!Pg(L̀lPO1i)AYI)O)i?RFΟ>v w y!!yYz`PLX07>1yYA2G!'I)?.6nfGY!!&,|Ppxi)_YW79OGw;II/w?v"6({WiyIWW7i s а0X6FG)9ɹiiWC.~&^~b#_))i))WwgR6V ``ꏗYYY!!Yy9 'Nfv((v&+g) )wx ``ؘHV/G !!!YygN~(((hFs'G)i Ii?fhxX @@H;gYa!ٙI)[r&6VV(((6&r;O_ii IIIIIRVx`@pp0p^:)9y!aaa!9 Sz&V(hV6F&?ɹ99yyy99Bf0Аp &+?)y!!a gfvV(~'w)9yyyWfЬPP xh/G aaigs^vVVֶ&."gi I9yyyy׶hH`PP,P0I!AiOΞFVRg7W ɹ9 V(`p@ Hvϗ9Y!IJ&fF&.rw)iWWWw7#6h ppp0@Xby!aa!IGsʲnN^^rzSgG7w77g_s:8 @`X8hFZOGyY!!IW/ʂr&"+g7?SgOۛCŠ.Rb8X8 Ɔ3g7iɉiW)iWG'k:bJ2F&Zn?ۃCz/&v&hF^rΎ2+__gǷ'W_w'SGWOS3/N{zƾ">rv*v>^~{&6Bs&V/& +Nkn/c +SwN(iaHyCIvV x"^H~hf2WVhWH)^_WhF9R.n9` rYx 6ˆ)w7FrKng72W&JJ#nnorofƏ:~n:YX*IN)WG6>hIwNG"_'R^6gz*&:G&g&_sϖgb^s63W/BNk{?h?W~^OBö&';3{gzzwfW3oJ/"~ϋ{>:"{*S"O{ +3{#+Sˊ +*/*?B2f~b3 +j+bcZJJzʛJ+r3j{+ +K*+JK#J;*:jJ*j**Jj b*J + *+j*+:; *+ Z{*J* jZK[k*K +Jkj+{Jk+" Z+ :j *{:Jkj: J +*z{k:K*kkjk++ + + :+ K** * + +k ++JK+J****kkJK+**{*K+;j** +ʊ++*+ꊊ +jjk*j* {jk+** k + k+*+jJ *jj+j+*+kj+k*+*+ +k+*+ *+;+k*+*** z***+j*jk*jjkj +**j+ + ˻{ KJJ2 ;.6Ϗ:hc#9J_&>z?ƻfFFO^2G&B(s +;#'s;O"NNJBC"bs:ZJjڣCK+j.OCB{os+3r/s3'/'o׿@0XږhkGOswS3j/wWi W)_'G)W!쌬̼ hV{)9/o +[._g7 )Sr+ss')W97WWy ,,l<Vv((ȈhVF>R +s_)I9I )W_#z^憆&rڋK;/_'_gG_/*:r.~^&&f&666F>R:s7))WGg'osk~^&&&ffNR*;/?ϟCsCKjJRN>^fƶ6vvFN C?'wwח7'?oCRξNN.rrbJ*k;{c333c +jJ"rRn~^ff^B*cSg77wwLJCcr.NNnRR2zJ*;#C3s33#;+jzZrRRnN~^^&ff&^~R"*s'gǷGos+N.r+;#3ck++:rr2.nNNnRbʋ۳ssoO???#./_gozJr +ZzzJCk{JsrJjJJ2r.~RJ:JB2r۳/S3S*cB_{?o?[{'{.b3js2+#oJ"k(HH8H(vb#o' i)G_o2N2ڋCsoϿ?sS/3CϏϟO_g7HpА` (aY7"n&&.nZ/_C{jS//OO__Gg_gOo_g(P0,p +?A!iG?^rk{Ggg_3~^sGW))''s'gɆPpp,,lP@OgA11a W;n6V^'WiGS2&66fS7 w77石so_ggGə,l,lVi)I11y/(S)I 7h6C'Wi i)wg'gg7wWiI@lL,ll9!Y!A26FVF+a!yָX8&?ǗiI9IIח733WiiiIف,l,0gA1A9(XH:S)!A1!ix `X.gi I WGg'_giYaA Lܼ,Xqq _XW 998 9ywW)W7_?Ǘw)a`1qG?sfoi9/vX8vNbIIi''G/#{?wIyR@,L@Oa!wO'N×i)w7wN&'c/7g[OOg_/'^8vf +ϷW_'Ƿ7OGW)׷_CSOSS/s?_#c/oc./s:"K/nBھ(hȸn~2zgwW7''CO_SrCKZ{z"3OCCʻbC&B2J[nZnr:R j?[j#[Sg'3ϟ3ۇʇ2n _ CR.BZo(nz oow'b +  +{B[SΊNR'c:s"rb2{3b3CJosj; #**;^R nƞjNR"n"jn{'3s +n: .Sn;/rjkBB.*?zn;jk jbo_?:;Roj#.BNnz^^gkOKZo''occj*VֆfvRf6B"Ϗ3*oO/SkˎkS*S:cSbJۛ"ʺ Z룣+ #ˋ2 +zzJ;CJ2j{Z/j+C*kBc{ *J*{ +{++j{ ;C;Kk# { +{3{ˋk+Z*JB¢"j: +::J;:*;3/C[c[cC#C 늺::J"‚rRnN>&6v6vv6F^N3?7)i ɹI iWwo3{zrn~f^.fV( h6~[_Ǘ鉉 II9II iW7gocjJښzj*:J{K{K;~Vh8X```` xf'w yyy9I i)[2Bk33o/ +2VhȘX````XH(.['iIYYiWw˺br2 [sSsj:.Ύ~V(ȸ8VFˏ)iɹ9999IWw'ϳ jn^^rB;##ۣ +ZbRNN~N.R.R²bZz:kK;{?___'_??oCck"bBZ::J+KKk **+j +jbZZ: +jj* K {K;K;{jj+j +jjjj+j+++KK*++k*+jjjj*jjj**kkk+k++**j +j +j +j+k˻K K; k+*jjjjj*j**+*+jjj +jjjj**++k kk+&+OG[r;:Zj._7R^ogbΞG s +;#"J#"nSC*zc z"Rj2£z + +zJ*JkZjj{bʊۋKzz3o{B[Snn{ B+ZSz+;2n. . +{s{*B +#3CZKR2s:zKKK*C+N۳K^ +k2_ˢ#KJr"K/oB+Jck".Zzk{ #Ëʎ; ;/*KZnB*.>.+"*Kno3c/s{Kjbr +cc+k{{Z+{ .z3jʚ"RC/ +bn+#Z" + +ꊛ[zk +j*b.ºK: +*+*;c +#S z ++##;z: +k2 +.z{S* zb{[k**+C#RbJjZZ*˃# j{3;33;*Jk+;[ۣKʎB +"BzBjR2K cJZ+c ZJo?_OCK_C*#C{Ύ3/:zz{PrR^w'蟉IgIgiGgg_O.nk''.ۃ/⛇܌6綀`FG!Igsg_wO_:: Z"Z+3C_?GGo3''gw8$܌`h(p) !a'IIwG ibsc2kS[_sχ'7iiGccS_77W̄\,hW)萐x*'A!7/gi)? 7 +n2˚j#CO7GG7WiW_'_?ǷiiIld )Vo቗b _w&"&RS_nz??'G)iWg'O7 i0x@!AƖxH'a i3FK/s777w'iɰ$L`ppNa^~8XwiWbORȆKzڳ_?o_wg7_/__' ܼ`X,&Hv) ywrSG'z33~(R*~&zJ{'Ogw77w_sw켰@,fs/w!!ɉI __Kf^&~js#S'?o_gG'ossϟh@x&Ȁ` HHvΞGiiyy WGR>F^N>B{sK/'g'痗7Gg/ox @`X`8(F~)) yY!yٹ)׷N6f^rZ;[SOg7_/ H( HV^iII!I)wǟ>fV~#{+'''777wLJ'''`ȶ0@@ `3 yYy!YiG:^(((֖njjg燇WW))wWWXf0@ `:g痉Y9ٹۚBhVfNs/wWi W IYF,p`kcJi9ɉفaI g*Z(ƾV&fƶ.kzKGG) W) I)W 9g𐘘,X(f F*SWi ayW sNCrV&Bjfjnk.χOo'w)wgig7S?s{v xH6?N/swG97W.:n>h>&N&+[g;s'?_Gg''Co;ʣH h6FJnR/g'iW77gsn^V6& +SsK_wW i9a l(@lH&V&Aؘrs"A9G~WJCo~ff.kkg'Jj{KRrVfV?sG[Z?s)G׷KS"[+^(8x(.)W+~Z_w.f^Ss c'_'7gGi!'lh v~ YWƎ` N !!'ϟ&j2s[z~&&N^&Rj2o_oϏ3??S3#c[*Rbbz;?zFH`XX xRzwO;b7i)?J"C㛋 OG7W)i IyYV,8,p~PV>&_)w!9IW'zn^v&&VJOgWWwG_3ۋr2b"Zk:XH`@(8xf#7)))wG_o/[kښNB+ksCs/3s{kb2RrRΎ2nRzbkb:c+jK +c[SsS/?ssC3c##K##+ + +ʊ +JJښ +jʋKK + + +J+KꚚʛkj{j"{ + ˣK +[; +Jk{ [K:k # j +"+z:*"jjz{ K*[KKK K{+zb2z:ZJS{;* +kz*KcK;;KJ +J»sb+/ 3kbjSS+:::k+{Z#Kr{CjzJˊzʛ"rk2 + 㣺*[.kk2c#{" +r'{" 'R3˛RB"'cRbc +:2 +zgR۳b&n~Oo/b^Vfr/#rJ&:sr+Gc7jjFjV&ko'V6N~cFg&~#oJNosJ2j*rJ'~oS&B*N+k'^Zkor.2CrWB~.*_R.)g/ _φƶ""; Zj{SʾO.¢2sJj; +Z_>j~';{s"s/3On2{r:gs{Ë:32J.rzK [KjKkk +ˊ+*K +;+j++zkʊ+K:+ ** z +*k +{ k+j*J*kkjjjJ+++kk + + +J*ˋ ++ +k+j* +* kkkKjk*j+k+* +**j** +jj닊* + +*j + +j+j+*++j+*+ +j +*+ *k*+j*+*j+++*+kk+*+k+j*jj*+jj***jj**k*++jj*+jj+k *j* *k+jj***jk+jj*k**k**ꊺf3+Cz** +z + 뻺 +j ˋ[*:+J;:sZ: >B_RSnZ*SSckWšONbvknh#CB "S6)6)'g"'sOG"W9i.HKϊg*'ϋ2O&{._ ''7^*& z{r>Rۊ/JSK?C.sz["sn +Os+n:+s/:[+**bc:"+;k3z?> :cSzÊ*R2*K[c2zZ+RJSZ jj3 ûbSC2z" 3#cbrK[* +rCZB#:Zj+j3/{"SZBjj;.//kOjNR +*kRk3  +Rjzb: [{cێR.Kʻ;RÏkbr?oKSC/// +s? #__oRZ[bח,P_# jjf&^3G )I7鉹W)gLJ￿ok2˛k*S'LlPl 9oh^HO)9Y) oo'37_ {2oo33O7W[g_7gGW )8$l,`A FI!yi Ii)fvRsJ{JoGii3y!ܬ3q1/ &q wo i7'[F&c+/GwiiG?WGwiAV<('qa03AaW+2OWIGCR>.r^/[/So_7W)/WGa$ A!Pp'aaizFG_#IWk+چF&SK# +Gw__GWy2"rG2^yfbGc3 N+n?{{/o3?7g_Ww7)9aL2~Ia?06aIκ/O#cZ;+b?kO[ +__C77w׉YAFF2.2+c_GW)W)``ȸ8h&.k_wi)iIɹii_vVVvF6~ڂZg)ii)חWWw)` V@ȸ x6r?wɉIyiŽ>(V((f~nOgWi)WWw)龀ذ0XFr_G9y9y i'S>Fhhhhƶ#C_7Wi )WW)pp`xV&zǗIyYyig_#~V(h(&&^N/WɉiWw)@X`xvv&+oy9ٙIiw&&8hh(.;OgiiI i)Ww7Wh8@0X ؖF;'7iIٙٙ9ɉG3R^興ȈV&~OgGii)WggH`p`hFzGGy9yIɉ׷J(HHhVF&:;S'w)WWi)WW'__Ch8p@ 6f&))YYy9ɉiWLJcRhhFNbj_GWW))WWח?/SCc^88X@@ X ^J7 ɹ!!!99I)WGO憶(h6rʃGW)))WחGO:"b8 ` `8^39!!YY )'/{nVhV(&R#GwחwWGGg_ :rnΎ&8x8x&׉y9 )g'/3{Ύ6666zcO'7'_g{nN..nr.Ș `88H6) I99IWwOsk+Bf^Nn;CO_ggg/ʺ:b22bz[H0xx8B'iIi9G'[;#KB* C/o?ssz+Z2 &Z~Bx( F^/Gg) iii)'_/oos3/o2_#f "2C^2.f6&3.;.&rNfBN+;3__ ogsng'/2#j'n"~/[.&2>Ɵr)bh[Zs6z7+Orb'";2sb_:z.j'/C+?#fOc2o3KŸ;&3j.C&{+&Ǻ6;Vi'n6:?zCcz+>3n*GFOfgjr)6)"F2?ﺊ*Z/JNjVgsfKdžcN> "(׻FN{rwn:/k۳3R)r2R:nk7NgkW&2g>&?oGFgN:֟FÎ.)6s/(6{J+2kdzvC)~K.Jc*ھ(ϗFNRR֏3bccNJFi^Fw&_r2G;G>z2;R2;{/r2gbKBx +o*JrF랇Z^)N/{Bg{'#I(cb3G^N2v^#b3[c>_:SBSWrO:㚞g^ns/R{g2#{2g~kR2>^~n:#*?[S3{+3##[[3J*J*JzB": +*+K*+*j + j:**:zJ++뺛j;k*k j**j + + ++** ++ kKkk+J;k+kKjjj+ +j*++*j + ++K+;jKjj +k*j +k+*+ʊk + ++**j[Z"jJ*:**k;k;*; *;k+kK***: +z:zJ:j +k+ *K{k + +*j+jjk**kk+++** +***j* +j*j*jj +j*j+*++ *k + ˋ*j****+*j**J+ʊ*jjj +k*+*+ *kk k*+* *k*+j*+**+++ +jjjj****k*+k++k*+ +k +k*JHV':.JSWOCŽRR*{[sjz*kZ:j*+k* JJ* k +KJ*;[* +{*J**j*+*ˊ+JjʊJJjjk +* *k+*+ +**j *jk;KKk j+jʚZzJzR+c*+;#{ zz*kk**kj + +JzJJj;{;˻ kjjjj+* ; +J ++; *:k[ + +j::kk:z +kj++kk*k[ *+ k*j+{ + +JJ:k+ʊk*+KJ* kJJ*JjK+j+k [; ;##K* 3;jʋ#{kzڊJJzZz +ZR6&~s'7www77Ggg'??o3+z +KO_GWPpаЬHSO/iYWʾ~# +2'[/[r~nK'wWGwwgOWI ll 6gAA遁!ijn6FbWWׇf?Gw)iWWWWw__)Ix8ؼL

B{+k/##Oo?ϟǿg?OCsk;J"ڲ"kV x HXXlj y9 )Wg_+#JzZJJ3S#/{ +K;kk+:J/ +BRn~^:z2VrF../_W)w__gcËs{ S +#Û *+r:Z[/*2:r2.^kfr[:KB/jk{{z2+Z+*jj;CoSj_'/SϻOO3*+:>j"~Z"&z~zJ+N"ۚzjCgZo:C"K3#;ʳ +oۋ3"{zC/;jb2fc + /bk3*/['~jR +nŸ.Bڣ{#ZgS‚#Ro*RjbZ:2.Z'23s"z[ +Jێk+[" r+ ΋"*rcZ/[rcz +R*ۂ?.  .O* +"jj[K[r+*ڃ3;?*_++:#nO"oR.[σj;C+Z>++N SRb +۲JzJ:Zc.{S rrSNk^;z~cF3J{3Z#ocj*ϊKoJbBB#rr# ?+rK# +kںC +j sk+c {j ;N/ꢻBk2:+o: ;+3;˲#Zb3k[_rJ.ZjÊC3kjk{cC[.KrbJۚc; +Kz. ":KZ+#CJojs*{k#+ K +j2k.3bK{Jz +zzr:ˢ":j"[;cks//3cCC +c++JJ +B:2zZJ"*".&f&f&&&n2r +?gGǗ77g_?C +bnR.2Š KfrhVVV^2ڛ_Gi )ii闷_o{#*Z.N&^&^Nso?/ + +zj:kŽvHxhhN& GG9ɉI9 'K;R^&N&^bb+os?gg'[ڊ"rz:*kN.r^F&vF(N^*?7))W'gsC"b~~NN>>~NnN.:b[S?_'scK:bB2rR.r*k r~&ƶF6~R*sg7w7Gg'?o[*.>FFf~Cogg'_?jjzrRRrrr222N~fFF6֖6FJ#'WW)WחgO3c2.Ξ^&&&&&>2:;CoO?SS;:Rr.22"z{#{*"r2&ffF6&&^nZj{o'gǷLJgg'O/JbbrN>f^>Nrz~;g[/goK3?skr :Bڲrr6h(h^?iI))g3˺Rn^^fnn2Jo?O??//Sc#kj+*BzZ"jJ;C3(hVHxxHhGi9yٙiG_ϛjzJZ"rbRR2nrRrZooO'??[oS22r.BB.N +zcs>ȘxH((ֆOW 99 i)'?s{jkzr>vR~z{KC3?g'Oc? +..r.:#*kSf6&6VֶfNss7wggSS??sK+2z.ꋚ:s* KjB:Kbr* +:J nK{jJ+Z+J.CÚs#S*rbڲ:z;CSo#CS3S/{ˣ[kcc;+ 2bkRbZ"RJb:ۊbz.KۂRʛ>2k*šjºj2S[k:;2"rR2bzJ* + /ʛO:Zz+; bڎz{"N2rRRjjbS2:3Js^2KJ+s#[K +3S:;˃{c.">.JK?Sˣ/s[[{KZZR~r⊃?s7G'c/_S?{.+*"{+ +n+oO/?[J[BRJ.Z#*KZ:{{S_3+ +ڞ&&(vvFfB~NC +k#oCo/SKjS/ʎ*;^cKJ?*J{ RRc룃B:.22 +k+ccrʳ3/SOǗǿOS;CKZnffr掎z22+{S3s _n.*C_3+J{sϛ o#J.n: {+3+::SZz J">r;Kzr/[Rò2nJ~nb23R^&+jnRzK'3/?3{2&N£JN"z3#s˟b {/?['_.#JZkB/3"z3#bSjn3^Z^;?#n["s +O32rj/2"Sc{:"S ;kc+2RBBb&J~rsSFrS"[3Cooc c*B{3j[n^rb#jR*/3[b3b3Z.2Zs{SSj.>O۲oRsJ#:ZÚSsCnk+O#;*sKkRzo.:2'cnBNorڂc.:c*K+*Kڻ[{ڃ3zZzjC;ʢbzC".S^rCj[s22c?{R/SOOZ?R*SRz:b3ڊJbJnnzrΞ^3sS?7w7_Oo[k* +J*B* c @X Xx^Ya!I)/Nn~C+SOs Kꊚ o3S_''?? [óg`xlฆ)iAA s.^(v^N˿WWWh(VNCWWW)g?SCccCSSOGi)0lP XN !Aq9ǿ2V8׹yiw_^hv~oW Woz2Wi))iɉ , Llh&wq^vHظzYY n8`(H63wW Ww7'K*nzS')))W)W +@, ,h#I11!avV)WYY G'O(h &"gi {+w7wG`,pPl9a!ay7s 6vv/_7Wi wOf&(F.k_?'//* +::j c/C/O/SoC{.N>憆6f>.:ʋ;gǷwWWחGg'{zB2&^~^Ύ2r2Zz+jKK##C;jcSK;#[Kj+k*cC#{kˋ뢲b"rBb"z +kj + +{{#;{Kkj *ˋ+Kó{KK*JJ+:k+:jJZ":J* +Jʊ KKKK {+;KK[[k{ K bb"zJJkk*늻k ;*Jʂ.B"rrzz*j k*+c; Jsó *kZJZZbJ*j{[ {+kKkjʊ*Zz*kJZzkKj~ 7OSãb2{ +B+rJ;j+k ++;#jK{kj;:ZZ +zzj+jʢ:jJ+ * +skJ;B*{ zzN&ڲSS zzr.kjZb3jk" [{{ + jzZ[*c/ +ˢjkzr kKK+j3 + [R+JjcC{ +cz;s: :J":Z2 +2z ++j[:K;j:c{JZJjKk:*jK +[**Jzj: ++++K; +k[{{jj+R r:"z+:zjK{˻;*k +jj+:ZZ⺚jB + Kk#[; +*jk +:Z: kK˺ +::*j: *Jj{[*kC#{[{s[ KZJb: +z"Z:z +KKk+KkjKj+j* +:jzBںںZ+* *{{c[#{{KK; ;*:jjj+ں +*b2zb"BBZj:۳s33/oS/OsC3S: +JJjb.rr.22rV(Vvf:g7wWw7w7GG'''o/S#Nn"ZBRRRXXHVŸwWiiW)7wggwG)ׇ'Onn(6Vf_?C/sco_LJ?So +rB:* ÿ8p`HS)iW w'[W WIϋ*ƶ~:JZZ/_i/WWgOg:;_?cSOS[+scoJPЬPXhʟiG?SG i)C*nnb2ˢZkrr.H@[_;"sO' +o3Ss'S*OS_FH@l,АPwGgII9iwSC # +Zž^^ ::[_go?s +S{O疸ll`vi7SO2b.B yIwGoOo/kJb>2fJ&^`B'j B.'/gw7/S{_So/c[:Oo(8`PlP8I"~2b_9yiw__''sK{b.^nR(nksG/+3?7g_?o/[[Cッ/O/3V,`vRi^:ʳ׹yyi?'_矟?;>R.>g3/{S'Oo3k[{;/ C[b0pxh)_riWWwg?O__?jrB"RR&z/g?S[[3;'o3O3 +ãKs s3ۃp@X.[fI9 W_goc.nrΞv>j3CsS/33Sc+{KCK * ó0Xvgb^.ʳII)׷_?_?/CR.Nn2r2^j+ˣ?ϣcC//CSs#crBR2B22j R&Ɔ&f&RZsS_ggGGGG'S2>>NnR2bZ: ++ ;c#[; kk+*j˻ ;+ۛK +k+Jr~&^f^2J 'ggg'_oC2rN>>R2Z #s/ooSs#k* +ZrrRR2"J +k;jBn&ff&>.Z[3_gg_o3[*R~^&^&>RZ+[3/OOOoSc##ۻk+jJzZzʊj* ۣ*>ƶ6V֖fn +#o?_Ƿwww7o .>^^^^^&^~N.rZzk;[S/OϿϏS3Cc[ *+*+j***ۣ&Ɩ(V֖Ɔ^2jc?GWWG'?/#+2>^&^^^^&NΎz +[sO?/scKK k**+jJJJ +JK{n^vvV(vFf.C_g77g.~^^^&f>Nbz+SoO??O/SC#ۛ;ʺbbZ:j+ {K2ff66N.:/?'G77G'3 +2NN>~^&Nnbʊ 3S//Ooã{K+ +zbb"": +j +*k~N^&^&b"˳SSO'ggGLJ'/b2.NNNn.2ں[cC3SSSs#[ˋj:"bBZzzJJ:zZ"B2‚bZzj3SϿ????OϏo/C{kb2r22B22:J: +:z"Zbb²²2Zjj CósSS33sÃc#[{KKKˋ+* +z"Z""z:zzjjJ +* + k+*kk **+ + ++++jKK#[#c******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_german/cause_83_loop.isdn b/tones_german/cause_83_loop.isdn new file mode 100644 index 0000000..66af846 --- /dev/null +++ b/tones_german/cause_83_loop.isdn @@ -0,0 +1,264 @@ +*d}EьDH$]a>&f6vVhhhV^.Ko'7WIɉi)_s^ƶ66F&Nrz'GG'O3[*Rn~~fffƆf^ CoG777GG'?JR~~>rbk?OSscjZZN^N&&(> +#g'G?_'?3oC CknB2r2>r~zn.KCo_ +o;S o2.s2Z.n&Ɩ66fjgw7חgKzKn&~s./'wGWs_o3Js;NhVVHhHHhv(6>7) iW?R>f>&n>BB ;O_'gg''SO2h ؘv&'w7i9yɉ鷇gCff6F&b'燷G7_OWG7 +o X fiiYa!y GgnVֶ&r+?'ח))W77Gg)^Fw@x@p@@`^GIaa SB66hvv&B7ɉiI)׉7 Ø08X,`@,@ `h"Cù!AY I>Vv>/gII)ɇ)w7)H[Hl@ VsA!YaYy'Zf&Fb2&o))w)'WOwW^#8`oGw99!i)7 ;rn +nrKrKK_g3w7/'S_G'C>X88x8~Ί'7)I)9 i7w_nNNN+zr>72_GG_;+>6hhh((R>ZK3G7W )g3fRRr^&Oj_7Kg7/sgϏz[+:S&R&Vv&f6~z+gOw'r'S&f ^"7^_:ScSV#o(VVv6^6* /W7?r[Bڢ+c>~+S3[fGoR.w'F>7z&hFh>vB^N{/S_ z:):w7?)9? Gii?xHx@6^R˟)i )7_#'NrJ*2/'o3CG7WWIWiW)9a1l L|l:i)g!ArW7v +_/#ii z>>zgǷ Ia!YYY!Ya l0IWY2VHfI!a vHx(iW!!a!!Y! LL$|?hJ3AV7!!_xgWi9 Yaэa$L <7·nXXvț 1aa)* Xi)ɇJ7) )I!aamL<,La!綇Y0_vAQ!9ɇb888(Wrbə aYaq'<^&^N.Z/w iIIIyyy ppp@h>7y!!!y9 W?#FVFvr7ɉ99Y!Ybh`0p` i Y!!aaaٹ9i B6vvڛsWi Yy/n8 p0`(NG) aaaY9 ; +fvvֶ>ʃwiiIyyײ`p0pPx*_i!aaYyIO.FV(6fN3g)i y~h`@p0pPPp ^ owəaaaYy9iǿo fVV((f2s9yyG"BNh`@pPp0 F/G!aaa!ɗ/ NvV(hFƒ_IyyI2† 0,Pp {Wy!aAaYi.^6(hVßGi yyy9.ppPp@ 86 +O7!aAAaa W3V(hHFr[)Iyy9+V 0Pp@`h!aAAAAa9?K&v(hHH(vx*)Y!!a!Y!bجPlPP0hV"ɹ!!a9 I7J^FV8hB;gGyy!YY၁x'l,l pPfIaay7)wWOk((xHV(JCiyYa!yYYap ,@(9iAy9g*' cfvV&bo)!aaa!!aYaA9 l,xAG9Yiw9Ri ?_OZfv(HB.RWI၁aa!aXp!Rs'G)9Y!!a J6`ppp0@ Wi9!aa!Ii7?{nf(((fZwIy!aab["(Xp,@h6iI9!aa!YiW"v(&s'wIy!aR2h P,@ f"Waaa!i_s;^6v6f[OWi Iyy!a9rf`pPP,@(i9Y!aa! W[F3i y!YGpPЬP H6_Waa!9wB&ƶ6)i I9V8`p3wi9!aaaI)S:fFJOwWiI i)?fh8 0000`nIY!a!ٹ rZnnr2. [_KiWB88x@`NW)i 9 WWǿ/[;>:j_?7'w_BZbfȸhX8H((n"Z3'7Wi鉉i)gW3SszC6CRK"GcZro&r.'6Nfj(>o_N+Go7 .Oz2 y(G ZJi6S^.3"v&+S^h>gƋ^)&nC:S#?/jSrF!ȇ. zFFWjGχ~N_Rsh&SS6&w;&.hJzRrrSvRBcr+_Or8Ss/s'sowf)N_r/~ +ʚ#wH7Ξ(wf*+S^2 s;C'^G{7f'CSbrkzOosǾ_#3Rc:nC&+CKZjKS.b2r/rójZ[BC[2/nCjRS3n*bBjnk˚*뚻+j;KZ[*{;JcKK + *cB[{kJ+"zK{Jbk+ kj:+*ۋJ{ +kk * {ʋ* j +*j* +*K* +kk+jkk +*k*+*j +***+ :Kk*k*;+ j k++*k*+*jk* ++;˚J jKJ +j+ + + +kk +K++j**k*k*Jˋ +jj* + +j+ +JJj **k*kKj++**j*+** ++j***K +*;k:;KJ;k{++K +KJ*{kjjKjbJR^3G+gƂ3{nb&:?*Z)g?wkJc:+ +:#z&3~B:J^rzJ{zK2_BsC{3#2BRk +Rښ[:sc{B3z{{/Zc";+#j#ccj S[KcZ>v(hHHVvFbZOwii))WW))w7GG?G) I@,@0Pl, `VvW 9g3oi7g#&.n?g77w)igGis_ Wypp,̌ (vI Z^;G7 釟j(^ΞNsw)7)I)WG'w9h0̼@xH'Yi*kn_'IG//F^kKcw))i II7WiWW y!Ќ@p| ,xhy)_Yy3'ᅥf'o)O?r.B#_7gi)חG__'7)`PȘ`0 (ظ>:9 WG*/?gk>BrN2 k ['?)׷G)7'wW)H(X`؈{"^?IiW IGgGwGog3k"^RR*ksW)WG7g'wG0` 'ii 9GO'ûsB>&r[G))G7h(Vx` >Z^g9WIi''G_csC?~?3J[緟_w)W7WW7WY'H@lp +aa99ZJkN/?ow)Nֆb&.ciyy)iWwW,쀀, Hh,)!YwIq19sK'(R^SiI (8J'_IYI!!y77)L0`p H,:!_AW{ x6n!a9 9ظGi!yY!w7)I1L`|(b)!9 yhXrn_ɹn(K'G !Y!ɗ al,|`R9I!AA[h(oIyIIiW^v6>S'7IٙY9 i Iy` 0l ȆIi)aayi)_&((Fff3׉ii'2..*i999YYI9ـ؀@ P0xG)lj1I Or^f^7G??Cz{K/gII i) /8XP,p@`:B2Y!!iG7?kkz +rR*jKcjK[#3S?_gggg'g#2^vV(舸HȈ(^bCo緗)) II )G_s&F66^R[3'w77'J^VhȸȈֶ~rk3gw)W iiWW'?S:fF6vvvf2zK/?G7wLJ_{:R6hh(#/gG)))Wח'o*fFf~Rj;/?'g''/C; B>^fF6vƆ˳Ƿwחw矏K.^^&&~~n+[sS/OO?Oo3sz2.&fFf2?_g'_/Ûkzr.ξ>~K[cs/oo/sC[*zZ"B2....RR2b"JkKóSϏoCÛ *J"BrBBb""z:JZfo+/2."2{jzJj>/#77_JcڢRNr"&{zrrNKb?/3+o2&~~2R&F~J +SS_'?G/ [gO*J +>j +r222ʢ&((HVnc' )gBF C#_GGsK{sSc_V@Pǹ!a W_6fƞ*{/wwG2vk/iiIII GoO!P8 0@ (FC11!)gSnFH(n Iׇ?6.{_)iy9ɉ_gw l̬x!1Y[n֞GiIWvxXؘH3i i!9iw[Ip,lLHYAqqYYyHvv)9YYyw0؈R?i99I1&l0,l'yIW^XPpn)ia9w)Wg;/y! .; ;Z*?_sgS/_CoO?32Z"s;zc{"KBr{s nn."bbK>ssc?'[# +*3ڊr^ZR"&>S[*Z볿r+KB.NJjj;2R{+KOj# ssJ/j.f[s{;#S??# kco[K2nRnΞ^nJ*[S#O+oS3;ssb"#*>.+[Kz{# j2n:#["+c;;Ks/ۃSs/so3Kz.‚&^"NRk+j/S:;{zkJ*2zJz:* 3CCS۳#3 ;* +:"rBZ2bBB+c33[{Kjkz+JzZ"ZbjJzj kj*jJʊJk +j{#cCs33S/3##;cK*zJ"bBrn>~&&&f^2ڋC'G7wWw7GOsc+~N.BZ&ֶVh(VֆN/_W)WWWחg_?/K*k*Zkkc3sSoSS3czF((xx X8(#)i III i)_o+RVfs&:o'wwwscgV8xX`(r;Sw)yyyy9I i)_3jbnξ^ff^~*K۳g'_Ϗ/Cj*Z.V(88x888VfrO III i)SZ~^f&&N. +;#S_3K^&&Ɔff^Nnk/'gG7w77gSCۊRn...nn2zK{k ;c#{* +*:zbb2bz+J*#C#[#{;;k*" +z":j {ccÃ#; ***j +JZz:J + +:ʊjʺʺzz +*닋k˻+ kkKk KK*jkjJʊj++kˋk KK k* + +::::kj*++ KKK **j +jjJ>N[7. kJR;cJ2kK Jk{Kk 3i)2RHvI)~_^3J.3j33K.R2{jr:csZJ+*" +ڎk{ +k +"{c/;:*c + +ObBknr[{[:J+nRjSR.z3"B#zBs +Csz+RO ?#~.ƾSS/_knZ3 ۳3rb;jS[βzB"ck[:rCNbo?O>:/CS_Skk# +zzˋ{*{S/#kڊ..+{J{+Z#J>&j:J/ۋ*;J»sk [z;cCsC+2#k~JoSJ {˚ +[Sc +Z*˺:KJ:"kcKkʂ.bs[jjkZOJz**+*:sK +.rbjKۛ.k+*b +c*j + *+:3O;Ꚛ+r + :*r*ʚzRn.k"Zzrn~>Rr2bSOgG77GǷOsr2J[""ZbR&r*oo(p0vVrkVgg7g)iGiW?'gg_O'K+SsgbOۊʃr&n[?_h@08(n8h拟'GW)G))WǷO`gןf3;BI ';R/Ͽ_gScOg'gXP0 F(H6S?G)W)iW7g/JSۚ&?Cc/7&))Ggw?( fo.h`N)7_i)i7's_Fr:ff?.gi /['Ww7i)WV\LGbx`&GY)7WW'OW_.&֖rFr?"__yGi׉ IV<$0@3YvXVI!S7 gOwiWsx+cFR~J7wk_i9 iiWW)) y$Lp?6vր iW)9)'[wC3v6sCoOGW IG)g7 l,LPvOrx>nhN_Gى !97w { +VFN&Fbc/''GGG7Wx @`X8vROOW 99!Yy )S26v(F&f&~?'G)i) i) iW8Hp@`H6*?)I9!YYa!9I ¾FV(h(vFR:{?_7i i i)Wذp@` x^ YYaa!YII Wg2vhhh(VvfZ{)) WwWW7sHXH@0@00@ 8VKiI!!!!Y )z6hh(Vn)ii)iW)),0`@8 X(Z^&GS?i!Y!y Iyi/ hxr+oG[77W99ii7gLL( ^'Fr!!IYa ) *.*(h(6֖N{ckJ'G7G7i i gg'3??gV ,0l8ȿ_rS)r_!iy)IZR((vV&b+K#χ7wi) WGGGOs'_Bll 'OCwzCYi!YiˋhhvzcSo?_wWi)ii7g3c//_GlllxHx?n:#IYiəY iɉsZ" &"c_/'7)i)))__+CO',``,0 fs +/SG Iy9iW"RvV(6";;[CᅬGwgg'?O?oSϿOȖ `8ֆ;Ƿ Iy!y W_?JR&6H(6&N:ksGWW i)W7'( xH@@0p`8v.C yy!Y!Iiio2>HHh^.ۿG7)iii)wGg_ssÊ 880``XN +W)Iyy!Yyy9 ))"N6(hhv^2[wWii)WGOs `@0`xHFZsw) yy9Y!yWH8hH(VFn.#'wWi iiwGg'SS@@``X8hb_W9Yٙ9)ׇ{^ֈhf2RZ/7׉9y ɹG7O_7)B,`0,p8K3^& +7y7YY y9.چvHVf&g +SW77yiW)ii_G7 A8d$L0v1W>6/gAAIyA ^g/bwn6hkh֚ bǷG9'7i)'gwW79|P`Xy786 y1!OVh') 3釲Vhr>hNOR7r_3{_ Wo7iiwWii ! d|Hi1a`(xaI)f6)i/GCfr(&O)'#s'gO7))OWWg7Wi9!l`8xAs v8+aqi {V('wSwgJv6~+gw)GGgGח7)yI |,@`Aa^v8H!Yy_f^#j?whh־GO_iGgGw7)lL аriyiRN/{VɉiI_fR:>F‚'/?77gg77gSs{k:+Zz~V(V(VVf&nr +{SW))Wg'O/** +~2z {SC/sCs/[;zzZ:." ++kzj+kˊ;KkjJ;KK#[KKC +kC3cۛóc{kk K * j+"JzJ +2*j +*#* +j {Zj*:: +jJ k+ #K+* + +JZ*+ k J+˻ Kjkk +Jz{ˊj +j:JJ*˻*jJ +jk;{*+j*jz ;k*+k*j:j*J* jʊ+*+;; ++ z* K +j++k k*JJ +Jk;+j**k +Jk K* +jj*+* +*+k* +ʊ+jkjJ+*j**+k+***j*jjV'϶2G'/SK;&rJ.?ʲ*[;+{B3{+jc:K~kÊ2RkOr/s#"b2rƊW?jrg?n·'n&Ϟw^"7nNCB3JS[R>'gJc^J#>_2;zr[OVCGrOΞW^)^n2?J:w:io3g.J{[; ʇ*z;3{:rS+c/ _~*&_[b>_{GO'o~"'> s67o^.^/">;SJR>j"jcB&krRB?'jf[ʺ?;ʷ*.{{Rkr~.Rkcc.coC_gKz2ROO.k~Zv{'GF>3no掟&Z'CZ2K&*~r;ώ2:RۢOKRZcr+[;b˳.'o+ /nk.Ί +zSﲿ:J+Zf#r"zZ*bc. +S[CKs;:[ڎsk+>;s*{Ê +#z*JCb KK "{:zs" + +CJ+ + +K +2#{Kj*#Z ;oSj+Sk[o3krBRbbRNN^(V(f>z7))))W))7G?S;oV8`0`XxvJ>oGi9_7 72^((8(>{O?OWWWW lP0`~fSw/')׷ yI 7gOV(H6~wWw) iW)iWWi@`@x6zwgW鹉I ə9 )_ocV(Vh.k3/_iiii)WWWWח(x`0؈^)I99Y!y9 'OkRhHHVv^2'G) IIIIii)W+h(00@`oəy!!YyI wg?F(8Hzk/wiɹ9IIiW(Hh@@0 fgi9!Y!Y9II7'/Z&v8HH8.ˏ'WIɹɉi)WH@А@@`6S7IyyYYٙɉ;RfvHHȈ.J)) iW9wWw7ۘ0`XHF^BOw99yY!Yy9I iGg˲(Vh֖>c)Wi Iiii)G6 X8`@`X 8.{)999!YI i_NȈh(FF^"b_) ig ,`p0.s(F:iI!ᙉG&^r2n66֖6~bk+zgWw)7GiyaI\ya`>Cq 3_7KR">6(^rKs[SGW)wWW)ww)I\$|иWx0 f_3Cw׷'7/ζr>&N;Ï'_gw_gGWWGggǗ)I $oWjF0HyIɗ/N2{7i)gϣ[^Nr;J>&^S'w_//_ggGggO_)əgL\lywr3V` !)gk/7 )[2Rnrn;krfF6ڣ'7ϳ3'GLJ__W7_7iy!aY#fNx )a!yi'?/iWJRB:;Kr(fk'G3c/OgG'g7gsIṬ R66 XۙaI?OckOi#RN cf⢛Goo__OG7?'79Ya|\Hai)_Sn WB.^> +*ۃZRHv[g_K''__7_ply39ISf))'_2~f kjJVSGc"wG''g7g''9YkZi)'v@0X~)7!GN g7w&&^ZC*>>.gg__g_'wwgG7YzFG 6bGiacSS?W' rkZf+2^¢['_'?g''g_gw7g__LJw\hHhs_8'iaɷɗwC__&n>66"+/G_7?7'əfVhh()ii)WO//o8h`0`v>_)Y!YyyyIi)׷'V(>C鉉 )'sc/Hh`@`HVvRi9Y!!a!i)SK>涖(hh֖nGWi iW7?c +Z^v``@` H)!!aYy9iG^V((vf2ow)ii)/C{ZRH8 H(rsI99!YyyWO*R6vh֖v23_gwW))'_//#{ ; 2f8@` >gWY!YW;KKzr..^Fv^.'GwW)WWwOۛ: +ʋ3[ 0,@@8wɉIYY!)7kZ +s RRN^f~2CχחGóc;*+j {o@`@`FSiɹaYYy ׷ۻk#s3#[GGG// Kʊ+RjöXX`x(w)鹙y9i)_O?3#kBnnR.zsoS?/S[+S>Z3n..^&:Jn(ֈ8(vNR*#鉉)G_'Oo/?[?2 +;jS"*?c3:Or>~b&.F2B3^"j^.~sꂲ3SRk'ZO3__#'n3g^+6o_nj>?3Js:s&o)bfJVw>)6ZJnR_Jc _{7[s[+r~/({NKN~Kb7n'~/Offn^>;O_/(/'(cRv7.J Zg>G2f'R^INbN.oR)/oxihiO;^^iR;nNG^>Gzg&V'*^f/Ns{Fsfwh3W^ _^S(csVs)vvƿSΛrF>nN3R/c?_rOO^jsN2C/oO_n^'6'ς&nn"N3:2/' .S[~>C۞zKk[jjr:B*^*c[k ;ZRJ3zc...Z겲*c+k+3[[; [j Cs*z ;"k:2R2B* :j:*j*Jj +z+: kk[;k;k{뻻k+++kJJ*:J*;K++k* ++j*kj*J+++*jʋ +j+ ʊ +** ++ +zkjJjjjJj++;j+ +k;*+Kjk:zjZjʺj** + +J: {+C+Jk:zBJ:J{#{;csc;k*:Zb2.R..rB2B: ++{;{sc **ZzzJ++kk;K;{{{K ˋ+ +j*J +JJJj:*+*k+KkKk +kjk+*ꊊ**j** + + + ++j Kˋ + +* ;JJj++*:ʊj**+k kK K; +k*+Jj +j*Kk +k *j j +j jJ*: +f3/*[+"b"bb"ZZnSg+g*:br2BzkKˋk +*J;kʚ:k k[Kz*J:+:KjKJ‚b +b2:j{sc3 *zʛ +z»Z"*j+K + +J ˚::K"j[+[ k** +jK;z:+ ʚڊ*bZZBʊ +JsSSOooCsãۛ{ {;[[Cso/cf``@xxVw ii2*f^fNO'gϏ/o?__Oo'ipp@`i)iy!ى_?*n~R')G{ʞֶ^_GW))W燇'___gwi9Pl,l (JawiwVF[ 9.N6(f2##))))W7g'燇gg9!!@, ,xH裹qa!F^ΛJR I)WGg+vHF&o) ɉW''g_)yaylLl@XF1Iiwb/i7'/VHVg7WI99I w'Oo_7)!L,PhFIYaaai/_3RJS[/c6VN&S_W 9I )GGgv,(lPPf6H.YiaAigGSRbr[r~ΣgG)WiG_sck/f@@8GI!ᙙ!yiח/ +c{Z;Kr{SZ[so/_g_OoZkB.>r +fvHHxVֈR:Og )I9I )WLJ'? kJJ +:;b"CS32OCS"o&^oB&r +J>cCs_'S'G': +o2noNۣr./SZ{r[[ +: +ξbosoR rKCs*B#K&rbzK# +_*j+wOsÏ˟".s&ofrCN:~g^KJK2oB3^g/jns +J bΎ?{&+c N>zRοKsN/ ㇳ'zš/BڟB3/~s;2/Nc2NccJ3ʣ*J{3:noOO>r.^?:W2j^N+f^׆~j+[ƿrGS'n'S2Ώ./3[6{R#.rn_?3?knoj{c ﲳK~*~Cf?*f/~+~n..~'BSforƏOfz*z*oCs/r'~/>{/NrrK;Nk^c&3FgKn.+k*Jk +.RRzNB&Gn3c*K+‹s.b~ò +kO?&k*.'{ooJrJk^ +..R+kK:crnsoj{+;Bs +nS:*ZOR*s2K>O#ss:~#^ +{R{Bs";Cjc + +J{ZCjJc*ˊ㛺#sʋc*ۢj" +*jbKjz jkZzk2J+" +J"kZ*KJ{k33#3s/Sc㻛{+++k+*rZ:zJ z¢V((~r'W))W)LJg/SooO/cJꂺj+*{[/SOC"@ p`;wIw7!!I ٙ)'?gC/Jbjz^Fv&r??g7'Oo/kb"{{&V @V [FiyaIY i_Ok{n.n^FF."[Owח'c;"22z:f^V6 (xh&)W99)W7_O+~~&^~^>>bڂ:33o_'ggg'/#[:Zb...2JJZ~ƶ6(hV(V&>?)i ii)חz".&憆^Z +3?'Gg_C;"2n..RBzڲ.nΞ&f6v66~n{wW))WWW's"N~^ff^ΎR"#sgg'SrN>~>Nrb ++jzn~&&^^~r C?'gLJ'?S{*".N>&&&&&~Nnzj#o__/s jr2n.2Bj** krR2&~>^/c;3'_g7w'33c~>2⢢ +/3k+z"bZZ + Rf&hh(v^Z{O))W)Wg_3+Jz2.n>&~Nξb:Jj;so__OS#k;CJ JR +.{*S(ؘH8H&G) Ii)w/Sc[ K22rn(2>osO?Gg_'g:+K22 Z.r{#.>h8 8^" I IIWg3s//s3kjJ>Vv^2&^"+;3Cg'/ϻz cZjzBnKێ*o>^6Vh(~/w))WiiwGLJO33{jj +R^&N:*Cscs/K+sjʋRBr2+s.FVFNN~ۣ#Gg'gǟO/cCC*Jrr.n2Rr + +"{SK3SSkʊ* +"b*:: +jKKz*Z*2Rr2RŽnJ+kkS3OϏ#ں.JBbbrc3z[c*{3"b+"Z2ZBR~Zr*# +KC"ZZ;ˋ{; jKjJ+/J +;{+k3#[3Sj+++b:ʢ.brrJ"B KR+J:k3cK3o/rz :Z*+*:Kj"z+{+k.S[Kc#;C3{3cO[ZsS*>^^NrrZb3cO?cs'ss3S[+K^>.bbJ*sS3s_s;Z+bbRRR*bk"  3? RB+JbBZ: z +K./ۏs/#;J"["Ssbk*rBJ.kJNNOk2ok:JBJ /;+C* J o#C;r:{R*#k{srNrz;3{Zo›R[2kz*Gr燳"ڃRB^zJ&[{[sJ +oZCC#oc K[/2 J:>Ϻ.#C +B;:3n.Jro.CrJCkKۣ;"+ۊ2~3nNc3 +.o;OcKJ?"n +.sjn+*jc:SʳO*s3› 2RJ".K"N2#S 3*[šs3+: +Kr2SJ~r/k?z>/szn"KNnڢN^N¾kJ"jSgGLJ_?S/[Z3.j3 +nsBV8x 8&i9IG RR">"ꋂjC'g'??oS+x`0p(&zAaɗw^FO?w_ϳfVhhvrKsiii i)G_KK [3_7)ix l0(WaѱAY3^h8hN>ʷ i I)/J.^H@hFg)) 7G kz{77i9 +`L@p^Gyѭ!);6ȈhȆG7W9YY W'+('c+GiLJ_W3oۃS_wgG))Wh0l찀VI!!1A!I۞(Ɔ?׉I9I3ʎ(hVxs'7)OgW;ogs'ogǟ/?GgW0,8!!a!ǟ3.fRj *R~(VfF؆/>bW)3ϷW?[c{OgogS3_?X`@X8>gY!9i׷'.2z +;Gg?3*"r>nzK[ {[s/Sss//o3c; +jZzJ:ڢRnNrj۳gggg'_S3#{kJb2B.rZ+*+kc3Cc3{ kJzz:ZZzJJkk;{KKKK;{{;kk* k++k+jJj**Jjk+jˋ**j+ +J +**J: + K k+**j KKKKkkkk+jj*jjjj +:Jʊ +j***+k*k+* +k+k k+rZ*jj+˻;kK{ K K kJJJ +:z:zz:ʊJk ˻KK˻K{{{;;; k*+Jz:z:J +J::::J +JJ +*+ KKK;{;kk*jJ + + + +z"j** { * +6风BrO*rK"N{2zʊ/CK{ +{Kj#2*:r+* + +*B{ :K/ +2j:*B*:.;{Z[cK*c3cKJz{{[*zzb"2"rbB"Z:+ +*K{CC{ *j:: +Z +:** KkK+*;k늋*j +ڊZ +ʋ:뺊닊 +j*J꺊 k;;[{{[{k*늊* +Jj: +J:zZZzJ +J* +J+ kjkk +j {; ;+KK K+ +*+jj* +*J:: +Jʊ + +jʊ:jJ +j j; k{{ #c#[;+;+ + + + +ʚZJzJJ"z: +J::J + + +* ++j*kˋ{[[;#kk+:Jz:Zڂb""bZbZZ:ʊ*k;K;cSsS//Ss3#KkkkJ:B22.RR~B>R+C33#kK[3oooSsssccc㣣*;+K{{K `fJKGG?;j+3CS_wGGg*^&>n~rjZ:*;kʊs?ϿO/cˊ +bzzk +&fFh6g'osg''g'[Zf>>N^ 3;*j[kk[S//?ϏoSoO?_''Ǘ8Аpii_RRB:W)CR~. +;cSo2~^Nrj2.Z:K[3ϏsSoo33SSÃ3s3[3scK#;~fVhȈo_GggOSoo_g_o[JzB7"lj +/Zsg__o776 ,0ygg?vfOII׷rRo/z.>~ +js3ZZK&&>S//#__//3s{C{{rhfV(6^RB&j2b/???_SSO__?o/oS//3/S3c/x,P@XI)r^>ff>G9Is +*'g_S .~>nK "BBv&zJ'_S{bJ**?Jo3/O?sc翿'_3^H `Xv3scoo>G7i7'?OS?o *"r.BN؈vcNgw___c__872~F6Fc9Gs/''_?s:>2jzʚzJ^.Bs_'?j[/㿣?''O'sS/?oS/sX`@^;*K:'gwW)WWww'3[{{jʊ+J +Z""Z.rrr;ۃSSo#{##[{Kkjj+k kK:r&fvv6Ff&Nr:oǷ7777LJg_SC +.ξ~>>^&>bC3_ggg_O[{KJZb2Rr>6v(6fR /'7wwwwLJ_C{ +Zr~^^&^&>Rz:K#css/?ossc[ۛ;;ˋ+ +Jj˛[~V((hhhV6C_g7wWWW)))W)wϳ"2&&&2SSSS_'''OS{jJBZzJkkB>^fV((h((Ff"/?'W)W)ח'o +N~^&^&^b*Ss???_oSoc#3{*J⢢Jj VV(h((VFfO'GwWW))))7'Sۊ.^^&^>f> +/sO_C3 K :ZJ + jf6(vFf&.o燷WחLJ_?#*.>Ύ~^:{ ocCϏ?O/S/;ʺZ⢚zJ* +*KJ&FFv6Ɔ^~.kSO_'Gwwgs#jBr~>>>>2" css/S////3ã{ kjjJzZ"ZJ +jkzr&fF&&^s_'GGGGGg'_[Ꚃn2Zjjc333s##;*ʺJZz + +*+*.N>N"z +;#s/o____'_s#{kz"2rrRR2BZ:K{#CCc{:bBB2"ZZJJ:Jzzb"zJ KC3/o/ss3#{k+ +Jښ:zJ +JJJJ:zzJJ +j +++kkkk k ˻ kk***+*+kkkkk ˋ ;;;;;; kk+++*jjJ +J + +J +jʊ +j + +jJjjjj**+kkk kk*+k+ꋋ*+kk+**kkk*k+++*++***jj*jj*j+***j*j*j*jjjjj*****+++k kkkk k++***+j*jjjj+*jj***kkk++kk+++**+++*****jj**jjj + +jj**+*+**+++k+kkk+ k++***jjjj******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_german/cause_84_loop.isdn b/tones_german/cause_84_loop.isdn new file mode 100644 index 0000000..2a5bbcd --- /dev/null +++ b/tones_german/cause_84_loop.isdn @@ -0,0 +1,306 @@ +*d}EьDH$]aV興h(&owWWח'c*rNFv((hh(FjS)I9II i)/f6vv6F^nb _gGwwG_krfF(hhhV΢_wW))W7+"RN~&ff&NŠ{3?gg_?c"n^fƶvV((V6{S'G3''_o:>&&&>.R23?__O/n[vV(Vv//G7wWG7's#Z2r~R_LJ緇'7'sb볆Vhȸhv&^C3g7)iW7Ͽ/"~>^N~+2C__?_'Vf6VHxHvFfgiiiI io/K>&^.r*gGׇi7*((x`X(V~/WI9y9I))s涶vF>Z3_'G7)WwOV X@@`HV>oIyYayGƆvV6F.*c_ iII׷Zȸ0ppHHN_aaa9G FhhV'׉ 99y9i7/z@PPpH(S7aqay^H(f)!Y!Wzi,,lpVR Aqѱ9_VfXhJ?W9Ya!a![Ix,ฌL pPƹAYY-qaykfHHVVLJ!aa!!w&P|̼lPf~W AQ IۆFX8H Iaaa!0h< 0 B3_GG7Wg?'OOC[ß'bJcN;_'*JΞ~2(v(6FVƞNCOgggO' GS/s_3.n3/J&R/Rks[SΈ.6FfV"?wigg?coCZ_F2 +gr_?GgOro舘H8( BWW) '#{.{[.oCrwg)g'Wi iXPX@ ^_ǟyG7[{rb +'WϏ''?gWiII9lЌL|h(7)IWw2ʻ3OS7ׇg׏ۏSSlj9!Y!!YYy!qyL ̼ܼ(V/ac/׹ W鹉Nr/+O' !!YaaY-{ L,>_IyYYWJn&x`0pЬPVw!!!aaY osb&f&&.3'GWiIIYY9_Xpppȶ29Y!a!y 7?/jN6Fj)IyYYonN6 @p,А^? a!Yyikr6VV2)) yyyyYɏR8pP,0fOIaAa!_ڎ^F(Fχw)i yyy*R>`@p,P辣G!aAAaYi'6V(hvFbs'7iI9yyy:.&`pp@vr7Iw.HHȈhV&GWIY׻NVXppPАfkiy!aAAAa!)GZh88HH!!a3v`,P`(WIaaaayWW?(xHf~n799!9Iy;)XЬ Pp,XHy?Aa YOח;˟(x8V8FWف!9x IppLlp,,^ oYIAaAWK)_s*~~F8{w)!aaaa!!!aY p@ P(@C9qAA1W9J[Jr.V^&r/7)aa!Y!! ,gi9YY!!AN,؜L,^B(qGA'F.r+iǶnh8~gia!aفaqI|줌XS qy R^o7'/'vf:G) y!!YYy Iy  ,X&Riy I Wi)W׷__j~&&&^N#SG7W)WǗGbF6hHxX X8(^gw) yy9I 7s;^&v((vf> + +7W ɉ iiW) RH ``` ظ{'79Y!yyIWwgJvVV((V6^.s)iIIII_8 `X(f2?G)I9YY!!Yٙ9ׇKrfV(6F+' I99ɏJ8@@@p`8(Fw)I!!a!!gvnJs_) Iyi{&X000@`xW 9Y)G_KR^FFRo_WW IyG*:pp@vgiaaٹ闇/*>&~^Ffff~"{o'wWWiI9yy*ZrvH 0ppp0 8V&{g׹YaaY9{^&&^&Z{'7i IIIII>@0pp0(zwyY!!)7r.NnB#O_G)ii)W)W7>f8X@@@08Vڟ)y!!9 i)7/+;ۺ&^~Z7w iWw'HH8@0@`` ؈^.2;') i IIi)ii)'_o"BJ+/_7GGc?_ CcjjS +vHxFnnKWw)i ))7w)OSj㏛Bb[?7b+c^#'>ZrFzfR>(+Og.hK)NnWR9_; 'GiΞcKZzb/փ.[Ns?&sJvf7Ccˉhg'gS67"6 +~wwgZOG +g'O&(>cJ>FwZ67_gsNNKjr3['V)^g6i~WV'sSgNj>:LJ3^i7#3S/RzJSG7k&^Nw#^&3Sf:s_rGn27";~ K"{2*'fZ?"N/v&RznRrã"n[;BZ*r Oo+ڳ +oS3:C/>;n++2 +{ [jk*:" ++:" :# kz*JKj k;kZkj K +** :Z; +[JJkzK+k*j;JJ;J*k:K*++**+JjʺKK*˚j;*kKJj*; ** +kJ +*j:j:+ jkJjj+˺KK뻊*j;jkJ++*++++***J+z ++ +j:Jj** +k*+j *kkkkk **+ kj*j + Z zj+ +jJ**+: k +*k*k+ +k* ++++*kkj늋+*j+ +kkz +**z* +KJ:K+* {:;*; +{+J + : *ϳb"sj.#XCz7rf2{ wJnxg.HHOǶoWW:V^>noº(Bw22G F:k"*_Rz&&njbj *;K[3;R?#"?sBK;s##;sZž>R~rf&>ko;3'GGwGSOggspH~Wo333;'B+.i7))w3Wi)7_'7i)P, L,H9'W.K:jWiW7WvSgbO))W׉yɟiG_yyI,, h68F Ii!znFh֞>S7 IIaaYy 7gg9`L| y1q!a!2ȈV86oWg9gs/srbR3 Y9GIr/ϟ_'_/S :bRN&&FF:s_Ƿ77g_/3jBRRNΎnr2zʊ [[C333c+2rnnnJ+C/O??ϏSKˊ""bzJ: + ++K K; +* +ښBBBBB2b: ;C3Soooooo/3s+jJ:z""b"ZzzZ:J + +j +jj*jJ +ʺbr?2K*k[r۲*zZK+2Vso*_S3*2.6:jK7Kzn2Ff>fN;o_'sOsc?sKos27C_{jcks"z'#'/h&``F +i9! IW_[{f&62r#/?g'wgWW)IFVHPllPP`)aqq 'fFȈhns'G_[c" 3O)W)Iii )w)i9p, Ll lp`h9qQAIs8h&9igsn(rK9Yiwg Xľ @n^1Q1q+Bhȸ_7i !!9)v(hxH2cWI!!9I )_7WI),@쌌<ฆ[-qaG6(xx( Y!!W` x)Iyaa wϿ)IYlplLPXs?QqiwGhH8ڷ陁Agc0:!A! )ڳGW Iw ,|̌lA!!1Q1)hH`v3a!f0 ai7k{_׉AqQ'L ̌l PZ1aYh0 63Y1YW[ڶx`0А)!a!)Sf3g7yYaaq| ,I-QiW_ +v`VWyaA7.h` (S !!!i_O[)i) IYAP@@H q1r>x8Y!yiXx_iI Wg?O_G)W?g)yLXv:G!I"Zb2^^oWGÎR3)7_gW7GSsOW7w[xpPp&b#w7_#Ͽs'W)wG7S''''__''_g'GﺢK?/{{s˖H`X8(6n#_?O_Ƿ'_'_w7ogG3ogSs.+㋢nf~>2&h(vfr+s/?O_ow7o33O3;+:*n&ž~f>Rf&2Jbjbr"O'{{'?gg_'[ .2r +3_& ۋCK^kn2.kZ2Rn..[?cCooú~kSg:ƒSBfRzbR2ς^ +/ۚ.oo?_/2+r/3{C+RC"C3r.&^>6/+2"nnËZ3GgO'7W'z#2>RrNNB2Ί3Sbrj{ۏ;3cZB.NrN>&rZ +3so?7_3c2RR>NnZn +:˻ƶVֆ&&J#O_GwWiiiWח7GgoJ r.nN6֖h8xXXxxH(7)i IIIiWw7'o J Kk##[#sssv(8 ``ظF )i I9yy9ɉG_OS*zJ+{; CSS///oO??c(@@@@` 8FS 9y!YyIiWw'*#s/OOOϏ~hH`@00 (z?iY!!Y!Yy9iWw_S*B2B +ˣSooooS3CȘ`@@@@8V^*!!!!Y ׷?k2r.j kKbnNֈȸX VFcwiyY!YٙiWwG'[RN~~..Rrrr2""2rBbB.RBb +**k;/?_G7GGLJ''s:bbb22"ښZ:zJ****+jk+j* +k++{{;{#{Kk +k jꊚښJ + +z kk;c[#ۛ#{; *ʚzZښzJJ::JJ +J + +z* K{#㣣## ** +Jj +J + + +ʊ:jJ +j +j+++**j닋 K**jj + +:z +ʊ+kkkk+;;{K˻Kˋ +j*z:6VWgw'>[3cR ;R2k::j+ +G:O Jr +S{jkƆo;S :RBB:*z*jꚢ"+j;KJjcK{ʲRJz3kkjrz[JBRjKCꊻJˣ2{k*COZ{.rrc"2NJ +K;s뎊s./JKKbZk*j J{[ZnB*#/3B:/{"Rn[S+&ʏrSJʛ.&N3.Rnۊob+S#Z:C."O/;2*{R##rnJBSJZBKkں*S˺:;Sj;j/3; :kk[ +BZ +[+[ +:jZ[㛻[KR + B;3sc#k2cs/*kcK+;JbrnJr2+bR"ʛ *+J[+c{{[3[S[zˊK +s;JZbs;[kBk;{Z +RnkCϻZ[ N~{{J Jbj._jRc+CCzs[#JB+#[*2˃{ +bS/J2B{3*Zn.;K*N..^^&vȈ^>Rz'i)W i)) 'GW_B{*Z2NB+OL`hrv668XF?)7gI )I _3'2_?w*R/w'KrW,X~v&( `Wi99ɹWGw)';&i)f&ˎo_I[?7BGg |\L(k20Hg wi)_WI 7WWSBg.. GY7d,֢6gFG JiW.2Ov)io.2oiyIi)/G)Iٙ$v(Ff Ib,)g9Ii_׉iK[nf&8orʏ?C LJ)'W)!ܐ8O!y&P3n)a3 +/GI SON^ʟwKo++cGWgW/ iЖ!9>@(26h)3CGgB>Ff+Og?)Ww_''wW\8xY9>8xx Y w!y_j7'3w?ºh#ogcB+OwWgSO'sC0,@zwBbHh)?!G_o:C&fj/'_COgGw))g_OO__o_gPl`ЬV^sggI ٙ)WdzzZ++2>.{S?OOOO'/o/sSs^8v(xx8HhF^giiiɹ99 o Z>2Rz{Ss'''g'__'__( ```` fo yI Wc:R&f^b{S?'gGGGg'OVV `X^Zog I9YYyɉ)7oۚn>~^.rBSO'gg'((H ` V&)9Yy9i)G_3ꢎ&f^rš s_g77GGVhX`@@@X8F2gWyY!!!!Y i)7'?sj>枎rz')))))ii)kVFpp0p0`xX8C)yI!!YYṉiR&&h6Kw)I9ii ɹY!0,P,X Zfw7 9i)NFx8xVb/'7wGiI9ٙ!!aXl lPhV`v_O3WG' Y )!! iW^H(Ɔ'Www)ii99y!YzV,0,px)O77?'i 7) cvhV8VBOG)W))WWWwgoVX`Xxhk_w77W))WW'O2.v^N+gwii ɉiiW)ii32h`@`xH(b{gw))Wi))_s&FvFFf*?OOOSfR:Z*>BsSsO'?_?/3K+R2>^6((6^n/_GGLJ_Oo/oo'G7G7G'ggW6 @ 8@ 6j) _G+ϳiig闇?Sf^&Zbkoos{s[ckK;[+B2>RNnB^j o?sG?w'Ͽ?+/"2>^&(vn_gLJg'_?'__OOϿG)z^ƀ(8/N鷟W)G7'gG/K*RfvF~^R2zj{{c/soSsS/3ssC#c{KzBR.6(hhhh(VR g鉹yyy9ɉ'?S +ڂZ&(H ` `8HΚw Y!yIi7*B>ֶ&?7Wi )'Ccjn6H ` x~:wyY!!YYyIWc:~vv6f^ COWWWWח7G_V(8X `` Vbi9Y W'^FVFfRzKs_WWWwScJ2~&6hH8x88Hh(6Nz/w)II i׷'Oûzr&&&&RRB+/OOϏ{ꊂn>~VsrbJ2#7_osogfgr_~"r.3.O'sf* +*jo>6g_/&:S&7BGG#fO#ZNo&~~oZʎyB2o{ǚ; w+JKr{&i2SR&/Bz*bFj3~bS'Ssoc.C&//#6{fn.i6n_/f):V)_拿 +B"&3;SR:r#"z&;s;n.:gbN3˛ 3*sJb*nr۾jn"z2. +[z+겻S3COs# ;3+/r*.b +cNBrR.2RKJ2N.N"K/SCOS'gCO/o# #Ê{b*R+co#bo;#'g)iɉ Www'go{[KJK{J2+o?_p l,f.j7_w))Gi G) 7?{73G?*k_kO_*GK/'#c)i<,PRg>' )9)W W:oiW "_*G?K_#{s'/wIi̼_)'+Gv99)))iW'+:2W27s&^k)gg*kg۲'i0@0#G?IiW IWGG? &~R:{ +;[/Ͽ'g燇ÿs{ CXxȸ ``x(^__iii iiWWWg +N6v6v&.;?_W)WWWg__8@x))9!!!Ii)wOێfȘhh(b" ß)))IIIi)Ww77ww)(` pp0'iI!a!YaYi'[HXhvjZ;)i99) )חX@`p@` Vw YY!Ya!!!y i/Z^ xhV:[s)i 9y 9 )iiim|$\,p, HW Xβ !qqaa*w/6v#~(0,? NnɹSV(99 a!_9w9!$l @((f 9ə)K~S)Jv(Hf{OSOlj9Iiww) )G|d`8yH (h(FW1i)wf)C'3^(68#O: iWi I!|И8IYxVֈh(w1aI ij'S__ظg)ÿ'Ok' ɉ) WW iyɌX@'! ^Hhf9ayaWZ~2(vg3C) i))W))i!( P0p` JV() i yIgo^~RʾHV##sg'K{W)ii)oOOos 0@@vR7Ggg7)w)Ww?nrf+*#;__s3j2"š +&F6f~2" +#__'gggg'O#K˻z:z"ZzJ: +{KkKKK[CK{*z2J* +j""jJk;+jzJ*[K +{{ ;Kk jj +K;[[*:{;+;cK늚ZJ +jk* :z + ++K*j˻z:{Kj*; +jk ++kk+ :"zjk;KK{;*J +˻ kjJ *zj*jJ*JKK j++Kˋ++*k++ ;*k;jz" +JJj*KKk::*kk;;**kk{+jjj++*jj +***++*+*  ++*j* +* +j +K;{ +Z+K#+* zbbJkKZ/#۳zJnZsb2sKSZ[ nK>;r{s C[Jϲ&Jòr;?[G_+Nj2s*{[g2Ro'rZznƞ3b6R;2[/Jc'+ *wVO:#?*2[R>g~zwF_F +Z;3Sk_^ni_/_3&W;'_CVz/Z6? &_6V*R瞺ovnc'O[^>Cnn'&Sc+oFSrz7^r.^k~rrb' )S +R&n'&>^gRO~o;fK6sOsdžj.76(W)f +n" S2?Rr';*jfOrBokr*jNJ"&.^3RzC'K{Sz~ +&c;zSS>Coj#:n"*3/Bj^bfK"jJS3rr* +ʊj+s;b{2+o2/#j~3*ʂn#.R2RrKs#cΊ2 2{krΣB[cBzjkCJ2ZzZkC/so/soss3c3Sxh` ุh(rGiww w'7Go/kj:s3LJ_g'LJg7S `@0` V_WW)II999iwV(s) )iWW)wЬ@`/iyyyɉW/KvvV.zo7Wi)WWWWWw`0@@` HhW9Y!!!!Ii)^6(hVf;w)IIIII iWh0@vs'iy!aaaaٙi)'o;rH8Ȉhv~bog y9999 ii)gHx@0@`F:gɹ!!aa iWRfֈH888HV2S_Gi I99999IɉWf8@0p0@`oi!!!!y Wo{2^HHȈn +gWɹ99II ii)WW'(x0@ h[IY!!!yyi?3&hȸH(F.G)IIII i))ח(0p@h(~c_ YYYyI)?[((h(6~bbSW I)wyI9y i i 簐@@p0`Vxhgog7iyyY!y93FFh(f>~n.3s2W)əYy II 9!iLpNWyF8{aw鉷j'+^Vf&X~i7LJC ٙ9Iii))ف\ 6 x0I)yY_oGG_Sb&r.V6^"CS'jC'W 7wi)WW9AI$\s 2yy)W#W ʎn^+>vS_'+#Cwgi)w!Aw HYWfVX`؛Y77OGWic"22csSvf{O'_'c'')iWg@\\<ɇcr`!)g_rZ)Wzr>ro/vv^/O[?777G7)) فY 87OjΏ`kwn~/Ƿr:26>JϿg'o_ggiiGI!)\F ''89)w/gG2f +*3:2fF&'3sO_'iW7wi9s0);w_)W;>GgG)bN>B^C#^62K+'ǷO#o_'wi)GgW!W\@v&ƖAi`pfrh_IAaSNg OS_JFfs +zϏ?OwggiWwiI!WL,X1wxf !9YIKb37G*W +V.>N珃SgjW7wW7wWWIY\  "cxWWS9a_[Wi#nGnf( s +'W闷WǷW !|pHL(_w6v cxSvwYYIs'*+r/֖^^~+OO7w))WחwwwI)X,LFHHSgVn?fv g )"NFR.c+ O?g7w))W))W)  `0P0@8(O.j?ggG) Ii) On^6>R*KJ#C377)W)i)w X8ర@@`f(^oggWii9i9ii)wG/+ZF興(f^NJkcWiii)WWWWW))Ȗ80XȸVg)yyYa!YyI)WKh舸hf.*W)Iii)W7wGVV @@0H&Yaa!!YIgG/ +*†(hH(v&sO'wi 9II i)W7Gw7gVV @@@@8GY!aᙹIc +ƖVHHhVfb# IIIɉi)WwGgg'?Vx`p@0 F{YYaaaI'?Cn>((hh^BsG) IIɉ)7g'?SÞ(8``0@Hȶ _GiyY!aaaa9I/&V(興VF.+3)i )חskZB((踘 ֶOyYyI?C>^h(hh6f^~ w) ))g_?s[*K룛H(X8`@H&;!y !yi9ggkr*{.z~6f^N+c)W_oSsSo( @ ( +'Y!yaa9iWS"+B/+kffz'WW7σ3SS0 V,lpp&) aaYa9W_+~> + o:+^^rbJ˿_G)WWG_;:ʺ{_XH,x_7i!y*bBkCsS3ooc +JZ +#oO'''_k:.2zb~{Nβ^hȈƆr_giiWWW'/S_s__ScsOcBcsSr"r>Z"n6+bC6nKJJrF&S2_ck/ss/2*?:'++GS+;J>_S&o~+^zFn:Rƺr>ro^F/O▏ooZ^J J rzڏCK# +wOgsj:o~SOv"{" +B +~/6oG^YG.v*Bn? g[2>j?Rkַ + +ËZ:[/#bfh.['g7vhsO;j(w3n~6 +Nc.CVSV +R_f7v>33>ƗR&(rNg&~*O.3CB.Co_On";?6{O)gSR7vg2Ng_jRN'2_+;׆~7 +rrB#R^*3#&Cr#^gg"n^kC/B^z#nS/#j_okKZj?zbn +?zf/:sz ngS:#>FK*CjK3# /+[skk kj˛ +z;jJK {+kzʊz⊢ +zJzJk: ++*++ +;j*J+k+{j+* + kj* ˋj+j +닋Jꊊ+k +ʋk*jj+KKk;k㳣{:ʋ+ + +zZ"bb +Jzj K;{[KK+++kj+{Jkk*k** * + + K **j ++jj* +j:J +J +* ++++;K k2*+**j +J jJ++j+*+K K;; kj + +j + + +j*k+{ˋ{ *kk + +jښZbB"Z: +k;K{[ۣc;ˋ+ + +J:*Jjj** +jk*kkK*+++jkkk + **++ + +*jk +ZzccK;ں2n" *zʋ*+KK[ۣK늊JJZ:z +J +*+ kK* ;*{ JJ+ kjK;zK:RCcʲZ +jJJ#ャs3jzb.n"z2bk*J*[;[3;jk +bbZz+K*zk +z+++Z*jzZjkjzjk3S//SSo//s3sssCc##ۛZX`X88bW )7.&f277'__3#s?GGg''0pxO)iYaas+Fn*_7w)GNv(hhVr'wWWGÃww9 lP,l~3o) Aq ii(V62R3G w~8+?WW)WSs?gwW))i̐pL(;yQaV(vWə^hxHϷWW)7?O_)))WiYY<@Xa!qqAC"(j3ٹ)WW7F HȆK7_I )wWw_SO?'7WW yy~0&l||pp0awaYi>(F((fg7y)77[hVhn*sχ) i)i)G__g'7)9?Lp@v2.aaYiOHf&VOS'giS^^>Jsc'W))iWw7??oi0aL@ 0hXhY'y1Qaa7kSH^f*okJgR[_;*3ZgWWW)i733;?_"^P@ p`@X#n7ya! 'S"&fBSO_''_G'g??BR"R KHxX( NOIyY9WRJ>.2;+j#osO#O#[[sJS3;[n&^^NJ2rv2&&rnOJ_'Ǘ_O{[;+r;CO:.OsjSf .nZO.oC2^>[[.k^ +R.zSsrC*sKbrJ2[2'Z)C*r3s#GsR[Fr ;*&*'oR2j;r_ +>gJr~?nNʿkj7RR2g2cvo+_zn*Ο#n_+.3wZwO' 6벷փ+kn + +3_>sfo2jRKk?2/Gv3n'RR^.:^*SsښoCCf_7"n2?2s2rOo.fN[/.N: +[+_N?'3k>BS΃NC&&rJOo"Ns^&^f&SZ + Os+SGs3_ss&3~3[/r+:N +3 +r+{/&/kr^*f +{K:"g:z3/sn3j.[ﳻbC.3z[jk:[ n.C~ z.zCs[BR?#J32kš{JS?bKZ2~3b*Bc{ +JS+sj뎻RB:~3J*NzKr >nZ²Jk +j3j#kOSC/O/sO#˂;J+γr*N.B"ڎf(6hF6>/WO/s/s3#s +Brb‚z +;ãVxȘxǷ799y )G__˛br^&f~ +j?'g_g_#s;ZJZ.Zº +(jHX8X`8hXVO99ٙ9 GCۛʎ~v&Fv&&n./__gg'osrbb+nfnhFhHhv^+_W ))ɹi)wwǿsb2~&f^&&&nrj[So??/3* +:22BZ""r.~&Ɔ6f~NJSww77GOC +2~~^f&&~R +;o___oCCK+"2r.n"bBrnnn>&^&f^{o''gg_o32.~^^>.r;sO?Ϗ/3#{k +"bb"BR.N~~&f&&^nR3/O'gg_Osc;N~nb:jsS/ooooS3+ +:JZZzZ""bb~r >KZ.ÛS3c/sOo33óc:22r2R"bzb:+JZjzJJJbB²r2:+c/?'_''?/S{[j*:brŽ2b +Zz +rBr^VƆF.R:O_W)))Gg/j[#/O_OS#J"RnbR+jbJ /֘hv p@XHֈ+)aaYy׷'RN^>"NBnr. +:#7G_{#*r*R +V vp8x + AIyBN.r33*+~Js;&v+&3o'?3.BrrRzj{nHxXHhvg)II99iG'c#cã{k*KrjK:nz" C#:; Jnzbr*b~Z"{#Z.#s.b#3r.n.RS'_w/_jc[k+[Z:K #;rJjZ +zjz~ʿ/{nfR{˂R{ +rs +JOSK*ZOJ+*C3Z/rz{/Sb›SZ?2O?j+r*Rb2 + +{~&^ +{{/cR/jcOO2"2~+#2NbC#+ S +S'O{ +jZS2.cC2;Frj?KrN^~R*zfBz +S.k~:{nZk#^SJ ϛ/o +rr;C_*ϋ&*.nbBr~rwO?rR*.2{??2S.bkR"3s#n# 2b>fJN_n^oZ^";_K.+SCc3"fR3n3"R>/?+sZnFscsOkNb :.J.3o+ +K/o 2&>[k +kN/nRZs'_ ^^nO.F.ϟR{ +&f[;2z[/'3 {kˎf~2Sjsjs+c_Sn.c2g'z*J&+Jr^;';ËKkos./'oC/"'^>#:R~^ƎJg>bc*닺R~2ۻ+N{*#ϻc3o+/{3ks:K C{+;bBrNRˣ "z/nb˾;N3_۾ΣS g~&k'.snb" K +{k Kk:kjZ"k{jz3bSZ;#kzK{ +k{{:jk::jk*knb ŽK"2"2ڢ +jjk3oS/?o/oo3[CSc{SCCjȘ8 X8HV)9YayyW'3 +F^*sg?o3k#3csggwwc 0 p@H.wyɹqa!aW(88Jj_W Iחvh ^7 Wi y)''_j>^ΎR. +ogW yw@@ذl0@軙a1IW?.hȈ_i9Yi'/cX8 C 9I)woJKRR+?wii i,FH6n2hh)Gf)#W+)'g'7GGI,`̌h91YA!>~VxRk? !I iw3NVVhh^BOFC:.z翃_)w77[/'777WIys IayR^/'y9I'Nv((ֶ&;F;o*#ǷG'#3cs?SSS:ZR x` VFF77iiWw׷''gϏ/{k;kr"ڂBZ"ښzjJ*j*k K{{3/Soo/cKz +zZj+*+k K+*+*JJ:J**ʊK+++k;[{CCCCsss33###{KK K+J +Jj::jj**zz:z::ʺj*j + {[#[{{;;;{; K+** + + +zJJJzz + +zʊ +JkKjj+*+k K ;kk+++k++ kk+~N3#*j{;;k++˻+* +:z +z"ZZz: + +"&sCO;C# +⢚2zڋJ;Sjs#* +z2kB++J3Sk#kj2kZj+C jS;S"B:.Rkr"#cZJCc:ss +*/+Z::J/CbCKs+J:ۂJ +rB >NZZZ"˺j{Sk{;[jk*z*B22; B{* 2+c[ ʋ j;ˋ;ˋ{;; +zZ"Zk**j+k{; KK[ ; +:KKJ*Jk ;*k j +j+:+K * KK j*; ˻KKKk *:bbbZ+ *J##K; +zkjj + *j+j +* +Z*+z*:*z*+*k* +k +:** +k:ʺj +:j" +Jz*kj {{;;뻛;K+*JJzJJjʺʊj +k*K k+k * K++++K+ ;*˻*j j* +kkkJ+J+ + +jJ: +zJj +*jjʊJ+* ++;K ;{KK; ;{K[;K;jj++k ++ +j*JJzb"2r>~^^~.b:{S?_'__'__?/sC{ + +2r*K`8(fW Gig's_GgwWGË^^f^>fR+*rc3so_?_gOS/[;sC3?gXP00 (N&y)['Si )WWi˂Nr2/sJ.8~6/wWOw_gs_''Flp0,8[g/#/;)I )77_CbrB뛣*;BNV(nf7wO2jg'Ƿ)G'/'_GV@lpp2)G3.?緉))oˢ{ Z2bn~.RnBJJ&nVoG)o'R;/G_'Oo'g,[) +c&FfWi)II9 oÿoo#KRNNn.:+>w?b{gGgOs'OoCX0,,HJ'i#R&>NniII ''O+nnJBZJrF(h> +ggggG';ZJs_'g/_'CS3C3/?'ΘPv2_'w^s鹹iG7''??/cnRBnR2R^N&K)_{s +zn/G'/?/?oCKsoBpx_'~F6;giII 7__k"nR2rjB&^>w3kGg_?/?_?o[KCO?fp@ ȶ[g:f&^oG iW7w'_'gg_/2.2R.B22ho'+j_oÏ3S#3oOSonx ([s"2N2W)i)׷???/#k.n.2.>~2r+3?oC33SS/oo3c[{ +rrn.Rk;;+r>~Nr:3_'gg_s[kJBn>N>>Rr2jK [K [#c#[[[{*+j**+++ +kk :z""Z": +*kk ##ccC#[#{ j***jjJzz:J:J::z::JzzB"ZJj#3Ooo/3C[{K+*:²ZZ + +jBB2R.n^&&&&^Bzk3oO__?ﳻ+brNNNn.rb+KsS///S/SSssCK+zZZzzbrN((V((vƆ2ʃg7wOSۊZR^^^~>n.Rb C3sss33ã[{{{K k+ +j + + + + +z".N~&ff&^n2*/'_s3 +Z.nN2*K3/Ͽ/s;KK+zȸH(v&΢#S)iiiiW7'O>&&&>NnR2b*KCcc#˻ :J +k [33CCcc;; kJnƶ6FNnBcgGG'''OSSzjjkK[oSÃcj*Z2r..RN66(vƆzCO_gǷWWW7g_/#~~f~.ZZj 3s/oooS/3[{[{ ++z""""ZZZzz:zz:2r.NNN>>. + ۳SO?__'_?S#*Jj:z: ++ k;K;;{K+*j2rr22rrr222ZZz: +:k+ +j*+jʊ*jj+jk*kkC3SS/S////3{ +:B"" + +J* +:::zڢzJ +**+k+kk;;; KK;;[#cc##[{{Kk*j +::z:ZZZZڢZzJ +jjʊjJJ +jkk** kKKK{k+jj***j+k K KKK;K;K kk* + +J:::zz +jjjj*kkk++++j****j**k++***+++kkkk++*******+++*++*+kk++++++jj + + + +j*j****++kk+k++*+*++****++*+++++++j*j****+*kkk+kkk++*jj + +jjjj****+++k++kkkkkk++++k++*jjjj + +jjj*j*+++++++kkkkk+++*+*+*+++***+**++*+****j*jjjjj****+*+kkkkkkk++**jj******+**+*++++*+***+****++kk*++*+*+*********jjꊊ +jj*****+++kkkkk++****jjj*j*jj**+*+++*++k++kkkkkk+*+**jj +jjjjj***++++*kkkkkk+*+*+++jj**jjj*+**+*+++**++++*++**+*+++k*k++++****jjjjj****+**+k+kkkkk++++++********j***+*+++++*+*++++++**+*******jjjjj***+*++*+kkkkkkkk++++*++***j +jjjjjjjj*j*+*+*++kkk kkk*+*******+**+jjj*+***+*++**k++*++++*++*++*******jj**j**********+**++*++k*+++++++*+++++*******j +j****++++*+++++******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_german/cause_85_loop.isdn b/tones_german/cause_85_loop.isdn new file mode 100644 index 0000000..d379fa5 --- /dev/null +++ b/tones_german/cause_85_loop.isdn @@ -0,0 +1,258 @@ +*d}EьDH$]ajN.^BR΂O˃/OOg?_g/j/2z:^{2.nb&f6涖^nzcg7)i iiW_K:.N&fv6fn#o'W)ii i)W7/'kzb^F6FN2.B +jKOSS?oOO/## +:r~&ƶ6&2J[gG7ww?k*rZ..N~n^6Hx88h&nG)9yy9iǟ#K>&&f^^N"Zk#Oo?3.2K#?&H~ظHXȈF~.yyyyIg&vvV~Bks'gǟ_OSC; +:..nVvVhhVZwi i)7'Ob.&v6vv6F~Nk?_LJ'?C ;jZR~v6VV((fRj_gGwW))))))Wח?c+.^fƶ6Ff>Ro?gS[+nN>~&fFFF^>."+/'GwWחw'cFƆ^>rk#?___/ jb2.nN>^&f C_gǷ7777Gg's*.>~>N. +ۃcۛ˺"bbZZbr.NNΎ.2b+[[)SO''OsK+Z"2rnn o*/C.BJJnnRBʂ"*+:R~N^&~B#Cs__?gg_g?S?CSkjZnjB.{JZKzZr znz:~F&(ֈ6Vf"'g ii闗7ss[zn>>2O?*{R#c_ggWOۻB>fN 0`H@x`CG׉!aa!W'zf(h(3)ii)7Oc+s/;s/ϟ__? lL iA1qY9WVHSɹ )W'g_Sg//~B +k?gG7w77GLJ_?/z +. +zr.rrʻsjsoKC +Nj:.Rb.:" +>N&β>rbK??__''gg''OSsrnNzjKZ +BJzjZkb2r*jzZ.+3Z2.2rr" ں +Rb.Bbr.Brb ooS?/o__s// +#c{{{+"JBRRbbkK +zãNrrR>bn₻#+⎾:RNB*#o'_' ڋZzbB;KcC+C +rjS:z ++BkzKj+;ZvNffNrJ23'gG7Ƿ'?SZo+*S/ +{{K: +* + +b3{ + +388ؘ(F)wwə )7szBn* +zssSo?OoϳO/K#'j3gwWpf pPX'91ၱyWW'&&FhF~vo+o'G7iy8rPgy !9)׹)׷ww)aKl)LX @ 6~ѹq99Iz8v>*39WiIiO;_')ivw(pPP .c#9!aayykOb(v8Rn)Ijcb.Ssc_^N ``x~Nr) Iy i'?/s'g''?s#/ZCr[2B "*zB‚VrN(fV[# 7wGW)wGG'_O'Ocsjbn2k^Z+r +3[.:kRڎb"BK*S{c +CCoSO3/KzB +jZB +rzkJZj*Kzjۋb Jk + j˃ ;z6;Fϻ_3+ +{r.fK.sRn?Srn:zg^SgFsnffo/g +27J(b)_{h'O + +GVOf +oSgOr.r;sbFS BJ~g2..R'zR2B>.w&_G~_N^ +&{.#&OkJ?J/ .ónKn'Jc2'f.#o+oOg?>BgB2k.bNNr{Jn;z*"JBZ+Jc?"kBk뛣{J"/kϊ_s{Z.R3 +"2NNj~>N(((^_)i iIGG'G{{*..zCc`@``v;kY!!ayiG/vkR^ggW))'oOoKCg/'7g'ϟ)WPLRGw9gg)igwGIWWw'r쌜0`PiaI' iGsW)G_FxhFn'WW)w)7Gg_oS7)^`@`X fCIIYyIyɉiWWۢR6v(V(V6ƶnKC/'ɹ9I iW_o`0PpX"IaAA11Aaٹ׷? +Vȸxxx(; y9 i7_os `@0H^IA1qAA!!iw7'z(XؘHVrs_wiYYiw_cSX@0p,Pp0V>27񱱁!{(x ([ !!Y!YyI iGO33S/(X 0l ,Pp`v.2a11aׇ/.H XX8HVRC9Y!!!y9 WsK;[ pЌP,p0&‹Y1qёAa9Ww'^8 H֞Jχ׉yY!!!YyIiW7SCKÆ`` p, lphZʟ91q1aYFHX XxH(2o׉!!!YIi)g?sCV`pp,p(*+gy1ёёaYIW'¶8 ``ow)9aa!!y)7'.@p, P,r+[iQ1QAYydz*8x`X8(FJI9ف!!!!IW׷'` 00L̬,ز)a-q1YYINH X ^¿W y!aaYYyI)G!yV \| YIYA !y!9x``@@`?gi ɹɉ9YI)llL lXsIa9 9v!I11ai.&hX&:J_99W/c_WiW yY!Y99)ǟ/$ܜ(xppp,аɹفaaaY9I Wg''_g_'GW) r00ЬP R? !)7gLJg_燇ggGW >(8 000PА`xJiY!9y9 wgg'G7 96V00Pp8F΋ !!Y9 iwG'ggGGwGWi9gFFxظ`0@0А x({)i!!99i ?7))iWW)W)i9!X0l<< l؈((foyYIG3G'gy ' bbwy!11 $`Wrw^8ؘgAYWrRW)g^) əaYف)$Yg6v*8^WqyV{IG#n)y!Y켤`CH(N؀xI1x/ǃ7_y!iPL\܌ AAI3 !QW(8'?/_ϟ_iG !`|J!1~js^X!qg8?g??K?)yi7WIsl6 '+ֈ`Xٱq7xzˇG7GOo.RWII W IY ܼYn(xX`(a1SfC_G)f^oiI )I9!a <  /V.NX9q)*fvfN9F29)iaA lHAcv8VXyA1a&f۷興 YI֖~i9i鉙!Ap,hS֘&x^[g!96>+7 əAƌLL`!Sxxxv!A^N7/vG*9Y!A1/, <GbXVf`yA>V3矊&^Cח*w)yYaolL̰yAI;8xCIa!vV&*i6giGWy l8gYaVh8fI! fCKڞ+g/fO3oחƸ`&?6&&f.OWII'.r+oGWWGsNN?/c8ȈO2NrK++S_o?_G7g)fpl0sI7&f(wyyOB^> ϏϣZK{?FSg3*Rz? n +'2~n/s:.Nns;o{bRR..nbK?GGgS#kJk ;Jbn~FN s3sSO/3s''_SbRN^((ֆKg'/_wGg?'g?b^88h.3Z +js7CRnRNnr.~&&.JO_7777';"V##b.n3O'G7wG珃Jb²bZc{NRSSSc{ :ڲ;K ""JzzZzkk{[CssK +ZZzKKk +* k+ +:Jʊ {K+ +j ++ڢz:*k{{kʚ*{c k+k +zzzjkk* +J +k *z ++˻ ;KkkjkK; +*k+*ˋ*kj +:jjK R>&Gww7g'_g_3BFh8n_Gg_/[+ + kb>N;7w7O"NNr/O["2.R2 [#{**K KK+RRr"j;SsCK+kk ˋ*jzz:*K{+:zjKkk* +j+k;{;* +:JJ +j*kkkk*jjR~~N./gGg'O/s#{*JBR.:6v&NB+/O_sZR~2 +c_G777ww'+h@oI9I ǟ^^+_wi io2>^fvV((vB/Gɹi_s[;""+fV @xV 9yy9I i)#^V/s*.~:'g'o_Wjx lziaaaYIh vJGioV(~Rgi I )wgK*#SG7WJ6p LlP()!aAay7(`` Hii[>2:**C')i)gOsCãs?g)V < PvW IaQqai. v?7_7g3BvvƾWWwG7bjsO_H,L,`W7A-Q/88hKOk)iO.vg?O)W?z2Jocj۟LJskf8llpFi!Aq17_3fFǷK + og?[Gw7?S_'/:JS7s#7ox,0 (9a9yy R&χǷǢƆ2Gsˣ3_)GG''_S:2*Gg/_׹ll,p,q C6RO)O3[[/Z2/OCk*O'_S?3ˣζVHh&F_gg) Iii i)wLJS;:Z.N^f&&ff&>. S'g?/sk:"BB&&^&6~~rsS3Og_W77gocsjN~nBr.r +{ˋ*{s#K; #KkK++ꛢj"NS7:BRjO3Sk‹*Z.ˏ *[?c[;SO3 :#/ {۳B[b(@` h əYYR&i W矿?o7i !a||NrNJcn +s+kSC +S#BRK/S+s/OkZ + +c/ +b22j[r~2bc":32**KJsC[[3Cˏ3:R:_S#/B:k+*.o?s [#*n. bJϲΛ[^r"b^2 +s[/SOJ +:..[3zjk;/O[;*2sn{{[;n +jrn;NcKZ⢳&n+.2+Jr:Br#[[+:NŽRb*;c2kkJ#;J**B"rr;{j2R#_j2{2ZR/c{*;3"sR K;O?r"N۳:B/'[2.Rn.:Zrz.N[3[/'_b>; +Szۢ>~n2*+B2+N2[Zz^ocʛK[C3nfrs&^/JN2R2˳#.rBrcJ3ckrnK{ffbNϣ2N:?3:j~fR Bok#SZk?Cncsϣ~o^ [J + n>o/.k;R:32S#krOG s +r[3Jn'o# +C3.{/3R++2"*rk+:">^soj>NkC#/ËjZk3ʎrg26.n_{r;;3{BkZs;Jk?kkK{Jj3zcZor~:oJn/{ggkS"Z + +Z{nr*SJofnggr/[oJ##jc3. >>sj +*n>kbRsR^J/S"K3[j+ϳ.SzO^Z*j r2{;;bj{ R2 Kʾk{2B?gc"ʊKڲ +s2nSR +{;3K{"b+*C;*oJ"k*#3/#**z +++k++sKk:#jK*B + +JKz3kJz*k{{+C# * {;zˋk ++jj +z+k +++ʺJK[{K#rJ[3;"Z[*z"k+*ʊ*jJ*;K+z˛{:"bZ +˻{ۛ*J{Ss#; zbzˋk*** #{Z"br2rRr..RBK[o?_'''Sso??Oo/O?''^@L ,y9)9)8`` a!y S+S'_90<\ܼ !iiW6`8fgYiZ&^R3?O_'wWii)7g_9V||phaA!wO7)*Vx (#ɁYW{^frK'g) Ii)GG)I)VX||LH_1y)/#'_z֘` VA1(8HSgGGWiIIɉ)7'׉98 !bZ#g(X@ ~)(HȈh&#aii)7)9!Wp<<qq K+*8_11G8S aaGK'WIi7iL(1qyn/z0@XyAq1Yf.6hwYAi7WaAyL!w)׷ggWɘ|`~ !WǷWoV@'IyIii@xRiYGgG'G)ILlpΗ釟Wy9)3vx`&ww{vxXG))WwwiO?gwWiiwPpo)ζVFk_)g3vRg'gGw7go7g?>( HFj>~~C?_SKBrs_gg_oo +ښSs[soSSso'__*h(ֶ&^f^+[sÃ/?O?oóc3#j*k;{; K#/?Os:BR&ff^N>~nB[3c/SOO?oo_/{* + +j:zj{K:zjk +ڂ2n.R.Rb":Kcッ/_/S[c;KKJڊZr2."Z +""R+ZZ+*;#j?#C{j[KK;[ + ++*+jjnzB +:ZBnnb"j ++KkK{;#sϿ/cC#+ k;jz:K:j+ +++ZrξR2bjKss///3KKk+ + [: +Zb"Z+k* +ʚzbr22".r2.rrrnrb"j*cCo?oS3//*K{zZbb2N6v6f^>nBz csOOOϿS:" +;*K ccKo'O'חV`f66N/S +o_s_' v6+_goOOgw)i9`L̐ioBo V(/9''h 9yiKkwW9999Y2,LV?! oHȈViB2Y9a \q1RXHxfY_67gr6s7_N"[)yy.\PƹqV 6(8&!9 ))_Z^6&r"&~oy9׷)91!,iA Vh(& aifv R"{ki鷛6zy9i)gWyfl 0`Ȗ*)ai?_oRog'O:wI9 I!h|Y!W0`((?Cς( +{J/g?'/ 9I!a^<,X!afH j997RrfF)燇KS׹YI 9!p@hɹ׿xx3~[IIG׏V.?G7gO)w7iIi(`pjCKVg')Ig^FB#{G)a``FZr:I)?B +v>zsG)g{NRr;') IIyaI`@p(V~;iǏOoN6Z~SGOǿ/.³)i9YVh ȸH(soWCN/O[ 'gOsKO_"j +SOW Iy &fFָX`&۳7?cR2+[ +KC_O/b:zZ:gW))WZfvhHf:gg'_O/s3cZBk::csCgwwW).RظH~c_w'?3ckZ;[/K+ +RJnj +oOS?S+{ ^^&Fs2oiWgG soojv&V(66/?oj;Oo +NRzjJ"*gg7׉ Xp0 h(VG׾N3hk;)7)inn(Rn&'O.2>^c+*/O/c/...N~" +cs㊢rbZz + +Jڂb:* C3#[{*:ڢJjj+kk ^n +Sg7w7gOR~^(hf66_oos+CrJ>OwwFh Hh'gח_*2~憾n2w77G'nN&f^>noS[kzb..RBsSS3s#JF>^br3ogGG'oO_rFHxx8hV~;*nn"JGs[:f^~rzkcS//[zZr2z #{*JB&澞f&.Z_'?OSSoO?Vؘ8ȸh£'))b2rRB*3_g_Cz&&&r +*s:*K#k+ Ss3OO/Cc3oOgg"X@h(R7i )O&^Cgw7wGSr&(h(ho_7)w77Gg_'_oc?o @f&#II9 i#K~~~SoOwFhƶ~׉WW))Ƿ7W 9(Px ̌9i !'W'ֆSrzjBf#ZG)Ww_g_sO/_JSG/X88JSg wWO#w*S?3/sgKJ32Ow{w[Cʾ^[>B{hhhVV^ζn#c?_'_)WW7W'g_WwSrKCZ^2~3.&Or2fNFzV㏏>3'#2'7w׷7k'IS/>j'S?'s&n#+C~.BJbb*r'"3Gn^&Fo_Z/&Rgbs)gO.c:?sfKSO3&S>zKSgg3bZ.‚;r?>~fo:S>R2ۿKϳ3J[?srgNϷB&ΟO_2"gc^OjF7/ +JO)R>*_.Gϟ/rN/"Nǣf*Ƈw.b +#sO C/3zN_rg~;jRvSsoC7Þ)?&KRNRzS:n;3K>~_cF~r_c#JJ[3Z?GSC".z?zz+3:kJʋf+?r>OJr:Z:rBjJjKKZ*; +z +Jkks" + Kj:+k:bk#{{Kk[kzZ+2BJjKj + +" +#+늋+K;{+ + +*{k+ +jj +z+J ++Jjz:J + ++ +*+kj++kkk*jk+kj*:k+k*+*j*+*+ꊊjjk+jjk ++kk j++*+jj+*j +ꊊ*kjjk+jkK K +*++++***j +*Jjjjz*+: + ʊk +*+; kjk+k + JJ :+:Kk +;+jjj *K+;J+k* k* ***kj*+j +j*jjj+j*+*+kk+++k**kkk+++k+j+j***jj*k**++*++k**+*****+*+***j***j*j*+**+k+k+++k+k+k*+*k*++**jj**jjj*j***j**+k*k+++k++*+*+++*++*+*+j***j****++**+***+kkkk*+k+***++*****jj*j***+***+j**+***+++++++**+*+jj****j+j**+*+**+****++***j +*J&^7 ;/*:kkbbʊB2zZr* +:+z3k/z/2: +B;c: :;n2 fCjßs3sKr+zR.:R[bK/B;k;+ + #.#.Zzk;*ۺjjKZ"r>ZK;sOO?o??sso//+X(V`0x V39YٹiS&6(ֶF&2S7WW)g_?GICPXhX , ?gi!ayIg&6VF&*C˿'g_so/'7Wiig7WGS7 @XL p 'waAAɉjrBb:g7w_'oG77Go3bk{3F00`XnSwiy 7gcj3K?)7W'/Î3bRb ?Sgo6z'O>RbvvR'Cwig7)_颉WzwbwGWK +2/.SC&?rv6F2K2rn_?F?ˏFKr·' *_ONsn{9on_^B:o3*i:~^v;'V:N_&22I&KZ_' V^gKFwz'S*.{Ssg(9hV'g&Þ)^Jr2>V*_gN6z).V"v_^i8O)&/c^?O/6WƆORvW.K7hOo88v&Gv VW.&.۞*~ʖz~ɊV;?Cr([{_VC)F*/oOzƻWjhR)R2V_v9'?yxS?so3rs^c(Ÿc~o x9~ZN^_hiS2??.&s?~kwR_f?HrhC9_V6VȉZFks6f^V7.~GW'jH&㷂jSS +zJ'Nnf.Ƌv +?? +g?v'*^N. +2+g Krr*SJsBzK B2zSnϻÎ"c3jRnZccoÃC{{Kk + +k+[ ++j*zc*JjZkk+z +Zj:bk"*Z*Jz;:Kjˣ k{j; +j+K*J+ʻ+ +j+ +ʛJ**+JJj++++K *;*;J+*JkjJ+ +J꺊 j +*:* +ˊ*k***+KJkJj*;+k*z* +kkk +K +KK j+k+k*k:k +K+kj++Jj+ + j +jj+*+jK* +Kk*k*jK+ + k*j+++*jj+ +k++kj*+ +j++++**k +k+Kkkk*** +j +*J*+j*++j+*++* + *jj* *k+j+jk**jj* +*+*+sK; &_'C;+NH{.3)zNRkJ+"++z {ʚk3+zJCCJjss ˊ2K +zkK ʚ + +R2{{G/sCN&&BrJbr*Sggg''GgG7G7L,(BJYY'H(V>) 99(VGiyyII)g'G!Yi,l<<ؚI-aI_x 9aaW*^xhS׉N()w׉yIw )'i$ IG᭑O3(x`(zaAaI)7VH( O:`(aɷ)gr2'i9 yy $ЌжaY```VYYaajVH^g )o((hvr()7WI2־oJ7 7GGWWW)\l1-! !7H0ffF)77ch9YgkrFhvrSS΂.+K7j'_W'_g)i iH,@ Y[pHgWaiVFfHyI))fn2)3r(8S)fK/'_wgwwW@<|X™9F((` faII)Vxf_鹙gFF;Wg;~`h wW7j'g7c/')G,|P._!q׈(Arv(2 WwgV*g2FNR6)iScJ^ +g?[i)GG gf/iYR@a.VV^^Yibfv׷/JF^2OO/( i_g7oZ+G_gIi#LF9azHsiy!i6h#WI_&"wwkNf&?+w_"&2i)SO3b7gR@,pNOW)JV8(fO)yy)/N^f"7>~nr +[/orzc;H67)w'Zf&zkk3['7GSoGG,W9y)jfk)&&ΊS_Wz*KconRrBz*#[ۺ(/iW3n~RWwCs3O_go':p0zg9W/>6((~k9IibN2*/'wwgK.R:s3[kr...V7;2Z7WWSϟ'G__G7c,а@ȆWII((RS9WgsBbbCǗ7gjR˳jBr2bz;jfvfnO'OoKb3χg'oSOOO:V(N?CzfR +cOg73[ccsCs zz"bZJ +*zr ++jjJK;3/s/33óc{+jz"Z*+ +2rRRNN..b +;oOOOoS3{ˋ+* +B"zz:J+KkJ+ [; +.k k3{KK;+ {[;k˻kjj:Zr22zzJz+ K[; k#K:ʻ; +* +ʊzJ*k kkkkk+K;[;{[{jjJʊjj +z: +*kk+*jj*+*kkk*Jjj***J* **JK +ʊk +ʊʺj*; k*K J: + +Kjj+ j +*; Kj*j*k + +k k:{ +:Z*jZ"+k +*KKˋ++ k*Kkkjkj +*++j +k j*kʊj++**+k+j*k*jk++jj*+**kk+k+++ k+*+ *j+J:Z2^֛CS/#N2+*"2z{j;j/+? +r{sN^_[oo;z3"RCC:#*Jo_BcZb**"Z:>r? +:K*sz#Kb +k#Kj3:+sKۛ[sK:z˚b:zjkk +;b + ۋJjJ{»K*jʻ z"[{*k +Kk;k +{B 2 +C[[:: +jzJʊzj+{;;k Zۣk*jj+Zj: + ++ K:* k;JJ:Kc;bZ{;Z*ʋ+zZj[Z +j{+Z*;KKK ++ +Jkjkښ*:Z* +zZۣk + Kj;j K +JJJK jzj*zz ck ;k + +z + k:; bj{BJ+J{[ j +kz** kˋ +***jjKK˺*+*+ +JJ:k;K +zk ;*+* 늊j {{":J+ +j {;+J K* k:J ;+J + +j* + +:;**jJ +j+ ; k*kkk+*++jzz+* +*++* *jj k kK+*K *k**jk+***k+*+kj++ ++jj + +*j + +* ; +k*++*+*+k*jj** + +* k**+jjjK j ++**j+k+*jj ++++ +*j++j+*jj*kk+ +*+kk +**+ +j+k*k+***+*++*+ʊ +j*k+++*+*+**jj*+**j*kjjj* +* k+*+k+++kk +j*kj + + + +j*k***+**+k+k ******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_german/cause_86_loop.isdn b/tones_german/cause_86_loop.isdn new file mode 100644 index 0000000..70c2726 --- /dev/null +++ b/tones_german/cause_86_loop.isdn @@ -0,0 +1,137 @@ +*d}EьDH$]aB;oGK +N>2s.JC2JR +s{o:Jϟ?RS'fzO.>ZfoS&f3'Z.SV"G7~RO&f>{ +WbbSsnR:?sK⎆n?/bc?zN?o2/7jnKO.:.r>2z3zR?g +ocBZ[[3rJ:JSN ZRsoڻcjΚ +""3?"R*[[&#/ۢ.CzZ* ̄2R"J{RZ 22Csk"N~zo3/O+Ξ.3۲Nڳs/#Z2z ++*Szڂ#Zj{s˺nZ:n#//Rj .n;O/B>NbS?':^ zRv#J.J>{O~Ko +>"gO2[Cn&{sgʆ^ow7#B_S ._r~?bnRb[3{KK:Z2+kj"#K2/ϊ~ncۢRR++K* jcOC*~zsg?knn.z/ +~f{'_^n3#CC2>v3322s :B?'3 Og {CCb.S.:;C[zrRr"Z.[ NZz˃~F*k.&ΚC{/C+C?'g?'oG'SK;s33O/9P39Vs@8q1ki3s7gNΟg''g/)7OS_'GɹYA`wrPHIj _2S_IY &&R((/N:/RS))Ggg7_w9!1y"S/;'G I9YaV' 9aىG.K&z J3Gi ÀHX`C`c7jgYY Iy!y'^~N>&2J:O777 IY(~6XHHxHH>^JSw i)gOO3RR*c?W ǂhHhH(FJ'GWi ) _3Kzb:Z*/S3IR'JV(VxfNrg'i WWW[SÊNR: + +C/3緷wwW2.V(h(V((Ύ:KGǷ)W7_C +.>Rbۏ7wGs{&F(hhVv2k3?_wGG7g'ggOOG^{#vhh8hF(N2 +2ʳGWWg'?*.Ύnr2""+;{3os#3CCC S3F(F8r2Z3/Ǘ7'/bo'S'[giiIylpX'&H6v `?)wi_jGi)rnn^^O{r:Z>^"s3OBr +ڂ#s;~6.COc_GW'GCF8vf(Nڏwgg_O..;σ'G)11A @.)YW.xƞi!熶"')y)^rnRSg'j^&B3Skbr&.N/W??χf`@fzFhB7OoOGGGwRVVfro_/znko Y!!a9^줌G'Bf bP0VoIvI)IvS¶V(?ɹ_OOI)gGw9Ad;h9aW, rs2 +)CV>'G3陹6bN8(n++o)ɉiaAah$lXRVN9gh,Vn +Wz.oWI~^H62S{/3SB;_G)I!aa!!YC vȣrP({ WZ v3SC_'Sk IyI i9yLlh`0@ B^83B^R7))W))wGo:^N"br +cO)i IYaHp,p@@h^Nii9Y!! 2r&V&^^Nci 9YaivZȀp,pp0x8 iy!yYiWO+R>..&>S?'Ǘ))iIYH6,,0𰰘HO)))yY9Wۢ+:RJKOWWI99Ij(vpP00p@(NkWW99Y9ɉ)WW/3sC;+O?'7)9CVX0pn9yyyyIi׷'/;[o??'GGFhHX@pp@`H({)iyYY!!y)?{ +oSs#sk +.F舸xX ```XxVv&rWI9Y)ia!9 gۛR^&.*.RzN((vVhVV(66F_IiiyyiiSΊ>~6~fFZ^">Ɔ^R_?G) wgGNJS>Z~Ngsb2(~b^#~2&;C)kFcn)Vz:[VJ^^;+Rγ.n7'^rƟ&G')*;BwGF^+Br*(okgN6&v>ig_V3~g og7j2_ + WKSi*c&Swb˻7/O c_{;'i;NINR^wgvr):zj/3_>#Bj_jHW_^n?òV&i. )7h_/s +bVr__9&c3?:Fk'B'SK&w{'k">:C&kJ'_F_3 rG2Br/cgR_疂cJko?^'Nn+z3Nk??&Z["c+n#JKC/zB.*ZjZcJk2J#ڣZK:K +; + +{ +{cZb z+{ +*:ˋkj jڋʻj** +k:k zJvkn/G3cGc>#ro+" R&Z3vrK&?JjBj:^"[3*#wS:n/^f/:⎋_o^r.?*&k  +3ron J*B**J3oz*zzsz[:R.oR +g/fR +/r./2skB{C:R/sKbcbÿ+s2z#z*Rs/{2k.#۲*#j3z;{z+JZ[/N[ck>k*K3{#br3+>Z#R;bj+"3;2[B[j#s +o zC3ʺB3Kzz.>s*N+Z::js{ +k :b˻.#rJʣ㞆/Zjrk #:#3o3cssCs/Z΃O3*[k[{Z + zbz>&(6rO_'wGGgG'g'_/_c#{#>I`@ @ZbKYGW)W?*kgg' +rn~&6^"K{*c_gGw))鉉y!Pl,p`_1Aa8BrS'ahG IyiW) ya\$ lP1q9!y?`'!Aa)[fȸv_I i9SS'iya,\lpxA!W`?Wa?F^J.~rw I IyIWi i@,|<)1YIVN# Yw^N[/3;;ɉ IGgy!RP̼PF'IaY9Ig+^(_鉉sZ_7)ɉI)g'w)I) Pp0@@v IwZˏ_wOϷ_'O_'7)7osǟ(Ȁ@@ 6o_wחG/s'g_ggo/oS_ +Ϗ3gS/?'O/2r2f6V6fv~N{;sC''gg?G'g_'sc ++"RR* +[bs[co;n{**bº3NK2 +s;++/~Z;+j##kc;Sb2s"ʣ?[/osZ;K+K{F#3ۻ_R?CJ2s#O+Nz*ڎs*;[*S{*//{sr>o&o.*k2/3'r+# +2¢^2.Rrr.22ooR3+coo*s/s'j?~'~JKr +CSη.NjzRj&ϖ.;6{cBjfCos_2g_RC^^B/ھv;#zzǏ;zZ*j's*K233n.2;*?z_6*cCfFSZ'OG'?&w^^2>"Cog#JNs:'b +{r# ++Vs?Js3_CRKr.:koʺ{ #j2nbK&:JkczNzڛK~OF;. +?ʞKbJRCJZCr 2ڻ#⊻KzzojjJbR:*c*j3{ +;*oCOS~&~2Cs#;{ b"sO''_?3rN&FFnj cKۻ;{[{~^gGw/V(V66f^r/[KJ*+ #S_g'Ook*.(v(fn?g_W7iiiiWf xv>22{3#J&&*'W)gjr.nnrzJ +kR.2bz*soOOo/>Vv&)w)Wgn(hƆf&&f~n S_gG7gS">6*Ͽ_ǗWi I9jv&κb^(n;yyIW n&nںF(6 +/7 ɹI9yyyyy9 n@p,@`6΃ff>Z7Wi!)'3r8x(v&''w 9Y!!IX0P@pVbG׉9yyy)hh.{Ǘi I!!!!!YyiH,,,@`IYaaaYI)_[ H(v治w) yI h@0llP@`F')9y!AaI׷OK"VVֶf?7) iW7GSHx@Pp0@h~sG9aaI闷翣RN~>R"J3/g'/#˺Z斈8X `` (9aaa!i)3+2.Ξ^~>nrں+;Co3ûkjR.>^^&^&&&>:_WW)WWח7g?CS;"R2R.nRn..RbzzZk#c{{K;j+kz:"ZbzzJ + {cc3sss3{K* +zzzz:Jʊ +jj* KK k kK k +j +JZV6RS?zSK;{*ZW wsrbr>8V7'?X#(R G&V_g3oSJvZnn6fRG.?i#o2Vv?*Sj^N>+ϻoOJ/ >Z;K2Oo/뢛3~c[B nz{R/rˊRZcfzr>;'?_jSCK?Ǐ#o>:*s{;:"#n."#.o@0 `XcC# 'g'h W'Y)7gIg?'oR"3K*_Rc3#KS7)sx,PrKwyy';COw?'':/g'G)7g7G__Cˏ3OCkoSg `,l l0 +i'wwRzɹyi7oI9))gχw?+o?_'79`0(brY!O>J?wIi7v^~vW7wC/i7Bg'Sg77_lp 0R^vI!)WnS;9 wWw*J6~)7O?'LJGςkGG_'G)Wx,xpH舸63 y79׏WSgWWs_Jh(/&_G.JOO7~g''Hn8@8 Ȇ~Kr+w w7 W7wWw7_'GO3"njr>nnRj#Ksg'__oS33j˛+j6*ȶFh8f& +χOG)Gi_:*^2&NRs/O_O??3{kz;"":z.^N6fNvf&^*3'G7w7G7?o[rN>NNN~Rr"zj3/oS/S3[*:R.>~&Ɔ&R#gGGGLJ_o3zBRnΎ.r2"Jk#3ss3㛻 kjJ""2nnn&&^&>.j#''gǷGGG矿S +BRΎR2J[s33/sC*z"B^&fFFf^>Swii)wW)G)'3oON&6:j3ZSjKg_OC/o?o3O'(cx ` ` H֢sIyYyׇ'/Jfr6F. +_GwGG?+ s3cfS( 8``RI9a!!a!Ii_O#vfƶ~.n.S?_GwW)WW)7gg/S/&(XXhXX@x&+IYa!aYy)7gv6.^λ )GGOS/K#z/貆 `Hx@@ xHfIY!aٹI? &v(H8VVfnkS) ))GLJS;S(2(HXp`0ظHRW)9aaaAAa!wǟ#&(h((Vkß7wi))i)7Gg33'ZO[38^ 80 x^99a!!חOˋrΞZ;ϏOwGcǻ>2 jRnV88h6[?'i9y G'CF6&&~.RN[낺_s3#?χ +jR˳Vv6hhV^Rgw7i)w)o3{2BnR>>Rbnsb2kb +// {SO"ˏ[rk?â*Jrf6 +nJǻj7?'OO +cŽ*2.*Z>.jBZ?g?c'{_cbs+i>RΚF>JV^^;k:js"jBr3jo'2+o*_b?o7V;gζ.k +R_z&"B(&+RrzJso/_os/ ϟbjo +R{//C{&{# 6joc/:k{BzhhF(("n OwWWggjrr>jsc'g{ZgRG??"og Xxx@`V>V^nggCǷ'S'_c?7sS.Nr.+sC'_3s')WWi anPPlL,xvYgwsGYaٹ 7O^H8H(~ +_7w'_GG)I99I9 ف.||L,o_&n(rZ~aAihv^Fhr.o? G)YIiii99| ̌_wYi)fV8s!AK6fj/;HW) ya i iI8|,, /)9*3H)aAA)S &2;S+zXJgws''WyٙGwi )i)$ܜ̬0V)n^hVv*)AiGz~+* :NX&/gGwǿ)))iחi9a\,HG?fkBffiy99)'::rn>HxF_?7W9Yi7GwwGwIh < ,,0'bj*"cWYaYYy )c/*>F{3's_Gw׉ I)w_'7i@@8h8Hvj/?gW I9IiWO&6v^˳_g7) iWWWwGG6X@P0@8^GiyY!aa!yiw"V(ȈVvFS'ɹ i)Ww7':xX000@`V^'׹Yaaa!Yy9W+N&Fhh(VvF^ )II i)WG'''HH0p`WYaaYyWJN6ȈV&R+S)IIɉWwGg>H p0pp@`(*IYaa!yiWS+F(h(F&n*S_)iI99 )G_sh `p0p@VaAY)wΆhHHȈƞ 9 WLJ'ob8 0 v^Yaa!y ǟKHȈrOg)Iy99I iWg:f`0pp~7yYaYa! iiS;^ƶHHhvf{_) 99IIɉ)wG7@,(BW!Y! i7c JNVVVV^>KOח I9)'O_Ǘ@#,@ЬȋkIiaAa)9/"CRv6v^ROgiI iW׷LJ'w?rpЬ`@w9!y?{&J>&^~Fƾ^riI i iWWwG'gGh0P@`pWi!AYAiO3:bfr>zn"ۏ7)ii)WWwgg燷`n`X`087IaAaIRfN&6r&N2.:rgwWi)))WGG__'C 됰8а@xbh&Iiaa9):^f~f>.&RξrnRnz2"C/?)))iWWg__K`p0@֞w1Y ))[>bf+^BnRBkϿw)iWW7g'gWVSl , @(f IaAifNF +N3.R&6n>+wi W7g''w)0VL@LV@p3 +91WiOR+N>_c o N>&fF^7G7#˃+"bRbrV(v(Fv6Rkw)i鉉i)חg_OS:^^^N.2z{s?/c[z.>R.:{#3C[K*"Br.2*3s/OO3oos{#;z2.rZ ++ +kK* J:&f^NRkoGwח'#BRr+ˋ{3ocS//[[JK;BŽN(hh(vf2G I i)7 :>^FF6f>'/// +::zJr(V8(fb3 I9yyI i)wSb^vv6F>.S'g7w7'_?Cc{H HVNC? y!!YY! )'o 26hhh(VƞBKo_Ǘ)iW'osCCs(x 08c7!!aay9)ǟcڲNfHHV>jg 999 )_Cc3/3x8`@00(!aaa!9 i_sBNF(h8HhV"3_Gw II iG_/3kk#8ȸ@ Fn/GWIY!!yi)wgO2V(hHhVv:kG)iiiiWw'brzj^hH X 8Ȗ~WYY9IWG_ϳJ憶v(vf_77WחwG'3:Rz##;S?HH8`8HHhnG))Wɉii)W7LJ_"&fFN~" #[{'_?W'_s;^2#>{rNh֖hFƖ3w7wחG7ww7g'S +J>r&hv&>Z2 +Sg?33_rcZˢR;^n~FKnFb3f*nóo/SCs_s?ss:s+&js6'~bs[+3.jn +:+oBKJ?2[gwg6:?g :#hz&sh燶?{j ogJvOr~&CǖJ_)zv +_fώG^7{/^.w'jINJSo?6('HI_wnOkC#ώ.hs*&_?Oh).^'r^rVfi6^j)('?2>7 + +R#&OoB_."7K&Ob^ÿNGF>Gf_o3bf'OZ['.K.>i?6. FG(7(&S^sKgV/v7f7jƛs&z[BJBr#ns_/>fcfo[k3"b{ZjZ;ò +#brZ3 {kzj*kKzz#+j:jj jkk k+* :*+jj*+j*KJjj:뻺+Kjk ++ kk{ +* +**++*+*jj + +k*j;*+*ʻ :**k** **j jJ*:**+ +**k* +++j +++k*+k +k +k *Jj+zk+++k +*+kjk+k++K+ +j + +k+ ++*j++JjJJKJjkJ**j*++++*kkkk*kʻ+jjj+jjk+++* +**j+*+*kk**+kj**+ ʻz ++*;* +j +j +KzK;*k*+{Z{k{zfBORNgO?s:ʎ +RSNڢs2/~3k+.[r>j+ k. +:3 C S*[ʖ:Cg_ 'ǏscRƒ#:/S{rZN2rrrš"rb*jc3Sϟ??_'''_o/'_/𐐬xg 9 w3j"nng7WiioBf.6(oR"֎G_Gg_7_?'77)Iyy+  h3G!9yV2gi!!g>(h(v2G7GK2>&vf&~KG7ZgC*s)g7wGwWWi Wlll,ηI9ayWw&6h6N+'iYYIWz6F~_3B6&3:G^'2/Ͽ7g'翟_G)WwX@P p#iYaY wsV((>#IY!!yi7ÎvVv. g7'/jΆb8'w_WgZro +s{7)?co')n &_a!I73^(^Yy v6ƞ2GC*&F66Rf2wJS?7G_7S3o_`@0p0V999iwz2B /wKN^~Nnz*"^+^:z3O￿gw'7Ͽo33/?O?/[~H X(^:_wi9Y!!Yy9sb..ڋ{CS//KʢNF>6rnc''GG_'O/#{#/?SNhX`vn9!!!iwg/~~>Rj3oo/s;"&F>6J2JgLJGs3s##{o ^X`X8rY!!yIib~~^nz3S//S{z.^ƆZK_7Ggg?O[c cJ:뻻{3/OsvHX`` XxHVZI!!YyIiwg{">^^>nrjKcCSssn.~Nnr oggg'/+*j++k CsOCFhؘ XxV2i!!I:>rJs?'g'ϣ~ƶN'g_Sã#**+۳//?/3##csS?x00VZyy) +nfN"_wɹI)7;.Z{SOS["vvfv&~/_g3 *Ks?__S#[so?S b&8@@@86 +w)iw"Js_) 'k~r[˚B^f&*/Oo/ *KS/OS/sssۣ3Ã3/?_:VX`(Ǘ#jJ+;)ii׷'kzB+kj*RRn&~2bJso//#k*s///s#;ۻ;3s/{N8xXB+[ooOg_GWW7GgC#JZ22r2rbhoC{?3o[O#s;jZ:*K#K Jڲ2f6V88(v^>/SCowwGGgS[ +:z"2Brb.f>v&>ooc+/C #kJZ"2"jbb:Br.B2.r"Rv&>#*s/gGg'?sj+**jjb::j:K  **+ +:Brr.R..b"z +j{c; ;cr.br*:RR::sS3/Ϗ/ócc#{#{k +**:Z"ZB22Z2rBb"bJ + +j+KK** {;kk + +zbbZj**+** {ۣc#ۣccKK k+ + +*+k*j +*k+ + +::zJJzzZ + +++k* +jKKk * +JJjk+j +*j* ++K kK + { K K+k k *jJzzzʊ**ˋ + + +++++* +* K *j*jj+++**jjjJj* k*j ˋ* ˋk*+kk++***jʊ +jj+++* ++k+*++ꊊj+k+****+*KKKKK+J +*J:: + +J+kˋ;KKKK*JJjj +j +j+** kk kk+kkjJ +j + +ʺJj*j +*닋ˋ˻k K +****j +jjjjj +j*+kk**kk*+k*JzJj +jj +j+++kk K{Kkkkk+* + +JJJJʊ+kK k +***++**k+k+*j+k+*jjj*k+jj*+ ***k*+ k+++k*j+* +Jj +ʊ**kk+ +j+k+*Kk+k*kkkkj**+**jj******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_german/cause_87_loop.isdn b/tones_german/cause_87_loop.isdn new file mode 100644 index 0000000..537e8ec --- /dev/null +++ b/tones_german/cause_87_loop.isdn @@ -0,0 +1,232 @@ +*d}EьDH$]a.ZoBΛ/2rZn +jn3SKJ*CS{zk {:/s"[{ckC3Rr :.z2//JSʛ{* +znz#^3rR*#rrzZ*2K?[ +Z {[33KB㚂 {>+"bzRKj*"k[ +SJ:3 k*rNK#c.*#S[SC3[J{jZ;No/ .2SJ2>&^f&N~2 3O_gGg7GG__'O{_/Ûn;KXpx(zG7)!!y9iK~>&ƶ#Owwwwg3S'__O'i@ <<쬬@(1A1q w?Ff^^"b{(ϾC''gOG))闉W7_LJgOG)9Y<$ Vzrq-qmAGZvֈ;?bNJ_#+'?Ϸww I9 i)7_gw9,V|$LLlpX(&Y 1yj&fV'F6'2GGg)'II)I9))wOKjw@PpXH9IA-q׷I)b>R[j +S[_gsw'G'?OSO/Cocbc8@` HNfS? )9YyYy9)GG_ZNFv66NkO'7wWWWח's{.6h(V8hHhv6rsg)ɹII i)7'okrN^6V(^n2kc_w7g'?sCzJR~~6(VF.#o?GwWiiii)Wwg'?kZ^&FFF~{#3ϟ'_OSs# Z +B2.nnn&&^nogGwGg_O#*rR~~^^&+3Ã/SC/3;* +bJ:nRB2&>^nB2+kssϳ''7g{SsJ^nκ# ./Nkfsg n_6"&c..g3GG7)Wg_W^3r&bfZ +?{3 +?7[:&gN:GX^x8 hhOs?I鹙aYYYWiKfV((FF gOiɷGW__w'Sgcx `@ (fIYYAaAYY'nV8 xXHfVR/7iyIYyY W3h@`p00X`0;Ξy99a1)O.X xhf'Wa!YYi)_'쐐@^I!111qqA9W&hx Xxn_)y!a!)'7(_Ȭ pP,Ppx2naqq7"VX`X@@X8&)YaAɉ'`P,lXSw1aA-q1Qa9orX ` FNwi!!)iwLJX_ lЌ^'')aAq1 gξ. hphX[׉IaYaiɉ)wi)fXvpP؀l00P`HHII)aqa1!!agg_svH8VJǷ7)w77Ow2`8`p`@ (')y!iɉg#^&6(&&6㣺7痿G/GGOO?6HXHX8ƾ&bG)I9W)W7 B62nnj&./_7?gG'{7/+.^vh8hh&J?'')i W~z*or~^[gOS3'3+[+[K/cJB^V(((VVVFF +GLJwwso3?Zos[o3K*[2{Ƿ{&c/O'_.>hh(6~SO'w7WW_/{ +"jK3K&_~Z2S WwS/>C ƆX`8Hfhs~i)w))WIGS#.B&{Ͽ'>;S2/O3io)@` ^6G_əW?)g:nʞbs?3oW/ϛO7Kɉx~0 Xx&&/9) 9)7G)ûb^n3[gG__?W?w7G0h 8R +)IW '_?c;j_/C 3_g/S˃3/ xx`x8f27)W)7G?ggfS#'Jco'?o?j*㊾"~Z +6V^^>6;_Gw'GgGS?b+.kncc'S.kË[jN:Z2"2nJ~Zrb:rf⃺+2"s;ʏSKoO:Cß_sÃ/ j"S3RnO{;kz+"fZ{#K~Bb"ZnZ;oZs?3/3[n2OS_KbR"NO+kn+s*N2/?#[N~frb&C[3J#SKsZs3.{C^_fr&.K/.n& +k#cssS*.nc&/ۻ[?CRZ[[*3#JJ;..zoCs's SbKS#r~^.ڊ>;RBSJ;2_3g+osf2~oj.S'C +ZR.ʾ +BK +++OS[R^2"ZSϣ3^OÛj/.&rSr&&bK#"Bs +z2& n +›+:zK:/J*K;Jj?SK:Sr.Z.ks +OBr2+ڲ+{o>**KkN?BNrs[2KK3j;R*ʋ:z*n+;C2/Kr+;.oJ3So222bR +'*&['3Cr2SCBr: +JkJR_>so jz#K.2+.+rB Br2S?o>:k*CO#S#rRnnzRk.R:kkc#k{kC?K#K R:b.kJ+k/nrs:RJ +2r"*BBkkK3/Ss{SSs3/sSSS[3OϏ?'w8XK&/w iG_7鉉)gsjRCO''G7G7il\\L0fJhHR'9 _*+1qAYwZ`X(j7i*C !!!y9yyyal | SB^戸N_W'C){ +Znȸxn_)緇yYa!ii y!@ll֎hhcii!)9a1qi_ZڎhHȸH~>"J 7 9y!YIiW yYG,L,Piy!yYaA!)7Wsb8HH8hwWW)yaaYɉi II^,,L,lHGAAaYyIW7_Z^&F(hh` Vv~OIY!!!!Yy))h@ଌ,L,p hWY1q1A9 )o6(؀hR/W Ia!ٙI )'`,PP,`H7)9Aq1AYy W_"^F(8XXXh +O)Y!!yIGCʲX ppPpp@ 8VJGA1qqA)_z^(ȸxhVwIyY!!9N^v(V(88X ؘ趾K_ yYaYyɉ3 +^6((V6Sg7)))W'&((V((nR"z /SoO/cKk* +zJ sSO?Oc*Jr..2b"˛{#C3sc;*JBB²‚Zzb+ k˻*K++:J +ʺj**kkKCSSS3C[# Zb"" +jK;;;Kˋkkkk***+*j+k* + +J +: +jj K{{{K{{;{K kk*j* +Jz:z: +ʊkK+ + *j+jkk+**k + +Jjk* ;+j*JKkjjk: jk[jK ;+Kj*zK* + +*:ʻ:j +Jۺz;kk +˺Z3j:jj* oʣ:{ +K"#:*Z++ŠKz +/r*úS2*sbJj**rc/[R:oc*#J:{[rkC +"K2kB_JsrZsJR;NS: +j/ +j?ZbK :~oZ/K#r*^O[ n +?jOf3S>οo32 +'37 +&GKo㆗N>..& +~J_SBw/n+&dž&'BN>#^gb'#r?/'^3Rss{OO6gR#FSwfo{j. Ƕ& +WƇOgvOBRFVG2K:R:cgf/S2OvJ{OKN;b'&WG_ +_n?sr/?z*2 +~SK+o_i+^RONH 至J~>f'nWgsr#n(玆_['7O:g3"k¿zb"VR.GK>g+#b+ +_>>n+rg~zJ*3bscsGJs?S2;'"NJ&C +^s?fNK3n'rsJ"Oo{bB_/.‡jr2~C*bsσk +ZN.;r& +R2;n^&.>.Oo7GWG'G_g'[Ãk'w`,P HG9w7_kvFf?_GwחgGWwG777wiАL ؆aAaIc^fK)iii6vV6/gG aa!yIW!yX,̼ HɹAYg&^nI)On`h.oWi9aaYi))gL|l,iay!y)Fs7i)i 9!Ox@ ׉9!!Y9999Lll,`WAaIWWg+~9a iOH`cI9ɉIy!!!!a(Ќ\ 쐰>_a)_si)I!1! ώxpIYYYYA1yL\| @`&YY97KOG99ay`p0 W9y  aaYA1q90,<\\L 069ى{O!!!ٙ!a!?&0wi 9!Yq|\Vhh8&ÏG)GwϳâR2fVVhhh(v'w)WW)iww'SJN&f^;'J3i3SWz~o_;NFvHȈhnb#SGWwiw)W)GG_?c?>>^Nf.>3"_G7/gCgggw[2nCn6HVH 88hi W) W' +/R&N^f>+B'gG_g_'g#蘀@ XX Fۊ:'i99I9y ׷)g?;S:6* _GwgiWgSS?OGw h`@0_!YaIW)73jnR~hh&zoCG׉鹹)S)``H0,p0xfj !ai sjb*2 6VGk yI !iw WO7i@X,ll,0V뉁aA቉ɇs_''z[3VHx8>/ci9!y GG)ΰ 0l ,PȈR)aaAaIyg+j/Chxx(v2og Y!aa!YyI7w7GW iଌ̌쬌 Hvy!11A!!Iwgw׷KSfָ8(.۟WyYaIG7G _X`Pll,,l,p V!!11a))sC/*vhf_)iə!YI )׷''XXPАPXiIa!9I_ovHhv&κC/_7)iI9yI iחǟ/k>(HH8 ``XgwiY!)s +N(hȸH(VFN?) II g?3+bRh88XXxHfN_)IY!!!Yy)7S&v(h(((vb +7Wii)'?s{z.~Vhhh(V&n:S_i ɹ9ɉWw_*BR>F6vvv6f.B:gGחǷO +J>>fF66vv6ffº#'7Wꢂ.>^~^.ΎZ:3SCsSoOo3K *kj +{K{ +:+:ZŽnn.n.RRBʋ [C/OϿOϏ3[{ J2Jbr222B"J*+*j + +:k +ʋ J˻ {##cÃC#;;{K*J:Zzz +:kںk++*ZZZJ:+ +:&?__*Kr2VjO/cڣC{zKzk*zK ck +k++Z{ z:c;b# 2ۺ C3.NK+RN: .n^"rk+B^r3cR/#OJKCjrj B+2zoon[^. +2zok~~j:jo3soj/*~JNR~rbKKobKsgF6R'SzK*#s;RZ+zOoCG +*K2B2.2oK~cSJڲ_ ^Zھ"놆^~:/g ')nNz&z2W'Rnf{*ZoB((V8Vf&wWw)wG/g/s:2>^Nr ++3g?"7:j'JrGgv` 興 gi)y w7W'o˻#*fN&66ƆBZ +sS)73Ƿ_G珗O3__VF` X`HV._GyIiəI)i7g+{jZ&^(FbKCogGw)w7'OOOS66Fv h^/g׉ɹY9Ii)gO3JΞfFvV(hhf7Wi I99ɉ7_6VVXX`@@00@h6ʿwəYa!yiSrf(Hxx88hVFZ')I!!!!yi)חF((`@АPPppX(_9a1a9 o Fh63i!aaay W?hhx0ЬЬ,P 8(Wya111A!9)/K&FVȸXXXXH6^Bsgaa!I i)(,P,pȶ Y11awz~ȸx XxHh&r_i9!၁a!y9ɉw(@,P,АpxF YA11aIiڞh8xX X8(ƾzo) yY!aaaYi:V@p,P,,Ppx aA111!ٹ7;6xXxhn÷iYY!a!!9yy(P0pll,phg))I!aaaa!Iii'r( Xh^CGIyY!Y9 0 Ll0PnFa)!ى)yi')gSj^(( x86&iYY!yIiii90Z,l0l,P&V+a!aI)yI7W_s?*.Hh&nI!YYyyIiWW7Wc0PPh)!!aI W3K2&ƖFVCWIII9i)__Oo{&68 ```X XHVv&#g 9yyy99ɉ)s{zNnNNrcKoo_?//J>F.vF((v(Fn2J ow7wo_ocRSNsJ2⇻36ˋoN{vSNN#~RrN{.^'sK/[_gSws϶o7փfwF'o:^kO>N+Jo3~+ +^2oSZgR?o*j#òc++&3 rzCó^"Z +/>s"Z +sK+zJ#s#J:KJKc"b{{Jz**JJ:* K +ZjKJ*#jK+ ;+ˊJ+ + +Jk* +*{Kˋ˛+ KKK +*+JJ +J + +ˊjK*k+* Jj ++ +j+Jjj +ʊj*k k ** +Jk*k*J+ +jjjj+**k +ˋk***j +닋*+ +j + +j*J**k* Kkk ++++k *+j*jJʊ +jj +Jjjjj+j+ ++ *jkkk*+ ++ +j*j*++* +ʊ +jj +j+++*j닋++*k :[K JkJj::3n:_b+zf.~o'.B +b2r&nN +c. S[>o:&*;N3r+{/o3 +;&Ffn+OOs[:b#/o3N NR~J˻/痷77xh8H HKgs~&"zC7_cNN.B3Ss{ +~nBbs/3jbrRB":jccs{*b2b*{[{Kk:Jj {{+ +ʢbZhS'YgSCʞHh&6rRS;fsc'*zkJ:Coc+K;*{H +?)!as?ii8P6(! C((n!ys_o"vHhgws([{_↶f + ocn.zs>nr#rrbzj;ch(3)iiw'[+ +c))WW'00X?G7v_鹹WFowii_[:^F6'Gk".~>2#?g_fffoǟ#šoiWWWy6L<`yay&"K`0,rQAKkrss&v)aAYHHvN&f _wW)W~gi9__'GG9g8^~~6VvZw)7''giiiwcO/O)Wlp0@X7׷7Wy)gOs7ss+"+cg''S :jZ2zz:z +F>N66f.2j??_7w7_OO/3r..RN2Z3/oO/sKK[c k*+J2:zn. kZz +:JJ***jk3sCsoOOooSo/;zʊjCsz2rZ*n +3O3rnBbBsoo/ cjR.#[KKKk +3#2 +K #j+*{ +.RZ ˊʊ[+*k{*"jKkۣ{ۛ:"zJK;jZ2Zj+ + [k+[j + jJjjJj***+jj+;K jz:++kKjj+jʊ +FvSo#s{s;./ + +⢆GK3.{n +r~;jJF3oƃoo#&r(#R^'RGc/:COrΞrZ7/rszb{Ϗ_~bvr_^_3[''or#{;NJSj{JʋN_kJn2.KK[Kjs?.+~o33r{jzSZ;Ë*z/:nkK+Rz *>js kzBk*2b/r +Kj# +J"3 +[/[*Kbbb[/ 2B"Z*2JKb[ 2Kj+;*Kb*CS"+s[_K3'j;z +Z:K"BJ::r +;&hH8VF澎Nn"3GWi)7w)i)GG7o 3b+[^&+K3x@0x8RCW)))iiw/ggsbC'?c3_/'?+ RSK?GHpp@ 8(Swi)WWiiϳ77brRK{SOϏO'__G7o{Z+#/ss_wWll,p Vn'y)W)w/23WWO;vV^S_'O_7LJswǐP0(>i!aaYG_:>fz_)I )GKnFV'g'Gi _?g3ßwW y8`,̌0XhsW!AYG3{r^^')K.^V^K_7gwW)3S?_gyX lPxvֆ +aA!9oRj_I{FƆNC_7WWwg;sOSs/?GB(XP,0X8V? ف +wwGrf +#s''?o33s3#Ko'WFV@@X8(.y!Ig;>~Bˏ?2~R s3ÏO_gg'OSscۛc/_Sv8`v9 )ǟڎNN;c +rsCc3o__'s3sss#{{o'2F`XXH;)9IiwZ.r2J.>"jK33//?O?O/33/os zJkxX x`F7i əY!yw?s+&N"ZCo'?go3 s?g x`FOgyaa wg"N&^f~Z?'?o33C3sKk''8xX@@؈!ayIiw>~vnZos'g燇g_OOSCsgsxXp֎!aa!IWgS"R^FbS/O?'''LJ_O?OSx @pppvG!aٹ)Nn6nΎ#o_'g?Osc{Rx`0pp0 f/7yaIiwr&FB.2/'gg'osc;K# HX00p0`Hv'W!AyI)fNrsog'gg''O/3[{zj;n(؀@XxF 'WIYaaIz.^~oo_g''''_?'OϿ/ss[*+RBrRfHX ```XHfGi9!Yy_kZ;?S_'_C3sokzS2[z2&:nfvVVVh(V;o ɹIWW3nrZ.B2::J:;3_K?scJokjnzf2>&Cʞ&&&z;OogGW'gg:{BJʊbrNJ #3cCs/#kz #*2zZ +nRRnnNR>Rn2zkz;S_O?S#ۻz+ +*Zrj""SK*[ +{*jRnzjb +Crnrn  +zk*"/Cσooۿ3 cKk:;kۚzCúJZKrCÊ{zR΂^sR:J >n+nrKR.sN:KOggSK nzZb3 bsR;[2rRR?cfbnnBn22Zb+r32sSC?oKSSok3 sχ_#*_j^R>B:;k[BRRRfrn2n:gG/S?ozcb'O*3R^_ oR2^b[r3Jr+j2ff((薆z'))))WWGGO?[sڃo/oSʃzò&k""::{B(&V8HXVh^CW 9IIIig?:*&^b~.J:oOsOSscCSz":Z*zj CkVhX؀HXȶ6&[7WI!Ii7B~^FffF.BJ?'_gg'?C#s+*ڢ; +JkCVVXXH`(z/ϗyY!W[j.F66F>rkGg#ˋ*;kCfV؀X8hNo 9aa!o3B6(6F&"K3Ǘwwg/3j+**+((ذ8HrcgY!!Y9i?#3&f^ƶ66R2n"3s_gWWG#{ SO6h@ hiYy 'g+>f&^~.&rkO_GW)+ +*_džh𸰬0hF7yya wG>n6F~nRK/OʞFs)))iiWsJj3)`@l,` .YYa᷇{^>{oW7N&H8xh +oii)iGKk__ח`@ Pp6Og.^no)iw?"~F(h(F&&''g/So/'g/O3OO7lpl lpNoa)ֶR*'i9YI )o.V(VC'hֶR?wwWgoScKKOOח燇G'L P,Fɹ)iab"III9JB6n[33''obN~fV(ŸwGWBSs''O?OoCS__'Sz@0vO YYWF>˿yOk&bzn^&fv&V +)7Cso?7ggGG''LJ.l,V9!iGc(.' yI)'ϛ.&^˃s'Ξ&j&2"?'_??KcKc+KR@`X*S9 wg_#+''7_S 2RBn^rš^.;gW +O'{'g':s: +Kj>.b>fVHhƆfr{kʃ_'_gGgLJ'__o[++:ښ"2r"ZrRr"rz: +*+ *jjʊ++K{K k+jkk ˻;K{ K*j:JJJ++*+ꋊ *kk Kk+*jkkjk + +*;{k kKkj +j* +jjj+ +J:j:jjkk kKˋ;;{ kk*:J + +j +jjj**+j++*k**k++jkk * kj**Jkkk ++k*+j + + + +jj***k+K;K˻k J:J +J + + + + +JJzzʺJJ +*k {k&c_{j[bnR? +c;.#~kBJ{[jZ{nZ*__O;nnZR^2 ";3 +skz +rKs*ˋ*:s3;s[ڋ;3j/k:; +;kcj +K :+zj "ʋ:CʲkK Cc +˛ ++ +*+*jzjj#CkJ˚zjʊJs{J +C[[:kj* ZJ뛺+{˻* ;k* :jJ;KKj˻+z:{ +:k+*Jj{ +# +[KKj { +KJ; * +J +j; +J kJz;;Kc;:;k j;[Zʋ++J*rz"Kj*"j;*;{jzc#j*뻺˻z* J* +** ˺+C +[ +b: +++# ++{:z;;j ++:: +JJ*ˋbb:ۋJk#{cz:z + ;{ZJJ늺ˊJ*;K JzJj +; j*#;{+*;j*j"*ښ jk;; j*; *z::* +jk{; K + ++;{+ :jꊺ:*j: +k+ + +;ˊ {*kK kJJ+jJj + ++*k*kJ*jj+k+j*+ ;Kk+ kˋ +jj*JJ+*ʊk Kk+*ˋ*kk**+ k*JJ*jjjjj++*jjjk+++kkkk+*+ k+*++ +jjjꊊ +J***k *k *Kˋ+k**+* +JJ +J:: +j++j*++kk*++kkk++j**+*j+*+****k **+*jj*+* +ʊJ++*****jj*+kˋk ******j +jj*jjjj***j*+++kKK kk닋 k*jjjj +JJj + +j +++* kk++kk+**+++++**jj +j**j**j**++kk*++***++*j+***+++++*+++*j +jjj +*+kk+++kk ˋkk+**jjjjj**j***j*jjj**+kk++kkkkkk+*****j*j +jjj****+++++kk+***+*++*++*++++++******jjj***jjj**+kk+++k++***j +jj***+++*+*+kk+++*++*j****++++++****+**+*****j+++*+++*k++k+***+*+** + + +ꊊ**+++*+++k+++k+++*+**+*jj +jjj**jjj++++++++kkkkkkkk++++****jj******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** \ No newline at end of file diff --git a/tones_german/crypt_off.isdn b/tones_german/crypt_off.isdn new file mode 120000 index 0000000..6fbea0c --- /dev/null +++ b/tones_german/crypt_off.isdn @@ -0,0 +1 @@ +../tones_american/crypt_off.isdn \ No newline at end of file diff --git a/tones_german/crypt_on.isdn b/tones_german/crypt_on.isdn new file mode 120000 index 0000000..86aeba1 --- /dev/null +++ b/tones_german/crypt_on.isdn @@ -0,0 +1 @@ +../tones_american/crypt_on.isdn \ No newline at end of file diff --git a/tones_german/deactivated_loop.isdn b/tones_german/deactivated_loop.isdn new file mode 100644 index 0000000..01328d7 Binary files /dev/null and b/tones_german/deactivated_loop.isdn differ diff --git a/tones_german/dialpbx_loop.isdn b/tones_german/dialpbx_loop.isdn new file mode 100644 index 0000000..7778863 Binary files /dev/null and b/tones_german/dialpbx_loop.isdn differ diff --git a/tones_german/dialtone_loop.isdn b/tones_german/dialtone_loop.isdn new file mode 100644 index 0000000..8fb9ccf Binary files /dev/null and b/tones_german/dialtone_loop.isdn differ diff --git a/tones_german/error_loop.isdn b/tones_german/error_loop.isdn new file mode 100644 index 0000000..7ff692e --- /dev/null +++ b/tones_german/error_loop.isdn @@ -0,0 +1 @@ +*d}EьDH$]a +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "main.h" + +/* note: recording log is written at endpoint */ + +/* + * initialize vbox port + */ +VBoxPort::VBoxPort(int type, struct port_settings *settings) : Port(type, "vbox", settings) +{ + p_vbox_timeout = 0; + p_vbox_announce_fh = -1; + p_vbox_audio_start = 0; + p_vbox_audio_transferred = 0; + p_vbox_record_start = 0; + p_vbox_record_limit = 0; +} + + +/* + * destructor + */ +VBoxPort::~VBoxPort() +{ + if (p_vbox_announce_fh >= 0) + { + close(p_vbox_announce_fh); + p_vbox_announce_fh = -1; + fhuse--; + } +} + + +/* + * handler of vbox + */ +int VBoxPort::handler(void) +{ + struct message *message; + unsigned long tosend; + signed short buffer[128<<1]; + time_t currenttime; + class Endpoint *epoint; + + if (p_vbox_record_start && p_vbox_record_limit) + { + time(¤ttime); + if (currenttime > (p_vbox_record_limit+p_vbox_record_start)) + { + while(p_epointlist) + { + /* send release */ + message = message_create(p_serial, p_epointlist->epoint_id, PORT_TO_EPOINT, MESSAGE_RELEASE); + message->param.disconnectinfo.cause = 16; + message->param.disconnectinfo.location = LOCATION_PRIVATE_LOCAL; + message_put(message); + /* remove epoint */ + free_epointlist(p_epointlist); + } + /* recording is close during destruction */ + delete this; + return(-1); /* must return because port is gone */ + } + } + + if (p_vbox_audio_start < 1) + { + /* set time the first time */ + p_vbox_audio_start = now_d; + } else + { + /* calculate the number of bytes */ + tosend = (unsigned long)((now_d-p_vbox_audio_start)*8000) - p_vbox_audio_transferred; + + /* wait for more */ + if (tosend < 32) + return(0); + + /* too many samples, so we just process 128 bytes until the next call of handler() */ + if (tosend > 128) + tosend = 128; + + /* dummy read, to clock record buffer */ + read_audio((unsigned char *)buffer, tosend, 0); + + /* add the number of samples elapsed */ + p_vbox_audio_transferred += tosend; + + /* if announcement is currently played, send audio data */ + if (p_vbox_announce_fh >=0) + { + /* read from announcement file */ + switch(p_vbox_announce_codec) + { + case CODEC_LAW: + tosend = read_tone(p_vbox_announce_fh, buffer, p_vbox_announce_codec, tosend, p_vbox_announce_size, &p_vbox_announce_left, 1); + break; + + case CODEC_MONO: + case CODEC_STEREO: + case CODEC_8BIT: + tosend = read_tone(p_vbox_announce_fh, buffer, p_vbox_announce_codec, tosend, p_vbox_announce_size, &p_vbox_announce_left, 1); + break; + + default: + PERROR("correct codec not given.\n"); + exit(-1); + } + if (tosend <= 0) + { + /* end of file */ + close(p_vbox_announce_fh); + p_vbox_announce_fh = -1; + fhuse--; + + time(¤ttime); + p_vbox_record_start = currenttime; + + /* connect if not already */ + epoint = find_epoint_id(ACTIVE_EPOINT(p_epointlist)); + if (epoint) + { + /* if we sent our announcement during ringing, we must now connect */ + if (p_vbox_apppbx->e_ext.vbox_free) + { + /* send connect message */ + message = message_create(p_serial, ACTIVE_EPOINT(p_epointlist), PORT_TO_EPOINT, MESSAGE_CONNECT); + memcpy(&message->param.connectinfo, &p_connectinfo, sizeof(struct connect_info)); + message_put(message); + new_state(PORT_STATE_CONNECT); + } + } + + /* start recording, if not already */ + if (p_vbox_mode == VBOX_MODE_NORMAL) + { + /* send recording start message */ + message = message_create(p_serial, ACTIVE_EPOINT(p_epointlist), PORT_TO_EPOINT, MESSAGE_VBOX_RECORD); + message_put(message); + } else // else!! + if (p_vbox_mode == VBOX_MODE_ANNOUNCEMENT) + { + /* send release */ + message = message_create(p_serial, ACTIVE_EPOINT(p_epointlist), PORT_TO_EPOINT, MESSAGE_RELEASE); + message->param.disconnectinfo.cause = 16; + message->param.disconnectinfo.location = LOCATION_PRIVATE_LOCAL; + message_put(message); + /* recording is close during destruction */ + delete this; + return(-1); /* must return because port is gone */ + } + } else + { + switch(p_vbox_announce_codec) + { + case CODEC_LAW: + message = message_create(p_serial, ACTIVE_EPOINT(p_epointlist), PORT_TO_EPOINT, MESSAGE_DATA); + message->param.data.compressed = 1; + message->param.data.port_type = p_type; + message->param.data.port_id = p_serial; + message->param.data.len = tosend; + memcpy(message->param.data.data, buffer, tosend); + message_put(message); + break; + + case CODEC_MONO: + case CODEC_STEREO: + case CODEC_8BIT: + message = message_create(p_serial, ACTIVE_EPOINT(p_epointlist), PORT_TO_EPOINT, MESSAGE_DATA); + message->param.data.compressed = 0; + message->param.data.port_type = p_type; + message->param.data.port_id = p_serial; + message->param.data.len = tosend<<1; + memcpy(message->param.data.data, buffer, tosend<<1); + message_put(message); + break; + + default: + PERROR("correct announce_codec not given.\n"); + exit(-1); + } + } + } + + } + return(1); +} + + +/* + * endpoint sends messages to the vbox port + */ +int VBoxPort::message_epoint(unsigned long epoint_id, int message_id, union parameter *param) +{ + struct message *message; + class Endpoint *epoint; + char filename[256], *c; + class EndpointAppPBX *eapp; + + epoint = find_epoint_id(epoint_id); + if (!epoint) + { + PDEBUG(DEBUG_EPOINT|DEBUG_VBOX, "PORT(%s) no endpoint object found where the message is from.\n", p_name); + return(0); + } + + if (Port::message_epoint(epoint_id, message_id, param)) + return(1); + + switch(message_id) + { + case MESSAGE_DISCONNECT: /* call has been disconnected */ + PDEBUG(DEBUG_VBOX, "PORT(%s) vbox port with (caller id %s) received disconnect cause=%d\n", p_name, p_callerinfo.id, param->disconnectinfo.cause); + + new_state(PORT_STATE_OUT_DISCONNECT); + + while(p_epointlist) + { + message = message_create(p_serial, p_epointlist->epoint_id, PORT_TO_EPOINT, MESSAGE_RELEASE); + message->param.disconnectinfo.cause = CAUSE_NORMAL; + message->param.disconnectinfo.location = LOCATION_PRIVATE_LOCAL; + message_put(message); + /* remove epoint */ + free_epointlist(p_epointlist); + } + /* recording is close during destruction */ + delete this; + return(-1); /* must return because port is gone */ + break; + + case MESSAGE_RELEASE: /* release vbox port */ + PDEBUG(DEBUG_VBOX, "PORT(%s) vbox port with (caller id %s) received release\n", p_name, p_callerinfo.id); + + /* we are done */ + /* recording is close during destruction */ + delete this; + return(-1); /* must return because port is gone */ + break; + + case MESSAGE_SETUP: /* dial-out command received from epoint, answer with connect */ + /* get apppbx */ + eapp = (class EndpointAppPBX *)(epoint->ep_app); + p_vbox_apppbx = eapp; + /* extract optional announcement file */ + if ((c = strchr(param->setup.dialinginfo.number, ','))) + { + if (c[1] == '/') + SPRINT(filename, c+1); + else + SPRINT(filename, "%s/%s/%s/vbox/%s", INSTALL_DATA, options.extensions_dir, p_vbox_apppbx->e_terminal); + *c = '\0'; + } else + { + SPRINT(filename, "%s/%s/%s/vbox/announcement", INSTALL_DATA, options.extensions_dir, p_vbox_apppbx->e_terminal); + } + PDEBUG(DEBUG_VBOX, "PORT(%s) vbox port received setup from '%s' to '%s'\n", p_name, param->setup.callerinfo.id, param->setup.dialinginfo.number); + memcpy(&p_callerinfo, ¶m->setup.callerinfo, sizeof(p_callerinfo)); + memcpy(&p_redirinfo, ¶m->setup.redirinfo, sizeof(p_redirinfo)); + /* link relation */ + if (p_epointlist) + { + PERROR("PORT(%s) software error: epoint pointer is set in idle state, how bad!! exitting.\n", p_name); + exit(-1); + } + if (!(epointlist_new(epoint_id))) + { + PERROR("no memory for epointlist\n"); + exit(-1); + } + + /* copy setup infos to port */ + SCPY(p_vbox_extension, param->setup.dialinginfo.number); + + /* create connect info */ + SCPY(p_connectinfo.id, p_vbox_extension); + p_connectinfo.itype = INFO_ITYPE_VBOX; + p_connectinfo.present = INFO_PRESENT_ALLOWED; + p_connectinfo.screen = INFO_SCREEN_NETWORK; + + /* connect unless we can send announcement while ringing */ + if (!p_vbox_apppbx->e_ext.vbox_free) + { + /* send connect message */ + message = message_create(p_serial, epoint_id, PORT_TO_EPOINT, MESSAGE_CONNECT); + memcpy(&message->param.connectinfo, &p_connectinfo, sizeof(struct connect_info)); + message_put(message); + new_state(PORT_STATE_CONNECT); + } else + { + /* send alerting message */ + message = message_create(p_serial, epoint_id, PORT_TO_EPOINT, MESSAGE_ALERTING); + message_put(message); + new_state(PORT_STATE_IN_ALERTING); + } + + /* start recording during announcement */ + /* start parallel recording if desired */ + p_vbox_mode = p_vbox_apppbx->e_ext.vbox_mode; + p_vbox_record_limit = p_vbox_apppbx->e_ext.vbox_time; + if (p_vbox_mode == VBOX_MODE_PARALLEL) + { + /* send recording start message */ + message = message_create(p_serial, epoint_id, PORT_TO_EPOINT, MESSAGE_VBOX_RECORD); + message_put(message); + } + /* play the announcement */ + if ((p_vbox_announce_fh = open_tone(filename, &p_vbox_announce_codec, &p_vbox_announce_size, &p_vbox_announce_left)) >= 0) + { + fhuse++; + } else + { + PDEBUG(DEBUG_VBOX, "PORT(%s) no announcement found at: '%s' so we start recording now.\n", p_name, filename); + /* send recording start message */ + message = message_create(p_serial, epoint_id, PORT_TO_EPOINT, MESSAGE_VBOX_RECORD); + message_put(message); + } + break; + + default: + PDEBUG(DEBUG_VBOX, "PORT(%s) vbox port with (caller id %s) received an unsupported message: %d\n", p_name, p_callerinfo.id, message_id); + } + + return(0); +} + + diff --git a/vbox.h b/vbox.h new file mode 100644 index 0000000..e9f8168 --- /dev/null +++ b/vbox.h @@ -0,0 +1,37 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** port header file ** +** ** +\*****************************************************************************/ + +/* answerin machine port class */ +class VBoxPort : public Port +{ + public: + VBoxPort(int type, struct port_settings *settings); + ~VBoxPort(); + int message_epoint(unsigned long epoint_id, int message, union parameter *param); + int handler(void); + + private: + struct EndpointAppPBX *p_vbox_apppbx; /* pbx application */ + unsigned long p_vbox_timeout; /* timeout for recording */ + char p_vbox_extension[32]; /* current extension */ + +// int p_vbox_recording; /* if currently recording */ + int p_vbox_announce_fh; /* the announcement filehandler */ + int p_vbox_announce_codec; /* the announcement codec */ + signed long p_vbox_announce_left; /* the number of bytes left of announcement sample */ + signed long p_vbox_announce_size; /* size of current announcement (in bytes) */ + int p_vbox_mode; /* type of recording VBOX_MODE_* */ + double p_vbox_audio_start; /* time stamp of starting of audio (<1 == not yet started) */ + unsigned long p_vbox_audio_transferred; /* number of samples sent to endpoint */ + signed long p_vbox_record_start; /* start for recording */ + signed long p_vbox_record_limit; /* limit for recording */ +}; + diff --git a/vbox_english/call_anonymous.isdn b/vbox_english/call_anonymous.isdn new file mode 100644 index 0000000..798e118 Binary files /dev/null and b/vbox_english/call_anonymous.isdn differ diff --git a/vbox_english/call_from.isdn b/vbox_english/call_from.isdn new file mode 100644 index 0000000..1971749 Binary files /dev/null and b/vbox_english/call_from.isdn differ diff --git a/vbox_english/day_01.isdn b/vbox_english/day_01.isdn new file mode 100644 index 0000000..755b8d2 Binary files /dev/null and b/vbox_english/day_01.isdn differ diff --git a/vbox_english/day_02.isdn b/vbox_english/day_02.isdn new file mode 100644 index 0000000..6a16b59 Binary files /dev/null and b/vbox_english/day_02.isdn differ diff --git a/vbox_english/day_03.isdn b/vbox_english/day_03.isdn new file mode 100644 index 0000000..834c339 Binary files /dev/null and b/vbox_english/day_03.isdn differ diff --git a/vbox_english/day_04.isdn b/vbox_english/day_04.isdn new file mode 100644 index 0000000..8ebf7ab Binary files /dev/null and b/vbox_english/day_04.isdn differ diff --git a/vbox_english/day_05.isdn b/vbox_english/day_05.isdn new file mode 100644 index 0000000..0c132cf Binary files /dev/null and b/vbox_english/day_05.isdn differ diff --git a/vbox_english/day_06.isdn b/vbox_english/day_06.isdn new file mode 100644 index 0000000..3dd471a Binary files /dev/null and b/vbox_english/day_06.isdn differ diff --git a/vbox_english/day_07.isdn b/vbox_english/day_07.isdn new file mode 100644 index 0000000..82d38ca Binary files /dev/null and b/vbox_english/day_07.isdn differ diff --git a/vbox_english/day_08.isdn b/vbox_english/day_08.isdn new file mode 100644 index 0000000..7cda824 Binary files /dev/null and b/vbox_english/day_08.isdn differ diff --git a/vbox_english/day_09.isdn b/vbox_english/day_09.isdn new file mode 100644 index 0000000..ac3965b Binary files /dev/null and b/vbox_english/day_09.isdn differ diff --git a/vbox_english/day_10.isdn b/vbox_english/day_10.isdn new file mode 100644 index 0000000..2cd660a Binary files /dev/null and b/vbox_english/day_10.isdn differ diff --git a/vbox_english/day_11.isdn b/vbox_english/day_11.isdn new file mode 100644 index 0000000..b16134b Binary files /dev/null and b/vbox_english/day_11.isdn differ diff --git a/vbox_english/day_12.isdn b/vbox_english/day_12.isdn new file mode 100644 index 0000000..02de61b Binary files /dev/null and b/vbox_english/day_12.isdn differ diff --git a/vbox_english/day_13.isdn b/vbox_english/day_13.isdn new file mode 100644 index 0000000..8eb1729 Binary files /dev/null and b/vbox_english/day_13.isdn differ diff --git a/vbox_english/day_14.isdn b/vbox_english/day_14.isdn new file mode 100644 index 0000000..0ab4b44 Binary files /dev/null and b/vbox_english/day_14.isdn differ diff --git a/vbox_english/day_15.isdn b/vbox_english/day_15.isdn new file mode 100644 index 0000000..d36c0f1 Binary files /dev/null and b/vbox_english/day_15.isdn differ diff --git a/vbox_english/day_16.isdn b/vbox_english/day_16.isdn new file mode 100644 index 0000000..661ef23 Binary files /dev/null and b/vbox_english/day_16.isdn differ diff --git a/vbox_english/day_17.isdn b/vbox_english/day_17.isdn new file mode 100644 index 0000000..3c7ed2f Binary files /dev/null and b/vbox_english/day_17.isdn differ diff --git a/vbox_english/day_18.isdn b/vbox_english/day_18.isdn new file mode 100644 index 0000000..c8880b8 Binary files /dev/null and b/vbox_english/day_18.isdn differ diff --git a/vbox_english/day_19.isdn b/vbox_english/day_19.isdn new file mode 100644 index 0000000..1f566f9 Binary files /dev/null and b/vbox_english/day_19.isdn differ diff --git a/vbox_english/day_20.isdn b/vbox_english/day_20.isdn new file mode 100644 index 0000000..2665ce1 Binary files /dev/null and b/vbox_english/day_20.isdn differ diff --git a/vbox_english/day_21.isdn b/vbox_english/day_21.isdn new file mode 100644 index 0000000..dd143e5 Binary files /dev/null and b/vbox_english/day_21.isdn differ diff --git a/vbox_english/day_22.isdn b/vbox_english/day_22.isdn new file mode 100644 index 0000000..10e4ae0 Binary files /dev/null and b/vbox_english/day_22.isdn differ diff --git a/vbox_english/day_23.isdn b/vbox_english/day_23.isdn new file mode 100644 index 0000000..dc22c69 Binary files /dev/null and b/vbox_english/day_23.isdn differ diff --git a/vbox_english/day_24.isdn b/vbox_english/day_24.isdn new file mode 100644 index 0000000..a848390 Binary files /dev/null and b/vbox_english/day_24.isdn differ diff --git a/vbox_english/day_25.isdn b/vbox_english/day_25.isdn new file mode 100644 index 0000000..33645bb Binary files /dev/null and b/vbox_english/day_25.isdn differ diff --git a/vbox_english/day_26.isdn b/vbox_english/day_26.isdn new file mode 100644 index 0000000..7044949 Binary files /dev/null and b/vbox_english/day_26.isdn differ diff --git a/vbox_english/day_27.isdn b/vbox_english/day_27.isdn new file mode 100644 index 0000000..906eb65 Binary files /dev/null and b/vbox_english/day_27.isdn differ diff --git a/vbox_english/day_28.isdn b/vbox_english/day_28.isdn new file mode 100644 index 0000000..4f8e150 Binary files /dev/null and b/vbox_english/day_28.isdn differ diff --git a/vbox_english/day_29.isdn b/vbox_english/day_29.isdn new file mode 100644 index 0000000..c166edb Binary files /dev/null and b/vbox_english/day_29.isdn differ diff --git a/vbox_english/day_30.isdn b/vbox_english/day_30.isdn new file mode 100644 index 0000000..0650bc1 Binary files /dev/null and b/vbox_english/day_30.isdn differ diff --git a/vbox_english/day_31.isdn b/vbox_english/day_31.isdn new file mode 100644 index 0000000..52a1b4e Binary files /dev/null and b/vbox_english/day_31.isdn differ diff --git a/vbox_english/delete_ask.isdn b/vbox_english/delete_ask.isdn new file mode 100644 index 0000000..ff7e13e Binary files /dev/null and b/vbox_english/delete_ask.isdn differ diff --git a/vbox_english/delete_done.isdn b/vbox_english/delete_done.isdn new file mode 100644 index 0000000..109b7cb Binary files /dev/null and b/vbox_english/delete_done.isdn differ diff --git a/vbox_english/intro.isdn b/vbox_english/intro.isdn new file mode 100644 index 0000000..fa78046 Binary files /dev/null and b/vbox_english/intro.isdn differ diff --git a/vbox_english/menu.isdn b/vbox_english/menu.isdn new file mode 100644 index 0000000..ae7f32d Binary files /dev/null and b/vbox_english/menu.isdn differ diff --git a/vbox_english/minute.isdn b/vbox_english/minute.isdn new file mode 100644 index 0000000..e1a0f9b Binary files /dev/null and b/vbox_english/minute.isdn differ diff --git a/vbox_english/minutes.isdn b/vbox_english/minutes.isdn new file mode 100644 index 0000000..2cde514 Binary files /dev/null and b/vbox_english/minutes.isdn differ diff --git a/vbox_english/month_01.isdn b/vbox_english/month_01.isdn new file mode 100644 index 0000000..aac268e Binary files /dev/null and b/vbox_english/month_01.isdn differ diff --git a/vbox_english/month_02.isdn b/vbox_english/month_02.isdn new file mode 100644 index 0000000..cefce13 Binary files /dev/null and b/vbox_english/month_02.isdn differ diff --git a/vbox_english/month_03.isdn b/vbox_english/month_03.isdn new file mode 100644 index 0000000..b3f39ae Binary files /dev/null and b/vbox_english/month_03.isdn differ diff --git a/vbox_english/month_04.isdn b/vbox_english/month_04.isdn new file mode 100644 index 0000000..66e5d55 Binary files /dev/null and b/vbox_english/month_04.isdn differ diff --git a/vbox_english/month_05.isdn b/vbox_english/month_05.isdn new file mode 100644 index 0000000..12bcd9b Binary files /dev/null and b/vbox_english/month_05.isdn differ diff --git a/vbox_english/month_06.isdn b/vbox_english/month_06.isdn new file mode 100644 index 0000000..d7fd69e Binary files /dev/null and b/vbox_english/month_06.isdn differ diff --git a/vbox_english/month_07.isdn b/vbox_english/month_07.isdn new file mode 100644 index 0000000..8d2a968 Binary files /dev/null and b/vbox_english/month_07.isdn differ diff --git a/vbox_english/month_08.isdn b/vbox_english/month_08.isdn new file mode 100644 index 0000000..9e52a0b Binary files /dev/null and b/vbox_english/month_08.isdn differ diff --git a/vbox_english/month_09.isdn b/vbox_english/month_09.isdn new file mode 100644 index 0000000..9359aa4 Binary files /dev/null and b/vbox_english/month_09.isdn differ diff --git a/vbox_english/month_10.isdn b/vbox_english/month_10.isdn new file mode 100644 index 0000000..1d121ae Binary files /dev/null and b/vbox_english/month_10.isdn differ diff --git a/vbox_english/month_11.isdn b/vbox_english/month_11.isdn new file mode 100644 index 0000000..2d68e01 Binary files /dev/null and b/vbox_english/month_11.isdn differ diff --git a/vbox_english/month_12.isdn b/vbox_english/month_12.isdn new file mode 100644 index 0000000..a54292b Binary files /dev/null and b/vbox_english/month_12.isdn differ diff --git a/vbox_english/nothing.isdn b/vbox_english/nothing.isdn new file mode 100644 index 0000000..914241d Binary files /dev/null and b/vbox_english/nothing.isdn differ diff --git a/vbox_english/number_00.isdn b/vbox_english/number_00.isdn new file mode 100644 index 0000000..c94472c Binary files /dev/null and b/vbox_english/number_00.isdn differ diff --git a/vbox_english/number_01.isdn b/vbox_english/number_01.isdn new file mode 100644 index 0000000..e849b78 Binary files /dev/null and b/vbox_english/number_01.isdn differ diff --git a/vbox_english/number_02.isdn b/vbox_english/number_02.isdn new file mode 100644 index 0000000..fa6a38f Binary files /dev/null and b/vbox_english/number_02.isdn differ diff --git a/vbox_english/number_03.isdn b/vbox_english/number_03.isdn new file mode 100644 index 0000000..8ee7e38 Binary files /dev/null and b/vbox_english/number_03.isdn differ diff --git a/vbox_english/number_04.isdn b/vbox_english/number_04.isdn new file mode 100644 index 0000000..6c98f21 Binary files /dev/null and b/vbox_english/number_04.isdn differ diff --git a/vbox_english/number_05.isdn b/vbox_english/number_05.isdn new file mode 100644 index 0000000..8836458 Binary files /dev/null and b/vbox_english/number_05.isdn differ diff --git a/vbox_english/number_06.isdn b/vbox_english/number_06.isdn new file mode 100644 index 0000000..e0b47c2 Binary files /dev/null and b/vbox_english/number_06.isdn differ diff --git a/vbox_english/number_07.isdn b/vbox_english/number_07.isdn new file mode 100644 index 0000000..989d01c Binary files /dev/null and b/vbox_english/number_07.isdn differ diff --git a/vbox_english/number_08.isdn b/vbox_english/number_08.isdn new file mode 100644 index 0000000..183940f Binary files /dev/null and b/vbox_english/number_08.isdn differ diff --git a/vbox_english/number_09.isdn b/vbox_english/number_09.isdn new file mode 100644 index 0000000..514cdb9 Binary files /dev/null and b/vbox_english/number_09.isdn differ diff --git a/vbox_english/number_10.isdn b/vbox_english/number_10.isdn new file mode 100644 index 0000000..96c2772 Binary files /dev/null and b/vbox_english/number_10.isdn differ diff --git a/vbox_english/number_11.isdn b/vbox_english/number_11.isdn new file mode 100644 index 0000000..ec9e209 Binary files /dev/null and b/vbox_english/number_11.isdn differ diff --git a/vbox_english/number_12.isdn b/vbox_english/number_12.isdn new file mode 100644 index 0000000..aeabf50 Binary files /dev/null and b/vbox_english/number_12.isdn differ diff --git a/vbox_english/number_13.isdn b/vbox_english/number_13.isdn new file mode 100644 index 0000000..90357d0 Binary files /dev/null and b/vbox_english/number_13.isdn differ diff --git a/vbox_english/number_14.isdn b/vbox_english/number_14.isdn new file mode 100644 index 0000000..0e0aca8 Binary files /dev/null and b/vbox_english/number_14.isdn differ diff --git a/vbox_english/number_15.isdn b/vbox_english/number_15.isdn new file mode 100644 index 0000000..6af25b5 Binary files /dev/null and b/vbox_english/number_15.isdn differ diff --git a/vbox_english/number_16.isdn b/vbox_english/number_16.isdn new file mode 100644 index 0000000..1914d97 Binary files /dev/null and b/vbox_english/number_16.isdn differ diff --git a/vbox_english/number_17.isdn b/vbox_english/number_17.isdn new file mode 100644 index 0000000..7bbd7f3 Binary files /dev/null and b/vbox_english/number_17.isdn differ diff --git a/vbox_english/number_18.isdn b/vbox_english/number_18.isdn new file mode 100644 index 0000000..0513e1a Binary files /dev/null and b/vbox_english/number_18.isdn differ diff --git a/vbox_english/number_19.isdn b/vbox_english/number_19.isdn new file mode 100644 index 0000000..fa3e093 Binary files /dev/null and b/vbox_english/number_19.isdn differ diff --git a/vbox_english/number_20.isdn b/vbox_english/number_20.isdn new file mode 100644 index 0000000..d204df7 Binary files /dev/null and b/vbox_english/number_20.isdn differ diff --git a/vbox_english/number_21.isdn b/vbox_english/number_21.isdn new file mode 100644 index 0000000..0cfc7d3 Binary files /dev/null and b/vbox_english/number_21.isdn differ diff --git a/vbox_english/number_22.isdn b/vbox_english/number_22.isdn new file mode 100644 index 0000000..70da108 Binary files /dev/null and b/vbox_english/number_22.isdn differ diff --git a/vbox_english/number_23.isdn b/vbox_english/number_23.isdn new file mode 100644 index 0000000..8c1903d Binary files /dev/null and b/vbox_english/number_23.isdn differ diff --git a/vbox_english/number_24.isdn b/vbox_english/number_24.isdn new file mode 100644 index 0000000..9b0eb4c Binary files /dev/null and b/vbox_english/number_24.isdn differ diff --git a/vbox_english/number_25.isdn b/vbox_english/number_25.isdn new file mode 100644 index 0000000..aa6c7f6 Binary files /dev/null and b/vbox_english/number_25.isdn differ diff --git a/vbox_english/number_26.isdn b/vbox_english/number_26.isdn new file mode 100644 index 0000000..13e3c1b Binary files /dev/null and b/vbox_english/number_26.isdn differ diff --git a/vbox_english/number_27.isdn b/vbox_english/number_27.isdn new file mode 100644 index 0000000..c572bb0 Binary files /dev/null and b/vbox_english/number_27.isdn differ diff --git a/vbox_english/number_28.isdn b/vbox_english/number_28.isdn new file mode 100644 index 0000000..6fe11ce Binary files /dev/null and b/vbox_english/number_28.isdn differ diff --git a/vbox_english/number_29.isdn b/vbox_english/number_29.isdn new file mode 100644 index 0000000..c74c96a Binary files /dev/null and b/vbox_english/number_29.isdn differ diff --git a/vbox_english/number_30.isdn b/vbox_english/number_30.isdn new file mode 100644 index 0000000..0b5b36f --- /dev/null +++ b/vbox_english/number_30.isdn @@ -0,0 +1,79 @@ ++k+++++++***jjj +*jj**++++*+*++k++k*k+++*+***+**jjjjjjjjj*++kkkkkkk++**+*+*+jjj +jjjjjj ++jj**kkkj++j+*+k**++jj*j***j +j*+*Kkk*+*+ +JJ +*k K+k k+z;˛ +*+ +*jj +j ++ + +*::k+k+j;; **+k+ ++K;#{ + z: jŠ"J"Zj3kʻ;;:zz; +K;3/j[JKz*[+[ {/; +2B+[ +c+;rZ +{r2J:kjk*#: +K{3k{{bkj;z:k[{ + +2:Jڲbk;; ʊcۛ+kJ [C +K# k zBbJ;;; +zrB.+j:*;;k:Zc{3s3s3s[K[ sk3oC//c*@88R~Z./GI)i iiwiiɹ9I_g'i) ,P 8cng 'wj&&^WYI/'3wW79 w gwHLl|Ь Vn3&!!7gSNhF^׹9I W7a)i)IGIɁ̤ PЬ {羣! S6FKGhˇ'9y)i 9! AL,L0.Rz//_I+3^Z_iiWFiIWW) !!9Wyyٙ#,L@BOiY.ƆVo 'g/i'G)ə!yIIIy1l|$\ll&#gGac~r^vFZIg7)i_ɹYYIyy9|$lpPf*iWwYai?2h(vo?Wɉ)77?SWiɹYaa!Yyy̜$lRSw RVv./sI)iw'_iyYaY!Ya\$l, )ىJ(vN'_ 9 ))gg?7)i y!aa!YYyy'l$lp0)I)y)'Z^Vv2'_iW7OWI !a!!!YYyYa8$,X. I !9/6GiI'g/??wWY!!!!!ٙ<l,,67)I *hV6Nw)i9 )ǟ/wW 9!!!!Y!YYY!x<,l,XS׷9ai6(V*_WIyi'' 9!!Y!!!Y0L<,lЈ+ +)yYa!wgh^ csIy9WG'iY!y9)̬o9!&V.f&3lj9i)i7G׉IIIi)vPPP,)ɉ )O +RrG))חGǗwGׇ/OCھfh(vhVvFr +7wWgG_gos?/s''?Ssb>.rnBb".N>>^&ff.Z3cۃ/o/o/__g__'_O/cZ"2Z2>~>n;+KCSC/ssSÃ+z"Jk{3sK+R.r2+kKJk; ++ +j{csCs{{[;jJz+;[c3C; ZR2:˛ +++ʊzJ*#sC; :"ZK#;;;kZBrB"ښ:j+j K +**Jz ++k;;{#[{*Z* {{j*z"bb{;[Kj +*z*[Z;:k3{K*+:k+ˋ+J:jjzJj +ۻKC KKc::z;B ++z +* ;{ +ʺj +;J#Z"K* kKB2J[3;j2cZsSr{6_[k2GϞB..nCr*33sr ob;:2*[/k?rbSb3/>sz +#z/K[ZZco*3*";kN^2C +>*2>FS3B"#Ο:JbOnB.G.~Ǿ2^gZN2NRJ/Z2*N'nN'.2b"2sKk*kkk{R*"jb +32 KsZCb *R{:*#.srb3K{Kn[JZ3s3zʊjrz2c:s +j3;[ K*""+# ++zKBcbJ#J#+KJJc:{{;K + +K+zJ ++J; * k+[:;+K +J::[ +ڊjJJj‹*Z +K ˋ{ {jkkKJ;z Z#:::Jʺ*:"*JZ*zkZ*kkkk[##c[c{{[[kj늋jJ:::Z""B2R.r..>NNRrZK3_7wwG_S;k +bRnnR.>8Hhx&~ II)?OzZR>^^&~N.2RbzJ{33sss#3[c;kj +jjj +k*{K ;bJNvF6VV(VhvF~2{Wi iWw'S{Rn^&Ffrz so?_OSK*R&(hHhֶ^;Iɉ)3BR~&>>rNZ +S/O''_O?sck +z"Z2^&fF666Ɔ>RoWW))Wח7J2.nN>n.R" ++K;K###[[;;kjrrξ&^ƶF&΂k3W)W)Ww'oûʢ2~~^^^f^^J +3o/o/SCc;*+*J +JZZ"²>^憆f&Zk#?_gG7ww7g_?s#ʚ2r&~~>^2~N:"_S[c# +*JBZ2rrr..^&f^NjǷww_c JZ..NNξNN.: +*;[s3SSsss##[{Kk*jJ:zZZrBr22RB~nNrnBJ'gg'/o; +jjJk˻Kkk* + +Jڢb²222222B"z +JJʺkk3??OosÛ{ⲲrR.....BZJjj*jJʺ::zz* +K;{{[[[##c#c[[#;K +j+*J +jJ +JJJ:zJzzzJJJJ:jJ**+* +*j +jjJj+jk**k+k *k+ k*+****j**+kkk kk*k+j+++*jjjʺJJ + + +j**j*++++k++k++++**+jj + +J +jj*++++ +kk++*++kkk++++**** + +ʊ +jj*+kkkkk++k*+kkk+*j + + + + +ꊊj*+*+**kkkk++k+++*++**+**jjj****j**+*+****+++****+*+*j*+***jjj*+*******+++*****++*+k+++++**+k++++**jjjjʊꊊjjjj*jjj**++kkkkkkkk \ No newline at end of file diff --git a/vbox_english/number_31.isdn b/vbox_english/number_31.isdn new file mode 100644 index 0000000..30ea53d Binary files /dev/null and b/vbox_english/number_31.isdn differ diff --git a/vbox_english/number_32.isdn b/vbox_english/number_32.isdn new file mode 100644 index 0000000..d2ab920 Binary files /dev/null and b/vbox_english/number_32.isdn differ diff --git a/vbox_english/number_33.isdn b/vbox_english/number_33.isdn new file mode 100644 index 0000000..d7836e4 Binary files /dev/null and b/vbox_english/number_33.isdn differ diff --git a/vbox_english/number_34.isdn b/vbox_english/number_34.isdn new file mode 100644 index 0000000..95930d1 Binary files /dev/null and b/vbox_english/number_34.isdn differ diff --git a/vbox_english/number_35.isdn b/vbox_english/number_35.isdn new file mode 100644 index 0000000..0b4b1c3 Binary files /dev/null and b/vbox_english/number_35.isdn differ diff --git a/vbox_english/number_36.isdn b/vbox_english/number_36.isdn new file mode 100644 index 0000000..94c7e71 Binary files /dev/null and b/vbox_english/number_36.isdn differ diff --git a/vbox_english/number_37.isdn b/vbox_english/number_37.isdn new file mode 100644 index 0000000..eb2797e Binary files /dev/null and b/vbox_english/number_37.isdn differ diff --git a/vbox_english/number_38.isdn b/vbox_english/number_38.isdn new file mode 100644 index 0000000..9b66713 Binary files /dev/null and b/vbox_english/number_38.isdn differ diff --git a/vbox_english/number_39.isdn b/vbox_english/number_39.isdn new file mode 100644 index 0000000..d923cee Binary files /dev/null and b/vbox_english/number_39.isdn differ diff --git a/vbox_english/number_40.isdn b/vbox_english/number_40.isdn new file mode 100644 index 0000000..08041fa Binary files /dev/null and b/vbox_english/number_40.isdn differ diff --git a/vbox_english/number_41.isdn b/vbox_english/number_41.isdn new file mode 100644 index 0000000..92c7d6b Binary files /dev/null and b/vbox_english/number_41.isdn differ diff --git a/vbox_english/number_42.isdn b/vbox_english/number_42.isdn new file mode 100644 index 0000000..4159ae8 Binary files /dev/null and b/vbox_english/number_42.isdn differ diff --git a/vbox_english/number_43.isdn b/vbox_english/number_43.isdn new file mode 100644 index 0000000..99e5c48 Binary files /dev/null and b/vbox_english/number_43.isdn differ diff --git a/vbox_english/number_44.isdn b/vbox_english/number_44.isdn new file mode 100644 index 0000000..6320ff8 Binary files /dev/null and b/vbox_english/number_44.isdn differ diff --git a/vbox_english/number_45.isdn b/vbox_english/number_45.isdn new file mode 100644 index 0000000..e9d1565 Binary files /dev/null and b/vbox_english/number_45.isdn differ diff --git a/vbox_english/number_46.isdn b/vbox_english/number_46.isdn new file mode 100644 index 0000000..8b15616 Binary files /dev/null and b/vbox_english/number_46.isdn differ diff --git a/vbox_english/number_47.isdn b/vbox_english/number_47.isdn new file mode 100644 index 0000000..7684f96 Binary files /dev/null and b/vbox_english/number_47.isdn differ diff --git a/vbox_english/number_48.isdn b/vbox_english/number_48.isdn new file mode 100644 index 0000000..cc3a9a0 Binary files /dev/null and b/vbox_english/number_48.isdn differ diff --git a/vbox_english/number_49.isdn b/vbox_english/number_49.isdn new file mode 100644 index 0000000..0ecb8e4 Binary files /dev/null and b/vbox_english/number_49.isdn differ diff --git a/vbox_english/number_50.isdn b/vbox_english/number_50.isdn new file mode 100644 index 0000000..d2296f0 Binary files /dev/null and b/vbox_english/number_50.isdn differ diff --git a/vbox_english/number_51.isdn b/vbox_english/number_51.isdn new file mode 100644 index 0000000..fd0bdf2 Binary files /dev/null and b/vbox_english/number_51.isdn differ diff --git a/vbox_english/number_52.isdn b/vbox_english/number_52.isdn new file mode 100644 index 0000000..4a2b8d1 Binary files /dev/null and b/vbox_english/number_52.isdn differ diff --git a/vbox_english/number_53.isdn b/vbox_english/number_53.isdn new file mode 100644 index 0000000..6711cf5 Binary files /dev/null and b/vbox_english/number_53.isdn differ diff --git a/vbox_english/number_54.isdn b/vbox_english/number_54.isdn new file mode 100644 index 0000000..81aba77 Binary files /dev/null and b/vbox_english/number_54.isdn differ diff --git a/vbox_english/number_55.isdn b/vbox_english/number_55.isdn new file mode 100644 index 0000000..4b71eef Binary files /dev/null and b/vbox_english/number_55.isdn differ diff --git a/vbox_english/number_56.isdn b/vbox_english/number_56.isdn new file mode 100644 index 0000000..2d14c34 Binary files /dev/null and b/vbox_english/number_56.isdn differ diff --git a/vbox_english/number_57.isdn b/vbox_english/number_57.isdn new file mode 100644 index 0000000..a3b2d25 Binary files /dev/null and b/vbox_english/number_57.isdn differ diff --git a/vbox_english/number_58.isdn b/vbox_english/number_58.isdn new file mode 100644 index 0000000..44c48ba Binary files /dev/null and b/vbox_english/number_58.isdn differ diff --git a/vbox_english/number_59.isdn b/vbox_english/number_59.isdn new file mode 100644 index 0000000..21f9afb Binary files /dev/null and b/vbox_english/number_59.isdn differ diff --git a/vbox_english/oclock_am.isdn b/vbox_english/oclock_am.isdn new file mode 100644 index 0000000..fc10521 Binary files /dev/null and b/vbox_english/oclock_am.isdn differ diff --git a/vbox_english/oclock_pm.isdn b/vbox_english/oclock_pm.isdn new file mode 100644 index 0000000..3aab646 Binary files /dev/null and b/vbox_english/oclock_pm.isdn differ diff --git a/vbox_english/pause.isdn b/vbox_english/pause.isdn new file mode 100644 index 0000000..8403b59 Binary files /dev/null and b/vbox_english/pause.isdn differ diff --git a/vbox_english/play.isdn b/vbox_english/play.isdn new file mode 100644 index 0000000..4c77526 Binary files /dev/null and b/vbox_english/play.isdn differ diff --git a/vbox_english/record_ask.isdn b/vbox_english/record_ask.isdn new file mode 100644 index 0000000..d266c3f Binary files /dev/null and b/vbox_english/record_ask.isdn differ diff --git a/vbox_english/record_play.isdn b/vbox_english/record_play.isdn new file mode 100644 index 0000000..a96ecde Binary files /dev/null and b/vbox_english/record_play.isdn differ diff --git a/vbox_english/record_record.isdn b/vbox_english/record_record.isdn new file mode 100644 index 0000000..222bb3b Binary files /dev/null and b/vbox_english/record_record.isdn differ diff --git a/vbox_english/store_ask.isdn b/vbox_english/store_ask.isdn new file mode 100644 index 0000000..fde3c61 Binary files /dev/null and b/vbox_english/store_ask.isdn differ diff --git a/vbox_english/store_done.isdn b/vbox_english/store_done.isdn new file mode 100644 index 0000000..5c9a726 Binary files /dev/null and b/vbox_english/store_done.isdn differ diff --git a/vbox_german/call_anonymous.isdn b/vbox_german/call_anonymous.isdn new file mode 100644 index 0000000..2ce9d87 Binary files /dev/null and b/vbox_german/call_anonymous.isdn differ diff --git a/vbox_german/call_from.isdn b/vbox_german/call_from.isdn new file mode 100644 index 0000000..60cdcdc Binary files /dev/null and b/vbox_german/call_from.isdn differ diff --git a/vbox_german/day_01.isdn b/vbox_german/day_01.isdn new file mode 100644 index 0000000..a7eda41 Binary files /dev/null and b/vbox_german/day_01.isdn differ diff --git a/vbox_german/day_02.isdn b/vbox_german/day_02.isdn new file mode 100644 index 0000000..3f9a0f3 Binary files /dev/null and b/vbox_german/day_02.isdn differ diff --git a/vbox_german/day_03.isdn b/vbox_german/day_03.isdn new file mode 100644 index 0000000..448b75d Binary files /dev/null and b/vbox_german/day_03.isdn differ diff --git a/vbox_german/day_04.isdn b/vbox_german/day_04.isdn new file mode 100644 index 0000000..fb87f97 Binary files /dev/null and b/vbox_german/day_04.isdn differ diff --git a/vbox_german/day_05.isdn b/vbox_german/day_05.isdn new file mode 100644 index 0000000..5529ad6 Binary files /dev/null and b/vbox_german/day_05.isdn differ diff --git a/vbox_german/day_06.isdn b/vbox_german/day_06.isdn new file mode 100644 index 0000000..41b33ac Binary files /dev/null and b/vbox_german/day_06.isdn differ diff --git a/vbox_german/day_07.isdn b/vbox_german/day_07.isdn new file mode 100644 index 0000000..ba289a8 Binary files /dev/null and b/vbox_german/day_07.isdn differ diff --git a/vbox_german/day_08.isdn b/vbox_german/day_08.isdn new file mode 100644 index 0000000..081626a Binary files /dev/null and b/vbox_german/day_08.isdn differ diff --git a/vbox_german/day_09.isdn b/vbox_german/day_09.isdn new file mode 100644 index 0000000..47537c6 Binary files /dev/null and b/vbox_german/day_09.isdn differ diff --git a/vbox_german/day_10.isdn b/vbox_german/day_10.isdn new file mode 100644 index 0000000..55abbc4 Binary files /dev/null and b/vbox_german/day_10.isdn differ diff --git a/vbox_german/day_11.isdn b/vbox_german/day_11.isdn new file mode 100644 index 0000000..92d79a6 Binary files /dev/null and b/vbox_german/day_11.isdn differ diff --git a/vbox_german/day_12.isdn b/vbox_german/day_12.isdn new file mode 100644 index 0000000..7819162 Binary files /dev/null and b/vbox_german/day_12.isdn differ diff --git a/vbox_german/day_13.isdn b/vbox_german/day_13.isdn new file mode 100644 index 0000000..b4ba5d7 Binary files /dev/null and b/vbox_german/day_13.isdn differ diff --git a/vbox_german/day_14.isdn b/vbox_german/day_14.isdn new file mode 100644 index 0000000..d7596c3 Binary files /dev/null and b/vbox_german/day_14.isdn differ diff --git a/vbox_german/day_15.isdn b/vbox_german/day_15.isdn new file mode 100644 index 0000000..f6c4686 Binary files /dev/null and b/vbox_german/day_15.isdn differ diff --git a/vbox_german/day_16.isdn b/vbox_german/day_16.isdn new file mode 100644 index 0000000..cd40a0e Binary files /dev/null and b/vbox_german/day_16.isdn differ diff --git a/vbox_german/day_17.isdn b/vbox_german/day_17.isdn new file mode 100644 index 0000000..d8cf21d Binary files /dev/null and b/vbox_german/day_17.isdn differ diff --git a/vbox_german/day_18.isdn b/vbox_german/day_18.isdn new file mode 100644 index 0000000..1aa018e Binary files /dev/null and b/vbox_german/day_18.isdn differ diff --git a/vbox_german/day_19.isdn b/vbox_german/day_19.isdn new file mode 100644 index 0000000..3382c45 Binary files /dev/null and b/vbox_german/day_19.isdn differ diff --git a/vbox_german/day_20.isdn b/vbox_german/day_20.isdn new file mode 100644 index 0000000..a8d3d90 Binary files /dev/null and b/vbox_german/day_20.isdn differ diff --git a/vbox_german/day_21.isdn b/vbox_german/day_21.isdn new file mode 100644 index 0000000..48c2251 Binary files /dev/null and b/vbox_german/day_21.isdn differ diff --git a/vbox_german/day_22.isdn b/vbox_german/day_22.isdn new file mode 100644 index 0000000..9d9d068 Binary files /dev/null and b/vbox_german/day_22.isdn differ diff --git a/vbox_german/day_23.isdn b/vbox_german/day_23.isdn new file mode 100644 index 0000000..2ad8d46 Binary files /dev/null and b/vbox_german/day_23.isdn differ diff --git a/vbox_german/day_24.isdn b/vbox_german/day_24.isdn new file mode 100644 index 0000000..050887b Binary files /dev/null and b/vbox_german/day_24.isdn differ diff --git a/vbox_german/day_25.isdn b/vbox_german/day_25.isdn new file mode 100644 index 0000000..206af37 Binary files /dev/null and b/vbox_german/day_25.isdn differ diff --git a/vbox_german/day_26.isdn b/vbox_german/day_26.isdn new file mode 100644 index 0000000..737d2b5 Binary files /dev/null and b/vbox_german/day_26.isdn differ diff --git a/vbox_german/day_27.isdn b/vbox_german/day_27.isdn new file mode 100644 index 0000000..65d5b3e Binary files /dev/null and b/vbox_german/day_27.isdn differ diff --git a/vbox_german/day_28.isdn b/vbox_german/day_28.isdn new file mode 100644 index 0000000..56b7fc4 Binary files /dev/null and b/vbox_german/day_28.isdn differ diff --git a/vbox_german/day_29.isdn b/vbox_german/day_29.isdn new file mode 100644 index 0000000..a42ff88 Binary files /dev/null and b/vbox_german/day_29.isdn differ diff --git a/vbox_german/day_30.isdn b/vbox_german/day_30.isdn new file mode 100644 index 0000000..658072f Binary files /dev/null and b/vbox_german/day_30.isdn differ diff --git a/vbox_german/day_31.isdn b/vbox_german/day_31.isdn new file mode 100644 index 0000000..8beb65b Binary files /dev/null and b/vbox_german/day_31.isdn differ diff --git a/vbox_german/delete_ask.isdn b/vbox_german/delete_ask.isdn new file mode 100644 index 0000000..9528b71 Binary files /dev/null and b/vbox_german/delete_ask.isdn differ diff --git a/vbox_german/delete_done.isdn b/vbox_german/delete_done.isdn new file mode 100644 index 0000000..99c9365 Binary files /dev/null and b/vbox_german/delete_done.isdn differ diff --git a/vbox_german/intro.isdn b/vbox_german/intro.isdn new file mode 100644 index 0000000..4eb4a6d Binary files /dev/null and b/vbox_german/intro.isdn differ diff --git a/vbox_german/menu.isdn b/vbox_german/menu.isdn new file mode 100644 index 0000000..2a3c16f Binary files /dev/null and b/vbox_german/menu.isdn differ diff --git a/vbox_german/minute.isdn b/vbox_german/minute.isdn new file mode 100644 index 0000000..59705f7 Binary files /dev/null and b/vbox_german/minute.isdn differ diff --git a/vbox_german/minutes.isdn b/vbox_german/minutes.isdn new file mode 100644 index 0000000..3c284db Binary files /dev/null and b/vbox_german/minutes.isdn differ diff --git a/vbox_german/month_01.isdn b/vbox_german/month_01.isdn new file mode 100644 index 0000000..6b371e9 Binary files /dev/null and b/vbox_german/month_01.isdn differ diff --git a/vbox_german/month_02.isdn b/vbox_german/month_02.isdn new file mode 100644 index 0000000..c51bec1 Binary files /dev/null and b/vbox_german/month_02.isdn differ diff --git a/vbox_german/month_03.isdn b/vbox_german/month_03.isdn new file mode 100644 index 0000000..be2c68e Binary files /dev/null and b/vbox_german/month_03.isdn differ diff --git a/vbox_german/month_04.isdn b/vbox_german/month_04.isdn new file mode 100644 index 0000000..99009fd Binary files /dev/null and b/vbox_german/month_04.isdn differ diff --git a/vbox_german/month_05.isdn b/vbox_german/month_05.isdn new file mode 100644 index 0000000..1d63141 Binary files /dev/null and b/vbox_german/month_05.isdn differ diff --git a/vbox_german/month_06.isdn b/vbox_german/month_06.isdn new file mode 100644 index 0000000..596759e Binary files /dev/null and b/vbox_german/month_06.isdn differ diff --git a/vbox_german/month_07.isdn b/vbox_german/month_07.isdn new file mode 100644 index 0000000..3a06c0e Binary files /dev/null and b/vbox_german/month_07.isdn differ diff --git a/vbox_german/month_08.isdn b/vbox_german/month_08.isdn new file mode 100644 index 0000000..9d765ba Binary files /dev/null and b/vbox_german/month_08.isdn differ diff --git a/vbox_german/month_09.isdn b/vbox_german/month_09.isdn new file mode 100644 index 0000000..f018304 Binary files /dev/null and b/vbox_german/month_09.isdn differ diff --git a/vbox_german/month_10.isdn b/vbox_german/month_10.isdn new file mode 100644 index 0000000..0902e68 Binary files /dev/null and b/vbox_german/month_10.isdn differ diff --git a/vbox_german/month_11.isdn b/vbox_german/month_11.isdn new file mode 100644 index 0000000..2effeb3 Binary files /dev/null and b/vbox_german/month_11.isdn differ diff --git a/vbox_german/month_12.isdn b/vbox_german/month_12.isdn new file mode 100644 index 0000000..452ff5f Binary files /dev/null and b/vbox_german/month_12.isdn differ diff --git a/vbox_german/nothing.isdn b/vbox_german/nothing.isdn new file mode 100644 index 0000000..85f69e9 Binary files /dev/null and b/vbox_german/nothing.isdn differ diff --git a/vbox_german/number_00.isdn b/vbox_german/number_00.isdn new file mode 100644 index 0000000..6aaf83e Binary files /dev/null and b/vbox_german/number_00.isdn differ diff --git a/vbox_german/number_01.isdn b/vbox_german/number_01.isdn new file mode 100644 index 0000000..1f19b1e Binary files /dev/null and b/vbox_german/number_01.isdn differ diff --git a/vbox_german/number_02.isdn b/vbox_german/number_02.isdn new file mode 100644 index 0000000..9af0ff3 Binary files /dev/null and b/vbox_german/number_02.isdn differ diff --git a/vbox_german/number_03.isdn b/vbox_german/number_03.isdn new file mode 100644 index 0000000..0f76d08 Binary files /dev/null and b/vbox_german/number_03.isdn differ diff --git a/vbox_german/number_04.isdn b/vbox_german/number_04.isdn new file mode 100644 index 0000000..3b482ff Binary files /dev/null and b/vbox_german/number_04.isdn differ diff --git a/vbox_german/number_05.isdn b/vbox_german/number_05.isdn new file mode 100644 index 0000000..f2a3f38 Binary files /dev/null and b/vbox_german/number_05.isdn differ diff --git a/vbox_german/number_06.isdn b/vbox_german/number_06.isdn new file mode 100644 index 0000000..cd98d43 Binary files /dev/null and b/vbox_german/number_06.isdn differ diff --git a/vbox_german/number_07.isdn b/vbox_german/number_07.isdn new file mode 100644 index 0000000..9e3af6a Binary files /dev/null and b/vbox_german/number_07.isdn differ diff --git a/vbox_german/number_08.isdn b/vbox_german/number_08.isdn new file mode 100644 index 0000000..e847741 Binary files /dev/null and b/vbox_german/number_08.isdn differ diff --git a/vbox_german/number_09.isdn b/vbox_german/number_09.isdn new file mode 100644 index 0000000..c5510aa Binary files /dev/null and b/vbox_german/number_09.isdn differ diff --git a/vbox_german/number_10.isdn b/vbox_german/number_10.isdn new file mode 100644 index 0000000..97d0548 Binary files /dev/null and b/vbox_german/number_10.isdn differ diff --git a/vbox_german/number_11.isdn b/vbox_german/number_11.isdn new file mode 100644 index 0000000..90f016c Binary files /dev/null and b/vbox_german/number_11.isdn differ diff --git a/vbox_german/number_12.isdn b/vbox_german/number_12.isdn new file mode 100644 index 0000000..4165458 Binary files /dev/null and b/vbox_german/number_12.isdn differ diff --git a/vbox_german/number_13.isdn b/vbox_german/number_13.isdn new file mode 100644 index 0000000..b40c846 Binary files /dev/null and b/vbox_german/number_13.isdn differ diff --git a/vbox_german/number_14.isdn b/vbox_german/number_14.isdn new file mode 100644 index 0000000..8fb9d7b Binary files /dev/null and b/vbox_german/number_14.isdn differ diff --git a/vbox_german/number_15.isdn b/vbox_german/number_15.isdn new file mode 100644 index 0000000..3ced03c Binary files /dev/null and b/vbox_german/number_15.isdn differ diff --git a/vbox_german/number_16.isdn b/vbox_german/number_16.isdn new file mode 100644 index 0000000..7a58265 Binary files /dev/null and b/vbox_german/number_16.isdn differ diff --git a/vbox_german/number_17.isdn b/vbox_german/number_17.isdn new file mode 100644 index 0000000..8aaf4b9 Binary files /dev/null and b/vbox_german/number_17.isdn differ diff --git a/vbox_german/number_18.isdn b/vbox_german/number_18.isdn new file mode 100644 index 0000000..b576f20 Binary files /dev/null and b/vbox_german/number_18.isdn differ diff --git a/vbox_german/number_19.isdn b/vbox_german/number_19.isdn new file mode 100644 index 0000000..f376cc6 Binary files /dev/null and b/vbox_german/number_19.isdn differ diff --git a/vbox_german/number_20.isdn b/vbox_german/number_20.isdn new file mode 100644 index 0000000..e720901 Binary files /dev/null and b/vbox_german/number_20.isdn differ diff --git a/vbox_german/number_21.isdn b/vbox_german/number_21.isdn new file mode 100644 index 0000000..6921013 Binary files /dev/null and b/vbox_german/number_21.isdn differ diff --git a/vbox_german/number_22.isdn b/vbox_german/number_22.isdn new file mode 100644 index 0000000..53ce4d5 Binary files /dev/null and b/vbox_german/number_22.isdn differ diff --git a/vbox_german/number_23.isdn b/vbox_german/number_23.isdn new file mode 100644 index 0000000..9faba9e Binary files /dev/null and b/vbox_german/number_23.isdn differ diff --git a/vbox_german/number_24.isdn b/vbox_german/number_24.isdn new file mode 100644 index 0000000..e549eb0 Binary files /dev/null and b/vbox_german/number_24.isdn differ diff --git a/vbox_german/number_25.isdn b/vbox_german/number_25.isdn new file mode 100644 index 0000000..40d6c74 Binary files /dev/null and b/vbox_german/number_25.isdn differ diff --git a/vbox_german/number_26.isdn b/vbox_german/number_26.isdn new file mode 100644 index 0000000..f81864f Binary files /dev/null and b/vbox_german/number_26.isdn differ diff --git a/vbox_german/number_27.isdn b/vbox_german/number_27.isdn new file mode 100644 index 0000000..2690e07 Binary files /dev/null and b/vbox_german/number_27.isdn differ diff --git a/vbox_german/number_28.isdn b/vbox_german/number_28.isdn new file mode 100644 index 0000000..ae0af88 Binary files /dev/null and b/vbox_german/number_28.isdn differ diff --git a/vbox_german/number_29.isdn b/vbox_german/number_29.isdn new file mode 100644 index 0000000..2b7efac Binary files /dev/null and b/vbox_german/number_29.isdn differ diff --git a/vbox_german/number_30.isdn b/vbox_german/number_30.isdn new file mode 100644 index 0000000..8781ed9 Binary files /dev/null and b/vbox_german/number_30.isdn differ diff --git a/vbox_german/number_31.isdn b/vbox_german/number_31.isdn new file mode 100644 index 0000000..67d95be Binary files /dev/null and b/vbox_german/number_31.isdn differ diff --git a/vbox_german/number_32.isdn b/vbox_german/number_32.isdn new file mode 100644 index 0000000..86d5ed6 Binary files /dev/null and b/vbox_german/number_32.isdn differ diff --git a/vbox_german/number_33.isdn b/vbox_german/number_33.isdn new file mode 100644 index 0000000..c27886b Binary files /dev/null and b/vbox_german/number_33.isdn differ diff --git a/vbox_german/number_34.isdn b/vbox_german/number_34.isdn new file mode 100644 index 0000000..26c83f9 Binary files /dev/null and b/vbox_german/number_34.isdn differ diff --git a/vbox_german/number_35.isdn b/vbox_german/number_35.isdn new file mode 100644 index 0000000..7d167a3 Binary files /dev/null and b/vbox_german/number_35.isdn differ diff --git a/vbox_german/number_36.isdn b/vbox_german/number_36.isdn new file mode 100644 index 0000000..a6d2dfe Binary files /dev/null and b/vbox_german/number_36.isdn differ diff --git a/vbox_german/number_37.isdn b/vbox_german/number_37.isdn new file mode 100644 index 0000000..bb9e88a Binary files /dev/null and b/vbox_german/number_37.isdn differ diff --git a/vbox_german/number_38.isdn b/vbox_german/number_38.isdn new file mode 100644 index 0000000..28625da Binary files /dev/null and b/vbox_german/number_38.isdn differ diff --git a/vbox_german/number_39.isdn b/vbox_german/number_39.isdn new file mode 100644 index 0000000..912db59 Binary files /dev/null and b/vbox_german/number_39.isdn differ diff --git a/vbox_german/number_40.isdn b/vbox_german/number_40.isdn new file mode 100644 index 0000000..68c0dfb Binary files /dev/null and b/vbox_german/number_40.isdn differ diff --git a/vbox_german/number_41.isdn b/vbox_german/number_41.isdn new file mode 100644 index 0000000..eff4448 Binary files /dev/null and b/vbox_german/number_41.isdn differ diff --git a/vbox_german/number_42.isdn b/vbox_german/number_42.isdn new file mode 100644 index 0000000..52dca7f Binary files /dev/null and b/vbox_german/number_42.isdn differ diff --git a/vbox_german/number_43.isdn b/vbox_german/number_43.isdn new file mode 100644 index 0000000..5375f3e Binary files /dev/null and b/vbox_german/number_43.isdn differ diff --git a/vbox_german/number_44.isdn b/vbox_german/number_44.isdn new file mode 100644 index 0000000..2768832 Binary files /dev/null and b/vbox_german/number_44.isdn differ diff --git a/vbox_german/number_45.isdn b/vbox_german/number_45.isdn new file mode 100644 index 0000000..71dd18b Binary files /dev/null and b/vbox_german/number_45.isdn differ diff --git a/vbox_german/number_46.isdn b/vbox_german/number_46.isdn new file mode 100644 index 0000000..c3f7b6d Binary files /dev/null and b/vbox_german/number_46.isdn differ diff --git a/vbox_german/number_47.isdn b/vbox_german/number_47.isdn new file mode 100644 index 0000000..8cd37b1 Binary files /dev/null and b/vbox_german/number_47.isdn differ diff --git a/vbox_german/number_48.isdn b/vbox_german/number_48.isdn new file mode 100644 index 0000000..b5fae1e Binary files /dev/null and b/vbox_german/number_48.isdn differ diff --git a/vbox_german/number_49.isdn b/vbox_german/number_49.isdn new file mode 100644 index 0000000..fcba8a3 Binary files /dev/null and b/vbox_german/number_49.isdn differ diff --git a/vbox_german/number_50.isdn b/vbox_german/number_50.isdn new file mode 100644 index 0000000..7482725 Binary files /dev/null and b/vbox_german/number_50.isdn differ diff --git a/vbox_german/number_51.isdn b/vbox_german/number_51.isdn new file mode 100644 index 0000000..4b008a9 Binary files /dev/null and b/vbox_german/number_51.isdn differ diff --git a/vbox_german/number_52.isdn b/vbox_german/number_52.isdn new file mode 100644 index 0000000..6d8683d Binary files /dev/null and b/vbox_german/number_52.isdn differ diff --git a/vbox_german/number_53.isdn b/vbox_german/number_53.isdn new file mode 100644 index 0000000..1e387d8 Binary files /dev/null and b/vbox_german/number_53.isdn differ diff --git a/vbox_german/number_54.isdn b/vbox_german/number_54.isdn new file mode 100644 index 0000000..1682e0d Binary files /dev/null and b/vbox_german/number_54.isdn differ diff --git a/vbox_german/number_55.isdn b/vbox_german/number_55.isdn new file mode 100644 index 0000000..4253777 Binary files /dev/null and b/vbox_german/number_55.isdn differ diff --git a/vbox_german/number_56.isdn b/vbox_german/number_56.isdn new file mode 100644 index 0000000..9830d30 Binary files /dev/null and b/vbox_german/number_56.isdn differ diff --git a/vbox_german/number_57.isdn b/vbox_german/number_57.isdn new file mode 100644 index 0000000..30946eb Binary files /dev/null and b/vbox_german/number_57.isdn differ diff --git a/vbox_german/number_58.isdn b/vbox_german/number_58.isdn new file mode 100644 index 0000000..713bc02 Binary files /dev/null and b/vbox_german/number_58.isdn differ diff --git a/vbox_german/number_59.isdn b/vbox_german/number_59.isdn new file mode 100644 index 0000000..259897b Binary files /dev/null and b/vbox_german/number_59.isdn differ diff --git a/vbox_german/number_ein.isdn b/vbox_german/number_ein.isdn new file mode 100644 index 0000000..b6ab21f Binary files /dev/null and b/vbox_german/number_ein.isdn differ diff --git a/vbox_german/number_eine.isdn b/vbox_german/number_eine.isdn new file mode 100644 index 0000000..56c0f2a Binary files /dev/null and b/vbox_german/number_eine.isdn differ diff --git a/vbox_german/oclock.isdn b/vbox_german/oclock.isdn new file mode 100644 index 0000000..1929887 Binary files /dev/null and b/vbox_german/oclock.isdn differ diff --git a/vbox_german/pause.isdn b/vbox_german/pause.isdn new file mode 100644 index 0000000..b9bb79d Binary files /dev/null and b/vbox_german/pause.isdn differ diff --git a/vbox_german/play.isdn b/vbox_german/play.isdn new file mode 100644 index 0000000..5f011a6 Binary files /dev/null and b/vbox_german/play.isdn differ diff --git a/vbox_german/record_ask.isdn b/vbox_german/record_ask.isdn new file mode 100644 index 0000000..aca3fe6 Binary files /dev/null and b/vbox_german/record_ask.isdn differ diff --git a/vbox_german/record_play.isdn b/vbox_german/record_play.isdn new file mode 100644 index 0000000..b368714 Binary files /dev/null and b/vbox_german/record_play.isdn differ diff --git a/vbox_german/record_record.isdn b/vbox_german/record_record.isdn new file mode 100644 index 0000000..65c7e9b Binary files /dev/null and b/vbox_german/record_record.isdn differ diff --git a/vbox_german/store_ask.isdn b/vbox_german/store_ask.isdn new file mode 100644 index 0000000..8312075 Binary files /dev/null and b/vbox_german/store_ask.isdn differ diff --git a/vbox_german/store_done.isdn b/vbox_german/store_done.isdn new file mode 100644 index 0000000..4f96f60 Binary files /dev/null and b/vbox_german/store_done.isdn differ diff --git a/watch.c b/watch.c new file mode 100644 index 0000000..e8d7a5e --- /dev/null +++ b/watch.c @@ -0,0 +1,147 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** PBX Watchdog with debug function ** +** ** +\*****************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "save.h" + +time_t now; +#define GET_NOW() \ + { \ + now = time(&now); \ + } + +int quit = 0; + +void sighandler(int sigset) +{ + if (sigset == SIGHUP) + return; + if (sigset == SIGPIPE) + return; + printf("Signal received: %d\n", sigset); + quit = 1; +} + + +int main(int argc, char *argv[]) +{ + int debug = 0; + int ret; + char command[256], file[64] = "pbx"; + + printf("** PBX-Watch ***\n\n"); + + /* show options */ + if (argc <= 1) + { + usage: + printf("\n"); + printf("Usage: pbxwatch (run | debug) [fork]\n"); + printf("run = Starts PBX4Linux (pbx) and restart it on every crash.\n"); + printf("debug = Starts PBX4Linux using debugger an restarts it on every crash.\n"); + printf(" Log files and back trace are moved into a seperate directory.\n"); + printf("fork = Option to make pbxwatch running as daemon.\n"); + printf("\n"); + return(0); + } + + if (!(strcasecmp(argv[1],"run"))) + debug = 0; + else + if (!(strcasecmp(argv[1],"debug"))) + debug = 1; + else + goto usage; + + /* do fork */ + if (argc > 2) + if (!(strcasecmp(argv[2],"fork"))) + { + /* do daemon fork */ + pid_t pid; + + pid = fork(); + + if (pid < 0) + { + fprintf(stderr, "Cannot fork!\n"); + exit(EXIT_FAILURE); + } + if (pid != 0) + { + printf("PBX-Watch: Starting daemon.\n"); + exit(0); + } + usleep(200000); + printf("\n"); + } + + /* signal handlers */ + signal(SIGINT,sighandler); + signal(SIGHUP,sighandler); + signal(SIGTERM,sighandler); + signal(SIGPIPE,sighandler); + + while(42) + { + /* RUN */ + printf("*** RUNNING PBX4LINUX ***\n"); + if (debug) + { + /* write debugger batch list */ + SPRINT(command, "echo > /tmp/pbxwatch.batch -e \"handle SIGPIPE nostop\\\\nfile %s\\\\nrun start\\\\nbt\\\\n\"", file); + system(command); + SPRINT(command, "gdb --quiet --batch -x \"/tmp/pbxwatch.batch\" 2>&1 | tee %s/crashreport", INSTALL_DATA); + printf("*** DEBUGGER STARTED ***\n"); + ret = system(command); + printf("*** DEBUGGER FINISHED ***\n"); + } else + { + SCPY(command, file); + ret = system(command); + if (ret != 11) + { + printf("*** PBX4LINUX exitted with return code %d ***\n", ret); + break; + } + printf("*** PBX4LINUX CRASHED ***\n"); + } + + /* LOG */ + printf("*** WRITING LOG ***\n"); + GET_NOW(); + SPRINT(command, "mkdir \"%s/%d\" && mv \"%s/crashreport\" \"%s/%d\" && cp -a \"%s/debug*.log\" \"%s/%d\"\n", INSTALL_DATA, now, INSTALL_DATA, INSTALL_DATA, now, INSTALL_DATA, INSTALL_DATA, now); + system(command); + + /* DELAY */ + printf("*** SLEEPING 10 SECONDS UNTIL RESTART ***\n"); + sleep(10); + if (quit) + break; + } + + signal(SIGINT,SIG_DFL); + signal(SIGHUP,SIG_DFL); + signal(SIGTERM,SIG_DFL); + signal(SIGPIPE,SIG_DFL); + + return(0); +} + + diff --git a/wizzard.c b/wizzard.c new file mode 100644 index 0000000..80851c9 --- /dev/null +++ b/wizzard.c @@ -0,0 +1,194 @@ +/*****************************************************************************\ +** ** +** PBX4Linux ** +** ** +**---------------------------------------------------------------------------** +** Copyright: Andreas Eversberg ** +** ** +** installation wizzard ** +** ** +\*****************************************************************************/ + +#include +#include +#include + +char *check_mISDN(void) +{ +} + +char *install_mISDN(void) +{ +} + +char *check_kernel(void) +{ +} + +char *install_kernel(void) +{ +} + +char *check_includes(void) +{ +} + +char *install_includes(void) +{ +} + +char *check_device(void) +{ +} + +char *install_device(void) +{ +} + +char *check_lib(void) +{ +} + +char *install_lib(void) +{ +} + +char *check_isdnnet(void) +{ +} + +char *install_isdnnet(void) +{ +} + +char *check_pbx(void) +{ +} + +char *install_pbx(void) +{ +} + +char *check_mISDNrc(void) +{ +} + +char *install_mISDNrc(void) +{ +} + + +struct jobs { + char *name; + (char *(check))(void); + (char *(install))(void); +} jobs[] = { + { "Install mISDN to kernel Source.", check_mISDN, install_mISDN }, + { "Compile and install Kernel.", check_kernel, install_kernel }, + { "Copy user space includes.", check_includes, install_includes }, + { "Create \"/dev/mISDN\" device", check_device, install_device }, + { "Compile mISDN device library.", check_lib, install_lib }, + { "Compile mISDN NT-mode library.", check_isdnnet, install_isdnnet }, + { "Compile and install PBX4Linux.", check_pbx, install_pbx }, + { "Create mISDNrc to load mISDN.", check_mISDNrc, install_mISDNrc }, + { NULL, NULL, NULL}, +}; + + +int main(int argc, char *argv[]) +{ + int allok = 1; + int i; + char *ret; + char input[256]; + + printf("\nWelcome to PBX4Linux installation wizzard.\n\n"); + + again: + + /* check what to do */ + i = 0; + while(jobs[i].name) + { + printf("Checking: %s - ", jobs[i].name); + fflush(stdout); + ret = jobs[i].check(); + if (ret == NULL) + printf("OK\n"); + else { + printf("%s\n", ret); + allok = 0; + } + i++; + } + + /* if all ok */ + if (allok) + { + printf("\nEverything seems to be correctly installed. Do you like to continue? (y/n)"); + fflush(stdout); + do { + scanf("%s", input); + } while(input[0] != 'y' && input[0] != 'n'); + if (input[0] == 'n') + return(0); + + } + + /* select installation step(s) */ + printf("\nPlease select one of the following install options:\n"); + printf("a - Complete installation with all of the following steps\n"); + i = 0; + while(jobs[i].name) + { + printf("%d - Step %d: %s\n", i+1, i+1, jobs[i].name); + i++; + } + printf("x - Exit wizzard.\n"); + printf("\n(a/1-%d/x)", i); + fflush(stdout); + do { + scanf("%s", input); + } while(input[0]!='a' && (input[0]<'1' || input[0]>('0'+i)) && input[0]!='x'); + if (input[0] == 'x') + return(0); + i = 0; + while(jobs[i].name) + { + if (input[0]=='a' || (input[0]-'1')==i) + { + printf("\nDoing Step %d: %s\n", i+1, jobs[i].name); + ret = jobs[i].check(); + if (ret) + printf("It is required to continue with this step. Dou you want to continue? (y/n)"); + else + printf("It is not required to continue with this step. Still want to continue? (y/n)"); + fflush(stdout); + do { + scanf("%s", input); + } while(input[0] != 'y' && input[0] != 'n'); + if (input[0] == 'n') + i++; + continue; + } + ret = jobs[i].install(); + if (ret) + { + printf("Failed to install step: %s\n", jobs[i].name); + printf("%s\n", ret); + printf("Do you like to retry? (y/n)"); + fflush(stdout); + do { + scanf("%s", input); + } while(input[0] != 'y' && input[0] != 'n'); + if (input[0] == 'y') + continue; + } + break; + } + i++; + } + goto again; +} + + -- cgit v1.2.3-55-g7522