summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeo C2015-12-06 23:15:12 +0100
committerLeo C2015-12-06 23:15:12 +0100
commitb0db08390d94c94270ef78aa154a502f8ea4a65b (patch)
tree69366cb965063f072c85ae770999160f52b90907
parente58a7a2546e59e692ea958cbdcdbb184654383be (diff)
downloadkermit-80-b0db08390d94c94270ef78aa154a502f8ea4a65b.zip
Add AVR-CP/M system (cpxac.asm) and a Makefile
-rw-r--r--.gitignore6
-rw-r--r--Makefile122
-rw-r--r--cpsker.asm4
-rw-r--r--cpsker.hex1589
-rw-r--r--cpxac.asm762
-rw-r--r--cpxcom.asm10
-rw-r--r--cpxswt.asm6
-rw-r--r--cpxtyp.asm28
8 files changed, 925 insertions, 1602 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..6cb9215
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,6 @@
+cpsker.hex
+cpxtyp.hex
+*.com
+*.rel
+*.prn
+
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..792e082
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,122 @@
+
+# The system-independent files:
+
+SRC_CPSKER = cpsker.asm cpsdef.asm cpsmit.asm cpscom.asm cpspk1.asm \
+ cpspk2.asm cpsrem.asm cpsser.asm cpstt.asm cpscpm.asm \
+ cpswld.asm cpscmd.asm cpsutl.asm cpsdat.asm cpxlnk.asm
+
+# The system-dependent files:
+
+SRC_SYSDEP = cpxtyp.asm cpxlnk.asm cpxcom.asm cpxswt.asm cpxvdu.asm
+
+# One of:
+
+SRC_SYSTEM = cpxsys.asm cpxtor.asm cpxnor.asm cpxmrl.asm cpxsb.asm \
+ cpxcif.asm cpxhea.asm cpxapp.asm cpxpcw.asm cpxbbi.asm cpxbee.asm \
+ cpxsyo.asm cpxtm4.asm cpxgni.asm cpxpro.asm cpxz80.asm cpxac.asm
+
+
+OVLADR = 7000
+
+
+
+
+# CP/M emulator
+#CPMEMU = aliados
+CPMEMU = zxcc
+
+ifeq "$(OS)" "Windows_NT"
+ PLATFORM=win32
+else
+ PLATFORM=Linux
+endif
+
+#Location of M80/L80
+ifeq ($(PLATFORM),Linux)
+ CPMBIN = /usr/local/lib/cpm/bin80
+else
+ CPMBIN = C:/cpmbin
+endif
+
+AS = $(CPMEMU) $(CPMBIN)/m80.com
+LINK = $(CPMEMU) $(CPMBIN)/l80.com
+
+do_as =
+ @COMMAND="$(AS) =$<"; \
+ OUTPUT=$$(mktemp); echo $${COMMAND}; \
+ $${COMMAND} > $${OUTPUT}; \
+ grep -q 'No Fatal error(s).$$' $${OUTPUT}; ERROR=$$? ; \
+ if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; rm $@; fi ; \
+ rm $${OUTPUT}; \
+ exit $${ERROR}
+
+
+.PHONY: all
+
+.SUFFIXES:
+
+all: kerm411.com cpxtyp.prn cpsker.prn
+
+
+kerm411.com: cpsker.rel cpxtyp.rel
+ $(LINK) -/P:100,cpsker,cpsker/N/X/E
+ $(LINK) -/P:$(OVLADR),cpxtyp,cpxtyp/N/X/E
+ $(CPMEMU) mload.com -kerm411.com=cpsker.hex,cpxtyp.hex
+
+# grep -v -P '^(\x1A)|(:..7)|(:00....01)' cpsker.hex >kerm411.hex
+# grep -v -P '^\x1A' cpxtyp.hex >>kerm411.hex
+# objcopy -I ihex -O binary kerm411.hex kerm411.com
+
+
+cpxtyp.rel: $(SRC_SYSDEP) $(SRC_SYSTEM)
+cpsker.rel: $(SRC_CPSKER)
+cpxtyp.prn: $(SRC_SYSDEP) $(SRC_SYSTEM)
+cpsker.prn: $(SRC_CPSKER)
+
+mload.com: mload.rel
+ $(LINK) -/P:100,mload,mload/N/E
+
+mload.rel: mload.asm
+ echo -e 'aseg\r' >tmp.mac
+ cat mload.asm >>tmp.mac
+ @COMMAND="$(AS) -mload=tmp.mac"; \
+ OUTPUT=$$(mktemp); echo $${COMMAND}; \
+ $${COMMAND} > $${OUTPUT}; \
+ grep -q 'No Fatal error(s).$$' $${OUTPUT}; ERROR=$$? ; \
+ if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; rm $@; fi ; \
+ rm $${OUTPUT}; \
+ exit $${ERROR}
+
+
+%.rel: %.asm
+ @COMMAND="$(AS) =$<"; \
+ OUTPUT=$$(mktemp); echo $${COMMAND}; \
+ $${COMMAND} | tee $${OUTPUT}; \
+ grep -q 'No Fatal error(s).$$' $${OUTPUT}; ERROR=$$? ; \
+ if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; rm $@; fi ; \
+ #rm $${OUTPUT}; \
+ exit $${ERROR}
+
+
+%.prn: %.asm
+ @COMMAND="$(AS) ,$@=$<"; \
+ OUTPUT=$$(mktemp); echo $${COMMAND}; \
+ $${COMMAND} > $${OUTPUT}; \
+ grep -q 'No Fatal error(s).$$' $${OUTPUT}; ERROR=$$? ; \
+ if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; fi ; \
+ #rm $${OUTPUT}; \
+ exit $${ERROR}
+
+
+#%.BIN: %.rel
+# $(LINK) $<,$@/N/E
+## zxcc l80.com -$<,$@/N/E
+
+%.com: %.rel
+ $(LINK) $<,$@/N/E
+
+
+.PHONY: clean
+
+clean:
+ rm -f *.rel *.prn
diff --git a/cpsker.asm b/cpsker.asm
index b3d4831..c232c11 100644
--- a/cpsker.asm
+++ b/cpsker.asm
@@ -266,8 +266,8 @@ debug equ FALSE ; set false for running system. True => does some
; Assembler type. Define the appropriate one TRUE, the rest FALSE. (We can't
; use ASM, because it cannot handle multiple input files)
mac80 EQU FALSE ; For assembly via MAC80 cross-assembler.
-m80 EQU false ; For assembly via Microsoft's M80.
-lasm EQU true ; For assembly via LASM, a public-domain
+m80 EQU TRUE ; For assembly via Microsoft's M80.
+lasm EQU FALSE ; For assembly via LASM, a public-domain
; assembler.
;
; Get the other modules...
diff --git a/cpsker.hex b/cpsker.hex
deleted file mode 100644
index 9120b31..0000000
--- a/cpsker.hex
+++ /dev/null
@@ -1,1589 +0,0 @@
-:100100000000C32701C3C201C3234F4350534D49CD
-:10011000542E41534D20283330292032392D4D6142
-:10012000722D313939312421000039220F63319188
-:1001300063117C54CD554F0E19CD82513C329463DE
-:100140003A8670FEFF3E00C24D013286702A007072
-:100150007CB5CAB0011154FF197CB5C2B9012A029D
-:100160007011FAFF197CB5C2B901218251222770A2
-:10017000CD4D703AA570322D6711C95ACD777021D7
-:10018000800011A26A018000CD74703A8000A7CA75
-:10019000A1013DCAA1013AAD63F61032AD6332ACA4
-:1001A000633EFF322C67CD1A08AF32AE63C3C20183
-:1001B000115556CD554FC3D006118B56CD554FC353
-:1001C000D006319163CD1470AF32324732334732AB
-:1001D000344732AC6C3271623272623299663A9450
-:1001E00063C64032C654CD09543AA26CFE30C2F305
-:1001F000013E2032C4543AA16C32C5543AAD63E694
-:1002000011C20B023AAC63A7C2CA0611B954CD524F
-:1002100047112502213C03CD084FEBE911E554CDF0
-:100220007770C3C2012005425245414B24AA060300
-:1002300042594524BB06014324CA3D07434F4E4E55
-:1002400045435424CA3D04434F5059249344094420
-:1002500049524543544F525924E4400545524153B5
-:100260004524C042044558495424CA060646494E0E
-:10027000495348240F270347455424371904484558
-:100280004C5024850705494E50555424D306034C41
-:100290004F47249107064C4F474F55542465270676
-:1002A0004F555450555424DC18055041555345249E
-:1002B000B307055052494E5424F60704515549548A
-:1002C00024CA060152246D19075245434549564533
-:1002D000246D190652454D4F544524542D06524560
-:1002E0004E414D45248345015324A31D0453454EDF
-:1002F0004424A31D035345542484080453484F57F2
-:100300002449150653544154555324551504535448
-:1003100041592458100454414B45240908085452AB
-:10032000414E534D495424283C04545950452447C8
-:10033000430756455253494F4E241D180D0A425249
-:1003400045414B20746F2073656E6420612062729A
-:1003500065616B20746F2074686520686F73740D1D
-:100360000A42594520746F20686F737420284C4FDF
-:10037000474F55542920616E642065786974207454
-:100380006F2043502F4D0D0A434F4E4E454354208E
-:10039000746F20686F7374206F6E2073656C656373
-:1003A00074656420706F72740D0A434F5059207445
-:1003B0006F20636F707920612043502F4D20666954
-:1003C0006C650D0A4449524543544F5259206F669B
-:1003D0002063757272656E742075736564204D6953
-:1003E00063726F2D6469736B0D0A4552415345204A
-:1003F000612043502F4D2066696C650D0A455849B0
-:100400005420746F2043502F4D0D0A46494E4953D6
-:10041000482072756E6E696E67204B65726D6974E7
-:10042000206F6E2074686520686F73740D0A4745ED
-:100430005420612066696C652066726F6D20746857
-:100440006520686F73740D0A48454C50206279200E
-:10045000676976696E672074686973206D65737368
-:100460006167650D0A494E50555420746F206D61C7
-:100470006B6520746865206D6963726F20776169B0
-:100480007420666F72206120737472696E672066D3
-:10049000726F6D2074686520686F73740D0A4C4F1D
-:1004A0004720746865207465726D696E616C207395
-:1004B000657373696F6E7320746F20612066696C59
-:1004C000650D0A4C4F474F55542074686520686F7E
-:1004D00073740D0A4F555450555420746F20736532
-:1004E0006E6420612073706563696669656420735A
-:1004F0007472696E6720746F2074686520686F730A
-:10050000740D0A504155534520746F20776169740A
-:1005100020666F722061206C6974746C6520746948
-:100520006D650D0A5052494E5420612066696C6514
-:1005300020746F20746865207072696E7465720D26
-:100540000A5155495420746F2043502F4D0D0A52C3
-:100550004543454956452066696C652066726F6D56
-:1005600020686F73740D0A52454D4F544520746FC7
-:100570002073656E6420636F6D6D616E64732074AB
-:100580006F20612072656D6F74652073657276658A
-:10059000720D0A52454E414D4520746F2072656EB2
-:1005A000616D6520612043502F4D2066696C650D9B
-:1005B0000A53454E442066696C6520746F20686F4D
-:1005C00073740D0A534554206120706172616D652A
-:1005D0007465720D0A53484F572074686520706126
-:1005E00072616D65746572730D0A535441545553AD
-:1005F000206F66204B65726D69740D0A5354415922
-:10060000206174204B65726D697420636F6D6D613C
-:100610006E642D6C6576656C206166746572206110
-:1006200020636F6D6D616E64207461696C0D0A5496
-:10063000414B4520636F6D6D616E64732066726F10
-:100640006D20612066696C650D0A5452414E534D10
-:1006500049542066696C6520746F20686F7374203C
-:1006600028696E20636F6E6E6563742073746174A5
-:1006700065290D0A5459504520612066696C652032
-:10068000746F2074686520636F6E736F6C650D0AFC
-:1006900056455253494F4E206F66204B65726D6927
-:1006A000742072756E6E696E6724CD1A4F3E42CD0E
-:1006B0005C70C3C20111AF58C3C201CD1A4FCD71D6
-:1006C00027C3C201CD6270C3CD06CD1A4FCD507085
-:1006D000C300003E06CDA547C3C2012A2A67221BDC
-:1006E00067119B663E05CDA547C3C20132226BCD83
-:1006F0001A4F2A1B6729292923221B67221D67AF4E
-:10070000326D652A1B672B221B677CB5C217073E1B
-:1007100003329766C37C07CDA63DE67FC24E07CD68
-:100720008844F5CD0870F1E67FC236073A226BA700
-:10073000C20307C3C201FE03C246073AAD63E60126
-:10074000C47752C3C201FE1ACAC201C303075F3A8B
-:100750006D65219B66856F3E008C677BBEC2FF0680
-:100760003A6D653C326D652A1D67221B675F3A2230
-:100770006B93C20307AF329766C3C201119857CD7E
-:100780007770C3C201CD1A4F113C03CD3554C3C29B
-:10079000013E03115C00CDA547C31C02CD1A4F21B9
-:1007A0005C0011A063010C00CD74703E01329F63A8
-:1007B000C3C2013E06CDA547C3C2012A2A67EB2A60
-:1007C00027677CE67F6719222A67CD8B523AAD6393
-:1007D000A7C2DF070E061EFFCD8251A7C2C2012AA3
-:1007E0002A67EB2A27677CE67F677B955F7A9CB355
-:1007F000C2CA07C3C2013EFF322067CD4743AF32B2
-:100800002067C3C201AFC3F8073E0211BD63CDA587
-:1008100047C3C201CD2608C3C201010C0011BD634C
-:1008200021AF63CD74703AAD63E601C477520E1AFE
-:1008300011E163CD8251AF32CB6332DD6311BD6311
-:100840000E0FCD82513CCA5A0821000022BB633AE8
-:10085000AD63F60132AD63C353523AAE63B7C01114
-:10086000C355CD7770C37A51435053434F4D2E41FA
-:10087000534D20283133292032352D4D61722D31D1
-:1008800039393124118F0821D109CD084FEBE91AEC
-:100890000B4155544F52454345495645241A0D10B6
-:1008A000424C4F434B2D434845434B2D54595045E3
-:1008B00024230D0B4255464645522D53495A452493
-:1008C000C00D09434F4C4C4953494F4E2463110509
-:1008D00044454255472491100C44454641554C54DB
-:1008E0002D4449534B24E70D134449524543544F7B
-:1008F00052592D46494C452D53495A45247B1106E2
-:10090000455343415045246B100946494C452D4DF4
-:100910004F444524B4110C464C4F572D434F4E5471
-:10092000524F4C2472110349424D24841110494EF8
-:10093000434F4D504C4554452D46494C455324F9A1
-:10094000110A4C4F43414C2D4543484F247F10071B
-:100950004C4F4747494E47246210074E4F2D45588C
-:10096000495424581006504152495459242B12041A
-:10097000504F525424D314075052494E54455224D8
-:100980008810075245434549564524830F04534573
-:100990004E4424110E05535045454424B5140754C4
-:1009A000414354524150247E12085445524D494E01
-:1009B000414C2431130554494D4552249A10045595
-:1009C00053455224F942075741524E494E4724A3FA
-:1009D000100D0A4155544F52454345495645207420
-:1009E0006F206175746F6D61746963616C6C7920DF
-:1009F00072652D726563656976652066696C6573DD
-:100A00000D0A424C4F434B2D434845434B2D5459FF
-:100A1000504520666F72206572726F722064657433
-:100A2000656374696F6E0D0A4255464645522D53F3
-:100A3000495A4520666F72206D756C74692D736517
-:100A400063746F7220627566666572696E670D0AFF
-:100A5000434F4C4C4953494F4E20746F207370657F
-:100A60006369667920616374696F6E20666F7220B6
-:100A700066696C656E616D6520636F6E666C696337
-:100A800074730D0A4445425547206D657373616761
-:100A90006520636F6E74726F6C0D0A444546415554
-:100AA0004C542D4449534B20746F20726563656923
-:100AB000766520646174610D0A4449524543544F80
-:100AC00052592D46494C452D53495A452077686562
-:100AD0006E20646973706C6179696E6720646972F5
-:100AE0006563746F726965730D0A455343415045E0
-:100AF0002063686172616374657220647572696EE7
-:100B00006720434F4E4E4543540D0A46494C452DF0
-:100B10004D4F444520666F72206F7574676F696E24
-:100B2000672066696C65730D0A464C4F572D434F1D
-:100B30004E54524F4C20746F2073657420584F4EA2
-:100B40002F584F464620666C6F7720636F6E747225
-:100B50006F6C0D0A49424D206D6F64653A207061DB
-:100B60007269747920616E64207475726E2061728E
-:100B70006F756E642068616E646C696E670D0A49FA
-:100B80004E434F4D504C4554452D46494C452064ED
-:100B90006973706F736974696F6E0D0A4C4F4341CE
-:100BA0004C2D4543484F202868616C662D64757054
-:100BB0006C6578290D0A4C4F4747494E47206F66B0
-:100BC000207465726D696E616C2073657373696FF3
-:100BD0006E730D0A4E4F2D4558495420746F207086
-:100BE000726576656E74206578697420746F204331
-:100BF000502F4D206166746572206120636F6D6DAA
-:100C0000616E64207461696C0D0A504152495459F7
-:100C100020666F7220636F6D6D756E6963617469B4
-:100C20006F6E206C696E650D0A504F525420746FC0
-:100C300020636F6D6D756E6963617465206F6E0DF5
-:100C40000A5052494E54455220636F707920636FA9
-:100C50006E74726F6C0D0A524543454956452070BB
-:100C60006172616D65746572730D0A53454E44205F
-:100C7000706172616D65746572730D0A53504545FC
-:100C800044206F6620636F6D6D756E696361746972
-:100C90006F6E206C696E650D0A54414320696E7455
-:100CA00065726661636520737570706F72740D0A8A
-:100CB0005445524D494E414C20746F207365742049
-:100CC00061207465726D696E616C20747970650D58
-:100CD0000A54494D455220636F6E74726F6C0D0A51
-:100CE0005553455220746F207365742061207573CD
-:100CF0006572206E756D6265720D0A5741524E49DC
-:100D00004E4720666F722066696C656E616D652066
-:100D1000636F6E666C6963747324CD071532A06CC3
-:100D2000C3C20111320D217C0DCD0D1532A070C34F
-:100D3000C2010314312D4348415241435445522DC1
-:100D4000434845434B53554D24313114322D4348CC
-:100D5000415241435445522D434845434B53554D11
-:100D600024323215332D4348415241435445522DCC
-:100D70004352432D43434954542433330D0A312DF8
-:100D80004348415241435445522D434845434B53F8
-:100D9000554D0D0A322D4348415241435445522D81
-:100DA000434845434B53554D0D0A332D434841525B
-:100DB00041435445522D4352432D434349545424F7
-:100DC0003E06CDA547C3C2012A2A677CA7C2DE0D15
-:100DD0003A2D67BDFADE0D7D32A570C3C20111093F
-:100DE00057CD7770C3C201115C003E10CDA547C33B
-:100DF000F20D3A5C00B7C2FC0D3A94633294630E74
-:100E00000DCD82513A94633D5F0E0ECD8251C3C227
-:100E100001111C0E21580ECD084FEBE9040850417A
-:100E2000442D4348415224410F0750414444494E08
-:100E30004724380F0F53544152542D4F462D5041E3
-:100E4000434B455424240F0D5041434B45542D4CE6
-:100E5000454E475448244A0F0D0A5041442D4348FB
-:100E6000415220746F20646566696E652074686500
-:100E700020706164206368617261637465722074BC
-:100E80006F207573650D0A50414444494E472074E4
-:100E90006F20646566696E6520746865206E756D87
-:100EA000626572206F66205041442D4348415220B4
-:100EB000746F207573650D0A53544152542D4F467B
-:100EC0002D5041434B455420746F20646566696E14
-:100ED0006520746865207374617274206F66207079
-:100EE00061636B6574206368617261637465720D20
-:100EF0000A5041434B45542D4C454E4754482066BB
-:100F00006F7220746865206C656E677468206F6608
-:100F1000207472616E736D697474656420706163AE
-:100F20006B657424CD1A4F11195CCD77700E01CD0D
-:100F30008251329763C3C201CD4310320000C3C255
-:100F400001CDF20F320000C3C201CD4310015F009A
-:100F5000E5CD2854E1112A57D2620F7D329470C337
-:100F6000C201CD7770C3C201CD4310FE04C2760F1B
-:100F7000114E57C3C201FE00CA700FC63032536B08
-:100F8000C3C201118E0F21580ECD084FEBE90408A2
-:100F90005041442D434841522401100750414444DC
-:100FA000494E4724DE0F0F53544152542D4F462DC6
-:100FB0005041434B455424CA0F0D5041434B4554B7
-:100FC0002D4C454E475448240A10CD1A4F11195C38
-:100FD000CD77700E01CD8251329663C3C2013E06B9
-:100FE000CDA547C3C2013E04CDA5472A2A677D325D
-:100FF0000000CD1A4F11405CCD77700E01CD8251AB
-:10100000C9CDF20F320000C3C201CD4310015F0011
-:10101000E5CD2854E1112A57D222107D329570C3B4
-:10102000C201CD7770C3C201CD4310FE04C2361099
-:10103000114E57C3C201FE00CA3010C63032546B85
-:10104000C3C2013E06CDA547C3C2013E04CDA5479C
-:10105000C3C2012A2A677DC9CD1A4FAF32AC63C320
-:10106000C201CD0715329F63C3C201CD1A4F11CC07
-:101070005BCD77700E01CD8251328770C3C201CD36
-:101080000715328E70C3C201CD0715328C70C3C2F2
-:1010900001CD0715328D70C3C201CD07153299639A
-:1010A000C3C201CD0715328F70C3C201040642418D
-:1010B000434B5550240202074449534341524424B0
-:1010C0000303094F56455257524954452400000620
-:1010D00052454E414D452401010D0A4241434B55B5
-:1010E00050202872656E616D65292065786973747A
-:1010F000696E672066696C65730D0A444953434104
-:101100005244206E65772076657273696F6E732026
-:101110006F66206578697374696E672066696C65AF
-:10112000730D0A4F56455257524954452065786908
-:101130007374696E672066696C65730D0A52454E5B
-:10114000414D45206E65772076657273696F6E73C9
-:10115000206F66206578697374696E672066696CB4
-:1011600065732411AC1021D910CD0D15328F70C3C9
-:10117000C201CD0715326E62C3C201CD0715323DE3
-:101180006AC3C201CD0715329070B7CAA2113E03DF
-:101190003293703E01328E70329963AF326E62C309
-:1011A000B1113E06329370AF328E70329963326E57
-:1011B00062C3C20111C31121E211CD0D153291702C
-:1011C000C3C2010305415343494924010106424971
-:1011D0004E4152592402020744454641554C54247D
-:1011E00000000D0A41534349490942494E415259B1
-:1011F0000944454641554C5424110812211C12CD76
-:101200000D15329270C3C201020744495343415243
-:1012100044240000044B4545502401010D0A444973
-:101220005343415244094B45455024113A1221631E
-:1012300012CD0D15329370C3C20105044556454EBB
-:10124000240000044D41524B240303044E4F4E45ED
-:10125000240606034F4444240909055350414345DD
-:10126000240C0C0D0A4556454E094D41524B094E72
-:101270004F4E45094F44440953504143452411A75B
-:101280001221C212CD0D15B7CAA112FE01CA9E12BB
-:1012900011EF5BCD77700E01CD825132A2703AA270
-:1012A0007032A170C3C20103094348415241435403
-:1012B0004552240202034F4646240000024F4E24AA
-:1012C00001010D0A4F4E20746F20656E61626C65DE
-:1012D0002054414320747261700D0A4F46462074B9
-:1012E0006F2064697361626C65205441432074729D
-:1012F00061700D0A43484152414354455220746F76
-:1013000020656E61626C6520544143207472617087
-:1013100020616E64207370656369667920696E74FC
-:10132000657263657074206368617261637465726D
-:101330002411731321AB13CD0D157AFE03C256137E
-:101340002A24707CB53E03C25613CD4F4F119D58D1
-:10135000CD7770C3C201FE40C2611332AD6CC3C20F
-:1013600001FE80C26D13AF32AD6CC3C20132867014
-:10137000C3C201060444554D422402020845585494
-:1013800045524E414C2403030551554945542440D0
-:101390004007524547554C4152248080034F4646F2
-:1013A00024000004565435322401010D0A44554DE1
-:1013B00042202D206F6E6C79207072696E746162AC
-:1013C0006C6520636861726163746572732070611B
-:1013D0007373656420746F207465726D696E616CDF
-:1013E0000D0A45585445524E414C202D20776974C2
-:1013F0006820656D756C6174696F6E20636F6465DC
-:101400002073797374656D207370656369666963B1
-:101410000D0A4F4646202D20616C6C206368617276
-:101420006163746572732070617373656420746F97
-:10143000207465726D696E616C0D0A515549455491
-:10144000202D20646973706C6179206E6F746869F7
-:101450006E6720647572696E67207472616E736660
-:101460006572730D0A524547554C4152202D206E2E
-:101470006F726D616C20646973706C617920666F46
-:1014800072207472616E73666572730D0A565435FC
-:1014900032202D20617373756D65204B65726D6907
-:1014A000742063616E20656D756C617465206120C8
-:1014B00056543532242A7C707CB5CA1219EB2A7E28
-:1014C00070CD084FD5CD1A4FE1228870EBCD6570F5
-:1014D000C3C2012A80707CB5CA1219EB2A8270CD72
-:1014E000084FD5CD1A4FE1228A70CD6870C3C20172
-:1014F00002034F4646240000024F4E2401010D0A0C
-:101500004F4646094F4E2411F01421FE14CD084FCA
-:1015100032A16CCD1A4F3AA16CC95623460423223E
-:10152000A16C2305C222154EB9CA3715232315C253
-:101530001C15213C1537C9B72AA16CC90D0A3F4EAD
-:101540006F7420666F756E6424CD1A4FCD3270CDE6
-:101550006115C3C201CD1A4FCD3270CD6115C3C222
-:10156000013A2467B7CA6E15115D5DCD7770CDCD98
-:1015700015CDBE17CDF017CDD317CDB218CDBE18EF
-:10158000CD5D16CDE617CD2916CD9018CD6916CDB7
-:101590004716CD604FCDD915CD8D16CDEF162A80CB
-:1015A000707CB5C45E17CD8116CD4017CD2F17CDF9
-:1015B0004F17CD1E172A7C707CB5C47E17CD7718C7
-:1015C000CD1118CD9C18CDE515CD7516C911735DDB
-:1015D000CD77703AA06CC3CF1811845DCD77703A87
-:1015E0008E70C3CF1811A95DCD777011C05D3AAD73
-:1015F0006CB7CAF81511C85DCD777011CE5DCD7787
-:10160000703A8670FEFFC20F16219D58C326164FF2
-:1016100021731346235E160023EB192323BECA262B
-:101620001605C8C31416C3777011E75DCD77703AFD
-:10163000917011F35DB7CA777011FC5DFE01CA7736
-:101640007011035EC37770113F5ECD777011655ED8
-:101650003A9270B7CA7770116E5EC37770110B5EE5
-:10166000CD77703A3D6AC3CF1811345ECD77703AAA
-:101670009070C3CF1811745ECD77703A8F70C3CF5E
-:101680001811835ECD77703A8C70C3CF1811925EBB
-:10169000CD777011806C21A0637EB7C2A1163A94F9
-:1016A00063C64012133E3A12130E0821A1630600CE
-:1016B0007E23FE20CABD1612130DC2B01678B7C223
-:1016C000D0163E2E121306FF0E0321A963C3B016D7
-:1016D0003E241211806CCD777011A05ECD77703AE8
-:1016E0009F63E67FFE02C2CF1811A45EF2777011ED
-:1016F000A95FCD77703A937011B45FFE06CA777018
-:1017000011B95FFE03CA777011BE5FFE0CCA777015
-:1017100011C45FFE09CA777011C85FC3777011AF3B
-:101720005ECD77703A9763C6405F0E02C382511157
-:10173000CB5ECD77703A9663C6405F0E02C382518E
-:1017400011015FCD77703A95706F2600C3234F115A
-:10175000EA5ECD77703A94706F2600C3234F11CDA7
-:101760005FCD77703A8A7021FA5FFEFFCABA172AF6
-:101770008070CD1A15D27B1721FA5FC3BA1711E01A
-:101780005FCD77703A887021FA5FFEFFCABA172AD8
-:101790007C70562346042322A16C2305C29A174E5F
-:1017A000B9CAB017232315C2941721FA5FC3BA1719
-:1017B0002AA16CEBCD777021F55FEBC377701175C3
-:1017C0005FCD77703AA0705F0E02CD8251118A5FB3
-:1017D000C3777011955FCD777021AC103A8F70CDC3
-:1017E0001A15EBC37770111B5FCD7770CDEF4EC923
-:1017F000112B5FCD77702100003AA5706FCD234F7C
-:1018000011485FCD77702100003A2D676FCD234FCF
-:10181000C9111260CD77703A9963C3CF18CD1A4FB2
-:10182000CD4F4F117C54CD7770118D54CD7770CD45
-:101830004F4F215D185E2356237AB3CA4918E5CD70
-:101840007770CD4F4FE1C335182A0470EBCD777018
-:10185000CD4F4F2A0670EBCD7770C3C2010B0168E4
-:10186000081B192925372DF33B0C3CC840E44535AE
-:1018700047934E5F540000111A60CD777011955D4B
-:101880003AA170B7CA77700E025FCD8251C34F4F35
-:10189000119A5DCD77703A6E62C3CF180E201EFF8D
-:1018A000CD82516F2600E5114A60CD7770E1CD23DE
-:1018B0004FC9116360CD77703A8D70C3CF18116F27
-:1018C00060CD77703A9463C6405F0E02C3825111B7
-:1018D000915DB7C2777011955DC377703E05119B1E
-:1018E00066CDA547C3C20132226BA7CAC201CD1A79
-:1018F0004FCD0870119B661A13D5CDAF4E5FCD0B3F
-:1019000070D13A226B3D32226BC2F718CD1470C3EE
-:10191000C20111AF58CD7770C3C201435053504B31
-:10192000312E41534D20283233292031362D4A6142
-:101930006E2D31393931243EFF32AC6C11316D3EA0
-:1019400005CDA547C31C02B7CA1C02322F6DEB366A
-:1019500024CD362C3AAD6CA7CA6119CD4F4FC36464
-:1019600019CD3B7011316DCD7770C378193E0032BF
-:101970002F6D32AC6CCD362C11EE6C3E05CDA547EB
-:10198000C31C02322A6D32AC6C3A2F6DB7CA95195E
-:101990003E4932426BAF32396B210000223C6B2250
-:1019A0003E6B323B6B32406B3AAD6CA7C2B819CD7F
-:1019B0004170210000CD234F3A2F6DB7C2C4193EAC
-:1019C0005232426B3AAD6CA7C2DB193A9966B7C284
-:1019D000DB19CD3E702A3C6BCD234F3A426BFE445F
-:1019E000C2E919CD4F1CC3C419FE58C2F419CD1851
-:1019F0001BC3C419FE46C2FF19CD181BC3C419FE70
-:101A000052C2181ACDB21A3A426BFE46C2C419111C
-:101A1000985ACD912CC3C419FE43C24C1A11E157F8
-:101A20003A396BB7CA2E1AAF32396B11C4583A998A
-:101A300066B7CC912C3A2F6DB7C2C2013AA06CA701
-:101A4000CAC20111685BCD7770C39519FE59CAC22D
-:101A500001FE49C2A41ACD951E3A426BFE58CA69CE
-:101A60001AFE41C2C419C3C2013A2F6D32AF6C4F86
-:101A7000060021316D115A6BCD74703E3132376BD7
-:101A8000AF32AE6C3E52CDC027C31C02AF32396BB1
-:101A9000210000223C6B323B6B32406B3E523242A3
-:101AA0006BC3DB19FE41C2A91A11EC57CD912CC3AF
-:101AB000C2013A406BFE10FAC31A11F654CD212C24
-:101AC000C34D2C3C32406B3E3132376BCDEF28C3D7
-:101AD000562CFE53C20D1B3A406B32416BAF324065
-:101AE0006B3AAE6CCDDD2C3AAF6C215A6BCD8E22A9
-:101AF000215A6BCD4D2232AF6C3E59CDC027C34D1C
-:101B00002C3A386B32376B3E4632426BC9FE45C2C7
-:101B1000532CCDDC2BC34D2C3A406BFE05FA291B10
-:101B2000111455CD212CC34D2C3C32406BCDEF28E8
-:101B3000C3562CFE53C2741B3A416BFE10FA491B6C
-:101B400011F654CD212CC34D2C3C32416B3A3B6BEA
-:101B50003DE63F473AAE6CB8C2532CCD692CAF324C
-:101B6000406B215A6BCD4D2232AF6C3E59CDC02710
-:101B7000C34D2CC9FE5AC28E1B3A416BFE05FA8A30
-:101B80001B113355CD212CC34D2CCDFB2CC9FE464A
-:101B9000C2CD1B4F3A9966B779C2D21BCDD42CC2A5
-:101BA000532CCDDD2C4F3A9966B779C2B41BCD4684
-:101BB00025C34D2C3A406B32416BCDEB2C3E443269
-:101BC000426B3A396BFE5AC8AF32396BC9FE58C204
-:101BD000271CCDD42CC2532CCDDD2CCD14703AAFA4
-:101BE0006CB7CA0E1CF51E3CD5CD1770D1CD177041
-:101BF000F1215A6BF55E23E5CD1770E1F13DC2F49A
-:101C00001B1E3ED5CD1770D1CD1770CD4F4F3A402A
-:101C10006B32416BCDEB2C3E4432426B3A396BFE5A
-:101C20005AC8AF32396BC9FE42C2441CCDD42CC253
-:101C3000532CAF32AF6C3E59CDC027C34D2C3E4321
-:101C400032426BC9FE45C24D2CCDDC2BC34D2C3A24
-:101C5000406BFE05FA861C115455CD212C3A99662D
-:101C6000B7C24D2C3A9270B7C27D1C115C00D50EE4
-:101C700010CD8251D10E13CD8251C34D2CCD475181
-:101C8000C3751DC34D2C3C32406BCDEF28C3562C81
-:101C9000FE44C2E41CCDD42CCAB01C3A416BFE05F4
-:101CA000FAAC1C115455CD212CC35D1CCDFB2CC9A5
-:101CB000CDDD2C3A406B32416B3AAF6CCD2623C35D
-:101CC000781DAF32406B32AF6C4F3A396BB7CADB1D
-:101CD0001C4F3E0132AF6C79325A6B3E59CDC02752
-:101CE000C35D1CC9FE46C2FE1C3A416BFE05FAFAF2
-:101CF0001C111455CD212CC35D1CCDFB2CC9FE5AE3
-:101D0000C2981DCDD42CC2532CCDDD2C3AAF6CFE25
-:101D100001C21C1D3A5A6BFE44CA391D3A9966B776
-:101D2000C2291DCD4751C3751DAF32396B3A406B87
-:101D300032416BCDEB2CC36F1D3A406B32416BCD02
-:101D4000EB2C3A9966B7C26F1D3A3A6BB7C26F1D5A
-:101D50003A9270B7C2691D115C000E10D5CD825148
-:101D6000D10E13CD8251C36F1DCD4751C3751D3E9A
-:101D70004632426BC9CDDF233A9966B7C24D2C116A
-:101D80005C00D50E10CD8251D13A9270B7C24D2C65
-:101D90000E13CD8251C34D2CFE45C25D1CCDDC2BF4
-:101DA000C35D1C3E02115C00CDA547C3C20111EE0C
-:101DB0006C3E05CDA547C31C02322A6DAF323247B7
-:101DC000323347323447323067213167222E67CDB4
-:101DD000FE45D2DE1D11C355CD7770C3C201CD368D
-:101DE0002CAF323B6B32406B329C63210000223CB3
-:101DF0006B223E6B3AAD6CA7C2041ECD4170210030
-:101E000000CD234F3E3132376B3E5332426B3AADF9
-:101E10006CA7C21E1ECD3E702A3C6BCD234F3A42AA
-:101E20006BFE44C22C1ECD4620C30E1EFE46C2379A
-:101E30001ECD401FC30E1EFE5AC2421ECD4321C3FB
-:101E40000E1EFE53C25B1ECD951E3A426BFE46C26D
-:101E50000E1E118D5ACD912CC30E1EFE42C2661E5F
-:101E6000CDE221C30E1EFE43C27E1E11E1573A3958
-:101E70006BB7CA781E11C458CD912CC3C201FE4164
-:101E8000C28C1E11EC57CD912CC3C20111EC57CD61
-:101E9000912CC3C2013A406BFE10FAA61E118D555B
-:101EA000CD212CC34D2C3C32406B3E3132376B3A46
-:101EB000A07032386B215A6BCD4D2232AF6C3A3C58
-:101EC0006B32AE6C3A426BCDC027C34D2CCDEF28A0
-:101ED000C35F4FFE59C20F1FCDD42CC0CDDD2C3AAD
-:101EE000AF6C215A6BCD8E223A406B32416BAF32D0
-:101EF000406B3A426BFE49C2001F3E5832426BC9EA
-:101F00003A386B32376B3E4632426BCD6E4FC9FE6C
-:101F10004EC22D1FCD692C3A3B6B3CE63F473AAE93
-:101F20006CB8C0AF32406B3E4632426BC9FE45C210
-:101F30004D2C3A426BFE49CAFA1ECDDC2BC34D2C08
-:101F40003A406BFE05FA511F118D55CD212CC34D22
-:101F50002C3C32406BAF32396B215A6B22306B3ADA
-:101F60002A6DB7C22F20215D00222E6B06000E00C5
-:101F700078FE08C2811F3E2E2A306B772322306BF9
-:101F80000C0478FE0CF2A31F2A2E6B7EE67F232220
-:101F90002E6BFE21FA701F2A306B772322306B0CD8
-:101FA000C3701F7932AF6C2A306B3E24773AAD6C28
-:101FB000A7C2B71FCD3B70115A6BCD77703A3B6B00
-:101FC00032AE6C3E46CDC027C34D2CCDEF28C35F4B
-:101FD0004FFE59C20D20CDD42CC0CDDD2C3A406B24
-:101FE00032416BAF32406B32256B32266B32276B3E
-:101FF00032286BCD1B24C3022032366B3E44324262
-:102000006BC9FEFFC24D2C3E5A32426BC9FE4EC216
-:102010002420CD692C3A3B6B3CE63F473AAE6CB886
-:10202000C0C3DA1FFE45C24D2CCDDC2BC34D2CEBBB
-:1020300021EE6C4F477E1223130578B7C23520EB93
-:1020400022306BC3A31F3A406BFE05FA5720118D57
-:1020500055CD212CC34D2C3C32406B215A6B223084
-:102060006B211B6C22326B06012A326B7E232232DB
-:102070006B4F3A9E63B779C29B203A9370FE067904
-:10208000CA9B203A9C63B7C2982079E680CA982000
-:10209000CD842C3EFF329C6379E67F2A306B772318
-:1020A00022306B043A366BB8F269203A366B32AFA5
-:1020B0006C3A3B6B32AE6C3E44CDC027C34D2CCD49
-:1020C000EF28C35F4FFE59C22121CDD42CC03AAEB8
-:1020D0006CCDDD2C3A406B32416BAF32406B3AAF86
-:1020E0006CFE01C2FF203A5A6BFE5AC2F42032390C
-:1020F0006BC30621FE58C2FF2032396BC306213A5A
-:10210000396BB7CA0C213E5A32426BC9CD1B24C36E
-:10211000162132366BC9FEFFC24D2C3E5A32426B3D
-:10212000C9FE4EC23821CD692C3A3B6B3CE63F4795
-:102130003AAE6CB8C0C30C21FE45C24D2CCDDC2B91
-:10214000C34D2C3A406BFE05FA5421118D55CD211B
-:102150002CC34D2C3C32406B3A3B6B32AE6CAF32F1
-:10216000AF6C3A396BB7CA73213E44325A6B3E01A9
-:1021700032AF6C3E5ACDC027C34D2CCDEF28C35F84
-:102180004FFE59C2C021CDD42CC0CDDD2C3A406BBE
-:1021900032416BAF32406B0E10115C00CD82513A70
-:1021A000396BFE5ACABA21CDFE45DABA21CD6E4F3F
-:1021B000AF32396B3E4632426BC93E4232426BC946
-:1021C000FE4EC2D721CD692C3A3B6B3CE63F473AE5
-:1021D000AE6CB8C0C38A21FE45C24D2CCDDC2BC3EA
-:1021E0004D2C3A406BFE05FAF321118D55CD212C73
-:1021F000C34D2C3C32406B3A3B6B32AE6CAF32AFCE
-:102200006C3E42CDC027C34D2CCDEF28C35F4FFE9F
-:1022100059C22B22CDD42CC0CDDD2C3A406B32419B
-:102220006BAF32406B3E4332426BC9FE4EC242221C
-:10223000CD692C3A3B6B3CE63F473AAE6CB8C0C325
-:102240001822FE45C24D2CCDDC2BC34D2C3A957087
-:10225000C62077233A9770C62077233A9970C62014
-:1022600077233A9B70C640E67F77233A9D70C6205D
-:1022700077233A9F70772336593A9370FE06CA85C2
-:10228000223A9D6377233AA07077233E08C932A48F
-:102290006C3E0D329C703E23329E703E26329D6312
-:1022A0003E3132386B7EDE203294703AA46CFE03ED
-:1022B000F823237EDE203298703AA46CFE04F823C3
-:1022C0007EC640E67F329A703AA46CFE05F8237E03
-:1022D000DE20329C703AA46CFE06F8237E329E709B
-:1022E0003AA46CFE07F8233E00329E637EFE4ECA7F
-:1022F0001423FE20CA1423FE59C20C233A9370FE05
-:1023000006CA14233EFF329E63C31423329D633EEC
-:10231000FF329E633AA46CFE08F8237E473AA07011
-:10232000B8C032386BC932A16C3A9966B7C247233C
-:102330003A8F70FE03C247233A3A6BB7CA47233E2F
-:102340005832396BC35A4F215A6B222A6B3A9F700D
-:10235000470E003A9E63B7CA5E233A9D634F21A1A0
-:102360006C35FA5A4F3A9966A7C2792321246B3506
-:10237000F27923CDEB50C3DF232A2A6B7E23222A56
-:102380006B1E00B9C295231E803AA16C3D32A16C30
-:102390007E23222A6BB8C2B7237E23222A6B21A177
-:1023A0006C3557E680B35F7AE67FB8CAB723B9CAFF
-:1023B000B7237AC640E67FB332A36C3A9966A73A50
-:1023C000A36CCAD423E5D5C55F0E06CD8251C1D119
-:1023D000E1C35E232A2C6B7723222C6BC35E23116F
-:1023E0006E55D5CD212CD1215A6B3AAE6CCDDD2C5A
-:1023F00032AE6CAF32A16C1AFE0DCA0A24771323D9
-:102400003AA16C3C32A16CC3F72336003AA16C327E
-:10241000AF6C3E45CDC027000000C93A9E704F3AD0
-:10242000376BD631473A9470D6059032A16C211B98
-:102430006C22326B06003AA16C3DF2412478C35AFB
-:102440004F32A16C3A246B3DFA512432246BC362A3
-:1024500024CD8D4FC35A24C3622478B7C25A4FC3C8
-:1024600026252A2C6B7E23222C6B57E6805FCA928E
-:10247000243A9E63B7CA92243AA16CFE02FA172549
-:102480003D32A16C2A326B3A9D63772322326B0472
-:102490001E007AE67F57FE20FAC424FE7FCAC424B9
-:1024A0003A9E63B7CAAE243A9D63BACAB3247AB9D6
-:1024B000C20A2521A16C352A326B712322326B04AA
-:1024C0007AC30A25FE1AC2F3243A9170FE01CAE2C9
-:1024D00024FE02CAF1242A2C6B3A246B57157AF297
-:1024E000EA24AF32246B78C35A4F7E23FE1ACADD2A
-:1024F000243E1A32A26C21A16C352A326B71232240
-:10250000326B043AA26CC640E67F2A326BB3772363
-:1025100022326B04C336242A2C6B2B222C6B2124F1
-:102520006B3478C35A4F3EFFC9435053504B322E41
-:1025300041534D2028313129202032312D4D6172F7
-:102540002D3139393124AF325C00215A6B3A2A6D72
-:10255000B7CA692521EE6C3AEF6CFE3AC269257E56
-:10256000E65FD640325C00232322306B215D0022DF
-:102570002E6BAF32A16C32A26C062070233CFE0B96
-:10258000FA7B2536002A306B7EFE61FA9025E65FE5
-:1025900023FE2EC2AD2522306B216500222E6B3A20
-:1025A000A16C32A26C3E0932A16CC3DC25B7CA0310
-:1025B0002622306B2A2E6B7723222E6B3AA16C3C9D
-:1025C00032A16CFE08FA852532A26C2A306B7E237C
-:1025D00022306BB7CA0326FE2EC2C8252A306B7E76
-:1025E000FE61FAE725E65FB7CA03262322306B2A8D
-:1025F0002E6B7723222E6B3AA16C3C32A16CFE0C21
-:10260000FADC252A306B36243AAD6CA7C21226CDEF
-:102610003B70115A6B3AAC6CA7CA1F2611EE6CCDF9
-:102620007770AF323A6B3A8F70B7CAFF260E0F1130
-:102630005C00CD8251FEFFCAFF263A8F70FE03C2B6
-:102640004A263EFF323A6BC35A4FF511F457CD215B
-:102650002CF1FE01CA6326215C0011806A01210071
-:10266000CD74700E083E30216400770DCA78262B99
-:102670007EFE203E30CA6A26215D000E0B7EE67F7C
-:1026800077230DC27D26115C000E0FCD82513CCA0E
-:10269000A5263A64003C326400FE3AC2782611DC7A
-:1026A00055CD7770C911806C215D000E087E122314
-:1026B000130DC2AD263E2E12130E037E1223130DF0
-:1026C000C2BB263E241211806CCD77703A8F70FE0B
-:1026D00002C2FF26215C0011906A011000CD7470C7
-:1026E00011806A0E17CD8251FEFFC2F32611DC5510
-:1026F000C3212C21806A115C00011000CD7470CDC3
-:10270000A750C30827C35A4F116E55CD212CC9CDF0
-:102710001A4FCD0870CD1170CD1470AF32406B3EA2
-:102720003132376B3A406BFE05FA3527110056CD32
-:102730007770C3C2013C32406BAF32AE6C3E0132A7
-:10274000AF6C215A6B36463E47CDC027C32C27CDF0
-:10275000EF28C32427FE59CAC201FE45C22427CD53
-:10276000F52BC3C201CD1A4FCD7127C3C201C3C21D
-:1027700001CD0870CD1170CD1470AF32406B3E3179
-:1027800032376B3A406BFE05FA9227113456CD77FB
-:1027900070C93C32406BAF32AE6C3E0132AF6C213F
-:1027A0005A6B364C3E47CDC027C38B27CDEF28C38D
-:1027B0008327FE59CA5A4FFE45C28327CDF52BC940
-:1027C00032B06C21566B3A976377233A376BD63128
-:1027D000473AAF6CC6238077230100004F3AAE6CB6
-:1027E000C6207723814F3E0088473AB06C7723811B
-:1027F0004F3E0088473AAF6CB7CA0B283D32AF6CEA
-:102800007E23814F3E008847C3F5273A376BFE325F
-:10281000CA3C28D2252879E6C0070781E63FC620B2
-:102820007723C353283600E521576BCD662BE14B48
-:10283000427A07070707E60FC620772378E60F07D7
-:102840000747790707E603B0C620772379E63FC636
-:102850002077233A8D70B7CAA028E536003AAD6CD0
-:10286000A7C29F28CD4A7021576BCD142D3A8C708A
-:10287000A7CA9F2821E161CD212D3A426B5FCDC1CE
-:1028800052211F62CD212D21F761CD212D21576BC2
-:10289000CD212D211F62CD212D211F62CD212DE1C2
-:1028A0003A9C707723AF77CD08703A987032A16C5C
-:1028B0003AA16C3DB7FAC82832A16C3A9A70CDAFF4
-:1028C0004E5FCD0B70C3B02821566B7EB7CAE92886
-:1028D000CDAF4E5FCD0B703AA170BEC2E528CDAF33
-:1028E0004E5FCD0B7023C3CB28CD1470C35A4FCD90
-:1028F000262AC35F4FCDE62AC3EF28219663BEC2C6
-:10290000F528CDE62AC35F4F219663BECA0229325D
-:10291000576B4F3A376BD6314779D6239032AF6C2D
-:102920000600CDE62AC35F4F219663BECA02293254
-:10293000AE6C32586B814F3E0088473AAE6CD62061
-:1029400032AE6CCDE62AC35F4F219663BECA022920
-:1029500032A16C32596B814F3E0088473AAF6C32DE
-:10296000A26C215A6B22306B3AA26CD601FA9129E3
-:1029700032A26CCDE62AC35F4F219663BECA0229FC
-:102980002A306B772322306B814F3E008847C36823
-:1029900029CDE62AC35F4F219663BECA0229D620FD
-:1029A00032A36C3A376BFE32CAF029D2C22979E6DB
-:1029B000C0070781E63F473AA36CB8CA1B2ACD6916
-:1029C0002CC92A306B360021576BCD662B4B427ACF
-:1029D00007070707E60F573AA36CBAC2BE29CDE630
-:1029E0002AC35F4F219663BECA0229D62032A36C48
-:1029F00078E60F070747790707E603B0473AA36C65
-:102A0000B8C2BE29CDE62AC35F4F219663BECA0273
-:102A100029D6204779E63FB8C2BE292A306B360056
-:102A20003AA16CC35A4F21B46B22346BCDF32AC345
-:102A30005F4F219663BEC22C2AC34F2ACDF32AC30F
-:102A40005F4F219663BEC24F2A21B46B22346B2A9A
-:102A5000346B772322346B4711E79319DA262A3A2D
-:102A60009D70B8C23C2A21B76B3A596BBECA262A60
-:102A70003A9070B7CA8A2A3A426BFE53CA8A2ACD64
-:102A8000F32AC38A2AFE11C27F2A2A346B2B36000E
-:102A9000CD14703A8D70B7CADD2A233AAD6CA7C247
-:102AA000DD2ACD477021B56BCD142D3A8C70A7CAA5
-:102AB000DD2A21EC61CD212D3A426B5FCDC152213F
-:102AC0001F62CD212D210B62CD212D21B56BCD2192
-:102AD0002D211F62CD212D211F62CD212D21B46B0F
-:102AE00022346BC35A4F2A346B7E2322346BB7C215
-:102AF0005A4FC9E5C52A8470229A63CD0870CD0E5D
-:102B000070B7CA162B473A9370FE0678CA112BE6A7
-:102B10007FC1E1C35A4FCD1470CD1A70B7CA3F2B95
-:102B2000FE0DCA3C2BFE1ACA342BFE03CA582BFEDC
-:102B300018C23F2BC64032396BC33F2BC1E1C93AA3
-:102B40009963B7CAFB2A2A9A632B229A637CB5C27F
-:102B5000FB2ACD692CC1E1C9CD32703AAD63E601E3
-:102B6000C47752C3C201E5C51100007EB7CA992BD4
-:102B7000E5AB5FE60F4F060021BC2B0909E57B0F93
-:102B80000F0FE61E4F219C2B097EAA2356E1AE5F54
-:102B9000237EAA57E123C36B2BC1E1C9000081103A
-:102BA0000221833104428552066387730884899425
-:102BB0000AA58BB50CC68DD60EE78FF700008911DC
-:102BC00012239B322446AD573665BF74488CC19D95
-:102BD0005AAFD3BE6CCAE5DB7EE9F7F83AAD6CA715
-:102BE000C2ED2B3A9966B7C2ED2BCD38703E41321B
-:102BF000426BC3022C11CA543AAD6CA7C2022CCD51
-:102C000077703AAF6C4F0600215A6B093624115A7F
-:102C10006B3A9966B7C21D2C3AAD6CA7C0CD7770E0
-:102C2000C93AAD6CA7C03A9966B7C2322CD5CD3837
-:102C300070D1CD7770C9117C543AAD6CA7C2432CCA
-:102C4000CD6B70CD0870CD1170CD1470C93E41327E
-:102C5000426BC9CD692C3A3B6B32AE6CAF32AF6C74
-:102C60003E4ECDC027C34D2CC92A3E6B23223E6B5E
-:102C70003A9966B7C03AAD6CA7C0CD41702A3E6B99
-:102C8000CD234FC9C5D5E511A55ACD212CE1D1C120
-:102C9000C93AAD6CA7CAAF2CD5CD4F4FD1CD777007
-:102CA0001E200E06C5D5CD8251D1C1CD8251C9D5C8
-:102CB000CD4470D1CD7770C90E0421C4545EE5C5F2
-:102CC000CD0200C1E1230DC2BD2C118860CD77700B
-:102CD000CD3570C93A3B6B473AAE6CB8C93CE63F5C
-:102CE000323B6B2A3C6B23223C6BC9AF32406B32C8
-:102CF000AF6C3E59CDC027C34D2CC93C32416B3A15
-:102D00003B6B3DE63F473AAE6CB8C2532CCD692CC5
-:102D1000CDEB2CC97EB7C8E55FCD1770E123C31496
-:102D20002D7EB7C8E55FCDC152E123C3212DC54F2C
-:102D30003A556BB979C1C943505352454D2E415351
-:102D40004D2028313329202032312D4D61722D3113
-:102D500039393124CD0870CD1170CD147011682D22
-:102D6000211A2ECD084FEBE913024344248E31047F
-:102D7000434F5059243D310644454C45544524F8B1
-:102D800031094449524543544F52592436320A447A
-:102D900049534B2D5553414745243B32054552413C
-:102DA000534524F8310646494E495348240F270419
-:102DB00048454C5024403204484F53542445320671
-:102DC0004B45524D4954245E32054C4F47494E24E1
-:102DD0006332064C4F474F5554246527074D4553E2
-:102DE0005341474524F1320652454E414D4524E6B4
-:102DF000320353455424FC32055350414345243B90
-:102E000032065354415455532453330454595045B6
-:102E10002468330357484F246D330D0A4344202D53
-:102E2000206368616E67652064656661756C7420F7
-:102E30006469726563746F727920666F722072655F
-:102E40006D6F746520736572766572206F70657240
-:102E50006174696F6E730D0A434F5059202D2063C2
-:102E60006F70792066696C6573206F6E20612072C7
-:102E7000656D6F74652073797374656D0D0A4445D3
-:102E80004C455445202D2064656C65746520666949
-:102E90006C6573206F6E20612072656D6F746520A4
-:102EA00073797374656D0D0A4449524543544F520A
-:102EB00059202D206C6973742061206469726563E8
-:102EC000746F7279206F6E20612072656D6F74650A
-:102ED0002073797374656D0D0A4449534B2D555316
-:102EE000414745202D2073686F77206469736B20FC
-:102EF0007573616765206F6E20612072656D6F74F8
-:102F0000652073797374656D0D0A46494E495348BF
-:102F1000202D2073746F7020612072656D6F746551
-:102F2000207365727665720D0A48454C50202D203D
-:102F30006765742068656C702066726F6D20612013
-:102F400072656D6F7465207365727665720D0A48DF
-:102F50004F5354202D20657865637574652061207A
-:102F6000636F6D6D616E64206F6E20612072656DA0
-:102F70006F74652073797374656D0D0A4B45524DFE
-:102F80004954202D2074656C6C20612072656D6F32
-:102F900074652073657276657220746F206578653C
-:102FA000637574652061204B65726D697420636F71
-:102FB0006D6D616E640D0A4C4F47494E202D207394
-:102FC000656E6420757365722D6964656E746966DB
-:102FD00069636174696F6E20746F20612072656D22
-:102FE0006F7465207365727665720D0A4C4F474F9A
-:102FF0005554202D202073746F7020616E64206CF6
-:103000006F676F757420612072656D6F74652073D2
-:1030100065727665720D0A4D455353414745202D23
-:103020002073656E642061206D6573736167652030
-:10303000746F20612072656D6F746520737973748D
-:10304000656D20757365720D0A52454E414D4520E0
-:103050002D2072656E616D652066696C6573206FE9
-:103060006E20612072656D6F74652073797374656D
-:103070006D0D0A534554202D207365742072656DC3
-:103080006F74652073657276657220706172616D10
-:1030900065746572730D0A5350414345202D2073AA
-:1030A000686F77206469736B2D7573616765206F36
-:1030B0006E20612072656D6F74652073797374651D
-:1030C0006D0D0A535441545553202D2047657420EB
-:1030D000737461747573206F6620612072656D6F03
-:1030E0007465207365727665720D0A5459504520D7
-:1030F0002D20747970652066696C6573206F6E2071
-:10310000612072656D6F74652073797374656D0DE0
-:103110000A57484F202D2073686F772063757272AD
-:10312000656E74207573657273206F6E20612072F6
-:10313000656D6F74652073797374656D24212262E7
-:1031400022916D3E4B32316D3E02322F6D3E473241
-:10315000906D11336DCD0035B7CA1C0247C62032C1
-:10316000326D3A2F6D80322F6D2A916DEB22936D67
-:10317000CD52472A936D23EBCD00352A936D4FC670
-:1031800020773A2F6D81C601322F6DC37833212FFE
-:103190006222916D3E4332316D3E01322F6D3E47CA
-:1031A00032906D11336DCD003547C62032326D3A05
-:1031B0002F6D80C601322F6D3A316DFE43C2CA3188
-:1031C00078B7CA78333EFF3272622A916DEB229350
-:1031D0006D3EFF327162CD52472A936DEB13CD00E5
-:1031E00035B7CA78334FC6202A936D773A2F6DC60C
-:1031F0000181322F6DC378333E4532316D3E01324D
-:103200002F6D3E4732906D11336DCD0035473A3109
-:103210006DFE45CA2032FE54CA203278B7CA7833D0
-:1032200078B7CA1C02C62032326D3A2F6D80C601B3
-:10323000322F6DC378333E44C3FA313E55C3FA3161
-:103240003E48C3FA313E4332906DAF322F6D11319B
-:103250006DCD0035B7CA1C02322F6DC378333E4B9B
-:10326000C347323E4732906D3E4932316D3E0132A6
-:103270002F6D11336DCD0035B7CA783347C6203274
-:10328000326D3A2F6D80C601322F6DEB22936D3E69
-:10329000FF327162327262112F62CD52472A936DF2
-:1032A000EB13CD0035B7CA78334FC6202A936D771C
-:1032B0003A2F6DC60181322F6DEB22936DAF3272C2
-:1032C00062113C62CD52472A936DEB13CD0035B7A6
-:1032D000CA78334FC6202A936D773A2F6DC6018185
-:1032E000322F6DC3783321226222916D3E52C34545
-:1032F0003121556222916D3E4DC345313E06322F3C
-:103300006D3E5332316D3E4732906D3E2332326D09
-:10331000113D35219935CD084FEBE911376D3E054B
-:10332000CDA547C31C02B7CA1C024FC62032366D5A
-:103330003A2F6D81322F6DCD1A4FC37833CD0D15D5
-:1033400032376D3E2132366D3A2F6DC601322F6D08
-:10335000C37833CD1A4F3E5132316D3E4732906DB6
-:103360003E01322F6DC378333E54C3FA312161627E
-:1033700022916D3E57C396313EFF3299663A906D69
-:10338000FE47C28D333A316DFE53CA9033CD327051
-:10339000AF32406B32396B323B6B210000223C6B09
-:1033A000223E6B3E3132376B3E4932426BCD951E29
-:1033B0003A426BFE58CAC033FE41C2A833C3C201B1
-:1033C000AF32406B32396B323B6B210000223C6BD9
-:1033D000223E6B3E3132376B3A2F6DB7CA423432E0
-:1033E000A16C3A9470D60532A26C11316D215A6BE2
-:1033F0003A9D63473A9E704F3AA26C3D32A26CFAF6
-:1034000038341AFE20FA1834B9CA18343A9E63B711
-:10341000CA2B341AB8C2353471233AA26C3D32A299
-:103420006CFA38343A2F6D3C322F6D1AFE20F2358B
-:1034300034C640E67F7723133AA16C3D32A16CC2BB
-:10344000F833AF32AE6C3A2F6D32AF6C3A906DCD2F
-:10345000C027C31C02C35B34CD532C3A406B3CFEE7
-:1034600005FA6D34116357CD7770C3C20132406BDA
-:10347000CDEF28C35834FE45C291343A906DFE47D3
-:10348000C28B343A316DFE53CC4F4FCDED2BC3C2BE
-:1034900001FE53C2A934CDD71A3A426BFE41CAC2CB
-:1034A000013E5832426BC3C419FE4ECA5B343242ED
-:1034B0006BCD1470215A6B3AAF6CB7CAEA34E5F59C
-:1034C0001E3CD5CD1770D1CD1770F1E1B7CADD34F0
-:1034D0003D5E23F5E5CD1770E1F1C3CC341E3ED53A
-:1034E000CD1770D1CD1770CD4F4F3A426BFE59CAF0
-:1034F000C201CDEB2CCDDD2C3E4432426BC3C4194E
-:10350000AF32306D47CD4F4DE67FFE0DCA3835FEE8
-:103510000ACA3835120413FE1BCA2F35FE0CCA2600
-:1035200035FE3FC20535E52A066323220663E1F531
-:10353000AF327062F1C305357832306DC907104281
-:103540004C4F434B2D434845434B2D545950452434
-:10355000FF3A0446494C4524133B0A494E434F4D1C
-:10356000504C45544524493B07524543454956452F
-:10357000241E3B075245504C41434524933B055282
-:103580004554525924D73B0E5345525645522D545B
-:10359000494D454F555424E53B0D0A424C4F434B92
-:1035A0002D434845434B2D5459504520666F72209A
-:1035B000612072656D6F7465207365727665720D3A
-:1035C0000A46494C4520706172616D65746572737D
-:1035D00020666F7220612072656D6F74652073655F
-:1035E000727665720D0A494E434F4D504C45544515
-:1035F0002066696C6520646973706F736974696FA4
-:103600006E20666F7220612072656D6F7465207325
-:1036100065727665720D0A524543454956452070DC
-:103620006172616D657465727320666F72206120CE
-:1036300072656D6F7465207365727665720D0A52DE
-:1036400045504C4143452066696C65206174747235
-:1036500069627574652068616E646C696E67206666
-:103660006F7220612072656D6F746520736572766C
-:1036700065720D0A5245545259206D6178696D7515
-:103680006D20666F7220612072656D6F74652073A6
-:1036900065727665720D0A5345525645522D54494E
-:1036A0004D454F555420696E74657276616C206685
-:1036B0006F7220612072656D6F746520736572761C
-:1036C000657224080A424C4F434B2D53495A4524F6
-:1036D000273B09434F4C4C4953494F4E24353B0A35
-:1036E000494E434F4D504C45544524493B054E41AE
-:1036F0004D4553245D3B0D5245434F52442D464F9B
-:10370000524D415424713B0D5245434F52442D4C70
-:10371000454E47544824853B075245504C4143454C
-:1037200024933B045459504524A73B0D0A424C4F67
-:10373000434B2D53495A45206F662066696C65736B
-:1037400020666F7220612072656D6F7465207365ED
-:10375000727665720D0A434F4C4C4953494F4E20C7
-:10376000616374696F6E206F6E2066696C656E614F
-:103770006D6520636F6E666C6963747320666F722B
-:1037800020612072656D6F74652073657276657255
-:103790000D0A494E434F4D504C4554452066696CC7
-:1037A0006520646973706F736974696F6E20666FEA
-:1037B0007220612072656D6F746520736572766525
-:1037C000720D0A4E414D4553207472616E736C61E7
-:1037D00074696F6E206F662066696C657320666F12
-:1037E0007220612072656D6F7465207365727665F5
-:1037F000720D0A5245434F52442D464F524D41548B
-:10380000206F662066696C657320666F7220612088
-:1038100072656D6F7465207365727665720D0A52FC
-:1038200045434F52442D4C454E47544820666F72D5
-:1038300020612072656D6F746520736572766572A4
-:103840000D0A5245504C4143452066696C65206124
-:1038500074747269627574652068616E646C696EF7
-:103860006720666F7220612072656D6F74652073CA
-:1038700065727665720D0A54595045206F66206650
-:10388000696C657320666F7220612072656D6F745C
-:103890006520736572766572240205464958454471
-:1038A000244646085641524941424C452456560D3D
-:1038B0000A4649584544095641524941424C45241B
-:1038C000020D5041434B45542D4C454E475448241E
-:1038D000BB3B0754494D454F555424C93B0D0A5035
-:1038E00041434B45542D6C656E6774680954494DCE
-:1038F000454F5554240606415050454E4424333319
-:103900000341534B243535064241434B5550243235
-:10391000320744495343415244243434094F5645F5
-:103920005257524954452431310652454E414D4576
-:103930002430300D0A41534B2061626F757420654D
-:1039400078697374696E672066696C6573206F6E41
-:1039500020612072656D6F74652073797374656D75
-:103960000D0A415050454E4420746F2065786973AC
-:1039700074696E672066696C6573206F6E206120C4
-:1039800072656D6F74652073797374656D0D0A428D
-:1039900041434B5550202872656E616D6529206545
-:1039A00078697374696E672066696C6573206F6EE1
-:1039B00020612072656D6F74652073797374656D15
-:1039C0000D0A44495343415244206E657720766581
-:1039D0007273696F6E73206F66206578697374699E
-:1039E0006E672066696C6573206F6E20612072655A
-:1039F0006D6F74652073797374656D0D0A4F56454C
-:103A0000525752495445206578697374696E67202E
-:103A100066696C6573206F6E20612072656D6F74CE
-:103A2000652073797374656D0D0A52454E414D459D
-:103A3000206E65772076657273696F6E73206F668E
-:103A4000206578697374696E672066696C65732098
-:103A50006F6E20612072656D6F7465207379737469
-:103A6000656D2402074449534341524424303004D5
-:103A70004B4545502431310D0A444953434152448A
-:103A8000094B454550240209434F4E564552544573
-:103A900044243030074C49544552414C2431310DB7
-:103AA0000A434F4E564552544544094C49544552D9
-:103AB000414C24020850524553455256452430305B
-:103AC0000744454641554C542431310D0A50524566
-:103AD00053455256450944454641554C5424020627
-:103AE00042494E41525924313104544558542430EE
-:103AF000300D0A42494E4152590954455854242127
-:103B0000343022336D3E3032356D11320D217C0D53
-:103B1000C33D3311C336212B37CD084FEBE911C01C
-:103B20003821DD38C3193B21333122336D3E313228
-:103B3000356DC31B3321333022336D3E3232356D48
-:103B400011F538213339C33D3321333122336D3EF2
-:103B50003032356D11633A21773AC33D332133302A
-:103B600022336D3E3132356D11863A219F3AC33D85
-:103B70003321333122336D3E3332356D1199382183
-:103B8000AF38C33D3321333122336D3E3232356D90
-:103B9000C31B3321333022336D3E3332356D11B3C5
-:103BA0003A21CB3AC33D3321333022336D3E30329C
-:103BB000356D11DE3A21F13AC33D332134302233E1
-:103BC0006D3E3132356DC31B3321343022336D3EAF
-:103BD0003232356DC31B3321343022336D3E3332E4
-:103BE000356DC31B3321343022336D3E3432356D95
-:103BF000C31B334350535345522E41534D2028315C
-:103C0000292020382D5345502D3837244350535404
-:103C1000542E41534D2020283132292033312D4A52
-:103C2000616E2D31393931243E03115C00CDA54739
-:103C3000C3C201119B663E05CDA547C3C201322216
-:103C40006BA7C24F3C3E0132226B3E0D329B66CDCC
-:103C50001A4FCD6E4FFEFFC2633C11C355CD777036
-:103C6000C3C201112659CD7770AF326D65326E65D2
-:103C7000AF326F65327065CD333DE67FFE0DC277A2
-:103C80003CAF327065CD14701E2ACD17703A6E6548
-:103C90003C326E65FE3CC2A03CAF326E65CD4F4FEC
-:103CA0003A9363A7C2AF3DAF326D65CDA63DE67FC7
-:103CB000C2EC3CCD8844F5CD0870F1E67FC2CA3C29
-:103CC0003A226BA7CA773CC3EC3CFE03CAAF3DFE69
-:103CD0001AC2DF3C115C000E10CD8251C3C201FE3E
-:103CE0000DC2AB3C3E01326F65C3773CC30F3DFE56
-:103CF00013C20F3DCDA63DE67FC20F3DCD8844F5F2
-:103D0000CD0870F1E67FFE03CAAF3DA7CAF43C5F61
-:103D10003A6D65219B66856F3E008C677BBEC2A0B5
-:103D20003C3A6D653C326D655F3A226B93CA703CDC
-:103D3000C3AB3CCD08703A9363A7C23F3D3E0DCD67
-:103D40007A3DFE0AFE1ACAAF3DFE20F25B3DFE0D33
-:103D5000CA5B3DFE09CA5B3DC33F3DCDAF4EF55F3B
-:103D6000CD0B70F15F3AA170A77BCA793D3AA27082
-:103D7000BBC2793DF5CD0B70F1C93A6F65A7CA9109
-:103D80003D2171653A706516005F193C3270657EA1
-:103D9000C9CD0C504F3A70655F1600217165193C12
-:103DA0003270657971C9CD0870CD0E70E67FC9118A
-:103DB0005C000E10CD8251CD14703A9363114C5AB1
-:103DC000A7CAC73D11245BC3D03DCD1A4F1120585F
-:103DD000CD7770CDEF4E114458CD7770CDEF4E11A9
-:103DE0005958CD7770CD53703A9F63B7C4B03ECD6C
-:103DF000FB3DCDA53FC3C201C3EF3DCD0870CD0E45
-:103E000070F5CD1470F1B7C20E3E329863C9E67FEB
-:103E1000326D623A8670FE033A6D62CA2370A7CA99
-:103E2000FB3DFE7FCAFB3DFE11CAA93EFE13CAAA96
-:103E30003E5F3A8670FE01C2553E3A2367B7CA47D5
-:103E40003ECD2C3FC3FB3D7BFE1BC2553E3E0132A7
-:103E50002367C3FB3DFE03C2633E2124707CB5CAC9
-:103E6000633EE9FE02C27D3E3A6D62FE0DCA7D3EB2
-:103E7000FE0ACA7D3EFE09CA7D3EFE20F8CD5F7077
-:103E8000B7CAFB3D3A9F63FE81CCDB3ECD14703A4E
-:103E90008C70B7C41D70CD1770219863347EFE33CB
-:103EA000FAFB3D36003A6D62C9AF322567C3FB3D70
-:103EB0003E1ABBC821A063115C00010C00CD7470D8
-:103EC000CD4150C3193F219F633E80B677110E5BF1
-:103ED000FE81CA777011F65AC3777021246B35F2D0
-:103EE000EF3ED5CDDC50CDF83ED13A9F63B7C82A1E
-:103EF0002C6B7323222C6BC9CD6A53CDEB50CD199B
-:103F00003FCDA453C9110758CD7770CD4751C31980
-:103F10003F219F637EE67F77C911B856CD77700E3B
-:103F200010115C00CD8251AF329F63C9FE01C28186
-:103F30003F7BFE59C23D3F3E02322367C9FE5ACA4B
-:103F4000633FFE41FA5E3FFE4CF25E3FD6410707FB
-:103F50002A7A705F160019EBCD1470CD7770AF32EE
-:103F60002367C93E1BCDAF4E5FCD0B703E2FCDAF4B
-:103F70004E5FCD0B703E4BCDAF4E5FCD0B70C35E31
-:103F80003FFE02C2923F7BD61F32236B3E03322399
-:103F900067C9AF3223677BD61F4F3A236B47CD14D7
-:103FA00070CD6E70C9CD1A70E67FCA5A4F5F32A1CC
-:103FB0006C3A8770BBCAD93FCD08707BCDAF4E5FDE
-:103FC000D5CD0B70D1CD14703A8E70B7CA5A4F7BD5
-:103FD000E67F5FCD1770C35A4FCD1A70B7CAD93F6D
-:103FE00047FE03CAED3FE65FFE43C2FE3F116F5836
-:103FF000CD7770CD56703A9F63B7FC053FC9FE532D
-:10400000C20C40CD6115CD4F4FC35A4F78FE3FC211
-:104010003A403A9F63B7F21F4011805CCD77701130
-:10402000A85CCD7770CD597011255DCD7770CDEF3F
-:104030004E11375DCD7770C3D93F78FE30C2514005
-:10404000AFCDAF4E5FCD0870CD0B70CD1470C35A9D
-:104050004F3A8770B8C2694078CDAF4E5FCD0870D7
-:10406000CD0B70CD1470C35A4F78E65FFE50C27C02
-:10407000403A8C70EE01328C70C35A4F3A9F63B74E
-:10408000F2AC4078E65FFE52C299403E81329F63B7
-:10409000110E5BCD7770C35A4FFE51C2AC403E82C9
-:1040A000329F6311F65ACD7770C35A4F78F5CD5CC5
-:1040B00070C3BD40F11E07CD1770C35A4FF1E65FC4
-:1040C000FE44CAED3FC35A4F43505343504D2E4117
-:1040D000534D20283134292020312D4170722D314B
-:1040E00039393124115C003E10CDA547C3F240C3DD
-:1040F0000A413A5C00FE20C2FE40AF325C00215D06
-:1041000000060B363F2305C20341CD09543A5C003B
-:10411000B7C217413A9463C64032ED583AA26CFEDA
-:1041200030C226413E2032EB583AA16C32EC58CDD9
-:104130004F4F11D158CD77703E0432AB703A3D6A83
-:10414000A7C24B413AAB703C32AB70AF32306732F2
-:104150003247323347323447213167222E67CDA6AA
-:1041600042AF323067CDFE45D26E41C3F5413AAD24
-:1041700063A7C286410E0BCD8251B7CA86410E019C
-:10418000CD8251C3F541215D000608CDC7413E2EC9
-:10419000CDBA410603CDC741CD394221AB7035F5CB
-:1041A000C4AA41F1CCD341C36541CDB8413E3ACD1B
-:1041B000BA41C3B841CDB8413E20C5D5E55F0E0236
-:1041C000CD8251E1D1C1C97EE67FCDBA412305C27E
-:1041D000C741C9C5D5E5CD4F4FE1D1C136043A3D00
-:1041E0006AA7C034C9CD4F4F3A94633D5F0E0ECDE0
-:1041F0008251C3C201AF3232473233473A5C00B713
-:10420000CA0A423D5F0E0ECD8251CD7170E511F2AA
-:1042100058CD77703A5C00B7C221420E19CD825159
-:104220003CC64032FD5811FD58CD7770E1CD234F8B
-:10423000110459CD7770C3E5413A3D6AA7C80E23F2
-:10424000115C00CD82513A7D000100006FE607CA83
-:104250005542010100C50603AF3A7E001F327E00C1
-:104260003A7D001F327D0005C258426F3A7E0067DA
-:10427000C1093AA9700F0F0FE61F4F092FA56FE56F
-:1042800001F6FF09DA8D42CDB541C39942E1E5015E
-:104290009CFF09DA9942CDB841CDB841E1CD234F19
-:1042A0003E6BCDBA41C90E1FCD825123237E32AA67
-:1042B00070237E32A97023235E2356EB22A770C998
-:1042C0003E02115C00CDA547C3C2013E04CDA54707
-:1042D000C3C201115C000E11CD82513CC2E84211F3
-:1042E000C355CD7770C3C201115C000E13CD82514E
-:1042F000111359CD7770C3C2013E06CDA547C3C285
-:10430000013E04CDA547C3C2012A2A67EB21E0FF85
-:1043100019DA3E43EB7D3295635D0E20CD8251CD9F
-:1043200009543AA26CFE30C22C433E2032C45432AF
-:10433000EB583AA16C32C55432EC58C3C20111D7C4
-:1043400056CD7770C3C2013E02115C00CDA547C3B4
-:104350002244AF323247323347323447323067215A
-:104360003167222E6BCDFE45DA2244CD3270AF325A
-:10437000A16C115C00CD6E4FCD8D4FC3E243C3885D
-:10438000433A246B3DFA784332246B2A2C6B7E230C
-:10439000222C6BE67FFE20F2DC43FE09C2AF433ED7
-:1043A00020CD2F443AA16CE607C29F43C38143FE50
-:1043B0000DC2BE43CD2F44AF32A16CC38143FE0A70
-:1043C000C2CD43CD2F44AF32A16CC38143FE1AC28C
-:1043D000D543C3E243F53E5ECD2F44F1CD2F44C318
-:1043E00081430E10115C00CD82513E0DCD2F443E15
-:1043F0000ACD2F44CDFE45D26B43AF322067C3C2F6
-:10440000010E10115C00CD82513E0DCD2F443E0AAD
-:10441000CD2F44AF3220673AAD63E601C47752C373
-:10442000C20111C160CD7770AF322067C3C2015F96
-:10443000CD5644C35244DA4E44D5CD17703AA16CE0
-:104440003C32A16CD13A2067A7C8CDC152C9D1C3B3
-:10445000E243D1C30144D5CD8844E67FCA7B44FE04
-:1044600003CA8644FE18CA8144CD8844E67FCA69DF
-:1044700044FE03CA8644FE18CA8144D1373FC35A5A
-:104480004FD137C35A4FD1C9CD14701EFF0E06CD80
-:104490000500C93E03113E6ACDA547C3C2013E03D4
-:1044A000115F6ACDA547C3C2013E04CDA547C3C273
-:1044B00001060C113E6A215F6AAF3221671ABECA3B
-:1044C000C9443A21673C322167231305C2BD443AEF
-:1044D0002167A7C2DF44119860CD7770C3C2011174
-:1044E0003E6A0E0FCD82513CC2F44411C160CD77BB
-:1044F00070C3C201115F6A0E13CD8251115F6A0E43
-:1045000016CD82513CC21145117B55CD7770C36DDC
-:1045100045115F6A0E0FCD82513CC2264511C3552D
-:10452000CD7770C36D45AF322D6D322E6D329363F2
-:10453000213E6A115C00012100CD7470CD8D4FC306
-:1045400078452A2C6BEB0E1ACD8251115F6A0E153D
-:10455000CD8251A7CA3C4511F355CD7770115F6AE2
-:104560000E10CD8251115F6A0E13CD8251113E6A39
-:104570000E10CD8251C3C201115F6A0E10CD82515F
-:10458000C36D453E03113E6ACDA547C3C2013E033C
-:10459000115F6ACDA547C3C201113E6A0E0FCD82DD
-:1045A000513CC2AE4511C160CD7770C3C201115FED
-:1045B0006A0E0FCD82513CCAC34511CA57CD7770E0
-:1045C000C3C201215F6A114E6A011000CD747011DF
-:1045D0003E6A0E17CD82513CC2C20111DC55CD7727
-:1045E00070C3C201435053574C442E41534D2028B1
-:1045F0003429202032302D4A756E2D383624B7C527
-:10460000D5E5C30B46213167222E673A3067A7CA2A
-:104610003A462A2E67115C00010C00CD7470AF324F
-:104620006800327D002A2E67110C0019222E673A8D
-:1046300030673D323067AFC3F4463A3447A7C20211
-:1046400047213167222E67AF3230670E1A11800082
-:10465000CD8251AF3268003A3247B7C27846323322
-:1046600047215C00112647010C00CD74700E11111A
-:104670005C00CD8251C395463D3233472126471118
-:104680005C00010C00CD74700E11115C00CD8251E4
-:104690000E12CD8251F53A3347B7CAA5463D3233A3
-:1046A00047F1C39046F1B7FAF846CD10473A26478E
-:1046B000325C003A32473C3232473E0032680032C8
-:1046C0007D002A2E67EB215C00010C00CD74702A5E
-:1046D0002E67110C0019222E673A30673C32306782
-:1046E000FE40F20546115C00212647010C00CD7406
-:1046F00070C39046E1D1C1C93234473A3067A7C28E
-:104700000546AF32344732334732324737C3F44677
-:1047100087878787874F060021800009115C000189
-:064720000C00CD7470C90D
-:10473200000000435053434D442E41534D20283135
-:104742003329202031372D4A616E2D3139393124F8
-:10475200E1E522776221000039227562EB2279625B
-:10476200EB217F62220463220663AF3270623273EE
-:1047720062CD4F4FC3844E2A7562F9217F622206B1
-:10478200632A7762E92A7562F9217F622204632231
-:104792000663AF327062327362CD4F4FCD844E2AC0
-:1047A2007762E9326F62CDA84DF53EFF327462F155
-:1047B200FE04CA6549FE01CAC049FE02CA154BFE83
-:1047C20010CA154BFE03CA134BFE05CADC47FE0690
-:1047D200CACB4811D360CD7770C9AF320C63320EA9
-:1047E20063320D63EB227B620600CD4F4DB7F22898
-:1047F20048E67FFE1BC216480E021E07CD8251AF4D
-:104802003270622A04632B220463220663217362DC
-:1048120035C3EC47FE3FCA7648FE0CCC3270782A8C
-:104822007B62EBC35A4FFE5CC23B483A0C63A72F34
-:10483200C23B48320C63C3EC475F3A0C63A77BCAA6
-:104842007D48FE5CC24F483A0E63C38348D630FAB5
-:10485200A248FE08F2A2485F3A0E63878787833236
-:104862000E633A0D633C320D63FE033A0E63CA7D5A
-:1048720048C3EC472A066323220663CD8E48C3EC65
-:1048820047CD8E483E5C320C63C3EC47042A7B6200
-:104892007723227B62AF320D63320E63320C63C91F
-:0948A200117061CD7770C3C201F1
-:1048CB00210000222A67CD4F4DB7F23C49E67FFE0F
-:1048DB001BFE20C2EA48C35A4F000000000000FE36
-:1048EB003FCAFE48FE0DCAF748C3874700000000C9
-:1048FB00C35A4F2A2A677DB411B561C20C4911A561
-:10490B0061CD7770CD4F4FCD844E2A066336242A66
-:10491B0004632B220463117F62CD7770AF32706218
-:10492B00C379473E040000000000000000000000B7
-:10493B0000E67FD630DA5C49FE0AD25C493F2A2A70
-:10494B0067E5D12929192916005F19222A67C3D1D6
-:10495B0048115961CD7770C35A4FCD4F4DB7F0E623
-:10496B007FFE1BC28D490E021E07CD8251AF3270E6
-:10497B00622A04632B22046322066321736235C30C
-:10498B006549FE3FC2B849118761CD7770CD4F4F56
-:10499B00CD844E2A06633E24772A04632B220463BC
-:1049AB00117F62CD7770AF327062C37947FE0CCC4A
-:1049BB003270C35A4F227D62EB227B624623220860
-:1049CB00632A0663220A6378B7C83EFF3274622AF1
-:1049DB0008635E231D7BFEFFFABF4ACD4F4DB7F236
-:1049EB00AD4AE67FFE3FC21F4AAF3270622173624F
-:1049FB00352A7D62EBCD3554CD4F4FCD844E2A06F3
-:104A0B00633E24772A04632B220463117F62CD77E4
-:104A1B0070C37947FE1BC28E4AAF327062D5C5E5B3
-:104A2B00CDDA4AC34D4A0E021E07CD82512A0463CA
-:104A3B002B22046322066321736235E1C1D11CC3AF
-:104A4B00DF492A04632BEBE1E57EFE24CA694A2386
-:104A5B00EB7723EB3A73623C327362C3544A3A737B
-:104A6B00623C327362EB3E2077232204632206639F
-:104A7B00E1E5EBCD77700E021E20CD8251E1C1D165
-:104A8B00C3A14AE5D5CDDA4AC39F4A11F960CD7768
-:104A9B0070C38747D1E11C160019235E23567BC3D5
-:104AAB005A4FFE61FAB94AFE7BF2B94AE65F5623CA
-:104ABB00BACADF4916007BB7F2C84A16FF191103B1
-:104ACB000019220863052A0A63220663C3D249052B
-:104ADB00F81C4B7BB7C81600191E03194623EB2A8B
-:104AEB0008637E914FB8CAF54AF02A0A630DFA5A49
-:104AFB004FEB4623EB7E23FE61FA0E4BFE7BF20E51
-:104B0B004BE65FB8C0C3F84A3E00320363EB22FFAB
-:104B1B00621E00360023220163AF3620233CFE0BBE
-:104B2B00FA254B3600233CFE20FA2E4BCD4F4DB7CA
-:104B3B00F2444CE67FFE3FC2634B3A0363B7CA2293
-:104B4B004D2A0663232206633A0463BDC25E4BAF54
-:104B5B003270623E3FC3054DFE1BC2374CAF327005
-:104B6B00622A04632B220463220663217362357B62
-:104B7B0032A16CFE09FA844B3D2A0163FE0BF293C2
-:104B8B004B363F233CC3874B0E112AFF62EBCD8282
-:104B9B0051FEFFCA2D4C21CE6CCD284D21DE6CCDA4
-:104BAB00284D0E122AFF62EBCD8251FEFFCAC14B7C
-:104BBB0021DE6CCD284D11CE6C21DE6C3AA16CFE42
-:104BCB0009FAD04B3D0E00B9CADC4B13230CC3D2F0
-:104BDB004B79FE0BCA084CFE08C2F44B3AA16CFE93
-:104BEB0009CAF44B3E2ECD404D1A134623B8C208CA
-:104BFB004C0CFE20CADC4BCD404DC3DC4B7932A1B3
-:104C0B006C3E24CD404D2A0663EB0E09CD82512A12
-:104C1B0004632B220463217362353AA16CFE0BCA29
-:104C2B0079470E021E07CD8251C379477BB7CA1154
-:104C3B004DFE0DF2114DC35A4FFE2EC2654C1C7B1F
-:104C4B00FE01CA114DFE0AF2114D0E0906002AFF94
-:104C5B0062092201631E09C3374BFE3AC2844C1C06
-:104C6B007BFE02C2114D2A01632B7ED640220163CB
-:104C7B0036202B771E00C3374BFE2AC2B44C3A03A7
-:104C8B0063FE00CA224D7BFE08CA114DF29F4C06F3
-:104C9B0008C3A14C060C2A01633E3F772322016314
-:104CAB001C7BB8FAA14CC3374BFE21FA114D673A66
-:104CBB00A670B77CCAF94CFE25CA114DFE28CA1145
-:104CCB004DFE29CA114DFE2CCA114DFE2FCA114D96
-:104CDB00FE3AFA054DFE40FA114DFE5BFA054DFE0C
-:104CEB005EFA114DFE5FCA114DFE7CCA114DFE617D
-:104CFB00FA054DFE7BF2054DE65F2A016377232211
-:104D0B0001631CC3374B3A6F62FE10CA5F4F11062B
-:104D1B00610E09CD8251C9112961C31C4DF511805A
-:104D2B00000707070707833C5F060B1A137723055A
-:104D3B00C2364DF1C9E52A0463772322046321733C
-:104D4B006234E1C9E5C53A7062B7CCA84D2A066357
-:104D5B007E23220663FE20CA6A4DFE09C27D4D3AB0
-:104D6B007462B7C2514D3EFF3274623E20C1E1C343
-:104D7B00A54DF5AF327462F1C1E1FE1BCAA54DFE24
-:104D8B003FCA9C4DFE0DCA9C4DFE0ACA9C4DFE0CA3
-:104D9B00C0E52A06632B220663E1F680C9F5D5E54B
-:104DAB003A7062B7C2804E217362340E013A72625E
-:104DBB00B7CACD4D1EFF0E06CD8251B7CABF4DC32C
-:104DCB00D04DCD82512A04637723220463FE15CA8A
-:104DDB00E24DFE18C2F64DCD2970CD844E217F6277
-:104DEB002204632173623600C37947FE08CA074E5B
-:104DFB00FE7FC22F4E3A7262B7CC2F703A73623D70
-:104E0B003DB7F21A4E0E021E07CD8251C3E24D3250
-:104E1B0073623A7262B7CC2C702A04632B2B220478
-:104E2B0063C37947FE3FCA5A4EFE1BCA5A4EFE0D4C
-:104E3B00CA4B4EFE0ACA4B4EFE0CC2624ECD3270AE
-:104E4B003A7162B7C25A4E3A7362FE01CA87473E45
-:104E5B00FF327062C3804E3A7362FE7DFAB24D1E12
-:104E6B0007CD17703A73623D3273622A04632B22AB
-:104E7B000463C3B24DE1D1F1C91E0D0E06CD8251B3
-:104E8B002A7962EBCD7770C943505355544C2E4160
-:104E9B00534D20283331292032312D4D61722D3164
-:104EAB0039393124E5C52193704E060021BC4E09DA
-:104EBB00E9C3CE4EC3D84EC3CB4EC3DD4EC3E74E74
-:104ECB00C3EC4EE67FEAEC4EF680C3EC4EF680C3A5
-:104EDB00EC4EE67FE2EC4EF680C3EC4EE67FC3EC85
-:104EEB004EC1E1C93A8770FE20F2014FF51194587B
-:104EFB00CD7770F1F6400E025FCD8251C93E01CDE8
-:104F0B00A547C3114FC911CD54CD7770C3C2013E14
-:104F1B0004CDA547C31C02C93E30CDDE5301F6FFBD
-:104F2B0011FFFF0913DA2E4FE5EB7CB5C42B4FE1D4
-:104F3B007DC63ACDF05332A16C5F3A2267A7C00E03
-:104F4B0002C3825111CA54C377700E09C38251E157
-:104F5B00232323E9C9119C5BCD7770CD2054A7CABD
-:104F6B00664FC9AF32246B322D6D329363322E6D87
-:104F7B00326800326A00327C000E0F115C00CD8269
-:104F8B0051C93A9363B7C0C5D5E53A2D6DB7CAB8C9
-:104F9B004F2A2B6D222C6B01800009222B6D3D3289
-:104FAB002D6D3E7F32246BE1D1C1C35A4F3A2E6D2A
-:104FBB00B7CACA4F329363AF32246BE1D1C1C92A4E
-:104FCB00A370222B6D222C6BEB0E1ACD82510E147B
-:104FDB00115C00CD8251322E6DB7C2FD4F212D6D6C
-:104FEB00343AA570BECA03502A2C6B11800019C32A
-:104FFB00D04FCD7A51C3954FCD7A513A2D6DC39C7D
-:10500B004F3A9363B7C0117F622A2C6B3A246B47DC
-:10501B0005F22C50CD8D4FC33B502A2C6B3A246B91
-:10502B00477832246B7E23222C6BE67FCA1B50C938
-:10503B003EFF329363C9AF326800326A00327C00A4
-:10504B000E0F115C00CD8251FEFFCAB9500E231119
-:10505B005C00CD82512A7D007CB5CAC4502B227DC9
-:10506B00002AA370EB0E1ACD82510E21115C00CDDC
-:10507B008251B7C27A512AA3701180003E1ABECA60
-:10508B009250231DC28950222C6B19222B6D7B321F
-:10509B00246BAF322D6DCD7A51C35A4F0E13115C69
-:1050AB0000CD8251AF326800326A00327C000E169E
-:1050BB00115C00CD8251FEFFC82AA370222C6B110C
-:1050CB00800019222B6D7B32246BAF322D6DC35AAE
-:1050DB004FC5212D6D343AA570BEC2FD5035C1C9E7
-:1050EB00C5212D6D343AA570BEC2FD50CD1551C3EF
-:1050FB0013512A2B6D222C6B11800019222B6D3E24
-:10510B007F32246BC1C35A4FC1C92AA370222B6DA6
-:10511B00222C6B2A2C6BEB21800019222C6B0E1A84
-:10512B00CD8251115C000E15CD8251B7C27A51213F
-:10513B002D6D35C21E51CD7A51C35A4F3A246BFE99
-:10514B0080CA62512A2C6B3DFA5C51361A23C3522A
-:10515B0051CDEB50C35F4F3A2D6DB7CA6F51CD1583
-:10516B0051C35F4F0E10115C00CD8251C35A4F11CA
-:10517B0080000E1AC38251F53AAD63A7CA9F5179CD
-:10518B00FE01CAA351FE06CAA851FE0ACAB251FEBD
-:10519B000BCAD551F1C30500F1CDEA51C97B3CC215
-:1051AB009F51F1CDEA51C9F113CDEA51FE0DCAD38E
-:1051BB0051FE0ACAB451F526001A6F26001319F1D5
-:1051CB00771BEB34EBC3B4511BC9F1E5D511E1638C
-:1051DB002ABB63197ED1E1FE1A3EFFC0C37752E5AD
-:1051EB00D53AAD63E601CA205211E1632ABB6319BC
-:1051FB007E2ABB632322BB63CDA352F57DA7F20F9F
-:10520B0052CD5352F1D1E1FE0ACAEA51FE1AC0CD7A
-:10521B0077523E0DC911A26A3AA16A6F3AA26ABDD2
-:10522B00F23C523AAD63E6EF32AD633E1AF5C30F73
-:10523B00527D2600193C32A16A7EFE3BC24C523E87
-:10524B000DCDA352F5C30F52C5D5E50E1A11E1636F
-:10525B00CD82510E1411BD63CD8251A7C47752215B
-:10526B00000022BB63CD7A51E1D1C1C93AAD63E6EF
-:10527B00FE32AD630E1011BD63CD8251CD7A51C993
-:10528B00F5E52A2667232226677CB5C2A0522A2879
-:10529B006723222867E1F1C9FE0ACAC052FE0DCA74
-:1052AB00C052FE1ACAC052F5C5D5E55F0E02CD0538
-:1052BB0000E1D1C1F1C97B321F67C3EE52CDF3526E
-:1052CB00FE02F2D652CD0A53C3C852FE04FC6A53F7
-:1052DB0078CD5F5347326264216364CD56533A1FD6
-:1052EB006777C95FCD1D70C93A61644F3A626447F5
-:1052FB007891FA07533E7F9081C309537990C9E5A2
-:10530B00D5C5F53A2C67A7CA4D53CD5253A7CA4DF5
-:10531B00532161647E23BECA4D532BCD5F53326143
-:10532B00642323CD56534E3A9A66FE13C24953C596
-:10533B00CDF352C1FE04CA4D53C5CDA453C179CD93
-:10534B00EE52F1C1D1E1C9CD2070C9F5856F3E0098
-:10535B008C67F1C9C53C473E7F9078C1C0AFC9F59A
-:10536B00C5D5E53A6E62A7CA87533E13329A66CD0E
-:10537B00AF4E5FCD0B70118C53CD7770E1D1C1F176
-:10538B00C90D0A5B584F46462073656E7420746FC7
-:10539B0020686F73745D0D0A24F5C5D5E53A6E620E
-:1053AB00A7CAC253AF329A663E11CDAF4E5FCD0B3B
-:1053BB007011C753CD7770E1D1C1F1C90D0A5B589C
-:1053CB004F4E2073656E7420746F20686F73745D1D
-:1053DB000D0A24C5D5E521A16C060A772305C2E683
-:1053EB0053E1D1C1C9F5C5D5E511A96C21AA6C064C
-:1053FB00091A771B2B05C2FC53E1D1C1F1C93EFF42
-:10540B003222670E201EFFCD82516F2600CD234F17
-:10541B00AF322267C91EFF0E06CD8251C932A16C75
-:10542B007D916F7C98673AA16CC9AF32A36C1A134C
-:10543B00FE24C8D5F55FCD1770F1D1FE0AC23954E1
-:10544B003AA36C3C32A36CFE14C23954D5CD604FD9
-:10545B00D1C335544350534441542E41534D20280E
-:10546B00313929202032392D4D61722D31393931A5
-:10547B00244B65726D69742D38302076342E3131A2
-:10548B00202420686173206265656E206275696CEB
-:10549B00742066726F6D2074686520666F6C6C6F1C
-:1054AB0077696E67206D6F64756C65733A244B6515
-:1054BB00726D69742D383020206E6E783A3E240D53
-:1054CB000A240D0A3F556E7265636F676E697A65C4
-:1054DB006420636F6D6D616E64240D0A3F4E6F74B3
-:1054EB0020636F6E6669726D6564243F556E6162F1
-:1054FB006C6520746F207265636569766520696ED3
-:10550B006974696174650D0A243F556E61626C653F
-:10551B0020746F20726563656976652066696C65BA
-:10552B00206E616D650D0A243F556E61626C6520BE
-:10553B00746F207265636569766520656E64206F94
-:10554B00662066696C650D0A243F556E61626C6559
-:10555B0020746F2072656365697665206461746180
-:10556B000D0A243F4469736B2066756C6C0D0A241D
-:10557B003F4469726563746F72792066756C6C0D4C
-:10558B000A243F556E61626C6520746F20726563EF
-:10559B006569766520616E2061636B6E6F776C65F4
-:1055AB006467656D656E742066726F6D20746865D7
-:1055BB0020686F73740D0A240D0A3F556E61626C7F
-:1055CB006520746F2066696E642066696C650D0AD0
-:1055DB00243F556E61626C6520746F2072656E613D
-:1055EB006D652066696C65240D0A3F4469736B20F9
-:1055FB0066756C6C240D0A3F556E61626C65207488
-:10560B006F2074656C6C20686F73742074686174A0
-:10561B00207468652073657373696F6E20697320DE
-:10562B0066696E6973686564240D0A3F556E616225
-:10563B006C6520746F2074656C6C20686F737420BC
-:10564B00746F206C6F676F7574240D0A3F4B657216
-:10565B006D697420686173206E6F74206265656E6E
-:10566B0020636F6E6669677572656420666F722062
-:10567B0061207461726765742073797374656D242E
-:10568B000D0A3F436F6E73697374656E63792063A4
-:10569B006865636B206F6E20636F6E6669677572EA
-:1056AB006174696F6E206661696C6564240D0A3FD5
-:1056BB004572726F722077726974696E6720746FAE
-:1056CB00206C6F672066696C650D0A240D0A3F49D3
-:1056DB006E76616C69642075736572206E756D6290
-:1056EB006572240D0A3F496E76616C6964205061C6
-:1056FB0075736520706172616D65746572240D0A36
-:10570B003F496E76616C6964204255464645522D81
-:10571B0053495A4520706172616D65746572240D31
-:10572B000A3F496E76616C6964207061636B6574C6
-:10573B00206C656E6774682028746F6F206C6F6EB9
-:10574B006729240D0A3F496E76616C6964204368B2
-:10575B0065636B74797065240D0A3F546F6F206D10
-:10576B00616E792072657472696573240D0A3F4608
-:10577B0061696C656420746F2065786368616E671E
-:10578B006520706172616D6574657273240D0A3FDB
-:10579B004661696C656420746F2072656365697618
-:1057AB006520696E70757420737472696E672069F9
-:1057BB006E20616C6C6F7465642074696D65240D6B
-:1057CB000A3F46696C6520616C726561647920657E
-:1057DB0078697374732407436F6D706C65746564BB
-:1057EB0024074661696C6564242552656E616D6999
-:1057FB006E672066696C6520746F20240D0A5B430D
-:10580B006C6F73696E6720746865206C6F672066B8
-:10581B00696C655D240D0A5B436F6E6E6563746521
-:10582B006420746F2072656D6F746520686F73747C
-:10583B002E20205479706520244320746F207265CC
-:10584B007475726E3B0D0A207479706520243F20AD
-:10585B00666F7220636F6D6D616E64206C6973741B
-:10586B005D0D0A240D0A5B436F6E6E656374696F81
-:10587B006E20636C6F7365642C206261636B2061B7
-:10588B0074206D6963726F5D24436F6E74726F6CFD
-:10589B002D24204E6F7420696D706C656D656E7470
-:1058AB0065642E2420284E6F7420696D706C656DB5
-:1058BB00656E746564290D0A2407496E74657272EE
-:1058CB007570746564240909202020204469726571
-:1058DB0063746F727920666F7220647269766520CB
-:1058EB006E6E783A0D0A240D0A09094472697665C1
-:1058FB002024202068617320244B20627974657307
-:10590B0020667265650D0A240D0A46696C6528735D
-:10591B002920657261736564240D0A0D0A5B54724C
-:10592B00616E736D697474696E672066696C65204E
-:10593B00746F20686F73743A0D0A20312E204C69F6
-:10594B006E6573206175746F6D61746963616C6CE6
-:10595B00792073656E742C20616E64207761697495
-:10596B0020666F7220706F737369626C652072654D
-:10597B00706C790D0A20322E20434F4E54524F4CEF
-:10598B002D432061626F727473207472616E736643
-:10599B0065720D0A20332E204966207472616E7376
-:1059AB006665722068616E67732C20747279206152
-:1059BB002072657475726E20746F20636F6E7469DC
-:1059CB006E75650D0A20342E206F6E206578697414
-:1059DB002C20796F752077696C6C20626520706C58
-:1059EB006163656420696E20434F4E4E45435420DE
-:1059FB0073746174652E0D0A245220746F207365C5
-:105A0B006E64207468652073616D65206C696E65CA
-:105A1B0020616761696E2C0D0A2020206F72207443
-:105A2B0079706520244320746F2061626F7274203B
-:105A3B007472616E736D697373696F6E2E5D0D0A8F
-:105A4B00240D0A5B5472616E736D697373696F6EAB
-:105A5B0020646F6E652E20436F6E6E656374656494
-:105A6B00206E6F726D616C6C7920746F2072656D36
-:105A7B006F746520686F73742C0D0A2074797065D0
-:105A8B00202453656E64696E672E2E2E2452656337
-:105A9B00656976696E672E2E2E24075761726E69C3
-:105AAB006E673A2065696768746820626974206361
-:105ABB00616E6E6F742062652073656E74240D0ABF
-:105ACB00466F722068656C702C2074797065203F6E
-:105ADB0020617420616E7920706F696E7420696E1D
-:105AEB00206120636F6D6D616E64240D0A5B4C6FDA
-:105AFB006767696E672073757370656E6465645D47
-:105B0B000D0A240D0A5B4C6F6767696E672072651F
-:105B1B0073756D65645D0D0A240D0A5B5472616EBD
-:105B2B00736D697373696F6E2041626F7274656414
-:105B3B002E20436F6E6E6563746564206E6F726D9D
-:105B4B00616C6C7920746F2072656D6F7465206861
-:105B5B006F73742C0D0A207479706520240D0A0D57
-:105B6B000A5B4175746F6D61746963616C6C79204C
-:105B7B00726563656976696E673B20747970652021
-:105B8B005E4320746F2061626F72745D0D0A0D0AA3
-:105B9B00240D0A0D0A202A202A202A205072657310
-:105BAB007320616E79206B657920746F20636F6E43
-:105BBB0074696E7565202A202A202A200D0A0D0A89
-:105BCB00240D0A5479706520746865206E65772002
-:105BDB00657363617065206368617261637465727C
-:105BEB003A2020240D0A5479706520746865206E64
-:105BFB0065772054414320696E74657263657074D8
-:105C0B00206368617261637465723A2020240D0A07
-:105C1B0047697665207468652073746172742D6FA3
-:105C2B00662D7061636B6574206368617261637468
-:105C3B0065723A20240D0A547970652074686520CA
-:105C4B006E65772070616464696E6720636861724A
-:105C5B0061637465723A20240D0A522053656E6499
-:105C6B00207468652073616D65206C696E652061B9
-:105C7B006761696E240D0A51202053757370656E30
-:105C8B0064206C6F6767696E670D0A52202052653E
-:105C9B0073756D65206C6F6767696E67240D0A3FBE
-:105CAB00202054686973206D6573736167650D0AF5
-:105CBB00432020436C6F73652074686520636F6E9F
-:105CCB006E656374696F6E0D0A302020287A6572D9
-:105CDB006F29205472616E736D69742061204E556B
-:105CEB004C4C0D0A502020546F67676C6520707206
-:105CFB00696E746572206F6E2F6F66660D0A532086
-:105D0B0020537461747573206F662074686520630B
-:105D1B006F6E6E656374696F6E240D0A54797069CA
-:105D2B006E6720616E6F7468657220242077696CD2
-:105D3B006C2073656E6420697420746F20746865C1
-:105D4B0020686F73740D0A0D0A436F6D6D616E647D
-:105D5B003E240D0A5472616E736D697474696E67BB
-:105D6B0020612066696C65240D0A4175746F72653C
-:105D7B006365697665206973240D0A4C6F63616CEA
-:105D8B00206563686F24206F6E24206F6666240D78
-:105D9B000A466C6F7720636F6E74726F6C240D0AFA
-:105DAB005465726D696E616C20646973706C617996
-:105DBB002069732024524547554C41522451554973
-:105DCB004554240D0A5465726D696E616C20656DC6
-:105DDB00756C6174696F6E20697320240D0A4669B6
-:105DEB006C65204D6F6465242064656661756C7409
-:105DFB0024204153434949242062696E61727924FE
-:105E0B000D0A446973706C61792066696C65207347
-:105E1B00697A65206F6E204449524543544F52595D
-:105E2B0020636F6D6D616E64240D0A49424D2066CF
-:105E3B006C6167240D0A446973706F736974696FC1
-:105E4B006E20666F7220696E636F6D706C65746522
-:105E5B002066696C657320697324206469736361C0
-:105E6B00726424206B656570240D0A46696C65208D
-:105E7B007761726E696E67240D0A5072696E746574
-:105E8B007220636F7079240D0A4C6F6767696E67B8
-:105E9B0020746F2024206973242073757370656ED2
-:105EAB00646564240D0A53454E4420737461727407
-:105EBB002D6F662D706B74206368617220205E24D9
-:105ECB000D0A524543454956452073746172742D32
-:105EDB006F662D706B74206368617220205E240DD9
-:105EEB000A53454E44207061636B6574206C656E7C
-:105EFB006774682020240D0A5245434549564520B6
-:105F0B007061636B6574206C656E67746820202408
-:105F1B000D0A45736361706520636861723A2024D2
-:105F2B000D0A4D756C74692D736563746F72206205
-:105F3B007566666572696E672061742024206F66D2
-:105F4B002061206D6178696D756D206F6620240D61
-:105F5B000A5472616E736D69742070726F746F6323
-:105F6B006F6C20636861723A20240D0A426C6F6378
-:105F7B006B20636865636B20747970653A20242D00
-:105F8B00636861726163746572240D0A46696C659E
-:105F9B0020434F4C4C4953494F4E3A2020240D0A75
-:105FAB005061726974793A20246E6F6E65246D614D
-:105FBB00726B247370616365246F6464246576650A
-:105FCB006E240D0A506F727420696E2075736520F4
-:105FDB0069733A20240D0A43757272656E742073CF
-:105FEB00706565642069733A20242062707324699C
-:105FFB006E64657465726D696E61746520286E6F71
-:10600B00742053455429240D0A54696D6572240D6F
-:10601B000A43757272656E742054414354726170F9
-:10602B00205374617475732F496E74657263657058
-:10603B0074204368617261637465723A2020240D89
-:10604B000A43757272656E742075736572206E7576
-:10605B006D6265723A2020240D0A4465627567678C
-:10606B00696E67240D0A43757272656E74206465E0
-:10607B006661756C74206469736B3A202420202050
-:10608B00202020202020202020202020240D0A3F0B
-:10609B00536F7572636520616E64206465737469F8
-:1060AB006E6174696F6E2066696C657320746865C8
-:1060BB002073616D65240D0A3F46696C65206E6F18
-:1060CB007420666F756E64240D0A3F50726F677291
-:1060DB00616D206572726F723A2020496E76616C29
-:1060EB00696420434F4D4E442063616C6C240D0A50
-:1060FB003F416D626967756F7573240D0A3F496C7B
-:10610B006C6567616C2043502F4D2066696C652070
-:10611B0073706563696669636174696F6E240D0AD8
-:10612B003F57696C642D6361726473206E6F7420CA
-:10613B00616C6C6F77656420696E2066696C652095
-:10614B0073706563696669636174696F6E240D0AA8
-:10615B003F496E76616C69642075736572206E754C
-:10616B006D626572240D0A3F496E76616C6964201D
-:10617B005C20706172616D657465722420436F6E73
-:10618B006669726D207769746820636172726961E8
-:10619B0067652072657475726E2420456E74657226
-:1061AB002061206E756D6265722420436F6E666987
-:1061BB00726D2077697468206361727269616765BB
-:1061CB002072657475726E206F7220656E746572C5
-:1061DB00206D6F7265243C5353746174653A3E2095
-:1061EB00003C5253746174653A3E20003C44617428
-:1061FB0061207472616E736D69747465643E200006
-:10620B003C44617461207265636569766564202026
-:10621B00203E20000D0A000D0A4E65772066696C42
-:10622B00653A20240D0A50617373776F72643A20BC
-:10623B00240D0A4163636F756E743A20240D0A4E68
-:10624B006577206E616D653A20240D0A4D65737379
-:10625B006167653A20240D0A4F7074696F6E733A4B
-:02626B002024ED
-:01626E00002F
-:03630C000000008E
-:10639400000001010000000000260000004B4552EF
-:1063A4004D495420204C4F470000FF004B45524DAF
-:0763B40049542020494E4925
-:0463C90000000000D0
-:0463DD0000000000BC
-:04656D00000000002A
-:016671000028
-:046696000000000000
-:0A672000000000000000000000006F
-:01672C00006C
-:016A3D00FF59
-:016AA10002F2
-:016B22000072
-:046B2500000000006C
-:106B43000000000000000000000000000000000042
-:036B53000000013E
-:026C19000D2448
-:016CA00000F3
-:016CAD0000E6
-:046D910000000000FE
-:107000000000000000000000C30000C30000C30037
-:1070100000C30000C30000C30000C30000C30000A1
-:10702000C30000C30000C30000C30000C30000C3CE
-:107030000000C30000C30000C30000C30000C30081
-:1070400000C30000C30000C30000C30000C3000071
-:10705000C30000C30000C30000C30000C30000C39E
-:107060000000C30000C30000C30000C30000C30051
-:0A70700000C30000C30000C30000CD
-:00012700D8
diff --git a/cpxac.asm b/cpxac.asm
new file mode 100644
index 0000000..611f22a
--- /dev/null
+++ b/cpxac.asm
@@ -0,0 +1,762 @@
+IF NOT lasm
+.printx * CPXAC.ASM *
+ENDIF ;NOT lasm
+; KERMIT - (Celtic for "FREE")
+;
+; This is the CP/M-80 implementation of the Columbia University
+; KERMIT file transfer protocol.
+;
+; Version 4.0
+;
+; Copyright June 1981,1982,1983,1984,1985
+; Columbia University
+;
+; Originally written by Bill Catchings of the Columbia University Center for
+; Computing Activities, 612 W. 115th St., New York, NY 10025.
+;
+; Contributions by Frank da Cruz, Daphne Tzoar, Bernie Eiben,
+; Bruce Tanner, Nick Bush, Greg Small, Kimmo Laaksonen, Jeff Damens, and many
+; others.
+;
+;
+;
+
+;
+; Keep module name, edit number, and last revision date in memory.
+;
+family: db 'CPXCP.ASM (1) 3-DEC-2015$' ; First entry for V4.11
+
+;
+; Assembly time message to let me know I'm building the right version.
+;
+
+.printx * Assembling Kermit-80 for AVR-CP/M *
+
+
+
+SC16IS740_ADDR equ 90H ;SC16IS740 I2C address. (8bit, A0=VDD, A1=VDD)
+OUTSIZE equ 64
+
+; Virtual I2C Interface
+
+VI2C_STAT equ 05h
+VI2C_CTRL equ 05h
+VI2C_BLEN equ 06h
+VI2C_ADR equ 07h
+VI2C_BSIZ equ 66 ;largest message size including address byte (SLA)
+
+;----------------------------- ISC16IS740 UART -------------------------------
+I2C_UART_PORT equ 50H
+
+I2C_UART_RHR equ I2C_UART_PORT+00H ;R Receive Holding
+I2C_UART_THR equ I2C_UART_PORT+00H ;W Transmit Holding
+I2C_UART_IER equ I2C_UART_PORT+01H ;R/W Interrupt Enable
+I2C_UART_FCR equ I2C_UART_PORT+02H ;W FIFO Control
+ TX_FIFO_RES equ 04H ; TX FIFO reset
+ RX_FIFO_RES equ 02H ; RX FIFO reset
+ FIFO_ENABLE equ 01H ; FIFO enable
+
+I2C_UART_IIR equ I2C_UART_PORT+02H ;R Interrupt Identification
+I2C_UART_LCR equ I2C_UART_PORT+03H ;R/W Line Control
+ DLAB equ 80H ; Devisor latch enable
+ WLS0 equ 01H ; Word Length Select Bit 0
+ WLS1 equ 02H ; Word Length Select Bit 1 for 8 bit word
+ STB equ 04H ; Stop bit count - 2 stop bits
+
+I2C_UART_MCR equ I2C_UART_PORT+04H ;R/W Modem Control
+ RTS equ 02H ;RTS pin, 1 = active (low)
+ DTR equ 01H ;DTR pin (not on '740)
+I2C_UART_LSR equ I2C_UART_PORT+05H ;R Line Status
+ TXE equ 40H ; THR and TSR empty
+ TXRDY equ 20H ; THR empty
+ RX_FE equ 08H ; Framig error
+ RX_PE equ 04H ; Parity error
+ RX_OE equ 02H ; Overrun error
+ RXRDY equ 01H ; Receved byte available
+I2C_UART_MSR equ I2C_UART_PORT+06H ;R Modem Status
+I2C_UART_SPR equ I2C_UART_PORT+07H ;R/W Scratchpad
+I2C_UART_TCR equ I2C_UART_PORT+06H ;R/W Transmission Control
+I2C_UART_TLR equ I2C_UART_PORT+07H ;R/W Trigger Level
+I2C_UART_TXLVL equ I2C_UART_PORT+08H ;R Transmit FIFO Level
+I2C_UART_RXLVL equ I2C_UART_PORT+09H ;R Receive FIFO Level
+I2C_UART_EFCR equ I2C_UART_PORT+0FH ;R/W Extra Features
+I2C_UART_DLL equ I2C_UART_PORT+00H ;R/W divisor latch LSB
+I2C_UART_DLH equ I2C_UART_PORT+01H ;R/W divisor latch MSB
+I2C_UART_EFR equ I2C_UART_PORT+02H ;R/W Enhanced Feature
+I2C_UART_XON1 equ I2C_UART_PORT+04H ;R/W Xon1 word
+I2C_UART_XON2 equ I2C_UART_PORT+05H ;R/W Xon2 word
+I2C_UART_XOFF1 equ I2C_UART_PORT+06H ;R/W Xoff1 word
+I2C_UART_XOFF2 equ I2C_UART_PORT+07H ;R/W Xoff2 word
+
+
+
+z80 set TRUE ;This one emulates an Z80.
+
+
+ .z80
+
+sysxin: ; continuation of system initialisation from sysinit
+
+ call speedtest
+ call prspeedmsg
+
+ ld hl,6 ;set default baud rate
+ ld (speed),hl
+ ex de,hl
+ call sysspd
+
+ ld a,RTS+DTR
+ out (I2C_UART_MCR),a
+ ret
+
+; ld a,07H ;Enable and clear fifos
+; out (I2C_UART_FCR),a ;
+; ld a,03H ;8N1
+; out (I2C_UART_LCR),a ;
+
+prspeedmsg:
+ push af
+ ld de,freqmsg
+ call prtstr
+ pop af
+ cp 13+1
+ jr c,$+3
+ xor a
+ ld e,a
+ ld d,0
+ ld hl,fm_tab
+ add hl,de
+ add hl,de
+ ld e,(hl)
+ inc hl
+ ld d,(hl)
+ call prtstr
+ ld de,fdimmsg
+ call prtstr
+ ret
+
+mkftab macro x
+ irp y,<x>
+fm&y:
+ db '&y','$'
+ endm
+fm_tab:
+ irp y,<x>
+ dw fm&y
+ endm
+ endm
+
+
+freqmsg:
+ db 'UART crystal frequency: ','$'
+ mkftab <?,1.8432,3.6864,5.5296,7.3728,9.216,11.0592,12.9024,14.7456,16.5888,18.432,20.2752,22.1184,23.9616>
+fdimmsg:
+ db ' MHz.',cr,lf,'$'
+
+
+;
+; system-dependent KERMIT termination processing
+; If we've changed anything, this is our last chance to put it back.
+;
+sysexit:
+ ret
+
+;
+; system-dependent processing for start of CONNECT command
+;
+syscon:
+ ret
+
+conmsg: ; Messages printed when entering transparent (CONNECT) mode:
+
+ db '$'
+
+;
+; syscls - system-dependent close routine
+; called when exiting transparent session.
+;
+syscls:
+ ret
+
+ .8080
+
+;
+; sysinh - help for system-dependent special functions.
+; called in response to <escape>?, after listing all the
+; system-independent escape sequences.
+;
+sysinh:
+ lxi d, inhlps
+ call prtstr
+ ret
+
+; Additional, system-dependent help for transparent mode
+; (two-character escape sequences)
+inhlps:
+ db cr,lf,'B Transmit a BREAK (0.3s)'
+ db cr,lf,'L Transmit a LONG BREAK (1.8s)'
+ db '$' ; string terminator
+
+ .z80
+;
+; sysint - system dependent special functions
+; called when transparent escape character has been typed;
+; the second character of the sequence is in A (and in B).
+; returns:
+; non-skip: sequence has been processed
+; skip: seqence was not recognized
+;
+sysint:
+ and 5FH ; convert lower case to upper, for testing...
+ cp 'B' ; send break ?
+ jr z,sendbr ; then jump to send break routine
+ cp 'L' ; long break ?
+ jr z,longbr ; then jump to long break routine
+ jp rskp ; take skip return - command not recognised
+
+;
+; Break routines
+;
+longbr:
+ ld e,180 ; time for long break is 1800 ms
+ jr setbit
+
+sendbr:
+ ld e,25 ; time for break is 300 ms
+
+setbit:
+ in a,(I2C_UART_LCR)
+ set 6,a ; Break contol bit
+ out (I2C_UART_LCR),a
+;
+; Now, delay for duration of hangup or break
+ ld a,e ; delay count
+ call delay
+;
+; Time's up. Put transmitter back in normal state and return.
+
+ in a,(I2C_UART_LCR)
+ res 6,a ; Break contol bit
+ out (I2C_UART_LCR),a
+ ret ; done.
+
+ .8080
+;
+; sysflt - system-dependent filter
+; called with character in E.
+; if this character should not be printed, return with A = zero.
+; preserves bc, de, hl.
+; note: <xon>,<xoff>,<del>, and <nul> are always discarded.
+;
+sysflt:
+ mov a,e ; get character for testing
+ ret
+
+;
+; mdmflt - modem filter
+; called with character to be sent to printer in E
+; with parity set as appropriate.
+; return with accumulator = 0 do do nothing,
+; <> 0 to send char in E.
+mdmflt:
+ mov a,e ; get character to test
+ ret
+
+;
+; prtflt - printer filter
+; called with character to be sent to printer in E
+; returns with a = 0 to do nothing
+; a <> 0 to print it.
+;
+; this routine for those printer that automatically insert
+; a lf on cr, or cr for lf. Should this be shifted to
+; the system indep. stuff, in say 4.06?
+;
+prtflt:
+ mov a,e ; get character to test
+
+IF FALSE ; strip out lf from printer stream
+ ani 7fh ; make sure it is parity less
+ cpi lf ; is it a line feed?
+ rnz ; no, print it
+; xra a ; yes, don't.
+
+ENDIF
+
+ ret
+
+;
+; system-dependent processing for BYE command.
+;
+sysbye:
+ ret
+
+;
+; This is the system-dependent command to change the baud rate.
+; DE contains the two-byte value from the baud rate table; both
+; bytes of this value are also stored in 'speed'.
+;
+ .z80
+sysspd:
+ ld hl,0
+ ld a,(clk_div)
+ ld b,a
+sysspd_1:
+ add hl,de
+ djnz sysspd_1
+ ld a,l
+ ld (sysspd_dll),a
+ ld a,h
+ ld (sysspd_dlh),a
+
+ ld hl,sysspd_tab
+ call ioinil
+
+ in a,(I2C_UART_MSR) ;Clear Modem Status Register
+ in a,(I2C_UART_LSR) ;Clear Line Status Register
+ in a,(I2C_UART_RHR) ;Clear Receiver Buffers
+ in a,(I2C_UART_RHR)
+ ret
+
+sysspd_tab:
+ db (sysspd_tab_end - ($+1))/2
+ db I2C_UART_LCR, DLAB+03H ;Set devisor latch access bit
+ db I2C_UART_DLL
+sysspd_dll:
+ ds 1 ;1200 bit/s at 1.832 MHz
+ db I2C_UART_DLH
+sysspd_dlh:
+ ds 1 ;Out to the MSB divisor port
+ db I2C_UART_LCR, 03H ;Disable Divisor Access Latch
+ db I2C_UART_FCR, 07H ;Clear and enable fifos
+ db I2C_UART_MCR, 00H ;Enable loopback
+ db I2C_UART_IER, 0 ;Set no interrupts
+sysspd_tab_end:
+
+
+
+;
+; Speed tables
+; (Note that speed tables MUST be in alphabetical order for later
+; lookup procedures, and must begin with a value showing the total
+; number of entries. The speed help tables are just for us poor
+; humans.
+;
+; db string length, string, divisor (2 bytes or 1 word, ab)
+; the data byte a is return in A and E, and b in D
+; only byte 'a' is the key for the table
+
+spdtbl: db 15 ; Number of entries
+ db 3,'110$'
+ dw 1047
+ db 6,'115200$'
+ dw 1
+ db 4,'1200$'
+ dw 96
+ db 3,'150$'
+ dw 768
+ db 5,'19200$'
+ dw 6
+ db 4,'2400$'
+ dw 48
+ db 5,'28800$'
+ dw 5
+ db 3,'300$'
+ dw 384
+ db 5,'38400$'
+ dw 3
+ db 3,'450$'
+ dw 288
+ db 4,'4800$'
+ dw 24
+ db 5,'57600$'
+ dw 2
+ db 3,'600$'
+ dw 192
+ db 2,'75$'
+ dw 1536
+ db 4,'9600$'
+ dw 12
+IF 0
+sphtbl: db cr,lf,' 75 110 150 300 450 600 1200 2400'
+ db cr,lf,'4800 9600 19200 28800 38400 57600 115200$'
+ENDIF
+
+sphtbl: db cr,lf,' 110 300 600 2400 9600 28800 57600'
+ db cr,lf,' 75 150 450 1200 4800 19200 38400 115200$'
+
+
+speedtest:
+ ld hl,spt_tab
+ call ioinil
+
+ in a,(I2C_UART_MSR) ;Clear Modem Status Register
+ in a,(I2C_UART_LSR) ;Clear Line Status Register
+ in a,(I2C_UART_RHR) ;Clear Receiver Buffers
+ in a,(I2C_UART_RHR)
+
+ ld a,2 ;start write transaction
+ out (VI2C_CTRL),a
+
+ ; get time stamp
+ in a,(41H) ;lsb ms
+ ld e,a
+ in a,(42H) ;msb ms
+ ld d,a
+ in a,(43H) ;lsb seconds
+ ld c,a
+
+spt_1:
+ in a,(I2C_UART_RXLVL)
+ cp 60
+ jr nz,spt_1
+
+ ; get 2nd time stamp
+ in a,(41H) ;lsb ms
+ ld l,a
+ in a,(42H) ;msb ms
+ ld h,a
+ in a,(43H) ;lsb seconds
+ sub c
+ jr z,spt_3
+ ld bc,1000
+spt_2:
+ add hl,bc
+ dec a
+ jr nz,spt_2
+spt_3:
+ sbc hl,de
+ ld d,h
+ ld e,l
+ inc hl
+ srl h
+ rr l
+ ld bc,500
+ add hl,bc
+
+ xor a ;clear carry
+spt_4:
+ inc a
+ sbc hl,de
+ jr nc,spt_4
+ dec a
+ ld (clk_div),a
+ ret
+
+spt_tab:
+ db (spt_tab_end - ($+1))/2
+ db I2C_UART_LCR, DLAB+03H ;Set devisor latch access bit
+ db I2C_UART_DLL, low 96 ;1200 bit/s at 1.832 MHz
+ db I2C_UART_DLH, high 96 ;Out to the MSB divisor port
+ db I2C_UART_LCR, 03H ;Disable Divisor Access Latch
+ db I2C_UART_FCR, 07H ;Clear and enable fifos
+ db I2C_UART_MCR, 10H ;Enable loopback
+ db I2C_UART_IER, 0 ;Set no interrupts
+ db VI2C_ADR+0, low outbuf
+ db VI2C_ADR+1, high outbuf
+ db VI2C_BLEN, 60+2
+spt_tab_end:
+
+;----------------------------------------------------------------------
+; output bytes to ports
+;
+; hl: tables of port,value pairs:
+; db n ;number of pairs
+; db port1,val1, port2,val2,... portn,valn
+; ...
+; db 0 ; Terminate table
+
+ioinil:
+ push bc
+ ld b,(hl) ;count
+ inc hl
+io1_lp:
+ ld c,(hl) ;port address
+ inc hl
+ outi
+ jr nz,io1_lp
+ pop bc
+ ret
+
+;
+; This is the system-dependent SET PORT command.
+; HL contains the argument from the command table.
+;
+sysprt:
+ ret
+
+prttbl EQU 0 ; SET PORT is not supported
+prhtbl EQU 0
+
+;
+; selmdm - select modem port
+; selcon - select console port
+; selmdm is called before using inpmdm or outmdm;
+; selcon is called before using inpcon or outcon.
+; For iobyt systems, diddle the I/O byte to select console or comm port;
+; For the rest, does nothing.
+; preserves bc, de, hl.
+;
+selmdm:
+ ret
+
+selcon:
+IF 1
+ jr omflush
+ELSE
+ ret
+ENDIF
+
+;
+; Get character from console, or return zero.
+; result is returned in A. destroys bc, de, hl.
+;
+inpcon:
+ ld c,dconio ;Direct console I/O BDOS call.
+ ld e,0FFH ;Input.
+ call BDOS
+
+ ret
+
+;
+; Output character in E to the console.
+; destroys bc, de, hl
+;
+outcon:
+ ld c,dconio ;Console output bdos call.
+ call bdos ;Output the char to the console.
+
+ ret
+
+;
+; outmdm - output a char from E to the modem.
+; the parity bit has been set as necessary.
+; returns nonskip; bc, de, hl preserved.
+;
+outmdm:
+IF 0
+ in a,(I2C_UART_LSR) ;Get the output done flag.
+ and TXRDY ;Is it set?
+ jr z,outmdm ;If not, loop until it is.
+ ld a,e
+ out (I2C_UART_THR),a ;Output it.
+ENDIF
+IF 1
+
+ push hl
+ ld hl,(outptr)
+ ld (hl),e ;return buffered char
+ inc hl
+ ld (outptr),hl
+ ld a,(outcnt)
+ inc a
+ ld (outcnt),a
+ cp OUTSIZE
+ jr nc,omflush_1 ;buffer full
+ pop hl
+ ret
+
+omflush:
+ ld a,(outcnt)
+ or a
+ ret z
+
+ scf
+ push hl
+omflush_1:
+ push bc
+ ld c,a ;outcnt
+ ld b,a
+ jr c,$+4
+ ld b,1
+ ld hl,outbuf
+ ld a,h
+ out (VI2C_ADR+1),a
+ ld a,l
+ out (VI2C_ADR+0),a
+omf_0:
+ in a,(I2C_UART_TXLVL)
+ cp b
+ jr c,omf_0
+ cp c
+ jr nc,omf_2
+ ld c,a
+omf_2:
+ ld a,c
+ add a,2
+ out (VI2C_BLEN),a
+ ld a,2 ;start write transaction
+ out (VI2C_CTRL),a
+
+ ld hl,outbuf+2
+ ld (outptr),hl
+ ld a,(outcnt)
+ sub c
+ ld (outcnt),a
+ jr z,omfex
+
+ push de
+ ld d,h
+ ld e,l
+ ld b,0
+ add hl,bc
+ ld c,a
+ ldir
+ pop de
+omfex:
+ pop bc
+ pop hl
+ ret
+ENDIF
+;
+; get character from modem; return zero if none available.
+; for IOBYT systems, the modem port has already been selected.
+; destroys bc, de, hl.
+;
+inpmdm:
+if 0
+ in a,(I2C_UART_LSR) ;Get the port status into A.
+ and RXRDY ;See if the input ready bit is on.
+ ret z ;If not then return.
+
+ in a,(I2C_UART_MCR) ;debug
+ xor RTS
+ out (I2C_UART_MCR),a
+
+ in a,(I2C_UART_RHR);If so, get the char.
+ ret
+endif
+
+if 1
+ ld a,(inpcnt)
+ dec a
+ jp m,imdrdi2c ;buffer empty
+ ld (inpcnt),a
+ ld hl,(inpptr)
+ ld a,(hl) ;return buffered char
+ inc hl
+ ld (inpptr),hl
+ ret
+
+imdrdi2c:
+ in a,(I2C_UART_RXLVL) ;get rx fifo count
+ or a
+ ret z ;fifo is empty, return 0
+
+ ; prepare fifo read
+ inc a ;+ slave address
+ ld (VI2C_BLEN),a
+ ld hl,inbuf
+ ld a,h
+ out (VI2C_ADR+1),a
+ ld a,l
+ out (VI2C_ADR+0),a
+ inc hl
+ ld (hl),0 ;select subaddr 0 (RHR) for next read
+ ld a,3 ;write 1 byte (subaddr.), then read fifo
+ ld (VI2C_CTRL),a
+ in a,(VI2C_CTRL) ;get i2c result
+ xor 01h
+ and 11h ;transfer completed?
+ jr nz,imrdex
+ in a,(VI2C_BLEN) ;get actual transfer count
+
+ sub 2 ;- (slave address + char to return now)
+ jr c,imrdex
+ ld (inpcnt),a ;save new buffer count
+ ld a,(hl)
+ inc hl
+ ld (inpptr),hl
+ ret
+
+imrdex:
+ xor a
+ ret
+endif
+
+ .8080
+
+;
+; flsmdm - flush comm line.
+; Modem is selected.
+; Currently, just gets characters until none are available.
+;
+flsmdm:
+ call inpmdm ; Try to get a character
+ ora a ; Got one?
+ jnz flsmdm ; If so, try for another
+ ret ; Receiver is drained. Return.
+
+
+;
+; lptstat - get the printer status. Return a=0 if ok, or 0ffh if not.
+lptstat:
+IF iobyte ;[33]
+ call bprtst ; get status
+ENDIF ;iobyte[33]
+IF NOT iobyte ;[33]
+ xra a ; assume it is ok.. this may not be necessary
+ENDIF ;iobyte [33]
+ ret
+;
+; outlpt - output character in E to printer
+; console is selected.
+; preserves de.
+;
+outlpt:
+ push d ; save DE in either case
+ call prtflt ; go through printer filter [30]
+ ana a ; if A = 0 do nothing,
+ jz outlp1 ; if a=0 do nothing
+
+outlp1: pop d ; restore saved register pair
+ ret
+
+; delchr - make delete look like a backspace. Unless delete is a printing
+; character, we just need to print a backspace. (we'll output clrspc
+; afterwards)
+delchr:
+
+ mvi e,bs ;get a backspace
+ jmp outcon
+
+; erase the character at the current cursor position
+clrspc: mvi e,' '
+ call outcon
+ mvi e,bs ;get a backspace
+ jmp outcon
+
+; erase the current line
+clrlin: lxi d,eralin
+ jmp prtstr
+
+; erase the whole screen, and go home. preserves b (but not c)
+clrtop: lxi d,erascr
+ jmp prtstr
+
+
+sysver: db 'AVR-CP/M'
+ db '$'
+
+
+clk_div:
+ db 1 ;default div
+
+inpptr: dw 0
+inpcnt: db 0
+inbuf:
+ db SC16IS740_ADDR
+ ds VI2C_BSIZ-1
+
+
+outptr: dw outbuf+2
+outcnt: db 0
+outbuf:
+ db SC16IS740_ADDR
+ db 0 ;RHR subaddress
+ ds OUTSIZE
+
+
+IF lasm
+LINK CPXVDU.ASM ; get terminal defs etc
+ENDIF ;lasm
diff --git a/cpxcom.asm b/cpxcom.asm
index 6123f64..fcd7dfa 100644
--- a/cpxcom.asm
+++ b/cpxcom.asm
@@ -439,7 +439,7 @@ rskp: pop h ; Get the return address
; called by: cpxsys, mfname
;
mover:
-;IF NOT z80 ; 8080's have to do it the hard way
+IF NOT z80 ; 8080's have to do it the hard way
;OBS assume its an 8080 for now - this will work on Z80s anyway.
mov a,m
stax d
@@ -449,10 +449,10 @@ mover:
mov a,b
ora c
jnz mover
-;ENDIF;NOT z80
-;IF z80
-; db 0EDh,0B0h ; Z80 LDIR instruction
-;ENDIF;z80
+ENDIF;NOT z80
+IF z80
+ db 0EDh,0B0h ; Z80 LDIR instruction
+ENDIF;z80
ret
;
diff --git a/cpxswt.asm b/cpxswt.asm
index 1942c41..c018d63 100644
--- a/cpxswt.asm
+++ b/cpxswt.asm
@@ -154,6 +154,12 @@ LINK CPXBEE.ASM
ENDIF ; (beefam AND lasm) - m80 use: INCLUDE from CPXTYP.ASM
+IF (acfam AND lasm)
+; Link to the AVR-CP/M family file
+.printx * linking to the AVRCPM family file*
+LINK CPXAC.ASM
+ENDIF ; (acfam AND lasm) - m80 use: INCLUDE from CPXTYP.ASM
+
; If we have come here, we are assembling the CPXSYS.ASM file
IF robin
diff --git a/cpxtyp.asm b/cpxtyp.asm
index 83528a9..1acf241 100644
--- a/cpxtyp.asm
+++ b/cpxtyp.asm
@@ -248,8 +248,8 @@ TRUE EQU NOT FALSE
; Assembler type. Define the appropriate one TRUE, the rest FALSE. (We can't
; use ASM, because it cannot handle multiple input files)
mac80 EQU FALSE ; For assembly via MAC80 cross-assembler.
-m80 EQU FALSE ; For assembly via Microsoft's M80.
-lasm EQU TRUE ; For assembly via LASM, a public-domain
+m80 EQU TRUE ; For assembly via Microsoft's M80.
+lasm EQU FALSE ; For assembly via LASM, a public-domain
; assembler.
;
; Address at which the overlay should be loaded. This will not
@@ -269,7 +269,7 @@ termin SET FALSE ; we are not using a terminal
; Also set the CPU speed to a default 2.0 Mhz
cpuspd SET 20 ; default to 2 Mhz, in case we dont know
; Assume kit is Z80 based, and set z80 false for non z80 systems.
-;z80 SET TRUE
+z80 SET TRUE
;Which CP/M system hardware are we building KERMIT-80 for?
;One of the following should be TRUE, the rest FALSE:
@@ -363,6 +363,8 @@ hp125 EQU FALSE ;[MF]HP-125 Business Assistant, 8-bit data
; for binary transfers on Data Comm 2)
; set VT52 TRUE
mbee EQU FALSE ; Microbee Systems - Microbee
+avrcpm EQU TRUE ;AVR-CP/M (terminal required)
+
;.. and for Micros, like the MDI, which have "terminals of choice", you must
;select one of these in addition to selecting the micro itself.
@@ -378,7 +380,7 @@ tvi912 EQU FALSE ;[10] TVI912/920
tvi925 EQU FALSE ;TVI925 Display
; (works for Freedom 100 also) [Toad Hall]
vt52 EQU FALSE ;VT52 or equivalent (or H19)
-vt100 EQU FALSE ;VT100 or equivalent
+vt100 EQU TRUE ;VT100 or equivalent
wyse EQU FALSE ;Wyse 100 terminal
;
; Several systems are basically the same, with very slight variations,
@@ -462,6 +464,10 @@ tacval EQU '@' ;Typical TAC intercept character
; trs80 (both), telcon, mmdI, mdI, delphi, ncrdmv,
; cromemco, teletek, osi, lobo
+IF avrcpm ; For the kermit delay loop, a 20Mhz AVR-CP/M
+cpuspd SET 22 ; behaves like a 2.2MHz Z80.
+ENDIF; avrcpm
+
IF z80mu
cpuspd SET 2 ; a PC is about 200khz Z80 equivalent
ENDIF; z80mu
@@ -535,6 +541,7 @@ genfam SET FALSE ; not a genie
trsfam SET FALSE ; not a trs-80 Model 4
z80fam SET FALSE ; not z80mu system
beefam SET FALSE ; not a Microbee system
+acfam SET FALSE ; not avrcpm system
sysfam SET TRUE ; ... but assume the worst, and its in
; the CPXSYS.ASM file
@@ -615,6 +622,11 @@ beefam SET TRUE ; doing a Microbee system
.printx * beefam set TRUE *
ENDIF ; mbee
+IF avrcpm
+acfam SET TRUE ; doing a AVR-CP/M System
+.printx * acfam set TRUE *
+ENDIF ; avrcpm
+
; Now, if none of the above, then its the older CPXSYS.ASM file we want
IF (torfam OR ciffam OR appfam OR norfam OR sanfam OR comfam) AND sysfam
@@ -627,10 +639,10 @@ sysfam SET FALSE ; Were not doing the CPXSYS.ASM file
.printx * sysfam set FALSE *
ENDIF ; (pcwfam OR bbifam OR heafam OR sbfam OR merfam) AND sysfam
-IF (genfam OR trsfam OR z80fam OR beefam) AND sysfam
+IF (genfam OR trsfam OR z80fam OR beefam OR acfam) AND sysfam
sysfam SET FALSE ; Were not doing the CPXSYS.ASM file
.printx * sysfam set FALSE *
-ENDIF ; (genfam OR trsfam OR z80fam OR mbeefam) AND sysfam
+ENDIF ; (genfam OR trsfam OR z80fam OR mbeefam OR acfam) AND sysfam
IF sysfam
.printx * sysfam set TRUE *
@@ -716,6 +728,10 @@ IF beefam
INCLUDE CPXBEE.ASM
ENDIF ;beefam
+IF acfam
+ INCLUDE CPXAC.ASM
+ENDIF ;acfam
+
IF termin ; any terminal selected?
INCLUDE CPXVDU.ASM ;[15] Just in case we need a VDU...
ENDIF ;termin